diff --git a/readline/CHANGELOG b/readline/CHANGELOG
index 9024bdf..350defa 100644
--- a/readline/CHANGELOG
+++ b/readline/CHANGELOG
@@ -337,3 +337,363 @@
 
 configure.in
 	- changed LIBVERSION to 4.1-beta5
+
+				 3/17/2000
+				 ---------
+[readline-4.1 released]
+
+				   3/23
+				   ----
+Makefile.in
+	- remove the `-t' argument to ranlib in the install recipe; some
+	  ranlibs don't have it and attempt to create a file named `-t'
+
+				   3/27
+				   ----
+support/shlib-install
+	- install shared libraries unwritable by anyone on HP-UX
+	- changed symlinks to relative pathnames on all platforms
+
+shlib/Makefile.in
+	- added missing `includedir' assignment, substituted by configure
+
+Makefile.in
+	- added missing @SET_MAKE@ so configure can set $MAKE appropriately
+
+configure.in
+	- add call to AC_PROG_MAKE_SET
+
+				   8/30
+				   ----
+shlib/Makefile.in
+	- change the soname bound into the shared libraries, so it includes
+	  only the major version number.  If it includes the minor version,
+	  programs depending on it must be rebuilt (which may or may not be
+	  a bad thing)
+
+				    9/6
+				    ---
+examples/rlfe.c
+	- add -l option to log input and output (-a option appends to logfile)
+	- add -n option to set readline application name
+	- add -v, -h options for version and help information
+	- change a few things because getopt() is now used to parse arguments
+
+				   9/12
+				   ----
+support/shlib-install
+	- fix up the libname on HPUX 11
+
+				   10/18
+				   -----
+configure.in
+	- changed library version to 4.2-alpha
+
+				   10/30
+				   -----
+configure.in
+	- add -fsigned-char to LOCAL_CFLAGS for Linux running on the IBM
+	  S/390
+
+Makefile.in
+	- added new file, rltypedefs.h, installed by default with `make install'
+
+				   11/2
+				   ----
+compat.c
+	- new file, with backwards-compatibility function definitions
+
+Makefile.in,shlib/Makefile.in
+	- make sure that compat.o/compat.so are built and linked apppropriately
+
+support/shobj-conf
+	- picked up bash version, which means that shared libs built on
+	  linux and BSD/OS 4.x will have an soname that does not include
+	  the minor version number
+
+				   11/13
+				   -----
+examples/rlfe.c
+	- rlfe can perform filename completion for relative pathnames in the
+	  inferior process's context if the OS supports /proc/PID/cwd (linux
+	  does it OK, Solaris is slightly warped, none of the BSDs have it)
+
+				11/17/2000
+				----------
+[readline-4.2-alpha released]
+
+				   11/27
+				   -----
+Makefile.in,shlib/Makefile.in
+	- added dependencies for rltypedefs.h
+
+shlib/Makefile.in
+	- changed dependencies on histlib.h to $(topdir)/histlib.h
+
+				   1/22
+				   ----
+configure.in
+	- changed release version to 4.2-beta
+
+				    2/2
+				    ---
+examples/Makefile.in
+	- build histexamp as part of the examples
+
+				    2/5
+				    ---
+doc/Makefile.in
+	- don't remove the dvi, postscript, html, info, and text `objects'
+	  on a `make distclean', only on a `make maintainer-clean'
+
+				    3/6
+				    ---
+doc/history.{0,3}, doc/history_3.ps
+	- new manual page for history library
+
+doc/Makefile.in
+	- rules to install and uninstall history.3 in ${man3dir}
+	- rules to build history.0 and history_3.ps
+
+				    4/2
+				    ---
+configure.in
+	- changed LIBVERSION to `4.2'
+
+				    4/5
+				    ---
+[readline-4.2 frozen]
+
+				    4/9
+				    ---
+[readline-4.2 released]
+
+				    5/2
+				    ---
+Makefile.in,{doc,examples,shlib}/Makefile.in
+	- added support for DESTDIR installation root prefix, to support
+	  building packages
+
+doc/Makefile.in
+	- add an info `dir' file entry for rluserman.info on `make install'
+	- change man1ext to `.1' and man3ext to `.3'
+	- install man pages with a $(man3ext) extension in the target directory
+	- add support for installing html documentation if `htmldir' has a
+	  value
+
+Makefile.in
+	- on `make install', install from the `shlib' directory, too
+	- on `make uninstall', uninstall in the `doc' and `shlib'
+	  subdirectories, too
+
+support/shlib-install
+	- add `freebsdelf*', `freebsdaout*', Hurd, `sysv4*', `sysv5*', `dgux*'
+	  targets for symlink creation
+
+				    5/7
+				    ---
+configure.in, config.h.in
+	- check for <limits.h>, define HAVE_LIMITS_H if found
+
+				    5/8
+				    ---
+aclocal.m4
+	- pick up change to BASH_CHECK_LIB_TERMCAP that adds check for
+	  libtinfo (termcap-specific portion of ncurses-5.2)
+
+				    5/9
+				    ---
+configure.in
+	- call AC_C_CONST to find out whether or not the compiler supports
+	  `const'
+
+config.h.in
+	- placeholder for `const' define, if any
+
+				   5/10
+				   ----
+configure.in
+	- fix AC_CHECK_PROG(ar, ...) test to specify right value for the
+	  case where ar is not found; should produce a better error message
+
+				   5/14
+				   ----
+configure.in,config.h.in
+	- check for vsnprintf, define HAVE_VSNPRINTF if found
+
+				   5/21
+				   ----
+configure.in, config.h.in
+	- add checks for size_t, ssize_t
+
+				   5/30
+				   ----
+configure.in
+	- update autoconf to version 2.50, use in AC_PREREQ
+	- changed AC_INIT to new flavor
+	- added AC_CONFIG_SRCDIR
+	- AC_CONFIG_HEADER -> AC_CONFIG_HEADERS
+	- call AC_C_PROTOTYPES
+	- AC_RETSIGTYPE -> AC_TYPE_SIGNAL
+
+				   8/22
+				   ----
+configure.in
+	- updated the version number to 4.2a
+
+Makefile.in,shlib/Makefile.in
+	- make sure tilde.o is built -DREADLINE_LIBRARY when being built as
+	  part of the standalone library, so it picks up the right include
+	  files
+
+				   8/23
+				   ----
+support/shlib-install
+	- support for Darwin/MacOS X shared library installation
+
+				   9/24
+				   ----
+examples/readlinebuf.h
+	- a new file, a C++ streambuf interface that uses readline for I/O.
+	  Donated by Dimitris Vyzovitis <vyzo@media.mit.edu>
+
+				   10/9
+				   ----
+configure.in
+        - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ
+
+[readline-4.2a-beta1 frozen]
+
+				   10/15
+				   -----
+configure.in, config.h.in
+	- check for <memory.h>, define HAVE_MEMORY_H if found
+	- check for <strings.h>, define HAVE_STRINGS_H if found
+
+				   10/18
+				   -----
+configure.in, config.h.in
+	- check for isascii, define HAVE_ISASCII if found
+
+configure.in
+	- changed the macro names from bash as appropriate:
+		BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE
+		BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS
+		BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T
+
+				   10/22
+				   -----
+configure.in
+	- check for isxdigit with AC_CHECK_FUNCS
+
+config.h.in
+	- new define for HAVE_ISXDIGIT
+
+				   10/29
+				   -----
+configure.in, config.h.in
+	- check for strpbrk with AC_CHECK_FUNCS, define HAVE_STRPBRK if found
+
+				    11/1
+				    ----
+Makefile.in
+	- make sure DESTDIR is passed to install and uninstall makes in
+	  subdirectories
+	- when saving old copies of installed libraries, make sure we use
+	  DESTDIR for the old installation tree
+
+[readline-4.2a-rc1 frozen]
+
+				   11/2
+				   ----
+Makefile.in, shlib/Makefile.in
+	- don't put -I$(includedir) into CFLAGS
+
+				   11/15
+				   -----
+[readline-4.2a released]
+
+				   11/20
+				   -----
+examples/rlcat.c
+	- new file
+
+examples/Makefile.in
+	- changes for rlcat
+
+				   11/28
+				   -----
+configure.in
+	- default TERMCAP_LIB to -lcurses if $prefer_curses == yes (as when
+	  --with-curses is supplied)
+
+examples/Makefile.in
+	- substitute @LDFLAGS@ in LDFLAGS assignment
+
+				   11/29
+				   -----
+config.h.in
+	- add necessary defines for multibyte include files and functions
+	- add code to define HANDLE_MULTIBYTE if prerequisites are met
+
+configure.in
+	- call BASH_CHECK_MULTIBYTE
+
+				   12/14
+				   -----
+config.h.in
+	- add #undef PROTOTYPES, filled in by AC_C_PROTOTYPES
+
+				   12/17
+				   -----
+config.h.in
+	- moved HANDLE_MULTIBYTE code to rlmbutil.h
+
+rlmbutil.h, mbutil.c
+	- new files
+
+Makefile.in, shlib/Makefile.in
+	- added rules for mbutil.c
+
+				   12/20
+				   -----
+configure.in
+	- added --enable-shared, --enable-static options to configure to
+	  say which libraries are built by default (both default to yes)
+	- if SHLIB_STATUS == 'unsupported', turn off default shared library
+	  building
+	- substitute new STATIC_TARGET, SHARED_TARGET, STATIC_INSTALL_TARGET,
+	  and SHARED_INSTALL_TARGET
+
+Makefile.in
+	- `all' target now depends on (substituted) @STATIC_TARGET@ and
+	  @SHARED_TARGET@
+	- `install' target now depends on (substituted) @STATIC_INSTALL_TARGET@
+	  and @SHARED_INSTALL_TARGET@
+
+INSTALL, README
+	- updated with new info about --enable-shared and --enable-static
+
+				 1/10/2002
+				 ---------
+configure.in
+	- bumped the library version number to 4.3
+
+				   1/24
+				   ----
+Makefile.in,shlib/Makefile.in
+	- changes for new file, text.c, with character and text handling
+	  functions from readline.c
+
+				   2/20
+				   ----
+{configure.config.h}.in
+	- call AC_C_CHAR_UNSIGNED, define __CHAR_UNSIGNED__ if chars are
+	  unsigned by default
+
+				   5/20
+				   ----
+doc/Makefile.in
+	- new maybe-clean target that removes the generated documentation if
+	  the build directory differs from the source directory
+	- distclean target now depends on maybe-clean
diff --git a/readline/CHANGES b/readline/CHANGES
index d2929ab..bc9fe94 100644
--- a/readline/CHANGES
+++ b/readline/CHANGES
@@ -1,3 +1,314 @@
+This document details the changes between this version, readline-4.3,
+and the previous version, readline-4.2a.
+
+1.  Changes to Readline
+
+a.  Fixed output of comment-begin character when listing variable values.
+
+b.  Added some default key bindings for common escape sequences produced by
+    HOME and END keys.
+
+c.  Fixed the mark handling code to be more emacs-compatible.
+
+d.  A bug was fixed in the code that prints possible completions to keep it
+    from printing empty strings in certain circumstances.
+
+e.  Change the key sequence printing code to print ESC as M\- if ESC is a
+    meta-prefix character -- it's easier for users to understand than \e.
+
+f.  Fixed unstifle_history() to return values that match the documentation.
+
+g.  Fixed the event loop (rl_event_hook) to handle the case where the input
+    file descriptor is invalidated.
+
+h.  Fixed the prompt display code to work better when the application has a
+    custom redisplay function.
+
+i.  Changes to make reading and writing the history file a little faster, and
+    to cope with huge history files without calling abort(3) from xmalloc.
+
+j.  The vi-mode `S' and `s' commands are now undone correctly.
+
+k.  Fixed a problem which caused the display to be messed up when the last
+    line of a multi-line prompt (possibly containing invisible characters)
+    was longer than the screen width.
+
+2.  New Features in Readline
+
+a.  Support for key `subsequences':  allows, e.g., ESC and ESC-a to both
+    be bound to readline functions.  Now the arrow keys may be used in vi
+    insert mode.
+
+b.  When listing completions, and the number of lines displayed is more than
+    the screen length, readline uses an internal pager to display the results.
+    This is controlled by the `page-completions' variable (default on).
+
+c.  New code to handle editing and displaying multibyte characters.
+
+d.  The behavior introduced in bash-2.05a of deciding whether or not to
+    append a slash to a completed name that is a symlink to a directory has
+    been made optional, controlled by the `mark-symlinked-directories'
+    variable (default is the 2.05a behavior).
+
+e.  The `insert-comment' command now acts as a toggle if given a numeric
+    argument:  if the first characters on the line don't specify a
+    comment, insert one; if they do, delete the comment text
+
+f.  New application-settable completion variable:
+    rl_completion_mark_symlink_dirs, allows an application's completion
+    function to temporarily override the user's preference for appending
+    slashes to names which are symlinks to directories.
+
+g.  New function available to application completion functions:
+    rl_completion_mode, to tell how the completion function was invoked
+    and decide which argument to supply to rl_complete_internal (to list
+    completions, etc.).
+
+h.  Readline now has an overwrite mode, toggled by the `overwrite-mode'
+    bindable command, which could be bound to `Insert'.
+
+i.  New application-settable completion variable:
+    rl_completion_suppress_append, inhibits appending of
+    rl_completion_append_character to completed words.
+
+j.  New key bindings when reading an incremental search string:  ^W yanks
+    the currently-matched word out of the current line into the search
+    string; ^Y yanks the rest of the current line into the search string,
+    DEL or ^H deletes characters from the search string.
+
+-------------------------------------------------------------------------------
+This document details the changes between this version, readline-4.2a,
+and the previous version, readline-4.2.
+
+1.  Changes to Readline
+
+a.  More `const' and type casting fixes.
+
+b.  Changed rl_message() to use vsnprintf(3) (if available) to fix buffer
+    overflow problems.
+
+c.  The completion code no longer appends a `/' or ` ' to a match when
+    completing a symbolic link that resolves to a directory name, unless
+    the match does not add anything to the word being completed.  This
+    means that a tab will complete the word up to the full name, but not
+    add anything, and a subsequent tab will add a slash.
+
+d.  Fixed a trivial typo that made the vi-mode `dT' command not work.
+
+e.  Fixed the tty code so that ^S and ^Q can be inserted with rl_quoted_insert.
+
+f.  Fixed the tty code so that ^V works more than once.
+
+g.  Changed the use of __P((...)) for function prototypes to PARAMS((...))
+    because the use of __P in typedefs conflicted g++ and glibc.
+
+h.  The completion code now attempts to do a better job of preserving the
+    case of the word the user typed if ignoring case in completions.
+
+i.  Readline defaults to not echoing the input and lets the terminal
+    initialization code enable echoing if there is a controlling terminal.
+
+j.  The key binding code now processes only two hex digits after a `\x'
+    escape sequence, and the documentation was changed to note that the
+    octal and hex escape sequences result in an eight-bit value rather
+    than strict ASCII.
+
+k.  Fixed a few places where negative array subscripts could have occurred.
+    
+l.  Fixed the vi-mode code to use a better method to determine the bounds of
+    the array used to hold the marks, and to avoid out-of-bounds references.
+    
+m.  Fixed the defines in chardefs.h to work better when chars are signed.
+    
+n.  Fixed configure.in to use the new names for bash autoconf macros.
+    
+o.  Readline no longer attempts to define its own versions of some ctype
+    macros if they are implemented as functions in libc but not as macros in
+    <ctype.h>.
+
+p.  Fixed a problem where rl_backward could possibly set point to before
+    the beginning of the line.
+
+q.  Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause
+    include file problems.
+
+2.  New Features in Readline
+
+a.  Added extern declaration for rl_get_termcap to readline.h, making it a
+    public function (it was always there, just not in readline.h).
+
+b.  New #defines in readline.h:  RL_READLINE_VERSION, currently 0x0402,
+    RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2.
+
+c.  New readline variable:  rl_readline_version, mirrors RL_READLINE_VERSION.
+
+d.  New bindable boolean readline variable:  match-hidden-files.  Controls
+    completion of files beginning with a `.' (on Unix).  Enabled by default.
+
+e.  The history expansion code now allows any character to terminate a
+    `:first-' modifier, like csh.
+
+f.  The incremental search code remembers the last search string and uses
+    it if ^R^R is typed without a search string.
+
+h.  New bindable variable `history-preserve-point'.  If set, the history
+    code attempts to place the user at the same location on each history
+    line retrived with previous-history or next-history.
+
+-------------------------------------------------------------------------------
+This document details the changes between this version, readline-4.2,
+and the previous version, readline-4.1.
+
+1.  Changes to Readline
+
+a.  When setting the terminal attributes on systems using `struct termio',
+    readline waits for output to drain before changing the attributes.
+
+b.  A fix was made to the history word tokenization code to avoid attempts to
+    dereference a null pointer.
+
+c.  Readline now defaults rl_terminal_name to $TERM if the calling application
+    has left it unset, and tries to initialize with the resultant value.
+
+d.  Instead of calling (*rl_getc_function)() directly to get input in certain
+    places, readline now calls rl_read_key() consistently.
+
+e.  Fixed a bug in the completion code that allowed a backslash to quote a
+    single quote inside a single-quoted string.
+
+f.  rl_prompt is no longer assigned directly from the argument to readline(),
+    but uses memory allocated by readline.  This allows constant strings to
+    be passed to readline without problems arising when the prompt processing
+    code wants to modify the string.
+
+g.  Fixed a bug that caused non-interactive history searches to return the
+    wrong line when performing multiple searches backward for the same string.
+
+h.  Many variables, function arguments, and function return values are now
+    declared `const' where appropriate, to improve behavior when linking with
+    C++ code.
+
+i.  The control character detection code now works better on systems where
+    `char' is unsigned by default.
+
+j.  The vi-mode numeric argument is now capped at 999999, just like emacs mode.
+
+k.  The Function, CPFunction, CPPFunction, and VFunction typedefs have been
+    replaced with a set of specific prototyped typedefs, though they are
+    still in the readline header files for backwards compatibility.
+
+m.  Nearly all of the (undocumented) internal global variables in the library
+    now have an _rl_ prefix -- there were a number that did not, like
+    screenheight, screenwidth, alphabetic, etc.
+
+n.  The ding() convenience function has been renamed to rl_ding(), though the
+    old function is still defined for backwards compatibility.
+
+o.  The completion convenience functions filename_completion_function,
+    username_completion_function, and completion_matches now have an rl_
+    prefix, though the old names are still defined for backwards compatibility.
+
+p.  The functions shared by readline and bash (linkage is satisfied from bash
+    when compiling with bash, and internally otherwise) now have an sh_ prefix.
+
+q.  Changed the shared library creation procedure on Linux and BSD/OS 4.x so
+    that the `soname' contains only the major version number rather than the
+    major and minor numbers.
+
+r.  Fixed a redisplay bug that occurred when the prompt spanned more than one
+    physical line and contained invisible characters.
+
+s.  Added a missing `includedir' variable to the Makefile.
+
+t.  When installing the shared libraries, make sure symbolic links are relative.
+
+u.  Added configure test so that it can set `${MAKE}' appropriately.
+
+v.  Fixed a bug in rl_forward that could cause the point to be set to before
+    the beginning of the line in vi mode.
+
+w.  Fixed a bug in the callback read-char interface to make it work when a
+    readline function pushes some input onto the input stream with
+    rl_execute_next (like the incremental search functions).
+
+x.  Fixed a file descriptor leak in the history file manipulation code that
+    was tripped when attempting to truncate a non-regular file (like
+    /dev/null).
+
+y.  Changes to make all of the exported readline functions declared in
+    readline.h have an rl_ prefix (rltty_set_default_bindings is now
+    rl_tty_set_default_bindings, crlf is now rl_crlf, etc.)
+
+z.  The formatted documentation included in the base readline distribution
+    is no longer removed on a `make distclean'.
+
+aa. Some changes were made to avoid gcc warnings with -Wall.
+
+bb. rl_get_keymap_by_name now finds keymaps case-insensitively, so
+    `set keymap EMACS' works.
+
+cc. The history file writing and truncation functions now return a useful
+    status on error.
+
+dd. Fixed a bug that could cause applications to dereference a NULL pointer
+    if a NULL second argument was passed to history_expand().
+
+ee. If a hook function assigned to rl_event_hook sets rl_done to a non-zero
+    value, rl_read_key() now immediately returns '\n' (which is assumed to   
+    be bound to accept-line).
+
+2.  New Features in Readline
+
+a.  The blink timeout for paren matching is now settable by applications,
+    via the rl_set_paren_blink_timeout() function.
+
+b.  _rl_executing_macro has been renamed to rl_executing_macro, which means
+    it's now part of the public interface.
+
+c.  Readline has a new variable, rl_readline_state, which is a bitmap that
+    encapsulates the current state of the library; intended for use by
+    callbacks and hook functions.
+
+d.  rlfe has a new -l option to log input and output (-a appends to logfile),
+    a new -n option to set the readline application name, and -v and -h
+    options for version and help information.
+
+e.  rlfe can now perform filename completion for the inferior process if the
+    OS has a /proc/<PID>/cwd that can be read with readlink(2) to get the
+    inferior's current working directory.
+
+f.  A new file, rltypedefs.h, contains the new typedefs for function pointers
+    and is installed by `make install'.
+
+g.  New application-callable function rl_set_prompt(const char *prompt):
+    expands its prompt string argument and sets rl_prompt to the result.
+
+h.  New application-callable function rl_set_screen_size(int rows, int cols):
+    public method for applications to set readline's idea of the screen
+    dimensions.
+
+i.  The history example program (examples/histexamp.c) is now built as one
+    of the examples.
+
+j.  The documentation has been updated to cover nearly all of the public
+    functions and variables declared in readline.h.
+
+k.  New function, rl_get_screen_size (int *rows, int *columns), returns
+    readline's idea of the screen dimensions.
+
+l.  The timeout in rl_gather_tyi (readline keyboard input polling function)
+    is now settable via a function (rl_set_keyboard_input_timeout()).
+
+m.  Renamed the max_input_history variable to history_max_entries; the old
+    variable is maintained for backwards compatibility.
+
+n.  The list of characters that separate words for the history tokenizer is
+    now settable with a variable:  history_word_delimiters.  The default
+    value is as before.
+
+o.  There is a new history.3 manual page documenting the history library.
+
+-------------------------------------------------------------------------------
 This document details the changes between this version, readline-4.1,
 and the previous version, readline-4.0.
 
diff --git a/readline/INSTALL b/readline/INSTALL
index 95d84c8..adb27a9 100644
--- a/readline/INSTALL
+++ b/readline/INSTALL
@@ -1,73 +1,81 @@
 Basic Installation
 ==================
 
-   These are generic installation instructions.
+These are installation instructions for Readline-4.3.
 
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
+The simplest way to compile readline is:
 
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
+  1. `cd' to the directory containing the readline source code and type
+     `./configure' to configure readline for your system.  If you're
      using `csh' on an old version of System V, you might need to type
      `sh ./configure' instead to prevent `csh' from trying to execute
      `configure' itself.
 
-     Running `configure' takes awhile.  While running, it prints some
+     Running `configure' takes some time.  While running, it prints some
      messages telling which features it is checking for.
 
-  2. Type `make' to compile the package.
+  2. Type `make' to compile readline and build the static readline
+     and history libraries.  If supported, the shared readline and history
+     libraries will be built also.  See below for instructions on compiling
+     the other parts of the distribution.  Typing `make everything' will
+     cause the static and shared libraries (if supported) and the example
+     programs to be built.
 
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+  3. Type `make install' to install the static readline and history
+     libraries, the readline include files, the documentation, and, if
+     supported, the shared readline and history libraries.
 
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
+  4. You can remove the created libraries and object files from the
+     build directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile readline for
      a different kind of computer), type `make distclean'.  There is
      also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
+     for the readline developers, and should be used with care.
+
+The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It
+uses those values to create a `Makefile' in the build directory,
+and Makefiles in the `doc', `shlib', and `examples'
+subdirectories.  It also creates a `config.h' file containing
+system-dependent definitions.  Finally, it creates a shell script
+`config.status' that you can run in the future to recreate the
+current configuration, a file `config.cache' that saves the
+results of its tests to speed up reconfiguring, and a file
+`config.log' containing compiler output (useful mainly for
+debugging `configure'). 
+
+If you need to do unusual things to compile readline, please try
+to figure out how `configure' could check whether to do them, and
+mail diffs or instructions to <bug-readline@gnu.org> so they can
+be considered for the next release.  If at some point
+`config.cache' contains results you don't want to keep, you may
+remove or edit it. 
+
+The file `configure.in' is used to create `configure' by a
+program called `autoconf'.  You only need `configure.in' if you
+want to change it or regenerate `configure' using a newer version
+of `autoconf'.  The readline `configure.in' requires autoconf
+version 2.50 or newer. 
 
 Compilers and Options
 =====================
 
-   Some systems require unusual options for compilation or linking that
+Some systems require unusual options for compilation or linking that
 the `configure' script does not know about.  You can give `configure'
 initial values for variables by setting them in the environment.  Using
 a Bourne-compatible shell, you can do that on the command line like
 this:
+
      CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
 
 Or on systems that have the `env' program, you can do it like this:
+
      env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
 
 Compiling For Multiple Architectures
 ====================================
 
-   You can compile the package for more than one kind of computer at the
+You can compile readline for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
 own directory.  To do this, you must use a version of `make' that
 supports the `VPATH' variable, such as GNU `make'.  `cd' to the
@@ -75,80 +83,59 @@
 the `configure' script.  `configure' automatically checks for the
 source code in the directory that `configure' is in and in `..'.
 
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
+If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile readline for one architecture at a
+time in the source code directory.  After you have installed
+readline for one architecture, use `make distclean' before
+reconfiguring for another architecture. 
 
 Installation Names
 ==================
 
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
+By default, `make install' will install the readline libraries in
+`/usr/local/lib', the include files in
+`/usr/local/include/readline', the man pages in `/usr/local/man',
+and the info files in `/usr/local/info'.  You can specify an
+installation prefix other than `/usr/local' by giving `configure'
+the option `--prefix=PATH' or by supplying a value for the
+DESTDIR variable when running `make install'. 
 
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. 
+If you give `configure' the option `--exec-prefix=PATH', the
+readline Makefiles will use PATH as the prefix for installing the
+libraries.  Documentation and other data files will still use the
+regular prefix. 
 
 Specifying the System Type
 ==========================
 
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
+There may be some features `configure' can not figure out
+automatically, but need to determine by the type of host readline
+will run on.  Usually `configure' can figure that out, but if it
+prints a message saying it can not guess the host type, give it
+the `--host=TYPE' option.  TYPE can either be a short name for
+the system type, such as `sun4', or a canonical name with three
+fields: CPU-COMPANY-SYSTEM (e.g., i386-unknown-freebsd4.2). 
 
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+See the file `config.sub' for the possible values of each field.
 
 Sharing Defaults
 ================
 
-   If you want to set default values for `configure' scripts to share,
+If you want to set default values for `configure' scripts to share,
 you can create a site shell script called `config.site' that gives
 default values for variables like `CC', `cache_file', and `prefix'.
 `configure' looks for `PREFIX/share/config.site' if it exists, then
 `PREFIX/etc/config.site' if it exists.  Or, you can set the
 `CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
+A warning: the readline `configure' looks for a site script, but not
+all `configure' scripts do.
 
 Operation Controls
 ==================
 
-   `configure' recognizes the following options to control how it
+`configure' recognizes the following options to control how it
 operates.
 
 `--cache-file=FILE'
@@ -174,3 +161,113 @@
 
 `configure' also accepts some other, not widely useful, options.
 
+Optional Features
+=================
+
+The readline `configure' recognizes a single `--with-PACKAGE' option:
+
+`--with-curses'
+    This tells readline that it can find the termcap library functions
+    (tgetent, et al.) in the curses library, rather than a separate
+    termcap library.  Readline uses the termcap functions, but does not
+    link with the termcap or curses library itself, allowing applications
+    which link with readline the to choose an appropriate library.
+    This option tells readline to link the example programs with the
+    curses library rather than libtermcap.
+
+`configure' also recognizes two `--enable-FEATURE' options:
+
+`--enable-shared'
+    Build the shared libraries by default on supported platforms.  The
+    default is `yes'.
+
+`--enable-static'
+    Build the static libraries by default.  The default is `yes'.
+ 
+Shared Libraries
+================
+
+There is support for building shared versions of the readline and
+history libraries.  The configure script creates a Makefile in
+the `shlib' subdirectory, and typing `make shared' will cause
+shared versions of the readline and history libraries to be built
+on supported platforms.
+
+If `configure' is given the `--enable-shared' option, it will attempt
+to build the shared libraries by default on supported platforms.
+
+Configure calls the script support/shobj-conf to test whether or
+not shared library creation is supported and to generate the values
+of variables that are substituted into shlib/Makefile.  If you
+try to build shared libraries on an unsupported platform, `make'
+will display a message asking you to update support/shobj-conf for
+your platform.
+
+If you need to update support/shobj-conf, you will need to create
+a `stanza' for your operating system and compiler.  The script uses
+the value of host_os and ${CC} as determined by configure.  For
+instance, FreeBSD 4.2 with any version of gcc is identified as
+`freebsd4.2-gcc*'.
+
+In the stanza for your operating system-compiler pair, you will need to
+define several variables.  They are:
+
+SHOBJ_CC	The C compiler used to compile source files into shareable
+		object files.  This is normally set to the value of ${CC}
+		by configure, and should not need to be changed.
+
+SHOBJ_CFLAGS	Flags to pass to the C compiler ($SHOBJ_CC) to create
+		position-independent code.  If you are using gcc, this
+		should probably be set to `-fpic'.
+
+SHOBJ_LD	The link editor to be used to create the shared library from
+		the object files created by $SHOBJ_CC.  If you are using
+		gcc, a value of `gcc' will probably work.
+
+SHOBJ_LDFLAGS	Flags to pass to SHOBJ_LD to enable shared object creation.
+		If you are using gcc, `-shared' may be all that is necessary.
+		These should be the flags needed for generic shared object
+		creation.
+
+SHLIB_XLDFLAGS	Additional flags to pass to SHOBJ_LD for shared library
+		creation.  Many systems use the -R option to the link
+		editor to embed a path within the library for run-time
+		library searches.  A reasonable value for such systems would
+		be `-R$(libdir)'.
+
+SHLIB_LIBS	Any additional libraries that shared libraries should be
+		linked against when they are created.
+
+SHLIB_LIBSUFF	The suffix to add to `libreadline' and `libhistory' when
+		generating the filename of the shared library.  Many systems
+		use `so'; HP-UX uses `sl'.
+
+SHLIB_LIBVERSION The string to append to the filename to indicate the version
+		of the shared library.  It should begin with $(SHLIB_LIBSUFF),
+		and possibly include version information that allows the
+		run-time loader to load the version of the shared library
+		appropriate for a particular program.  Systems using shared
+		libraries similar to SunOS 4.x use major and minor library
+		version numbers; for those systems a value of
+		`$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate.
+		Systems based on System V Release 4 don't use minor version
+		numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems.
+		Other Unix versions use different schemes.
+
+SHLIB_STATUS	Set this to `supported' when you have defined the other
+		necessary variables.  Make uses this to determine whether
+		or not shared library creation should be attempted.  If
+		shared libraries are not supported, this will be set to
+		`unsupported'.
+
+You should look at the existing stanzas in support/shobj-conf for ideas.
+
+Once you have updated support/shobj-conf, re-run configure and type
+`make shared' or `make'.  The shared libraries will be created in the
+shlib subdirectory.
+
+If shared libraries are created, `make install' will install them. 
+You may install only the shared libraries by running `make
+install-shared' from the top-level build directory.  Running `make
+install' in the shlib subdirectory will also work.  If you don't want
+to install any created shared libraries, run `make install-static'. 
diff --git a/readline/MANIFEST b/readline/MANIFEST
index a51ca05..1507eda 100644
--- a/readline/MANIFEST
+++ b/readline/MANIFEST
@@ -28,15 +28,19 @@
 readline.h	f
 rlconf.h	f
 rldefs.h	f
+rlmbutil.h	f
 rlprivate.h	f
 rlshell.h	f
 rlstdc.h	f
 rltty.h		f
+rltypedefs.h	f
 rlwinsize.h	f
 tcap.h		f
 tilde.h		f
 xmalloc.h	f
 bind.c		f
+callback.c	f
+compat.c	f
 complete.c	f
 display.c	f
 emacs_keymap.c	f
@@ -46,6 +50,8 @@
 keymaps.c	f
 kill.c		f
 macro.c		f
+mbutil.c	f
+misc.c		f
 nls.c		f
 parens.c	f
 readline.c	f
@@ -55,12 +61,12 @@
 shell.c		f
 signals.c	f
 terminal.c	f
+text.c		f
 tilde.c		f
 undo.c		f
 util.c		f
 vi_keymap.c	f
 vi_mode.c	f
-callback.c	f
 xmalloc.c	f
 history.c	f
 histexpand.c	f
@@ -74,6 +80,7 @@
 support/mkdist		f
 support/shobj-conf	f
 support/shlib-install	f
+support/wcwidth.c	f
 doc/Makefile.in		f
 doc/texinfo.tex		f
 doc/manvers.texinfo	f
@@ -85,12 +92,15 @@
 doc/hstech.texinfo	f
 doc/hsuser.texinfo	f
 doc/readline.3		f
+doc/history.3		f
 doc/texi2dvi		f
 doc/texi2html		f
 examples/Makefile.in	f
 examples/excallback.c	f
 examples/fileman.c	f
 examples/manexamp.c	f
+examples/readlinebuf.h	f
+examples/rlcat.c	f
 examples/rlfe.c		f
 examples/rltest.c	f
 examples/rl.c		f
@@ -111,3 +121,6 @@
 doc/history.html	f
 doc/rluserman.html	f
 doc/readline.0		f
+doc/history.0		f
+doc/readline_3.ps	f
+doc/history_3.ps	f
diff --git a/readline/Makefile.in b/readline/Makefile.in
index 023496d..0ff0c31 100644
--- a/readline/Makefile.in
+++ b/readline/Makefile.in
@@ -35,6 +35,7 @@
 CP = cp
 MV = mv
 
+@SET_MAKE@
 SHELL = @MAKE_SHELL@
 
 prefix = @prefix@
@@ -49,6 +50,9 @@
 
 man3dir = $(mandir)/man3
 
+# Support an alternate destination root directory for package building
+DESTDIR =
+
 # Programs to make tags files.
 ETAGS = etags -tw
 CTAGS = ctags -tw
@@ -63,9 +67,16 @@
 TERMCAP_LIB = @TERMCAP_LIB@
 
 # For libraries which include headers from other libraries.
-INCLUDES = -I. -I$(srcdir) -I$(includedir)
+INCLUDES = -I. -I$(srcdir)
 
-CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS)
+XCCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES)
+CCFLAGS = $(XCCFLAGS) $(LOCAL_CFLAGS) $(CFLAGS)
+
+# could add -Werror here
+GCC_LINT_FLAGS = -ansi -Wall -Wshadow -Wpointer-arith -Wcast-qual \
+		 -Wwrite-strings -Wstrict-prototypes \
+		 -Wmissing-prototypes -Wno-implicit -pedantic
+GCC_LINT_CFLAGS = $(XCCFLAGS) $(GCC_LINT_FLAGS) @CFLAGS@ @LOCAL_CFLAGS@
 
 .c.o:
 	${RM} $@
@@ -85,19 +96,22 @@
 	   $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c \
 	   $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \
 	   $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \
-	   $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.c
+	   $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.c \
+	   $(srcdir)/text.c $(srcdir)/misc.c $(srcdir)/compat.c \
+	   $(srcdir)/mbutil.c
 
 # The header files for this library.
 HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
 	   posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
-	   ansi_stdlib.h tcap.h rlstdc.h xmalloc.h rlprivate.h rlshell.h
+	   ansi_stdlib.h tcap.h rlstdc.h xmalloc.h rlprivate.h rlshell.h \
+	   rltypedefs.h rlmbutil.h
 
-HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o 
+HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o mbutil.o
 TILDEOBJ = tilde.o
 OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \
 	  rltty.o complete.o bind.o isearch.o display.o signals.o \
 	  util.o kill.o undo.o macro.o input.o callback.o terminal.o \
-	  nls.o xmalloc.o $(HISTOBJ) $(TILDEOBJ)
+	  text.o nls.o misc.o compat.o xmalloc.o $(HISTOBJ) $(TILDEOBJ)
 
 # The texinfo files which document this library.
 DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo
@@ -111,13 +125,15 @@
 CREATED_TAGS = TAGS tags
 
 INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \
-		    rlstdc.h rlconf.h
+		    rlstdc.h rlconf.h rltypedefs.h
 
 ##########################################################################
+TARGETS = @STATIC_TARGET@ @SHARED_TARGET@
+INSTALL_TARGETS = @STATIC_INSTALL_TARGET@ @SHARED_INSTALL_TARGET@
 
-all: static
+all: $(TARGETS)
 
-everything: static shared examples
+everything: all examples
 
 static: $(STATIC_LIBS)
 
@@ -131,9 +147,18 @@
 	$(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o
 	-test -n "$(RANLIB)" && $(RANLIB) $@
 
+# Since tilde.c is shared between readline and bash, make sure we compile
+# it with the right flags when it's built as part of readline
+tilde.o:	tilde.c
+	rm -f $@
+	$(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c
+
 readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a
 	$(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a ${TERMCAP_LIB}
 
+lint:	force
+	$(MAKE) $(MFLAGS) CCFLAGS='$(GCC_LINT_CFLAGS)' static
+
 Makefile makefile: config.status $(srcdir)/Makefile.in
 	CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
 
@@ -171,40 +196,48 @@
 
 install-headers: installdirs ${INSTALLED_HEADERS}
 	for f in ${INSTALLED_HEADERS}; do \
-		$(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \
+		$(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \
 	done
 
 uninstall-headers:
-	-test -n "$(includedir)" && cd $(includedir)/readline && \
+	-test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \
 		${RM} ${INSTALLED_HEADERS}
 
 maybe-uninstall-headers: uninstall-headers
 
-install: installdirs $(STATIC_LIBS) install-headers
-	-$(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old
-	$(INSTALL_DATA) libreadline.a $(libdir)/libreadline.a
-	-test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libreadline.a
-	-$(MV) $(libdir)/libhistory.a $(libdir)/libhistory.old
-	$(INSTALL_DATA) libhistory.a $(libdir)/libhistory.a
-	-test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libhistory.a
+install:	$(INSTALL_TARGETS)
+
+install-static: installdirs $(STATIC_LIBS) install-headers
+	-$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old
+	$(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a
+	-test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a
+	-$(MV) $(DESTDIR)$(libdir)/libhistory.a $(DESTDIR)$(libdir)/libhistory.old
+	$(INSTALL_DATA) libhistory.a $(DESTDIR)$(libdir)/libhistory.a
+	-test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libhistory.a
 	-( if test -d doc ; then \
 		cd doc && \
-		${MAKE} ${MFLAGS} infodir=$(infodir) $@; \
+		${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} install; \
 	  fi )
 
 installdirs: $(srcdir)/support/mkdirs
-	-$(SHELL) $(srcdir)/support/mkdirs $(includedir) \
-		$(includedir)/readline $(libdir) $(infodir) $(man3dir)
+	-$(SHELL) $(srcdir)/support/mkdirs $(DESTDIR)$(includedir) \
+		$(DESTDIR)$(includedir)/readline $(DESTDIR)$(libdir) \
+		$(DESTDIR)$(infodir) $(DESTDIR)$(man3dir)
 
 uninstall: uninstall-headers
-	-test -n "$(libdir)" && cd $(libdir) && \
+	-test -n "$(DESTDIR)$(libdir)" && cd $(DESTDIR)$(libdir) && \
 		${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS)
+	-( if test -d doc ; then \
+		cd doc && \
+		${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} $@; \
+	  fi )
+	-( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall )
 
 install-shared: installdirs install-headers shared
-	-( cd shlib ; ${MAKE} ${MFLAGS} install )
+	-( cd shlib ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install )
 
 uninstall-shared: maybe-uninstall-headers
-	-( cd shlib; ${MAKE} ${MFLAGS} uninstall )
+	-( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall )
 
 TAGS:	force
 	$(ETAGS) $(CSOURCES) $(HSOURCES)
@@ -253,90 +286,99 @@
 # Dependencies
 bind.o: ansi_stdlib.h posixstat.h
 bind.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-bind.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+bind.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
 bind.o: history.h
 callback.o: rlconf.h
 callback.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-callback.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+callback.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
+compat.o: rlstdc.h
 complete.o: ansi_stdlib.h posixdir.h posixstat.h
 complete.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-complete.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+complete.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
 display.o: ansi_stdlib.h posixstat.h
 display.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
 display.o: tcap.h
-display.o: readline.h keymaps.h chardefs.h tilde.h
+display.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 display.o: history.h rlstdc.h
-funmap.o: readline.h keymaps.h chardefs.h tilde.h
+funmap.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 funmap.o: rlconf.h ansi_stdlib.h rlstdc.h
 funmap.o: ${BUILD_DIR}/config.h
 histexpand.o: ansi_stdlib.h
-histexpand.o: history.h histlib.h rlstdc.h
+histexpand.o: history.h histlib.h rlstdc.h rltypedefs.h
 histexpand.o: ${BUILD_DIR}/config.h
 histfile.o: ansi_stdlib.h
-histfile.o: history.h histlib.h rlstdc.h
+histfile.o: history.h histlib.h rlstdc.h rltypedefs.h
 histfile.o: ${BUILD_DIR}/config.h
 history.o: ansi_stdlib.h
-history.o: history.h histlib.h rlstdc.h
+history.o: history.h histlib.h rlstdc.h rltypedefs.h
 history.o: ${BUILD_DIR}/config.h
 histsearch.o: ansi_stdlib.h
-histsearch.o: history.h histlib.h rlstdc.h
+histsearch.o: history.h histlib.h rlstdc.h rltypedefs.h
 histsearch.o: ${BUILD_DIR}/config.h
 input.o: ansi_stdlib.h
 input.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-input.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+input.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
 isearch.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-isearch.o: readline.h keymaps.h chardefs.h tilde.h
+isearch.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 isearch.o: ansi_stdlib.h history.h rlstdc.h
 keymaps.o: emacs_keymap.c vi_keymap.c
-keymaps.o: keymaps.h chardefs.h rlconf.h ansi_stdlib.h
-keymaps.o: readline.h keymaps.h chardefs.h tilde.h
+keymaps.o: keymaps.h rltypedefs.h chardefs.h rlconf.h ansi_stdlib.h
+keymaps.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 keymaps.o: ${BUILD_DIR}/config.h rlstdc.h
 kill.o: ansi_stdlib.h
 kill.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-kill.o: readline.h keymaps.h chardefs.h tilde.h
+kill.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 kill.o: history.h rlstdc.h
 macro.o: ansi_stdlib.h
 macro.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-macro.o: readline.h keymaps.h chardefs.h tilde.h
+macro.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 macro.o: history.h rlstdc.h
+mbutil.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
+mbutil.o: readline.h keymaps.h rltypedefs.h chardefs.h rlstdc.h
+misc.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
+misc.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
+misc.o: history.h rlstdc.h ansi_stdlib.h
 nls.o: ansi_stdlib.h
 nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-nls.o: readline.h keymaps.h chardefs.h tilde.h  
+nls.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h  
 nls.o: history.h rlstdc.h  
 parens.o: rlconf.h
 parens.o: ${BUILD_DIR}/config.h
-parens.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
-readline.o: readline.h keymaps.h chardefs.h tilde.h
+parens.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
+readline.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 readline.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
 readline.o: history.h rlstdc.h
 readline.o: posixstat.h ansi_stdlib.h posixjmp.h
 rltty.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
 rltty.o: rltty.h
-rltty.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+rltty.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
 search.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-search.o: readline.h keymaps.h chardefs.h tilde.h
+search.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 search.o: ansi_stdlib.h history.h rlstdc.h
 shell.o: ${BUILD_DIR}/config.h
 shell.o: ansi_stdlib.h
 signals.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-signals.o: readline.h keymaps.h chardefs.h tilde.h
+signals.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 signals.o: history.h rlstdc.h
 terminal.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
 terminal.o: tcap.h
-terminal.o: readline.h keymaps.h chardefs.h tilde.h
+terminal.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 terminal.o: history.h rlstdc.h
+text.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
+text.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
+text.o: history.h rlstdc.h ansi_stdlib.h
 tilde.o: ansi_stdlib.h
 tilde.o: ${BUILD_DIR}/config.h
 tilde.o: tilde.h
 undo.o: ansi_stdlib.h
 undo.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-undo.o: readline.h keymaps.h chardefs.h tilde.h
+undo.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 undo.o: history.h rlstdc.h
 util.o: posixjmp.h ansi_stdlib.h
 util.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-util.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
+util.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h
 vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
-vi_mode.o: readline.h keymaps.h chardefs.h tilde.h
+vi_mode.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h
 vi_mode.o: history.h ansi_stdlib.h rlstdc.h
 xmalloc.o: ${BUILD_DIR}/config.h
 xmalloc.o: ansi_stdlib.h
@@ -357,6 +399,8 @@
 isearch.o: rlprivate.h
 kill.o: rlprivate.h
 macro.o: rlprivate.h
+mbutil.o: rlprivate.h
+misc.o: rlprivate.h
 nls.o: rlprivate.h   
 parens.o: rlprivate.h
 readline.o: rlprivate.h
@@ -364,6 +408,7 @@
 search.o: rlprivate.h
 signals.o: rlprivate.h
 terminal.o: rlprivate.h
+text.o: rlprivate.h
 undo.o: rlprivate.h
 util.o: rlprivate.h
 vi_mode.o: rlprivate.h
@@ -380,69 +425,96 @@
 keymaps.o: xmalloc.h
 kill.o: xmalloc.h
 macro.o: xmalloc.h
+mbutil.o: xmalloc.h
+misc.o: xmalloc.h
 readline.o: xmalloc.h
 savestring.o: xmalloc.h
 search.o: xmalloc.h
 shell.o: xmalloc.h
+terminal.o: xmalloc.h
+text.o: xmalloc.h
 tilde.o: xmalloc.h
-tilde.o: xmalloc.h
+undo.o: xmalloc.h
 util.o: xmalloc.h
 vi_mode.o: xmalloc.h
+xmalloc.o: xmalloc.h
 
-readline.o: $(srcdir)/readline.c
-vi_mode.o: $(srcdir)/vi_mode.c
-funmap.o: $(srcdir)/funmap.c
-keymaps.o: $(srcdir)/keymaps.c
-parens.o: $(srcdir)/parens.c
-search.o: $(srcdir)/search.c
-rltty.o: $(srcdir)/rltty.c
-complete.o: $(srcdir)/complete.c
+complete.o: rlmbutil.h
+display.o: rlmbutil.h
+histexpand.o: rlmbutil.h
+input.o: rlmbutil.h    
+isearch.o: rlmbutil.h
+mbutil.o: rlmbutil.h
+misc.o: rlmbutil.h
+readline.o: rlmbutil.h
+search.o: rlmbutil.h 
+text.o: rlmbutil.h
+vi_mode.o: rlmbutil.h
+
 bind.o: $(srcdir)/bind.c
-isearch.o: $(srcdir)/isearch.c
-display.o: $(srcdir)/display.c
-signals.o: $(srcdir)/signals.c
-util.o: $(srcdir)/util.c
-kill.o: $(srcdir)/kill.c
-undo.o: $(srcdir)/undo.c
-macro.o: $(srcdir)/macro.c
-input.o: $(srcdir)/input.c
 callback.o: $(srcdir)/callback.c
-terminal.o: $(srcdir)/terminal.c
+compat.o: $(srcdir)/compat.c
+complete.o: $(srcdir)/complete.c
+display.o: $(srcdir)/display.c
+funmap.o: $(srcdir)/funmap.c
+input.o: $(srcdir)/input.c
+isearch.o: $(srcdir)/isearch.c
+keymaps.o: $(srcdir)/keymaps.c $(srcdir)/emacs_keymap.c $(srcdir)/vi_keymap.c
+kill.o: $(srcdir)/kill.c
+macro.o: $(srcdir)/macro.c
+mbutil.o: $(srcdir)/mbutil.c
+misc.o: $(srcdir)/misc.c
 nls.o: $(srcdir)/nls.c
+parens.o: $(srcdir)/parens.c
+readline.o: $(srcdir)/readline.c
+rltty.o: $(srcdir)/rltty.c
+savestring.o: $(srcdir)/savestring.c
+search.o: $(srcdir)/search.c
+shell.o: $(srcdir)/shell.c
+signals.o: $(srcdir)/signals.c
+terminal.o: $(srcdir)/terminal.c
+text.o: $(srcdir)/text.c
+tilde.o: $(srcdir)/tilde.c
+undo.o: $(srcdir)/undo.c
+util.o: $(srcdir)/util.c
+vi_mode.o: $(srcdir)/vi_mode.c
 xmalloc.o: $(srcdir)/xmalloc.c
-history.o: $(srcdir)/history.c
+
 histexpand.o: $(srcdir)/histexpand.c
 histfile.o: $(srcdir)/histfile.c
+history.o: $(srcdir)/history.c
 histsearch.o: $(srcdir)/histsearch.c
-savestring.o: $(srcdir)/savestring.c
-shell.o: $(srcdir)/shell.c
-tilde.o: $(srcdir)/tilde.c
 
-readline.o: readline.c
-vi_mode.o: vi_mode.c
-funmap.o: funmap.c
-keymaps.o: keymaps.c
-parens.o: parens.c
-search.o: search.c
-rltty.o: rltty.c
-complete.o: complete.c
 bind.o: bind.c
-isearch.o: isearch.c
-display.o: display.c
-signals.o: signals.c
-util.o: util.c
-kill.o: kill.c
-undo.o: undo.c
-macro.o: macro.c
-input.o: input.c
 callback.o: callback.c
-terminal.o: terminal.c
+compat.o: compat.c
+complete.o: complete.c
+display.o: display.c
+funmap.o: funmap.c
+input.o: input.c
+isearch.o: isearch.c
+keymaps.o: keymaps.c emacs_keymap.c vi_keymap.c
+kill.o: kill.c
+macro.o: macro.c
+mbutil.o: mbutil.c
+misc.o: misc.c
 nls.o: nls.c
+parens.o: parens.c
+readline.o: readline.c
+rltty.o: rltty.c
+savestring.o: savestring.c
+search.o: search.c
+shell.o: shell.c
+signals.o: signals.c
+terminal.o: terminal.c
+text.o: text.c
+tilde.o: tilde.c
+undo.o: undo.c
+util.o: util.c
+vi_mode.o: vi_mode.c
 xmalloc.o: xmalloc.c
-history.o: history.c
+
 histexpand.o: histexpand.c
 histfile.o: histfile.c
+history.o: history.c
 histsearch.o: histsearch.c
-savestring.o: savestring.c
-shell.o: shell.c
-tilde.o: tilde.c
diff --git a/readline/README b/readline/README
index 41a5d0c..7aa9394 100644
--- a/readline/README
+++ b/readline/README
@@ -1,7 +1,7 @@
 Introduction
 ============
 
-This is the Gnu Readline library, version 4.1.
+This is the Gnu Readline library, version 4.3.
 
 The Readline library provides a set of functions for use by applications
 that allow users to edit command lines as they are typed in.  Both
@@ -16,8 +16,8 @@
 capabilities.
 
 The Readline library is free software, distributed under the terms of
-the GNU Public License, version 2.  For more information, see the file
-COPYING.
+the [GNU] General Public License, version 2.  For more information, see
+the file COPYING.
 
 To build the library, try typing `./configure', then `make'.  The
 configuration process is automated, so no further intervention should
@@ -37,6 +37,9 @@
 The file rlconf.h contains C preprocessor defines that enable and disable
 certain Readline features.
 
+The special make target `everything' will build the static and shared
+libraries (if the target platform supports them) and the examples.
+
 Examples
 ========
 
@@ -54,6 +57,9 @@
 will cause shared versions of the Readline and History libraries
 to be built on supported platforms.
 
+If `configure' is given the `--enable-shared' option, it will attempt
+to build the shared libraries by default on supported platforms.
+
 Configure calls the script support/shobj-conf to test whether or
 not shared library creation is supported and to generate the values
 of variables that are substituted into shlib/Makefile.  If you
@@ -64,8 +70,8 @@
 If you need to update support/shobj-conf, you will need to create
 a `stanza' for your operating system and compiler.  The script uses
 the value of host_os and ${CC} as determined by configure.  For
-instance, FreeBSD 2.2.5 with any version of gcc is identified as
-`freebsd2.2.5-gcc*'.
+instance, FreeBSD 4.2 with any version of gcc is identified as
+`freebsd4.2-gcc*'.
 
 In the stanza for your operating system-compiler pair, you will need to
 define several variables.  They are:
@@ -122,18 +128,21 @@
 `make shared'.  The shared libraries will be created in the shlib
 subdirectory.
 
-Since shared libraries are not created on all platforms, `make install'
-will not automatically install the shared libraries.  To install them,
-change the current directory to shlib and type `make install'.  Running
-`make install-shared' from the top-level build directory will also work.
+If shared libraries are created, `make install' will install them. 
+You may install only the shared libraries by running `make
+install-shared' from the top-level build directory.  Running `make
+install' in the shlib subdirectory will also work.  If you don't want
+to install any created shared libraries, run `make install-static'. 
 
 Documentation
 =============
 
-The documentation for the Readline and History libraries appears in the
-`doc' subdirectory.  There are two texinfo files and a Unix-style manual
-page describing the programming facilities available in the Readline
-library.  The texinfo files include both user and programmer's manuals.
+The documentation for the Readline and History libraries appears in
+the `doc' subdirectory.  There are three texinfo files and a
+Unix-style manual page describing the facilities available in the
+Readline library.  The texinfo files include both user and
+programmer's manuals.  HTML versions of the manuals appear in the
+`doc' subdirectory as well. 
 
 Reporting Bugs
 ==============
@@ -144,7 +153,7 @@
 
 When reporting a bug, please include the following information:
 
-        * the version number and release status of Readline (e.g., 4.0-release)
+        * the version number and release status of Readline (e.g., 4.2-release)
         * the machine and OS that it is running on
         * a list of the compilation flags or the contents of `config.h', if
           appropriate
diff --git a/readline/aclocal.m4 b/readline/aclocal.m4
index f8f5b74..d1ad025 100644
--- a/readline/aclocal.m4
+++ b/readline/aclocal.m4
@@ -3,139 +3,62 @@
 dnl
 dnl Some derived from PDKSH 5.1.3 autoconf tests
 dnl
-dnl
-dnl Check if dup2() does not clear the close on exec flag
-dnl
-AC_DEFUN(BASH_DUP2_CLOEXEC_CHECK,
-[AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
-AC_CACHE_VAL(bash_cv_dup2_broken,
-[AC_TRY_RUN([
-#include <sys/types.h>
-#include <fcntl.h>
+
+AC_DEFUN(BASH_C_LONG_LONG,
+[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
+[if test "$GCC" = yes; then
+  ac_cv_c_long_long=yes
+else
+AC_TRY_RUN([
+int
 main()
 {
-  int fd1, fd2, fl;
-  fd1 = open("/dev/null", 2);
-  if (fcntl(fd1, 2, 1) < 0)
-    exit(1);
-  fd2 = dup2(fd1, 1);
-  if (fd2 < 0)
-    exit(2);
-  fl = fcntl(fd2, 1, 0);
-  /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
-  exit(fl != 1);
+long long foo = 0;
+exit(sizeof(long long) < sizeof(long));
 }
-], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
-    [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
-     bash_cv_dup2_broken=no])
-])
-AC_MSG_RESULT($bash_cv_dup2_broken)
-if test $bash_cv_dup2_broken = yes; then
-AC_DEFINE(DUP2_BROKEN)
+], ac_cv_c_long_long=yes, ac_cv_c_long_long=no)
+fi])
+if test $ac_cv_c_long_long = yes; then
+  AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.])
 fi
 ])
 
-dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
-AC_DEFUN(BASH_SIGNAL_CHECK,
-[AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_MSG_CHECKING(for type of signal functions)
-AC_CACHE_VAL(bash_cv_signal_vintage,
+dnl
+dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX
+dnl (< changed to <=) added.
+dnl
+AC_DEFUN(BASH_C_LONG_DOUBLE,
+[AC_CACHE_CHECK(for long double, ac_cv_c_long_double,
+[if test "$GCC" = yes; then
+  ac_cv_c_long_double=yes
+else
+AC_TRY_RUN([
+int
+main()
+{
+  /* The Stardent Vistra knows sizeof(long double), but does not
+     support it. */
+  long double foo = 0.0;
+  /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+  /* On IRIX 5.3, the compiler converts long double to double with a warning,
+     but compiles this successfully. */
+  exit(sizeof(long double) <= sizeof(double));
+}
+], ac_cv_c_long_double=yes, ac_cv_c_long_double=no)
+fi])
+if test $ac_cv_c_long_double = yes; then
+  AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.])
+fi
+])
+
+dnl
+dnl Check for <inttypes.h>.  This is separated out so that it can be
+dnl AC_REQUIREd.
+dnl
+dnl BASH_HEADER_INTTYPES
+AC_DEFUN(BASH_HEADER_INTTYPES,
 [
-  AC_TRY_LINK([#include <signal.h>],[
-    sigset_t ss;
-    struct sigaction sa;
-    sigemptyset(&ss); sigsuspend(&ss);
-    sigaction(SIGINT, &sa, (struct sigaction *) 0);
-    sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
-  ], bash_cv_signal_vintage=posix,
-  [
-    AC_TRY_LINK([#include <signal.h>], [
-	int mask = sigmask(SIGINT);
-	sigsetmask(mask); sigblock(mask); sigpause(mask);
-    ], bash_cv_signal_vintage=4.2bsd,
-    [
-      AC_TRY_LINK([
-	#include <signal.h>
-	RETSIGTYPE foo() { }], [
-		int mask = sigmask(SIGINT);
-		sigset(SIGINT, foo); sigrelse(SIGINT);
-		sighold(SIGINT); sigpause(SIGINT);
-        ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
-    )]
-  )]
-)
-])
-AC_MSG_RESULT($bash_cv_signal_vintage)
-if test "$bash_cv_signal_vintage" = posix; then
-AC_DEFINE(HAVE_POSIX_SIGNALS)
-elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
-AC_DEFINE(HAVE_BSD_SIGNALS)
-elif test "$bash_cv_signal_vintage" = svr3; then
-AC_DEFINE(HAVE_USG_SIGHOLD)
-fi
-])
-
-dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process.
-AC_DEFUN(BASH_PGRP_SYNC,
-[AC_REQUIRE([AC_FUNC_GETPGRP])
-AC_MSG_CHECKING(whether pgrps need synchronization)
-AC_CACHE_VAL(bash_cv_pgrp_pipe,
-[AC_TRY_RUN([
-#ifdef HAVE_UNISTD_H
-#  include <unistd.h>
-#endif
-main()
-{
-# ifdef GETPGRP_VOID
-#  define getpgID()	getpgrp()
-# else
-#  define getpgID()	getpgrp(0)
-#  define setpgid(x,y)	setpgrp(x,y)
-# endif
-	int pid1, pid2, fds[2];
-	int status;
-	char ok;
-
-	switch (pid1 = fork()) {
-	  case -1:
-	    exit(1);
-	  case 0:
-	    setpgid(0, getpid());
-	    exit(0);
-	}
-	setpgid(pid1, pid1);
-
-	sleep(2);	/* let first child die */
-
-	if (pipe(fds) < 0)
-	  exit(2);
-
-	switch (pid2 = fork()) {
-	  case -1:
-	    exit(3);
-	  case 0:
-	    setpgid(0, pid1);
-	    ok = getpgID() == pid1;
-	    write(fds[1], &ok, 1);
-	    exit(0);
-	}
-	setpgid(pid2, pid1);
-
-	close(fds[1]);
-	if (read(fds[0], &ok, 1) != 1)
-	  exit(4);
-	wait(&status);
-	wait(&status);
-	exit(ok ? 0 : 5);
-}
-], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
-   [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
-    bash_cv_pgrp_pipe=no])
-])
-AC_MSG_RESULT($bash_cv_pgrp_pipe)
-if test $bash_cv_pgrp_pipe = yes; then
-AC_DEFINE(PGRP_PIPE)
-fi
+ AC_CHECK_HEADERS(inttypes.h)
 ])
 
 dnl
@@ -144,12 +67,18 @@
 dnl 
 dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND])
 AC_DEFUN(BASH_CHECK_TYPE,
-[AC_REQUIRE([AC_HEADER_STDC])dnl
+[
+AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_REQUIRE([BASH_HEADER_INTTYPES])
 AC_MSG_CHECKING(for $1)
 AC_CACHE_VAL(bash_cv_type_$1,
 [AC_EGREP_CPP($1, [#include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
+#include <stddef.h>
+#endif
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
 #endif
 $2
 ], bash_cv_type_$1=yes, bash_cv_type_$1=no)])
@@ -158,43 +87,74 @@
 	AC_DEFINE($4)
 	fi])
 if test $bash_cv_type_$1 = no; then
-  AC_DEFINE($1, $3)
+  AC_DEFINE_UNQUOTED($1, $3)
 fi
 ])
 
 dnl
-dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
-dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
-dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3).  To simplify
-dnl matters, this just checks for rlim_t, quad_t, or long.
+dnl BASH_CHECK_DECL(FUNC)
 dnl
-AC_DEFUN(BASH_RLIMIT_TYPE,
-[AC_MSG_CHECKING(for size and type of struct rlimit fields)
-AC_CACHE_VAL(bash_cv_type_rlimit,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/resource.h>],
-[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
+dnl Check for a declaration of FUNC in stdlib.h and inttypes.h like
+dnl AC_CHECK_DECL
+dnl
+AC_DEFUN(BASH_CHECK_DECL,
+[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([BASH_HEADER_INTTYPES])
+AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1,
+[AC_TRY_LINK(
+[
+#if STDC_HEADERS
+#  include <stdlib.h>
+#endif
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#endif
+],
+[return !$1;],
+bash_cv_decl_$1=yes, bash_cv_decl_$1=no)])
+bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+if test $bash_cv_decl_$1 = yes; then
+  AC_DEFINE_UNQUOTED($bash_tr_func, 1)
+else
+  AC_DEFINE_UNQUOTED($bash_tr_func, 0)
+fi
+])
+
+AC_DEFUN(BASH_DECL_PRINTF,
+[AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
+AC_CACHE_VAL(bash_cv_printf_declared,
+[AC_TRY_RUN([
+#include <stdio.h>
+#ifdef __STDC__
+typedef int (*_bashfunc)(const char *, ...);
+#else
+typedef int (*_bashfunc)();
+#endif
 main()
 {
-#ifdef HAVE_QUAD_T
-  struct rlimit rl;
-  if (sizeof(rl.rlim_cur) == sizeof(quad_t))
-    exit(0);
-#endif
-  exit(1);
-}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
-        [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
-         bash_cv_type_rlimit=long])])
+_bashfunc pf;
+pf = (_bashfunc) printf;
+exit(pf == 0);
+}
+], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
+   [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
+    bash_cv_printf_declared=yes]
+)])
+AC_MSG_RESULT($bash_cv_printf_declared)
+if test $bash_cv_printf_declared = yes; then
+AC_DEFINE(PRINTF_DECLARED)
+fi
 ])
-AC_MSG_RESULT($bash_cv_type_rlimit)
-if test $bash_cv_type_rlimit = quad_t; then
-AC_DEFINE(RLIMTYPE, quad_t)
-elif test $bash_cv_type_rlimit = rlim_t; then
-AC_DEFINE(RLIMTYPE, rlim_t)
+
+AC_DEFUN(BASH_DECL_SBRK,
+[AC_MSG_CHECKING(for declaration of sbrk in <unistd.h>)
+AC_CACHE_VAL(bash_cv_sbrk_declared,
+[AC_EGREP_HEADER(sbrk, unistd.h,
+ bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)])
+AC_MSG_RESULT($bash_cv_sbrk_declared)
+if test $bash_cv_sbrk_declared = yes; then
+AC_DEFINE(SBRK_DECLARED)
 fi
 ])
 
@@ -272,6 +232,20 @@
 fi
 ])
 
+dnl Check for the various permutations of sys_siglist and make sure we
+dnl compile in siglist.o if they're not defined
+AC_DEFUN(BASH_CHECK_SYS_SIGLIST, [
+AC_REQUIRE([BASH_SYS_SIGLIST])
+AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST])
+AC_REQUIRE([BASH_FUNC_STRSIGNAL])
+if test "$bash_cv_sys_siglist" = no && test "$bash_cv_under_sys_siglist" = no && test "$bash_cv_have_strsignal" = no; then
+  SIGLIST_O=siglist.o
+else
+  SIGLIST_O=
+fi
+AC_SUBST([SIGLIST_O])
+])
+
 dnl Check for sys_errlist[] and sys_nerr, check for declaration
 AC_DEFUN(BASH_SYS_ERRLIST,
 [AC_MSG_CHECKING([for sys_errlist and sys_nerr])
@@ -287,6 +261,51 @@
 fi
 ])
 
+dnl
+dnl Check if dup2() does not clear the close on exec flag
+dnl
+AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK,
+[AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
+AC_CACHE_VAL(bash_cv_dup2_broken,
+[AC_TRY_RUN([
+#include <sys/types.h>
+#include <fcntl.h>
+main()
+{
+  int fd1, fd2, fl;
+  fd1 = open("/dev/null", 2);
+  if (fcntl(fd1, 2, 1) < 0)
+    exit(1);
+  fd2 = dup2(fd1, 1);
+  if (fd2 < 0)
+    exit(2);
+  fl = fcntl(fd2, 1, 0);
+  /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
+  exit(fl != 1);
+}
+], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
+    [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
+     bash_cv_dup2_broken=no])
+])
+AC_MSG_RESULT($bash_cv_dup2_broken)
+if test $bash_cv_dup2_broken = yes; then
+AC_DEFINE(DUP2_BROKEN)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_STRSIGNAL,
+[AC_MSG_CHECKING([for the existence of strsignal])
+AC_CACHE_VAL(bash_cv_have_strsignal,
+[AC_TRY_LINK([#include <sys/types.h>
+#include <signal.h>],
+[char *s = (char *)strsignal(2);],
+ bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
+AC_MSG_RESULT($bash_cv_have_strsignal)
+if test $bash_cv_have_strsignal = yes; then
+AC_DEFINE(HAVE_STRSIGNAL)
+fi
+])
+
 dnl Check to see if opendir will open non-directories (not a nice thing)
 AC_DEFUN(BASH_FUNC_OPENDIR_CHECK,
 [AC_REQUIRE([AC_HEADER_DIRENT])dnl
@@ -422,6 +441,8 @@
   AC_CHECK_TYPE(ptrdiff_t, int)
 elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then
   AC_CHECK_TYPE(ptrdiff_t, long)
+elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then
+  AC_CHECK_TYPE(ptrdiff_t, [long long])
 else
   AC_CHECK_TYPE(ptrdiff_t, int)
 fi
@@ -432,10 +453,12 @@
 dnl
 AC_DEFUN(BASH_TYPE_BITS64_T,
 [
-if test "$ac_sv_sizeof_char_p" = 8; then
+if test "$ac_cv_sizeof_char_p" = 8; then
   AC_CHECK_TYPE(bits64_t, char *)
 elif test "$ac_cv_sizeof_double" = 8; then
   AC_CHECK_TYPE(bits64_t, double)
+elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then
+  AC_CHECK_TYPE(bits64_t, [long long])
 elif test "$ac_cv_sizeof_long" = 8; then
   AC_CHECK_TYPE(bits64_t, long)
 else
@@ -443,16 +466,68 @@
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_STRSIGNAL,
-[AC_MSG_CHECKING([for the existence of strsignal])
-AC_CACHE_VAL(bash_cv_have_strsignal,
-[AC_TRY_LINK([#include <sys/types.h>
-#include <signal.h>],
-[char *s = (char *)strsignal(2);],
- bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
-AC_MSG_RESULT($bash_cv_have_strsignal)
-if test $bash_cv_have_strsignal = yes; then
-AC_DEFINE(HAVE_STRSIGNAL)
+AC_DEFUN(BASH_TYPE_LONG_LONG,
+[
+AC_CACHE_CHECK([for long long], bash_cv_type_long_long,
+[AC_TRY_LINK([
+long long ll = 1; int i = 63;],
+[
+long long llm = (long long) -1;
+return ll << i | ll >> i | llm / ll | llm % ll;
+], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')])
+if test "$bash_cv_type_long_long" = 'long long'; then
+  AC_DEFINE(HAVE_LONG_LONG, 1)
+fi
+])
+
+AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG,
+[
+AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long,
+[AC_TRY_LINK([
+unsigned long long ull = 1; int i = 63;],
+[
+unsigned long long ullmax = (unsigned long long) -1;
+return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+], bash_cv_type_unsigned_long_long='unsigned long long',
+   bash_cv_type_unsigned_long_long='unsigned long')])
+if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then
+  AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1)
+fi
+])
+
+dnl
+dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
+dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
+dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3).  To simplify
+dnl matters, this just checks for rlim_t, quad_t, or long.
+dnl
+AC_DEFUN(BASH_TYPE_RLIMIT,
+[AC_MSG_CHECKING(for size and type of struct rlimit fields)
+AC_CACHE_VAL(bash_cv_type_rlimit,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/resource.h>],
+[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+main()
+{
+#ifdef HAVE_QUAD_T
+  struct rlimit rl;
+  if (sizeof(rl.rlim_cur) == sizeof(quad_t))
+    exit(0);
+#endif
+  exit(1);
+}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
+        [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
+         bash_cv_type_rlimit=long])])
+])
+AC_MSG_RESULT($bash_cv_type_rlimit)
+if test $bash_cv_type_rlimit = quad_t; then
+AC_DEFINE(RLIMTYPE, quad_t)
+elif test $bash_cv_type_rlimit = rlim_t; then
+AC_DEFINE(RLIMTYPE, rlim_t)
 fi
 ])
 
@@ -481,30 +556,8 @@
 bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)])
 if test $bash_cv_func_inet_aton = yes; then
   AC_DEFINE(HAVE_INET_ATON)
-fi
-])
-
-AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
-[AC_MSG_CHECKING([for a c_line member of struct termios])
-AC_CACHE_VAL(bash_cv_termios_ldisc,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <termios.h>],[struct termios t; int i; i = t.c_line;],
-  bash_cv_termios_ldisc=yes, bash_cv_termios_ldisc=no)])dnl
-AC_MSG_RESULT($bash_cv_termios_ldisc)
-if test $bash_cv_termios_ldisc = yes; then
-AC_DEFINE(TERMIOS_LDISC)
-fi
-])
-
-AC_DEFUN(BASH_STRUCT_TERMIO_LDISC,
-[AC_MSG_CHECKING([for a c_line member of struct termio])
-AC_CACHE_VAL(bash_cv_termio_ldisc,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <termio.h>],[struct termio t; int i; i = t.c_line;],
-  bash_cv_termio_ldisc=yes, bash_cv_termio_ldisc=no)])dnl
-AC_MSG_RESULT($bash_cv_termio_ldisc)
-if test $bash_cv_termio_ldisc = yes; then
-AC_DEFINE(TERMIO_LDISC)
+else
+  AC_LIBOBJ(inet_aton)
 fi
 ])
 
@@ -552,29 +605,63 @@
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_PRINTF,
-[AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
-AC_CACHE_VAL(bash_cv_printf_declared,
-[AC_TRY_RUN([
-#include <stdio.h>
-#ifdef __STDC__
-typedef int (*_bashfunc)(const char *, ...);
-#else
-typedef int (*_bashfunc)();
+# We should check for putenv before calling this
+AC_DEFUN(BASH_FUNC_STD_PUTENV,
+[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([AC_C_PROTOTYPES])
+AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv,
+[AC_TRY_LINK([
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
 #endif
-main()
-{
-_bashfunc pf;
-pf = (_bashfunc) printf;
-exit(pf == 0);
-}
-], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
-   [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
-    bash_cv_printf_declared=yes]
+#ifndef __STDC__
+#  ifndef const
+#    define const
+#  endif
+#endif
+#ifdef PROTOTYPES
+extern int putenv (char *);
+#else
+extern int putenv ();
+#endif
+],
+[return (putenv == 0);],
+bash_cv_std_putenv=yes, bash_cv_std_putenv=no
 )])
-AC_MSG_RESULT($bash_cv_printf_declared)
-if test $bash_cv_printf_declared = yes; then
-AC_DEFINE(PRINTF_DECLARED)
+if test $bash_cv_std_putenv = yes; then
+AC_DEFINE(HAVE_STD_PUTENV)
+fi
+])
+
+# We should check for unsetenv before calling this
+AC_DEFUN(BASH_FUNC_STD_UNSETENV,
+[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([AC_C_PROTOTYPES])
+AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv,
+[AC_TRY_LINK([
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+#ifndef __STDC__
+#  ifndef const
+#    define const
+#  endif
+#endif
+#ifdef PROTOTYPES
+extern int unsetenv (const char *);
+#else
+extern int unsetenv ();
+#endif
+],
+[return (unsetenv == 0);],
+bash_cv_std_unsetenv=yes, bash_cv_std_unsetenv=no
+)])
+if test $bash_cv_std_unsetenv = yes; then
+AC_DEFINE(HAVE_STD_UNSETENV)
 fi
 ])
 
@@ -597,39 +684,6 @@
 fi
 ])
 
-AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
-[
-if test "X$bash_cv_termcap_lib" = "X"; then
-_bash_needmsg=yes
-else
-AC_MSG_CHECKING(which library has the termcap functions)
-_bash_needmsg=
-fi
-AC_CACHE_VAL(bash_cv_termcap_lib,
-[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,
-    [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses,
-	[AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,
-	    bash_cv_termcap_lib=gnutermcap)])])])
-if test "X$_bash_needmsg" = "Xyes"; then
-AC_MSG_CHECKING(which library has the termcap functions)
-fi
-AC_MSG_RESULT(using $bash_cv_termcap_lib)
-if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
-LDFLAGS="$LDFLAGS -L./lib/termcap"
-TERMCAP_LIB="./lib/termcap/libtermcap.a"
-TERMCAP_DEP="./lib/termcap/libtermcap.a"
-elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
-TERMCAP_LIB=-ltermcap
-TERMCAP_DEP=
-elif test $bash_cv_termcap_lib = libncurses; then
-TERMCAP_LIB=-lncurses
-TERMCAP_DEP=
-else
-TERMCAP_LIB=-lcurses
-TERMCAP_DEP=
-fi
-])
-
 AC_DEFUN(BASH_FUNC_GETCWD,
 [AC_MSG_CHECKING([if getcwd() calls popen()])
 AC_CACHE_VAL(bash_cv_getcwd_calls_popen,
@@ -691,6 +745,317 @@
 AC_MSG_RESULT($bash_cv_getcwd_calls_popen)
 if test $bash_cv_getcwd_calls_popen = yes; then
 AC_DEFINE(GETCWD_BROKEN)
+AC_LIBOBJ(getcwd)
+fi
+])
+
+dnl
+dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
+dnl system, we can't use AC_PREREQ
+dnl
+AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
+[if test "X$bash_cv_have_gethostbyname" = "X"; then
+_bash_needmsg=yes
+else
+AC_MSG_CHECKING(for gethostbyname in socket library)
+_bash_needmsg=
+fi
+AC_CACHE_VAL(bash_cv_have_gethostbyname,
+[AC_TRY_LINK([#include <netdb.h>],
+[ struct hostent *hp;
+  hp = gethostbyname("localhost");
+], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
+)
+if test "X$_bash_needmsg" = Xyes; then
+    AC_MSG_CHECKING(for gethostbyname in socket library)
+fi
+AC_MSG_RESULT($bash_cv_have_gethostbyname)
+if test "$bash_cv_have_gethostbyname" = yes; then
+AC_DEFINE(HAVE_GETHOSTBYNAME)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH,
+[AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH)
+AC_CACHE_VAL(bash_cv_fnm_extmatch,
+[AC_TRY_RUN([
+#include <fnmatch.h>
+
+main()
+{
+#ifdef FNM_EXTMATCH
+  exit (0);
+#else
+  exit (1);
+#endif
+}
+], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no,
+    [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no)
+     bash_cv_fnm_extmatch=no])
+])
+AC_MSG_RESULT($bash_cv_fnm_extmatch)
+if test $bash_cv_fnm_extmatch = yes; then
+AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
+[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
+AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
+AC_CACHE_VAL(bash_cv_func_sigsetjmp,
+[AC_TRY_RUN([
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <signal.h>
+#include <setjmp.h>
+
+main()
+{
+#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
+exit (1);
+#else
+
+int code;
+sigset_t set, oset;
+sigjmp_buf xx;
+
+/* get the mask */
+sigemptyset(&set);
+sigemptyset(&oset);
+sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
+sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
+
+/* save it */
+code = sigsetjmp(xx, 1);
+if (code)
+  exit(0);	/* could get sigmask and compare to oset here. */
+
+/* change it */
+sigaddset(&set, SIGINT);
+sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
+
+/* and siglongjmp */
+siglongjmp(xx, 10);
+exit(1);
+#endif
+}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
+    [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
+     bash_cv_func_sigsetjmp=missing]
+)])
+AC_MSG_RESULT($bash_cv_func_sigsetjmp)
+if test $bash_cv_func_sigsetjmp = present; then
+AC_DEFINE(HAVE_POSIX_SIGSETJMP)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_STRCOLL,
+[
+AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
+AC_CACHE_VAL(bash_cv_func_strcoll_broken,
+[AC_TRY_RUN([
+#include <stdio.h>
+#if defined (HAVE_LOCALE_H)
+#include <locale.h>
+#endif
+
+main(c, v)
+int     c;
+char    *v[];
+{
+        int     r1, r2;
+        char    *deflocale, *defcoll;
+
+#ifdef HAVE_SETLOCALE
+        deflocale = setlocale(LC_ALL, "");
+	defcoll = setlocale(LC_COLLATE, "");
+#endif
+
+#ifdef HAVE_STRCOLL
+	/* These two values are taken from tests/glob-test. */
+        r1 = strcoll("abd", "aXd");
+#else
+	r1 = 0;
+#endif
+        r2 = strcmp("abd", "aXd");
+
+	/* These two should both be greater than 0.  It is permissible for
+	   a system to return different values, as long as the sign is the
+	   same. */
+
+        /* Exit with 1 (failure) if these two values are both > 0, since
+	   this tests whether strcoll(3) is broken with respect to strcmp(3)
+	   in the default locale. */
+	exit (r1 > 0 && r2 > 0);
+}
+], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
+   [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
+    bash_cv_func_strcoll_broken=no]
+)])
+AC_MSG_RESULT($bash_cv_func_strcoll_broken)
+if test $bash_cv_func_strcoll_broken = yes; then
+AC_DEFINE(STRCOLL_BROKEN)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT,
+[AC_MSG_CHECKING([for printf floating point output in hex notation])
+AC_CACHE_VAL(bash_cv_printf_a_format,
+[AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+
+int
+main()
+{
+	double y = 0.0;
+	char abuf[1024];
+
+	sprintf(abuf, "%A", y);
+	exit(strchr(abuf, 'P') == (char *)0);
+}
+], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no,
+   [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no)
+    bash_cv_printf_a_format=no]
+)])
+AC_MSG_RESULT($bash_cv_printf_a_format)
+if test $bash_cv_printf_a_format = yes; then
+AC_DEFINE(HAVE_PRINTF_A_FORMAT)
+fi
+])
+
+AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
+[
+AC_CHECK_MEMBER(struct termios.c_line, AC_DEFINE(TERMIOS_LDISC), ,[
+#include <sys/types.h>
+#include <termios.h>
+])
+])
+
+AC_DEFUN(BASH_STRUCT_TERMIO_LDISC,
+[
+AC_CHECK_MEMBER(struct termio.c_line, AC_DEFINE(TERMIO_LDISC), ,[
+#include <sys/types.h>
+#include <termio.h>
+])
+])
+
+dnl
+dnl Like AC_STRUCT_ST_BLOCKS, but doesn't muck with LIBOBJS
+dnl
+dnl sets bash_cv_struct_stat_st_blocks
+dnl
+dnl unused for now; we'll see how AC_CHECK_MEMBERS works
+dnl
+AC_DEFUN(BASH_STRUCT_ST_BLOCKS,
+[
+AC_MSG_CHECKING([for struct stat.st_blocks])
+AC_CACHE_VAL(bash_cv_struct_stat_st_blocks,
+[AC_TRY_COMPILE(
+[
+#include <sys/types.h>
+#include <sys/stat.h>
+],
+[
+main()
+{
+static struct stat a;
+if (a.st_blocks) return 0;
+return 0;
+}
+], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no)
+])
+AC_MSG_RESULT($bash_cv_struct_stat_st_blocks)
+if test "$bash_cv_struct_stat_st_blocks" = "yes"; then
+AC_DEFINE(HAVE_STRUCT_STAT_ST_BLOCKS)
+fi
+])
+
+AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
+[
+if test "X$bash_cv_termcap_lib" = "X"; then
+_bash_needmsg=yes
+else
+AC_MSG_CHECKING(which library has the termcap functions)
+_bash_needmsg=
+fi
+AC_CACHE_VAL(bash_cv_termcap_lib,
+[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,
+    [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo,
+        [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses,
+	    [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,
+	        bash_cv_termcap_lib=gnutermcap)])])])])
+if test "X$_bash_needmsg" = "Xyes"; then
+AC_MSG_CHECKING(which library has the termcap functions)
+fi
+AC_MSG_RESULT(using $bash_cv_termcap_lib)
+if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
+LDFLAGS="$LDFLAGS -L./lib/termcap"
+TERMCAP_LIB="./lib/termcap/libtermcap.a"
+TERMCAP_DEP="./lib/termcap/libtermcap.a"
+elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
+TERMCAP_LIB=-ltermcap
+TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libtinfo; then
+TERMCAP_LIB=-ltinfo
+TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libncurses; then
+TERMCAP_LIB=-lncurses
+TERMCAP_DEP=
+else
+TERMCAP_LIB=-lcurses
+TERMCAP_DEP=
+fi
+])
+
+dnl
+dnl Check for the presence of getpeername in libsocket.
+dnl If libsocket is present, check for libnsl and add it to LIBS if
+dnl it's there, since most systems with libsocket require linking
+dnl with libnsl as well.  This should only be called if getpeername
+dnl was not found in libc.
+dnl
+dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT
+dnl	  AS WELL
+dnl
+AC_DEFUN(BASH_CHECK_LIB_SOCKET,
+[
+if test "X$bash_cv_have_socklib" = "X"; then
+_bash_needmsg=
+else
+AC_MSG_CHECKING(for socket library)
+_bash_needmsg=yes
+fi
+AC_CACHE_VAL(bash_cv_have_socklib,
+[AC_CHECK_LIB(socket, getpeername,
+        bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)])
+if test "X$_bash_needmsg" = Xyes; then
+  AC_MSG_RESULT($bash_cv_have_socklib)
+  _bash_needmsg=
+fi
+if test $bash_cv_have_socklib = yes; then
+  # check for libnsl, add it to LIBS if present
+  if test "X$bash_cv_have_libnsl" = "X"; then
+    _bash_needmsg=
+  else
+    AC_MSG_CHECKING(for libnsl)
+    _bash_needmsg=yes
+  fi
+  AC_CACHE_VAL(bash_cv_have_libnsl,
+	   [AC_CHECK_LIB(nsl, t_open,
+		 bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)])
+  if test "X$_bash_needmsg" = Xyes; then
+    AC_MSG_RESULT($bash_cv_have_libnsl)
+    _bash_needmsg=
+  fi
+  if test $bash_cv_have_libnsl = yes; then
+    LIBS="-lsocket -lnsl $LIBS"
+  else
+    LIBS="-lsocket $LIBS"
+  fi
+  AC_DEFINE(HAVE_LIBSOCKET)
+  AC_DEFINE(HAVE_GETPEERNAME)
 fi
 ])
 
@@ -760,9 +1125,149 @@
 fi
 ])
 
-AC_DEFUN(BASH_REINSTALL_SIGHANDLERS,
+AC_DEFUN(BASH_STRUCT_TIMEVAL,
+[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h)
+AC_CACHE_VAL(bash_cv_struct_timeval,
+[
+AC_EGREP_HEADER(struct timeval, sys/time.h,
+		bash_cv_struct_timeval=yes,
+		AC_EGREP_HEADER(struct timeval, time.h,
+			bash_cv_struct_timeval=yes,
+			bash_cv_struct_timeval=no))
+])
+AC_MSG_RESULT($bash_cv_struct_timeval)
+if test $bash_cv_struct_timeval = yes; then
+  AC_DEFINE(HAVE_TIMEVAL)
+fi
+])
+
+AC_DEFUN(BASH_STRUCT_WINSIZE,
+[AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
+AC_CACHE_VAL(bash_cv_struct_winsize_header,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/ioctl.h>], [struct winsize x;],
+  bash_cv_struct_winsize_header=ioctl_h,
+  [AC_TRY_COMPILE([#include <sys/types.h>
+#include <termios.h>], [struct winsize x;],
+  bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
+])])
+if test $bash_cv_struct_winsize_header = ioctl_h; then
+  AC_MSG_RESULT(sys/ioctl.h)
+  AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
+elif test $bash_cv_struct_winsize_header = termios_h; then
+  AC_MSG_RESULT(termios.h)
+  AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS)
+else
+  AC_MSG_RESULT(not found)
+fi
+])
+
+dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
+AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE,
 [AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_REQUIRE([BASH_SIGNAL_CHECK])
+AC_MSG_CHECKING(for type of signal functions)
+AC_CACHE_VAL(bash_cv_signal_vintage,
+[
+  AC_TRY_LINK([#include <signal.h>],[
+    sigset_t ss;
+    struct sigaction sa;
+    sigemptyset(&ss); sigsuspend(&ss);
+    sigaction(SIGINT, &sa, (struct sigaction *) 0);
+    sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
+  ], bash_cv_signal_vintage=posix,
+  [
+    AC_TRY_LINK([#include <signal.h>], [
+	int mask = sigmask(SIGINT);
+	sigsetmask(mask); sigblock(mask); sigpause(mask);
+    ], bash_cv_signal_vintage=4.2bsd,
+    [
+      AC_TRY_LINK([
+	#include <signal.h>
+	RETSIGTYPE foo() { }], [
+		int mask = sigmask(SIGINT);
+		sigset(SIGINT, foo); sigrelse(SIGINT);
+		sighold(SIGINT); sigpause(SIGINT);
+        ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
+    )]
+  )]
+)
+])
+AC_MSG_RESULT($bash_cv_signal_vintage)
+if test "$bash_cv_signal_vintage" = posix; then
+AC_DEFINE(HAVE_POSIX_SIGNALS)
+elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
+AC_DEFINE(HAVE_BSD_SIGNALS)
+elif test "$bash_cv_signal_vintage" = svr3; then
+AC_DEFINE(HAVE_USG_SIGHOLD)
+fi
+])
+
+dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process.
+AC_DEFUN(BASH_SYS_PGRP_SYNC,
+[AC_REQUIRE([AC_FUNC_GETPGRP])
+AC_MSG_CHECKING(whether pgrps need synchronization)
+AC_CACHE_VAL(bash_cv_pgrp_pipe,
+[AC_TRY_RUN([
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+main()
+{
+# ifdef GETPGRP_VOID
+#  define getpgID()	getpgrp()
+# else
+#  define getpgID()	getpgrp(0)
+#  define setpgid(x,y)	setpgrp(x,y)
+# endif
+	int pid1, pid2, fds[2];
+	int status;
+	char ok;
+
+	switch (pid1 = fork()) {
+	  case -1:
+	    exit(1);
+	  case 0:
+	    setpgid(0, getpid());
+	    exit(0);
+	}
+	setpgid(pid1, pid1);
+
+	sleep(2);	/* let first child die */
+
+	if (pipe(fds) < 0)
+	  exit(2);
+
+	switch (pid2 = fork()) {
+	  case -1:
+	    exit(3);
+	  case 0:
+	    setpgid(0, pid1);
+	    ok = getpgID() == pid1;
+	    write(fds[1], &ok, 1);
+	    exit(0);
+	}
+	setpgid(pid2, pid1);
+
+	close(fds[1]);
+	if (read(fds[0], &ok, 1) != 1)
+	  exit(4);
+	wait(&status);
+	wait(&status);
+	exit(ok ? 0 : 5);
+}
+], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
+   [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
+    bash_cv_pgrp_pipe=no])
+])
+AC_MSG_RESULT($bash_cv_pgrp_pipe)
+if test $bash_cv_pgrp_pipe = yes; then
+AC_DEFINE(PGRP_PIPE)
+fi
+])
+
+AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS,
+[AC_REQUIRE([AC_TYPE_SIGNAL])
+AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
 AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked])
 AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers,
 [AC_TRY_RUN([
@@ -818,20 +1323,9 @@
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_SBRK_DECLARED,
-[AC_MSG_CHECKING(for declaration of sbrk in <unistd.h>)
-AC_CACHE_VAL(bash_cv_sbrk_declared,
-[AC_EGREP_HEADER(sbrk, unistd.h,
- bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)])
-AC_MSG_RESULT($bash_cv_sbrk_declared)
-if test $bash_cv_sbrk_declared = yes; then
-AC_DEFINE(SBRK_DECLARED)
-fi
-])
-
 dnl check that some necessary job control definitions are present
-AC_DEFUN(BASH_JOB_CONTROL_MISSING,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
+AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING,
+[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
 AC_MSG_CHECKING(for presence of necessary job control definitions)
 AC_CACHE_VAL(bash_cv_job_control_missing,
 [AC_TRY_RUN([
@@ -939,55 +1433,23 @@
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
-AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
-AC_CACHE_VAL(bash_cv_func_sigsetjmp,
-[AC_TRY_RUN([
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <signal.h>
-#include <setjmp.h>
-
-main()
-{
-#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
-exit (1);
-#else
-
-int code;
-sigset_t set, oset;
-sigjmp_buf xx;
-
-/* get the mask */
-sigemptyset(&set);
-sigemptyset(&oset);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
-
-/* save it */
-code = sigsetjmp(xx, 1);
-if (code)
-  exit(0);	/* could get sigmask and compare to oset here. */
-
-/* change it */
-sigaddset(&set, SIGINT);
-sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
-
-/* and siglongjmp */
-siglongjmp(xx, 10);
-exit(1);
-#endif
-}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
-    [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
-     bash_cv_func_sigsetjmp=missing]
-)])
-AC_MSG_RESULT($bash_cv_func_sigsetjmp)
-if test $bash_cv_func_sigsetjmp = present; then
-AC_DEFINE(HAVE_POSIX_SIGSETJMP)
-fi
+AC_DEFUN(BASH_SYS_DEFAULT_MAIL_DIR,
+[AC_MSG_CHECKING(for default mail directory)
+AC_CACHE_VAL(bash_cv_mail_dir,
+[if test -d /var/mail; then
+   bash_cv_mail_dir=/var/mail
+ elif test -d /var/spool/mail; then
+   bash_cv_mail_dir=/var/spool/mail
+ elif test -d /usr/mail; then
+   bash_cv_mail_dir=/usr/mail
+ elif test -d /usr/spool/mail; then
+   bash_cv_mail_dir=/usr/spool/mail
+ else
+   bash_cv_mail_dir=unknown
+ fi
+])
+AC_MSG_RESULT($bash_cv_mail_dir)
+AC_DEFINE_UNQUOTED(DEFAULT_MAIL_DIRECTORY, "$bash_cv_mail_dir")
 ])
 
 AC_DEFUN(BASH_HAVE_TIOCGWINSZ,
@@ -1002,27 +1464,6 @@
 fi
 ])
 
-AC_DEFUN(BASH_STRUCT_WINSIZE,
-[AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
-AC_CACHE_VAL(bash_cv_struct_winsize_header,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [struct winsize x;],
-  bash_cv_struct_winsize_header=ioctl_h,
-  [AC_TRY_COMPILE([#include <sys/types.h>
-#include <termios.h>], [struct winsize x;],
-  bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
-])])
-if test $bash_cv_struct_winsize_header = ioctl_h; then
-  AC_MSG_RESULT(sys/ioctl.h)
-  AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
-elif test $bash_cv_struct_winsize_header = termios_h; then
-  AC_MSG_RESULT(termios.h)
-  AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS)
-else
-  AC_MSG_RESULT(not found)
-fi
-])
-
 AC_DEFUN(BASH_HAVE_TIOCSTAT,
 [AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h)
 AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl,
@@ -1053,7 +1494,7 @@
 dnl but you can only get speed_t if you include <termios.h> (on some
 dnl versions) or <sys/types.h> (on others).
 dnl
-AC_DEFUN(BASH_MISC_SPEED_T,
+AC_DEFUN(BASH_CHECK_SPEED_T,
 [AC_MSG_CHECKING(for speed_t in sys/types.h)
 AC_CACHE_VAL(bash_cv_speed_t_in_sys_types,
 [AC_TRY_COMPILE([#include <sys/types.h>], [speed_t x;],
@@ -1065,17 +1506,19 @@
 ])
 
 AC_DEFUN(BASH_CHECK_GETPW_FUNCS,
-[AC_MSG_CHECKING(whether programs are able to redeclare getpw functions)
-AC_CACHE_VAL(bash_cv_can_redecl_getpw,
-[AC_TRY_COMPILE([#include <sys/types.h>
+[AC_MSG_CHECKING(whether getpw functions are declared in pwd.h)
+AC_CACHE_VAL(bash_cv_getpw_declared,
+[AC_EGREP_CPP(getpwuid,
+[
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
 #include <pwd.h>
-extern struct passwd *getpwent();
-extern struct passwd *getpwuid();
-extern struct passwd *getpwnam();],
-[struct passwd *z; z = getpwent(); z = getpwuid(0); z = getpwnam("root");],
-  bash_cv_can_redecl_getpw=yes,bash_cv_can_redecl_getpw=no)])
-AC_MSG_RESULT($bash_cv_can_redecl_getpw)
-if test $bash_cv_can_redecl_getpw = no; then
+],
+bash_cv_getpw_declared=yes,bash_cv_getpw_declared=no)])
+AC_MSG_RESULT($bash_cv_getpw_declared)
+if test $bash_cv_getpw_declared = yes; then
 AC_DEFINE(HAVE_GETPW_DECLS)
 fi
 ])
@@ -1119,114 +1562,9 @@
 ])
 
 dnl
-dnl Check for the presence of getpeername in libsocket.
-dnl If libsocket is present, check for libnsl and add it to LIBS if
-dnl it's there, since most systems with libsocket require linking
-dnl with libnsl as well.  This should only be called if getpeername
-dnl was not found in libc.
-dnl
-dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT
-dnl	  AS WELL
-dnl
-AC_DEFUN(BASH_CHECK_SOCKLIB,
-[
-if test "X$bash_cv_have_socklib" = "X"; then
-_bash_needmsg=
-else
-AC_MSG_CHECKING(for socket library)
-_bash_needmsg=yes
-fi
-AC_CACHE_VAL(bash_cv_have_socklib,
-[AC_CHECK_LIB(socket, getpeername,
-        bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)])
-if test "X$_bash_needmsg" = Xyes; then
-  AC_MSG_RESULT($bash_cv_have_socklib)
-  _bash_needmsg=
-fi
-if test $bash_cv_have_socklib = yes; then
-  # check for libnsl, add it to LIBS if present
-  if test "X$bash_cv_have_libnsl" = "X"; then
-    _bash_needmsg=
-  else
-    AC_MSG_CHECKING(for libnsl)
-    _bash_needmsg=yes
-  fi
-  AC_CACHE_VAL(bash_cv_have_libnsl,
-	   [AC_CHECK_LIB(nsl, t_open,
-		 bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)])
-  if test "X$_bash_needmsg" = Xyes; then
-    AC_MSG_RESULT($bash_cv_have_libnsl)
-    _bash_needmsg=
-  fi
-  if test $bash_cv_have_libnsl = yes; then
-    LIBS="-lsocket -lnsl $LIBS"
-  else
-    LIBS="-lsocket $LIBS"
-  fi
-  AC_DEFINE(HAVE_LIBSOCKET)
-  AC_DEFINE(HAVE_GETPEERNAME)
-fi
-])
-
-dnl
-dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
-dnl system, we can't use AC_PREREQ
-dnl
-AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
-[if test "X$bash_cv_have_gethostbyname" = "X"; then
-_bash_needmsg=yes
-else
-AC_MSG_CHECKING(for gethostbyname in socket library)
-_bash_needmsg=
-fi
-AC_CACHE_VAL(bash_cv_have_gethostbyname,
-[AC_TRY_LINK([#include <netdb.h>],
-[ struct hostent *hp;
-  hp = gethostbyname("localhost");
-], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
-)
-if test "X$_bash_needmsg" = Xyes; then
-    AC_MSG_CHECKING(for gethostbyname in socket library)
-fi
-AC_MSG_RESULT($bash_cv_have_gethostbyname)
-if test "$bash_cv_have_gethostbyname" = yes; then
-AC_DEFINE(HAVE_GETHOSTBYNAME)
-fi
-])
-
-AC_DEFUN(BASH_DEFAULT_MAIL_DIR,
-[AC_MSG_CHECKING(for default mail directory)
-AC_CACHE_VAL(bash_cv_mail_dir,
-[if test -d /var/mail; then
-   bash_cv_mail_dir=/var/mail
- elif test -d /usr/mail; then
-   bash_cv_mail_dir=/usr/mail
- elif test -d /var/spool/mail; then
-   bash_cv_mail_dir=/var/spool/mail
- elif test -d /usr/spool/mail; then
-   bash_cv_mail_dir=/usr/spool/mail
- else
-   bash_cv_mail_dir=unknown
- fi
-])
-AC_MSG_RESULT($bash_cv_mail_dir)
-if test $bash_cv_mail_dir = "/var/mail"; then
-   AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/mail")
-elif test $bash_cv_mail_dir = "/usr/mail"; then
-   AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/mail")
-elif test $bash_cv_mail_dir = "/var/spool/mail"; then
-   AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/spool/mail")
-elif test $bash_cv_mail_dir = "/usr/spool/mail"; then
-   AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/spool/mail")
-else
-   AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "unknown")
-fi
-])
-
-dnl
 dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions
 dnl
-AC_DEFUN(BASH_KERNEL_RLIMIT_CHECK,
+AC_DEFUN(BASH_CHECK_KERNEL_RLIMIT,
 [AC_MSG_CHECKING([whether $host_os needs _KERNEL for RLIMIT defines])
 AC_CACHE_VAL(bash_cv_kernel_rlimit,
 [AC_TRY_COMPILE([
@@ -1254,142 +1592,6 @@
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_STRCOLL,
-[
-AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
-AC_CACHE_VAL(bash_cv_func_strcoll_broken,
-[AC_TRY_RUN([
-#include <stdio.h>
-#if defined (HAVE_LOCALE_H)
-#include <locale.h>
-#endif
-
-main(c, v)
-int     c;
-char    *v[];
-{
-        int     r1, r2;
-        char    *deflocale, *defcoll;
-
-#ifdef HAVE_SETLOCALE
-        deflocale = setlocale(LC_ALL, "");
-	defcoll = setlocale(LC_COLLATE, "");
-#endif
-
-#ifdef HAVE_STRCOLL
-	/* These two values are taken from tests/glob-test. */
-        r1 = strcoll("abd", "aXd");
-#else
-	r1 = 0;
-#endif
-        r2 = strcmp("abd", "aXd");
-
-	/* These two should both be greater than 0.  It is permissible for
-	   a system to return different values, as long as the sign is the
-	   same. */
-
-        /* Exit with 1 (failure) if these two values are both > 0, since
-	   this tests whether strcoll(3) is broken with respect to strcmp(3)
-	   in the default locale. */
-	exit (r1 > 0 && r2 > 0);
-}
-], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
-   [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
-    bash_cv_func_strcoll_broken=no]
-)])
-AC_MSG_RESULT($bash_cv_func_strcoll_broken)
-if test $bash_cv_func_strcoll_broken = yes; then
-AC_DEFINE(STRCOLL_BROKEN)
-fi
-])
-
-dnl
-dnl If available, use support for large files unless the user specified
-dnl one of the CPPFLAGS, LDFLAGS, or LIBS variables (<eggert@twinsun.com>
-dnl via GNU patch 2.5)
-dnl
-AC_DEFUN(BASH_LARGE_FILE_SUPPORT,
-[AC_MSG_CHECKING(whether large file support needs explicit enabling)
-ac_getconfs=''
-ac_result=yes
-ac_set=''
-ac_shellvars='CPPFLAGS LDFLAGS LIBS'
-for ac_shellvar in $ac_shellvars; do
-  case $ac_shellvar in
-  CPPFLAGS) ac_lfsvar=LFS_CFLAGS ac_lfs64var=LFS64_CFLAGS ;;
-  *) ac_lfsvar=LFS_$ac_shellvar ac_lfs64var=LFS64_$ac_shellvar ;;
-  esac
-  eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
-  (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
-  ac_getconf=`getconf $ac_lfsvar`
-  ac_getconf64=`getconf $ac_lfs64var`
-  ac_getconfs=$ac_getconfs$ac_getconf\ $ac_getconf64
-  eval ac_test_$ac_shellvar="\$ac_getconf\ \$ac_getconf64"
-done
-case "$ac_result$ac_getconfs" in
-yes) ac_result=no ;;
-esac
-case "$ac_result$ac_set" in
-yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
-esac
-AC_MSG_RESULT($ac_result)
-case $ac_result in
-yes)
-  for ac_shellvar in $ac_shellvars; do
-    eval $ac_shellvar=\$ac_test_$ac_shellvar
-  done ;;
-esac
-])
-
-dnl
-dnl AC_SYS_RESTARTABLE_SYSCALLS tests only for restarted system calls
-dnl after a signal handler has been installed with signal().  Since
-dnl Bash uses sigaction() if it is available, we need to check whether
-dnl or not a signal handler installed with sigaction and SA_RESTART
-dnl causes system calls to be restarted after the signal is caught
-dnl
-AC_DEFUN(BASH_SYS_RESTARTABLE_SYSCALLS,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
-AC_CACHE_CHECK(for restartable system calls with posix sigaction,
-bash_cv_sys_restartable_syscalls,
-[AC_TRY_RUN(
-[/* Exit 0 (true) if wait returns something other than -1,
-   i.e. the pid of the child, which means that wait was restarted
-   after getting the signal.  */
-#include <sys/types.h>
-#include <signal.h>
-static int caught = 0;
-void ucatch (isig) int isig; { caught = 1; }
-main ()
-{
-#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
-  exit (1);
-#else
-  struct sigaction act, oact;
-  int i, status;
-
-  act.sa_handler = ucatch;
-  /* Might want to add SA_RESTART here, but bash's set_signal_handler
-     does not. */
-  act.sa_flags = 0;
-  sigemptyset(&act.sa_mask);
-  sigemptyset(&oact.sa_mask);
-  i = fork ();
-  /* A possible race condition here, but in practice it never happens. */
-  if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); }
-  sigaction(SIGINT, &act, &oact);
-  status = wait(&i);
-  if (status == -1) wait(&i);
-  exit (status == -1);
-#endif
-}
-], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no,
-   AC_MSG_WARN(cannot check restartable syscalls if cross compiling))
-])
-if test $bash_cv_sys_restartable_syscalls = yes; then
-  AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS)
-fi
-])
 dnl
 dnl Check for 64-bit off_t -- used for malloc alignment
 dnl
@@ -1410,18 +1612,181 @@
         AC_DEFINE(HAVE_OFF_T_64)
 fi])
 
-AC_DEFUN(BASH_STRUCT_TIMEVAL,
-[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h)
-AC_CACHE_VAL(bash_cv_struct_timeval,
-[
-AC_EGREP_HEADER(struct timeval, sys/time.h,
-		bash_cv_struct_timeval=yes,
-		AC_EGREP_HEADER(struct timeval, time.h,
-			bash_cv_struct_timeval=yes,
-			bash_cv_struct_timeval=no))
+AC_DEFUN(BASH_CHECK_RTSIGS,
+[AC_MSG_CHECKING(for unusable real-time signals due to large values)
+AC_CACHE_VAL(bash_cv_unusable_rtsigs,
+[AC_TRY_RUN([
+#include <sys/types.h>
+#include <signal.h>
+
+#ifndef NSIG
+#  define NSIG 64
+#endif
+
+main ()
+{
+  int n_sigs = 2 * NSIG;
+#ifdef SIGRTMIN
+  int rtmin = SIGRTMIN;
+#else
+  int rtmin = 0;
+#endif
+
+  exit(rtmin < n_sigs);
+}], bash_cv_unusable_rtsigs=yes, bash_cv_unusable_rtsigs=no,
+    [AC_MSG_WARN(cannot check real-time signals if cross compiling -- defaulting to yes)
+     bash_cv_unusable_rtsigs=yes]
+)])
+AC_MSG_RESULT($bash_cv_unusable_rtsigs)
+if test $bash_cv_unusable_rtsigs = yes; then
+AC_DEFINE(UNUSABLE_RT_SIGNALS)
+fi
 ])
-AC_MSG_RESULT($bash_cv_struct_timeval)
-if test $bash_cv_struct_timeval = yes; then
-  AC_DEFINE(HAVE_TIMEVAL)
+
+dnl
+dnl check for availability of multibyte characters and functions
+dnl
+AC_DEFUN(BASH_CHECK_MULTIBYTE,
+[
+AC_CHECK_HEADERS(wctype.h)
+AC_CHECK_HEADERS(wchar.h)
+AC_CHECK_HEADERS(langinfo.h)
+
+AC_CHECK_FUNC(mbsrtowcs, AC_DEFINE(HAVE_MBSRTOWCS))
+AC_CHECK_FUNC(wcwidth, AC_DEFINE(HAVE_WCWIDTH))
+
+AC_CACHE_CHECK([for mbstate_t], bash_cv_have_mbstate_t,
+[AC_TRY_RUN([
+#include <wchar.h>
+int
+main ()
+{
+  mbstate_t ps;
+  return 0;
+}], bash_cv_have_mbstate_t=yes,  bash_cv_have_mbstate_t=no)])
+if test $bash_cv_have_mbstate_t = yes; then
+	AC_DEFINE(HAVE_MBSTATE_T)
+fi
+
+AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset,
+[AC_TRY_LINK(
+[#include <langinfo.h>],
+[char* cs = nl_langinfo(CODESET);],
+bash_cv_langinfo_codeset=yes, bash_cv_langinfo_codeset=no)])
+if test $bash_cv_langinfo_codeset = yes; then
+  AC_DEFINE(HAVE_LANGINFO_CODESET)
+fi
+
+])
+
+dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB
+dnl require:
+dnl	AC_PROG_CC
+dnl	BASH_CHECK_LIB_TERMCAP
+
+AC_DEFUN(RL_LIB_READLINE_VERSION,
+[
+AC_REQUIRE([BASH_CHECK_LIB_TERMCAP])
+
+AC_MSG_CHECKING([version of installed readline library])
+
+# What a pain in the ass this is.
+
+# save cpp and ld options
+_save_CFLAGS="$CFLAGS"
+_save_LDFLAGS="$LDFLAGS"
+_save_LIBS="$LIBS"
+
+# Don't set ac_cv_rl_prefix if the caller has already assigned a value.  This
+# allows the caller to do something like $_rl_prefix=$withval if the user
+# specifies --with-installed-readline=PREFIX as an argument to configure
+
+if test -z "$ac_cv_rl_prefix"; then
+test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix}
+fi
+
+eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include
+eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib
+
+LIBS="$LIBS -lreadline ${TERMCAP_LIB}"
+CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}"
+LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}"
+
+AC_TRY_RUN([
+#include <stdio.h>
+#include <readline/readline.h>
+
+main()
+{
+	FILE *fp;
+	fp = fopen("conftest.rlv", "w");
+	if (fp == 0) exit(1);
+	fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
+	fclose(fp);
+	exit(0);
+}
+],
+ac_cv_rl_version=`cat conftest.rlv`,
+ac_cv_rl_version='0.0',
+ac_cv_rl_version='4.2')
+
+CFLAGS="$_save_CFLAGS"
+LDFLAGS="$_save_LDFLAGS"
+LIBS="$_save_LIBS"
+
+RL_MAJOR=0
+RL_MINOR=0
+
+# (
+case "$ac_cv_rl_version" in
+2*|3*|4*|5*|6*|7*|8*|9*)
+	RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'`
+	RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'`
+	;;
+esac
+
+# (((
+case $RL_MAJOR in
+[[0-9][0-9]])	_RL_MAJOR=$RL_MAJOR ;;
+[[0-9]])	_RL_MAJOR=0$RL_MAJOR ;;
+*)		_RL_MAJOR=00 ;;
+esac
+
+# (((
+case $RL_MINOR in
+[[0-9][0-9]])	_RL_MINOR=$RL_MINOR ;;
+[[0-9]])	_RL_MINOR=0$RL_MINOR ;;
+*)		_RL_MINOR=00 ;;
+esac
+
+RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}"
+
+# Readline versions greater than 4.2 have these defines in readline.h
+
+if test $ac_cv_rl_version = '0.0' ; then
+	AC_MSG_WARN([Could not test version of installed readline library.])
+elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then
+	# set these for use by the caller
+	RL_PREFIX=$ac_cv_rl_prefix
+	RL_LIBDIR=$ac_cv_rl_libdir
+	RL_INCLUDEDIR=$ac_cv_rl_includedir
+	AC_MSG_RESULT($ac_cv_rl_version)
+else
+
+AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library])
+AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library])
+AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library])
+
+AC_SUBST(RL_VERSION)
+AC_SUBST(RL_MAJOR)
+AC_SUBST(RL_MINOR)
+
+# set these for use by the caller
+RL_PREFIX=$ac_cv_rl_prefix
+RL_LIBDIR=$ac_cv_rl_libdir
+RL_INCLUDEDIR=$ac_cv_rl_includedir
+
+AC_MSG_RESULT($ac_cv_rl_version)
+
 fi
 ])
diff --git a/readline/ansi_stdlib.h b/readline/ansi_stdlib.h
index a720cb9..db13cd2 100644
--- a/readline/ansi_stdlib.h
+++ b/readline/ansi_stdlib.h
@@ -25,11 +25,24 @@
 
 /* String conversion functions. */
 extern int atoi ();
-extern long int atol ();
+
+extern double atof ();
+extern double strtod ();
 
 /* Memory allocation functions. */
-extern char *malloc ();
-extern char *realloc ();
+/* 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. */
diff --git a/readline/bind.c b/readline/bind.c
index 6a6424e..65ef401 100644
--- a/readline/bind.c
+++ b/readline/bind.c
@@ -68,9 +68,11 @@
 /* Variables exported by this file. */
 Keymap rl_binding_keymap;
 
-static int _rl_read_init_file __P((char *, int));
-static int glean_key_from_name __P((char *));
-static int substring_member_of_array __P((char *, char **));
+static char *_rl_read_file PARAMS((char *, size_t *));
+static void _rl_init_file_error PARAMS((const char *));
+static int _rl_read_init_file PARAMS((const char *, int));
+static int glean_key_from_name PARAMS((char *));
+static int substring_member_of_array PARAMS((char *, const char **));
 
 static int currently_reading_init_file;
 
@@ -83,13 +85,13 @@
 /*								    */
 /* **************************************************************** */
 
-/* rl_add_defun (char *name, Function *function, int key)
+/* rl_add_defun (char *name, rl_command_func_t *function, int key)
    Add NAME to the list of named functions.  Make FUNCTION be the function
    that gets called.  If KEY is not -1, then bind it. */
 int
 rl_add_defun (name, function, key)
-     char *name;
-     Function *function;
+     const char *name;
+     rl_command_func_t *function;
      int key;
 {
   if (key != -1)
@@ -102,7 +104,7 @@
 int
 rl_bind_key (key, function)
      int key;
-     Function *function;
+     rl_command_func_t *function;
 {
   if (key < 0)
     return (key);
@@ -133,7 +135,7 @@
 int
 rl_bind_key_in_map (key, function, map)
      int key;
-     Function *function;
+     rl_command_func_t *function;
      Keymap map;
 {
   int result;
@@ -152,7 +154,7 @@
 rl_unbind_key (key)
      int key;
 {
-  return (rl_bind_key (key, (Function *)NULL));
+  return (rl_bind_key (key, (rl_command_func_t *)NULL));
 }
 
 /* Make KEY do nothing in MAP.
@@ -162,13 +164,13 @@
      int key;
      Keymap map;
 {
-  return (rl_bind_key_in_map (key, (Function *)NULL, map));
+  return (rl_bind_key_in_map (key, (rl_command_func_t *)NULL, map));
 }
 
 /* Unbind all keys bound to FUNCTION in MAP. */
 int
 rl_unbind_function_in_map (func, map)
-     Function *func;
+     rl_command_func_t *func;
      Keymap map;
 {
   register int i, rval;
@@ -177,7 +179,7 @@
     {
       if (map[i].type == ISFUNC && map[i].function == func)
 	{
-	  map[i].function = (Function *)NULL;
+	  map[i].function = (rl_command_func_t *)NULL;
 	  rval = 1;
 	}
     }
@@ -186,10 +188,10 @@
 
 int
 rl_unbind_command_in_map (command, map)
-     char *command;
+     const char *command;
      Keymap map;
 {
-  Function *func;
+  rl_command_func_t *func;
 
   func = rl_named_function (command);
   if (func == 0)
@@ -202,8 +204,8 @@
    place to do bindings is in MAP. */
 int
 rl_set_key (keyseq, function, map)
-     char *keyseq;
-     Function *function;
+     const char *keyseq;
+     rl_command_func_t *function;
      Keymap map;
 {
   return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map));
@@ -214,7 +216,7 @@
    necessary.  The initial place to do bindings is in MAP. */
 int
 rl_macro_bind (keyseq, macro, map)
-     char *keyseq, *macro;
+     const char *keyseq, *macro;
      Keymap map;
 {
   char *macro_keys;
@@ -239,12 +241,16 @@
 int
 rl_generic_bind (type, keyseq, data, map)
      int type;
-     char *keyseq, *data;
+     const char *keyseq;
+     char *data;
      Keymap map;
 {
   char *keys;
   int keys_len;
   register int i;
+  KEYMAP_ENTRY k;
+
+  k.function = 0;
 
   /* If no keys to bind to, exit right away. */
   if (!keyseq || !*keyseq)
@@ -254,7 +260,7 @@
       return -1;
     }
 
-  keys = xmalloc (1 + (2 * strlen (keyseq)));
+  keys = (char *)xmalloc (1 + (2 * strlen (keyseq)));
 
   /* Translate the ASCII representation of KEYSEQ into an array of
      characters.  Stuff the characters into KEYS, and the length of
@@ -268,7 +274,12 @@
   /* Bind keys, making new keymaps as necessary. */
   for (i = 0; i < keys_len; i++)
     {
-      int ic = (int) ((unsigned char)keys[i]);
+      unsigned char uc = keys[i];
+      int ic;
+
+      ic = uc;
+      if (ic < 0 || ic >= KEYMAP_SIZE)
+	return -1;
 
       if (_rl_convert_meta_chars_to_ascii && META_CHAR (ic))
 	{
@@ -281,18 +292,40 @@
 	{
 	  if (map[ic].type != ISKMAP)
 	    {
-	      if (map[ic].type == ISMACR)
-		free ((char *)map[ic].function);
+	      /* We allow subsequences of keys.  If a keymap is being
+		 created that will `shadow' an existing function or macro
+		 key binding, we save that keybinding into the ANYOTHERKEY
+		 index in the new map.  The dispatch code will look there
+		 to find the function to execute if the subsequence is not
+		 matched.  ANYOTHERKEY was chosen to be greater than
+		 UCHAR_MAX. */
+	      k = map[ic];
 
 	      map[ic].type = ISKMAP;
 	      map[ic].function = KEYMAP_TO_FUNCTION (rl_make_bare_keymap());
 	    }
 	  map = FUNCTION_TO_KEYMAP (map, ic);
+	  /* The dispatch code will return this function if no matching
+	     key sequence is found in the keymap.  This (with a little
+	     help from the dispatch code in readline.c) allows `a' to be
+	     mapped to something, `abc' to be mapped to something else,
+	     and the function bound  to `a' to be executed when the user
+	     types `abx', leaving `bx' in the input queue. */
+	  if (k.function /* && k.type == ISFUNC */)
+	    {
+	      map[ANYOTHERKEY] = k;
+	      k.function = 0;
+	    }
 	}
       else
 	{
 	  if (map[ic].type == ISMACR)
 	    free ((char *)map[ic].function);
+	  else if (map[ic].type == ISKMAP)
+	    {
+	      map = FUNCTION_TO_KEYMAP (map, ic);
+	      ic = ANYOTHERKEY;
+	    }
 
 	  map[ic].function = KEYMAP_TO_FUNCTION (data);
 	  map[ic].type = type;
@@ -309,7 +342,8 @@
    non-zero if there was an error parsing SEQ. */
 int
 rl_translate_keyseq (seq, array, len)
-     char *seq, *array;
+     const char *seq;
+     char *array;
      int *len;
 {
   register int i, c, l, temp;
@@ -329,7 +363,7 @@
 	      /* Handle special case of backwards define. */
 	      if (strncmp (&seq[i], "C-\\M-", 5) == 0)
 		{
-		  array[l++] = ESC;
+		  array[l++] = ESC;	/* ESC is meta-prefix */
 		  i += 5;
 		  array[l++] = CTRL (_rl_to_upper (seq[i]));
 		  if (seq[i] == '\0')
@@ -338,7 +372,7 @@
 	      else if (c == 'M')
 		{
 		  i++;
-		  array[l++] = ESC;	/* XXX */
+		  array[l++] = ESC;	/* ESC is meta-prefix */
 		}
 	      else if (c == 'C')
 		{
@@ -391,16 +425,16 @@
 	      for (temp = 2, c -= '0'; ISOCTAL (seq[i]) && temp--; i++)
 	        c = (c * 8) + OCTVALUE (seq[i]);
 	      i--;	/* auto-increment in for loop */
-	      array[l++] = c % (largest_char + 1);
+	      array[l++] = c & largest_char;
 	      break;
 	    case 'x':
 	      i++;
-	      for (temp = 3, c = 0; isxdigit (seq[i]) && temp--; i++)
+	      for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++)
 	        c = (c * 16) + HEXVALUE (seq[i]);
-	      if (temp == 3)
+	      if (temp == 2)
 	        c = 'x';
 	      i--;	/* auto-increment in for loop */
-	      array[l++] = c % (largest_char + 1);
+	      array[l++] = c & largest_char;
 	      break;
 	    default:	/* backslashes before non-special chars just add the char */
 	      array[l++] = c;
@@ -470,7 +504,7 @@
   char *ret, *r, *s;
   int c;
 
-  r = ret = xmalloc (7 * strlen (seq) + 1);
+  r = ret = (char *)xmalloc (7 * strlen (seq) + 1);
   for (s = seq; *s; s++)
     {
       c = *s;
@@ -513,9 +547,9 @@
 /* Return a pointer to the function that STRING represents.
    If STRING doesn't have a matching function, then a NULL pointer
    is returned. */
-Function *
+rl_command_func_t *
 rl_named_function (string)
-     char *string;
+     const char *string;
 {
   register int i;
 
@@ -524,7 +558,7 @@
   for (i = 0; funmap[i]; i++)
     if (_rl_stricmp (funmap[i]->name, string) == 0)
       return (funmap[i]->function);
-  return ((Function *)NULL);
+  return ((rl_command_func_t *)NULL);
 }
 
 /* Return the function (or macro) definition which would be invoked via
@@ -532,9 +566,9 @@
    used.  TYPE, if non-NULL, is a pointer to an int which will receive the
    type of the object pointed to.  One of ISFUNC (function), ISKMAP (keymap),
    or ISMACR (macro). */
-Function *
+rl_command_func_t *
 rl_function_of_keyseq (keyseq, map, type)
-     char *keyseq;
+     const char *keyseq;
      Keymap map;
      int *type;
 {
@@ -545,7 +579,7 @@
 
   for (i = 0; keyseq && keyseq[i]; i++)
     {
-      int ic = keyseq[i];
+      unsigned char ic = keyseq[i];
 
       if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
 	{
@@ -585,14 +619,14 @@
 	  return (map[ic].function);
 	}
     }
-  return ((Function *) NULL);
+  return ((rl_command_func_t *) NULL);
 }
 
 /* The last key bindings file read. */
 static char *last_readline_init_file = (char *)NULL;
 
 /* The file we're currently reading key bindings from. */
-static char *current_readline_init_file;
+static const char *current_readline_init_file;
 static int current_readline_init_include_level;
 static int current_readline_init_lineno;
 
@@ -630,25 +664,15 @@
   i = read (file, buffer, file_size);
   close (file);
 
-#if 0
-  if (i < file_size)
-#else
   if (i < 0)
-#endif
     {
       free (buffer);
       return ((char *)NULL);
     }
 
-#if 0
-  buffer[file_size] = '\0';
-  if (sizep)
-    *sizep = file_size;
-#else
   buffer[i] = '\0';
   if (sizep)
     *sizep = i;
-#endif
 
   return (buffer);
 }
@@ -659,7 +683,7 @@
      int count, ignore;
 {
   int r;
-  r = rl_read_init_file ((char *)NULL);
+  r = rl_read_init_file ((const char *)NULL);
   rl_set_keymap_from_edit_mode ();
   return r;
 }
@@ -673,14 +697,14 @@
    otherwise errno is returned. */
 int
 rl_read_init_file (filename)
-     char *filename;
+     const char *filename;
 {
   /* Default the filename. */
   if (filename == 0)
     {
       filename = last_readline_init_file;
       if (filename == 0)
-        filename = get_env_value ("INPUTRC");
+        filename = sh_get_env_value ("INPUTRC");
       if (filename == 0)
 	filename = DEFAULT_INPUTRC;
     }
@@ -698,7 +722,7 @@
 
 static int
 _rl_read_init_file (filename, include_level)
-     char *filename;
+     const char *filename;
      int include_level;
 {
   register int i;
@@ -733,7 +757,7 @@
       /* Find the end of this line. */
       for (i = 0; line + i != end && line[i] != '\n'; i++);
 
-#if defined (__CYGWIN32__)
+#if defined (__CYGWIN__)
       /* ``Be liberal in what you accept.'' */
       if (line[i] == '\n' && line[i-1] == '\r')
 	line[i - 1] = '\0';
@@ -765,7 +789,7 @@
 
 static void
 _rl_init_file_error (msg)
-     char *msg;
+     const char *msg;
 {
   if (currently_reading_init_file)
     fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
@@ -780,10 +804,21 @@
 /*								    */
 /* **************************************************************** */
 
+typedef int _rl_parser_func_t PARAMS((char *));
+
+/* Things that mean `Control'. */
+const char *_rl_possible_control_prefixes[] = {
+  "Control-", "C-", "CTRL-", (const char *)NULL
+};
+
+const char *_rl_possible_meta_prefixes[] = {
+  "Meta", "M-", (const char *)NULL
+};
+
 /* Conditionals. */
 
 /* Calling programs set this to have their argv[0]. */
-char *rl_readline_name = "other";
+const char *rl_readline_name = "other";
 
 /* Stack of previous values of parsing_conditionalized_out. */
 static unsigned char *if_stack = (unsigned char *)NULL;
@@ -905,7 +940,8 @@
 parser_include (args)
      char *args;
 {
-  char *old_init_file, *e;
+  const char *old_init_file;
+  char *e;
   int old_line_number, old_include_level, r;
 
   if (_rl_parsing_conditionalized_out)
@@ -918,7 +954,7 @@
   e = strchr (args, '\n');
   if (e)
     *e = '\0';
-  r = _rl_read_init_file (args, old_include_level + 1);
+  r = _rl_read_init_file ((const char *)args, old_include_level + 1);
 
   current_readline_init_file = old_init_file;
   current_readline_init_lineno = old_line_number;
@@ -929,14 +965,14 @@
   
 /* Associate textual names with actual functions. */
 static struct {
-  char *name;
-  Function *function;
+  const char *name;
+  _rl_parser_func_t *function;
 } parser_directives [] = {
   { "if", parser_if },
   { "endif", parser_endif },
   { "else", parser_else },
   { "include", parser_include },
-  { (char *)0x0, (Function *)0x0 }
+  { (char *)0x0, (_rl_parser_func_t *)0x0 }
 };
 
 /* Handle a parser directive.  STATEMENT is the line of the directive
@@ -1061,7 +1097,7 @@
       /* Make VAR point to start of variable name. */
       while (*var && whitespace (*var)) var++;
 
-      /* Make value point to start of value string. */
+      /* Make VALUE point to start of value string. */
       value = var;
       while (*value && !whitespace (*value)) value++;
       if (*value)
@@ -1131,7 +1167,7 @@
       char *seq;
       register int j, k, passc;
 
-      seq = xmalloc (1 + strlen (string));
+      seq = (char *)xmalloc (1 + strlen (string));
       for (j = 1, k = passc = 0; string[j]; j++)
 	{
 	  /* Allow backslash to quote characters, but leave them in place.
@@ -1180,16 +1216,16 @@
   key = glean_key_from_name (kname);
 
   /* Add in control and meta bits. */
-  if (substring_member_of_array (string, possible_control_prefixes))
+  if (substring_member_of_array (string, _rl_possible_control_prefixes))
     key = CTRL (_rl_to_upper (key));
 
-  if (substring_member_of_array (string, possible_meta_prefixes))
+  if (substring_member_of_array (string, _rl_possible_meta_prefixes))
     key = META (key);
 
   /* Temporary.  Handle old-style keyname with macro-binding. */
   if (*funname == '\'' || *funname == '"')
     {
-      unsigned char useq[2];
+      char useq[2];
       int fl = strlen (funname);
 
       useq[0] = key; useq[1] = '\0';
@@ -1221,22 +1257,27 @@
 #define V_SPECIAL	0x1
 
 static struct {
-  char *name;
+  const char *name;
   int *value;
   int flags;
 } boolean_varlist [] = {
   { "blink-matching-paren",	&rl_blink_matching_paren,	V_SPECIAL },
+  { "byte-oriented",		&rl_byte_oriented,		0 },
   { "completion-ignore-case",	&_rl_completion_case_fold,	0 },
   { "convert-meta",		&_rl_convert_meta_chars_to_ascii, 0 },
   { "disable-completion",	&rl_inhibit_completion,		0 },
   { "enable-keypad",		&_rl_enable_keypad,		0 },
   { "expand-tilde",		&rl_complete_with_tilde_expansion, 0 },
+  { "history-preserve-point",	&_rl_history_preserve_point,	0 },
   { "horizontal-scroll-mode",	&_rl_horizontal_scroll_mode,	0 },
   { "input-meta",		&_rl_meta_flag,			0 },
   { "mark-directories",		&_rl_complete_mark_directories,	0 },
   { "mark-modified-lines",	&_rl_mark_modified_lines,	0 },
+  { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 },
+  { "match-hidden-files",	&_rl_match_hidden_files,	0 },
   { "meta-flag",		&_rl_meta_flag,			0 },
   { "output-meta",		&_rl_output_meta_chars,		0 },
+  { "page-completions",		&_rl_page_completions,		0 },
   { "prefer-visible-bell",	&_rl_prefer_visible_bell,	V_SPECIAL },
   { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 },
   { "show-all-if-ambiguous",	&_rl_complete_show_all,		0 },
@@ -1248,7 +1289,7 @@
 
 static int
 find_boolean_var (name)
-     char *name;
+     const char *name;
 {
   register int i;
 
@@ -1265,7 +1306,7 @@
 hack_special_boolean_var (i)
      int i;
 {
-  char *name;
+  const char *name;
 
   name = boolean_varlist[i].name;
 
@@ -1280,6 +1321,8 @@
     }
 }
 
+typedef int _rl_sv_func_t PARAMS((const char *));
+
 /* These *must* correspond to the array indices for the appropriate
    string variable.  (Though they're not used right now.) */
 #define V_BELLSTYLE	0
@@ -1292,17 +1335,17 @@
 #define V_INT		2
 
 /* Forward declarations */
-static int sv_bell_style __P((char *));
-static int sv_combegin __P((char *));
-static int sv_compquery __P((char *));
-static int sv_editmode __P((char *));
-static int sv_isrchterm __P((char *));
-static int sv_keymap __P((char *));
+static int sv_bell_style PARAMS((const char *));
+static int sv_combegin PARAMS((const char *));
+static int sv_compquery PARAMS((const char *));
+static int sv_editmode PARAMS((const char *));
+static int sv_isrchterm PARAMS((const char *));
+static int sv_keymap PARAMS((const char *));
 
 static struct {
-  char *name;
+  const char *name;
   int flags;
-  Function *set_func;
+  _rl_sv_func_t *set_func;
 } string_varlist[] = {
   { "bell-style",	V_STRING,	sv_bell_style },
   { "comment-begin",	V_STRING,	sv_combegin },
@@ -1315,7 +1358,7 @@
 
 static int
 find_string_var (name)
-     char *name;
+     const char *name;
 {
   register int i;
 
@@ -1339,7 +1382,7 @@
 
 int
 rl_variable_bind (name, value)
-     char *name, *value;
+     const char *name, *value;
 {
   register int i;
   int	v;
@@ -1367,7 +1410,7 @@
 
 static int
 sv_editmode (value)
-     char *value;
+     const char *value;
 {
   if (_rl_strnicmp (value, "vi", 2) == 0)
     {
@@ -1388,7 +1431,7 @@
 
 static int
 sv_combegin (value)
-     char *value;
+     const char *value;
 {
   if (value && *value)
     {
@@ -1401,7 +1444,7 @@
 
 static int
 sv_compquery (value)
-     char *value;
+     const char *value;
 {
   int nval = 100;
 
@@ -1417,7 +1460,7 @@
 
 static int
 sv_keymap (value)
-     char *value;
+     const char *value;
 {
   Keymap kmap;
 
@@ -1430,28 +1473,26 @@
   return 1;
 }
 
-#define _SET_BELL(v)	do { _rl_bell_preference = v; return 0; } while (0)
-
 static int
 sv_bell_style (value)
-     char *value;
+     const char *value;
 {
   if (value == 0 || *value == '\0')
-    _SET_BELL (AUDIBLE_BELL);
+    _rl_bell_preference = AUDIBLE_BELL;
   else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0)
-    _SET_BELL (NO_BELL);
+    _rl_bell_preference = NO_BELL;
   else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0)
-    _SET_BELL (AUDIBLE_BELL);
+    _rl_bell_preference = AUDIBLE_BELL;
   else if (_rl_stricmp (value, "visible") == 0)
-    _SET_BELL (VISIBLE_BELL);
+    _rl_bell_preference = VISIBLE_BELL;
   else
     return 1;
+  return 0;
 }
-#undef _SET_BELL
 
 static int
 sv_isrchterm (value)
-     char *value;
+     const char *value;
 {
   int beg, end, delim;
   char *v;
@@ -1477,7 +1518,7 @@
   v[end] = '\0';
 
   /* The value starts at v + beg.  Translate it into a character string. */
-  _rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1);
+  _rl_isearch_terminators = (char *)xmalloc (2 * strlen (v) + 1);
   rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
   _rl_isearch_terminators[end] = '\0';
 
@@ -1489,7 +1530,7 @@
    For example, `Space' returns ' '. */
 
 typedef struct {
-  char *name;
+  const char *name;
   int value;
 } assoc_list;
 
@@ -1523,7 +1564,7 @@
 
 /* Auxiliary functions to manage keymaps. */
 static struct {
-  char *name;
+  const char *name;
   Keymap map;
 } keymap_names[] = {
   { "emacs", emacs_standard_keymap },
@@ -1541,12 +1582,12 @@
 
 Keymap
 rl_get_keymap_by_name (name)
-     char *name;
+     const char *name;
 {
   register int i;
 
   for (i = 0; keymap_names[i].name; i++)
-    if (strcmp (name, keymap_names[i].name) == 0)
+    if (_rl_stricmp (name, keymap_names[i].name) == 0)
       return (keymap_names[i].map);
   return ((Keymap) NULL);
 }
@@ -1558,7 +1599,7 @@
   register int i;
   for (i = 0; keymap_names[i].name; i++)
     if (map == keymap_names[i].map)
-      return (keymap_names[i].name);
+      return ((char *)keymap_names[i].name);
   return ((char *)NULL);
 }
   
@@ -1616,7 +1657,7 @@
 rl_list_funmap_names ()
 {
   register int i;
-  char **funmap_names;
+  const char **funmap_names;
 
   funmap_names = rl_funmap_names ();
 
@@ -1643,17 +1684,18 @@
      pairs for possible inclusion in an inputrc file, we don't want to
      do any special meta processing on KEY. */
 
-#if 0
+#if 1
+  /* XXX - Experimental */
   /* We might want to do this, but the old version of the code did not. */
 
   /* If this is an escape character, we don't want to do any more processing.
      Just add the special ESC key sequence and return. */
   if (c == ESC)
     {
-      keyseq[0] = '\\';
-      keyseq[1] = 'e';
-      keyseq[2] = '\0';
-      return keyseq;
+      keyname[0] = '\\';
+      keyname[1] = 'e';
+      keyname[2] = '\0';
+      return keyname;
     }
 #endif
 
@@ -1706,7 +1748,7 @@
    sequences that are used to invoke FUNCTION in MAP. */
 char **
 rl_invoking_keyseqs_in_map (function, map)
-     Function *function;
+     rl_command_func_t *function;
      Keymap map;
 {
   register int key;
@@ -1735,7 +1777,7 @@
 	      if (result_index + 2 > result_size)
 	        {
 	          result_size += 10;
-		  result = (char **) xrealloc (result, result_size * sizeof (char *));
+		  result = (char **)xrealloc (result, result_size * sizeof (char *));
 	        }
 
 	      result[result_index++] = keyname;
@@ -1764,7 +1806,12 @@
 		char *keyname = (char *)xmalloc (6 + strlen (seqs[i]));
 
 		if (key == ESC)
+#if 0
 		  sprintf (keyname, "\\e");
+#else
+		/* XXX - experimental */
+		  sprintf (keyname, "\\M-");
+#endif
 		else if (CTRL_CHAR (key))
 		  sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key)));
 		else if (key == RUBOUT)
@@ -1787,7 +1834,7 @@
 		if (result_index + 2 > result_size)
 		  {
 		    result_size += 10;
-		    result = (char **) xrealloc (result, result_size * sizeof (char *));
+		    result = (char **)xrealloc (result, result_size * sizeof (char *));
 		  }
 
 		result[result_index++] = keyname;
@@ -1806,7 +1853,7 @@
    sequences that can be used to invoke FUNCTION using the current keymap. */
 char **
 rl_invoking_keyseqs (function)
-     Function *function;
+     rl_command_func_t *function;
 {
   return (rl_invoking_keyseqs_in_map (function, _rl_keymap));
 }
@@ -1819,8 +1866,8 @@
      int print_readably;
 {
   register int i;
-  char **names;
-  char *name;
+  const char **names;
+  const char *name;
 
   names = rl_funmap_names ();
 
@@ -1828,7 +1875,7 @@
 
   for (i = 0; name = names[i]; i++)
     {
-      Function *function;
+      rl_command_func_t *function;
       char **invokers;
 
       function = rl_named_function (name);
@@ -1911,11 +1958,8 @@
 	{
 	case ISMACR:
 	  keyname = _rl_get_keyname (key);
-#if 0
-	  out = (char *)map[key].function;
-#else
 	  out = _rl_untranslate_macro_value ((char *)map[key].function);
-#endif
+
 	  if (print_readably)
 	    fprintf (rl_outstream, "\"%s%s\": \"%s\"\n", prefix ? prefix : "",
 						         keyname,
@@ -1925,9 +1969,7 @@
 							keyname,
 							out ? out : "");
 	  free (keyname);
-#if 1
 	  free (out);
-#endif
 	  break;
 	case ISFUNC:
 	  break;
@@ -1935,7 +1977,7 @@
 	  prefix_len = prefix ? strlen (prefix) : 0;
 	  if (key == ESC)
 	    {
-	      keyname = xmalloc (3 + prefix_len);
+	      keyname = (char *)xmalloc (3 + prefix_len);
 	      if (prefix)
 		strcpy (keyname, prefix);
 	      keyname[prefix_len] = '\\';
@@ -1947,7 +1989,7 @@
 	      keyname = _rl_get_keyname (key);
 	      if (prefix)
 		{
-		  out = xmalloc (strlen (keyname) + prefix_len + 1);
+		  out = (char *)xmalloc (strlen (keyname) + prefix_len + 1);
 		  strcpy (out, prefix);
 		  strcpy (out + prefix_len, keyname);
 		  free (keyname);
@@ -1985,7 +2027,7 @@
      int print_readably;
 {
   int i;
-  char *kname;
+  const char *kname;
 
   for (i = 0; boolean_varlist[i].name; i++)
     {
@@ -2017,7 +2059,7 @@
   if (print_readably)
     fprintf (rl_outstream, "set comment-begin %s\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
   else
-    fprintf (rl_outstream, "comment-begin is set to `%s'\n", _rl_comment_begin ? _rl_comment_begin : "");
+    fprintf (rl_outstream, "comment-begin is set to `%s'\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
 
   /* completion-query-items */
   if (print_readably)
@@ -2031,15 +2073,6 @@
   else
     fprintf (rl_outstream, "editing-mode is set to `%s'\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
 
-  /* keymap */
-  kname = rl_get_keymap_name (_rl_keymap);
-  if (kname == 0)
-    kname = rl_get_keymap_name_from_edit_mode ();
-  if (print_readably)
-    fprintf (rl_outstream, "set keymap %s\n", kname ? kname : "none");
-  else
-    fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none");
-
   /* isearch-terminators */
   if (_rl_isearch_terminators)
     {
@@ -2054,6 +2087,15 @@
 
       free (disp);
     }
+
+  /* keymap */
+  kname = rl_get_keymap_name (_rl_keymap);
+  if (kname == 0)
+    kname = rl_get_keymap_name_from_edit_mode ();
+  if (print_readably)
+    fprintf (rl_outstream, "set keymap %s\n", kname ? kname : "none");
+  else
+    fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none");
 }
 
 /* Print all of the current variables and their values to
@@ -2070,18 +2112,24 @@
   return (0);
 }
 
-/* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. */
+/* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound.  Right
+   now, this is always used to attempt to bind the arrow keys, hence the
+   check for rl_vi_movement_mode. */
 void
 _rl_bind_if_unbound (keyseq, default_func)
-     char *keyseq;
-     Function *default_func;
+     const char *keyseq;
+     rl_command_func_t *default_func;
 {
-  Function *func;
+  rl_command_func_t *func;
 
   if (keyseq)
     {
       func = rl_function_of_keyseq (keyseq, _rl_keymap, (int *)NULL);
+#if defined (VI_MODE)
+      if (!func || func == rl_do_lowercase_version || func == rl_vi_movement_mode)
+#else
       if (!func || func == rl_do_lowercase_version)
+#endif
 	rl_set_key (keyseq, default_func, _rl_keymap);
     }
 }
@@ -2089,7 +2137,8 @@
 /* Return non-zero if any members of ARRAY are a substring in STRING. */
 static int
 substring_member_of_array (string, array)
-     char *string, **array;
+     char *string;
+     const char **array;
 {
   while (*array)
     {
diff --git a/readline/callback.c b/readline/callback.c
index 1172356..a8f4323 100644
--- a/readline/callback.c
+++ b/readline/callback.c
@@ -30,6 +30,13 @@
 #if defined (READLINE_CALLBACKS)
 
 #include <sys/types.h>
+
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif
+
 #include <stdio.h>
 
 /* System-specific feature definitions and include files. */
@@ -52,7 +59,7 @@
    text read in at each end of line.  The terminal is kept prepped and
    signals handled all the time, except during calls to the user's function. */
 
-VFunction *rl_linefunc;		/* user callback function */
+rl_vcpfunc_t *rl_linefunc;		/* user callback function */
 static int in_handler;		/* terminal_prepped and signals set? */
 
 /* Make sure the terminal is set up, initialize readline, and prompt. */
@@ -78,11 +85,10 @@
 /* Install a readline handler, set up the terminal, and issue the prompt. */
 void
 rl_callback_handler_install (prompt, linefunc)
-     char *prompt;
-     VFunction *linefunc;
+     const char *prompt;
+     rl_vcpfunc_t *linefunc;
 {
-  rl_prompt = prompt;
-  rl_visible_prompt_length = rl_prompt ? rl_expand_prompt (rl_prompt) : 0;
+  rl_set_prompt (prompt);
   rl_linefunc = linefunc;
   _rl_callback_newline ();
 }
@@ -102,24 +108,33 @@
 
   eof = readline_internal_char ();
 
-  if (rl_done)
+  /* We loop in case some function has pushed input back with rl_execute_next. */
+  for (;;)
     {
-      line = readline_internal_teardown (eof);
+      if (rl_done)
+	{
+	  line = readline_internal_teardown (eof);
 
-      (*rl_deprep_term_function) ();
+	  (*rl_deprep_term_function) ();
 #if defined (HANDLE_SIGNALS)
-      rl_clear_signals ();
+	  rl_clear_signals ();
 #endif
-      in_handler = 0;
-      (*rl_linefunc) (line);
+	  in_handler = 0;
+	  (*rl_linefunc) (line);
 
-    /* If the user did not clear out the line, do it for him. */
-    if (rl_line_buffer[0])
-      _rl_init_line_state ();
+	  /* If the user did not clear out the line, do it for him. */
+	  if (rl_line_buffer[0])
+	    _rl_init_line_state ();
 
-    /* Redisplay the prompt if readline_handler_{install,remove} not called. */
-      if (in_handler == 0 && rl_linefunc)
-	_rl_callback_newline ();
+	  /* Redisplay the prompt if readline_handler_{install,remove}
+	     not called. */
+	  if (in_handler == 0 && rl_linefunc)
+	    _rl_callback_newline ();
+	}
+      if (rl_pending_input)
+	eof = readline_internal_char ();
+      else
+        break;
     }
 }
 
diff --git a/readline/chardefs.h b/readline/chardefs.h
index 664c1e4..a537be2 100644
--- a/readline/chardefs.h
+++ b/readline/chardefs.h
@@ -27,10 +27,14 @@
 
 #if defined (HAVE_CONFIG_H)
 #  if defined (HAVE_STRING_H)
+#    if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
+#      include <memory.h>
+#    endif
 #    include <string.h>
-#  else
-#    include <strings.h>
 #  endif /* HAVE_STRING_H */
+#  if defined (HAVE_STRINGS_H)
+#    include <strings.h>
+#  endif /* HAVE_STRINGS_H */
 #else
 #  include <string.h>
 #endif /* !HAVE_CONFIG_H */
@@ -40,7 +44,10 @@
 #endif
 
 #ifdef CTRL
-#undef CTRL
+#  undef CTRL
+#endif
+#ifdef UNCTRL
+#  undef UNCTRL
 #endif
 
 /* Some character stuff. */
@@ -51,7 +58,7 @@
 #define meta_character_bit 0x080	    /* x0000000, must be on. */
 #define largest_char 255		    /* Largest character value. */
 
-#define CTRL_CHAR(c) ((c) < control_character_threshold && (c) >= 0)
+#define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0))
 #define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char)
 
 #define CTRL(c) ((c) & control_character_mask)
@@ -60,33 +67,59 @@
 #define UNMETA(c) ((c) & (~meta_character_bit))
 #define UNCTRL(c) _rl_to_upper(((c)|control_character_bit))
 
-/* Old versions
-#define _rl_lowercase_p(c) (((c) > ('a' - 1) && (c) < ('z' + 1)))
-#define _rl_uppercase_p(c) (((c) > ('A' - 1) && (c) < ('Z' + 1)))
-#define _rl_digit_p(c)  ((c) >= '0' && (c) <= '9')
-*/
+#if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII))
+#  define IN_CTYPE_DOMAIN(c) 1
+#else
+#  define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
 
-#define _rl_lowercase_p(c) (islower(c))
-#define _rl_uppercase_p(c) (isupper(c))
-#define _rl_digit_p(x)  (isdigit (x))
+#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT)
+#  define isxdigit(c)   (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
+#endif
 
-#define _rl_pure_alphabetic(c) (_rl_lowercase_p(c) || _rl_uppercase_p(c))
-#define ALPHABETIC(c)	(_rl_lowercase_p(c) || _rl_uppercase_p(c) || _rl_digit_p(c))
+#define NON_NEGATIVE(c)	((unsigned char)(c) == (c))
 
-/* Old versions
-#  define _rl_to_upper(c) (_rl_lowercase_p(c) ? ((c) - 32) : (c))
-#  define _rl_to_lower(c) (_rl_uppercase_p(c) ? ((c) + 32) : (c))
-*/
+/* Some systems define these; we want our definitions. */
+#undef ISPRINT
+
+#define ISALNUM(c)	(IN_CTYPE_DOMAIN (c) && isalnum (c))
+#define ISALPHA(c)	(IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISDIGIT(c)	(IN_CTYPE_DOMAIN (c) && isdigit (c))
+#define ISLOWER(c)	(IN_CTYPE_DOMAIN (c) && islower (c))
+#define ISPRINT(c)	(IN_CTYPE_DOMAIN (c) && isprint (c))
+#define ISUPPER(c)	(IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISXDIGIT(c)	(IN_CTYPE_DOMAIN (c) && isxdigit (c))
+
+#define _rl_lowercase_p(c)	(NON_NEGATIVE(c) && ISLOWER(c))
+#define _rl_uppercase_p(c)	(NON_NEGATIVE(c) && ISUPPER(c))
+#define _rl_digit_p(c)		((c) >= '0' && (c) <= '9')
+
+#define _rl_pure_alphabetic(c)	(NON_NEGATIVE(c) && ISALPHA(c))
+#define ALPHABETIC(c)		(NON_NEGATIVE(c) && ISALNUM(c))
 
 #ifndef _rl_to_upper
-#  define _rl_to_upper(c) (islower(c) ? toupper(c) : (c))
-#  define _rl_to_lower(c) (isupper(c) ? tolower(c) : (c))
+#  define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c))
+#  define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c))
 #endif
 
 #ifndef _rl_digit_value
-#define _rl_digit_value(x) ((x) - '0')
+#  define _rl_digit_value(x) ((x) - '0')
 #endif
 
+#ifndef _rl_isident
+#  define _rl_isident(c) (ISALNUM(c) || (c) == '_')
+#endif
+
+#ifndef ISOCTAL
+#  define ISOCTAL(c)	((c) >= '0' && (c) <= '7')
+#endif
+#define OCTVALUE(c)	((c) - '0')
+
+#define HEXVALUE(c) \
+  (((c) >= 'a' && (c) <= 'f') \
+  	? (c)-'a'+10 \
+  	: (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
+
 #ifndef NEWLINE
 #define NEWLINE '\n'
 #endif
@@ -123,18 +156,4 @@
 #endif
 #define ESC CTRL('[')
 
-#ifndef ISOCTAL
-#define ISOCTAL(c)      ((c) >= '0' && (c) <= '7')
-#endif
-#define OCTVALUE(c)     ((c) - '0')
-
-#ifndef isxdigit
-#  define isxdigit(c)   (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-#endif
-
-#define HEXVALUE(c) \
-  (((c) >= 'a' && (c) <= 'f') \
-  	? (c)-'a'+10 \
-  	: (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
-
 #endif  /* _CHARDEFS_H_ */
diff --git a/readline/compat.c b/readline/compat.c
new file mode 100644
index 0000000..a66d210
--- /dev/null
+++ b/readline/compat.c
@@ -0,0 +1,113 @@
+/* compat.c -- backwards compatibility functions. */
+
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include "rlstdc.h"
+#include "rltypedefs.h"
+
+extern void rl_free_undo_list PARAMS((void));
+extern int rl_maybe_save_line PARAMS((void));
+extern int rl_maybe_unsave_line PARAMS((void));
+extern int rl_maybe_replace_line PARAMS((void));
+
+extern int rl_crlf PARAMS((void));
+extern int rl_ding PARAMS((void));
+extern int rl_alphabetic PARAMS((int));
+
+extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
+extern char *rl_username_completion_function PARAMS((const char *, int));
+extern char *rl_filename_completion_function PARAMS((const char *, int));
+
+/* Provide backwards-compatible entry points for old function names. */
+
+void
+free_undo_list ()
+{
+  rl_free_undo_list ();
+}
+
+int
+maybe_replace_line ()
+{
+  return rl_maybe_replace_line ();
+}
+
+int
+maybe_save_line ()
+{
+  return rl_maybe_save_line ();
+}
+
+int
+maybe_unsave_line ()
+{
+  return rl_maybe_unsave_line ();
+}
+
+int
+ding ()
+{
+  return rl_ding ();
+}
+
+int
+crlf ()
+{
+  return rl_crlf ();
+}
+
+int
+alphabetic (c)
+     int c;
+{
+  return rl_alphabetic (c);
+}
+
+char **
+completion_matches (s, f)
+     const char *s;
+     rl_compentry_func_t *f;
+{
+  return rl_completion_matches (s, f);
+}
+
+char *
+username_completion_function (s, i)
+     const char *s;
+     int i;
+{
+  return rl_username_completion_function (s, i);
+}
+
+char *
+filename_completion_function (s, i)
+     const char *s;
+     int i;
+{
+  return rl_filename_completion_function (s, i);
+}
diff --git a/readline/complete.c b/readline/complete.c
index fb48712..21a9d70 100644
--- a/readline/complete.c
+++ b/readline/complete.c
@@ -49,24 +49,13 @@
 #endif /* !errno */
 
 #include <pwd.h>
-#if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwent ();
-#endif /* USG && !HAVE_GETPW_DECLS */
-
-/* ISC systems don't define getpwent() if _POSIX_SOURCE is defined. */
-#if defined (isc386) && defined (_POSIX_SOURCE)
-#  if defined (__STDC__)
-extern struct passwd *getpwent (void);
-#  else
-extern struct passwd *getpwent ();
-#  endif /* !__STDC__ */
-#endif /* isc386 && _POSIX_SOURCE */
 
 #include "posixdir.h"
 #include "posixstat.h"
 
 /* System-specific feature definitions and include files. */
 #include "rldefs.h"
+#include "rlmbutil.h"
 
 /* Some standard library routines. */
 #include "readline.h"
@@ -79,6 +68,21 @@
 typedef int QSFUNC ();
 #endif
 
+#ifdef HAVE_LSTAT
+#  define LSTAT lstat
+#else
+#  define LSTAT stat
+#endif
+
+/* Unix version of a hidden file.  Could be different on other systems. */
+#define HIDDEN_FILE(fname)	((fname)[0] == '.')
+
+/* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
+   defined. */
+#if !defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)
+extern struct passwd *getpwent PARAMS((void));
+#endif /* !HAVE_GETPW_DECLS || _POSIX_SOURCE */
+
 /* If non-zero, then this is the address of a function to call when
    completing a word would normally display the list of possible matches.
    This function is called instead of actually doing the display.
@@ -86,28 +90,34 @@
    where MATCHES is the array of strings that matched, NUM_MATCHES is the
    number of strings in that array, and MAX_LENGTH is the length of the
    longest string in that array. */
-VFunction *rl_completion_display_matches_hook = (VFunction *)NULL;
-
-/* Forward declarations for functions defined and used in this file. */
-char *filename_completion_function __P((char *, int));
-char **completion_matches __P((char *, CPFunction *));
+rl_compdisp_func_t *rl_completion_display_matches_hook = (rl_compdisp_func_t *)NULL;
 
 #if defined (VISIBLE_STATS)
 #  if !defined (X_OK)
 #    define X_OK 1
 #  endif
-static int stat_char __P((char *));
+static int stat_char PARAMS((char *));
 #endif
 
-static char *rl_quote_filename __P((char *, int, char *));
-static char *rl_strpbrk __P((char *, char *));
+static char *rl_quote_filename PARAMS((char *, int, char *));
 
-static char **remove_duplicate_matches __P((char **));
-static void insert_match __P((char *, int, int, char *));
-static int append_to_match __P((char *, int, int));
-static void insert_all_matches __P((char **, int, char *));
-static void display_matches __P((char **));
-static int compute_lcd_of_matches __P((char **, int, char *));
+static void set_completion_defaults PARAMS((int));
+static int get_y_or_n PARAMS((int));
+static int _rl_internal_pager PARAMS((int));
+static char *printable_part PARAMS((char *));
+static int print_filename PARAMS((char *, char *));
+
+static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int));
+
+static char **remove_duplicate_matches PARAMS((char **));
+static void insert_match PARAMS((char *, int, int, char *));
+static int append_to_match PARAMS((char *, int, int, int));
+static void insert_all_matches PARAMS((char **, int, char *));
+static void display_matches PARAMS((char **));
+static int compute_lcd_of_matches PARAMS((char **, int, const char *));
+static int postprocess_matches PARAMS((char ***, int));
+
+static char *make_quoted_replacement PARAMS((char *, int, char *));
 
 /* **************************************************************** */
 /*								    */
@@ -123,6 +133,12 @@
 /* If non-zero, completed directory names have a slash appended. */
 int _rl_complete_mark_directories = 1;
 
+/* If non-zero, the symlinked directory completion behavior introduced in
+   readline-4.2a is disabled, and symlinks that point to directories have
+   a slash appended (subject to the value of _rl_complete_mark_directories).
+   This is user-settable via the mark-symlinked-directories variable. */
+int _rl_complete_mark_symlink_dirs = 0;
+
 /* If non-zero, completions are printed horizontally in alphabetical order,
    like `ls -x'. */
 int _rl_print_completions_horizontally;
@@ -134,6 +150,10 @@
 int _rl_completion_case_fold;
 #endif
 
+/* If non-zero, don't match hidden files (filenames beginning with a `.' on
+   Unix) when doing filename completion. */
+int _rl_match_hidden_files = 1;
+
 /* Global variables available to applications using readline. */
 
 #if defined (VISIBLE_STATS)
@@ -146,15 +166,17 @@
 /* If non-zero, then this is the address of a function to call when
    completing on a directory name.  The function is called with
    the address of a string (the current directory name) as an arg. */
-Function *rl_directory_completion_hook = (Function *)NULL;
+rl_icppfunc_t *rl_directory_completion_hook = (rl_icppfunc_t *)NULL;
+
+rl_icppfunc_t *rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL;
 
 /* Non-zero means readline completion functions perform tilde expansion. */
 int rl_complete_with_tilde_expansion = 0;
 
 /* Pointer to the generator function for completion_matches ().
-   NULL means to use filename_completion_function (), the default filename
+   NULL means to use rl_filename_completion_function (), the default filename
    completer. */
-Function *rl_completion_entry_function = (Function *)NULL;
+rl_compentry_func_t *rl_completion_entry_function = (rl_compentry_func_t *)NULL;
 
 /* Pointer to alternative function to create matches.
    Function is called with TEXT, START, and END.
@@ -163,7 +185,7 @@
    If this function exists and returns NULL then call the value of
    rl_completion_entry_function to try to match, otherwise use the
    array of strings returned. */
-CPPFunction *rl_attempted_completion_function = (CPPFunction *)NULL;
+rl_completion_func_t *rl_attempted_completion_function = (rl_completion_func_t *)NULL;
 
 /* Non-zero means to suppress normal filename completion after the
    user-specified completion function has been called. */
@@ -179,32 +201,34 @@
    she is sure she wants to see them all. */
 int rl_completion_query_items = 100;
 
+int _rl_page_completions = 1;
+
 /* The basic list of characters that signal a break between words for the
    completer routine.  The contents of this variable is what breaks words
    in the shell, i.e. " \t\n\"\\'`@$><=" */
-char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{(";
+const char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{("; /* }) */
 
 /* List of basic quoting characters. */
-char *rl_basic_quote_characters = "\"'";
+const char *rl_basic_quote_characters = "\"'";
 
 /* The list of characters that signal a break between words for
    rl_complete_internal.  The default list is the contents of
    rl_basic_word_break_characters.  */
-char *rl_completer_word_break_characters = (char *)NULL;
+const char *rl_completer_word_break_characters = (const char *)NULL;
 
 /* List of characters which can be used to quote a substring of the line.
    Completion occurs on the entire substring, and within the substring
    rl_completer_word_break_characters are treated as any other character,
    unless they also appear within this list. */
-char *rl_completer_quote_characters = (char *)NULL;
+const char *rl_completer_quote_characters = (const char *)NULL;
 
 /* List of characters that should be quoted in filenames by the completer. */
-char *rl_filename_quote_characters = (char *)NULL;
+const char *rl_filename_quote_characters = (const char *)NULL;
 
 /* List of characters that are word break characters, but should be left
    in TEXT when it is passed to the completion function.  The shell uses
    this to help determine what kind of completing to do. */
-char *rl_special_prefixes = (char *)NULL;
+const char *rl_special_prefixes = (const char *)NULL;
 
 /* If non-zero, then disallow duplicates in the matches. */
 int rl_ignore_completion_duplicates = 1;
@@ -230,29 +254,45 @@
    the list of matches as required, but all elements of the array must be
    free()'d if they are deleted. The main intent of this function is
    to implement FIGNORE a la SunOS csh. */
-Function *rl_ignore_some_completions_function = (Function *)NULL;
+rl_compignore_func_t *rl_ignore_some_completions_function = (rl_compignore_func_t *)NULL;
 
 /* Set to a function to quote a filename in an application-specific fashion.
    Called with the text to quote, the type of match found (single or multiple)
    and a pointer to the quoting character to be used, which the function can
    reset if desired. */
-CPFunction *rl_filename_quoting_function = rl_quote_filename;
+rl_quote_func_t *rl_filename_quoting_function = rl_quote_filename;
          
 /* Function to call to remove quoting characters from a filename.  Called
    before completion is attempted, so the embedded quotes do not interfere
    with matching names in the file system.  Readline doesn't do anything
    with this; it's set only by applications. */
-CPFunction *rl_filename_dequoting_function = (CPFunction *)NULL;
+rl_dequote_func_t *rl_filename_dequoting_function = (rl_dequote_func_t *)NULL;
 
 /* Function to call to decide whether or not a word break character is
    quoted.  If a character is quoted, it does not break words for the
    completer. */
-Function *rl_char_is_quoted_p = (Function *)NULL;
+rl_linebuf_func_t *rl_char_is_quoted_p = (rl_linebuf_func_t *)NULL;
+
+/* If non-zero, the completion functions don't append anything except a
+   possible closing quote.  This is set to 0 by rl_complete_internal and
+   may be changed by an application-specific completion function. */
+int rl_completion_suppress_append = 0;
 
 /* Character appended to completed words when at the end of the line.  The
    default is a space. */
 int rl_completion_append_character = ' ';
 
+/* If non-zero, a slash will be appended to completed filenames that are
+   symbolic links to directory names, subject to the value of the
+   mark-directories variable (which is user-settable).  This exists so
+   that application completion functions can override the user's preference
+   (set via the mark-symlinked-directories variable) if appropriate.
+   It's set to the value of _rl_complete_mark_symlink_dirs in
+   rl_complete_internal before any application-specific completion
+   function is called, so without that function doing anything, the user's
+   preferences are honored. */
+int rl_completion_mark_symlink_dirs;
+
 /* If non-zero, inhibit completion (temporarily). */
 int rl_inhibit_completion;
 
@@ -269,13 +309,13 @@
 
 /* Complete the word at or before point.  You have supplied the function
    that does the initial simple matching selection algorithm (see
-   completion_matches ()).  The default is to do filename completion. */
+   rl_completion_matches ()).  The default is to do filename completion. */
 int
 rl_complete (ignore, invoking_key)
      int ignore, invoking_key;
 {
   if (rl_inhibit_completion)
-    return (rl_insert (ignore, invoking_key));
+    return (_rl_insert_char (ignore, invoking_key));
   else if (rl_last_func == rl_complete && !completion_changed_buffer)
     return (rl_complete_internal ('?'));
   else if (_rl_complete_show_all)
@@ -299,52 +339,90 @@
   return (rl_complete_internal ('*'));
 }
 
+/* Return the correct value to pass to rl_complete_internal performing
+   the same tests as rl_complete.  This allows consecutive calls to an
+   application's completion function to list possible completions and for
+   an application-specific completion function to honor the
+   show-all-if-ambiguous readline variable. */
+int
+rl_completion_mode (cfunc)
+     rl_command_func_t *cfunc;
+{
+  if (rl_last_func == cfunc && !completion_changed_buffer)
+    return '?';
+  else if (_rl_complete_show_all)
+    return '!';
+  else
+    return TAB;
+}
+
 /************************************/
 /*				    */
 /*    Completion utility functions  */
 /*				    */
 /************************************/
 
-/* Find the first occurrence in STRING1 of any character from STRING2.
-   Return a pointer to the character in STRING1. */
-static char *
-rl_strpbrk (string1, string2)
-     char *string1, *string2;
+/* Set default values for readline word completion.  These are the variables
+   that application completion functions can change or inspect. */
+static void
+set_completion_defaults (what_to_do)
+     int what_to_do;
 {
-  register char *scan;
+  /* Only the completion entry function can change these. */
+  rl_filename_completion_desired = 0;
+  rl_filename_quoting_desired = 1;
+  rl_completion_type = what_to_do;
+  rl_completion_suppress_append = 0;
 
-  for (; *string1; string1++)
-    {
-      for (scan = string2; *scan; scan++)
-	{
-	  if (*string1 == *scan)
-	    {
-	      return (string1);
-	    }
-	}
-    }
-  return ((char *)NULL);
+  /* The completion entry function may optionally change this. */
+  rl_completion_mark_symlink_dirs = _rl_complete_mark_symlink_dirs;
 }
 
 /* The user must press "y" or "n". Non-zero return means "y" pressed. */
 static int
-get_y_or_n ()
+get_y_or_n (for_pager)
+     int for_pager;
 {
   int c;
 
   for (;;)
     {
+      RL_SETSTATE(RL_STATE_MOREINPUT);
       c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
       if (c == 'y' || c == 'Y' || c == ' ')
 	return (1);
       if (c == 'n' || c == 'N' || c == RUBOUT)
 	return (0);
       if (c == ABORT_CHAR)
 	_rl_abort_internal ();
-      ding ();
+      if (for_pager && (c == NEWLINE || c == RETURN))
+	return (2);
+      if (for_pager && (c == 'q' || c == 'Q'))
+	return (0);
+      rl_ding ();
     }
 }
 
+static int
+_rl_internal_pager (lines)
+     int lines;
+{
+  int i;
+
+  fprintf (rl_outstream, "--More--");
+  fflush (rl_outstream);
+  i = get_y_or_n (1);
+  _rl_erase_entire_line ();
+  if (i == 0)
+    return -1;
+  else if (i == 2)
+    return (lines - 1);
+  else
+    return 0;
+}
+
 #if defined (VISIBLE_STATS)
 /* Return the character which best describes FILENAME.
      `@' for symbolic links
@@ -405,19 +483,41 @@
 /* Return the portion of PATHNAME that should be output when listing
    possible completions.  If we are hacking filename completion, we
    are only interested in the basename, the portion following the
-   final slash.  Otherwise, we return what we were passed. */
+   final slash.  Otherwise, we return what we were passed.  Since
+   printing empty strings is not very informative, if we're doing
+   filename completion, and the basename is the empty string, we look
+   for the previous slash and return the portion following that.  If
+   there's no previous slash, we just return what we were passed. */
 static char *
 printable_part (pathname)
       char *pathname;
 {
-  char *temp;
+  char *temp, *x;
 
-  temp = rl_filename_completion_desired ? strrchr (pathname, '/') : (char *)NULL;
+  if (rl_filename_completion_desired == 0)	/* don't need to do anything */
+    return (pathname);
+
+  temp = strrchr (pathname, '/');
 #if defined (__MSDOS__)
-  if (rl_filename_completion_desired && temp == 0 && isalpha (pathname[0]) && pathname[1] == ':')
+  if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':')
     temp = pathname + 1;
 #endif
-  return (temp ? ++temp : pathname);
+
+  if (temp == 0 || *temp == '\0')
+    return (pathname);
+  /* If the basename is NULL, we might have a pathname like '/usr/src/'.
+     Look for a previous slash and, if one is found, return the portion
+     following that slash.  If there's no previous slash, just return the
+     pathname we were passed. */
+  else if (temp[1] == '\0')
+    {
+      for (x = temp - 1; x > pathname; x--)
+        if (*x == '/')
+          break;
+      return ((*x == '/') ? x + 1 : pathname);
+    }
+  else
+    return ++temp;
 }
 
 /* Output TO_PRINT to rl_outstream.  If VISIBLE_STATS is defined and we
@@ -488,7 +588,7 @@
 
 	  slen = strlen (s);
 	  tlen = strlen (to_print);
-	  new_full_pathname = xmalloc (slen + tlen + 2);
+	  new_full_pathname = (char *)xmalloc (slen + tlen + 2);
 	  strcpy (new_full_pathname, s);
 	  new_full_pathname[slen] = '/';
 	  strcpy (new_full_pathname + slen + 1, to_print);
@@ -523,7 +623,7 @@
 {
   char *r;
 
-  r = xmalloc (strlen (s) + 2);
+  r = (char *)xmalloc (strlen (s) + 2);
   *r = *rl_completer_quote_characters;
   strcpy (r + 1, s);
   if (qcp)
@@ -534,7 +634,7 @@
 /* Find the bounds of the current word for completion purposes, and leave
    rl_point set to the end of the word.  This function skips quoted
    substrings (characters between matched pairs of characters in
-   rl_completer_quote_characters.  First we try to find an unclosed
+   rl_completer_quote_characters).  First we try to find an unclosed
    quoted substring on which to do matching.  If one is not found, we use
    the word break characters to find the boundaries of the current word.
    We call an application-specific function to decide whether or not a
@@ -546,8 +646,8 @@
    quote, or backslash) anywhere in the string.  DP, if non-null, is set to
    the value of the delimiter character that caused a word break. */
 
-static char
-find_completion_word (fp, dp)
+char
+_rl_find_completion_word (fp, dp)
      int *fp, *dp;
 {
   int scan, end, found_quote, delimiter, pass_next, isbrk;
@@ -571,7 +671,11 @@
 	      continue;
 	    }
 
-	  if (rl_line_buffer[scan] == '\\')
+	  /* Shell-like semantics for single quotes -- don't allow backslash
+	     to quote anything in single quotes, especially not the closing
+	     quote.  If you don't like this, take out the check on the value
+	     of quote_char. */
+	  if (quote_char != '\'' && rl_line_buffer[scan] == '\\')
 	    {
 	      pass_next = 1;
 	      found_quote |= RL_QF_BACKSLASH;
@@ -598,6 +702,8 @@
 		found_quote |= RL_QF_SINGLE_QUOTE;
 	      else if (quote_char == '"')
 		found_quote |= RL_QF_DOUBLE_QUOTE;
+	      else
+		found_quote |= RL_QF_OTHER_QUOTE;      
 	    }
 	}
     }
@@ -607,7 +713,11 @@
       /* We didn't find an unclosed quoted substring upon which to do
          completion, so use the word break characters to find the
          substring on which to complete. */
+#if defined (HANDLE_MULTIBYTE)
+      while (rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_ANY))
+#else
       while (--rl_point)
+#endif
 	{
 	  scan = rl_line_buffer[rl_point];
 
@@ -671,7 +781,7 @@
 gen_completion_matches (text, start, end, our_func, found_quote, quote_char)
      char *text;
      int start, end;
-     Function *our_func;
+     rl_compentry_func_t *our_func;
      int found_quote, quote_char;
 {
   char **matches, *temp;
@@ -695,7 +805,7 @@
      filename dequoting function. */
   temp = (char *)NULL;
 
-  if (found_quote && our_func == (Function *)filename_completion_function &&
+  if (found_quote && our_func == rl_filename_completion_function &&
       rl_filename_dequoting_function)
     {
       /* delete single and double quotes */
@@ -703,7 +813,7 @@
       text = temp;	/* not freeing text is not a memory leak */
     }
 
-  matches = completion_matches (text, (CPFunction *)our_func);
+  matches = rl_completion_matches (text, our_func);
   FREE (temp);
   return matches;  
 }
@@ -775,10 +885,15 @@
 compute_lcd_of_matches (match_list, matches, text)
      char **match_list;
      int matches;
-     char *text;
+     const char *text;
 {
   register int i, c1, c2, si;
   int low;		/* Count of max-matched characters. */
+#if defined (HANDLE_MULTIBYTE)
+  int v;
+  mbstate_t ps1, ps2;
+  wchar_t wc1, wc2;
+#endif
 
   /* If only one match, just use that.  Otherwise, compare each
      member of the list with the next, finding out where they
@@ -792,12 +907,33 @@
 
   for (i = 1, low = 100000; i < matches; i++)
     {
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  memset (&ps1, 0, sizeof (mbstate_t));
+	  memset (&ps2, 0, sizeof (mbstate_t));
+	}
+#endif
       if (_rl_completion_case_fold)
 	{
 	  for (si = 0;
 	       (c1 = _rl_to_lower(match_list[i][si])) &&
 	       (c2 = _rl_to_lower(match_list[i + 1][si]));
 	       si++)
+#if defined (HANDLE_MULTIBYTE)
+	    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	      {
+		v = mbrtowc (&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1);
+		mbrtowc (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2);
+		wc1 = towlower (wc1);
+		wc2 = towlower (wc2);
+		if (wc1 != wc2)
+		  break;
+		else if (v > 1)
+		  si += v - 1;
+	      }
+	    else
+#endif
 	    if (c1 != c2)
 	      break;
 	}
@@ -807,6 +943,17 @@
 	       (c1 = match_list[i][si]) &&
 	       (c2 = match_list[i + 1][si]);
 	       si++)
+#if defined (HANDLE_MULTIBYTE)
+	    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	      {
+		mbstate_t ps_back = ps1;
+		if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2))
+		  break;
+		else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1)
+		  si += v - 1;
+	      }
+	    else
+#endif
 	    if (c1 != c2)
 	      break;
 	}
@@ -820,13 +967,42 @@
      value of matches[0]. */
   if (low == 0 && text && *text)
     {
-      match_list[0] = xmalloc (strlen (text) + 1);
+      match_list[0] = (char *)xmalloc (strlen (text) + 1);
       strcpy (match_list[0], text);
     }
   else
     {
-      match_list[0] = xmalloc (low + 1);
-      strncpy (match_list[0], match_list[1], low);
+      match_list[0] = (char *)xmalloc (low + 1);
+
+      /* XXX - this might need changes in the presence of multibyte chars */
+
+      /* If we are ignoring case, try to preserve the case of the string
+	 the user typed in the face of multiple matches differing in case. */
+      if (_rl_completion_case_fold)
+	{
+	  /* sort the list to get consistent answers. */
+	  qsort (match_list+1, matches, sizeof(char *), (QSFUNC *)_rl_qsort_string_compare);
+
+	  si = strlen (text);
+	  if (si <= low)
+	    {
+	      for (i = 1; i <= matches; i++)
+		if (strncmp (match_list[i], text, si) == 0)
+		  {
+		    strncpy (match_list[0], match_list[i], low);
+		    break;
+		  }
+	      /* no casematch, use first entry */
+	      if (i > matches)
+		strncpy (match_list[0], match_list[1], low);
+	    }
+	  else
+	    /* otherwise, just use the text the user typed. */
+	    strncpy (match_list[0], text, low);
+	}
+      else
+        strncpy (match_list[0], match_list[1], low);
+
       match_list[0][low] = '\0';
     }
 
@@ -843,6 +1019,9 @@
 
   matches = *matchesp;
 
+  if (matches == 0)
+    return 0;
+
   /* It seems to me that in all the cases we handle we would like
      to ignore duplicate possiblilities.  Scan for the text to
      insert being identical to the other completions. */
@@ -895,17 +1074,17 @@
      char **matches;
      int len, max;
 {
-  int count, limit, printed_len;
+  int count, limit, printed_len, lines;
   int i, j, k, l;
   char *temp;
 
   /* How many items of MAX length can we fit in the screen window? */
   max += 2;
-  limit = screenwidth / max;
-  if (limit != 1 && (limit * max == screenwidth))
+  limit = _rl_screenwidth / max;
+  if (limit != 1 && (limit * max == _rl_screenwidth))
     limit--;
 
-  /* Avoid a possible floating exception.  If max > screenwidth,
+  /* Avoid a possible floating exception.  If max > _rl_screenwidth,
      limit will be 0 and a divide-by-zero fault will result. */
   if (limit == 0)
     limit = 1;
@@ -921,8 +1100,9 @@
   if (rl_ignore_completion_duplicates == 0)
     qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
 
-  crlf ();
+  rl_crlf ();
 
+  lines = 0;
   if (_rl_print_completions_horizontally == 0)
     {
       /* Print the sorted items, up-and-down alphabetically, like ls. */
@@ -943,7 +1123,14 @@
 		}
 	      l += count;
 	    }
-	  crlf ();
+	  rl_crlf ();
+	  lines++;
+	  if (_rl_page_completions && lines >= (_rl_screenheight - 1) && i < count)
+	    {
+	      lines = _rl_internal_pager (lines);
+	      if (lines < 0)
+		return;
+	    }
 	}
     }
   else
@@ -957,13 +1144,22 @@
 	  if (matches[i+1])
 	    {
 	      if (i && (limit > 1) && (i % limit) == 0)
-		crlf ();
+		{
+		  rl_crlf ();
+		  lines++;
+		  if (_rl_page_completions && lines >= _rl_screenheight - 1)
+		    {
+		      lines = _rl_internal_pager (lines);
+		      if (lines < 0)
+			return;
+		    }
+		}
 	      else
 		for (k = 0; k < max - printed_len; k++)
 		  putc (' ', rl_outstream);
 	    }
 	}
-      crlf ();
+      rl_crlf ();
     }
 }
 
@@ -992,9 +1188,9 @@
   if (matches[1] == 0)
     {
       temp = printable_part (matches[0]);
-      crlf ();
+      rl_crlf ();
       print_filename (temp, matches[0]);
-      crlf ();
+      rl_crlf ();
 
       rl_forced_update_display ();
       rl_display_fixed = 1;
@@ -1026,12 +1222,12 @@
      see them all. */
   if (len >= rl_completion_query_items)
     {
-      crlf ();
+      rl_crlf ();
       fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len);
       fflush (rl_outstream);
-      if (get_y_or_n () == 0)
+      if (get_y_or_n (0) == 0)
 	{
-	  crlf ();
+	  rl_crlf ();
 
 	  rl_forced_update_display ();
 	  rl_display_fixed = 1;
@@ -1079,7 +1275,7 @@
          This also checks whether the common prefix of several
 	 matches needs to be quoted. */
       should_quote = rl_filename_quote_characters
-			? (rl_strpbrk (match, rl_filename_quote_characters) != 0)
+			? (_rl_strpbrk (match, rl_filename_quote_characters) != 0)
 			: 0;
 
       do_replace = should_quote ? mtype : NO_MATCH;
@@ -1125,14 +1321,20 @@
    just-inserted match.  If the user has specified that directories
    should be marked by a trailing `/', append one of those instead.  The
    default trailing character is a space.  Returns the number of characters
-   appended. */
+   appended.  If NONTRIVIAL_MATCH is set, we test for a symlink (if the OS
+   has them) and don't add a suffix for a symlink to a directory.  A
+   nontrivial match is one that actually adds to the word being completed.
+   The variable rl_completion_mark_symlink_dirs controls this behavior
+   (it's initially set to the what the user has chosen, indicated by the
+   value of _rl_complete_mark_symlink_dirs, but may be modified by an
+   application's completion function). */
 static int
-append_to_match (text, delimiter, quote_char)
+append_to_match (text, delimiter, quote_char, nontrivial_match)
      char *text;
-     int delimiter, quote_char;
+     int delimiter, quote_char, nontrivial_match;
 {
   char temp_string[4], *filename;
-  int temp_string_index;
+  int temp_string_index, s;
   struct stat finfo;
 
   temp_string_index = 0;
@@ -1141,7 +1343,7 @@
 
   if (delimiter)
     temp_string[temp_string_index++] = delimiter;
-  else if (rl_completion_append_character)
+  else if (rl_completion_suppress_append == 0 && rl_completion_append_character)
     temp_string[temp_string_index++] = rl_completion_append_character;
 
   temp_string[temp_string_index++] = '\0';
@@ -1149,21 +1351,39 @@
   if (rl_filename_completion_desired)
     {
       filename = tilde_expand (text);
-      if (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode))
+      s = (nontrivial_match && rl_completion_mark_symlink_dirs == 0)
+		? LSTAT (filename, &finfo)
+		: stat (filename, &finfo);
+      if (s == 0 && S_ISDIR (finfo.st_mode))
 	{
-	  if (_rl_complete_mark_directories && rl_line_buffer[rl_point] != '/')
-	    rl_insert_text ("/");
+	  if (_rl_complete_mark_directories)
+	    {
+	      /* This is clumsy.  Avoid putting in a double slash if point
+		 is at the end of the line and the previous character is a
+		 slash. */
+	      if (rl_point && rl_line_buffer[rl_point] == '\0' && rl_line_buffer[rl_point - 1] == '/')
+		;
+	      else if (rl_line_buffer[rl_point] != '/')
+		rl_insert_text ("/");
+	    }
 	}
+#ifdef S_ISLNK
+      /* Don't add anything if the filename is a symlink and resolves to a
+	 directory. */
+      else if (s == 0 && S_ISLNK (finfo.st_mode) &&
+	       stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode))
+	;
+#endif
       else
 	{
-	  if (rl_point == rl_end)
+	  if (rl_point == rl_end && temp_string_index)
 	    rl_insert_text (temp_string);
 	}
       free (filename);
     }
   else
     {
-      if (rl_point == rl_end)
+      if (rl_point == rl_end && temp_string_index)
 	rl_insert_text (temp_string);
     }
 
@@ -1209,12 +1429,15 @@
   rl_end_undo_group ();
 }
 
-static void
-free_match_list (matches)
+void
+_rl_free_match_list (matches)
      char **matches;
 {
   register int i;
 
+  if (matches == 0)
+    return;
+
   for (i = 0; matches[i]; i++)
     free (matches[i]);
   free (matches);
@@ -1232,20 +1455,19 @@
      int what_to_do;
 {
   char **matches;
-  Function *our_func;
-  int start, end, delimiter, found_quote, i;
+  rl_compentry_func_t *our_func;
+  int start, end, delimiter, found_quote, i, nontrivial_lcd;
   char *text, *saved_line_buffer;
   char quote_char;
 
-  /* Only the completion entry function can change these. */
-  rl_filename_completion_desired = 0;
-  rl_filename_quoting_desired = 1;
-  rl_completion_type = what_to_do;
+  RL_SETSTATE(RL_STATE_COMPLETING);
+
+  set_completion_defaults (what_to_do);
 
   saved_line_buffer = rl_line_buffer ? savestring (rl_line_buffer) : (char *)NULL;
   our_func = rl_completion_entry_function
 		? rl_completion_entry_function
-		: (Function *)filename_completion_function;
+		: rl_filename_completion_function;
 
   /* We now look backwards for the start of a filename/variable word. */
   end = rl_point;
@@ -1255,38 +1477,38 @@
   if (rl_point)
     /* This (possibly) changes rl_point.  If it returns a non-zero char,
        we know we have an open quote. */
-    quote_char = find_completion_word (&found_quote, &delimiter);
+    quote_char = _rl_find_completion_word (&found_quote, &delimiter);
 
   start = rl_point;
   rl_point = end;
 
   text = rl_copy_text (start, end);
   matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
+  /* nontrivial_lcd is set if the common prefix adds something to the word
+     being completed. */
+  nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
   free (text);
 
   if (matches == 0)
     {
-      ding ();
+      rl_ding ();
       FREE (saved_line_buffer);
+      completion_changed_buffer = 0;
+      RL_UNSETSTATE(RL_STATE_COMPLETING);
       return (0);
     }
 
-#if 0
-  /* If we are matching filenames, our_func will have been set to
-     filename_completion_function */
-  i = our_func == (Function *)filename_completion_function;
-#else
   /* If we are matching filenames, the attempted completion function will
      have set rl_filename_completion_desired to a non-zero value.  The basic
-     filename_completion_function does this. */
+     rl_filename_completion_function does this. */
   i = rl_filename_completion_desired;
-#endif
 
   if (postprocess_matches (&matches, i) == 0)
     {
-      ding ();
+      rl_ding ();
       FREE (saved_line_buffer);
       completion_changed_buffer = 0;
+      RL_UNSETSTATE(RL_STATE_COMPLETING);
       return (0);
     }
 
@@ -1314,10 +1536,10 @@
 	      break;
 	    }
 	  else if (rl_editing_mode != vi_mode)
-	    ding ();	/* There are other matches remaining. */
+	    rl_ding ();	/* There are other matches remaining. */
 	}
       else
-	append_to_match (matches[0], delimiter, quote_char);
+	append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd);
 
       break;
 
@@ -1331,12 +1553,13 @@
 
     default:
       fprintf (stderr, "\r\nreadline: bad value %d for what_to_do in rl_complete\n", what_to_do);
-      ding ();
+      rl_ding ();
       FREE (saved_line_buffer);
+      RL_UNSETSTATE(RL_STATE_COMPLETING);
       return 1;
     }
 
-  free_match_list (matches);
+  _rl_free_match_list (matches);
 
   /* Check to see if the line has changed through all of this manipulation. */
   if (saved_line_buffer)
@@ -1345,6 +1568,7 @@
       free (saved_line_buffer);
     }
 
+  RL_UNSETSTATE(RL_STATE_COMPLETING);
   return 0;
 }
 
@@ -1367,9 +1591,9 @@
      when there are no more matches.
  */
 char **
-completion_matches (text, entry_function)
-     char *text;
-     CPFunction *entry_function;
+rl_completion_matches (text, entry_function)
+     const char *text;
+     rl_compentry_func_t *entry_function;
 {
   /* Number of slots in match_list. */
   int match_list_size;
@@ -1414,8 +1638,8 @@
    TEXT contains a partial username preceded by a random
    character (usually `~').  */
 char *
-username_completion_function (text, state)
-     char *text;
+rl_username_completion_function (text, state)
+     const char *text;
      int state;
 {
 #if defined (__WIN32__) || defined (__OPENNT)
@@ -1452,7 +1676,7 @@
     }
   else
     {
-      value = xmalloc (2 + strlen (entry->pw_name));
+      value = (char *)xmalloc (2 + strlen (entry->pw_name));
 
       *value = *text;
 
@@ -1471,8 +1695,8 @@
    because of all the pathnames that must be followed when looking up the
    completion for a command. */
 char *
-filename_completion_function (text, state)
-     char *text;
+rl_filename_completion_function (text, state)
+     const char *text;
      int state;
 {
   static DIR *directory = (DIR *)NULL;
@@ -1507,7 +1731,7 @@
 
 #if defined (__MSDOS__)
       /* special hack for //X/... */
-      if (dirname[0] == '/' && dirname[1] == '/' && isalpha (dirname[2]) && dirname[3] == '/')
+      if (dirname[0] == '/' && dirname[1] == '/' && ISALPHA ((unsigned char)dirname[2]) && dirname[3] == '/')
         temp = strrchr (dirname + 3, '/');
 #endif
 
@@ -1518,7 +1742,7 @@
 	}
 #if defined (__MSDOS__)
       /* searches from current directory on the drive */
-      else if (isalpha (dirname[0]) && dirname[1] == ':')
+      else if (ISALPHA ((unsigned char)dirname[0]) && dirname[1] == ':')
         {
           strcpy (filename, dirname + 2);
           dirname[2] = '\0';
@@ -1542,6 +1766,9 @@
 	  dirname = temp;
 	}
 
+      if (rl_directory_rewrite_hook)
+	(*rl_directory_rewrite_hook) (&dirname);
+
       if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname))
 	{
 	  free (users_dirname);
@@ -1565,10 +1792,14 @@
   entry = (struct dirent *)NULL;
   while (directory && (entry = readdir (directory)))
     {
-      /* Special case for no filename.
-	 All entries except "." and ".." match. */
+      /* Special case for no filename.  If the user has disabled the
+         `match-hidden-files' variable, skip filenames beginning with `.'.
+	 All other entries except "." and ".." match. */
       if (filename_len == 0)
 	{
+	  if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name))
+	    continue;
+
 	  if (entry->d_name[0] != '.' ||
 	       (entry->d_name[1] &&
 		 (entry->d_name[1] != '.' || entry->d_name[2])))
@@ -1628,7 +1859,7 @@
 	  if (rl_complete_with_tilde_expansion && *users_dirname == '~')
 	    {
 	      dirlen = strlen (dirname);
-	      temp = xmalloc (2 + dirlen + D_NAMLEN (entry));
+	      temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry));
 	      strcpy (temp, dirname);
 	      /* Canonicalization cuts off any final slash present.  We
 		 may need to add it back. */
@@ -1641,8 +1872,11 @@
 	  else
 	    {
 	      dirlen = strlen (users_dirname);
-	      temp = xmalloc (1 + dirlen + D_NAMLEN (entry));
+	      temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry));
 	      strcpy (temp, users_dirname);
+	      /* Make sure that temp has a trailing slash here. */
+	      if (users_dirname[dirlen - 1] != '/')
+		temp[dirlen++] = '/';
 	    }
 
 	  strcpy (temp + dirlen, entry->d_name);
@@ -1667,7 +1901,7 @@
 rl_menu_complete (count, ignore)
      int count, ignore;
 {
-  Function *our_func;
+  rl_compentry_func_t *our_func;
   int matching_filenames, found_quote;
 
   static char *orig_text;
@@ -1685,19 +1919,17 @@
       /* Clean up from previous call, if any. */
       FREE (orig_text);
       if (matches)
-	free_match_list (matches);
+	_rl_free_match_list (matches);
 
       match_list_index = match_list_size = 0;
       matches = (char **)NULL;
 
       /* Only the completion entry function can change these. */
-      rl_filename_completion_desired = 0;
-      rl_filename_quoting_desired = 1;
-      rl_completion_type = '%';
+      set_completion_defaults ('%');
 
       our_func = rl_completion_entry_function
 			? rl_completion_entry_function
-			: (Function *)filename_completion_function;
+			: rl_filename_completion_function;
 
       /* We now look backwards for the start of a filename/variable word. */
       orig_end = rl_point;
@@ -1707,7 +1939,7 @@
       if (rl_point)
 	/* This (possibly) changes rl_point.  If it returns a non-zero char,
 	   we know we have an open quote. */
-	quote_char = find_completion_word (&found_quote, &delimiter);
+	quote_char = _rl_find_completion_word (&found_quote, &delimiter);
 
       orig_start = rl_point;
       rl_point = orig_end;
@@ -1716,19 +1948,14 @@
       matches = gen_completion_matches (orig_text, orig_start, orig_end,
 					our_func, found_quote, quote_char);
 
-#if 0
-      /* If we are matching filenames, our_func will have been set to
-	 filename_completion_function */
-      matching_filenames = our_func == (Function *)filename_completion_function;
-#else
       /* If we are matching filenames, the attempted completion function will
 	 have set rl_filename_completion_desired to a non-zero value.  The basic
-	 filename_completion_function does this. */
+	 rl_filename_completion_function does this. */
       matching_filenames = rl_filename_completion_desired;
-#endif
+
       if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0)
 	{
-    	  ding ();
+    	  rl_ding ();
 	  FREE (matches);
 	  matches = (char **)0;
 	  FREE (orig_text);
@@ -1749,7 +1976,7 @@
 
   if (matches == 0 || match_list_size == 0) 
     {
-      ding ();
+      rl_ding ();
       FREE (matches);
       matches = (char **)0;
       completion_changed_buffer = 0;
@@ -1762,13 +1989,14 @@
 
   if (match_list_index == 0 && match_list_size > 1)
     {
-      ding ();
+      rl_ding ();
       insert_match (orig_text, orig_start, MULT_MATCH, &quote_char);
     }
   else
     {
       insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, &quote_char);
-      append_to_match (matches[match_list_index], delimiter, quote_char);
+      append_to_match (matches[match_list_index], delimiter, quote_char,
+		       strcmp (orig_text, matches[match_list_index]));
     }
 
   completion_changed_buffer = 1;
diff --git a/readline/config.h.in b/readline/config.h.in
index d9aa535..c53c2a1 100644
--- a/readline/config.h.in
+++ b/readline/config.h.in
@@ -1,4 +1,4 @@
-/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+/* config.h.in.  Maintained by hand. */
 
 /* Define if on MINIX.  */
 #undef _MINIX
@@ -6,14 +6,34 @@
 /* Define as the return type of signal handlers (int or void).  */
 #undef RETSIGTYPE
 
+/* Characteristics of the compiler. */
+#undef const
+
+#undef size_t
+
+#undef ssize_t
+
+#undef PROTOTYPES
+
+#undef __CHAR_UNSIGNED__
+
 /* Define if the `S_IS*' macros in <sys/stat.h> do not work properly.  */
 #undef STAT_MACROS_BROKEN
 
 #undef VOID_SIGHANDLER
 
+/* Define if you have the isascii function. */
+#undef HAVE_ISASCII
+
+/* Define if you have the isxdigit function. */
+#undef HAVE_ISXDIGIT
+
 /* Define if you have the lstat function. */
 #undef HAVE_LSTAT
 
+/* Define if you have the mbsrtowcs function. */
+#undef HAVE_MBSRTOWCS
+
 /* Define if you have the memmove function. */
 #undef HAVE_MEMMOVE
 
@@ -26,32 +46,59 @@
 /* Define if you have the setenv function.  */
 #undef HAVE_SETENV
 
-/* Define if you have the strcasecmp function.  */
-#undef HAVE_STRCASECMP
-
 /* Define if you have the setlocale function. */
 #undef HAVE_SETLOCALE
 
-/* Define if you have the tcgetattr function.  */
-#undef HAVE_TCGETATTR
+/* Define if you have the strcasecmp function.  */
+#undef HAVE_STRCASECMP
 
 /* Define if you have the strcoll function.  */
 #undef HAVE_STRCOLL
 
 #undef STRCOLL_BROKEN
 
+/* Define if you have the strpbrk function.  */
+#undef HAVE_STRPBRK
+
+/* Define if you have the tcgetattr function.  */
+#undef HAVE_TCGETATTR
+
+/* Define if you have the vsnprintf function.  */
+#undef HAVE_VSNPRINTF
+
+/* Define if you have the wcwidth function.  */
+#undef HAVE_WCWIDTH
+
 /* Define if you have the <dirent.h> header file.  */
 #undef HAVE_DIRENT_H
 
+/* Define if you have the <langinfo.h> header file.  */
+#undef HAVE_LANGINFO_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <locale.h> header file.  */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the <memory.h> header file.  */
+#undef HAVE_MEMORY_H
+
 /* Define if you have the <ndir.h> header file.  */
 #undef HAVE_NDIR_H
 
+/* Define if you have the <stdarg.h> header file.  */
+#undef HAVE_STDARG_H
+
 /* Define if you have the <stdlib.h> header file.  */
 #undef HAVE_STDLIB_H
 
 /* Define if you have the <string.h> header file.  */
 #undef HAVE_STRING_H
 
+/* Define if you have the <strings.h> header file.  */
+#undef HAVE_STRINGS_H
+
 /* Define if you have the <sys/dir.h> header file.  */
 #undef HAVE_SYS_DIR_H
 
@@ -88,10 +135,16 @@
 /* Define if you have the <varargs.h> header file.  */
 #undef HAVE_VARARGS_H
 
-/* Define if you have the <stdarg.h> header file.  */
-#undef HAVE_STDARG_H
+/* Define if you have the <wchar.h> header file.  */
+#undef HAVE_WCHAR_H
 
-#undef HAVE_LOCALE_H
+/* Define if you have the <varargs.h> header file.  */
+#undef HAVE_WCTYPE_H
+
+#undef HAVE_MBSTATE_T
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
 
 /* Definitions pulled in from aclocal.m4. */
 #undef VOID_SIGHANDLER
@@ -124,7 +177,6 @@
 
 #undef HAVE_POSIX_SIGSETJMP
 
-/* config.h.bot */
 /* modify settings or make new ones based on what autoconf tells us. */
 
 /* Ultrix botches type-ahead when switching from canonical to
diff --git a/readline/configure b/readline/configure
index bcb5ff8..fc3769f 100755
--- a/readline/configure
+++ b/readline/configure
@@ -1,131 +1,158 @@
 #! /bin/sh
-
-# From configure.in for Readline 4.1, version 2.22, from autoconf version 2.13
-LIBVERSION=4.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+# From configure.in for Readline 4.3, version 2.45, from autoconf version 2.52.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13 
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# Generated by Autoconf 2.52 for readline 4.3.
 #
+# Report bugs to <bug-readline@gnu.org>.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 
-# Defaults:
-ac_help=
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
 ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
---with-curses               use the curses library instead of the termcap library"
+cross_compiling=no
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+ac_unique_file="readline.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
 
 # Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
 # The variables have the same names as the options, with
 # dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
 exec_prefix=NONE
-host=NONE
 no_create=
-nonopt=NONE
 no_recursion=
 prefix=NONE
 program_prefix=NONE
@@ -134,10 +161,15 @@
 silent=
 site=
 srcdir=
-target=NONE
 verbose=
 x_includes=NONE
 x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
 bindir='${exec_prefix}/bin'
 sbindir='${exec_prefix}/sbin'
 libexecdir='${exec_prefix}/libexec'
@@ -151,17 +183,16 @@
 infodir='${prefix}/info'
 mandir='${prefix}/man'
 
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
+# Identity of this package.
+PACKAGE_NAME='readline'
+PACKAGE_TARNAME='readline'
+PACKAGE_VERSION='4.3'
+PACKAGE_STRING='readline 4.3'
+PACKAGE_BUGREPORT='bug-readline@gnu.org'
 
 ac_prev=
 for ac_option
 do
-
   # If the previous option needs an argument, assign it.
   if test -n "$ac_prev"; then
     eval "$ac_prev=\$ac_option"
@@ -169,59 +200,59 @@
     continue
   fi
 
-  case "$ac_option" in
-  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) ac_optarg= ;;
-  esac
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
-  case "$ac_option" in
+  case $ac_option in
 
   -bindir | --bindir | --bindi | --bind | --bin | --bi)
     ac_prev=bindir ;;
   -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir="$ac_optarg" ;;
+    bindir=$ac_optarg ;;
 
   -build | --build | --buil | --bui | --bu)
-    ac_prev=build ;;
+    ac_prev=build_alias ;;
   -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build="$ac_optarg" ;;
+    build_alias=$ac_optarg ;;
 
   -cache-file | --cache-file | --cache-fil | --cache-fi \
   | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
     ac_prev=cache_file ;;
   -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
   | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file="$ac_optarg" ;;
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
 
   -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
     ac_prev=datadir ;;
   -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
   | --da=*)
-    datadir="$ac_optarg" ;;
+    datadir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    eval "enable_${ac_feature}=no" ;;
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
 
   -enable-* | --enable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
-    eval "enable_${ac_feature}='$ac_optarg'" ;;
+    eval "enable_$ac_feature='$ac_optarg'" ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -230,95 +261,47 @@
   -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
   | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
   | --exec=* | --exe=* | --ex=*)
-    exec_prefix="$ac_optarg" ;;
+    exec_prefix=$ac_optarg ;;
 
   -gas | --gas | --ga | --g)
     # Obsolete; use --with-gas.
     with_gas=yes ;;
 
-  -help | --help | --hel | --he)
-    # 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 << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
-  --cache-file=FILE       cache test results in FILE
-  --help                  print this message
-  --no-create             do not create output files
-  --quiet, --silent       do not print \`checking...' messages
-  --version               print the version of autoconf that created configure
-Directory and file names:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [same as prefix]
-  --bindir=DIR            user executables in DIR [EPREFIX/bin]
-  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
-  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
-  --datadir=DIR           read-only architecture-independent data in DIR
-                          [PREFIX/share]
-  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
-                          [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
-  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
-  --includedir=DIR        C header files in DIR [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
-  --infodir=DIR           info documentation in DIR [PREFIX/info]
-  --mandir=DIR            man documentation in DIR [PREFIX/man]
-  --srcdir=DIR            find the sources in DIR [configure dir or ..]
-  --program-prefix=PREFIX prepend PREFIX to installed program names
-  --program-suffix=SUFFIX append SUFFIX to installed program names
-  --program-transform-name=PROGRAM
-                          run sed PROGRAM on installed program names
-EOF
-    cat << EOF
-Host type:
-  --build=BUILD           configure for building on BUILD [BUILD=HOST]
-  --host=HOST             configure for HOST [guessed]
-  --target=TARGET         configure for TARGET [TARGET=HOST]
-Features and packages:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --x-includes=DIR        X include files are in DIR
-  --x-libraries=DIR       X library files are in DIR
-EOF
-    if test -n "$ac_help"; then
-      echo "--enable and --with options recognized:$ac_help"
-    fi
-    exit 0 ;;
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
 
   -host | --host | --hos | --ho)
-    ac_prev=host ;;
+    ac_prev=host_alias ;;
   -host=* | --host=* | --hos=* | --ho=*)
-    host="$ac_optarg" ;;
+    host_alias=$ac_optarg ;;
 
   -includedir | --includedir | --includedi | --included | --include \
   | --includ | --inclu | --incl | --inc)
     ac_prev=includedir ;;
   -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
   | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir="$ac_optarg" ;;
+    includedir=$ac_optarg ;;
 
   -infodir | --infodir | --infodi | --infod | --info | --inf)
     ac_prev=infodir ;;
   -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir="$ac_optarg" ;;
+    infodir=$ac_optarg ;;
 
   -libdir | --libdir | --libdi | --libd)
     ac_prev=libdir ;;
   -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir="$ac_optarg" ;;
+    libdir=$ac_optarg ;;
 
   -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
   | --libexe | --libex | --libe)
     ac_prev=libexecdir ;;
   -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
   | --libexe=* | --libex=* | --libe=*)
-    libexecdir="$ac_optarg" ;;
+    libexecdir=$ac_optarg ;;
 
   -localstatedir | --localstatedir | --localstatedi | --localstated \
   | --localstate | --localstat | --localsta | --localst \
@@ -327,12 +310,12 @@
   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
   | --localstate=* | --localstat=* | --localsta=* | --localst=* \
   | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir="$ac_optarg" ;;
+    localstatedir=$ac_optarg ;;
 
   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
     ac_prev=mandir ;;
   -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir="$ac_optarg" ;;
+    mandir=$ac_optarg ;;
 
   -nfp | --nfp | --nf)
     # Obsolete; use --without-fp.
@@ -353,26 +336,26 @@
   -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
   | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
   | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir="$ac_optarg" ;;
+    oldincludedir=$ac_optarg ;;
 
   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
     ac_prev=prefix ;;
   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix="$ac_optarg" ;;
+    prefix=$ac_optarg ;;
 
   -program-prefix | --program-prefix | --program-prefi | --program-pref \
   | --program-pre | --program-pr | --program-p)
     ac_prev=program_prefix ;;
   -program-prefix=* | --program-prefix=* | --program-prefi=* \
   | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix="$ac_optarg" ;;
+    program_prefix=$ac_optarg ;;
 
   -program-suffix | --program-suffix | --program-suffi | --program-suff \
   | --program-suf | --program-su | --program-s)
     ac_prev=program_suffix ;;
   -program-suffix=* | --program-suffix=* | --program-suffi=* \
   | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix="$ac_optarg" ;;
+    program_suffix=$ac_optarg ;;
 
   -program-transform-name | --program-transform-name \
   | --program-transform-nam | --program-transform-na \
@@ -389,7 +372,7 @@
   | --program-transfo=* | --program-transf=* \
   | --program-trans=* | --program-tran=* \
   | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name="$ac_optarg" ;;
+    program_transform_name=$ac_optarg ;;
 
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil)
@@ -399,7 +382,7 @@
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
   | --sbi=* | --sb=*)
-    sbindir="$ac_optarg" ;;
+    sbindir=$ac_optarg ;;
 
   -sharedstatedir | --sharedstatedir | --sharedstatedi \
   | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -410,58 +393,57 @@
   | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
   | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
   | --sha=* | --sh=*)
-    sharedstatedir="$ac_optarg" ;;
+    sharedstatedir=$ac_optarg ;;
 
   -site | --site | --sit)
     ac_prev=site ;;
   -site=* | --site=* | --sit=*)
-    site="$ac_optarg" ;;
+    site=$ac_optarg ;;
 
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir="$ac_optarg" ;;
+    srcdir=$ac_optarg ;;
 
   -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
   | --syscon | --sysco | --sysc | --sys | --sy)
     ac_prev=sysconfdir ;;
   -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
   | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir="$ac_optarg" ;;
+    sysconfdir=$ac_optarg ;;
 
   -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target ;;
+    ac_prev=target_alias ;;
   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target="$ac_optarg" ;;
+    target_alias=$ac_optarg ;;
 
   -v | -verbose | --verbose | --verbos | --verbo | --verb)
     verbose=yes ;;
 
-  -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.13"
-    exit 0 ;;
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
     ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
-    eval "with_${ac_package}='$ac_optarg'" ;;
+    eval "with_$ac_package='$ac_optarg'" ;;
 
   -without-* | --without-*)
-    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    eval "with_${ac_package}=no" ;;
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -472,98 +454,98 @@
     ac_prev=x_includes ;;
   -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
   | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes="$ac_optarg" ;;
+    x_includes=$ac_optarg ;;
 
   -x-libraries | --x-libraries | --x-librarie | --x-librari \
   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
     ac_prev=x_libraries ;;
   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries="$ac_optarg" ;;
+    x_libraries=$ac_optarg ;;
 
-  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
     ;;
 
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
   *)
-    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
-      echo "configure: warning: $ac_option: invalid host type" 1>&2
-    fi
-    if test "x$nonopt" != xNONE; then
-      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
-    fi
-    nonopt="$ac_option"
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
   esac
 done
 
 if test -n "$ac_prev"; then
-  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
 fi
 
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
 do
-  case "$ac_arg" in
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c) ;;
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
   esac
 done
 
-# NLS nuisances.
-# Only set these to C if already set.  These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+              localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
 
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+build=$build_alias
+host=$host_alias
+target=$target_alias
 
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=readline.h
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
 
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then its parent.
   ac_prog=$0
-  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
   srcdir=$ac_confdir
   if test ! -r $srcdir/$ac_unique_file; then
@@ -574,13 +556,316 @@
 fi
 if test ! -r $srcdir/$ac_unique_file; then
   if test "$ac_srcdir_defaulted" = yes; then
-    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
   else
-    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+    { echo "$as_me: error: cannot find sources in $srcdir" >&2
+   { (exit 1); exit 1; }; }
   fi
 fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
 
+#
+# Report the --help message.
+#
+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 <<EOF
+\`configure' configures readline 4.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+EOF
+
+  cat <<EOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+EOF
+
+  cat <<\EOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       build programs to run on HOST [BUILD]
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of readline 4.3:";;
+   esac
+  cat <<\EOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared         build shared libraries [default=YES]
+  --enable-static         build static libraries [default=YES]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-curses           use the curses library instead of the termcap
+                          library
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-readline@gnu.org>.
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+    cd $ac_subdir
+    # A "../" for each directory in /$ac_subdir.
+    ac_dots=`echo $ac_subdir |
+             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+    case $srcdir in
+    .) # No --srcdir option.  We are building in place.
+      ac_sub_srcdir=$srcdir ;;
+    [\\/]* | ?:[\\/]* ) # Absolute path.
+      ac_sub_srcdir=$srcdir/$ac_subdir ;;
+    *) # Relative path.
+      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+    esac
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_sub_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_sub_srcdir/configure; then
+      echo
+      $SHELL $ac_sub_srcdir/configure  --help=recursive
+    elif test -f $ac_sub_srcdir/configure.ac ||
+           test -f $ac_sub_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\EOF
+readline configure 4.3
+generated by GNU Autoconf 2.52
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by readline $as_me 4.3, which was
+generated by GNU Autoconf 2.52.  Invocation command line was
+
+  $ $0 $@
+
+EOF
+{
+cat <<_ASUNAME
+## ---------- ##
+## Platform.  ##
+## ---------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests.  ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+  case $ac_arg in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+    ac_sep=" " ;;
+  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+     ac_sep=" " ;;
+  esac
+  # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  echo >&5
+  echo "## ----------------- ##" >&5
+  echo "## Cache variables.  ##" >&5
+  echo "## ----------------- ##" >&5
+  echo >&5
+  # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} >&5
+  sed "/^$/d" confdefs.h >conftest.log
+  if test -s conftest.log; then
+    echo >&5
+    echo "## ------------ ##" >&5
+    echo "## confdefs.h.  ##" >&5
+    echo "## ------------ ##" >&5
+    echo >&5
+    cat conftest.log >&5
+  fi
+  (echo; echo) >&5
+  test "$ac_signal" != 0 &&
+    echo "$as_me: caught signal $ac_signal" >&5
+  echo "$as_me: exit $exit_status" >&5
+  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Let the site file select an alternate cache file if it wants to.
 # Prefer explicitly selected file to automatically selected ones.
 if test -z "$CONFIG_SITE"; then
   if test "x$prefix" != xNONE; then
@@ -591,44 +876,107 @@
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
-    echo "loading site script $ac_site_file"
+    { echo "$as_me:879: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    cat "$ac_site_file" >&5
     . "$ac_site_file"
   fi
 done
 
 if test -r "$cache_file"; then
-  echo "loading cache $cache_file"
-  . $cache_file
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:890: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
 else
-  echo "creating cache $cache_file"
-  > $cache_file
+  { echo "$as_me:898: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:914: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:918: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+        { echo "$as_me:924: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+        { echo "$as_me:926:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+        { echo "$as_me:928:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+        ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.  It doesn't matter if
+  # we pass some twice (in addition to the command line arguments).
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
+       ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:947: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:949: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
 ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+echo "#! $SHELL" >conftest.sh
+echo  "exit 0"   >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:969: PATH=\".;.\"; conftest.sh") >&5
+  (PATH=".;."; conftest.sh) 2>&5
+  ac_status=$?
+  echo "$as_me:972: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  ac_path_separator=';'
 else
-  ac_n= ac_c='\c' ac_t=
+  ac_path_separator=:
 fi
-
-
-
-
-
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
 
 ac_aux_dir=
 for ac_dir in ./support $srcdir/./support; do
@@ -640,269 +988,711 @@
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/install.sh -c"
     break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in ./support $srcdir/./support" 1>&2; exit 1; }
+  { { echo "$as_me:998: error: cannot find install-sh or install.sh in ./support $srcdir/./support" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ./support $srcdir/./support" >&2;}
+   { (exit 1); exit 1; }; }
 fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
+ac_config_headers="$ac_config_headers config.h"
 
+LIBVERSION=4.3
 
 # Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:1012: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:1016: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:1025: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:1029: error: $ac_config_sub $ac_cv_build_alias failed." >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
+   { (exit 1); exit 1; }; }
+
 fi
+echo "$as_me:1034: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:661: checking host system type" >&5
+echo "$as_me:1041: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:1050: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 
-host_alias=$host
-case "$host_alias" in
-NONE)
-  case $nonopt in
-  NONE)
-    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
-    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-    fi ;;
-  *) host_alias=$nonopt ;;
-  esac ;;
-esac
-
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
+fi
+echo "$as_me:1055: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
 opt_curses=no
-opt_shared=no
 
 # Check whether --with-curses or --without-curses was given.
 if test "${with_curses+set}" = set; then
   withval="$with_curses"
   opt_curses=$withval
-fi
-
+fi;
 
 if test "$opt_curses" = "yes"; then
 	prefer_curses=yes
 fi
 
+opt_static_libs=yes
+opt_shared_libs=yes
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  opt_shared_libs=$enableval
+fi;
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  opt_static_libs=$enableval
+fi;
+
+echo ""
+echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
+echo ""
+
 # We want these before the checks, so the checks can modify their values.
 test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
 
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:702: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:1095: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\EOF
+all:
+	@echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:1115: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:1119: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:1132: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1147: found $ac_dir/$ac_word" >&5
+break
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:1155: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:1158: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:1167: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1182: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1190: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1193: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
 fi
 
 if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:732: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:1206: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1221: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1229: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1232: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1241: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1256: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1264: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1267: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1280: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
   ac_prog_rejected=no
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-	continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+  ac_prog_rejected=yes
+  continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1300: found $ac_dir/$ac_word" >&5
+break
+done
+
 if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
   set dummy $ac_cv_prog_CC
   shift
-  if test $# -gt 0; then
+  if test $# != 0; then
     # We chose a different compiler from the bogus one.
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    set dummy "$ac_dir/$ac_word" "$@"
+    set dummy "$ac_dir/$ac_word" ${1+"$@"}
     shift
     ac_cv_prog_CC="$@"
   fi
 fi
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:1322: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:1325: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-  if test -z "$CC"; then
-    case "`uname -s`" in
-    *win32* | *WIN32*)
-      # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:783: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:1336: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="cl"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1351: found $ac_dir/$ac_word" >&5
+break
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:1359: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
-fi
- ;;
-    esac
-  fi
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+  echo "$as_me:1362: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:815: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1375: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1390: found $ac_dir/$ac_word" >&5
+break
+done
 
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1398: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1401: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
 
-cat > conftest.$ac_ext << EOF
+  test -n "$ac_ct_CC" && break
+done
 
-#line 826 "configure"
+  CC=$ac_ct_CC
+fi
+
+fi
+
+test -z "$CC" && { { echo "$as_me:1413: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:1418:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1421: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1424: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1426: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1429: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1431: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1434: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1438 "configure"
 #include "confdefs.h"
 
-main(){return(0);}
-EOF
-if { (eval echo configure:831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:1454: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:1457: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:1460: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+for ac_file in `ls a.exe conftest.exe 2>/dev/null;
+                ls a.out conftest 2>/dev/null;
+                ls a.* conftest.* 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    a.out ) # We found the default executable, but exeext='' is most
+            # certainly right.
+            break;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1483: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1489: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1494: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:1500: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1503: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
   else
-    ac_cv_prog_cc_cross=yes
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:1510: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
   fi
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
 fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+echo "$as_me:1518: result: yes" >&5
+echo "${ECHO_T}yes" >&6
 
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
-  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:857: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1525: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1527: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
 
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:862: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:1530: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1532: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:1535: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
 else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
+  { { echo "$as_me:1551: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1557: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:1563: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1569 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1581: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1584: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1596: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1603: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1607: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1613 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
 #endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:871: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
-else
-  ac_cv_prog_gcc=no
-fi
-fi
 
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1628: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1631: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1634: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1637: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
 else
-  GCC=
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
 fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:890: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+echo "$as_me:1649: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:1655: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1661 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1673: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1676: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1679: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1682: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_prog_cc_g=yes
 else
-  ac_cv_prog_cc_g=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
 fi
-rm -f conftest*
-
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+echo "$as_me:1692: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 if test "$ac_test_CFLAGS" = set; then
-  CFLAGS="$ac_save_CFLAGS"
+  CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
     CFLAGS="-g -O2"
@@ -916,182 +1706,417 @@
     CFLAGS=
   fi
 fi
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1719: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1722: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1725: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1728: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1740 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1753: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1756: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1759: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1762: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1772 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1784: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1787: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1790: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1793: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
 
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:922: checking how to run the C preprocessor" >&5
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:1825: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-    # This must be in double quotes, not single quotes, because CPP may get
-  # substituted into the Makefile and "${CC-cc}" will confuse make.
-  CPP="${CC-cc} -E"
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
   # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp.
-  cat > conftest.$ac_ext <<EOF
-#line 937 "configure"
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1846 "configure"
 #include "confdefs.h"
 #include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:943: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:1851: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1857: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
   :
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
+  echo "$as_me: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -E -traditional-cpp"
-  cat > conftest.$ac_ext <<EOF
-#line 954 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:960: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -nologo -E"
-  cat > conftest.$ac_ext <<EOF
-#line 971 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:977: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP=/lib/cpp
+  # Broken: fails on valid input.
+continue
 fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-  ac_cv_prog_CPP="$CPP"
-fi
-  CPP="$ac_cv_prog_CPP"
-else
-  ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
+rm -f conftest.err conftest.$ac_ext
 
-ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
-echo "configure:1003: checking for minix/config.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1880 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:1884: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1890: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1008 "configure"
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:1927: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1937 "configure"
+#include "confdefs.h"
+#include <assert.h>
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:1942: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1948: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1971 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:1975: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1981: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:2009: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:2020: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2026 "configure"
 #include "confdefs.h"
 #include <minix/config.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1013: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+_ACEOF
+if { (eval echo "$as_me:2030: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2036: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_cv_header_minix_config_h=yes
+else
+  echo "$as_me: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  ac_cv_header_minix_config_h=no
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+echo "$as_me:2055: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+if test $ac_cv_header_minix_config_h = yes; then
   MINIX=yes
 else
-  echo "$ac_t""no" 1>&6
-MINIX=
+  MINIX=
 fi
 
 if test "$MINIX" = yes; then
-  cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
 #define _POSIX_SOURCE 1
 EOF
 
-  cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define _POSIX_1_SOURCE 2
 EOF
 
-  cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define _MINIX 1
 EOF
 
 fi
 
-
 # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
 test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O"
 
-if test $ac_cv_prog_gcc = yes; then
-    echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:1056: checking whether ${CC-cc} needs -traditional" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test $ac_cv_c_compiler_gnu = yes; then
+    echo "$as_me:2083: checking whether $CC needs -traditional" >&5
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
     ac_pattern="Autoconf.*'x'"
-  cat > conftest.$ac_ext <<EOF
-#line 1062 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2090 "configure"
 #include "confdefs.h"
 #include <sgtty.h>
 Autoconf TIOCGETP
-EOF
+_ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   egrep "$ac_pattern" >/dev/null 2>&1; then
-  rm -rf conftest*
   ac_cv_prog_gcc_traditional=yes
 else
-  rm -rf conftest*
   ac_cv_prog_gcc_traditional=no
 fi
 rm -f conftest*
 
-
   if test $ac_cv_prog_gcc_traditional = no; then
-    cat > conftest.$ac_ext <<EOF
-#line 1080 "configure"
+    cat >conftest.$ac_ext <<_ACEOF
+#line 2105 "configure"
 #include "confdefs.h"
 #include <termio.h>
 Autoconf TCGETA
-EOF
+_ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   egrep "$ac_pattern" >/dev/null 2>&1; then
-  rm -rf conftest*
   ac_cv_prog_gcc_traditional=yes
 fi
 rm -f conftest*
 
   fi
 fi
-
-echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
+echo "$as_me:2118: result: $ac_cv_prog_gcc_traditional" >&5
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
   if test $ac_cv_prog_gcc_traditional = yes; then
     CC="$CC -traditional"
   fi
@@ -1104,31 +2129,39 @@
 # SunOS /usr/etc/install
 # IRIX /sbin/install
 # AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
 # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1113: checking for a BSD compatible install" >&5
+echo "$as_me:2137: checking for a BSD compatible install" >&5
+echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
 if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
+    ac_save_IFS=$IFS; IFS=$ac_path_separator
   for ac_dir in $PATH; do
+    IFS=$ac_save_IFS
     # Account for people who put trailing slashes in PATH elements.
-    case "$ac_dir/" in
-    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    case $ac_dir/ in
+    / | ./ | .// | /cC/* \
+    | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
+    | /usr/ucb/* ) ;;
     *)
       # OSF1 and SCO ODT 3.0 have their own names for install.
       # Don't use installbsd from OSF since it installs stuff as root
       # by default.
       for ac_prog in ginstall scoinst install; do
-        if test -f $ac_dir/$ac_prog; then
+        if $as_executable_p "$ac_dir/$ac_prog"; then
 	  if test $ac_prog = install &&
-            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+            grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
 	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
 	  else
 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
 	    break 2
@@ -1138,105 +2171,581 @@
       ;;
     esac
   done
-  IFS="$ac_save_IFS"
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
-    INSTALL="$ac_cv_path_install"
+    INSTALL=$ac_cv_path_install
   else
     # As a last resort, use the slow shell script.  We don't cache a
     # path for INSTALL within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the path is relative.
-    INSTALL="$ac_install_sh"
+    INSTALL=$ac_install_sh
   fi
 fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:2186: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
 test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1168: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:2199: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_AR="ar"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_AR=""
+echo "$as_me:2214: found $ac_dir/$ac_word" >&5
+break
+done
+
+  test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
 fi
 fi
-AR="$ac_cv_prog_AR"
+AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  echo "$ac_t""$AR" 1>&6
+  echo "$as_me:2223: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:2226: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
 test -n "$ARFLAGS" || ARFLAGS="cr"
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1198: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:2234: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_RANLIB="ranlib"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+echo "$as_me:2249: found $ac_dir/$ac_word" >&5
+break
+done
+
 fi
 fi
-RANLIB="$ac_cv_prog_RANLIB"
+RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  echo "$ac_t""$RANLIB" 1>&6
+  echo "$as_me:2257: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:2260: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:2269: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_RANLIB="ranlib"
+echo "$as_me:2284: found $ac_dir/$ac_word" >&5
+break
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:2293: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:2296: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
 
 MAKE_SHELL=/bin/sh
 
-
-echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1230: checking return type of signal handlers" >&5
-if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:2307: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1235 "configure"
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line 2315 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2364: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2367: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2370: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2373: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:2390: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:2393: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+echo "$as_me:2398: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2404 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2462: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2465: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2468: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2471: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_const=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2481: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+echo "$as_me:2491: checking for function prototypes" >&5
+echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6
+if test "$ac_cv_prog_cc_stdc" != no; then
+  echo "$as_me:2494: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\EOF
+#define PROTOTYPES 1
+EOF
+
+else
+  echo "$as_me:2502: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+echo "$as_me:2506: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2512 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:2520: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2526: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2548 "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2566 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2587 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+                     || ('j' <= (c) && (c) <= 'r') \
+                     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+        || toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:2613: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2616: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:2618: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2621: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:2634: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:2650: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2656 "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2662: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2665: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2668: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2671: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2681: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:2691: checking whether char is unsigned" >&5
+echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6
+if test "${ac_cv_c_char_unsigned+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2697 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main ()
+{
+int _array_ [1 - 2 * !(((char) -1) < 0)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2709: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2712: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2715: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2718: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_char_unsigned=no
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_char_unsigned=yes
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2728: result: $ac_cv_c_char_unsigned" >&5
+echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+  cat >>confdefs.h <<\EOF
+#define __CHAR_UNSIGNED__ 1
+EOF
+
+fi
+
+echo "$as_me:2737: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2743 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
 #ifdef signal
-#undef signal
+# undef signal
 #endif
 #ifdef __cplusplus
 extern "C" void (*signal (int, void (*)(int)))(int);
@@ -1244,36 +2753,152 @@
 void (*signal ()) ();
 #endif
 
-int main() {
+int
+main ()
+{
 int i;
-; return 0; }
-EOF
-if { (eval echo configure:1252: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2765: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2768: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2771: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2774: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_type_signal=void
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_type_signal=int
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_signal=int
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
+echo "$as_me:2784: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
 
-echo "$ac_t""$ac_cv_type_signal" 1>&6
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<EOF
 #define RETSIGTYPE $ac_cv_type_signal
 EOF
 
-
-
-echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:1272: checking whether stat file-mode macros are broken" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:2791: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1277 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2797 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2812: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2815: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2818: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2821: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_size_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2831: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<EOF
+#define size_t unsigned
+EOF
+
+fi
+
+echo "$as_me:2843: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2849 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main ()
+{
+if ((ssize_t *) 0)
+  return 0;
+if (sizeof (ssize_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2864: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2867: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2870: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2873: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_ssize_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_ssize_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2883: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+if test $ac_cv_type_ssize_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<EOF
+#define ssize_t int
+EOF
+
+fi
+
+echo "$as_me:2895: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6
+if test "${ac_cv_header_stat_broken+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2901 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1302,409 +2927,516 @@
 # endif
 #endif
 
-EOF
+_ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   egrep "You lose" >/dev/null 2>&1; then
-  rm -rf conftest*
   ac_cv_header_stat_broken=yes
 else
-  rm -rf conftest*
   ac_cv_header_stat_broken=no
 fi
 rm -f conftest*
 
 fi
-
-echo "$ac_t""$ac_cv_header_stat_broken" 1>&6
+echo "$as_me:2940: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6
 if test $ac_cv_header_stat_broken = yes; then
-  cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
 #define STAT_MACROS_BROKEN 1
 EOF
 
 fi
 
 ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1332: checking for $ac_hdr that defines DIR" >&5
-if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:2953: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1337 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2959 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
-int main() {
-DIR *dirp = 0;
-; return 0; }
-EOF
-if { (eval echo configure:1345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  eval "ac_cv_header_dirent_$ac_safe=yes"
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2974: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2977: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2980: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2983: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_dirent_$ac_safe=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
+echo "$as_me:2993: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
 EOF
- ac_header_dirent=$ac_hdr; break
-else
-  echo "$ac_t""no" 1>&6
+
+ac_header_dirent=$ac_hdr; break
 fi
+
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1370: checking for opendir in -ldir" >&5
-ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:3006: checking for opendir in -ldir" >&5
+echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
+if test "${ac_cv_lib_dir_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_save_LIBS="$LIBS"
+  ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldir  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1378 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 3014 "configure"
 #include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3033: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3036: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3039: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3042: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dir_opendir=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dir_opendir=no
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+echo "$as_me:3053: result: $ac_cv_lib_dir_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
+if test $ac_cv_lib_dir_opendir = yes; then
   LIBS="$LIBS -ldir"
-else
-  echo "$ac_t""no" 1>&6
 fi
 
 else
-echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1411: checking for opendir in -lx" >&5
-ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:3060: checking for opendir in -lx" >&5
+echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
+if test "${ac_cv_lib_x_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_save_LIBS="$LIBS"
+  ac_check_lib_save_LIBS=$LIBS
 LIBS="-lx  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1419 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 3068 "configure"
 #include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+   builtin and then its argument prototype would still apply.  */
+char opendir ();
+int
+main ()
+{
+opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3087: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3090: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3093: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3096: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_x_opendir=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_x_opendir=no
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+echo "$as_me:3107: result: $ac_cv_lib_x_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
+if test $ac_cv_lib_x_opendir = yes; then
   LIBS="$LIBS -lx"
-else
-  echo "$ac_t""no" 1>&6
 fi
 
 fi
 
-
 for ac_func in lstat memmove putenv select setenv setlocale \
-		strcasecmp tcgetattr
+		strcasecmp strpbrk tcgetattr vsnprintf isascii isxdigit
 do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1457: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:3119: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1462 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3125 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
+    which can conflict with char $ac_func (); below.  */
 #include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+char (*f) ();
 
-int main() {
-
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-$ac_func();
+f = $ac_func;
 #endif
 
-; return 0; }
-EOF
-if { (eval echo configure:1485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3156: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3159: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3162: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3165: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
+echo "$as_me:3175: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
 
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
- 
-else
-  echo "$ac_t""no" 1>&6
 fi
 done
 
-
-echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:1511: checking for working strcoll" >&5
-if eval "test \"`echo '$''{'ac_cv_func_strcoll_works'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3185: checking for working strcoll" >&5
+echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6
+if test "${ac_cv_func_strcoll_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_strcoll_works=no
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1519 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3194 "configure"
 #include "confdefs.h"
-#include <string.h>
+$ac_includes_default
+int
 main ()
 {
-  exit (strcoll ("abc", "def") >= 0 ||
-	strcoll ("ABC", "DEF") >= 0 ||
-	strcoll ("123", "456") >= 0);
+exit (strcoll ("abc", "def") >= 0 ||
+	 strcoll ("ABC", "DEF") >= 0 ||
+	 strcoll ("123", "456") >= 0)
+  ;
+  return 0;
 }
-EOF
-if { (eval echo configure:1529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3208: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3211: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:3213: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3216: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_func_strcoll_works=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  ac_cv_func_strcoll_works=no
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_strcoll_works=no
 fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-
 fi
-
-echo "$ac_t""$ac_cv_func_strcoll_works" 1>&6
+echo "$as_me:3228: result: $ac_cv_func_strcoll_works" >&5
+echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6
 if test $ac_cv_func_strcoll_works = yes; then
-  cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
 #define HAVE_STRCOLL 1
 EOF
 
 fi
 
-
-for ac_hdr in unistd.h stdlib.h varargs.h stdarg.h string.h \
-		sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
-		termcap.h termios.h termio.h sys/file.h locale.h
+for ac_header in unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
+		limits.h sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
+		termcap.h termios.h termio.h sys/file.h locale.h memory.h
 do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1558: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:3243: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1563 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3249 "configure"
 #include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:3253: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:3259: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  eval "$as_ac_Header=no"
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
+echo "$as_me:3278: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
- 
-else
-  echo "$ac_t""no" 1>&6
+
 fi
 done
 
-
-
-echo $ac_n "checking for type of signal functions""... $ac_c" 1>&6
-echo "configure:1597: checking for type of signal functions" >&5
-if eval "test \"`echo '$''{'bash_cv_signal_vintage'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3288: checking for type of signal functions" >&5
+echo $ECHO_N "checking for type of signal functions... $ECHO_C" >&6
+if test "${bash_cv_signal_vintage+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  
-  cat > conftest.$ac_ext <<EOF
-#line 1603 "configure"
+
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3295 "configure"
 #include "confdefs.h"
 #include <signal.h>
-int main() {
+int
+main ()
+{
 
     sigset_t ss;
     struct sigaction sa;
     sigemptyset(&ss); sigsuspend(&ss);
     sigaction(SIGINT, &sa, (struct sigaction *) 0);
     sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
-  
-; return 0; }
-EOF
-if { (eval echo configure:1616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3313: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3316: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3319: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3322: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_signal_vintage=posix
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  
-    cat > conftest.$ac_ext <<EOF
-#line 1625 "configure"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+    cat >conftest.$ac_ext <<_ACEOF
+#line 3330 "configure"
 #include "confdefs.h"
 #include <signal.h>
-int main() {
+int
+main ()
+{
 
 	int mask = sigmask(SIGINT);
 	sigsetmask(mask); sigblock(mask); sigpause(mask);
-    
-; return 0; }
-EOF
-if { (eval echo configure:1635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3345: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3348: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3351: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3354: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_signal_vintage=4.2bsd
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  
-      cat > conftest.$ac_ext <<EOF
-#line 1644 "configure"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+      cat >conftest.$ac_ext <<_ACEOF
+#line 3362 "configure"
 #include "confdefs.h"
 
 	#include <signal.h>
 	RETSIGTYPE foo() { }
-int main() {
+int
+main ()
+{
 
 		int mask = sigmask(SIGINT);
 		sigset(SIGINT, foo); sigrelse(SIGINT);
 		sighold(SIGINT); sigpause(SIGINT);
-        
-; return 0; }
-EOF
-if { (eval echo configure:1657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3380: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3383: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3386: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3389: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_signal_vintage=svr3
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_signal_vintage=v7
-    
-fi
-rm -f conftest*
-  
-fi
-rm -f conftest*
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_signal_vintage=v7
 
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 
 fi
 
-echo "$ac_t""$bash_cv_signal_vintage" 1>&6
+echo "$as_me:3408: result: $bash_cv_signal_vintage" >&5
+echo "${ECHO_T}$bash_cv_signal_vintage" >&6
 if test "$bash_cv_signal_vintage" = posix; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define HAVE_POSIX_SIGNALS 1
 EOF
 
 elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define HAVE_BSD_SIGNALS 1
 EOF
 
 elif test "$bash_cv_signal_vintage" = svr3; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define HAVE_USG_SIGHOLD 1
 EOF
 
 fi
 
-
-
-echo $ac_n "checking if signal handlers must be reinstalled when invoked""... $ac_c" 1>&6
-echo "configure:1698: checking if signal handlers must be reinstalled when invoked" >&5
-if eval "test \"`echo '$''{'bash_cv_must_reinstall_sighandlers'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3427: checking if signal handlers must be reinstalled when invoked" >&5
+echo $ECHO_N "checking if signal handlers must be reinstalled when invoked... $ECHO_C" >&6
+if test "${bash_cv_must_reinstall_sighandlers+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "$cross_compiling" = yes; then
-  echo "configure: warning: cannot check signal handling if cross compiling -- defaulting to no" 1>&2
+  { echo "$as_me:3433: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5
+echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;}
     bash_cv_must_reinstall_sighandlers=no
 
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1708 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3439 "configure"
 #include "confdefs.h"
 
 #include <signal.h>
@@ -1750,43 +3482,51 @@
 	exit(nsigint != 2);
 }
 
-EOF
-if { (eval echo configure:1755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3487: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3490: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:3492: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3495: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_must_reinstall_sighandlers=no
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  bash_cv_must_reinstall_sighandlers=yes
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_must_reinstall_sighandlers=yes
 fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 fi
 
-fi
-
-echo "$ac_t""$bash_cv_must_reinstall_sighandlers" 1>&6
+echo "$as_me:3508: result: $bash_cv_must_reinstall_sighandlers" >&5
+echo "${ECHO_T}$bash_cv_must_reinstall_sighandlers" >&6
 if test $bash_cv_must_reinstall_sighandlers = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define MUST_REINSTALL_SIGHANDLERS 1
 EOF
 
 fi
 
-
-
-echo $ac_n "checking for presence of POSIX-style sigsetjmp/siglongjmp""... $ac_c" 1>&6
-echo "configure:1780: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
-if eval "test \"`echo '$''{'bash_cv_func_sigsetjmp'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3517: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
+echo $ECHO_N "checking for presence of POSIX-style sigsetjmp/siglongjmp... $ECHO_C" >&6
+if test "${bash_cv_func_sigsetjmp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "$cross_compiling" = yes; then
-  echo "configure: warning: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" 1>&2
+  { echo "$as_me:3523: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5
+echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;}
      bash_cv_func_sigsetjmp=missing
 
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1790 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3529 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
@@ -1826,115 +3566,100 @@
 exit(1);
 #endif
 }
-EOF
-if { (eval echo configure:1831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3571: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3574: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:3576: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3579: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_func_sigsetjmp=present
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  bash_cv_func_sigsetjmp=missing
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_sigsetjmp=missing
 fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 fi
 
-fi
-
-echo "$ac_t""$bash_cv_func_sigsetjmp" 1>&6
+echo "$as_me:3592: result: $bash_cv_func_sigsetjmp" >&5
+echo "${ECHO_T}$bash_cv_func_sigsetjmp" >&6
 if test $bash_cv_func_sigsetjmp = present; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define HAVE_POSIX_SIGSETJMP 1
 EOF
 
 fi
 
-echo $ac_n "checking for lstat""... $ac_c" 1>&6
-echo "configure:1854: checking for lstat" >&5
-if eval "test \"`echo '$''{'bash_cv_func_lstat'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3601: checking for lstat" >&5
+echo $ECHO_N "checking for lstat... $ECHO_C" >&6
+if test "${bash_cv_func_lstat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1859 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3607 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
-int main() {
- lstat(".",(struct stat *)0); 
-; return 0; }
-EOF
-if { (eval echo configure:1869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+int
+main ()
+{
+ lstat(".",(struct stat *)0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3622: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3625: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3628: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3631: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_func_lstat=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_func_lstat=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_lstat=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 fi
-
-echo "$ac_t""$bash_cv_func_lstat" 1>&6
+echo "$as_me:3641: result: $bash_cv_func_lstat" >&5
+echo "${ECHO_T}$bash_cv_func_lstat" >&6
 if test $bash_cv_func_lstat = yes; then
-  cat >> confdefs.h <<\EOF
+  cat >>confdefs.h <<\EOF
 #define HAVE_LSTAT 1
 EOF
 
 fi
 
-echo $ac_n "checking whether programs are able to redeclare getpw functions""... $ac_c" 1>&6
-echo "configure:1890: checking whether programs are able to redeclare getpw functions" >&5
-if eval "test \"`echo '$''{'bash_cv_can_redecl_getpw'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 1895 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <pwd.h>
-extern struct passwd *getpwent();
-extern struct passwd *getpwuid();
-extern struct passwd *getpwnam();
-int main() {
-struct passwd *z; z = getpwent(); z = getpwuid(0); z = getpwnam("root");
-; return 0; }
-EOF
-if { (eval echo configure:1906: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  bash_cv_can_redecl_getpw=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_can_redecl_getpw=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$bash_cv_can_redecl_getpw" 1>&6
-if test $bash_cv_can_redecl_getpw = no; then
-cat >> confdefs.h <<\EOF
-#define HAVE_GETPW_DECLS 1
-EOF
-
-fi
-
-
-echo $ac_n "checking whether or not strcoll and strcmp differ""... $ac_c" 1>&6
-echo "configure:1928: checking whether or not strcoll and strcmp differ" >&5
-if eval "test \"`echo '$''{'bash_cv_func_strcoll_broken'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3650: checking whether or not strcoll and strcmp differ" >&5
+echo $ECHO_N "checking whether or not strcoll and strcmp differ... $ECHO_C" >&6
+if test "${bash_cv_func_strcoll_broken+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "$cross_compiling" = yes; then
-  echo "configure: warning: cannot check strcoll if cross compiling -- defaulting to no" 1>&2
+  { echo "$as_me:3656: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5
+echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;}
     bash_cv_func_strcoll_broken=no
 
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1938 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3662 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -1972,37 +3697,189 @@
 	exit (r1 > 0 && r2 > 0);
 }
 
-EOF
-if { (eval echo configure:1977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3702: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3705: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:3707: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3710: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_func_strcoll_broken=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  bash_cv_func_strcoll_broken=no
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_strcoll_broken=no
 fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 fi
 
-fi
-
-echo "$ac_t""$bash_cv_func_strcoll_broken" 1>&6
+echo "$as_me:3723: result: $bash_cv_func_strcoll_broken" >&5
+echo "${ECHO_T}$bash_cv_func_strcoll_broken" >&6
 if test $bash_cv_func_strcoll_broken = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define STRCOLL_BROKEN 1
 EOF
 
 fi
 
-
-echo $ac_n "checking whether signal handlers are of type void""... $ac_c" 1>&6
-echo "configure:2001: checking whether signal handlers are of type void" >&5
-if eval "test \"`echo '$''{'bash_cv_void_sighandler'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3732: checking whether getpw functions are declared in pwd.h" >&5
+echo $ECHO_N "checking whether getpw functions are declared in pwd.h... $ECHO_C" >&6
+if test "${bash_cv_getpw_declared+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2006 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3738 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+#include <pwd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "getpwuid" >/dev/null 2>&1; then
+  bash_cv_getpw_declared=yes
+else
+  bash_cv_getpw_declared=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$as_me:3758: result: $bash_cv_getpw_declared" >&5
+echo "${ECHO_T}$bash_cv_getpw_declared" >&6
+if test $bash_cv_getpw_declared = yes; then
+cat >>confdefs.h <<\EOF
+#define HAVE_GETPW_DECLS 1
+EOF
+
+fi
+
+echo "$as_me:3767: checking POSIX termios" >&5
+echo $ECHO_N "checking POSIX termios... $ECHO_C" >&6
+if test "${ac_cv_sys_posix_termios+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3773 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+int
+main ()
+{
+/* SunOS 4.0.3 has termios.h but not the library calls.  */
+   tcgetattr(0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3788: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:3791: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:3794: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3797: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sys_posix_termios=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_sys_posix_termios=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:3807: result: $ac_cv_sys_posix_termios" >&5
+echo "${ECHO_T}$ac_cv_sys_posix_termios" >&6
+
+if test $ac_cv_sys_posix_termios = yes; then
+  echo "$as_me:3811: checking whether termios.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether termios.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3817 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <termios.h>
+#ifdef TIOCGWINSZ
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "yes" >/dev/null 2>&1; then
+  ac_cv_sys_tiocgwinsz_in_termios_h=yes
+else
+  ac_cv_sys_tiocgwinsz_in_termios_h=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:3835: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
+echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_termios_h" >&6
+
+fi
+if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
+  echo "$as_me:3840: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether sys/ioctl.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3846 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#ifdef TIOCGWINSZ
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "yes" >/dev/null 2>&1; then
+  ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes
+else
+  ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:3864: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
+echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6
+
+  if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then
+
+cat >>confdefs.h <<\EOF
+#define GWINSZ_IN_SYS_IOCTL 1
+EOF
+
+  fi
+fi
+
+echo "$as_me:3876: checking whether signal handlers are of type void" >&5
+echo $ECHO_N "checking whether signal handlers are of type void... $ECHO_C" >&6
+if test "${bash_cv_void_sighandler+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3882 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -2013,233 +3890,283 @@
 extern "C"
 #endif
 void (*signal ()) ();
-int main() {
+int
+main ()
+{
 int i;
-; return 0; }
-EOF
-if { (eval echo configure:2021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3902: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:3905: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:3908: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3911: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_void_sighandler=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_void_sighandler=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_void_sighandler=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$ac_t""$bash_cv_void_sighandler" 1>&6
+echo "$as_me:3921: result: $bash_cv_void_sighandler" >&5
+echo "${ECHO_T}$bash_cv_void_sighandler" >&6
 if test $bash_cv_void_sighandler = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define VOID_SIGHANDLER 1
 EOF
 
 fi
 
-echo $ac_n "checking for TIOCGWINSZ in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2041: checking for TIOCGWINSZ in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_tiocgwinsz_in_ioctl'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3930: checking for TIOCSTAT in sys/ioctl.h" >&5
+echo $ECHO_N "checking for TIOCSTAT in sys/ioctl.h... $ECHO_C" >&6
+if test "${bash_cv_tiocstat_in_ioctl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2046 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3936 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
-int main() {
-int x = TIOCGWINSZ;
-; return 0; }
-EOF
-if { (eval echo configure:2054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  bash_cv_tiocgwinsz_in_ioctl=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_tiocgwinsz_in_ioctl=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$bash_cv_tiocgwinsz_in_ioctl" 1>&6
-if test $bash_cv_tiocgwinsz_in_ioctl = yes; then   
-cat >> confdefs.h <<\EOF
-#define GWINSZ_IN_SYS_IOCTL 1
-EOF
-
-fi
-
-echo $ac_n "checking for TIOCSTAT in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2075: checking for TIOCSTAT in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_tiocstat_in_ioctl'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2080 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
 int x = TIOCSTAT;
-; return 0; }
-EOF
-if { (eval echo configure:2088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3949: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:3952: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:3955: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3958: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_tiocstat_in_ioctl=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_tiocstat_in_ioctl=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_tiocstat_in_ioctl=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
-echo "$ac_t""$bash_cv_tiocstat_in_ioctl" 1>&6
-if test $bash_cv_tiocstat_in_ioctl = yes; then   
-cat >> confdefs.h <<\EOF
+echo "$as_me:3969: result: $bash_cv_tiocstat_in_ioctl" >&5
+echo "${ECHO_T}$bash_cv_tiocstat_in_ioctl" >&6
+if test $bash_cv_tiocstat_in_ioctl = yes; then
+cat >>confdefs.h <<\EOF
 #define TIOCSTAT_IN_SYS_IOCTL 1
 EOF
 
 fi
 
-echo $ac_n "checking for FIONREAD in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2109: checking for FIONREAD in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_fionread_in_ioctl'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3978: checking for FIONREAD in sys/ioctl.h" >&5
+echo $ECHO_N "checking for FIONREAD in sys/ioctl.h... $ECHO_C" >&6
+if test "${bash_cv_fionread_in_ioctl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2114 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3984 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
 int x = FIONREAD;
-; return 0; }
-EOF
-if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3997: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4000: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4003: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4006: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_fionread_in_ioctl=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_fionread_in_ioctl=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_fionread_in_ioctl=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
-echo "$ac_t""$bash_cv_fionread_in_ioctl" 1>&6
-if test $bash_cv_fionread_in_ioctl = yes; then   
-cat >> confdefs.h <<\EOF
+echo "$as_me:4017: result: $bash_cv_fionread_in_ioctl" >&5
+echo "${ECHO_T}$bash_cv_fionread_in_ioctl" >&6
+if test $bash_cv_fionread_in_ioctl = yes; then
+cat >>confdefs.h <<\EOF
 #define FIONREAD_IN_SYS_IOCTL 1
 EOF
 
 fi
 
-echo $ac_n "checking for speed_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:2143: checking for speed_t in sys/types.h" >&5
-if eval "test \"`echo '$''{'bash_cv_speed_t_in_sys_types'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4026: checking for speed_t in sys/types.h" >&5
+echo $ECHO_N "checking for speed_t in sys/types.h... $ECHO_C" >&6
+if test "${bash_cv_speed_t_in_sys_types+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2148 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4032 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
-int main() {
+int
+main ()
+{
 speed_t x;
-; return 0; }
-EOF
-if { (eval echo configure:2155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4044: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4047: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4050: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4053: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_speed_t_in_sys_types=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_speed_t_in_sys_types=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_speed_t_in_sys_types=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
-echo "$ac_t""$bash_cv_speed_t_in_sys_types" 1>&6
-if test $bash_cv_speed_t_in_sys_types = yes; then   
-cat >> confdefs.h <<\EOF
+echo "$as_me:4064: result: $bash_cv_speed_t_in_sys_types" >&5
+echo "${ECHO_T}$bash_cv_speed_t_in_sys_types" >&6
+if test $bash_cv_speed_t_in_sys_types = yes; then
+cat >>confdefs.h <<\EOF
 #define SPEED_T_IN_SYS_TYPES 1
 EOF
 
 fi
 
-echo $ac_n "checking for struct winsize in sys/ioctl.h and termios.h""... $ac_c" 1>&6
-echo "configure:2176: checking for struct winsize in sys/ioctl.h and termios.h" >&5
-if eval "test \"`echo '$''{'bash_cv_struct_winsize_header'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4073: checking for struct winsize in sys/ioctl.h and termios.h" >&5
+echo $ECHO_N "checking for struct winsize in sys/ioctl.h and termios.h... $ECHO_C" >&6
+if test "${bash_cv_struct_winsize_header+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2181 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4079 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
 struct winsize x;
-; return 0; }
-EOF
-if { (eval echo configure:2189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4092: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4095: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4098: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4101: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_struct_winsize_header=ioctl_h
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  cat > conftest.$ac_ext <<EOF
-#line 2197 "configure"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cat >conftest.$ac_ext <<_ACEOF
+#line 4108 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <termios.h>
-int main() {
+int
+main ()
+{
 struct winsize x;
-; return 0; }
-EOF
-if { (eval echo configure:2205: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4121: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4124: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4127: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4130: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_struct_winsize_header=termios_h
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_struct_winsize_header=other
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_struct_winsize_header=other
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
 if test $bash_cv_struct_winsize_header = ioctl_h; then
-  echo "$ac_t""sys/ioctl.h" 1>&6
-  cat >> confdefs.h <<\EOF
+  echo "$as_me:4145: result: sys/ioctl.h" >&5
+echo "${ECHO_T}sys/ioctl.h" >&6
+  cat >>confdefs.h <<\EOF
 #define STRUCT_WINSIZE_IN_SYS_IOCTL 1
 EOF
 
 elif test $bash_cv_struct_winsize_header = termios_h; then
-  echo "$ac_t""termios.h" 1>&6
-  cat >> confdefs.h <<\EOF
+  echo "$as_me:4152: result: termios.h" >&5
+echo "${ECHO_T}termios.h" >&6
+  cat >>confdefs.h <<\EOF
 #define STRUCT_WINSIZE_IN_TERMIOS 1
 EOF
 
 else
-  echo "$ac_t""not found" 1>&6
+  echo "$as_me:4159: result: not found" >&5
+echo "${ECHO_T}not found" >&6
 fi
 
-
-echo $ac_n "checking if struct dirent has a d_ino member""... $ac_c" 1>&6
-echo "configure:2238: checking if struct dirent has a d_ino member" >&5
-if eval "test \"`echo '$''{'bash_cv_dirent_has_dino'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4163: checking if struct dirent has a d_ino member" >&5
+echo $ECHO_N "checking if struct dirent has a d_ino member... $ECHO_C" >&6
+if test "${bash_cv_dirent_has_dino+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2243 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4169 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -2262,40 +4189,53 @@
 # endif
 #endif /* HAVE_DIRENT_H */
 
-int main() {
+int
+main ()
+{
 
 struct dirent d; int z; z = d.d_ino;
 
-; return 0; }
-EOF
-if { (eval echo configure:2272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4203: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4206: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4209: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4212: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_dirent_has_dino=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_dirent_has_dino=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_dirent_has_dino=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
-echo "$ac_t""$bash_cv_dirent_has_dino" 1>&6
+echo "$as_me:4223: result: $bash_cv_dirent_has_dino" >&5
+echo "${ECHO_T}$bash_cv_dirent_has_dino" >&6
 if test $bash_cv_dirent_has_dino = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define STRUCT_DIRENT_HAS_D_INO 1
 EOF
 
 fi
 
-
-echo $ac_n "checking if struct dirent has a d_fileno member""... $ac_c" 1>&6
-echo "configure:2294: checking if struct dirent has a d_fileno member" >&5
-if eval "test \"`echo '$''{'bash_cv_dirent_has_d_fileno'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4232: checking if struct dirent has a d_fileno member" >&5
+echo $ECHO_N "checking if struct dirent has a d_fileno member... $ECHO_C" >&6
+if test "${bash_cv_dirent_has_d_fileno+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2299 "configure"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4238 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -2318,33 +4258,46 @@
 # endif
 #endif /* HAVE_DIRENT_H */
 
-int main() {
+int
+main ()
+{
 
 struct dirent d; int z; z = d.d_fileno;
 
-; return 0; }
-EOF
-if { (eval echo configure:2328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4272: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:4275: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:4278: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4281: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   bash_cv_dirent_has_d_fileno=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  bash_cv_dirent_has_d_fileno=no
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_dirent_has_d_fileno=no
 fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
 fi
 
-echo "$ac_t""$bash_cv_dirent_has_d_fileno" 1>&6
+echo "$as_me:4292: result: $bash_cv_dirent_has_d_fileno" >&5
+echo "${ECHO_T}$bash_cv_dirent_has_d_fileno" >&6
 if test $bash_cv_dirent_has_d_fileno = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
 #define STRUCT_DIRENT_HAS_D_FILENO 1
 EOF
 
 fi
 
-
 case "$host_os" in
 aix*)   prefer_curses=yes ;;
 esac
@@ -2352,128 +4305,224 @@
 if test "X$bash_cv_termcap_lib" = "X"; then
 _bash_needmsg=yes
 else
-echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6
-echo "configure:2357: checking which library has the termcap functions" >&5
+echo "$as_me:4308: checking which library has the termcap functions" >&5
+echo $ECHO_N "checking which library has the termcap functions... $ECHO_C" >&6
 _bash_needmsg=
 fi
-if eval "test \"`echo '$''{'bash_cv_termcap_lib'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test "${bash_cv_termcap_lib+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:2364: checking for tgetent in -ltermcap" >&5
-ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:4315: checking for tgetent in -ltermcap" >&5
+echo $ECHO_N "checking for tgetent in -ltermcap... $ECHO_C" >&6
+if test "${ac_cv_lib_termcap_tgetent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_save_LIBS="$LIBS"
+  ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltermcap  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2372 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4323 "configure"
 #include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+   builtin and then its argument prototype would still apply.  */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4342: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4345: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4348: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4351: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_termcap_tgetent=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_termcap_tgetent=no
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+echo "$as_me:4362: result: $ac_cv_lib_termcap_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_termcap_tgetent" >&6
+if test $ac_cv_lib_termcap_tgetent = yes; then
   bash_cv_termcap_lib=libtermcap
 else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
-echo "configure:2402: checking for tgetent in -lcurses" >&5
-ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:4367: checking for tgetent in -ltinfo" >&5
+echo $ECHO_N "checking for tgetent in -ltinfo... $ECHO_C" >&6
+if test "${ac_cv_lib_tinfo_tgetent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-lcurses  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2410 "configure"
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltinfo  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4375 "configure"
 #include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+   builtin and then its argument prototype would still apply.  */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4394: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4397: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4400: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4403: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_tinfo_tgetent=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_tinfo_tgetent=no
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:4414: result: $ac_cv_lib_tinfo_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_tinfo_tgetent" >&6
+if test $ac_cv_lib_tinfo_tgetent = yes; then
+  bash_cv_termcap_lib=libtinfo
+else
+  echo "$as_me:4419: checking for tgetent in -lcurses" >&5
+echo $ECHO_N "checking for tgetent in -lcurses... $ECHO_C" >&6
+if test "${ac_cv_lib_curses_tgetent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcurses  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4427 "configure"
+#include "confdefs.h"
 
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4446: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4449: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4452: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4455: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_curses_tgetent=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_curses_tgetent=no
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:4466: result: $ac_cv_lib_curses_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_curses_tgetent" >&6
+if test $ac_cv_lib_curses_tgetent = yes; then
   bash_cv_termcap_lib=libcurses
 else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:2440: checking for tgetent in -lncurses" >&5
-ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:4471: checking for tgetent in -lncurses" >&5
+echo $ECHO_N "checking for tgetent in -lncurses... $ECHO_C" >&6
+if test "${ac_cv_lib_ncurses_tgetent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_save_LIBS="$LIBS"
+  ac_check_lib_save_LIBS=$LIBS
 LIBS="-lncurses  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2448 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4479 "configure"
 #include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
 /* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+   builtin and then its argument prototype would still apply.  */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4498: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4501: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4504: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4507: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_ncurses_tgetent=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ncurses_tgetent=no
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+echo "$as_me:4518: result: $ac_cv_lib_ncurses_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_ncurses_tgetent" >&6
+if test $ac_cv_lib_ncurses_tgetent = yes; then
   bash_cv_termcap_lib=libncurses
 else
-  echo "$ac_t""no" 1>&6
-bash_cv_termcap_lib=gnutermcap
+  bash_cv_termcap_lib=gnutermcap
+fi
+
 fi
 
 fi
@@ -2483,10 +4532,11 @@
 fi
 
 if test "X$_bash_needmsg" = "Xyes"; then
-echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6
-echo "configure:2488: checking which library has the termcap functions" >&5
+echo "$as_me:4535: checking which library has the termcap functions" >&5
+echo $ECHO_N "checking which library has the termcap functions... $ECHO_C" >&6
 fi
-echo "$ac_t""using $bash_cv_termcap_lib" 1>&6
+echo "$as_me:4538: result: using $bash_cv_termcap_lib" >&5
+echo "${ECHO_T}using $bash_cv_termcap_lib" >&6
 if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
 LDFLAGS="$LDFLAGS -L./lib/termcap"
 TERMCAP_LIB="./lib/termcap/libtermcap.a"
@@ -2494,6 +4544,9 @@
 elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
 TERMCAP_LIB=-ltermcap
 TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libtinfo; then
+TERMCAP_LIB=-ltinfo
+TERMCAP_DEP=
 elif test $bash_cv_termcap_lib = libncurses; then
 TERMCAP_LIB=-lncurses
 TERMCAP_DEP=
@@ -2503,11 +4556,388 @@
 fi
 
 if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then
-	TERMCAP_LIB=-ltermcap	#default
+	if test "$prefer_curses" = yes; then
+		TERMCAP_LIB=-lcurses
+	else
+		TERMCAP_LIB=-ltermcap	#default
+	fi
+fi
+
+for ac_header in wctype.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:4569: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4575 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:4579: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:4585: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4604: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+for ac_header in wchar.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:4617: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4623 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:4627: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:4633: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4652: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+for ac_header in langinfo.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:4665: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4671 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:4675: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:4681: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4700: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:4710: checking for mbsrtowcs" >&5
+echo $ECHO_N "checking for mbsrtowcs... $ECHO_C" >&6
+if test "${ac_cv_func_mbsrtowcs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4716 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char mbsrtowcs (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char mbsrtowcs ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_mbsrtowcs) || defined (__stub___mbsrtowcs)
+choke me
+#else
+f = mbsrtowcs;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4747: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4750: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4753: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4756: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_mbsrtowcs=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_mbsrtowcs=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:4766: result: $ac_cv_func_mbsrtowcs" >&5
+echo "${ECHO_T}$ac_cv_func_mbsrtowcs" >&6
+if test $ac_cv_func_mbsrtowcs = yes; then
+  cat >>confdefs.h <<\EOF
+#define HAVE_MBSRTOWCS 1
+EOF
+
+fi
+
+echo "$as_me:4775: checking for wcwidth" >&5
+echo $ECHO_N "checking for wcwidth... $ECHO_C" >&6
+if test "${ac_cv_func_wcwidth+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4781 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char wcwidth (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char wcwidth ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_wcwidth) || defined (__stub___wcwidth)
+choke me
+#else
+f = wcwidth;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4812: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4815: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4818: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4821: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_wcwidth=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_wcwidth=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:4831: result: $ac_cv_func_wcwidth" >&5
+echo "${ECHO_T}$ac_cv_func_wcwidth" >&6
+if test $ac_cv_func_wcwidth = yes; then
+  cat >>confdefs.h <<\EOF
+#define HAVE_WCWIDTH 1
+EOF
+
+fi
+
+echo "$as_me:4840: checking for mbstate_t" >&5
+echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
+if test "${bash_cv_have_mbstate_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:4846: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4851 "configure"
+#include "confdefs.h"
+
+#include <wchar.h>
+int
+main ()
+{
+  mbstate_t ps;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:4863: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4866: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:4868: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4871: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  bash_cv_have_mbstate_t=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_have_mbstate_t=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:4883: result: $bash_cv_have_mbstate_t" >&5
+echo "${ECHO_T}$bash_cv_have_mbstate_t" >&6
+if test $bash_cv_have_mbstate_t = yes; then
+	cat >>confdefs.h <<\EOF
+#define HAVE_MBSTATE_T 1
+EOF
+
+fi
+
+echo "$as_me:4892: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
+if test "${bash_cv_langinfo_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 4898 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4910: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:4913: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:4916: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:4919: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  bash_cv_langinfo_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_langinfo_codeset=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:4929: result: $bash_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$bash_cv_langinfo_codeset" >&6
+if test $bash_cv_langinfo_codeset = yes; then
+  cat >>confdefs.h <<\EOF
+#define HAVE_LANGINFO_CODESET 1
+EOF
+
 fi
 
 case "$host_cpu" in
 *cray*)	LOCAL_CFLAGS=-DCRAY ;;
+*s390*) LOCAL_CFLAGS=-fsigned-char ;;
 esac
 
 case "$host_os" in
@@ -2520,29 +4950,33 @@
 # ${srcdir}/support/shobj-conf
 #
 if test -f ${srcdir}/support/shobj-conf; then
-        echo $ac_n "checking configuration for building shared libraries""... $ac_c" 1>&6
-echo "configure:2525: checking configuration for building shared libraries" >&5
+        echo "$as_me:4953: checking configuration for building shared libraries" >&5
+echo $ECHO_N "checking configuration for building shared libraries... $ECHO_C" >&6
         eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
-        
-        
-        
-        
-	
-        
-        
-	
-	
-	
-	
-	
-        echo "$ac_t""$SHLIB_STATUS" 1>&6
+
+        echo "$as_me:4957: result: $SHLIB_STATUS" >&5
+echo "${ECHO_T}$SHLIB_STATUS" >&6
+
+	# SHLIB_STATUS is either `supported' or `unsupported'.  If it's
+	# `unsupported', turn off any default shared library building
+	if test "$SHLIB_STATUS" = 'unsupported'; then
+		opt_shared_libs=no
+	fi
 
 	# shared library versioning
 	# quoted for m4 so I can use character classes
 	SHLIB_MAJOR=`expr "$LIBVERSION" : '\([0-9]\)\..*'`
 	SHLIB_MINOR=`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`
-	
-	
+
+fi
+
+if test "$opt_static_libs" = "yes"; then
+	STATIC_TARGET=static
+	STATIC_INSTALL_TARGET=install-static
+fi
+if test "$opt_shared_libs" = "yes"; then
+	SHARED_TARGET=shared
+	SHARED_INSTALL_TARGET=install-shared
 fi
 
 case "$host_os" in
@@ -2550,409 +4984,882 @@
 *)		BUILD_DIR=`pwd` ;;
 esac
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
+ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile shlib/Makefile"
+ac_config_commands="$ac_config_commands default"
+cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
 #
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
 #
-EOF
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
 # The following way of writing the cache mishandles newlines in values,
 # but we know of no workaround that is simple, portable, and efficient.
 # So, don't put newlines in cache variables' values.
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+        "s/'/'\\\\''/g;
+    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
   if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
   else
     echo "not updating unwritable cache $cache_file"
   fi
 fi
 rm -f confcache
 
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
 test "x$prefix" = xNONE && prefix=$ac_default_prefix
 # Let make expand exec_prefix.
 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
 
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
+  ac_vpsub='/^[ 	]*VPATH[ 	]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ 	]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ 	]*$//;
+}'
 fi
 
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
 DEFS=-DHAVE_CONFIG_H
 
-# Without the "./", some shells look in PATH for config.status.
 : ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:5068: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
 # Generated automatically by configure.
 # Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
 # Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
+# configure, is in config.log if it exists.
 
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
-  case "\$ac_option" in
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
-    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.13"
-    exit 0 ;;
-  -help | --help | --hel | --he | --h)
-    echo "\$ac_cs_usage"; exit 0 ;;
-  *) echo "\$ac_cs_usage"; exit 1 ;;
-  esac
-done
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
 
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
+_ACEOF
 
-trap 'rm -fr `echo "Makefile doc/Makefile examples/Makefile shlib/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@CC@%$CC%g
-s%@CPP@%$CPP%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@AR@%$AR%g
-s%@RANLIB@%$RANLIB%g
-s%@MAKE_SHELL@%$MAKE_SHELL%g
-s%@SHOBJ_CC@%$SHOBJ_CC%g
-s%@SHOBJ_CFLAGS@%$SHOBJ_CFLAGS%g
-s%@SHOBJ_LD@%$SHOBJ_LD%g
-s%@SHOBJ_LDFLAGS@%$SHOBJ_LDFLAGS%g
-s%@SHOBJ_XLDFLAGS@%$SHOBJ_XLDFLAGS%g
-s%@SHOBJ_LIBS@%$SHOBJ_LIBS%g
-s%@SHOBJ_STATUS@%$SHOBJ_STATUS%g
-s%@SHLIB_STATUS@%$SHLIB_STATUS%g
-s%@SHLIB_XLDFLAGS@%$SHLIB_XLDFLAGS%g
-s%@SHLIB_LIBSUFF@%$SHLIB_LIBSUFF%g
-s%@SHLIB_LIBVERSION@%$SHLIB_LIBVERSION%g
-s%@SHLIB_LIBS@%$SHLIB_LIBS%g
-s%@SHLIB_MAJOR@%$SHLIB_MAJOR%g
-s%@SHLIB_MINOR@%$SHLIB_MINOR%g
-s%@BUILD_DIR@%$BUILD_DIR%g
-s%@LOCAL_CFLAGS@%$LOCAL_CFLAGS%g
-s%@LOCAL_LDFLAGS@%$LOCAL_LDFLAGS%g
-s%@LOCAL_DEFS@%$LOCAL_DEFS%g
-s%@ARFLAGS@%$ARFLAGS%g
-s%@LIBVERSION@%$LIBVERSION%g
-s%@TERMCAP_LIB@%$TERMCAP_LIB%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
-  if test $ac_beg -gt 1; then
-    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-  else
-    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-  fi
-  if test ! -s conftest.s$ac_file; then
-    ac_more_lines=false
-    rm -f conftest.s$ac_file
-  else
-    if test -z "$ac_sed_cmds"; then
-      ac_sed_cmds="sed -f conftest.s$ac_file"
-    else
-      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
-    fi
-    ac_file=`expr $ac_file + 1`
-    ac_beg=$ac_end
-    ac_end=`expr $ac_end + $ac_max_sed_cmds`
-  fi
-done
-if test -z "$ac_sed_cmds"; then
-  ac_sed_cmds=cat
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
 fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\EOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
 EOF
 
-cat >> $CONFIG_STATUS <<EOF
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+readline config.status 4.3
+configured by $0, generated by GNU Autoconf 2.52,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
-CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile examples/Makefile shlib/Makefile"}
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
 EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
+
+cat >>$CONFIG_STATUS <<\EOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    shift
+    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+    shift
+    ;;
+  -*);;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_need_defaults=false;;
   esac
 
-  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+  case $1 in
+  # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:5244: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    shift
+    CONFIG_FILES="$CONFIG_FILES $1"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $1"
+    ac_need_defaults=false;;
 
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  # This is an error.
+  -*) { { echo "$as_me:5263: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status.  ##
+## ----------------------- ##
+
+This file was extended by $as_me (readline 4.3) 2.52, executed with
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "shlib/Makefile" ) CONFIG_FILES="$CONFIG_FILES shlib/Makefile" ;;
+  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:5304: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=$TMPDIR/cs$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+   { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CPP@,$CPP,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@AR@,$AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@MAKE_SHELL@,$MAKE_SHELL,;t t
+s,@SHOBJ_CC@,$SHOBJ_CC,;t t
+s,@SHOBJ_CFLAGS@,$SHOBJ_CFLAGS,;t t
+s,@SHOBJ_LD@,$SHOBJ_LD,;t t
+s,@SHOBJ_LDFLAGS@,$SHOBJ_LDFLAGS,;t t
+s,@SHOBJ_XLDFLAGS@,$SHOBJ_XLDFLAGS,;t t
+s,@SHOBJ_LIBS@,$SHOBJ_LIBS,;t t
+s,@SHOBJ_STATUS@,$SHOBJ_STATUS,;t t
+s,@SHLIB_STATUS@,$SHLIB_STATUS,;t t
+s,@SHLIB_XLDFLAGS@,$SHLIB_XLDFLAGS,;t t
+s,@SHLIB_LIBSUFF@,$SHLIB_LIBSUFF,;t t
+s,@SHLIB_LIBVERSION@,$SHLIB_LIBVERSION,;t t
+s,@SHLIB_LIBS@,$SHLIB_LIBS,;t t
+s,@SHLIB_MAJOR@,$SHLIB_MAJOR,;t t
+s,@SHLIB_MINOR@,$SHLIB_MINOR,;t t
+s,@STATIC_TARGET@,$STATIC_TARGET,;t t
+s,@SHARED_TARGET@,$SHARED_TARGET,;t t
+s,@STATIC_INSTALL_TARGET@,$STATIC_INSTALL_TARGET,;t t
+s,@SHARED_INSTALL_TARGET@,$SHARED_INSTALL_TARGET,;t t
+s,@BUILD_DIR@,$BUILD_DIR,;t t
+s,@LOCAL_CFLAGS@,$LOCAL_CFLAGS,;t t
+s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t
+s,@LOCAL_DEFS@,$LOCAL_DEFS,;t t
+s,@ARFLAGS@,$ARFLAGS,;t t
+s,@LIBVERSION@,$LIBVERSION,;t t
+s,@TERMCAP_LIB@,$TERMCAP_LIB,;t t
+CEOF
+
+EOF
+
+  cat >>$CONFIG_STATUS <<\EOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-    # The file is in a subdirectory.
-    test ! -d "$ac_dir" && mkdir "$ac_dir"
-    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
     # A "../" for each directory in $ac_dir_suffix.
-    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
   else
     ac_dir_suffix= ac_dots=
   fi
 
-  case "$ac_given_srcdir" in
-  .)  srcdir=.
-      if test -z "$ac_dots"; then top_srcdir=.
-      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  case $srcdir in
+  .)  ac_srcdir=.
+      if test -z "$ac_dots"; then
+         ac_top_srcdir=.
+      else
+         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+      fi ;;
+  [\\/]* | ?:[\\/]* )
+      ac_srcdir=$srcdir$ac_dir_suffix;
+      ac_top_srcdir=$srcdir ;;
   *) # Relative path.
-    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_dots$srcdir ;;
   esac
 
-  case "$ac_given_INSTALL" in
-  [/$]*) INSTALL="$ac_given_INSTALL" ;;
-  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_dots$INSTALL ;;
   esac
 
-  echo creating "$ac_file"
-  rm -f "$ac_file"
-  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-  case "$ac_file" in
-  *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
-  *) ac_comsub= ;;
-  esac
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:5549: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated automatically by config.status.  */
+  configure_input="Generated automatically from `echo $ac_file_in |
+                                                 sed 's,.*/,,'` by configure."
 
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:5567: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:5580: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# CONFIG_HEADER section.
+#
 
 # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
 # NAME is the cpp macro being defined and VALUE is the value it is being given.
 #
 # ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
-ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_uB='\([ 	]\)%\1#\2define\3'
+ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
+ac_dB='[ 	].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_uB='$,\1#\2define\3'
 ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
+ac_uD=',;t'
 
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
-  CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
   esac
 
-  echo creating $ac_file
+  test x"$ac_file" != x- && { echo "$as_me:5641: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
 
-  rm -f conftest.frag conftest.in conftest.out
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  cat $ac_file_inputs > conftest.in
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:5652: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:5665: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
 
 EOF
 
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h.  And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\EOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
+t end
+s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
 EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
 
 # This sed command replaces #undef with comments.  This is necessary, for
 # example, in the case of _POSIX_SOURCE, which is predefined and required
 # on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+cat >>conftest.undefs <<\EOF
+s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
 EOF
 
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if egrep "^[ 	]*#[ 	]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
 rm -f conftest.tail
-while :
+while grep . conftest.defines >/dev/null
 do
-  ac_lines=`grep -c . conftest.vals`
-  # grep -c gives empty output for an empty file on some AIX systems.
-  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
-  # Write a limited-size here document to conftest.frag.
-  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[ 	]*#[ 	]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
   echo 'CEOF
-  sed -f conftest.frag conftest.in > conftest.out
-  rm -f conftest.in
-  mv conftest.out conftest.in
-' >> $CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
-  rm -f conftest.vals
-  mv conftest.tail conftest.vals
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
 done
-rm -f conftest.vals
+rm -f conftest.defines
+echo '  fi # egrep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
 
-cat >> $CONFIG_STATUS <<\EOF
-  rm -f conftest.frag conftest.h
-  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
-  cat conftest.in >> conftest.h
-  rm -f conftest.in
-  if cmp -s $ac_file conftest.h 2>/dev/null; then
-    echo "$ac_file is unchanged"
-    rm -f conftest.h
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[ 	]*#[ 	]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\EOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated automatically by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated automatically by configure.  */" >$tmp/config.h
   else
-    # Remove last slash and all that follows it.  Not all systems have dirname.
-      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-      # The file is in a subdirectory.
-      test ! -d "$ac_dir" && mkdir "$ac_dir"
-    fi
-    rm -f $ac_file
-    mv conftest.h $ac_file
+    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
   fi
-fi; done
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+      { echo "$as_me:5782: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+        { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
 
+      fi
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
 EOF
-cat >> $CONFIG_STATUS <<EOF
+cat >>$CONFIG_STATUS <<\EOF
 
-EOF
-cat >> $CONFIG_STATUS <<\EOF
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
 
+  case $ac_dest in
+    default )
 # Makefile uses this timestamp file to record whether config.h is up to date.
 echo > stamp-h
+ ;;
+  esac
+done
+EOF
 
-exit 0
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
 EOF
 chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+ac_clean_files=$ac_clean_files_save
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
 
diff --git a/readline/configure.in b/readline/configure.in
index f977fec..bc78f8a 100644
--- a/readline/configure.in
+++ b/readline/configure.in
@@ -4,33 +4,47 @@
 dnl report bugs to chet@po.cwru.edu
 dnl
 dnl Process this file with autoconf to produce a configure script.
-AC_REVISION([for Readline 4.1, version 2.22, from autoconf version] AC_ACVERSION)
-LIBVERSION=4.1
+AC_REVISION([for Readline 4.3, version 2.45, from autoconf version] AC_ACVERSION)
 
-AC_INIT(readline.h)
-AC_CONFIG_HEADER(config.h)
+AC_INIT(readline, 4.3, bug-readline@gnu.org)
 
 dnl make sure we are using a recent autoconf version
-AC_PREREQ(2.10)
+AC_PREREQ(2.50)
 
+AC_CONFIG_SRCDIR(readline.h)
 AC_CONFIG_AUX_DIR(./support)
+AC_CONFIG_HEADERS(config.h)
+
+dnl update the value of RL_READLINE_VERSION in readline.h when this changes
+LIBVERSION=4.3
 
 AC_CANONICAL_HOST
 
 dnl configure defaults
 opt_curses=no
-opt_shared=no
 
 dnl arguments to configure
-AC_ARG_WITH(curses, --with-curses               use the curses library instead of the termcap library,opt_curses=$withval)
+AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval)
 
 if test "$opt_curses" = "yes"; then
 	prefer_curses=yes
 fi
 
+dnl option parsing for optional features
+opt_static_libs=yes
+opt_shared_libs=yes
+
+AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build shared libraries [[default=YES]]]), opt_shared_libs=$enableval)
+AC_ARG_ENABLE(static, AC_HELP_STRING([--enable-static], [build static libraries [[default=YES]]]), opt_static_libs=$enableval)
+
+echo ""
+echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
+echo ""
+
 # We want these before the checks, so the checks can modify their values.
 test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
 
+AC_PROG_MAKE_SET
 AC_PROG_CC
 dnl AC_AIX
 AC_MINIX
@@ -40,7 +54,7 @@
 
 AC_PROG_GCC_TRADITIONAL
 AC_PROG_INSTALL
-AC_CHECK_PROG(AR, ar, ar)
+AC_CHECK_PROG(AR, ar, , ar)
 dnl Set default for ARFLAGS, since autoconf does not have a macro for it.
 dnl This allows people to set it when running configure or make
 test -n "$ARFLAGS" || ARFLAGS="cr"
@@ -49,33 +63,42 @@
 MAKE_SHELL=/bin/sh
 AC_SUBST(MAKE_SHELL)
 
-AC_RETSIGTYPE
+AC_C_CONST
+AC_C_PROTOTYPES
+AC_C_CHAR_UNSIGNED
+
+AC_TYPE_SIGNAL
+
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE(ssize_t, int)
 
 AC_HEADER_STAT
 AC_HEADER_DIRENT
 
 AC_CHECK_FUNCS(lstat memmove putenv select setenv setlocale \
-		strcasecmp tcgetattr)
+		strcasecmp strpbrk tcgetattr vsnprintf isascii isxdigit)
 
 AC_FUNC_STRCOLL
 
-AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h stdarg.h string.h \
-		sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
-		termcap.h termios.h termio.h sys/file.h locale.h)
+AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
+		limits.h sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
+		termcap.h termios.h termio.h sys/file.h locale.h memory.h )
 
-BASH_SIGNAL_CHECK
-BASH_REINSTALL_SIGHANDLERS
+BASH_SYS_SIGNAL_VINTAGE
+BASH_SYS_REINSTALL_SIGHANDLERS
 
 BASH_FUNC_POSIX_SETJMP
 BASH_FUNC_LSTAT
-BASH_CHECK_GETPW_FUNCS
 BASH_FUNC_STRCOLL
 
+BASH_CHECK_GETPW_FUNCS
+
+AC_HEADER_TIOCGWINSZ
+
 BASH_TYPE_SIGHANDLER
-BASH_HAVE_TIOCGWINSZ
 BASH_HAVE_TIOCSTAT
 BASH_HAVE_FIONREAD
-BASH_MISC_SPEED_T
+BASH_CHECK_SPEED_T
 BASH_STRUCT_WINSIZE
 BASH_STRUCT_DIRENT_D_INO
 BASH_STRUCT_DIRENT_D_FILENO
@@ -86,11 +109,18 @@
 esac
 BASH_CHECK_LIB_TERMCAP
 if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then
-	TERMCAP_LIB=-ltermcap	#default
+	if test "$prefer_curses" = yes; then
+		TERMCAP_LIB=-lcurses
+	else
+		TERMCAP_LIB=-ltermcap	#default
+	fi
 fi
 
+BASH_CHECK_MULTIBYTE
+
 case "$host_cpu" in
 *cray*)	LOCAL_CFLAGS=-DCRAY ;;
+*s390*) LOCAL_CFLAGS=-fsigned-char ;;
 esac
 
 case "$host_os" in
@@ -119,6 +149,12 @@
 	AC_SUBST(SHLIB_LIBS)
         AC_MSG_RESULT($SHLIB_STATUS)
 
+	# SHLIB_STATUS is either `supported' or `unsupported'.  If it's
+	# `unsupported', turn off any default shared library building
+	if test "$SHLIB_STATUS" = 'unsupported'; then
+		opt_shared_libs=no
+	fi
+
 	# shared library versioning
 	# quoted for m4 so I can use character classes
 	SHLIB_MAJOR=[`expr "$LIBVERSION" : '\([0-9]\)\..*'`]
@@ -127,6 +163,20 @@
 	AC_SUBST(SHLIB_MINOR)
 fi
 
+if test "$opt_static_libs" = "yes"; then
+	STATIC_TARGET=static
+	STATIC_INSTALL_TARGET=install-static
+fi
+if test "$opt_shared_libs" = "yes"; then
+	SHARED_TARGET=shared
+	SHARED_INSTALL_TARGET=install-shared
+fi
+
+AC_SUBST(STATIC_TARGET)
+AC_SUBST(SHARED_TARGET)
+AC_SUBST(STATIC_INSTALL_TARGET)
+AC_SUBST(SHARED_INSTALL_TARGET)
+
 case "$host_os" in
 msdosdjgpp*)	BUILD_DIR=`pwd.exe` ;;	# to prevent //d/path/file
 *)		BUILD_DIR=`pwd` ;;
diff --git a/readline/display.c b/readline/display.c
index 4487004..5150ea6 100644
--- a/readline/display.c
+++ b/readline/display.c
@@ -43,6 +43,7 @@
 
 /* System-specific feature definitions and include files. */
 #include "rldefs.h"
+#include "rlmbutil.h"
 
 /* Termcap library stuff. */
 #include "tcap.h"
@@ -59,14 +60,21 @@
 #endif /* !strchr && !__STDC__ */
 
 #if defined (HACK_TERMCAP_MOTION)
-extern char *term_forward_char;
+extern char *_rl_term_forward_char;
 #endif
 
-static void update_line __P((char *, char *, int, int, int, int));
-static void space_to_eol __P((int));
-static void delete_chars __P((int));
-static void insert_some_chars __P((char *, int));
-static void cr __P((void));
+static void update_line PARAMS((char *, char *, int, int, int, int));
+static void space_to_eol PARAMS((int));
+static void delete_chars PARAMS((int));
+static void insert_some_chars PARAMS((char *, int, int));
+static void cr PARAMS((void));
+
+#if defined (HANDLE_MULTIBYTE)
+static int _rl_col_width PARAMS((char *, int, int));
+static int *_rl_wrapped_line;
+#else
+#  define _rl_col_width(l, s, e)	(((e) <= (s)) ? 0 : (e) - (s))
+#endif
 
 static int *inv_lbreaks, *vis_lbreaks;
 static int inv_lbsize, vis_lbsize;
@@ -103,7 +111,7 @@
    RL_DISPLAY_FIXED variable.  This is good for efficiency. */
 
 /* Application-specific redisplay function. */
-VFunction *rl_redisplay_function = rl_redisplay;
+rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
 
 /* Global variables declared here. */
 /* What YOU turn on when you have handled all redisplay yourself. */
@@ -142,27 +150,40 @@
 /* Default and initial buffer size.  Can grow. */
 static int line_size = 1024;
 
+/* Variables to keep track of the expanded prompt string, which may
+   include invisible characters. */
+
 static char *local_prompt, *local_prompt_prefix;
-static int visible_length, prefix_length;
+static int prompt_visible_length, prompt_prefix_length;
 
 /* The number of invisible characters in the line currently being
    displayed on the screen. */
 static int visible_wrap_offset;
 
-/* static so it can be shared between rl_redisplay and update_line */
+/* The number of invisible characters in the prompt string.  Static so it
+   can be shared between rl_redisplay and update_line */
 static int wrap_offset;
 
-/* The index of the last invisible_character in the prompt string. */
-static int last_invisible;
+/* The index of the last invisible character in the prompt string. */
+static int prompt_last_invisible;
 
 /* The length (buffer offset) of the first line of the last (possibly
    multi-line) buffer displayed on the screen. */
 static int visible_first_line_len;
 
+/* Number of invisible characters on the first physical line of the prompt.
+   Only valid when the number of physical characters in the prompt exceeds
+   (or is equal to) _rl_screenwidth. */
+static int prompt_invis_chars_first_line;
+
+static int prompt_last_screen_line;
+
 /* Expand the prompt string S and return the number of visible
    characters in *LP, if LP is not null.  This is currently more-or-less
    a placeholder for expansion.  LIP, if non-null is a place to store the
-   index of the last invisible character in the returned string. */
+   index of the last invisible character in the returned string. NIFLP,
+   if non-zero, is a place to store the number of invisible characters in
+   the first prompt line. */
 
 /* Current implementation:
 	\001 (^A) start non-visible characters
@@ -172,12 +193,12 @@
    \002 are assumed to be `visible'. */	
 
 static char *
-expand_prompt (pmt, lp, lip)
+expand_prompt (pmt, lp, lip, niflp)
      char *pmt;
-     int *lp, *lip;
+     int *lp, *lip, *niflp;
 {
   char *r, *ret, *p;
-  int l, rl, last, ignoring;
+  int l, rl, last, ignoring, ninvis, invfl;
 
   /* Short-circuit if we can. */
   if (strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
@@ -189,9 +210,11 @@
     }
 
   l = strlen (pmt);
-  r = ret = xmalloc (l + 1);
-  
-  for (rl = ignoring = last = 0, p = pmt; p && *p; p++)
+  r = ret = (char *)xmalloc (l + 1);
+
+  invfl = 0;	/* invisible chars in first line of prompt */
+
+  for (rl = ignoring = last = ninvis = 0, p = pmt; p && *p; p++)
     {
       /* This code strips the invisible character string markers
 	 RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */
@@ -211,14 +234,23 @@
 	  *r++ = *p;
 	  if (!ignoring)
 	    rl++;
+	  else
+	    ninvis++;
+	  if (rl == _rl_screenwidth)
+	    invfl = ninvis;
 	}
     }
 
+  if (rl < _rl_screenwidth)
+    invfl = ninvis;
+
   *r = '\0';
   if (lp)
     *lp = rl;
   if (lip)
     *lip = last;
+  if (niflp)
+    *niflp = invfl;
   return ret;
 }
 
@@ -230,7 +262,7 @@
 {
   char *ret;
 
-  ret = expand_prompt (pmt, (int *)NULL, (int *)NULL);
+  ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL);
   return ret;
 }
 
@@ -242,8 +274,8 @@
  *		  (portion after the final newline)
  * local_prompt_prefix = portion before last newline of rl_display_prompt,
  *			 expanded via expand_prompt
- * visible_length = number of visible characters in local_prompt
- * prefix_length = number of visible characters in local_prompt_prefix
+ * prompt_visible_length = number of visible characters in local_prompt
+ * prompt_prefix_length = number of visible characters in local_prompt_prefix
  *
  * This function is called once per call to readline().  It may also be
  * called arbitrarily to expand the primary prompt.
@@ -259,12 +291,11 @@
   int c;
 
   /* Clear out any saved values. */
-  if (local_prompt)
-    free (local_prompt);
-  if (local_prompt_prefix)
-    free (local_prompt_prefix);
+  FREE (local_prompt);
+  FREE (local_prompt_prefix);
+
   local_prompt = local_prompt_prefix = (char *)0;
-  last_invisible = visible_length = 0;
+  prompt_last_invisible = prompt_visible_length = 0;
 
   if (prompt == 0 || *prompt == 0)
     return (0);
@@ -272,22 +303,28 @@
   p = strrchr (prompt, '\n');
   if (!p)
     {
-      /* The prompt is only one line. */
-      local_prompt = expand_prompt (prompt, &visible_length, &last_invisible);
+      /* The prompt is only one logical line, though it might wrap. */
+      local_prompt = expand_prompt (prompt, &prompt_visible_length,
+					    &prompt_last_invisible,
+					    &prompt_invis_chars_first_line);
       local_prompt_prefix = (char *)0;
-      return (visible_length);
+      return (prompt_visible_length);
     }
   else
     {
       /* The prompt spans multiple lines. */
       t = ++p;
-      local_prompt = expand_prompt (p, &visible_length, &last_invisible);
+      local_prompt = expand_prompt (p, &prompt_visible_length,
+				       &prompt_last_invisible,
+				       &prompt_invis_chars_first_line);
       c = *t; *t = '\0';
       /* The portion of the prompt string up to and including the
 	 final newline is now null-terminated. */
-      local_prompt_prefix = expand_prompt (prompt, &prefix_length, (int *)NULL);
+      local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
+						   (int *)NULL,
+						   &prompt_invis_chars_first_line);
       *t = c;
-      return (prefix_length);
+      return (prompt_prefix_length);
     }
 }
 
@@ -306,16 +343,16 @@
     {
       if (line_size < minsize)
 	line_size = minsize;
-      visible_line = xmalloc (line_size);
-      invisible_line = xmalloc (line_size);
+      visible_line = (char *)xmalloc (line_size);
+      invisible_line = (char *)xmalloc (line_size);
     }
   else if (line_size < minsize)	/* ensure it can hold MINSIZE chars */
     {
       line_size *= 2;
       if (line_size < minsize)
 	line_size = minsize;
-      visible_line = xrealloc (visible_line, line_size);
-      invisible_line = xrealloc (invisible_line, line_size);
+      visible_line = (char *)xrealloc (visible_line, line_size);
+      invisible_line = (char *)xrealloc (invisible_line, line_size);
     }
 
   for (n = minsize; n < line_size; n++)
@@ -330,6 +367,9 @@
       inv_lbsize = vis_lbsize = 256;
       inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int));
       vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int));
+#if defined (HANDLE_MULTIBYTE)
+      _rl_wrapped_line = (int *)xmalloc (vis_lbsize * sizeof (int));
+#endif
       inv_lbreaks[0] = vis_lbreaks[0] = 0;
     }
 }
@@ -343,6 +383,13 @@
   int c_pos, inv_botlin, lb_botlin, lb_linenum;
   int newlines, lpos, temp;
   char *prompt_this_line;
+#if defined (HANDLE_MULTIBYTE)
+  wchar_t wc;
+  size_t wc_bytes;
+  int wc_width;
+  mbstate_t ps;
+  int _rl_wrapped_multicolumn = 0;
+#endif
 
   if (!readline_echoing_p)
     return;
@@ -392,14 +439,14 @@
 	  if (temp >= line_size)
 	    {
 	      line_size = (temp + 1024) - (temp % 1024);
-	      visible_line = xrealloc (visible_line, line_size);
-	      line = invisible_line = xrealloc (invisible_line, line_size);
+	      visible_line = (char *)xrealloc (visible_line, line_size);
+	      line = invisible_line = (char *)xrealloc (invisible_line, line_size);
 	    }
 	  strncpy (line + out, local_prompt, local_len);
 	  out += local_len;
 	}
       line[out] = '\0';
-      wrap_offset = local_len - visible_length;
+      wrap_offset = local_len - prompt_visible_length;
     }
   else
     {
@@ -426,13 +473,13 @@
       if (temp >= line_size)
 	{
 	  line_size = (temp + 1024) - (temp % 1024);
-	  visible_line = xrealloc (visible_line, line_size);
-	  line = invisible_line = xrealloc (invisible_line, line_size);
+	  visible_line = (char *)xrealloc (visible_line, line_size);
+	  line = invisible_line = (char *)xrealloc (invisible_line, line_size);
 	}
       strncpy (line + out,  prompt_this_line, pmtlen);
       out += pmtlen;
       line[out] = '\0';
-      wrap_offset = 0;
+      wrap_offset = prompt_invis_chars_first_line = 0;
     }
 
 #define CHECK_INV_LBREAKS() \
@@ -443,11 +490,29 @@
 	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
 	  } \
       } while (0)
-	  
+
+#if defined (HANDLE_MULTIBYTE)	  
 #define CHECK_LPOS() \
       do { \
 	lpos++; \
-	if (lpos >= screenwidth) \
+	if (lpos >= _rl_screenwidth) \
+	  { \
+	    if (newlines >= (inv_lbsize - 2)) \
+	      { \
+		inv_lbsize *= 2; \
+		inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+		_rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
+	      } \
+	    inv_lbreaks[++newlines] = out; \
+	    _rl_wrapped_line[newlines] = _rl_wrapped_multicolumn; \
+	    lpos = 0; \
+	  } \
+      } while (0)
+#else
+#define CHECK_LPOS() \
+      do { \
+	lpos++; \
+	if (lpos >= _rl_screenwidth) \
 	  { \
 	    if (newlines >= (inv_lbsize - 2)) \
 	      { \
@@ -458,36 +523,93 @@
 	    lpos = 0; \
 	  } \
       } while (0)
+#endif
 
   /* inv_lbreaks[i] is where line i starts in the buffer. */
   inv_lbreaks[newlines = 0] = 0;
   lpos = out - wrap_offset;
+#if defined (HANDLE_MULTIBYTE)
+  memset (_rl_wrapped_line, 0, vis_lbsize);
+#endif
 
-  /* XXX - what if lpos is already >= screenwidth before we start drawing the
+  /* prompt_invis_chars_first_line is the number of invisible characters in
+     the first physical line of the prompt.
+     wrap_offset - prompt_invis_chars_first_line is the number of invis
+     chars on the second line. */
+
+  /* what if lpos is already >= _rl_screenwidth before we start drawing the
      contents of the command line? */
-  while (lpos >= screenwidth)
+  while (lpos >= _rl_screenwidth)
     {
-      /* XXX - possible fix from Darin Johnson <darin@acuson.com> for prompt
-	 string with invisible characters that is longer than the screen
-	 width.  XXX - this doesn't work right if invisible characters have
-	 to be put on the second screen line -- it adds too much (the number
-	 of invisible chars after the screenwidth). */
-      temp = ((newlines + 1) * screenwidth) + ((newlines == 0) ? wrap_offset : 0);
+      /* fix from Darin Johnson <darin@acuson.com> for prompt string with
+         invisible characters that is longer than the screen width.  The
+         prompt_invis_chars_first_line variable could be made into an array
+         saying how many invisible characters there are per line, but that's
+         probably too much work for the benefit gained.  How many people have
+         prompts that exceed two physical lines? */
+      temp = ((newlines + 1) * _rl_screenwidth) +
+#if 0
+             ((newlines == 0) ? prompt_invis_chars_first_line : 0) +
+#else
+             ((newlines == 0 && local_prompt_prefix == 0) ? prompt_invis_chars_first_line : 0) +
+#endif
+             ((newlines == 1) ? wrap_offset : 0);
 
       inv_lbreaks[++newlines] = temp;
-      lpos -= screenwidth;
+      lpos -= _rl_screenwidth;
     }
 
+  prompt_last_screen_line = newlines;
+
+  /* Draw the rest of the line (after the prompt) into invisible_line, keeping
+     track of where the cursor is (c_pos), the number of the line containing
+     the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin).
+     It maintains an array of line breaks for display (inv_lbreaks).
+     This handles expanding tabs for display and displaying meta characters. */
   lb_linenum = 0;
+#if defined (HANDLE_MULTIBYTE)
+  in = 0;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      memset (&ps, 0, sizeof (mbstate_t));
+      wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps);
+    }
+  else
+    wc_bytes = 1;
+  while (in < rl_end)
+#else
   for (in = 0; in < rl_end; in++)
+#endif
     {
       c = (unsigned char)rl_line_buffer[in];
 
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  if (wc_bytes == (size_t)-1 || wc_bytes == (size_t)-2)
+	    {
+	      /* Byte sequence is invalid or shortened.  Assume that the
+	         first byte represents a character. */
+	      wc_bytes = 1;
+	      /* Assume that a character occupies a single column. */
+	      wc_width = 1;
+	      memset (&ps, 0, sizeof (mbstate_t));
+	    }
+	  else if (wc_bytes == (size_t)0)
+	    break;			/* Found '\0' */
+	  else
+	    {
+	      temp = wcwidth (wc);
+	      wc_width = (temp < 0) ? 1 : temp;
+	    }
+	}
+#endif
+
       if (out + 8 >= line_size)		/* XXX - 8 for \t */
 	{
 	  line_size *= 2;
-	  visible_line = xrealloc (visible_line, line_size);
-	  invisible_line = xrealloc (invisible_line, line_size);
+	  visible_line = (char *)xrealloc (visible_line, line_size);
+	  invisible_line = (char *)xrealloc (invisible_line, line_size);
 	  line = invisible_line;
 	}
 
@@ -497,15 +619,19 @@
 	  lb_linenum = newlines;
 	}
 
+#if defined (HANDLE_MULTIBYTE)
+      if (META_CHAR (c) && _rl_output_meta_chars == 0)	/* XXX - clean up */
+#else
       if (META_CHAR (c))
+#endif
 	{
 	  if (_rl_output_meta_chars == 0)
 	    {
 	      sprintf (line + out, "\\%o", c);
 
-	      if (lpos + 4 >= screenwidth)
+	      if (lpos + 4 >= _rl_screenwidth)
 		{
-		  temp = screenwidth - lpos;
+		  temp = _rl_screenwidth - lpos;
 		  CHECK_INV_LBREAKS ();
 		  inv_lbreaks[++newlines] = out + temp;
 		  lpos = 4 - temp;
@@ -524,7 +650,7 @@
 #if defined (DISPLAY_TABS)
       else if (c == '\t')
 	{
-	  register int temp, newout;
+	  register int newout;
 
 #if 0
 	  newout = (out | (int)7) + 1;
@@ -532,10 +658,10 @@
 	  newout = out + 8 - lpos % 8;
 #endif
 	  temp = newout - out;
-	  if (lpos + temp >= screenwidth)
+	  if (lpos + temp >= _rl_screenwidth)
 	    {
 	      register int temp2;
-	      temp2 = screenwidth - lpos;
+	      temp2 = _rl_screenwidth - lpos;
 	      CHECK_INV_LBREAKS ();
 	      inv_lbreaks[++newlines] = out + temp2;
 	      lpos = temp - temp2;
@@ -550,7 +676,7 @@
 	    }
 	}
 #endif
-      else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up)
+      else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
 	{
 	  line[out++] = '\0';	/* XXX - sentinel */
 	  CHECK_INV_LBREAKS ();
@@ -566,9 +692,52 @@
 	}
       else
 	{
+#if defined (HANDLE_MULTIBYTE)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    {
+	      register int i;
+
+	      _rl_wrapped_multicolumn = 0;
+
+	      if (_rl_screenwidth < lpos + wc_width)
+		for (i = lpos; i < _rl_screenwidth; i++)
+		  {
+		    /* The space will be removed in update_line() */
+		    line[out++] = ' ';
+		    _rl_wrapped_multicolumn++;
+		    CHECK_LPOS();
+		  }
+	      if (in == rl_point)
+		{
+		  c_pos = out;
+		  lb_linenum = newlines;
+		}
+	      for (i = in; i < in+wc_bytes; i++)
+		line[out++] = rl_line_buffer[i];
+	      for (i = 0; i < wc_width; i++)
+		CHECK_LPOS();
+	    }
+	  else
+	    {
+	      line[out++] = c;
+	      CHECK_LPOS();
+	    }
+#else
 	  line[out++] = c;
 	  CHECK_LPOS();
+#endif
 	}
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  in += wc_bytes;
+	  wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps);
+	}
+      else
+        in++;
+#endif
+
     }
   line[out] = '\0';
   if (c_pos < 0)
@@ -582,7 +751,8 @@
   inv_lbreaks[newlines+1] = out;
   cursor_linenum = lb_linenum;
 
-  /* C_POS == position in buffer where cursor should be placed. */
+  /* C_POS == position in buffer where cursor should be placed.
+     CURSOR_LINENUM == line number where the cursor should be placed. */
 
   /* PWP: now is when things get a bit hairy.  The visible and invisible
      line buffers are really multiple lines, which would wrap every
@@ -593,7 +763,7 @@
      otherwise, let long lines display in a single terminal line, and
      horizontally scroll it. */
 
-  if (_rl_horizontal_scroll_mode == 0 && term_up && *term_up)
+  if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
     {
       int nleft, pos, changed_screen_line;
 
@@ -604,8 +774,13 @@
 	  /* If we have more than a screenful of material to display, then
 	     only display a screenful.  We should display the last screen,
 	     not the first.  */
-	  if (out >= screenchars)
-	    out = screenchars - 1;
+	  if (out >= _rl_screenchars)
+	    {
+	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+		out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY);
+	      else
+		out = _rl_screenchars - 1;
+	    }
 
 	  /* The first line is at character position 0 in the buffer.  The
 	     second and subsequent lines start at inv_lbreaks[N], offset by
@@ -635,7 +810,7 @@
 		  (wrap_offset > visible_wrap_offset) &&
 		  (_rl_last_c_pos < visible_first_line_len))
 		{
-		  nleft = screenwidth + wrap_offset - _rl_last_c_pos;
+		  nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
 		  if (nleft)
 		    _rl_clear_to_eol (nleft);
 		}
@@ -656,7 +831,7 @@
 		  _rl_move_vert (linenum);
 		  _rl_move_cursor_relative (0, tt);
 		  _rl_clear_to_eol
-		    ((linenum == _rl_vis_botlin) ? strlen (tt) : screenwidth);
+		    ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
 		}
 	    }
 	  _rl_vis_botlin = inv_botlin;
@@ -667,7 +842,7 @@
 	  if (changed_screen_line)
 	    {
 	      _rl_move_vert (cursor_linenum);
-	      /* If we moved up to the line with the prompt using term_up,
+	      /* If we moved up to the line with the prompt using _rl_term_up,
 		 the physical cursor position on the screen stays the same,
 		 but the buffer position needs to be adjusted to account
 		 for invisible characters. */
@@ -680,18 +855,21 @@
 	     the characters from the current cursor position.  But we
 	     only need to reprint it if the cursor is before the last
 	     invisible character in the prompt string. */
-	  nleft = visible_length + wrap_offset;
+	  nleft = prompt_visible_length + wrap_offset;
 	  if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
-	      _rl_last_c_pos <= last_invisible && local_prompt)
+	      _rl_last_c_pos <= prompt_last_invisible && local_prompt)
 	    {
 #if defined (__MSDOS__)
 	      putc ('\r', rl_outstream);
 #else
-	      if (term_cr)
-		tputs (term_cr, 1, _rl_output_character_function);
+	      if (_rl_term_cr)
+		tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif
 	      _rl_output_some_chars (local_prompt, nleft);
-	      _rl_last_c_pos = nleft;
+	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+		_rl_last_c_pos = _rl_col_width(local_prompt, 0, nleft);
+	      else
+		_rl_last_c_pos = nleft;
 	    }
 
 	  /* Where on that line?  And where does that line start
@@ -707,10 +885,15 @@
 	  if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
 	    {
 	      _rl_backspace (_rl_last_c_pos - nleft);
-	      _rl_last_c_pos = nleft;
+	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+		_rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
+	      else
+		_rl_last_c_pos = nleft;
 	    }
 
-	  if (nleft != _rl_last_c_pos)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+	  else if (nleft != _rl_last_c_pos)
 	    _rl_move_cursor_relative (nleft, &invisible_line[pos]);
 	}
     }
@@ -727,11 +910,11 @@
 
       /* The number of characters that will be displayed before the cursor. */
       ndisp = c_pos - wrap_offset;
-      nleft  = visible_length + wrap_offset;
+      nleft  = prompt_visible_length + wrap_offset;
       /* Where the new cursor position will be on the screen.  This can be
 	 longer than SCREENWIDTH; if it is, lmargin will be adjusted. */
       phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset);
-      t = screenwidth / 3;
+      t = _rl_screenwidth / 3;
 
       /* If the number of characters had already exceeded the screenwidth,
 	 last_lmargin will be > 0. */
@@ -739,7 +922,7 @@
       /* If the number of characters to be displayed is more than the screen
 	 width, compute the starting offset so that the cursor is about
 	 two-thirds of the way across the screen. */
-      if (phys_c_pos > screenwidth - 2)
+      if (phys_c_pos > _rl_screenwidth - 2)
 	{
 	  lmargin = c_pos - (2 * t);
 	  if (lmargin < 0)
@@ -749,7 +932,7 @@
 	  if (wrap_offset && lmargin > 0 && lmargin < nleft)
 	    lmargin = nleft;
 	}
-      else if (ndisp < screenwidth - 2)		/* XXX - was -1 */
+      else if (ndisp < _rl_screenwidth - 2)		/* XXX - was -1 */
 	lmargin = 0;
       else if (phys_c_pos < 1)
 	{
@@ -771,7 +954,7 @@
 	 the whole line, indicate that with a special character at the
 	 right edge of the screen.  If LMARGIN is 0, we need to take the
 	 wrap offset into account. */
-      t = lmargin + M_OFFSET (lmargin, wrap_offset) + screenwidth;
+      t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth;
       if (t < out)
 	line[t - 1] = '>';
 
@@ -781,8 +964,8 @@
 	  update_line (&visible_line[last_lmargin],
 		       &invisible_line[lmargin],
 		       0,
-		       screenwidth + visible_wrap_offset,
-		       screenwidth + (lmargin ? 0 : wrap_offset),
+		       _rl_screenwidth + visible_wrap_offset,
+		       _rl_screenwidth + (lmargin ? 0 : wrap_offset),
 		       0);
 
 	  /* If the visible new line is shorter than the old, but the number
@@ -793,12 +976,12 @@
 	      (_rl_last_c_pos == out) &&
 	      t < visible_first_line_len)
 	    {
-	      nleft = screenwidth - t;
+	      nleft = _rl_screenwidth - t;
 	      _rl_clear_to_eol (nleft);
 	    }
 	  visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset);
-	  if (visible_first_line_len > screenwidth)
-	    visible_first_line_len = screenwidth;
+	  if (visible_first_line_len > _rl_screenwidth)
+	    visible_first_line_len = _rl_screenwidth;
 
 	  _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
 	  last_lmargin = lmargin;
@@ -808,11 +991,11 @@
 
   /* Swap visible and non-visible lines. */
   {
-    char *temp = visible_line;
+    char *vtemp = visible_line;
     int *itemp = vis_lbreaks, ntemp = vis_lbsize;
 
     visible_line = invisible_line;
-    invisible_line = temp;
+    invisible_line = vtemp;
 
     vis_lbreaks = inv_lbreaks;
     inv_lbreaks = itemp;
@@ -855,6 +1038,11 @@
   register char *ofd, *ols, *oe, *nfd, *nls, *ne;
   int temp, lendiff, wsatend, od, nd;
   int current_invis_chars;
+  int col_lendiff, col_temp;
+#if defined (HANDLE_MULTIBYTE)
+  mbstate_t ps_new, ps_old;
+  int new_offset, old_offset, tmp;
+#endif
 
   /* If we're at the right edge of a terminal that supports xn, we're
      ready to wrap around, so do so.  This fixes problems with knowing
@@ -862,20 +1050,98 @@
      emulators.  In this calculation, TEMP is the physical screen
      position of the cursor. */
   temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
-  if (temp == screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
-      && _rl_last_v_pos == current_line - 1)
+  if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
+	&& _rl_last_v_pos == current_line - 1)
     {
-      if (new[0])
-	putc (new[0], rl_outstream);
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  wchar_t wc;
+	  mbstate_t ps;
+	  int tempwidth, bytes;
+	  size_t ret;
+
+	  /* This fixes only double-column characters, but if the wrapped
+	     character comsumes more than three columns, spaces will be
+	     inserted in the string buffer. */
+	  if (_rl_wrapped_line[current_line] > 0)
+	    _rl_clear_to_eol (_rl_wrapped_line[current_line]);
+
+	  memset (&ps, 0, sizeof (mbstate_t));
+	  ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps);
+	  if (ret == (size_t)-1 || ret == (size_t)-2)
+	    {
+	      tempwidth = 1;
+	      ret = 1;
+	    }
+	  else if (ret == 0)
+	    tempwidth = 0;
+	  else
+	    tempwidth = wcwidth (wc);
+
+	  if (tempwidth > 0)
+	    {
+	      int count;
+	      bytes = ret;
+	      for (count = 0; count < bytes; count++)
+		putc (new[count], rl_outstream);
+	      _rl_last_c_pos = tempwidth;
+	      _rl_last_v_pos++;
+	      memset (&ps, 0, sizeof (mbstate_t));
+	      ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps);
+	      if (ret != 0 && bytes != 0)
+		{
+		  if (ret == (size_t)-1 || ret == (size_t)-2)
+		    memmove (old+bytes, old+1, strlen (old+1));
+		  else
+		    memmove (old+bytes, old+ret, strlen (old+ret));
+		  memcpy (old, new, bytes);
+		}
+	    }
+	  else
+	    {
+	      putc (' ', rl_outstream);
+	      _rl_last_c_pos = 1;
+	      _rl_last_v_pos++;
+	      if (old[0] && new[0])
+		old[0] = new[0];
+	    }
+	}
       else
-	putc (' ', rl_outstream);
-      _rl_last_c_pos = 1;		/* XXX */
-      _rl_last_v_pos++;
-      if (old[0] && new[0])
-	old[0] = new[0];
+#endif
+	{
+	  if (new[0])
+	    putc (new[0], rl_outstream);
+	  else
+	    putc (' ', rl_outstream);
+	  _rl_last_c_pos = 1;		/* XXX */
+	  _rl_last_v_pos++;
+	  if (old[0] && new[0])
+	    old[0] = new[0];
+	}
     }
+
       
   /* Find first difference. */
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      memset (&ps_new, 0, sizeof(mbstate_t));
+      memset (&ps_old, 0, sizeof(mbstate_t));
+
+      new_offset = old_offset = 0;
+      for (ofd = old, nfd = new;
+	   (ofd - old < omax) && *ofd &&
+	     _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); )
+	{
+	  old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY);
+	  new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY);
+	  ofd = old + old_offset;
+	  nfd = new + new_offset;
+	}
+    }
+  else
+#endif
   for (ofd = old, nfd = new;
        (ofd - old < omax) && *ofd && (*ofd == *nfd);
        ofd++, nfd++)
@@ -892,6 +1158,33 @@
     return;
 
   wsatend = 1;			/* flag for trailing whitespace */
+
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY);
+      nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY);
+      while ((ols > ofd) && (nls > nfd))
+	{
+	  memset (&ps_old, 0, sizeof (mbstate_t));
+	  memset (&ps_new, 0, sizeof (mbstate_t));
+
+	  _rl_adjust_point (old, ols - old, &ps_old);
+	  _rl_adjust_point (new, nls - new, &ps_new);
+
+	  if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0)
+	    break;
+
+	  if (*ols == ' ')
+	    wsatend = 0;
+
+	  ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY);
+	  nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY);
+	}
+    }
+  else
+    {
+#endif /* HANDLE_MULTIBYTE */
   ols = oe - 1;			/* find last same */
   nls = ne - 1;
   while ((ols > ofd) && (nls > nfd) && (*ols == *nls))
@@ -901,18 +1194,38 @@
       ols--;
       nls--;
     }
+#if defined (HANDLE_MULTIBYTE)
+    }
+#endif
 
   if (wsatend)
     {
       ols = oe;
       nls = ne;
     }
+#if defined (HANDLE_MULTIBYTE)
+  /* This may not work for stateful encoding, but who cares?  To handle
+     stateful encoding properly, we have to scan each string from the
+     beginning and compare. */
+  else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0)
+#else
   else if (*ols != *nls)
+#endif
     {
       if (*ols)			/* don't step past the NUL */
-	ols++;
+	{
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY);
+	  else
+	    ols++;
+	}
       if (*nls)
-	nls++;
+	{
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY);
+	  else
+	    nls++;
+	}
     }
 
   /* count of invisible characters in the current invisible line. */
@@ -939,33 +1252,59 @@
   lendiff = local_prompt ? strlen (local_prompt) : 0;
   od = ofd - old;	/* index of first difference in visible line */
   if (current_line == 0 && !_rl_horizontal_scroll_mode &&
-      term_cr && lendiff > visible_length && _rl_last_c_pos > 0 &&
-      od > lendiff && _rl_last_c_pos < last_invisible)
+      _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 &&
+      od >= lendiff && _rl_last_c_pos <= prompt_last_invisible)
     {
 #if defined (__MSDOS__)
       putc ('\r', rl_outstream);
 #else
-      tputs (term_cr, 1, _rl_output_character_function);
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif
       _rl_output_some_chars (local_prompt, lendiff);
-      _rl_last_c_pos = lendiff;
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	_rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+      else
+	_rl_last_c_pos = lendiff;
     }
 
   _rl_move_cursor_relative (od, old);
 
-  /* if (len (new) > len (old)) */
+  /* if (len (new) > len (old))
+     lendiff == difference in buffer
+     col_lendiff == difference on screen
+     When not using multibyte characters, these are equal */
   lendiff = (nls - nfd) - (ols - ofd);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    col_lendiff = _rl_col_width (new, nfd - new, nls - new) - _rl_col_width (old, ofd - old, ols - old);
+  else
+    col_lendiff = lendiff;
 
   /* If we are changing the number of invisible characters in a line, and
      the spot of first difference is before the end of the invisible chars,
      lendiff needs to be adjusted. */
   if (current_line == 0 && !_rl_horizontal_scroll_mode &&
       current_invis_chars != visible_wrap_offset)
-    lendiff += visible_wrap_offset - current_invis_chars;
+    {
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  lendiff += visible_wrap_offset - current_invis_chars;
+	  col_lendiff += visible_wrap_offset - current_invis_chars;
+	}
+      else
+	{
+	  lendiff += visible_wrap_offset - current_invis_chars;
+	  col_lendiff = lendiff;
+	}
+    }
 
   /* Insert (diff (len (old), len (new)) ch. */
   temp = ne - nfd;
-  if (lendiff > 0)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    col_temp = _rl_col_width (new, nfd - new, ne - new);
+  else
+    col_temp = temp;
+
+  if (col_lendiff > 0)	/* XXX - was lendiff */
     {
       /* Non-zero if we're increasing the number of lines. */
       int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
@@ -973,17 +1312,17 @@
 	 use the terminal's capabilities.  If we're growing the number
 	 of lines, make sure we actually cause the new line to wrap
 	 around on auto-wrapping terminals. */
-      if (terminal_can_insert && ((2 * temp) >= lendiff || term_IC) && (!_rl_term_autowrap || !gl))
+      if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
 	{
-	  /* If lendiff > visible_length and _rl_last_c_pos == 0 and
+	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
 	     _rl_horizontal_scroll_mode == 1, inserting the characters with
-	     term_IC or term_ic will screw up the screen because of the
+	     _rl_term_IC or _rl_term_ic will screw up the screen because of the
 	     invisible characters.  We need to just draw them. */
 	  if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 ||
-			lendiff <= visible_length || !current_invis_chars))
+			lendiff <= prompt_visible_length || !current_invis_chars))
 	    {
-	      insert_some_chars (nfd, lendiff);
-	      _rl_last_c_pos += lendiff;
+	      insert_some_chars (nfd, lendiff, col_lendiff);
+	      _rl_last_c_pos += col_lendiff;
 	    }
 	  else if (*ols == 0)
 	    {
@@ -992,7 +1331,7 @@
 	      /* However, this screws up the rest of this block, which
 		 assumes you've done the insert because you can. */
 	      _rl_output_some_chars (nfd, lendiff);
-	      _rl_last_c_pos += lendiff;
+	      _rl_last_c_pos += col_lendiff;
 	    }
 	  else
 	    {
@@ -1000,7 +1339,7 @@
 		 the end.  We have invisible characters in this line.  This
 		 is a dumb update. */
 	      _rl_output_some_chars (nfd, temp);
-	      _rl_last_c_pos += temp;
+	      _rl_last_c_pos += col_temp;
 	      return;
 	    }
 	  /* Copy (new) chars to screen from first diff to last match. */
@@ -1008,37 +1347,41 @@
 	  if ((temp - lendiff) > 0)
 	    {
 	      _rl_output_some_chars (nfd + lendiff, temp - lendiff);
-	      _rl_last_c_pos += temp - lendiff;
+#if 0
+	      _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff) - col_lendiff;
+#else
+	      _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
+#endif
 	    }
 	}
       else
 	{
 	  /* cannot insert chars, write to EOL */
 	  _rl_output_some_chars (nfd, temp);
-	  _rl_last_c_pos += temp;
+	  _rl_last_c_pos += col_temp;
 	}
     }
   else				/* Delete characters from line. */
     {
       /* If possible and inexpensive to use terminal deletion, then do so. */
-      if (term_dc && (2 * temp) >= -lendiff)
+      if (_rl_term_dc && (2 * col_temp) >= -col_lendiff)
 	{
 	  /* If all we're doing is erasing the invisible characters in the
 	     prompt string, don't bother.  It screws up the assumptions
 	     about what's on the screen. */
 	  if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 &&
 	      -lendiff == visible_wrap_offset)
-	    lendiff = 0;
+	    col_lendiff = 0;
 
-	  if (lendiff)
-	    delete_chars (-lendiff); /* delete (diff) characters */
+	  if (col_lendiff)
+	    delete_chars (-col_lendiff); /* delete (diff) characters */
 
 	  /* Copy (new) chars to screen from first diff to last match */
 	  temp = nls - nfd;
 	  if (temp > 0)
 	    {
 	      _rl_output_some_chars (nfd, temp);
-	      _rl_last_c_pos += temp;
+	      _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
 	    }
 	}
       /* Otherwise, print over the existing material. */
@@ -1047,15 +1390,20 @@
 	  if (temp > 0)
 	    {
 	      _rl_output_some_chars (nfd, temp);
-	      _rl_last_c_pos += temp;
+	      _rl_last_c_pos += col_temp;
 	    }
 	  lendiff = (oe - old) - (ne - new);
-	  if (lendiff)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    col_lendiff = _rl_col_width (old, 0, oe - old) - _rl_col_width (new, 0, ne - new);
+	  else
+	    col_lendiff = lendiff;
+
+	  if (col_lendiff)
 	    {	  
 	      if (_rl_term_autowrap && current_line < inv_botlin)
-		space_to_eol (lendiff);
+		space_to_eol (col_lendiff);
 	      else
-		_rl_clear_to_eol (lendiff);
+		_rl_clear_to_eol (col_lendiff);
 	    }
 	}
     }
@@ -1101,12 +1449,15 @@
     prompt_last_line = rl_prompt;
 
   l = strlen (prompt_last_line);
-  _rl_last_c_pos = l;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+  else
+    _rl_last_c_pos = l;
 
   /* Dissect prompt_last_line into screen lines. Note that here we have
      to use the real screenwidth. Readline's notion of screenwidth might be
      one less, see terminal.c. */
-  real_screenwidth = screenwidth + (_rl_term_autowrap ? 0 : 1);
+  real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1);
   _rl_last_v_pos = l / real_screenwidth;
   /* If the prompt length is a multiple of real_screenwidth, we don't know
      whether the cursor is at the end of the last line, or already at the
@@ -1151,24 +1502,31 @@
 void
 _rl_move_cursor_relative (new, data)
      int new;
-     char *data;
+     const char *data;
 {
   register int i;
 
   /* If we don't have to do anything, then return. */
+#if defined (HANDLE_MULTIBYTE)
+  /* If we have multibyte characters, NEW is indexed by the buffer point in
+     a multibyte string, but _rl_last_c_pos is the display position.  In
+     this case, NEW's display position is not obvious. */
+  if ((MB_CUR_MAX == 1 || rl_byte_oriented ) && _rl_last_c_pos == new) return;
+#else
   if (_rl_last_c_pos == new) return;
+#endif
 
   /* It may be faster to output a CR, and then move forwards instead
      of moving backwards. */
   /* i == current physical cursor position. */
   i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
   if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
-      (_rl_term_autowrap && i == screenwidth))
+      (_rl_term_autowrap && i == _rl_screenwidth))
     {
 #if defined (__MSDOS__)
       putc ('\r', rl_outstream);
 #else
-      tputs (term_cr, 1, _rl_output_character_function);
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif /* !__MSDOS__ */
       _rl_last_c_pos = 0;
     }
@@ -1185,20 +1543,70 @@
 	 That kind of control is for people who don't know what the
 	 data is underneath the cursor. */
 #if defined (HACK_TERMCAP_MOTION)
-      if (term_forward_char)
-	for (i = _rl_last_c_pos; i < new; i++)
-	  tputs (term_forward_char, 1, _rl_output_character_function);
+      if (_rl_term_forward_char)
+	{
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    {
+	      int width;
+	      width = _rl_col_width (data, _rl_last_c_pos, new);
+	      for (i = 0; i < width; i++)
+		tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+	    }
+	  else
+	    {
+	      for (i = _rl_last_c_pos; i < new; i++)
+		tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+	    }
+	}
+      else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  tputs (_rl_term_cr, 1, _rl_output_character_function);
+	  for (i = 0; i < new; i++)
+	    putc (data[i], rl_outstream);
+	}
       else
 	for (i = _rl_last_c_pos; i < new; i++)
 	  putc (data[i], rl_outstream);
-#else
-      for (i = _rl_last_c_pos; i < new; i++)
-	putc (data[i], rl_outstream);
-#endif /* HACK_TERMCAP_MOTION */
+
+#else /* !HACK_TERMCAP_MOTION */
+
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  tputs (_rl_term_cr, 1, _rl_output_character_function);
+	  for (i = 0; i < new; i++)
+	    putc (data[i], rl_outstream);
+	}
+      else
+	for (i = _rl_last_c_pos; i < new; i++)
+	  putc (data[i], rl_outstream);
+
+#endif /* !HACK_TERMCAP_MOTION */
+
     }
+#if defined (HANDLE_MULTIBYTE)
+  /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
+     The byte length of the string is probably bigger than the column width
+     of the string, which means that if NEW == _rl_last_c_pos, then NEW's
+     display point is less than _rl_last_c_pos. */
+  else if (_rl_last_c_pos >= new)
+#else
   else if (_rl_last_c_pos > new)
-    _rl_backspace (_rl_last_c_pos - new);
-  _rl_last_c_pos = new;
+#endif
+    {
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  tputs (_rl_term_cr, 1, _rl_output_character_function);
+	  for (i = 0; i < new; i++)
+	    putc (data[i], rl_outstream);
+	}
+      else
+	_rl_backspace (_rl_last_c_pos - new);
+    }
+
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    _rl_last_c_pos =  _rl_col_width (data, 0, new);
+  else
+    _rl_last_c_pos = new;
 }
 
 /* PWP: move the cursor up or down. */
@@ -1208,7 +1616,7 @@
 {
   register int delta, i;
 
-  if (_rl_last_v_pos == to || to > screenheight)
+  if (_rl_last_v_pos == to || to > _rl_screenheight)
     return;
 
   if ((delta = to - _rl_last_v_pos) > 0)
@@ -1218,15 +1626,15 @@
 #if defined (__MSDOS__)
       putc ('\r', rl_outstream);
 #else
-      tputs (term_cr, 1, _rl_output_character_function);
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif
       _rl_last_c_pos = 0;
     }
   else
     {			/* delta < 0 */
-      if (term_up && *term_up)
+      if (_rl_term_up && *_rl_term_up)
 	for (i = 0; i < -delta; i++)
-	  tputs (term_up, 1, _rl_output_character_function);
+	  tputs (_rl_term_up, 1, _rl_output_character_function);
     }
 
   _rl_last_v_pos = to;		/* Now TO is here */
@@ -1285,7 +1693,7 @@
   if (CTRL_CHAR (c) || c == RUBOUT)
     return (2);
 
-  return ((isprint (uc)) ? 1 : 2);
+  return ((ISPRINT (uc)) ? 1 : 2);
 }
 
 /* How to print things in the "echo-area".  The prompt is treated as a
@@ -1312,7 +1720,12 @@
   format = va_arg (args, char *);
 #endif
 
+#if defined (HAVE_VSNPRINTF)
+  vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args);
+#else
   vsprintf (msg_buf, format, args);
+  msg_buf[sizeof(msg_buf) - 1] = '\0';	/* overflow? */
+#endif
   va_end (args);
 
   rl_display_prompt = msg_buf;
@@ -1325,6 +1738,7 @@
      char *format;
 {
   sprintf (msg_buf, format, arg1, arg2);
+  msg_buf[sizeof(msg_buf) - 1] = '\0';	/* overflow? */
   rl_display_prompt = msg_buf;
   (*rl_redisplay_function) ();
   return 0;
@@ -1360,25 +1774,23 @@
 {
   saved_local_prompt = local_prompt;
   saved_local_prefix = local_prompt_prefix;
-  saved_last_invisible = last_invisible;
-  saved_visible_length = visible_length;
+  saved_last_invisible = prompt_last_invisible;
+  saved_visible_length = prompt_visible_length;
 
   local_prompt = local_prompt_prefix = (char *)0;
-  last_invisible = visible_length = 0;
+  prompt_last_invisible = prompt_visible_length = 0;
 }
 
 void
 rl_restore_prompt ()
 {
-  if (local_prompt)
-    free (local_prompt);
-  if (local_prompt_prefix)
-    free (local_prompt_prefix);
+  FREE (local_prompt);
+  FREE (local_prompt_prefix);
 
   local_prompt = saved_local_prompt;
   local_prompt_prefix = saved_local_prefix;
-  last_invisible = saved_last_invisible;
-  visible_length = saved_visible_length;
+  prompt_last_invisible = saved_last_invisible;
+  prompt_visible_length = saved_visible_length;
 }
 
 char *
@@ -1393,7 +1805,7 @@
   if (saved_local_prompt == 0)
     {
       len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
-      pmt = xmalloc (len + 2);
+      pmt = (char *)xmalloc (len + 2);
       if (len)
 	strcpy (pmt, rl_prompt);
       pmt[len] = pchar;
@@ -1402,14 +1814,14 @@
   else
     {
       len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
-      pmt = xmalloc (len + 2);
+      pmt = (char *)xmalloc (len + 2);
       if (len)
 	strcpy (pmt, saved_local_prompt);
       pmt[len] = pchar;
       pmt[len+1] = '\0';
       local_prompt = savestring (pmt);
-      last_invisible = saved_last_invisible;
-      visible_length = saved_visible_length + 1;
+      prompt_last_invisible = saved_last_invisible;
+      prompt_visible_length = saved_visible_length + 1;
     }
   return pmt;
 }
@@ -1436,8 +1848,8 @@
 _rl_clear_to_eol (count)
      int count;
 {
-  if (term_clreol)
-    tputs (term_clreol, 1, _rl_output_character_function);
+  if (_rl_term_clreol)
+    tputs (_rl_term_clreol, 1, _rl_output_character_function);
   else if (count)
     space_to_eol (count);
 }
@@ -1459,23 +1871,29 @@
 void
 _rl_clear_screen ()
 {
-  if (term_clrpag)
-    tputs (term_clrpag, 1, _rl_output_character_function);
+  if (_rl_term_clrpag)
+    tputs (_rl_term_clrpag, 1, _rl_output_character_function);
   else
-    crlf ();
+    rl_crlf ();
 }
 
-/* Insert COUNT characters from STRING to the output stream. */
+/* Insert COUNT characters from STRING to the output stream at column COL. */
 static void
-insert_some_chars (string, count)
+insert_some_chars (string, count, col)
      char *string;
-     int count;
+     int count, col;
 {
+  /* DEBUGGING */
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    if (count != col)
+      fprintf(stderr, "readline: debug: insert_some_chars: count (%d) != col (%d)\n", count, col);
+
   /* If IC is defined, then we do not have to "enter" insert mode. */
-  if (term_IC)
+  if (_rl_term_IC)
     {
       char *buffer;
-      buffer = tgoto (term_IC, 0, count);
+
+      buffer = tgoto (_rl_term_IC, 0, col);
       tputs (buffer, 1, _rl_output_character_function);
       _rl_output_some_chars (string, count);
     }
@@ -1484,15 +1902,15 @@
       register int i;
 
       /* If we have to turn on insert-mode, then do so. */
-      if (term_im && *term_im)
-	tputs (term_im, 1, _rl_output_character_function);
+      if (_rl_term_im && *_rl_term_im)
+	tputs (_rl_term_im, 1, _rl_output_character_function);
 
       /* If there is a special command for inserting characters, then
 	 use that first to open up the space. */
-      if (term_ic && *term_ic)
+      if (_rl_term_ic && *_rl_term_ic)
 	{
-	  for (i = count; i--; )
-	    tputs (term_ic, 1, _rl_output_character_function);
+	  for (i = col; i--; )
+	    tputs (_rl_term_ic, 1, _rl_output_character_function);
 	}
 
       /* Print the text. */
@@ -1500,8 +1918,8 @@
 
       /* If there is a string to turn off insert mode, we had best use
 	 it now. */
-      if (term_ei && *term_ei)
-	tputs (term_ei, 1, _rl_output_character_function);
+      if (_rl_term_ei && *_rl_term_ei)
+	tputs (_rl_term_ei, 1, _rl_output_character_function);
     }
 }
 
@@ -1510,20 +1928,20 @@
 delete_chars (count)
      int count;
 {
-  if (count > screenwidth)	/* XXX */
+  if (count > _rl_screenwidth)	/* XXX */
     return;
 
-  if (term_DC && *term_DC)
+  if (_rl_term_DC && *_rl_term_DC)
     {
       char *buffer;
-      buffer = tgoto (term_DC, count, count);
+      buffer = tgoto (_rl_term_DC, count, count);
       tputs (buffer, count, _rl_output_character_function);
     }
   else
     {
-      if (term_dc && *term_dc)
+      if (_rl_term_dc && *_rl_term_dc)
 	while (count--)
-	  tputs (term_dc, 1, _rl_output_character_function);
+	  tputs (_rl_term_dc, 1, _rl_output_character_function);
     }
 }
 
@@ -1543,20 +1961,17 @@
     }
   _rl_move_vert (_rl_vis_botlin);
   /* If we've wrapped lines, remove the final xterm line-wrap flag. */
-  if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == screenwidth))
+  if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth))
     {
       char *last_line;
-#if 0
-      last_line = &visible_line[inv_lbreaks[_rl_vis_botlin]];
-#else
+
       last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]];
-#endif
-      _rl_move_cursor_relative (screenwidth - 1, last_line);
+      _rl_move_cursor_relative (_rl_screenwidth - 1, last_line);
       _rl_clear_to_eol (0);
-      putc (last_line[screenwidth - 1], rl_outstream);
+      putc (last_line[_rl_screenwidth - 1], rl_outstream);
     }
   _rl_vis_botlin = 0;
-  crlf ();
+  rl_crlf ();
   fflush (rl_outstream);
   rl_display_fixed++;
 }
@@ -1565,12 +1980,12 @@
 static void
 cr ()
 {
-  if (term_cr)
+  if (_rl_term_cr)
     {
 #if defined (__MSDOS__)
       putc ('\r', rl_outstream);
 #else
-      tputs (term_cr, 1, _rl_output_character_function);
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif
       _rl_last_c_pos = 0;
     }
@@ -1584,27 +1999,31 @@
      char *t;
 {
   char *oldp, *oldl, *oldlprefix;
-  int oldlen, oldlast, oldplen;
+  int oldlen, oldlast, oldplen, oldninvis;
 
   /* Geez, I should make this a struct. */
   oldp = rl_display_prompt;
   oldl = local_prompt;
   oldlprefix = local_prompt_prefix;
-  oldlen = visible_length;
-  oldplen = prefix_length;
-  oldlast = last_invisible;
+  oldlen = prompt_visible_length;
+  oldplen = prompt_prefix_length;
+  oldlast = prompt_last_invisible;
+  oldninvis = prompt_invis_chars_first_line;
 
   rl_display_prompt = t;
-  local_prompt = expand_prompt (t, &visible_length, &last_invisible);
+  local_prompt = expand_prompt (t, &prompt_visible_length,
+				   &prompt_last_invisible,
+				   &prompt_invis_chars_first_line);
   local_prompt_prefix = (char *)NULL;
   rl_forced_update_display ();
 
   rl_display_prompt = oldp;
   local_prompt = oldl;
   local_prompt_prefix = oldlprefix;
-  visible_length = oldlen;
-  prefix_length = oldplen;
-  last_invisible = oldlast;
+  prompt_visible_length = oldlen;
+  prompt_prefix_length = oldplen;
+  prompt_last_invisible = oldlast;
+  prompt_invis_chars_first_line = oldninvis;
 }
       
 /* Redisplay the current line after a SIGWINCH is received. */
@@ -1615,31 +2034,31 @@
 
   /* Clear the current line and put the cursor at column 0.  Make sure
      the right thing happens if we have wrapped to a new screen line. */
-  if (term_cr)
+  if (_rl_term_cr)
     {
 #if defined (__MSDOS__)
       putc ('\r', rl_outstream);
 #else
-      tputs (term_cr, 1, _rl_output_character_function);
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif
       _rl_last_c_pos = 0;
 #if defined (__MSDOS__)
-      space_to_eol (screenwidth);
+      space_to_eol (_rl_screenwidth);
       putc ('\r', rl_outstream);
 #else
-      if (term_clreol)
-	tputs (term_clreol, 1, _rl_output_character_function);
+      if (_rl_term_clreol)
+	tputs (_rl_term_clreol, 1, _rl_output_character_function);
       else
 	{
-	  space_to_eol (screenwidth);
-	  tputs (term_cr, 1, _rl_output_character_function);
+	  space_to_eol (_rl_screenwidth);
+	  tputs (_rl_term_cr, 1, _rl_output_character_function);
 	}
 #endif
       if (_rl_last_v_pos > 0)
 	_rl_move_vert (0);
     }
   else
-    crlf ();
+    rl_crlf ();
 
   /* Redraw only the last line of a multi-line prompt. */
   t = strrchr (rl_display_prompt, '\n');
@@ -1680,14 +2099,98 @@
   /* Find out whether or not there might be invisible characters in the
      editing buffer. */
   if (rl_display_prompt == rl_prompt)
-    nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length;
+    nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length;
   else
-    nleft = _rl_last_c_pos - screenwidth;
+    nleft = _rl_last_c_pos - _rl_screenwidth;
 
   if (nleft > 0)
-    ret = 1 + nleft / screenwidth;
+    ret = 1 + nleft / _rl_screenwidth;
   else
     ret = 0;
 
   return ret;
 }
+
+#if defined (HANDLE_MULTIBYTE)
+/* Calculate the number of screen columns occupied by STR from START to END.
+   In the case of multibyte characters with stateful encoding, we have to
+   scan from the beginning of the string to take the state into account. */
+static int
+_rl_col_width (str, start, end)
+     char *str;
+     int start, end;
+{
+  wchar_t wc;
+  mbstate_t ps = {0};
+  int tmp, point, width, max;
+
+  if (end <= start)
+    return 0;
+
+  point = 0;
+  max = end;
+
+  while (point < start)
+    {
+      tmp = mbrlen (str + point, max, &ps);
+      if ((size_t)tmp == (size_t)-1 || (size_t)tmp == (size_t)-2)
+	{
+	  /* In this case, the bytes are invalid or too short to compose a
+	     multibyte character, so we assume that the first byte represents
+	     a single character. */
+	  point++;
+	  max--;
+
+	  /* Clear the state of the byte sequence, because in this case the
+	     effect of mbstate is undefined. */
+	  memset (&ps, 0, sizeof (mbstate_t));
+	}
+      else if (tmp == 0)
+        break;		/* Found '\0' */
+      else
+	{
+	  point += tmp;
+	  max -= tmp;
+	}
+    }
+
+  /* If START is not a byte that starts a character, then POINT will be
+     greater than START.  In this case, assume that (POINT - START) gives
+     a byte count that is the number of columns of difference. */
+  width = point - start;
+
+  while (point < end)
+    {
+      tmp = mbrtowc (&wc, str + point, max, &ps);
+      if ((size_t)tmp == (size_t)-1 || (size_t)tmp == (size_t)-2)
+	{
+	  /* In this case, the bytes are invalid or too short to compose a
+	     multibyte character, so we assume that the first byte represents
+	     a single character. */
+	  point++;
+	  max--;
+
+	  /* and assume that the byte occupies a single column. */
+	  width++;
+
+	  /* Clear the state of the byte sequence, because in this case the
+	     effect of mbstate is undefined. */
+	  memset (&ps, 0, sizeof (mbstate_t));
+	}
+      else if (tmp == 0)
+        break;			/* Found '\0' */
+      else
+	{
+	  point += tmp;
+	  max -= tmp;
+	  tmp = wcwidth(wc);
+	  width += (tmp >= 0) ? tmp : 1;
+	}
+    }
+
+  width += point - end;
+
+  return width;
+}
+#endif /* HANDLE_MULTIBYTE */
+	  
diff --git a/readline/doc/Makefile.in b/readline/doc/Makefile.in
index 4a38563..8a85ae1 100644
--- a/readline/doc/Makefile.in
+++ b/readline/doc/Makefile.in
@@ -27,10 +27,16 @@
 mandir = @mandir@
 manpfx = man
 
-man1ext = 1
-man1dir = $(mandir)/$(manpfx)$(man1ext)
-man3ext = 3
-man3dir = $(mandir)/$(manpfx)$(man3ext)
+man1ext = .1
+man1dir = $(mandir)/$(manpfx)1
+man3ext = .3
+man3dir = $(mandir)/$(manpfx)3
+
+# set this to a value to have the HTML documentation installed
+htmldir =
+
+# Support an alternate destination root directory for package building
+DESTDIR =
 
 SHELL = @MAKE_SHELL@
 RM = rm -f
@@ -63,13 +69,13 @@
 
 DVIOBJ = readline.dvi history.dvi rluserman.dvi
 INFOOBJ = readline.info history.info rluserman.info
-PSOBJ = readline.ps history.ps rluserman.ps
+PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps
 HTMLOBJ = readline.html history.html rluserman.html
-TEXTOBJ = readline.0
+TEXTOBJ = readline.0 history.0
 
 INTERMEDIATE_OBJ = rlman.dvi hist.dvi rluserman.dvi
 
-CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(TEXTOBJ)
+DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ)
 
 .SUFFIXES:      .0 .3 .ps .txt .dvi
 
@@ -112,10 +118,12 @@
 	$(RM) $@
 	$(DVIPS) history.dvi
 
+#
+# This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org
+#
 readline.html:	${RLSRC}
 	$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo
 	sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html
-	$(RM) rlman.html
 
 rluserman.html:	${RLSRC}
 	$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texinfo
@@ -133,49 +141,94 @@
 
 readline.0: readline.3
 
+readline_3.ps: readline.3
+	${RM} $@
+	${GROFF} -man < $(srcdir)/readline.3 > $@ 
+
+history.0: history.3
+
+history_3.ps: history.3
+	${RM} $@
+	${GROFF} -man < $(srcdir)/history.3 > $@ 
+
 clean:
 	$(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
-	      *.fns *.kys *.tps *.vrs *.bt *.bts *.o core
-
-distclean: clean
-	$(RM) $(CREATED_DOCS)
-	$(RM) $(INTERMEDIATE_OBJ)
-	$(RM) Makefile
+	      *.fns *.kys *.tps *.vrs *.bt *.bts *.o core *.core
 
 mostlyclean: clean
 
+distclean: clean maybe-clean
+	$(RM) $(INTERMEDIATE_OBJ)
+	$(RM) Makefile
+
+maybe-clean:
+	-if test "X$(topdir)" != "X$(BUILD_DIR)"; then \
+		$(RM) $(DIST_DOCS); \
+	fi
+
 maintainer-clean: clean
-	$(RM) $(CREATED_DOCS)
+	$(RM) $(DIST_DOCS)
 	$(RM) $(INTERMEDIATE_OBJ)
 	$(RM) Makefile
 
 installdirs:	$(topdir)/support/mkdirs
-	-$(SHELL) $(topdir)/support/mkdirs $(infodir) $(man3dir)
+	-$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir)
+	-if test -n "${htmldir}" ; then \
+		$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \
+	fi
 
 install:	installdirs
 	if test -f readline.info; then \
-		${INSTALL_DATA} readline.info $(infodir)/readline.info; \
+		${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \
 	else \
-		${INSTALL_DATA} $(srcdir)/readline.info $(infodir)/readline.info; \
+		${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \
 	fi
 	if test -f rluserman.info; then \
-		${INSTALL_DATA} rluserman.info $(infodir)/rluserman.info; \
+		${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
 	else \
-		${INSTALL_DATA} $(srcdir)/rluserman.info $(infodir)/rluserman.info; \
+		${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
 	fi
 	if test -f history.info; then \
-		${INSTALL_DATA} history.info $(infodir)/history.info; \
+		${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \
 	else \
-		${INSTALL_DATA} $(srcdir)/history.info $(infodir)/history.info; \
+		${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \
 	fi
 	-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
-		install-info --dir-file=$(infodir)/dir $(infodir)/readline.info ; \
-		install-info --dir-file=$(infodir)/dir $(infodir)/history.info ; \
+		install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+			$(DESTDIR)$(infodir)/readline.info ; \
+		install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+			$(DESTDIR)$(infodir)/history.info ; \
+		install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+			$(DESTDIR)$(infodir)/rluserman.info ; \
 	else true; fi
-	-${INSTALL_DATA} $(srcdir)/readline.3 $(man3dir)/readline.3
+	-${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext)
+	-${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext)
+	-if test -n "${htmldir}" ; then \
+		if test -f readline.html; then \
+			${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \
+		else \
+			${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \
+		fi ; \
+		if test -f history.html; then \
+			${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \
+		else \
+			${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \
+		fi ; \
+		if test -f rluserman.html; then \
+			${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
+		else \
+			${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
+		fi ; \
+	fi
 
 uninstall:
-	$(RM) $(infodir)/readline.info
-	$(RM) $(infodir)/rluserman.info
-	$(RM) $(infodir)/history.info
-	$(RM) $(man3dir)/readline.3
+	$(RM) $(DESTDIR)$(infodir)/readline.info
+	$(RM) $(DESTDIR)$(infodir)/rluserman.info
+	$(RM) $(DESTDIR)$(infodir)/history.info
+	$(RM) $(DESTDIR)$(man3dir)/readline$(man3ext)
+	$(RM) $(DESTDIR)$(man3dir)/history$(man3ext)
+	-if test -n "${htmldir}" ; then \
+		$(RM) $(DESTDIR)$(htmldir)/readline.html ; \
+		$(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \
+		$(RM) $(DESTDIR)$(htmldir)/history.html ; \
+	fi
diff --git a/readline/doc/hist.texinfo b/readline/doc/hist.texinfo
index 8a9c941..63ceb16 100644
--- a/readline/doc/hist.texinfo
+++ b/readline/doc/hist.texinfo
@@ -18,7 +18,7 @@
 provides a consistent user interface for recalling lines of previously
 typed input.
 
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -73,7 +73,7 @@
 by the Free Software Foundation.
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1988-1999 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2002 Free Software Foundation, Inc.
 @end titlepage
 
 @ifinfo
diff --git a/readline/doc/history.0 b/readline/doc/history.0
new file mode 100644
index 0000000..324c363
--- /dev/null
+++ b/readline/doc/history.0
@@ -0,0 +1,660 @@
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+NNAAMMEE
+       history - GNU History Library
+
+CCOOPPYYRRIIGGHHTT
+       The  GNU History Library is Copyright (C) 1989-2002 by the
+       Free Software Foundation, Inc.
+
+DDEESSCCRRIIPPTTIIOONN
+       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  uti-
+       lize  information  from  previous  lines  in composing new
+       ones.
+
+
+HHIISSTTOORRYY EEXXPPAANNSSIIOONN
+       The history library supports a history  expansion  feature
+       that  is identical to the history expansion in bbaasshh..  This
+       section describes what syntax features are available.
+
+       History expansions introduce words from the  history  list
+       into  the input stream, making it easy to repeat commands,
+       insert the arguments to a previous command into  the  cur-
+       rent  input  line,  or  fix  errors  in  previous commands
+       quickly.
+
+       History expansion is usually performed immediately after a
+       complete  line is read.  It takes place in two parts.  The
+       first is to determine which line from the history list  to
+       use during substitution.  The second is to select portions
+       of that line for inclusion into the current one.  The line
+       selected  from  the history is the _e_v_e_n_t, and the portions
+       of that line that are acted upon are _w_o_r_d_s.  Various _m_o_d_i_-
+       _f_i_e_r_s are available to manipulate the selected words.  The
+       line is broken into words in the same fashion as bbaasshh does
+       when  reading input, so that several words that would oth-
+       erwise be separated are  considered  one  word  when  sur-
+       rounded  by  quotes  (see  the description of hhiissttoorryy__ttookk--
+       eenniizzee(()) below).  History expansions are introduced by  the
+       appearance  of the history expansion character, which is !!
+       by default.  Only backslash  (\\)  and  single  quotes  can
+       quote the history expansion character.
+
+   EEvveenntt DDeessiiggnnaattoorrss
+       An event designator is a reference to a command line entry
+       in the history list.
+
+       !!      Start a history substitution, except when  followed
+              by a bbllaannkk, newline, = or (.
+       !!_n     Refer to command line _n.
+       !!--_n    Refer to the current command line minus _n.
+       !!!!     Refer  to  the previous command.  This is a synonym
+              for `!-1'.
+
+
+
+
+GNU History 4.3          2002 January 31                        1
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       !!_s_t_r_i_n_g
+              Refer to the  most  recent  command  starting  with
+              _s_t_r_i_n_g.
+       !!??_s_t_r_i_n_g[[??]]
+              Refer to the most recent command containing _s_t_r_i_n_g.
+              The trailing ?? may be omitted if _s_t_r_i_n_g is followed
+              immediately by a newline.
+       ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^
+              Quick   substitution.   Repeat  the  last  command,
+              replacing  _s_t_r_i_n_g_1  with  _s_t_r_i_n_g_2.   Equivalent  to
+              ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/'' (see MMooddiiffiieerrss below).
+       !!##     The entire command line typed so far.
+
+   WWoorrdd DDeessiiggnnaattoorrss
+       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 word being
+       denoted by 0 (zero).  Words are inserted into the  current
+       line separated by single spaces.
+
+       00 ((zzeerroo))
+              The  zeroth  word.  For the shell, this is the com-
+              mand word.
+       _n      The _nth word.
+       ^^      The first argument.  That is, word 1.
+       $$      The last argument.
+       %%      The word matched  by  the  most  recent  `?_s_t_r_i_n_g?'
+              search.
+       _x--_y    A range of words; `-_y' abbreviates `0-_y'.
+       **      All of the words but the zeroth.  This is a synonym
+              for `_1_-_$'.  It is not an error to use ** if there is
+              just  one  word  in  the event; the empty string is
+              returned in that case.
+       xx**     Abbreviates _x_-_$.
+       xx--     Abbreviates _x_-_$ like xx**, but omits the last word.
+
+       If a word designator is supplied without an event specifi-
+       cation, the previous command is used as the event.
+
+   MMooddiiffiieerrss
+       After  the  optional  word  designator, there may appear a
+       sequence of one or more of the following  modifiers,  each
+       preceded by a `:'.
+
+       hh      Remove a trailing file name component, leaving only
+              the head.
+       tt      Remove all leading file  name  components,  leaving
+              the tail.
+       rr      Remove  a trailing suffix of the form _._x_x_x, leaving
+              the basename.
+       ee      Remove all but the trailing suffix.
+       pp      Print the new command but do not execute it.
+
+
+
+GNU History 4.3          2002 January 31                        2
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       qq      Quote the substituted words, escaping further  sub-
+              stitutions.
+       xx      Quote  the  substituted  words as with qq, but break
+              into words at bbllaannkkss and newlines.
+       ss//_o_l_d//_n_e_w//
+              Substitute _n_e_w for the first occurrence of  _o_l_d  in
+              the event line.  Any delimiter can be used in place
+              of /.  The final delimiter is optional if it is the
+              last  character  of  the event line.  The delimiter
+              may be quoted in _o_l_d and _n_e_w with  a  single  back-
+              slash.  If & appears in _n_e_w, it is replaced by _o_l_d.
+              A single backslash will quote the  &.   If  _o_l_d  is
+              null, it is set to the last _o_l_d substituted, or, if
+              no previous history substitutions took  place,  the
+              last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]]  search.
+       &&      Repeat the previous substitution.
+       gg      Cause  changes  to be applied over the entire event
+              line.  This is used in conjunction with `::ss' (e.g.,
+              `::ggss//_o_l_d//_n_e_w//')  or  `::&&'.   If used with `::ss', any
+              delimiter can be used in place of /, and the  final
+              delimiter  is  optional if it is the last character
+              of the event line.
+
+PPRROOGGRRAAMMMMIINNGG WWIITTHH HHIISSTTOORRYY FFUUNNCCTTIIOONNSS
+       This section describes how to use the History  library  in
+       other programs.
+
+   IInnttrroodduuccttiioonn ttoo HHiissttoorryy
+       The  programmer  using  the  History library has available
+       functions for remembering lines on a history list, associ-
+       ating  arbitrary data with a line, removing lines from the
+       list, searching through the list for a line containing  an
+       arbitrary  text  string,  and  referencing any line in the
+       list directly.  In addition, a history _e_x_p_a_n_s_i_o_n  function
+       is  available  which provides for a consistent user inter-
+       face across different programs.
+
+       The user using programs written with the  History  library
+       has  the benefit of a consistent user interface with a set
+       of well-known commands for manipulating the text of previ-
+       ous  lines and using that text in new commands.  The basic
+       history manipulation commands are identical to the history
+       substitution provided by bbaasshh.
+
+       If  the  programmer  desires,  he  can  use  the  Readline
+       library,  which  includes  some  history  manipulation  by
+       default, and has the added advantage of command line edit-
+       ing.
+
+       Before declaring any functions using any functionality the
+       History  library  provides  in  other code, an application
+       writer should include the file _<_r_e_a_d_l_i_n_e_/_h_i_s_t_o_r_y_._h_> in any
+       file  that  uses  the History library's features.  It sup-
+       plies extern declarations for all of the library's  public
+
+
+
+GNU History 4.3          2002 January 31                        3
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       functions  and  variables,  and declares all of the public
+       data structures.
+
+
+   HHiissttoorryy SSttoorraaggee
+       The history list is an array of history entries.   A  his-
+       tory entry is declared as follows:
+
+       _t_y_p_e_d_e_f _v_o_i_d _* hhiissttddaattaa__tt;;
+
+       typedef struct _hist_entry {
+         char *line;
+         histdata_t data;
+       } HIST_ENTRY;
+
+       The history list itself might therefore be declared as
+
+       _H_I_S_T___E_N_T_R_Y _*_* tthhee__hhiissttoorryy__lliisstt;;
+
+       The  state  of  the History library is encapsulated into a
+       single structure:
+
+       /*
+        * A structure used to pass around the current state of the history.
+        */
+       typedef struct _hist_state {
+         HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+         int offset;           /* The location pointer within this array. */
+         int length;           /* Number of elements within this array. */
+         int size;             /* Number of slots allocated to this array. */
+         int flags;
+       } HISTORY_STATE;
+
+       If the flags member includes HHSS__SSTTIIFFLLEEDD, the  history  has
+       been stifled.
+
+HHiissttoorryy FFuunnccttiioonnss
+       This  section describes the calling sequence for the vari-
+       ous functions exported by the GNU History library.
+
+   IInniittiiaalliizziinngg HHiissttoorryy aanndd SSttaattee MMaannaaggeemmeenntt
+       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.
+
+       _v_o_i_d uussiinngg__hhiissttoorryy (_v_o_i_d)
+       Begin a session in which the history  functions  might  be
+       used.  This initializes the interactive variables.
+
+       _H_I_S_T_O_R_Y___S_T_A_T_E _* hhiissttoorryy__ggeett__hhiissttoorryy__ssttaattee (_v_o_i_d)
+       Return  a  structure  describing  the current state of the
+       input history.
+
+       _v_o_i_d hhiissttoorryy__sseett__hhiissttoorryy__ssttaattee (_H_I_S_T_O_R_Y___S_T_A_T_E _*_s_t_a_t_e)
+
+
+
+GNU History 4.3          2002 January 31                        4
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       Set the state of the history list according to _s_t_a_t_e.
+
+
+   HHiissttoorryy LLiisstt MMaannaaggeemmeenntt
+       These functions manage individual entries on  the  history
+       list, or set parameters managing the list itself.
+
+       _v_o_i_d aadddd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g)
+       Place  _s_t_r_i_n_g at the end of the history list.  The associ-
+       ated data field (if any) is set to NNUULLLL.
+
+       _H_I_S_T___E_N_T_R_Y _* rreemmoovvee__hhiissttoorryy (_i_n_t _w_h_i_c_h)
+       Remove history entry at offset  _w_h_i_c_h  from  the  history.
+       The  removed element is returned so you can free the line,
+       data, and containing structure.
+
+       _H_I_S_T___E_N_T_R_Y _* rreeppllaaccee__hhiissttoorryy__eennttrryy (_i_n_t _w_h_i_c_h_, _c_o_n_s_t  _c_h_a_r
+       _*_l_i_n_e_, _h_i_s_t_d_a_t_a___t _d_a_t_a)
+       Make the history entry at offset _w_h_i_c_h have _l_i_n_e and _d_a_t_a.
+       This returns the old entry so you can dispose of the data.
+       In  the  case  of  an  invalid  _w_h_i_c_h,  a  NNUULLLL pointer is
+       returned.
+
+       _v_o_i_d cclleeaarr__hhiissttoorryy (_v_o_i_d)
+       Clear the history list by deleting all the entries.
+
+       _v_o_i_d ssttiiffllee__hhiissttoorryy (_i_n_t _m_a_x)
+       Stifle the history list, remembering  only  the  last  _m_a_x
+       entries.
+
+       _i_n_t uunnssttiiffllee__hhiissttoorryy (_v_o_i_d)
+       Stop  stifling  the history.  This returns the previously-
+       set maximum number of history  entries  (as  set  by  ssttii--
+       ffllee__hhiissttoorryy(())).   history was stifled.  The value is posi-
+       tive if the history was stifled, negative if it wasn't.
+
+       _i_n_t hhiissttoorryy__iiss__ssttiifflleedd (_v_o_i_d)
+       Returns non-zero if the history is stifled, zero if it  is
+       not.
+
+
+   IInnffoorrmmaattiioonn AAbboouutt tthhee HHiissttoorryy LLiisstt
+       These  functions  return information about the entire his-
+       tory list or individual list entries.
+
+       _H_I_S_T___E_N_T_R_Y _*_* hhiissttoorryy__lliisstt (_v_o_i_d)
+       Return a NNUULLLL terminated array of _H_I_S_T___E_N_T_R_Y  _*  which  is
+       the  current input history.  Element 0 of this list is the
+       beginning of time.  If there is no history, return NNUULLLL.
+
+       _i_n_t wwhheerree__hhiissttoorryy (_v_o_i_d)
+       Returns the offset of the current history element.
+
+       _H_I_S_T___E_N_T_R_Y _* ccuurrrreenntt__hhiissttoorryy (_v_o_i_d)
+
+
+
+GNU History 4.3          2002 January 31                        5
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       Return the history  entry  at  the  current  position,  as
+       determined  by  wwhheerree__hhiissttoorryy(()).   If  there  is  no entry
+       there, return a NNUULLLL pointer.
+
+       _H_I_S_T___E_N_T_R_Y _* hhiissttoorryy__ggeett (_i_n_t _o_f_f_s_e_t)
+       Return the history entry at position _o_f_f_s_e_t, starting from
+       hhiissttoorryy__bbaassee.  If there is no entry there, or if _o_f_f_s_e_t is
+       greater than the history length, return a NNUULLLL pointer.
+
+       _i_n_t hhiissttoorryy__ttoottaall__bbyytteess (_v_o_i_d)
+       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.
+
+
+   MMoovviinngg AArroouunndd tthhee HHiissttoorryy LLiisstt
+       These functions allow the current index into  the  history
+       list to be set or changed.
+
+       _i_n_t hhiissttoorryy__sseett__ppooss (_i_n_t _p_o_s)
+       Set  the  current history offset to _p_o_s, an absolute index
+       into the list.  Returns 1 on success, 0  if  _p_o_s  is  less
+       than zero or greater than the number of history entries.
+
+       _H_I_S_T___E_N_T_R_Y _* pprreevviioouuss__hhiissttoorryy (_v_o_i_d)
+       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 NNUULLLL pointer.
+
+       _H_I_S_T___E_N_T_R_Y _* nneexxtt__hhiissttoorryy (_v_o_i_d)
+       Move  the  current history offset forward to the next his-
+       tory entry, and return the a pointer to  that  entry.   If
+       there is no next entry, return a NNUULLLL pointer.
+
+
+   SSeeaarrcchhiinngg tthhee HHiissttoorryy LLiisstt
+       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 his-
+       tory position.  The search may be _a_n_c_h_o_r_e_d,  meaning  that
+       the  string  must  match  at  the beginning of the history
+       entry.
+
+       _i_n_t hhiissttoorryy__sseeaarrcchh (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n)
+       Search the history for _s_t_r_i_n_g,  starting  at  the  current
+       history  offset.   If  _d_i_r_e_c_t_i_o_n  is less than 0, then the
+       search is through previous entries, otherwise through sub-
+       sequent  entries.   If  _s_t_r_i_n_g  is found, then the current
+       history index is set to that history entry, and the  value
+       returned  is  the  offset  in  the line of the entry where
+       _s_t_r_i_n_g was found.  Otherwise, nothing is changed, and a -1
+       is returned.
+
+       _i_n_t   hhiissttoorryy__sseeaarrcchh__pprreeffiixx   (_c_o_n_s_t   _c_h_a_r  _*_s_t_r_i_n_g_,  _i_n_t
+
+
+
+GNU History 4.3          2002 January 31                        6
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       _d_i_r_e_c_t_i_o_n)
+       Search the history for _s_t_r_i_n_g,  starting  at  the  current
+       history  offset.   The  search is anchored: matching lines
+       must begin with _s_t_r_i_n_g.  If _d_i_r_e_c_t_i_o_n is less than 0, then
+       the  search is through previous entries, otherwise through
+       subsequent entries.  If _s_t_r_i_n_g is found, then the  current
+       history  index  is set to that entry, and the return value
+       is  0.   Otherwise,  nothing  is  changed,  and  a  -1  is
+       returned.
+
+       _i_n_t hhiissttoorryy__sseeaarrcchh__ppooss (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n_,
+       _i_n_t _p_o_s)
+       Search for _s_t_r_i_n_g in the history list, starting at _p_o_s, an
+       absolute  index  into the list.  If _d_i_r_e_c_t_i_o_n is negative,
+       the search proceeds backward from _p_o_s, otherwise  forward.
+       Returns  the  absolute  index of the history element where
+       _s_t_r_i_n_g was found, or -1 otherwise.
+
+
+   MMaannaaggiinngg tthhee HHiissttoorryy FFiillee
+       The History library can read the history from and write it
+       to  a file.  This section documents the functions for man-
+       aging a history file.
+
+       _i_n_t rreeaadd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e)
+       Add the contents of _f_i_l_e_n_a_m_e to the history list,  a  line
+       at  a  time.   If _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_-
+       _t_o_r_y.  Returns 0 if successful, or eerrrrnnoo if not.
+
+       _i_n_t rreeaadd__hhiissttoorryy__rraannggee (_c_o_n_s_t _c_h_a_r  _*_f_i_l_e_n_a_m_e_,  _i_n_t  _f_r_o_m_,
+       _i_n_t _t_o)
+       Read  a  range  of lines from _f_i_l_e_n_a_m_e, adding them to the
+       history list.  Start reading at line _f_r_o_m and end  at  _t_o.
+       If  _f_r_o_m  is  zero, start at the beginning.  If _t_o is less
+       than _f_r_o_m, then read until the end of the file.  If  _f_i_l_e_-
+       _n_a_m_e  is  NNUULLLL,  then  read from _~_/_._h_i_s_t_o_r_y.  Returns 0 if
+       successful, or eerrrrnnoo if not.
+
+       _i_n_t wwrriittee__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e)
+       Write the current history to _f_i_l_e_n_a_m_e,  overwriting  _f_i_l_e_-
+       _n_a_m_e  if  necessary.   If _f_i_l_e_n_a_m_e is NNUULLLL, then write the
+       history list to _~_/_._h_i_s_t_o_r_y.   Returns  0  on  success,  or
+       eerrrrnnoo on a read or write error.
+
+
+       _i_n_t aappppeenndd__hhiissttoorryy (_i_n_t _n_e_l_e_m_e_n_t_s_, _c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e)
+       Append the last _n_e_l_e_m_e_n_t_s of the history list to _f_i_l_e_n_a_m_e.
+       If _f_i_l_e_n_a_m_e is NNUULLLL, then append to _~_/_._h_i_s_t_o_r_y.  Returns 0
+       on success, or eerrrrnnoo on a read or write error.
+
+       _i_n_t   hhiissttoorryy__ttrruunnccaattee__ffiillee  (_c_o_n_s_t  _c_h_a_r  _*_f_i_l_e_n_a_m_e_,  _i_n_t
+       _n_l_i_n_e_s)
+       Truncate the history file _f_i_l_e_n_a_m_e, leaving only the  last
+       _n_l_i_n_e_s  lines.   If  _f_i_l_e_n_a_m_e  is NNUULLLL, then _~_/_._h_i_s_t_o_r_y is
+
+
+
+GNU History 4.3          2002 January 31                        7
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       truncated.  Returns 0 on success, or eerrrrnnoo on failure.
+
+
+   HHiissttoorryy EExxppaannssiioonn
+       These functions implement history expansion.
+
+       _i_n_t hhiissttoorryy__eexxppaanndd (_c_h_a_r _*_s_t_r_i_n_g_, _c_h_a_r _*_*_o_u_t_p_u_t)
+       Expand _s_t_r_i_n_g, placing the result into _o_u_t_p_u_t,  a  pointer
+       to a string.  Returns:
+              0      If no expansions took place (or, if the only
+                     change in the text was the removal of escape
+                     characters  preceding  the history expansion
+                     character);
+              1      if expansions did take place;
+              -1     if there was an error in expansion;
+              2      if the returned line  should  be  displayed,
+                     but not executed, as with the ::pp modifier.
+       If  an  error ocurred in expansion, then _o_u_t_p_u_t contains a
+       descriptive error message.
+
+       _c_h_a_r _* ggeett__hhiissttoorryy__eevveenntt (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _*_c_i_n_d_e_x_,
+       _i_n_t _q_c_h_a_r)
+       Returns  the text of the history event beginning at _s_t_r_i_n_g
+       + _*_c_i_n_d_e_x.  _*_c_i_n_d_e_x is modified  to  point  to  after  the
+       event  specifier.  At function entry, _c_i_n_d_e_x points to the
+       index into _s_t_r_i_n_g where the  history  event  specification
+       begins.   _q_c_h_a_r  is a character that is allowed to end the
+       event specification in addition to the  ``normal''  termi-
+       nating characters.
+
+       _c_h_a_r _*_* hhiissttoorryy__ttookkeenniizzee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g)
+       Return  an  array  of tokens parsed out of _s_t_r_i_n_g, much as
+       the shell might.  The tokens are split on  the  characters
+       in the hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss variable, and shell quoting
+       conventions are obeyed.
+
+       _c_h_a_r _* hhiissttoorryy__aarrgg__eexxttrraacctt (_i_n_t  _f_i_r_s_t_,  _i_n_t  _l_a_s_t_,  _c_o_n_s_t
+       _c_h_a_r _*_s_t_r_i_n_g)
+       Extract  a  string segment consisting of the _f_i_r_s_t through
+       _l_a_s_t arguments present in  _s_t_r_i_n_g.   Arguments  are  split
+       using hhiissttoorryy__ttookkeenniizzee(()).
+
+
+   HHiissttoorryy VVaarriiaabblleess
+       This  section  describes  the externally-visible variables
+       exported by the GNU History Library.
+
+       _i_n_t hhiissttoorryy__bbaassee
+       The logical offset of the first entry in the history list.
+
+       _i_n_t hhiissttoorryy__lleennggtthh
+       The  number  of  entries  currently  stored in the history
+       list.
+
+
+
+
+GNU History 4.3          2002 January 31                        8
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+       _i_n_t hhiissttoorryy__mmaaxx__eennttrriieess
+       The maximum number  of  history  entries.   This  must  be
+       changed using ssttiiffllee__hhiissttoorryy(()).
+
+       _c_h_a_r hhiissttoorryy__eexxppaannssiioonn__cchhaarr
+       The  character  that  introduces  a  history  event.   The
+       default is !!.  Setting this to 0 inhibits  history  expan-
+       sion.
+
+       _c_h_a_r hhiissttoorryy__ssuubbsstt__cchhaarr
+       The  character  that invokes word substitution if found at
+       the start of a line.  The default is ^^.
+
+       _c_h_a_r hhiissttoorryy__ccoommmmeenntt__cchhaarr
+       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  his-
+       tory  expansion  for  the  remainder of the line.  This is
+       disabled by default.
+
+       _c_h_a_r _* hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss
+       The  characters  that  separate  tokens  for  hhiissttoorryy__ttookk--
+       eenniizzee(()).  The default value is "" \\tt\\nn(())<<>>;;&&||"".
+
+       _c_h_a_r _* hhiissttoorryy__nnoo__eexxppaanndd__cchhaarrss
+       The  list of characters which inhibit history expansion if
+       found immediately following  hhiissttoorryy__eexxppaannssiioonn__cchhaarr.   The
+       default is space, tab, newline, \\rr, and ==.
+
+       _c_h_a_r _* hhiissttoorryy__sseeaarrcchh__ddeelliimmiitteerr__cchhaarrss
+       The list of additional characters which can delimit a his-
+       tory search string, in addition to space, tab, _: and _?  in
+       the case of a substring search.  The default is empty.
+
+       _i_n_t hhiissttoorryy__qquuootteess__iinnhhiibbiitt__eexxppaannssiioonn
+       If  non-zero,  single-quoted words are not scanned for the
+       history expansion character.  The default value is 0.
+
+       _r_l___l_i_n_e_b_u_f___f_u_n_c___t _* hhiissttoorryy__iinnhhiibbiitt__eexxppaannssiioonn__ffuunnccttiioonn
+       This should be set to the address of a function that takes
+       two  arguments:  a  cchhaarr  ** (_s_t_r_i_n_g) and an iinntt index into
+       that string (_i).  It should return a non-zero value if the
+       history expansion starting at _s_t_r_i_n_g_[_i_] should not be per-
+       formed; zero if the  expansion  should  be  done.   It  is
+       intended  for  use  by applications like bbaasshh that use the
+       history expansion character for additional  purposes.   By
+       default, this variable is set to NNUULLLL.
+
+FFIILLEESS
+       _~_/_._h_i_s_t_o_r_y
+              Default filename for reading and writing saved his-
+              tory
+
+
+
+
+
+GNU History 4.3          2002 January 31                        9
+
+
+
+
+
+HISTORY(3)                                             HISTORY(3)
+
+
+SSEEEE AALLSSOO
+       _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+       _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+       _b_a_s_h(1)
+       _r_e_a_d_l_i_n_e(3)
+
+AAUUTTHHOORRSS
+       Brian Fox, Free Software Foundation
+       bfox@gnu.org
+
+       Chet Ramey, Case Western Reserve University
+       chet@ins.CWRU.Edu
+
+BBUUGG RREEPPOORRTTSS
+       If you find a bug  in  the  hhiissttoorryy  library,  you  should
+       report it.  But first, you should make sure that it really
+       is a bug, and that it appears in the latest version of the
+       hhiissttoorryy library that you have.
+
+       Once  you have determined that a bug actually exists, mail
+       a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g.  If you have a  fix,
+       you  are  welcome  to  mail that as well!  Suggestions and
+       `philosophical' bug reports may  be  mailed  to  _b_u_g_-_r_e_a_d_-
+       _l_i_n_e@_g_n_u_._o_r_g   or   posted   to   the   Usenet   newsgroup
+       ggnnuu..bbaasshh..bbuugg.
+
+       Comments and  bug  reports  concerning  this  manual  page
+       should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+GNU History 4.3          2002 January 31                       10
+
+
diff --git a/readline/doc/history.3 b/readline/doc/history.3
new file mode 100644
index 0000000..ed0cb9f
--- /dev/null
+++ b/readline/doc/history.3
@@ -0,0 +1,640 @@
+.\"
+.\" MAN PAGE COMMENTS to
+.\"
+.\"	Chet Ramey
+.\"	Information Network Services
+.\"	Case Western Reserve University
+.\"	chet@ins.CWRU.Edu
+.\"
+.\"	Last Change: Thu Jan 31 16:08:07 EST 2002
+.\"
+.TH HISTORY 3 "2002 January 31" "GNU History 4.3"
+.\"
+.\" File Name macro.  This used to be `.PN', for Path Name,
+.\" but Sun doesn't seem to like that very much.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.ds lp \fR\|(\fP
+.ds rp \fR\|)\fP
+.\" FnN return-value fun-name N arguments
+.de Fn1
+\fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp
+.br
+..
+.de Fn2
+.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp
+.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp
+.br
+..
+.de Fn3
+.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp
+.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp
+.br
+..
+.de Vb
+\fI\\$1\fP \fB\\$2\fP
+.br
+..
+.SH NAME
+history \- GNU History Library
+.SH COPYRIGHT
+.if t The GNU History Library is Copyright \(co 1989-2002 by the Free Software Foundation, Inc.
+.if n The GNU History Library is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.
+.SH DESCRIPTION
+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. 
+.PP
+.SH "HISTORY EXPANSION"
+.PP
+The history library supports a history expansion feature that
+is identical to the history expansion in
+.BR bash.
+This section describes what syntax features are available.
+.PP
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
+.PP
+History expansion is usually performed immediately after a complete line
+is read.
+It takes place in two parts.
+The first is to determine which line from the history list
+to use during substitution.
+The second is to select portions of that line for inclusion into
+the current one.
+The line selected from the history is the \fIevent\fP,
+and the portions of that line that are acted upon are \fIwords\fP.
+Various \fImodifiers\fP are available to manipulate the selected words.
+The line is broken into words in the same fashion as \fBbash\fP
+does when reading input,
+so that several words that would otherwise be separated 
+are considered one word when surrounded by quotes (see the
+description of \fBhistory_tokenize()\fP below).
+History expansions are introduced by the appearance of the
+history expansion character, which is \^\fB!\fP\^ by default.
+Only backslash (\^\fB\e\fP\^) and single quotes can quote
+the history expansion character.
+.SS Event Designators
+.PP
+An event designator is a reference to a command line entry in the
+history list.
+.PP
+.PD 0
+.TP
+.B !
+Start a history substitution, except when followed by a
+.BR blank ,
+newline, = or (.
+.TP
+.B !\fIn\fR
+Refer to command line
+.IR n .
+.TP
+.B !\-\fIn\fR
+Refer to the current command line minus
+.IR n .
+.TP
+.B !!
+Refer to the previous command.  This is a synonym for `!\-1'.
+.TP
+.B !\fIstring\fR
+Refer to the most recent command starting with 
+.IR string .
+.TP
+.B !?\fIstring\fR\fB[?]\fR
+Refer to the most recent command containing
+.IR string .
+The trailing \fB?\fP may be omitted if
+.I string
+is followed immediately by a newline.
+.TP
+.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
+Quick substitution.  Repeat the last command, replacing
+.I string1
+with
+.IR string2 .
+Equivalent to
+``!!:s/\fIstring1\fP/\fIstring2\fP/''
+(see \fBModifiers\fP below).
+.TP
+.B !#
+The entire command line typed so far.
+.PD
+.SS Word Designators
+.PP
+Word designators are used to select desired words from the event.
+A 
+.B :
+separates the event specification from the word designator.
+It may be omitted if the word designator begins with a
+.BR ^ ,
+.BR $ ,
+.BR * ,
+.BR \- ,
+or
+.BR % .
+Words are numbered from the beginning of the line,
+with the first word being denoted by 0 (zero).
+Words are inserted into the current line separated by single spaces.
+.PP
+.PD 0
+.TP
+.B 0 (zero)
+The zeroth word.  For the shell, this is the command
+word.
+.TP
+.I n
+The \fIn\fRth word.
+.TP
+.B ^
+The first argument.  That is, word 1.
+.TP
+.B $
+The last argument.
+.TP
+.B %
+The word matched by the most recent `?\fIstring\fR?' search.
+.TP
+.I x\fB\-\fPy
+A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
+.TP
+.B *
+All of the words but the zeroth.  This is a synonym
+for `\fI1\-$\fP'.  It is not an error to use
+.B *
+if there is just one
+word in the event; the empty string is returned in that case.
+.TP
+.B x*
+Abbreviates \fIx\-$\fP.
+.TP
+.B x\-
+Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
+.PD
+.PP
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+.SS Modifiers
+.PP
+After the optional word designator, there may appear a sequence of
+one or more of the following modifiers, each preceded by a `:'.
+.PP
+.PD 0
+.PP
+.TP
+.B h
+Remove a trailing file name component, leaving only the head.
+.TP
+.B t
+Remove all leading file name components, leaving the tail.
+.TP
+.B r
+Remove a trailing suffix of the form \fI.xxx\fP, leaving the
+basename.
+.TP
+.B e
+Remove all but the trailing suffix.
+.TP
+.B p
+Print the new command but do not execute it.
+.TP
+.B q
+Quote the substituted words, escaping further substitutions.
+.TP
+.B x
+Quote the substituted words as with
+.BR q ,
+but break into words at
+.B blanks
+and newlines.
+.TP
+.B s/\fIold\fP/\fInew\fP/
+Substitute
+.I new
+for the first occurrence of
+.I old
+in the event line.  Any delimiter can be used in place of /.  The
+final delimiter is optional if it is the last character of the
+event line.  The delimiter may be quoted in
+.I old
+and
+.I new
+with a single backslash.  If & appears in
+.IR new ,
+it is replaced by
+.IR old .
+A single backslash will quote the &.  If
+.I old
+is null, it is set to the last
+.I old
+substituted, or, if no previous history substitutions took place,
+the last
+.I string
+in a
+.B !?\fIstring\fR\fB[?]\fR
+search.
+.TP
+.B &
+Repeat the previous substitution.
+.TP
+.B g
+Cause changes to be applied over the entire event line.  This is
+used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR')
+or `\fB:&\fP'.  If used with
+`\fB:s\fP', any delimiter can be used
+in place of /, and the final delimiter is optional
+if it is the last character of the event line.
+.PD
+.SH "PROGRAMMING WITH HISTORY FUNCTIONS"
+This section describes how to use the History library in other programs.
+.SS Introduction to History
+.PP
+The programmer using the History library has available functions
+for remembering lines on a history list, associating arbitrary data
+with a line, removing lines from the list, searching through the list
+for a line containing an arbitrary text string, and referencing any line
+in the list directly.  In addition, a history \fIexpansion\fP function
+is available which provides for a consistent user interface across
+different programs.
+.PP
+The user using programs written with the History library has the
+benefit of a consistent user interface with a set of well-known
+commands for manipulating the text of previous lines and using that text
+in new commands.  The basic history manipulation commands are
+identical to
+the history substitution provided by \fBbash\fP.
+.PP
+If the programmer desires, he can use the Readline library, which
+includes some history manipulation by default, and has the added
+advantage of command line editing.
+.PP
+Before declaring any functions using any functionality the History
+library provides in other code, an application writer should include
+the file
+.FN <readline/history.h>
+in any file that uses the
+History library's features.  It supplies extern declarations for all
+of the library's public functions and variables, and declares all of
+the public data structures.
+
+.SS History Storage
+.PP
+The history list is an array of history entries.  A history entry is
+declared as follows:
+.PP
+.Vb "typedef void *" histdata_t;
+.PP
+.nf
+typedef struct _hist_entry {
+  char *line;
+  histdata_t data;
+} HIST_ENTRY;
+.fi
+.PP
+The history list itself might therefore be declared as
+.PP
+.Vb "HIST_ENTRY **" the_history_list;
+.PP
+The state of the History library is encapsulated into a single structure:
+.PP
+.nf
+/*
+ * A structure used to pass around the current state of the history.
+ */
+typedef struct _hist_state {
+  HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+  int offset;           /* The location pointer within this array. */
+  int length;           /* Number of elements within this array. */
+  int size;             /* Number of slots allocated to this array. */
+  int flags;
+} HISTORY_STATE;
+.fi
+.PP
+If the flags member includes \fBHS_STIFLED\fP, the history has been
+stifled.
+.SH "History Functions"
+.PP
+This section describes the calling sequence for the various functions
+exported by the GNU History library.
+.SS Initializing History and State Management
+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.
+
+.Fn1 void using_history void
+Begin a session in which the history functions might be used.  This
+initializes the interactive variables.
+
+.Fn1 "HISTORY_STATE *" history_get_history_state void
+Return a structure describing the current state of the input history.
+
+.Fn1 void history_set_history_state "HISTORY_STATE *state"
+Set the state of the history list according to \fIstate\fP.
+
+.SS History List Management
+
+These functions manage individual entries on the history list, or set
+parameters managing the list itself.
+
+.Fn1 void add_history "const char *string"
+Place \fIstring\fP at the end of the history list.  The associated data
+field (if any) is set to \fBNULL\fP.
+
+.Fn1 "HIST_ENTRY *" remove_history "int which"
+Remove history entry at offset \fIwhich\fP from the history.  The
+removed element is returned so you can free the line, data,
+and containing structure.
+
+.Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data"
+Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP.
+This returns the old entry so you can dispose of the data.  In the case
+of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned.
+
+.Fn1 void clear_history "void"
+Clear the history list by deleting all the entries.
+
+.Fn1 void stifle_history "int max"
+Stifle the history list, remembering only the last \fImax\fP entries.
+
+.Fn1 int unstifle_history "void"
+Stop stifling the history.  This returns the previously-set
+maximum number of history entries (as set by \fBstifle_history()\fP).
+history was stifled.  The value is positive if the history was
+stifled, negative if it wasn't.
+
+.Fn1 int history_is_stifled "void"
+Returns non-zero if the history is stifled, zero if it is not.
+
+.SS Information About the History List
+
+These functions return information about the entire history list or
+individual list entries.
+
+.Fn1 "HIST_ENTRY **" history_list "void"
+Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the
+current input history.  Element 0 of this list is the beginning of time.
+If there is no history, return \fBNULL\fP.
+
+.Fn1 int where_history "void"
+Returns the offset of the current history element.
+
+.Fn1 "HIST_ENTRY *" current_history "void"
+Return the history entry at the current position, as determined by
+\fBwhere_history()\fP.  If there is no entry there, return a \fBNULL\fP
+pointer.
+
+.Fn1 "HIST_ENTRY *" history_get "int offset"
+Return the history entry at position \fIoffset\fP, starting from
+\fBhistory_base\fP.
+If there is no entry there, or if \fIoffset\fP
+is greater than the history length, return a \fBNULL\fP pointer.
+
+.Fn1 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.
+
+.SS Moving Around the History List
+
+These functions allow the current index into the history list to be
+set or changed.
+
+.Fn1 int history_set_pos "int pos"
+Set the current history offset to \fIpos\fP, an absolute index
+into the list.
+Returns 1 on success, 0 if \fIpos\fP is less than zero or greater
+than the number of history entries.
+
+.Fn1 "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 \fBNULL\fP pointer.
+
+.Fn1 "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 \fBNULL\fP pointer.
+
+.SS Searching the History List
+
+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 \fIanchored\fP,
+meaning that the string must match at the beginning of the history entry.
+
+.Fn2 int history_search "const char *string" "int direction"
+Search the history for \fIstring\fP, starting at the current history offset.
+If \fIdirection\fP is less than 0, then the search is through
+previous entries, otherwise through subsequent entries.
+If \fIstring\fP is found, then
+the current history index is set to that history entry, and the value
+returned is the offset in the line of the entry where
+\fIstring\fP was found.  Otherwise, nothing is changed, and a -1 is
+returned.
+
+.Fn2 int history_search_prefix "const char *string" "int direction"
+Search the history for \fIstring\fP, starting at the current history
+offset.  The search is anchored: matching lines must begin with
+\fIstring\fP.  If \fIdirection\fP is less than 0, then the search is
+through previous entries, otherwise through subsequent entries.
+If \fIstring\fP is found, then the
+current history index is set to that entry, and the return value is 0. 
+Otherwise, nothing is changed, and a -1 is returned. 
+
+.Fn3 int history_search_pos "const char *string" "int direction" "int pos"
+Search for \fIstring\fP in the history list, starting at \fIpos\fP, an
+absolute index into the list.  If \fIdirection\fP is negative, the search
+proceeds backward from \fIpos\fP, otherwise forward.  Returns the absolute
+index of the history element where \fIstring\fP was found, or -1 otherwise.
+
+.SS Managing the History 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.
+
+.Fn1 int read_history "const char *filename"
+Add the contents of \fIfilename\fP to the history list, a line at a time.
+If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP.
+Returns 0 if successful, or \fBerrno\fP if not.
+
+.Fn3 int read_history_range "const char *filename" "int from" "int to"
+Read a range of lines from \fIfilename\fP, adding them to the history list.
+Start reading at line \fIfrom\fP and end at \fIto\fP.
+If \fIfrom\fP is zero, start at the beginning.  If \fIto\fP is less than
+\fIfrom\fP, then read until the end of the file.  If \fIfilename\fP is
+\fBNULL\fP, then read from \fI~/.history\fP.  Returns 0 if successful,
+or \fBerrno\fP if not.
+
+.Fn1 int write_history "const char *filename"
+Write the current history to \fIfilename\fP, overwriting \fIfilename\fP
+if necessary.
+If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP.
+Returns 0 on success, or \fBerrno\fP on a read or write error.
+
+
+.Fn2 int append_history "int nelements" "const char *filename"
+Append the last \fInelements\fP of the history list to \fIfilename\fP.
+If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP.
+Returns 0 on success, or \fBerrno\fP on a read or write error.
+
+.Fn2 int history_truncate_file "const char *filename" "int nlines"
+Truncate the history file \fIfilename\fP, leaving only the last
+\fInlines\fP lines.
+If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated.
+Returns 0 on success, or \fBerrno\fP on failure.
+
+.SS History Expansion
+
+These functions implement history expansion.
+
+.Fn2 int history_expand "char *string" "char **output"
+Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer
+to a string.  Returns:
+.RS
+.PD 0
+.TP
+0
+If no expansions took place (or, if the only change in
+the text was the removal of escape characters preceding the history expansion
+character);
+.TP
+1
+if expansions did take place;
+.TP
+-1
+if there was an error in expansion;
+.TP
+2
+if the returned line should be displayed, but not executed,
+as with the \fB:p\fP modifier.
+.PD
+.RE
+If an error ocurred in expansion, then \fIoutput\fP contains a descriptive
+error message.
+
+.Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar"
+Returns the text of the history event beginning at \fIstring\fP +
+\fI*cindex\fP.  \fI*cindex\fP is modified to point to after the event
+specifier.  At function entry, \fIcindex\fP points to the index into
+\fIstring\fP where the history event specification begins.  \fIqchar\fP
+is a character that is allowed to end the event specification in addition
+to the ``normal'' terminating characters.
+
+.Fn1 "char **" history_tokenize "const char *string"
+Return an array of tokens parsed out of \fIstring\fP, much as the
+shell might.
+The tokens are split on the characters in the
+\fBhistory_word_delimiters\fP variable,
+and shell quoting conventions are obeyed.
+
+.Fn3 "char *" history_arg_extract "int first" "int last" "const char *string"
+Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP
+arguments present in \fIstring\fP.  Arguments are split using
+\fBhistory_tokenize()\fP.
+
+.SS History Variables
+
+This section describes the externally-visible variables exported by
+the GNU History Library.
+
+.Vb int history_base
+The logical offset of the first entry in the history list.
+
+.Vb int history_length
+The number of entries currently stored in the history list.
+
+.Vb int history_max_entries
+The maximum number of history entries.  This must be changed using
+\fBstifle_history()\fP.
+
+.Vb char history_expansion_char
+The character that introduces a history event.  The default is \fB!\fP.
+Setting this to 0 inhibits history expansion.
+
+.Vb char history_subst_char
+The character that invokes word substitution if found at the start of
+a line.  The default is \fB^\fP.
+
+.Vb 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.
+
+.Vb "char *" history_word_delimiters
+The characters that separate tokens for \fBhistory_tokenize()\fP.
+The default value is \fB"\ \et\en()<>;&|"\fP.
+
+.Vb "char *" history_no_expand_chars
+The list of characters which inhibit history expansion if found immediately
+following \fBhistory_expansion_char\fP.  The default is space, tab, newline,
+\fB\er\fP, and \fB=\fP.
+
+.Vb "char *" history_search_delimiter_chars
+The list of additional characters which can delimit a history search
+string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of
+a substring search.  The default is empty.
+
+.Vb int history_quotes_inhibit_expansion
+If non-zero, single-quoted words are not scanned for the history expansion
+character.  The default value is 0.
+
+.Vb "rl_linebuf_func_t *" history_inhibit_expansion_function
+This should be set to the address of a function that takes two arguments:
+a \fBchar *\fP (\fIstring\fP)
+and an \fBint\fP index into that string (\fIi\fP).
+It should return a non-zero value if the history expansion starting at
+\fIstring[i]\fP should not be performed; zero if the expansion should
+be done.
+It is intended for use by applications like \fBbash\fP that use the history
+expansion character for additional purposes.
+By default, this variable is set to \fBNULL\fP.
+.SH FILES
+.PD 0 
+.TP
+.FN ~/.history
+Default filename for reading and writing saved history
+.PD
+.SH "SEE ALSO"
+.PD 0
+.TP
+\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
+.TP
+\fIbash\fP(1)
+.TP
+\fIreadline\fP(3)
+.PD
+.SH AUTHORS
+Brian Fox, Free Software Foundation
+.br
+bfox@gnu.org
+.PP
+Chet Ramey, Case Western Reserve University
+.br
+chet@ins.CWRU.Edu
+.SH BUG REPORTS
+If you find a bug in the
+.B history
+library, you should report it.  But first, you should
+make sure that it really is a bug, and that it appears in the latest
+version of the
+.B history
+library that you have.
+.PP
+Once you have determined that a bug actually exists, mail a
+bug report to \fIbug\-readline\fP@\fIgnu.org\fP.
+If you have a fix, you are welcome to mail that
+as well!  Suggestions and `philosophical' bug reports may be mailed
+to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet
+newsgroup
+.BR gnu.bash.bug .
+.PP
+Comments and bug reports concerning
+this manual page should be directed to
+.IR chet@ins.CWRU.Edu .
diff --git a/readline/doc/history.dvi b/readline/doc/history.dvi
index a8b30bf..bf7444e 100644
--- a/readline/doc/history.dvi
+++ b/readline/doc/history.dvi
Binary files differ
diff --git a/readline/doc/history.html b/readline/doc/history.html
index d380ff4..5afe15b 100644
--- a/readline/doc/history.html
+++ b/readline/doc/history.html
@@ -1,125 +1,109 @@
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on June, 27  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+ 
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.52
-     from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 19 January 2000 -->
+<TITLE>GNU History Library: </TITLE>
 
-<TITLE>GNU History Library</TITLE>
+<META NAME="description" CONTENT="GNU History Library: ">
+<META NAME="keywords" CONTENT="GNU History Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
 </HEAD>
-<BODY>
-<H1>GNU History Library</H1>
-<H2>Edition 4.1, for <CODE>History Library</CODE> Version 4.1.</H2>
-<H2>January 2000</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A>
-<UL>
-<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A>
-<UL>
-<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A>
-<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A>
-<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A>
-</UL>
-</UL>
-<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A>
-<UL>
-<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A>
-<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A>
-<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A>
-<UL>
-<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A>
-<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A>
-<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A>
-<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A>
-<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A>
-<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A>
-<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A>
-</UL>
-<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A>
-<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A>
-</UL>
-<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A>
-<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A>
-</UL>
-<P><HR><P>
 
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU History Library</H1></P><P>
+
 This document describes the GNU History library, a programming tool that
 provides a consistent user interface for recalling lines of previously
 typed input.
+</P><P>
 
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC1">1. Using History Interactively</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU History User's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC6">2. Programming with GNU History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU History Programmer's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC19">A. Concept Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC20">B. Function and Variable Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions
+				  and variables.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
 
-</P>
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Using History Interactively"></A>
+<H1> 1. Using History Interactively </H1>
+<!--docid::SEC1::-->
 <P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
 
-</P>
-<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-</P>
-<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-
-</P>
-<P>
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
-
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1>
-
-<P>
 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,
-see section <A HREF="history.html#SEC6">Programming with GNU History</A>.
+see section <A HREF="history.html#SEC6">2. Programming with GNU History</A>.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC2">1.1 History Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What it feels like using History as a user.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-<A NAME="IDX1"></A>
 
-</P>
+<A NAME="History Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 History Expansion </H2>
+<!--docid::SEC2::-->
 <P>
+
 The History library provides a history expansion feature that is similar
 to the history expansion provided by <CODE>csh</CODE>.  This section
 describes the syntax used to manipulate the history information.
+</P><P>
 
-</P>
-<P>
 History expansions introduce words from the history list into
 the input stream, making it easy to repeat commands, insert the
 arguments to a previous command into the current input line, or
 fix errors in previous commands quickly.
+</P><P>
 
-</P>
-<P>
 History expansion takes place in two parts.  The first is to determine
 which line from the history list should be used during substitution.
 The second is to select portions of that line for inclusion into the
@@ -131,241 +115,300 @@
 surrounded by quotes are considered one word.
 History expansions are introduced by the appearance of the
 history expansion character, which is <SAMP>`!'</SAMP> by default.
+</P><P>
 
-</P>
-
-
-<UL>
-<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use.
-<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest.
-<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution.
-</UL>
-
-
-
-<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to specify which history line to use.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC4">1.1.2 Word Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying which words are of interest.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC5">1.1.3 Modifiers</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Modifying the results of substitution.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-<A NAME="IDX2"></A>
 
-</P>
+<A NAME="Event Designators"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.1 Event Designators </H3>
+<!--docid::SEC3::-->
 <P>
+
 An event designator is a reference to a command line entry in the
 history list.
-<A NAME="IDX3"></A>
+<A NAME="IDX1"></A>
+</P><P>
 
-</P>
 <DL COMPACT>
 
 <DT><CODE>!</CODE>
-<DD>
-Start a history substitution, except when followed by a space, tab,
+<DD>Start a history substitution, except when followed by a space, tab,
 the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>.
+<P>
 
 <DT><CODE>!<VAR>n</VAR></CODE>
-<DD>
-Refer to command line <VAR>n</VAR>.
+<DD>Refer to command line <VAR>n</VAR>.
+<P>
 
 <DT><CODE>!-<VAR>n</VAR></CODE>
-<DD>
-Refer to the command <VAR>n</VAR> lines back.
+<DD>Refer to the command <VAR>n</VAR> lines back.
+<P>
 
 <DT><CODE>!!</CODE>
-<DD>
-Refer to the previous command.  This is a synonym for <SAMP>`!-1'</SAMP>.
+<DD>Refer to the previous command.  This is a synonym for <SAMP>`!-1'</SAMP>.
+<P>
 
 <DT><CODE>!<VAR>string</VAR></CODE>
-<DD>
-Refer to the most recent command starting with <VAR>string</VAR>.
+<DD>Refer to the most recent command starting with <VAR>string</VAR>.
+<P>
 
 <DT><CODE>!?<VAR>string</VAR>[?]</CODE>
-<DD>
-Refer to the most recent command containing <VAR>string</VAR>.  The trailing
+<DD>Refer to the most recent command containing <VAR>string</VAR>.  The trailing
 <SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by
 a newline.
+<P>
 
 <DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
-<DD>
-Quick Substitution.  Repeat the last command, replacing <VAR>string1</VAR>
+<DD>Quick Substitution.  Repeat the last command, replacing <VAR>string1</VAR>
 with <VAR>string2</VAR>.  Equivalent to
 <CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.
+<P>
 
 <DT><CODE>!#</CODE>
-<DD>
-The entire command line typed so far.
+<DD>The entire command line typed so far.
+<P>
 
 </DL>
-
-
-
-<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3>
-
 <P>
+
+<A NAME="Word Designators"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.2 Word Designators </H3>
+<!--docid::SEC4::-->
+<P>
+
 Word designators are used to select desired words from the event.
 A <SAMP>`:'</SAMP> separates the event specification from the word designator.  It
 may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>,
 <SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>.  Words are numbered from the beginning
 of the line, with the first word being denoted by 0 (zero).  Words are
 inserted into the current line separated by single spaces.
+</P><P>
 
-</P>
-<P>
 For example,
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><CODE>!!</CODE>
-<DD>
-designates the preceding command.  When you type this, the preceding
+<DD>designates the preceding command.  When you type this, the preceding
 command is repeated in toto.
+<P>
 
 <DT><CODE>!!:$</CODE>
-<DD>
-designates the last argument of the preceding command.  This may be
+<DD>designates the last argument of the preceding command.  This may be
 shortened to <CODE>!$</CODE>.
+<P>
 
 <DT><CODE>!fi:2</CODE>
-<DD>
-designates the second argument of the most recent command starting with
+<DD>designates the second argument of the most recent command starting with
 the letters <CODE>fi</CODE>.
 </DL>
-
 <P>
+
 Here are the word designators:
  
 <DL COMPACT>
 
 <DT><CODE>0 (zero)</CODE>
-<DD>
-The <CODE>0</CODE>th word.  For many applications, this is the command word.
+<DD>The <CODE>0</CODE>th word.  For many applications, this is the command word.
+<P>
 
 <DT><CODE><VAR>n</VAR></CODE>
-<DD>
-The <VAR>n</VAR>th word.
+<DD>The <VAR>n</VAR>th word.
+<P>
 
 <DT><CODE>^</CODE>
-<DD>
-The first argument; that is, word 1.
+<DD>The first argument; that is, word 1.
+<P>
 
 <DT><CODE>$</CODE>
-<DD>
-The last argument.
+<DD>The last argument.
+<P>
 
 <DT><CODE>%</CODE>
-<DD>
-The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+<DD>The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+<P>
 
 <DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
-<DD>
-A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
+<DD>A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
+<P>
 
 <DT><CODE>*</CODE>
-<DD>
-All of the words, except the <CODE>0</CODE>th.  This is a synonym for <SAMP>`1-$'</SAMP>.
+<DD>All of the words, except the <CODE>0</CODE>th.  This is a synonym for <SAMP>`1-$'</SAMP>.
 It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event;
 the empty string is returned in that case.
+<P>
 
 <DT><CODE><VAR>x</VAR>*</CODE>
-<DD>
-Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+<P>
 
 <DT><CODE><VAR>x</VAR>-</CODE>
-<DD>
-Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
+<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
+<P>
 
 </DL>
-
 <P>
+
 If a word designator is supplied without an event specification, the
 previous command is used as the event.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3>
-
+<A NAME="Modifiers"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.3 Modifiers </H3>
+<!--docid::SEC5::-->
 <P>
+
 After the optional word designator, you can add a sequence of one or more
 of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.
+</P><P>
 
-</P>
 <DL COMPACT>
 
 <DT><CODE>h</CODE>
-<DD>
-Remove a trailing pathname component, leaving only the head.
+<DD>Remove a trailing pathname component, leaving only the head.
+<P>
 
 <DT><CODE>t</CODE>
-<DD>
-Remove all leading  pathname  components, leaving the tail.
+<DD>Remove all leading  pathname  components, leaving the tail.
+<P>
 
 <DT><CODE>r</CODE>
-<DD>
-Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
+<DD>Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
 the basename.
+<P>
 
 <DT><CODE>e</CODE>
-<DD>
-Remove all but the trailing suffix.
+<DD>Remove all but the trailing suffix.
+<P>
 
 <DT><CODE>p</CODE>
-<DD>
-Print the new command but do not execute it.
+<DD>Print the new command but do not execute it.
+<P>
 
 <DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
-<DD>
-Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
+<DD>Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
 event line.  Any delimiter may be used in place of <SAMP>`/'</SAMP>.
 The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
 with a single backslash.  If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
 it is replaced by <VAR>old</VAR>.  A single backslash will quote
 the <SAMP>`&#38;'</SAMP>.  The final delimiter is optional if it is the last
 character on the input line.
+<P>
 
 <DT><CODE>&#38;</CODE>
-<DD>
-Repeat the previous substitution.
+<DD>Repeat the previous substitution.
+<P>
 
 <DT><CODE>g</CODE>
-<DD>
-Cause changes to be applied over the entire event line.  Used in
+<DD>Cause changes to be applied over the entire event line.  Used in
 conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
 or with <SAMP>`&#38;'</SAMP>.
+<P>
 
 </DL>
-
-
-
-<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1>
-
 <P>
+
+<A NAME="Programming with GNU History"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Programming with GNU History </H1>
+<!--docid::SEC6::-->
+<P>
+
 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, see section <A HREF="history.html#SEC1">Using History Interactively</A>.
+For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">1. Using History Interactively</A>.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for?
-<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored.
-<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use.
-<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour.
-<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library.
-</UL>
-
-
-
-<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC7">2.1 Introduction to History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What is the GNU History library for?</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC8">2.2 History Storage</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How information is stored.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC9">2.3 History Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that you can use.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC17">2.4 History Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables that control behaviour.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC18">2.5 History Programming Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Example of using the GNU History Library.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-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.
 
-</P>
+<A NAME="Introduction to History"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Introduction to History </H2>
+<!--docid::SEC7::-->
 <P>
+
+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. 
+</P><P>
+
 The programmer using the History library has available functions
 for remembering lines on a history list, associating arbitrary data
 with a line, removing lines from the list, searching through the list
@@ -373,610 +416,722 @@
 in the list directly.  In addition, a history <EM>expansion</EM> function
 is available which provides for a consistent user interface across
 different programs.
+</P><P>
 
-</P>
-<P>
 The user using programs written with the History library has the
 benefit of a consistent user interface with a set of well-known
 commands for manipulating the text of previous lines and using that text
 in new commands.  The basic history manipulation commands are similar to
 the history substitution provided by <CODE>csh</CODE>.
+</P><P>
 
-</P>
-<P>
 If the programmer desires, he can use the Readline library, which
 includes some history manipulation by default, and has the added
 advantage of command line editing.
+</P><P>
 
-</P>
-<P>
 Before declaring any functions using any functionality the History
 library provides in other code, an application writer should include
 the file <CODE>&#60;readline/history.h&#62;</CODE> in any file that uses the
 History library's features.  It supplies extern declarations for all
 of the library's public functions and variables, and declares all of
 the public data structures.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2>
-
+<A NAME="History Storage"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 History Storage </H2>
+<!--docid::SEC8::-->
 <P>
+
 The history list is an array of history entries.  A history entry is
 declared as follows:
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>typedef void *histdata_t;
 
-<PRE>
 typedef struct _hist_entry {
   char *line;
-  char *data;
+  histdata_t data;
 } HIST_ENTRY;
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 The history list itself might therefore be declared as
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>HIST_ENTRY **the_history_list;
+</pre></td></tr></table></P><P>
 
-<PRE>
-HIST_ENTRY **the_history_list;
-</PRE>
-
-<P>
 The state of the History library is encapsulated into a single structure:
+</P><P>
 
-</P>
-
-<PRE>
-/* A structure used to pass the current state of the history stuff around. */
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/*
+ * A structure used to pass around the current state of the history.
+ */
 typedef struct _hist_state {
-  HIST_ENTRY **entries;         /* Pointer to the entries themselves. */
-  int offset;                   /* The location pointer within this array. */
-  int length;                   /* Number of elements within this array. */
-  int size;                     /* Number of slots allocated to this array. */
+  HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+  int offset;           /* The location pointer within this array. */
+  int length;           /* Number of elements within this array. */
+  int size;             /* Number of slots allocated to this array. */
   int flags;
 } HISTORY_STATE;
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been
 stifled.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2>
-
+<A NAME="History Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 History Functions </H2>
+<!--docid::SEC9::-->
 <P>
+
 This section describes the calling sequence for the various functions
-present in GNU History.
+exported by the GNU History library.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to call when you
 						want to use history in a
-						program.
-<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list
-					of history entries.
-<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about
-					the history list.
-<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position
-					in the history list.
-<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list
-					for entries containing a string.
-<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file
-					containing the history list.
-<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history
-					expansion.
-</UL>
-
-
-
-<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3>
-
+						program.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions used to manage the list
+					of history entries.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions returning information about
+					the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions used to change the position
+					in the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to search the history list
+					for entries containing a string.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that read and write a file
+					containing the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to perform csh-like history
+					expansion.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Initializing History and State Management"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.1 Initializing History and State Management </H3>
+<!--docid::SEC10::-->
+<P>
+
 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.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX2"></A>
 <DL>
-<DT><U>Function:</U> void <B>using_history</B> <I>()</I>
-<DD><A NAME="IDX4"></A>
-Begin a session in which the history functions might be used.  This
+<DT><U>Function:</U> void <B>using_history</B> <I>(void)</I>
+<DD>Begin a session in which the history functions might be used.  This
 initializes the interactive variables.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX3"></A>
 <DL>
-<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>()</I>
-<DD><A NAME="IDX5"></A>
-Return a structure describing the current state of the input history.
+<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>(void)</I>
+<DD>Return a structure describing the current state of the input history.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX4"></A>
 <DL>
 <DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I>
-<DD><A NAME="IDX6"></A>
-Set the state of the history list according to <VAR>state</VAR>.
+<DD>Set the state of the history list according to <VAR>state</VAR>.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3>
-
+<A NAME="History List Management"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.2 History List Management </H3>
+<!--docid::SEC11::-->
 <P>
+
 These functions manage individual entries on the history list, or set
 parameters managing the list itself.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX5"></A>
 <DL>
-<DT><U>Function:</U> void <B>add_history</B> <I>(char *string)</I>
-<DD><A NAME="IDX7"></A>
-Place <VAR>string</VAR> at the end of the history list.  The associated data
+<DT><U>Function:</U> void <B>add_history</B> <I>(const char *string)</I>
+<DD>Place <VAR>string</VAR> at the end of the history list.  The associated data
 field (if any) is set to <CODE>NULL</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX6"></A>
 <DL>
 <DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I>
-<DD><A NAME="IDX8"></A>
-Remove history entry at offset <VAR>which</VAR> from the history.  The
+<DD>Remove history entry at offset <VAR>which</VAR> from the history.  The
 removed element is returned so you can free the line, data,
 and containing structure.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX7"></A>
 <DL>
-<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, char *line, char *data)</I>
-<DD><A NAME="IDX9"></A>
-Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
+<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, const char *line, histdata_t data)</I>
+<DD>Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
 This returns the old entry so you can dispose of the data.  In the case
 of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX8"></A>
 <DL>
-<DT><U>Function:</U> void <B>clear_history</B> <I>()</I>
-<DD><A NAME="IDX10"></A>
-Clear the history list by deleting all the entries.
+<DT><U>Function:</U> void <B>clear_history</B> <I>(void)</I>
+<DD>Clear the history list by deleting all the entries.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX9"></A>
 <DL>
 <DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I>
-<DD><A NAME="IDX11"></A>
-Stifle the history list, remembering only the last <VAR>max</VAR> entries.
+<DD>Stifle the history list, remembering only the last <VAR>max</VAR> entries.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX10"></A>
 <DL>
-<DT><U>Function:</U> int <B>unstifle_history</B> <I>()</I>
-<DD><A NAME="IDX12"></A>
-Stop stifling the history.  This returns the previous amount the
-history was stifled.  The value is positive if the history was
+<DT><U>Function:</U> int <B>unstifle_history</B> <I>(void)</I>
+<DD>Stop stifling the history.  This returns the previously-set
+maximum number of history entries (as set by <CODE>stifle_history()</CODE>).
+The value is positive if the history was
 stifled, negative if it wasn't.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX11"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_is_stifled</B> <I>()</I>
-<DD><A NAME="IDX13"></A>
-Returns non-zero if the history is stifled, zero if it is not.
+<DT><U>Function:</U> int <B>history_is_stifled</B> <I>(void)</I>
+<DD>Returns non-zero if the history is stifled, zero if it is not.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3>
-
+<A NAME="Information About the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.3 Information About the History List </H3>
+<!--docid::SEC12::-->
 <P>
+
 These functions return information about the entire history list or
 individual list entries.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX12"></A>
 <DL>
-<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>()</I>
-<DD><A NAME="IDX14"></A>
-Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY</CODE> which is the
+<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>(void)</I>
+<DD>Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY *</CODE> which is the
 current input history.  Element 0 of this list is the beginning of time.
 If there is no history, return <CODE>NULL</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX13"></A>
 <DL>
-<DT><U>Function:</U> int <B>where_history</B> <I>()</I>
-<DD><A NAME="IDX15"></A>
-Returns the offset of the current history element.
+<DT><U>Function:</U> int <B>where_history</B> <I>(void)</I>
+<DD>Returns the offset of the current history element.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX14"></A>
 <DL>
-<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>()</I>
-<DD><A NAME="IDX16"></A>
-Return the history entry at the current position, as determined by
-<CODE>where_history ()</CODE>.  If there is no entry there, return a <CODE>NULL</CODE>
+<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>(void)</I>
+<DD>Return the history entry at the current position, as determined by
+<CODE>where_history()</CODE>.  If there is no entry there, return a <CODE>NULL</CODE>
 pointer.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX15"></A>
 <DL>
 <DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I>
-<DD><A NAME="IDX17"></A>
-Return the history entry at position <VAR>offset</VAR>, starting from
-<CODE>history_base</CODE>.  If there is no entry there, or if <VAR>offset</VAR>
+<DD>Return the history entry at position <VAR>offset</VAR>, starting from
+<CODE>history_base</CODE> (see section <A HREF="history.html#SEC17">2.4 History Variables</A>).
+If there is no entry there, or if <VAR>offset</VAR>
 is greater than the history length, return a <CODE>NULL</CODE> pointer.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX16"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_total_bytes</B> <I>()</I>
-<DD><A NAME="IDX18"></A>
-Return the number of bytes that the primary history entries are using.
+<DT><U>Function:</U> int <B>history_total_bytes</B> <I>(void)</I>
+<DD>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.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3>
-
+<A NAME="Moving Around the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.4 Moving Around the History List </H3>
+<!--docid::SEC13::-->
 <P>
+
 These functions allow the current index into the history list to be
 set or changed.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX17"></A>
 <DL>
 <DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I>
-<DD><A NAME="IDX19"></A>
-Set the position in the history list to <VAR>pos</VAR>, an absolute index
+<DD>Set the current history offset to <VAR>pos</VAR>, an absolute index
 into the list.
+Returns 1 on success, 0 if <VAR>pos</VAR> is less than zero or greater
+than the number of history entries.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX18"></A>
 <DL>
-<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>()</I>
-<DD><A NAME="IDX20"></A>
-Back up the current history offset to the previous history entry, and
+<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>(void)</I>
+<DD>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 <CODE>NULL</CODE> pointer.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX19"></A>
 <DL>
-<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>()</I>
-<DD><A NAME="IDX21"></A>
-Move the current history offset forward to the next history entry, and
+<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>(void)</I>
+<DD>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 <CODE>NULL</CODE> pointer.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3>
+<A NAME="Searching the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.5 Searching the History List </H3>
+<!--docid::SEC14::-->
 <P>
-<A NAME="IDX22"></A>
 
-</P>
-<P>
 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 <EM>anchored</EM>,
 meaning that the string must match at the beginning of the history entry.
-<A NAME="IDX23"></A>
+<A NAME="IDX20"></A>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX21"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_search</B> <I>(char *string, int direction)</I>
-<DD><A NAME="IDX24"></A>
-Search the history for <VAR>string</VAR>, starting at the current history
-offset.  If <VAR>direction</VAR> &#60; 0, then the search is through previous entries,
-else through subsequent.  If <VAR>string</VAR> is found, then
+<DT><U>Function:</U> int <B>history_search</B> <I>(const char *string, int direction)</I>
+<DD>Search the history for <VAR>string</VAR>, starting at the current history offset.
+If <VAR>direction</VAR> is less than 0, then the search is through
+previous entries, otherwise through subsequent entries.
+If <VAR>string</VAR> is found, then
 the current history index is set to that history entry, and the value
 returned is the offset in the line of the entry where
 <VAR>string</VAR> was found.  Otherwise, nothing is changed, and a -1 is
 returned.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX22"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(char *string, int direction)</I>
-<DD><A NAME="IDX25"></A>
-Search the history for <VAR>string</VAR>, starting at the current history
+<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(const char *string, int direction)</I>
+<DD>Search the history for <VAR>string</VAR>, starting at the current history
 offset.  The search is anchored: matching lines must begin with
-<VAR>string</VAR>.  If <VAR>direction</VAR> &#60; 0, then the search is through previous
-entries, else through subsequent.  If <VAR>string</VAR> is found, then the
+<VAR>string</VAR>.  If <VAR>direction</VAR> is less than 0, then the search is
+through previous entries, otherwise through subsequent entries.
+If <VAR>string</VAR> is found, then the
 current history index is set to that entry, and the return value is 0. 
 Otherwise, nothing is changed, and a -1 is returned. 
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX23"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_search_pos</B> <I>(char *string, int direction, int pos)</I>
-<DD><A NAME="IDX26"></A>
-Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
+<DT><U>Function:</U> int <B>history_search_pos</B> <I>(const char *string, int direction, int pos)</I>
+<DD>Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
 absolute index into the list.  If <VAR>direction</VAR> is negative, the search
 proceeds backward from <VAR>pos</VAR>, otherwise forward.  Returns the absolute
 index of the history element where <VAR>string</VAR> was found, or -1 otherwise.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3>
-
+<A NAME="Managing the History File"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.6 Managing the History File </H3>
+<!--docid::SEC15::-->
 <P>
+
 The History library can read the history from and write it to a file.
 This section documents the functions for managing a history file.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX24"></A>
 <DL>
-<DT><U>Function:</U> int <B>read_history</B> <I>(char *filename)</I>
-<DD><A NAME="IDX27"></A>
-Add the contents of <VAR>filename</VAR> to the history list, a line at a
-time.  If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from
-<TT>`~/.history'</TT>.  Returns 0 if successful, or errno if not.
+<DT><U>Function:</U> int <B>read_history</B> <I>(const char *filename)</I>
+<DD>Add the contents of <VAR>filename</VAR> to the history list, a line at a time.
+If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>.
+Returns 0 if successful, or <CODE>errno</CODE> if not.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX25"></A>
 <DL>
-<DT><U>Function:</U> int <B>read_history_range</B> <I>(char *filename, int from, int to)</I>
-<DD><A NAME="IDX28"></A>
-Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
-Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>.  If
-<VAR>from</VAR> is zero, start at the beginning.  If <VAR>to</VAR> is less than
+<DT><U>Function:</U> int <B>read_history_range</B> <I>(const char *filename, int from, int to)</I>
+<DD>Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
+Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>.
+If <VAR>from</VAR> is zero, start at the beginning.  If <VAR>to</VAR> is less than
 <VAR>from</VAR>, then read until the end of the file.  If <VAR>filename</VAR> is
 <CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>.  Returns 0 if successful,
 or <CODE>errno</CODE> if not.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX26"></A>
 <DL>
-<DT><U>Function:</U> int <B>write_history</B> <I>(char *filename)</I>
-<DD><A NAME="IDX29"></A>
-Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
-if necessary.  If <VAR>filename</VAR> is
-<CODE>NULL</CODE>, then write the history list to <TT>`~/.history'</TT>.  Values
-returned are as in <CODE>read_history ()</CODE>.
+<DT><U>Function:</U> int <B>write_history</B> <I>(const char *filename)</I>
+<DD>Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
+if necessary.
+If <VAR>filename</VAR> is <CODE>NULL</CODE>, then write the history list to
+<TT>`~/.history'</TT>.
+Returns 0 on success, or <CODE>errno</CODE> on a read or write error.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX27"></A>
 <DL>
-<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, char *filename)</I>
-<DD><A NAME="IDX30"></A>
-Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
+<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, const char *filename)</I>
+<DD>Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
+If <VAR>filename</VAR> is <CODE>NULL</CODE>, then append to <TT>`~/.history'</TT>.
+Returns 0 on success, or <CODE>errno</CODE> on a read or write error.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX28"></A>
 <DL>
-<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(char *filename, int nlines)</I>
-<DD><A NAME="IDX31"></A>
-Truncate the history file <VAR>filename</VAR>, leaving only the last
+<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(const char *filename, int nlines)</I>
+<DD>Truncate the history file <VAR>filename</VAR>, leaving only the last
 <VAR>nlines</VAR> lines.
+If <VAR>filename</VAR> is <CODE>NULL</CODE>, then <TT>`~/.history'</TT> is truncated.
+Returns 0 on success, or <CODE>errno</CODE> on failure.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3>
-
+<A NAME="History Expansion"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.7 History Expansion </H3>
+<!--docid::SEC16::-->
 <P>
-These functions implement <CODE>csh</CODE>-like history expansion.
 
-</P>
-<P>
+These functions implement history expansion.
+</P><P>
+
+<A NAME="IDX29"></A>
 <DL>
 <DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I>
-<DD><A NAME="IDX32"></A>
-Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
-to a string (see section <A HREF="history.html#SEC2">History Expansion</A>).  Returns:
+<DD>Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
+to a string (see section <A HREF="history.html#SEC2">1.1 History Expansion</A>).  Returns:
 <DL COMPACT>
-
 <DT><CODE>0</CODE>
-<DD>
-If no expansions took place (or, if the only change in
-the text was the de-slashifying of the history expansion
+<DD>If no expansions took place (or, if the only change in
+the text was the removal of escape characters preceding the history expansion
 character);
 <DT><CODE>1</CODE>
-<DD>
-if expansions did take place;
+<DD>if expansions did take place;
 <DT><CODE>-1</CODE>
-<DD>
-if there was an error in expansion;
+<DD>if there was an error in expansion;
 <DT><CODE>2</CODE>
-<DD>
-if the returned line should be displayed, but not executed,
-as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>).
+<DD>if the returned line should be displayed, but not executed,
+as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">1.1.3 Modifiers</A>).
 </DL>
-
 <P>
+
 If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive
 error message.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX30"></A>
 <DL>
-<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, char *string)</I>
-<DD><A NAME="IDX33"></A>
-Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
-arguments present in <VAR>string</VAR>.  Arguments are broken up as in Bash.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Function:</U> char * <B>get_history_event</B> <I>(char *string, int *cindex, int qchar)</I>
-<DD><A NAME="IDX34"></A>
-Returns the text of the history event beginning at <VAR>string</VAR> +
+<DT><U>Function:</U> char * <B>get_history_event</B> <I>(const char *string, int *cindex, int qchar)</I>
+<DD>Returns the text of the history event beginning at <VAR>string</VAR> +
 <VAR>*cindex</VAR>.  <VAR>*cindex</VAR> is modified to point to after the event
 specifier.  At function entry, <VAR>cindex</VAR> points to the index into
 <VAR>string</VAR> where the history event specification begins.  <VAR>qchar</VAR>
 is a character that is allowed to end the event specification in addition
 to the "normal" terminating characters.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX31"></A>
 <DL>
-<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(char *string)</I>
-<DD><A NAME="IDX35"></A>
-Return an array of tokens parsed out of <VAR>string</VAR>, much as the
-shell might.  The tokens are split on white space and on the
-characters <CODE>()&#60;&#62;;&#38;|$</CODE>, and shell quoting conventions are
-obeyed.
+<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(const char *string)</I>
+<DD>Return an array of tokens parsed out of <VAR>string</VAR>, much as the
+shell might.  The tokens are split on the characters in the
+<VAR>history_word_delimiters</VAR> variable,
+and shell quoting conventions are obeyed.
 </DL>
+</P><P>
 
-</P>
+<A NAME="IDX32"></A>
+<DL>
+<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, const char *string)</I>
+<DD>Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
+arguments present in <VAR>string</VAR>.  Arguments are split using
+<CODE>history_tokenize</CODE>.
+</DL>
+</P><P>
 
-
-<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2>
-
+<A NAME="History Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 History Variables </H2>
+<!--docid::SEC17::-->
 <P>
-This section describes the externally visible variables exported by
+
+This section describes the externally-visible variables exported by
 the GNU History Library.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX33"></A>
 <DL>
 <DT><U>Variable:</U> int <B>history_base</B>
-<DD><A NAME="IDX36"></A>
-The logical offset of the first entry in the history list.
+<DD>The logical offset of the first entry in the history list.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX34"></A>
 <DL>
 <DT><U>Variable:</U> int <B>history_length</B>
-<DD><A NAME="IDX37"></A>
-The number of entries currently stored in the history list.
+<DD>The number of entries currently stored in the history list.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX35"></A>
 <DL>
-<DT><U>Variable:</U> int <B>max_input_history</B>
-<DD><A NAME="IDX38"></A>
-The maximum number of history entries.  This must be changed using
-<CODE>stifle_history ()</CODE>.
+<DT><U>Variable:</U> int <B>history_max_entries</B>
+<DD>The maximum number of history entries.  This must be changed using
+<CODE>stifle_history()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX36"></A>
 <DL>
 <DT><U>Variable:</U> char <B>history_expansion_char</B>
-<DD><A NAME="IDX39"></A>
-The character that starts a history event.  The default is <SAMP>`!'</SAMP>.
+<DD>The character that introduces a history event.  The default is <SAMP>`!'</SAMP>.
+Setting this to 0 inhibits history expansion.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX37"></A>
 <DL>
 <DT><U>Variable:</U> char <B>history_subst_char</B>
-<DD><A NAME="IDX40"></A>
-The character that invokes word substitution if found at the start of
+<DD>The character that invokes word substitution if found at the start of
 a line.  The default is <SAMP>`^'</SAMP>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX38"></A>
 <DL>
 <DT><U>Variable:</U> char <B>history_comment_char</B>
-<DD><A NAME="IDX41"></A>
-During tokenization, if this character is seen as the first character
+<DD>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.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX39"></A>
+<DL>
+<DT><U>Variable:</U> char * <B>history_word_delimiters</B>
+<DD>The characters that separate tokens for <CODE>history_tokenize()</CODE>.
+The default value is <CODE>" \t\n()<>;&|"</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX40"></A>
 <DL>
 <DT><U>Variable:</U> char * <B>history_no_expand_chars</B>
-<DD><A NAME="IDX42"></A>
-The list of characters which inhibit history expansion if found immediately
-following <VAR>history_expansion_char</VAR>.  The default is whitespace and
-<SAMP>`='</SAMP>.
+<DD>The list of characters which inhibit history expansion if found immediately
+following <VAR>history_expansion_char</VAR>.  The default is space, tab, newline,
+carriage return, and <SAMP>`='</SAMP>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX41"></A>
 <DL>
 <DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B>
-<DD><A NAME="IDX43"></A>
-The list of additional characters which can delimit a history search
-string, in addition to whitespace, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of
+<DD>The list of additional characters which can delimit a history search
+string, in addition to space, TAB, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of
 a substring search.  The default is empty.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX42"></A>
 <DL>
 <DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B>
-<DD><A NAME="IDX44"></A>
-If non-zero, single-quoted words are not scanned for the history expansion
+<DD>If non-zero, single-quoted words are not scanned for the history expansion
 character.  The default value is 0.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX43"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>history_inhibit_expansion_function</B>
-<DD><A NAME="IDX45"></A>
-This should be set to the address of a function that takes two arguments:
-a <CODE>char *</CODE> (<VAR>string</VAR>) and an integer index into that string (<VAR>i</VAR>).
+<DT><U>Variable:</U> rl_linebuf_func_t * <B>history_inhibit_expansion_function</B>
+<DD>This should be set to the address of a function that takes two arguments:
+a <CODE>char *</CODE> (<VAR>string</VAR>)
+and an <CODE>int</CODE> index into that string (<VAR>i</VAR>).
 It should return a non-zero value if the history expansion starting at
 <VAR>string[i]</VAR> should not be performed; zero if the expansion should
 be done.
 It is intended for use by applications like Bash that use the history
 expansion character for additional purposes.
-By default, this variable is set to NULL.
+By default, this variable is set to <CODE>NULL</CODE>.
 </DL>
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2>
-
+<A NAME="History Programming Example"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 History Programming Example </H2>
+<!--docid::SEC18::-->
 <P>
+
 The following program demonstrates simple use of the GNU History Library.
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>#include &#60;stdio.h&#62;
+#include &#60;readline/history.h&#62;
 
-<PRE>
-main ()
+main (argc, argv)
+     int argc;
+     char **argv;
 {
   char line[1024], *t;
   int len, done = 0;
@@ -1056,140 +1211,429 @@
         }
     }
 }
-</PRE>
+</FONT></pre></td></tr></table></P><P>
 
+<A NAME="Concept Index"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> A. Concept Index </H1>
+<!--docid::SEC19::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX20">anchored search</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC3">event designators</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX1">history events</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC2">history expansion</A></TD><TD valign=top><A HREF="history.html#SEC2">1.1 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC14">History Searching</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+</td></tr></table><br><P>
 
+<A NAME="Function and Variable Index"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> B. Function and Variable Index </H1>
+<!--docid::SEC20::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A>
+ &nbsp; 
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_A"></A>A</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX5"><CODE>add_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX27"><CODE>append_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX8"><CODE>clear_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX14"><CODE>current_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_G"></A>G</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX30"><CODE>get_history_event</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX32"><CODE>history_arg_extract</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX33"><CODE>history_base</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX38"><CODE>history_comment_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX29"><CODE>history_expand</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX36"><CODE>history_expansion_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX15"><CODE>history_get</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX3"><CODE>history_get_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX43"><CODE>history_inhibit_expansion_function</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX11"><CODE>history_is_stifled</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX34"><CODE>history_length</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX12"><CODE>history_list</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX35"><CODE>history_max_entries</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX40"><CODE>history_no_expand_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX42"><CODE>history_quotes_inhibit_expansion</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX21"><CODE>history_search</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX41"><CODE>history_search_delimiter_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX23"><CODE>history_search_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX22"><CODE>history_search_prefix</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX4"><CODE>history_set_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX17"><CODE>history_set_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX37"><CODE>history_subst_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX31"><CODE>history_tokenize</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX16"><CODE>history_total_bytes</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX28"><CODE>history_truncate_file</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX39"><CODE>history_word_delimiters</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX19"><CODE>next_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_P"></A>P</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX18"><CODE>previous_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX24"><CODE>read_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX25"><CODE>read_history_range</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX6"><CODE>remove_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX7"><CODE>replace_history_entry</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_S"></A>S</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX9"><CODE>stifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_U"></A>U</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX10"><CODE>unstifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX2"><CODE>using_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_W"></A>W</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX13"><CODE>where_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX26"><CODE>write_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp; 
+<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A>
+ &nbsp; 
+</td></tr></table><br><P>
 
-<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1>
-<P>
-Jump to:
-<A HREF="#cindex_a">a</A>
--
-<A HREF="#cindex_e">e</A>
--
-<A HREF="#cindex_h">h</A>
-<P>
-<H2><A NAME="cindex_a">a</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX23">anchored search</A>
-</DIR>
-<H2><A NAME="cindex_e">e</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX2">event designators</A>
-</DIR>
-<H2><A NAME="cindex_h">h</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX3">history events</A>
-<LI><A HREF="history.html#IDX1">history expansion</A>
-<LI><A HREF="history.html#IDX22">History Searching</A>
-</DIR>
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="history.html#SEC2">1.1 History Expansion</A>
+<BR>
+<UL>
+<A NAME="TOC3" HREF="history.html#SEC3">1.1.1 Event Designators</A>
+<BR>
+<A NAME="TOC4" HREF="history.html#SEC4">1.1.2 Word Designators</A>
+<BR>
+<A NAME="TOC5" HREF="history.html#SEC5">1.1.3 Modifiers</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A>
+<BR>
+<UL>
+<A NAME="TOC7" HREF="history.html#SEC7">2.1 Introduction to History</A>
+<BR>
+<A NAME="TOC8" HREF="history.html#SEC8">2.2 History Storage</A>
+<BR>
+<A NAME="TOC9" HREF="history.html#SEC9">2.3 History Functions</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A>
+<BR>
+<A NAME="TOC11" HREF="history.html#SEC11">2.3.2 History List Management</A>
+<BR>
+<A NAME="TOC12" HREF="history.html#SEC12">2.3.3 Information About the History List</A>
+<BR>
+<A NAME="TOC13" HREF="history.html#SEC13">2.3.4 Moving Around the History List</A>
+<BR>
+<A NAME="TOC14" HREF="history.html#SEC14">2.3.5 Searching the History List</A>
+<BR>
+<A NAME="TOC15" HREF="history.html#SEC15">2.3.6 Managing the History File</A>
+<BR>
+<A NAME="TOC16" HREF="history.html#SEC16">2.3.7 History Expansion</A>
+<BR>
+</UL>
+<A NAME="TOC17" HREF="history.html#SEC17">2.4 History Variables</A>
+<BR>
+<A NAME="TOC18" HREF="history.html#SEC18">2.5 History Programming Example</A>
+<BR>
+</UL>
+<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A>
+<BR>
+<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A>
+<BR>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A>
+<BR>
+<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A>
+<BR>
+<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A>
+<BR>
+<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A>
+<BR>
 
-</P>
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<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>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>  
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section 
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position 
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
+the following structure:
+<UL>
+<LI> 1. Section One  </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
 
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
 
-<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1>
-<P>
-Jump to:
-<A HREF="#vindex_a">a</A>
--
-<A HREF="#vindex_c">c</A>
--
-<A HREF="#vindex_g">g</A>
--
-<A HREF="#vindex_h">h</A>
--
-<A HREF="#vindex_m">m</A>
--
-<A HREF="#vindex_n">n</A>
--
-<A HREF="#vindex_p">p</A>
--
-<A HREF="#vindex_r">r</A>
--
-<A HREF="#vindex_s">s</A>
--
-<A HREF="#vindex_u">u</A>
--
-<A HREF="#vindex_w">w</A>
-<P>
-<H2><A NAME="vindex_a">a</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX7">add_history</A>
-<LI><A HREF="history.html#IDX30">append_history</A>
-</DIR>
-<H2><A NAME="vindex_c">c</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX10">clear_history</A>
-<LI><A HREF="history.html#IDX16">current_history</A>
-</DIR>
-<H2><A NAME="vindex_g">g</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX34">get_history_event</A>
-</DIR>
-<H2><A NAME="vindex_h">h</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX33">history_arg_extract</A>
-<LI><A HREF="history.html#IDX36">history_base</A>
-<LI><A HREF="history.html#IDX41">history_comment_char</A>
-<LI><A HREF="history.html#IDX32">history_expand</A>
-<LI><A HREF="history.html#IDX39">history_expansion_char</A>
-<LI><A HREF="history.html#IDX17">history_get</A>
-<LI><A HREF="history.html#IDX5">history_get_history_state</A>
-<LI><A HREF="history.html#IDX45">history_inhibit_expansion_function</A>
-<LI><A HREF="history.html#IDX13">history_is_stifled</A>
-<LI><A HREF="history.html#IDX37">history_length</A>
-<LI><A HREF="history.html#IDX14">history_list</A>
-<LI><A HREF="history.html#IDX42">history_no_expand_chars</A>
-<LI><A HREF="history.html#IDX44">history_quotes_inhibit_expansion</A>
-<LI><A HREF="history.html#IDX24">history_search</A>
-<LI><A HREF="history.html#IDX43">history_search_delimiter_chars</A>
-<LI><A HREF="history.html#IDX26">history_search_pos</A>
-<LI><A HREF="history.html#IDX25">history_search_prefix</A>
-<LI><A HREF="history.html#IDX6">history_set_history_state</A>
-<LI><A HREF="history.html#IDX19">history_set_pos</A>
-<LI><A HREF="history.html#IDX40">history_subst_char</A>
-<LI><A HREF="history.html#IDX35">history_tokenize</A>
-<LI><A HREF="history.html#IDX18">history_total_bytes</A>
-<LI><A HREF="history.html#IDX31">history_truncate_file</A>
-</DIR>
-<H2><A NAME="vindex_m">m</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX38">max_input_history</A>
-</DIR>
-<H2><A NAME="vindex_n">n</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX21">next_history</A>
-</DIR>
-<H2><A NAME="vindex_p">p</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX20">previous_history</A>
-</DIR>
-<H2><A NAME="vindex_r">r</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX27">read_history</A>
-<LI><A HREF="history.html#IDX28">read_history_range</A>
-<LI><A HREF="history.html#IDX8">remove_history</A>
-<LI><A HREF="history.html#IDX9">replace_history_entry</A>
-</DIR>
-<H2><A NAME="vindex_s">s</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX11">stifle_history</A>
-</DIR>
-<H2><A NAME="vindex_u">u</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX12">unstifle_history</A>
-<LI><A HREF="history.html#IDX4">using_history</A>
-</DIR>
-<H2><A NAME="vindex_w">w</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX15">where_history</A>
-<LI><A HREF="history.html#IDX29">write_history</A>
-</DIR>
-
-</P>
-<P><HR><P>
-This document was generated on 19 January 2000 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
 </BODY>
 </HTML>
diff --git a/readline/doc/history.info b/readline/doc/history.info
index e73cd63..98c0002 100644
--- a/readline/doc/history.info
+++ b/readline/doc/history.info
@@ -1,5 +1,5 @@
-This is Info file history.info, produced by Makeinfo version 1.68 from
-the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo.
+This is history.info, produced by makeinfo version 4.1 from
+/usr/homes/chet/src/bash/readline-src/doc/hist.texinfo.
 
 INFO-DIR-SECTION Libraries
 START-INFO-DIR-ENTRY
@@ -10,7 +10,7 @@
 that provides a consistent user interface for recalling lines of
 previously typed input.
 
-   Copyright (C) 1988-1999 Free Software Foundation, Inc.
+   Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice pare
@@ -53,7 +53,7 @@
    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::..
+own programs, *note Programming with GNU History::.
 
 * Menu:
 
@@ -238,7 +238,7 @@
    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::..
+History Interactively::.
 
 * Menu:
 
@@ -293,9 +293,11 @@
    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 *data;
+       histdata_t data;
      } HIST_ENTRY;
 
    The history list itself might therefore be declared as
@@ -305,12 +307,14 @@
    The state of the History library is encapsulated into a single
 structure:
 
-     /* A structure used to pass the current state of the history stuff around. */
+     /*
+      * A structure used to pass around the current state of the history.
+      */
      typedef struct _hist_state {
-       HIST_ENTRY **entries;         /* Pointer to the entries themselves. */
-       int offset;                   /* The location pointer within this array. */
-       int length;                   /* Number of elements within this array. */
-       int size;                     /* Number of slots allocated to this array. */
+       HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+       int offset;           /* The location pointer within this array. */
+       int length;           /* Number of elements within this array. */
+       int size;             /* Number of slots allocated to this array. */
        int flags;
      } HISTORY_STATE;
 
@@ -324,7 +328,7 @@
 =================
 
    This section describes the calling sequence for the various functions
-present in GNU History.
+exported by the GNU History library.
 
 * Menu:
 
@@ -354,11 +358,11 @@
 state of the History library when you want to use the history functions
 in your program.
 
- - Function: void using_history ()
+ - 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 ()
+ - Function: HISTORY_STATE * history_get_history_state (void)
      Return a structure describing the current state of the input
      history.
 
@@ -374,7 +378,7 @@
    These functions manage individual entries on the history list, or set
 parameters managing the list itself.
 
- - Function: void add_history (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'.
 
@@ -383,24 +387,25 @@
      removed element is returned so you can free the line, data, and
      containing structure.
 
- - Function: HIST_ENTRY * replace_history_entry (int which, char *line,
-          char *data)
+ - 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 you can dispose of the data.  In the case
      of an invalid WHICH, a `NULL' pointer is returned.
 
- - Function: void clear_history ()
+ - Function: void clear_history (void)
      Clear the history list by deleting all the entries.
 
  - Function: void stifle_history (int max)
      Stifle the history list, remembering only the last MAX entries.
 
- - Function: int unstifle_history ()
-     Stop stifling the history.  This returns the previous amount the
-     history was stifled.  The value is positive if the history was
-     stifled, negative if it wasn't.
+ - 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 ()
+ - Function: int history_is_stifled (void)
      Returns non-zero if the history is stifled, zero if it is not.
 
 
@@ -412,25 +417,26 @@
    These functions return information about the entire history list or
 individual list entries.
 
- - Function: HIST_ENTRY ** history_list ()
-     Return a `NULL' terminated array of `HIST_ENTRY' which is the
+ - 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 ()
+ - Function: int where_history (void)
      Returns the offset of the current history element.
 
- - Function: HIST_ENTRY * current_history ()
+ - 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'
+     `where_history()'.  If there is no entry there, return a `NULL'
      pointer.
 
  - Function: HIST_ENTRY * history_get (int offset)
      Return the history entry at position OFFSET, starting from
-     `history_base'.  If there is no entry there, or if OFFSET is
-     greater than the history length, return a `NULL' pointer.
+     `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: int history_total_bytes ()
+ - 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.
@@ -445,15 +451,16 @@
 set or changed.
 
  - Function: int history_set_pos (int pos)
-     Set the position in the history list to POS, an absolute index
-     into the list.
+     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 ()
+ - 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 ()
+ - 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.
@@ -470,24 +477,27 @@
 "anchored", meaning that the string must match at the beginning of the
 history entry.
 
- - Function: int history_search (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 < 0, then the search is through previous
-     entries, else through subsequent.  If STRING is found, then the
-     current history index is set to that history entry, and the value
-     returned is the offset in the line of the entry where STRING was
-     found.  Otherwise, nothing is changed, and a -1 is returned.
+     offset.  If DIRECTION is less than 0, then the search is through
+     previous entries, otherwise through subsequent entries.  If STRING
+     is found, then the current history index is set to that history
+     entry, and the value returned is the offset in the line of the
+     entry where STRING was found.  Otherwise, nothing is changed, and
+     a -1 is returned.
 
- - Function: int history_search_prefix (char *string, int direction)
+ - 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
-     STRING.  If DIRECTION < 0, then the search is through previous
-     entries, else through subsequent.  If STRING is found, then the
-     current history index is set to that entry, and the return value
-     is 0.  Otherwise, nothing is changed, and a -1 is returned.
+     STRING.  If DIRECTION is less than 0, then the search is through
+     previous entries, otherwise through subsequent entries.  If STRING
+     is found, then the current history index is set to that entry, and
+     the return value is 0.  Otherwise, nothing is changed, and a -1 is
+     returned.
 
- - Function: int history_search_pos (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
@@ -503,29 +513,35 @@
    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 (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 (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 (char *filename, int from, int to)
+ - 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,
      start at the beginning.  If TO is less than FROM, then read until
      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 (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'.  Values returned are as in `read_history ()'.
+     `~/.history'.  Returns 0 on success, or `errno' on a read or write
+     error.
 
- - Function: int append_history (int nelements, char *filename)
-     Append the last NELEMENTS of the history list to 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 (char *filename, int nlines)
+ - Function: int history_truncate_file (const char *filename, int
+          nlines)
      Truncate the history file FILENAME, leaving only the last NLINES
-     lines.
+     lines.  If FILENAME is `NULL', then `~/.history' is truncated.
+     Returns 0 on success, or `errno' on failure.
 
 
 File: history.info,  Node: History Expansion,  Prev: Managing the History File,  Up: History Functions
@@ -533,15 +549,15 @@
 History Expansion
 -----------------
 
-   These functions implement `csh'-like history expansion.
+   These functions implement history expansion.
 
  - Function: int history_expand (char *string, char **output)
      Expand STRING, placing the result into OUTPUT, a pointer to a
-     string (*note History Interaction::.).  Returns:
+     string (*note History Interaction::).  Returns:
     `0'
           If no expansions took place (or, if the only change in the
-          text was the de-slashifying of the history expansion
-          character);
+          text was the removal of escape characters preceding the
+          history expansion character);
 
     `1'
           if expansions did take place;
@@ -551,18 +567,13 @@
 
     `2'
           if the returned line should be displayed, but not executed,
-          as with the `:p' modifier (*note Modifiers::.).
+          as with the `:p' modifier (*note Modifiers::).
 
      If an error ocurred in expansion, then OUTPUT contains a
      descriptive error message.
 
- - Function: char * history_arg_extract (int first, int last, char
-          *string)
-     Extract a string segment consisting of the FIRST through LAST
-     arguments present in STRING.  Arguments are broken up as in Bash.
-
- - Function: char * get_history_event (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
@@ -570,10 +581,17 @@
      character that is allowed to end the event specification in
      addition to the "normal" terminating characters.
 
- - Function: char ** history_tokenize (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 white space and on the characters
-     `()<>;&|$', and shell quoting conventions are obeyed.
+     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
+          char *string)
+     Extract a string segment consisting of the FIRST through LAST
+     arguments present in STRING.  Arguments are split using
+     `history_tokenize'.
 
 
 File: history.info,  Node: History Variables,  Next: History Programming Example,  Prev: History Functions,  Up: Programming with GNU History
@@ -581,7 +599,7 @@
 History Variables
 =================
 
-   This section describes the externally visible variables exported by
+   This section describes the externally-visible variables exported by
 the GNU History Library.
 
  - Variable: int history_base
@@ -590,12 +608,13 @@
  - Variable: int history_length
      The number of entries currently stored in the history list.
 
- - Variable: int max_input_history
+ - Variable: int history_max_entries
      The maximum number of history entries.  This must be changed using
-     `stifle_history ()'.
+     `stifle_history()'.
 
  - Variable: char history_expansion_char
-     The character that starts a history event.  The default is `!'.
+     The character that introduces a history event.  The default is `!'.
+     Setting this to 0 inhibits history expansion.
 
  - Variable: char history_subst_char
      The character that invokes word substitution if found at the start
@@ -607,28 +626,32 @@
      newline are ignored, suppressing history expansion for the
      remainder of the line.  This is disabled by default.
 
+ - Variable: char * history_word_delimiters
+     The characters that separate tokens for `history_tokenize()'.  The
+     default value is `" \t\n()<>;&|"'.
+
  - Variable: char * history_no_expand_chars
      The list of characters which inhibit history expansion if found
      immediately following HISTORY_EXPANSION_CHAR.  The default is
-     whitespace and `='.
+     space, tab, newline, carriage return, and `='.
 
  - Variable: char * history_search_delimiter_chars
      The list of additional characters which can delimit a history
-     search string, in addition to whitespace, `:' and `?' in the case
+     search string, in addition to space, TAB, `:' and `?' in the case
      of a substring search.  The default is empty.
 
  - 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: Function * 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 integer index into that
-     string (I).  It should return a non-zero value if the history
-     expansion starting at STRING[I] should not be performed; zero if
-     the expansion should be done.  It is intended for use by
-     applications like Bash that use the history expansion character
-     for additional purposes.  By default, this variable is set to NULL.
+     arguments: a `char *' (STRING) and an `int' index into that string
+     (I).  It should return a non-zero value if the history expansion
+     starting at STRING[I] should not be performed; zero if the
+     expansion should be done.  It is intended for use by applications
+     like Bash that use the history expansion character for additional
+     purposes.  By default, this variable is set to `NULL'.
 
 
 File: history.info,  Node: History Programming Example,  Prev: History Variables,  Up: Programming with GNU History
@@ -639,7 +662,12 @@
    The following program demonstrates simple use of the GNU History
 Library.
 
-     main ()
+     #include <stdio.h>
+     #include <readline/history.h>
+     
+     main (argc, argv)
+          int argc;
+          char **argv;
      {
        char line[1024], *t;
        int len, done = 0;
@@ -758,6 +786,7 @@
 * history_is_stifled:                    History List Management.
 * history_length:                        History Variables.
 * history_list:                          Information About the History List.
+* history_max_entries:                   History Variables.
 * history_no_expand_chars:               History Variables.
 * history_quotes_inhibit_expansion:      History Variables.
 * history_search:                        Searching the History List.
@@ -770,7 +799,7 @@
 * history_tokenize:                      History Expansion.
 * history_total_bytes:                   Information About the History List.
 * history_truncate_file:                 Managing the History File.
-* max_input_history:                     History Variables.
+* history_word_delimiters:               History Variables.
 * next_history:                          Moving Around the History List.
 * previous_history:                      Moving Around the History List.
 * read_history:                          Managing the History File.
@@ -786,26 +815,26 @@
 
 
 Tag Table:
-Node: Top1162
-Node: Using History Interactively1742
-Node: History Interaction2250
-Node: Event Designators3669
-Node: Word Designators4596
-Node: Modifiers6225
-Node: Programming with GNU History7363
-Node: Introduction to History8089
-Node: History Storage9774
-Node: History Functions10867
-Node: Initializing History and State Management11838
-Node: History List Management12630
-Node: Information About the History List14151
-Node: Moving Around the History List15457
-Node: Searching the History List16342
-Node: Managing the History File18174
-Node: History Expansion19680
-Node: History Variables21519
-Node: History Programming Example23837
-Node: Concept Index26441
-Node: Function and Variable Index26927
+Node: Top1136
+Node: Using History Interactively1716
+Node: History Interaction2223
+Node: Event Designators3642
+Node: Word Designators4569
+Node: Modifiers6198
+Node: Programming with GNU History7336
+Node: Introduction to History8061
+Node: History Storage9746
+Node: History Functions10857
+Node: Initializing History and State Management11841
+Node: History List Management12641
+Node: Information About the History List14235
+Node: Moving Around the History List15591
+Node: Searching the History List16580
+Node: Managing the History File18498
+Node: History Expansion20304
+Node: History Variables22199
+Node: History Programming Example24766
+Node: Concept Index27488
+Node: Function and Variable Index27974
 
 End Tag Table
diff --git a/readline/doc/history.ps b/readline/doc/history.ps
index abd7810..a35bcf4 100644
--- a/readline/doc/history.ps
+++ b/readline/doc/history.ps
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software
+%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
 %%Title: history.dvi
 %%Pages: 20
 %%PageOrder: Ascend
@@ -8,7 +8,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -t letter -o history.ps history.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2000.01.19:1217
+%DVIPSSource:  TeX output 2002.06.27:1354
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -20,9 +20,9 @@
 matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
 exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
 statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
 /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
 df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
 definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
@@ -50,7 +50,7 @@
 mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
 SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
 userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
 /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
 /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
@@ -107,8 +107,8 @@
 14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA0700120EEA1C07123812
 70B5FCA210107F8F14>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmsl9 9 1
-/Fd 1 47 df<1270A212F0126004047D830B>46 D E
+%DVIPSBitmapFont: Fd cmti9 9 1
+/Fd 1 47 df<1230127812F0126005047C830C>46 D E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fe cmr9 9 24
 /Fe 24 122 df<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA6006A2EA70
@@ -194,16 +194,15 @@
 00E0138038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB
 00E0EA7E03B5FCA214167E9519>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmtt10 12 24
-/Fh 24 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F
+%DVIPSBitmapFont: Fh cmtt10 12 27
+/Fh 27 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F
 FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<1338137CA2136C13EEA313
 C6A2EA01C7A438038380A4380701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83
 FE387F01FC171E7F9D1A>65 D<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0EA3
-90C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E001CA51400A2EB03
-80A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<38FF83FEA3381C00
-70AA381FFFF0A3381C0070AB38FF83FEA3171E7F9D1A>72 D<B51280A33801C000B3A6B5
-1280A3111E7C9D1A>I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213
-301338A21318131CA2130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>78
+90C7FCA3141CA5B512FCA3161E7E9D1A>69 D<38FF83FEA3381C0070AA381FFFF0A3381C
+0070AB38FF83FEA3171E7F9D1A>72 D<B51280A33801C000B3A6B51280A3111E7C9D1A>
+I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213301338A21318131CA2
+130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>78
 D<EA0FFE383FFF804813C0EA7C07EA700100F013E0EAE000B1EAF001A2007013C0EA7C07
 EA7FFF6C1380380FFE00131E7D9D1A>I<EAFFFC13FF1480381C07C0EB01E0EB00F01470
 A414F0EB01E0EB07C0381FFF8014001480381C07C01301EB00E0A514E214E7A338FF807E
@@ -214,16 +213,21 @@
 138013C700011300A2EA00EEA2137CA21338AA48B4FCA3171E7F9D1A>89
 D<387FFFC0B512E0A26C13C013047D7E1A>95 D<EA1FF0EA3FFC487EEA780FEA30073800
 0380A2137FEA07FF121FEA3F83EA7803127012E0A3EA7007EA780F383FFFFCEA1FFDEA07
-F016157D941A>97 D<EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA512
-70A2007813707E381F01F0380FFFE0000313C03800FE0014157D941A>99
-D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2
-EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<12FEA3120EA6133EEBFF80000F
-13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104
-D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I<
-EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>110
-D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0
-EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F81F838FF8FFC38
-7F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114
+F016157D941A>97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB0038120E14
+1CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>I<EBFF8000
+0313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E381F01F0380F
+FFE0000313C03800FE0014157D941A>I<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0F
+EA3C07EA7803EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D
+1A>I<EA01F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0A300E0C7
+FC1270A2007813707E381F01F0380FFFE0000313803800FE0014157D941A>I<EB07E0EB
+1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF804813C06C13
+80151E7F9D1A>I<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3
+FE13E713E3171E7F9D1A>104 D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80
+B512C06C1380121F7C9E1A>I<EAFFE0A31200B3A6B512E0A3131E7D9D1A>108
+D<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>
+110 D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF0010070
+13C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F81F838FF8F
+FC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114
 D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F
 9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F
 C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C
@@ -325,7 +329,7 @@
 38130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99
 D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278
 12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07
-0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18
+0EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA7002EA3004EA1C18
 EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA
 0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238
 0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0
@@ -356,8 +360,15 @@
 0171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278
 191D809318>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmbx12 17.28 36
-/Fk 36 122 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3
+%DVIPSBitmapFont: Fk cmcsc10 10.95 3
+/Fk 3 118 df<EB7E083803819838070078000C1338001C13185A00781308127000F013
+00A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E961D>103
+D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C130E1307A2
+EB03A0EB01E0A213001460123800FE132016177E961C>110 D<38FF81FC381C00701420
+B0000C1340120E6C138038018300EA007C16177E961C>117 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fl cmbx12 17.28 36
+/Fl 36 122 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3
 1C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF000
 7CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215
 F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49
@@ -444,14 +455,14 @@
 FF6D90C7FCA26D5AA26D5AA21478A21470A214F05C1301007C5BEAFE035C49C8FC5BEAFC
 1EEA787CEA3FF0EA0FC0262E7E9F2B>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmsy10 10.95 1
-/Fl 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000
-061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15
-30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7
-FC282B7EA02D>13 D E
+%DVIPSBitmapFont: Fm cmsy10 10.95 1
+/Fm 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01
+800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15
+306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0
+D900FEC7FC272B7DA02E>13 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmbx12 14.4 45
-/Fm 45 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
+%DVIPSBitmapFont: Fn cmbx12 14.4 44
+/Fn 44 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
 0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46
 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49
 D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2
@@ -481,75 +492,71 @@
 485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E6C
 B45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5FC
 A3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512F0
-A33803FC00B3B1B512F0A314297EA819>I<D8FFFE92383FFF80A26D5D0003EFE000A2D9
-BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC13
-1CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700
-A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>77
-D<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180
-1380147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1F
-F1150F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA8
-35>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC150316F8ED
-07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>80
-D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC0
-90B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503923801FC1CB538F0
-00FEEE7FF8EE0FE02F297EA832>82 D<9038FF80600003EBF0E0000F13F8381F80FD383F
-001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE
-80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C1307
-6C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I<B500F0EBFFFEA3
-D803FCC7EA0380B3AA0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB5
-5A01001480DA1FFCC7FC2F297EA834>85 D<B500F0EB7FFFA3D803FEC7EA01C00001ED03
-80A26D14076C16006E5B017F140E80013F5CA26E133C011F14386E1378010F1470800107
-5CA26D6C485AA2ECFE0301015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA2
-6E5AA36E5AA26E5AA230297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000
-A26D6D7E000160A26D6E13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2
-913AE00E1FE00F011F160E17F09126F01C0F131E010F161C033C13F8902707F838075BA2
-037813FC902703FC70035BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA3
-6EC76CC8FCA2023E80021E141EA242297FA845>I<3803FF80000F13F0381F01FC383F80
-FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E
-13DF393F839FFC381FFE0F3803FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EF
-FF809038FE07E09038F803F09038F001F89038E000FCA2157EA2157FA8157EA315FCA290
-38F001F89038F803F090389C0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801
-FFFC3803F03E380FC07FEA1F80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB
-03801380001FEB0700380FE00E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A3
-1407ACEB3F873801FFF73807F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27E
-A2381F800F380FC01F3907E07FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF0
-3803E07C380F803E001F7F130048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127E
-A2127F6CEB01C07E390F8003803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I<
-EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A338
-7FFF80A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003E
-EB3E10007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC12
-38A2123C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007C
-EB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC
-147E9038E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA320
-2A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120F
-B3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108
-D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200
-01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1
-FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25
->I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB03F0A300
-FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907F07F003801FFFC38003F
-E01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC
-140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80
-9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13
-D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78
-00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC
-130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0
-A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801
-FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF
-3801FFC738007F87201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0
-A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5A
-A26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8
-EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F14
-38EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I<
-39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A
-130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F
-39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EB
-FC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D
-5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23
->I E
+A33803FC00B3B1B512F0A314297EA819>I<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0
+139F80EB8FF8EB87FCEB83FEEB81FF01801380147F15C0EC3FE0EC1FF0EC0FF8EC07FC14
+0315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F16F9ED07FDED03FF8181167FA2163F16
+1F160F1607D8FFFE14031601A230297EA835>78 D<B612F815FF16C03A03FC003FE0ED07
+F0ED03F816FC150116FEA716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B5
+12F0A327297EA82E>80 D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E
+4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA2
+1503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>82 D<9038FF80600003EBF0E0
+000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F
+FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0
+1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8
+25>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED07007F0000150E137F6D143CD91F
+C05B90390FF003F06DB55A01001480DA1FFCC7FC2F297EA834>85
+D<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B017F140E80013F
+5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301015CECFF076D
+91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230297FA833>I<B5
+3CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C604B1380
+02801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F09126F01C
+0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA2913AFEE001
+FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141EA242297F
+A845>I<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801
+FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B
+7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F8
+9038E000FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C0FE090380F
+FF80390E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A2
+48133E007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C
+3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807F03F380FC0
+0F381F8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FF
+E738007F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F130048EB0F80
+127E15C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003803907C007
+003803F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC7FEA03F813
+F01207143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<9038FF80F000
+03EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E
+6C137C380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C
+14F0121F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512
+0038007FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EB
+E80701F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0
+A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3
+120FB3B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0
+C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFF
+E0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013
+D0A213E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390FC01F80391F
+800FC0393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC039
+0FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFE1FE9038EFFF809038FE
+0FE0390FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013
+F89038F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>
+I<38FFC1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>
+114 D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14
+C06C13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038
+E7FFC000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380F
+E000AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A300
+0F1307B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FF
+A3390FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0E
+A2149EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B
+0FE00FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC
+2600FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C
+5AA2EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F00
+3801FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038
+F03F803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA339
+0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214
+9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E13
+1C5BEA74F0EA3FE0EA0F8020277F9A23>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmtt10 10.95 75
-/Fn 75 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
+%DVIPSBitmapFont: Fo cmtt10 10.95 76
+/Fo 76 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
 D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5
 12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18>
 I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F
@@ -589,8 +596,8 @@
 A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65
 D<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114
 C01303EB0F80387FFF00485AEA7FF8141C7F9B18>68 D<B512F0A3381C0070A41400A213
-0EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F8A3381C0038
-A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<387F07F038FF
+0EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F0A3381C0070
+A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0A3141C7E9B18>I<387F07F038FF
 8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18
 >72 D<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<EAFFC0
 A3001CC7FCB114E0A5B5FCA3131C7E9B18>76 D<387E07F038FF0FF8387F07F0381D81C0
@@ -624,34 +631,36 @@
 0070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE12
 7E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17
 1C809B18>I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C
-18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>108 D<38F9C1C038FFF7F013FF383E3E
-38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13
-C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0F
-FE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C0780EA3E
-0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E01380EB00
-70120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C
-5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2
-EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38
-FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I<
-EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE0
-03A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA23803
-8000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E
-07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8
-007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A213701514
-7F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380
-A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039E
-EA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F800
-7F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2
-EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC
-121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485A
-EA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB780013E0
-AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>I<126012
-F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0
-005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA
-60C00F067C9B18>I E
+18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA
+0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>107 D<EAFFC0A31201B3A4B51280
+A3111C7D9B18>I<38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E
+7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7
+FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A2
+38E000E0A5EAF001007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318
+>I<EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013
+C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FB
+EA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3
+EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060
+EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A300
+7CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F0
+11147D9318>I<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C
+1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C
+13FE3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A33807
+0700A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F13073838
+00E0A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F93
+18>I<387F8FF0139F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DC
+EA039E138EEA0707000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000
+FF13F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013
+DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2
+387001E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512
+F0A314147F9318>I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E012
+00AB1378EB7FE0131F130713247E9F18>I<126012F0B3B012600424769F18>I<127CB4FC
+13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E
+9F18>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA60C00F067C9B18>I
+E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmr10 10.95 75
-/Fo 75 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
+%DVIPSBitmapFont: Fp cmr10 10.95 74
+/Fp 74 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
 B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701
 A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07
 00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903
@@ -664,7 +673,7 @@
 5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44
 D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<EA03F0EA0E1C487EEA1806
 EA380738700380A400F013C0AD00701380A3EA780700381300EA1806EA1C0E6C5AEA03F0
-121F7E9D17>48 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>I<EA03F0
+121F7E9D17>48 D<13801203120F12F31203B3A6EA07C0EA7FFE0F1E7C9D17>I<EA03F0
 EA0C1CEA100E487E00401380128000F013C0EAF803A3EA200712001480A2EB0F00130E5B
 5B5B13605B485A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E9D17>I<EA03F0
 EA0C1CEA100EEA200F007813801307A2EA380F12001400A2131E131C1370EA07F0EA003C
@@ -692,77 +701,76 @@
 7C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F9E23>I<B61280380F000F14
 031401140015C01540A314401500A214C0130113FF130113001440A3EC0020A31540A315
 C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780071401A2140015C01540A4EC20
-00A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<90380FE01090
-38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814
-00A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E002309038380C
-1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF8
-1D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<3807FFC038003E00131EB3A3
-122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E17>I<EAFFF8EA0F8090C7FC
-B21402A414061404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2
-D805C0130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB
-0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003
-E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F014
-78A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB703838
-01C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F814
-7CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C1480390380070038
-01E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580
-A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48
-487E39070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147C
-A900781478007C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017
-003801D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E
-9F23>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A2
-80143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F040
-380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC0007
-1380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA
-81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410
-A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB
-01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F8000
-F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804A2
-6D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF03B
-1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F014
-10D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D00
-0F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0B3
-B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB85CEAFC
-7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<12081210
-1220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 D<EA1FE0EA3030EA781813
-1CEA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83C0
-14147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6
-147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA1C
-0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F811147F
-9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270A2
-1238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB03
-8012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<13
-7CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803
-E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA
-3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC0014
-1F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F
-19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA
-00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I<
-121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C
-131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F
-0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021
-147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8
-EA070E381C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C0380
-38070E00EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478
-A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801
-F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA07
-09EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFF
-C00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA
-003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120E
-A2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA
-1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380
-A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF
-9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A23903886100
-1471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03
-C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA
-060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13
-C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF0
-80A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00
-E0120113C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314>
-I E
+00A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<90380FE02090
+387818609038E004E03803800238070001481300001E1460A25A1520127C127800F81400
+A7EC7FFCEC03E000781301127C123CA27EA27E7E380380023900E0046090387818209038
+0FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF81D1F7E
+9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<EAFFF8EA0F8090C7FCB21402A41406
+1404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2D805C0130BA2
+D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB0384A2EB01C8
+A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0B
+C0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2143C141E
+A2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB70383801C00E48487E
+39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900781478
+007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E380070
+38EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F00141E
+147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48487E39070003
+804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147CA90078147800
+7C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017003801D01E39
+00783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E9F23>I<B512
+E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814
+3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>I<38
+03F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4
+FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C6
+0300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000
+801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3
+A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE39
+1F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB
+7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF8
+1FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC
+19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090
+383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA2
+12C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB8
+5CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<12
+0812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96
+D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313
+1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00
+C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F
+19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C
+0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112
+381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA
+0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA
+01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010
+20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33
+E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13
+C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212
+1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F
+9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61
+80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0
+EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC
+121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200
+1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF
+8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070
+13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180
+14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC
+A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270
+12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18
+EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000
+127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F
+9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F
+9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8
+383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3
+132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807
+04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F
+9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013
+7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I<
+38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8
+A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260
+EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006
+130EEAFFFE10147F9314>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fp cmbx12 20.736 13
-/Fp 13 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F
+%DVIPSBitmapFont: Fq cmbx12 20.736 13
+/Fq 13 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F
 010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48
 5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F
 DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0
@@ -811,824 +819,838 @@
 
 %%EndSetup
 %%Page: 1 1
-1 0 bop 75 693 a Fp(GNU)33 b(History)f(Library)p 75 743
-1800 17 v 960 791 a Fo(Edition)16 b(4.1,)e(for)h Fn(History)f(Library)g
-Fo(V)l(ersion)i(4.1.)1609 845 y(Jan)o(uary)f(2000)75
-2467 y Fm(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23
-b(Soft)n(w)n(are)f(F)-6 b(oundation)75 2534 y(Chet)22
-b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n
-(ersit)n(y)p 75 2570 1800 9 v eop
+1 0 bop 75 659 a Fq(GNU)33 b(History)f(Library)p 75 709
+1800 17 v 960 757 a Fp(Edition)16 b(4.3,)e(for)h Fo(History)f(Library)g
+Fp(V)l(ersion)i(4.3.)1643 811 y(Marc)o(h)e(2002)75 2467
+y Fn(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)
+-6 b(oundation)75 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6
+b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570
+1800 9 v eop
 %%Page: 2 2
-2 1 bop 75 250 a Fo(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f
+2 1 bop 75 217 a Fp(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f
 (GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o
-(vides)h(a)75 305 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g
+(vides)h(a)75 271 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g
 (recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75
-373 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
-(oundation)75 427 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75
-482 y(Boston,)d(MA)h(02111)f(USA)75 549 y(P)o(ermission)j(is)f(gran)o
+339 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
+(oundation)75 394 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75
+448 y(Boston,)d(MA)h(02111)f(USA)75 516 y(P)o(ermission)j(is)f(gran)o
 (ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f
-(this)h(man)o(ual)f(pro)o(vided)h(the)75 604 y(cop)o(yrigh)o(t)e
+(this)h(man)o(ual)f(pro)o(vided)h(the)75 570 y(cop)o(yrigh)o(t)e
 (notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h
-(on)f(all)h(copies.)75 671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
+(on)f(all)h(copies.)75 638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
 (cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h
-(man)o(ual)g(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h
+(man)o(ual)g(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h
 (cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g
-(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g
+(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g
 (of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
-848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
+814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
 (distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
-g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
+g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
 (for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
-(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
+(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
 (translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are)
 d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289
-2661 y Fl(\015)i Fo(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+2661 y Fm(\015)h Fp(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l
 (oundation,)h(Inc.)p eop
 %%Page: 1 3
-1 2 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
-(ely)1007 b(1)75 183 y Fk(1)41 b(Using)26 b(History)h(In)n(teractiv)n
-(ely)137 317 y Fo(This)16 b(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h
-(use)g(the)g(GNU)g(History)g(Library)h(in)o(teractiv)o(ely)l(,)g(from)e
-(a)h(user's)75 372 y(standp)q(oin)o(t.)35 b(It)20 b(should)g(b)q(e)h
-(considered)h(a)d(user's)h(guide.)35 b(F)l(or)19 b(information)h(on)g
-(using)h(the)f(GNU)75 427 y(History)d(Library)h(in)h(y)o(our)e(o)o(wn)g
-(programs,)f(see)i(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],)
-75 482 y(page)e(5.)75 625 y Fm(1.1)33 b(History)22 b(Expansion)137
-727 y Fo(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h
+1 2 bop 75 -58 a Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
+(ely)1007 b(1)75 149 y Fl(1)41 b(Using)26 b(History)h(In)n(teractiv)n
+(ely)137 289 y Fp(This)17 b(c)o(hapter)g(describ)q(es)h(ho)o(w)e(to)g
+(use)h(the)g Fk(gnu)f Fp(History)g(Library)h(in)o(teractiv)o(ely)l(,)h
+(from)e(a)g(user's)75 344 y(standp)q(oin)o(t.)38 b(It)21
+b(should)h(b)q(e)g(considered)g(a)f(user's)g(guide.)38
+b(F)l(or)21 b(information)g(on)g(using)h(the)f Fk(gnu)75
+398 y Fp(History)c(Library)h(in)h(y)o(our)e(o)o(wn)g(programs,)f(see)i
+(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],)75
+453 y(page)e(5.)75 600 y Fn(1.1)33 b(History)22 b(Expansion)137
+704 y Fp(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h
 (expansion)h(feature)e(that)h(is)g(similar)h(to)e(the)h(history)75
-782 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fn(csh)p Fo(.)18
+759 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fo(csh)p Fp(.)18
 b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e(used)h(to)g
-(manipulate)h(the)f(history)75 836 y(information.)137
-909 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i
+(manipulate)h(the)f(history)75 814 y(information.)137
+888 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i
 (history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75
-964 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o
+943 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o
 (ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75
-1019 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f
-(quic)o(kly)l(.)137 1092 y(History)j(expansion)i(tak)o(es)d(place)i(in)
+998 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f
+(quic)o(kly)l(.)137 1072 y(History)j(expansion)i(tak)o(es)d(place)i(in)
 h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i
-(whic)o(h)f(line)h(from)75 1147 y(the)h(history)f(list)i(should)g(b)q
+(whic)o(h)f(line)h(from)75 1127 y(the)h(history)f(list)i(should)g(b)q
 (e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f
-(select)i(p)q(ortions)e(of)75 1202 y(that)15 b(line)i(for)d(inclusion)k
+(select)i(p)q(ortions)e(of)75 1182 y(that)15 b(line)i(for)d(inclusion)k
 (in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e
-(the)g(history)g(is)h(called)h(the)75 1256 y Fj(ev)o(en)o(t)p
-Fo(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted)
-h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fo(.)i(V)l(arious)c
-Fj(mo)q(di\014ers)75 1311 y Fo(are)i(a)o(v)m(ailable)i(to)e(manipulate)
+(the)g(history)g(is)h(called)h(the)75 1237 y Fj(ev)o(en)o(t)p
+Fp(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted)
+h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fp(.)i(V)l(arious)c
+Fj(mo)q(di\014ers)75 1292 y Fp(are)i(a)o(v)m(ailable)i(to)e(manipulate)
 i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o
-(to)h(w)o(ords)e(in)j(the)e(same)75 1366 y(fashion)c(that)e(Bash)i(do)q
+(to)h(w)o(ords)e(in)j(the)e(same)75 1346 y(fashion)c(that)e(Bash)i(do)q
 (es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes)
-h(are)f(considered)h(one)g(w)o(ord.)75 1421 y(History)18
+h(are)f(considered)h(one)g(w)o(ord.)75 1401 y(History)18
 b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g
-(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1475
-y(whic)o(h)d(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)75
-1599 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137
-1701 y Fo(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f
+(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1456
+y(whic)o(h)d(is)g(`)p Fo(!)p Fp(')e(b)o(y)h(default.)75
+1583 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137
+1687 y Fp(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f
 (a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75
-1789 y Fn(!)216 b Fo(Start)16 b(a)g(history)h(substitution,)g(except)h
+1777 y Fo(!)216 b Fp(Start)16 b(a)g(history)h(substitution,)g(except)h
 (when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315
-1844 y(the)e(line,)i(`)p Fn(=)p Fo(')d(or)h(`)p Fn(\()p
-Fo('.)75 1929 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i
-Fj(n)p Fo(.)75 2015 y Fn(!-)p Fj(n)167 b Fo(Refer)16
-b(to)e(the)i(command)f Fj(n)g Fo(lines)i(bac)o(k.)75
-2100 y Fn(!!)192 b Fo(Refer)16 b(to)e(the)i(previous)f(command.)20
-b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fn(!-1)p Fo('.)75
-2186 y Fn(!)p Fj(string)102 b Fo(Refer)16 b(to)e(the)i(most)e(recen)o
-(t)h(command)g(starting)g(with)g Fj(string)p Fo(.)75
-2271 y Fn(!?)p Fj(string)t Fn([?])315 2326 y Fo(Refer)i(to)f(the)h
+1832 y(the)e(line,)i(`)p Fo(=)p Fp(')d(or)h(`)p Fo(\()p
+Fp('.)75 1919 y Fo(!)p Fj(n)191 b Fp(Refer)15 b(to)f(command)h(line)i
+Fj(n)p Fp(.)75 2006 y Fo(!-)p Fj(n)167 b Fp(Refer)15
+b(to)f(the)i(command)f Fj(n)g Fp(lines)i(bac)o(k.)75
+2094 y Fo(!!)192 b Fp(Refer)15 b(to)f(the)i(previous)f(command.)20
+b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fo(!-1)p Fp('.)75
+2181 y Fo(!)p Fj(string)102 b Fp(Refer)15 b(to)f(the)i(most)e(recen)o
+(t)h(command)g(starting)g(with)g Fj(string)p Fp(.)75
+2268 y Fo(!?)p Fj(string)t Fo([?])315 2323 y Fp(Refer)h(to)g(the)h
 (most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p
-Fo(.)25 b(The)17 b(trailing)g(`)p Fn(?)p Fo(')f(ma)o(y)g(b)q(e)315
-2381 y(omitted)f(if)h(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f
-(immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fn(^)p
-Fj(string1)t Fn(^)p Fj(string2)t Fn(^)315 2521 y Fo(Quic)o(k)i
-(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h
-Fj(string1)i Fo(with)e Fj(string2)p Fo(.)315 2576 y(Equiv)m(alen)o(t)g
-(to)d Fn(!!:s/)p Fj(string1)t Fn(/)p Fj(string2)t Fn(/)p
-Fo(.)75 2661 y Fn(!#)192 b Fo(The)15 b(en)o(tire)h(command)f(line)i(t)o
+Fp(.)25 b(The)17 b(trailing)g(`)p Fo(?)p Fp(')f(ma)o(y)g(b)q(e)315
+2377 y(omitted)f(if)h(the)f Fj(string)k Fp(is)d(follo)o(w)o(ed)f
+(immediately)i(b)o(y)e(a)g(newline.)75 2464 y Fo(^)p
+Fj(string1)t Fo(^)p Fj(string2)t Fo(^)315 2519 y Fp(Quic)o(k)i
+(Substitution.)23 b(Rep)q(eat)16 b(the)g(last)f(command,)h(replacing)h
+Fj(string1)i Fp(with)e Fj(string2)p Fp(.)315 2574 y(Equiv)m(alen)o(t)g
+(to)d Fo(!!:s/)p Fj(string1)t Fo(/)p Fj(string2)t Fo(/)p
+Fp(.)75 2661 y Fo(!#)192 b Fp(The)15 b(en)o(tire)h(command)f(line)i(t)o
 (yp)q(ed)f(so)e(far.)p eop
 %%Page: 2 4
-2 3 bop 75 -58 a Fo(2)1347 b(GNU)15 b(History)g(Library)75
-183 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279
-y Fo(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o
-(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fn(:)p
-Fo(')e(separates)h(the)75 334 y(ev)o(en)o(t)j(sp)q(eci\014cation)h
+2 3 bop 75 -58 a Fp(2)1347 b(GNU)15 b(History)g(Library)75
+149 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 247
+y Fp(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o
+(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fo(:)p
+Fp(')e(separates)h(the)75 302 y(ev)o(en)o(t)j(sp)q(eci\014cation)h
 (from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h
-(omitted)g(if)g(the)g(w)o(ord)f(designator)75 389 y(b)q(egins)f(with)g
-(a)e(`)p Fn(^)p Fo(',)h(`)p Fn($)p Fo(',)f(`)p Fn(*)p
-Fo(',)g(`)p Fn(-)p Fo(',)g(or)h(`)p Fn(\045)p Fo('.)24
+(omitted)g(if)g(the)g(w)o(ord)f(designator)75 357 y(b)q(egins)f(with)g
+(a)e(`)p Fo(^)p Fp(',)h(`)p Fo($)p Fp(',)f(`)p Fo(*)p
+Fp(',)g(`)p Fo(-)p Fp(',)g(or)h(`)p Fo(\045)p Fp('.)24
 b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i
-(of)e(the)g(line,)75 444 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h
+(of)e(the)g(line,)75 411 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h
 (denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i
-(in)o(to)f(the)g(curren)o(t)f(line)75 498 y(separated)c(b)o(y)g(single)
-i(spaces.)137 574 y(F)l(or)e(example,)75 653 y Fn(!!)192
-b Fo(designates)18 b(the)g(preceding)i(command.)28 b(When)18
+(in)o(to)f(the)g(curren)o(t)f(line)75 466 y(separated)c(b)o(y)g(single)
+i(spaces.)137 535 y(F)l(or)e(example,)75 616 y Fo(!!)192
+b Fp(designates)18 b(the)g(preceding)i(command.)28 b(When)18
 b(y)o(ou)g(t)o(yp)q(e)g(this,)h(the)f(preceding)h(com-)315
-708 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 787 y Fn(!!:$)144
-b Fo(designates)12 b(the)f(last)g(argumen)o(t)f(of)h(the)g(preceding)i
+671 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 752 y Fo(!!:$)144
+b Fp(designates)12 b(the)f(last)g(argumen)o(t)f(of)h(the)g(preceding)i
 (command.)19 b(This)11 b(ma)o(y)g(b)q(e)h(shortened)315
-842 y(to)j Fn(!$)p Fo(.)75 921 y Fn(!fi:2)120 b Fo(designates)15
+807 y(to)j Fo(!$)p Fp(.)75 887 y Fo(!fi:2)120 b Fp(designates)15
 b(the)g(second)g(argumen)o(t)f(of)g(the)h(most)f(recen)o(t)g(command)h
-(starting)f(with)h(the)315 976 y(letters)g Fn(fi)p Fo(.)137
-1055 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1134
-y Fn(0)h(\(zero\))57 b Fo(The)15 b Fn(0)p Fo(th)g(w)o(ord.)20
+(starting)f(with)h(the)315 942 y(letters)g Fo(fi)p Fp(.)137
+1024 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1105
+y Fo(0)h(\(zero\))57 b Fp(The)15 b Fo(0)p Fp(th)g(w)o(ord.)20
 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g(the)f(command)g(w)o
-(ord.)75 1214 y Fj(n)215 b Fo(The)15 b Fj(n)p Fo(th)h(w)o(ord.)75
-1293 y Fn(^)216 b Fo(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o
-(ord)g(1.)75 1372 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)75
-1451 y Fn(\045)216 b Fo(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g
-(most)g(recen)o(t)g(`)p Fn(?)p Fj(string)t Fn(?)p Fo(')f(searc)o(h.)75
-1530 y Fj(x)p Fn(-)p Fj(y)168 b Fo(A)15 b(range)g(of)g(w)o(ords;)f(`)p
-Fn(-)p Fj(y)t Fo(')g(abbreviates)i(`)p Fn(0-)p Fj(y)t
-Fo('.)75 1610 y Fn(*)216 b Fo(All)15 b(of)f(the)f(w)o(ords,)g(except)i
-(the)f Fn(0)p Fo(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p
-Fn(1-$)p Fo('.)18 b(It)c(is)g(not)g(an)g(error)315 1664
-y(to)g(use)h(`)p Fn(*)p Fo(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f
+(ord.)75 1186 y Fj(n)215 b Fp(The)15 b Fj(n)p Fp(th)h(w)o(ord.)75
+1267 y Fo(^)216 b Fp(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o
+(ord)g(1.)75 1348 y Fo($)216 b Fp(The)15 b(last)h(argumen)o(t.)75
+1429 y Fo(\045)216 b Fp(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g
+(most)g(recen)o(t)g(`)p Fo(?)p Fj(string)t Fo(?)p Fp(')f(searc)o(h.)75
+1510 y Fj(x)p Fo(-)p Fj(y)168 b Fp(A)15 b(range)g(of)g(w)o(ords;)f(`)p
+Fo(-)p Fj(y)t Fp(')g(abbreviates)i(`)p Fo(0-)p Fj(y)t
+Fp('.)75 1591 y Fo(*)216 b Fp(All)15 b(of)f(the)f(w)o(ords,)g(except)i
+(the)f Fo(0)p Fp(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p
+Fo(1-$)p Fp('.)18 b(It)c(is)g(not)g(an)g(error)315 1645
+y(to)g(use)h(`)p Fo(*)p Fp(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f
 (in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g
-(in)315 1719 y(that)f(case.)75 1798 y Fj(x)s Fn(*)189
-b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')75 1878
-y Fj(x)p Fn(-)192 b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p
-Fo(')e(lik)o(e)i(`)p Fj(x)s Fn(*)p Fo(',)e(but)i(omits)f(the)g(last)g
-(w)o(ord.)137 1957 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h
+(in)315 1700 y(that)f(case.)75 1781 y Fj(x)s Fo(*)189
+b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p Fp(')75 1862
+y Fj(x)p Fo(-)192 b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p
+Fp(')e(lik)o(e)i(`)p Fj(x)s Fo(*)p Fp(',)e(but)i(omits)f(the)g(last)g
+(w)o(ord.)137 1943 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h
 (without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h
-(command)75 2012 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75
-2123 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2219 y Fo(After)10
+(command)75 1998 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75
+2113 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2210 y Fp(After)10
 b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g
 (sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75
-2274 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p
-Fn(:)p Fo('.)75 2353 y Fn(h)216 b Fo(Remo)o(v)o(e)15
-b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the)
-f(head.)75 2432 y Fn(t)216 b Fo(Remo)o(v)o(e)15 b(all)h(leading)h
+2265 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p
+Fo(:)p Fp('.)75 2346 y Fo(h)216 b Fp(Remo)o(v)o(e)14
+b(a)h(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the)
+f(head.)75 2427 y Fo(t)216 b Fp(Remo)o(v)o(e)14 b(all)i(leading)h
 (pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75
-2512 y Fn(r)216 b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g
-(the)g(form)g(`)p Fn(.)p Fj(su\016x)s Fo(',)f(lea)o(ving)i(the)f
-(basename.)75 2591 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f
-(trailing)h(su\016x.)75 2670 y Fn(p)216 b Fo(Prin)o(t)15
+2508 y Fo(r)216 b Fp(Remo)o(v)o(e)14 b(a)h(trailing)h(su\016x)f(of)g
+(the)g(form)g(`)p Fo(.)p Fj(su\016x)s Fp(',)f(lea)o(ving)i(the)f
+(basename.)75 2589 y Fo(e)216 b Fp(Remo)o(v)o(e)14 b(all)i(but)g(the)f
+(trailing)h(su\016x.)75 2670 y Fo(p)216 b Fp(Prin)o(t)15
 b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)p
 eop
 %%Page: 3 5
-3 4 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
-(ely)1007 b(3)75 183 y Fn(s/)p Fj(old)r Fn(/)p Fj(new)t
-Fn(/)315 238 y Fo(Substitute)17 b Fj(new)j Fo(for)c(the)h(\014rst)e(o)q
-(ccurrence)j(of)e Fj(old)i Fo(in)f(the)g(ev)o(en)o(t)f(line.)25
-b(An)o(y)16 b(delimiter)315 293 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g
-(of)f(`)p Fn(/)p Fo('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h
-(quoted)f(in)i Fj(old)g Fo(and)f Fj(new)k Fo(with)12
-b(a)315 348 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p
-Fn(&)p Fo(')e(app)q(ears)h(in)h Fj(new)p Fo(,)f(it)g(is)h(replaced)g(b)
-o(y)f Fj(old)p Fo(.)20 b(A)14 b(single)i(bac)o(kslash)315
-402 y(will)j(quote)e(the)h(`)p Fn(&)p Fo('.)25 b(The)17
+3 4 bop 75 -58 a Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
+(ely)1007 b(3)75 149 y Fo(s/)p Fj(old)r Fo(/)p Fj(new)t
+Fo(/)315 204 y Fp(Substitute)17 b Fj(new)j Fp(for)c(the)h(\014rst)e(o)q
+(ccurrence)j(of)e Fj(old)i Fp(in)f(the)g(ev)o(en)o(t)f(line.)25
+b(An)o(y)16 b(delimiter)315 259 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g
+(of)f(`)p Fo(/)p Fp('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h
+(quoted)f(in)i Fj(old)g Fp(and)f Fj(new)k Fp(with)12
+b(a)315 314 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p
+Fo(&)p Fp(')e(app)q(ears)h(in)h Fj(new)p Fp(,)f(it)g(is)h(replaced)g(b)
+o(y)f Fj(old)p Fp(.)20 b(A)14 b(single)i(bac)o(kslash)315
+369 y(will)j(quote)e(the)h(`)p Fo(&)p Fp('.)25 b(The)17
 b(\014nal)i(delimiter)g(is)f(optional)g(if)f(it)h(is)g(the)f(last)g(c)o
-(haracter)g(on)315 457 y(the)e(input)h(line.)75 537 y
-Fn(&)216 b Fo(Rep)q(eat)16 b(the)f(previous)h(substitution.)75
-617 y Fn(g)216 b Fo(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o
+(haracter)g(on)315 423 y(the)e(input)h(line.)75 503 y
+Fo(&)216 b Fp(Rep)q(eat)15 b(the)g(previous)h(substitution.)75
+583 y Fo(g)216 b Fp(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o
 (v)o(er)e(the)g(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20
-b(in)g(conjunction)315 671 y(with)c(`)p Fn(s)p Fo(',)d(as)i(in)h
-Fn(gs/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)p Fo(,)f(or)g(with)g(`)p
-Fn(&)p Fo('.)p eop
+b(in)g(conjunction)315 638 y(with)c(`)p Fo(s)p Fp(',)d(as)i(in)h
+Fo(gs/)p Fj(old)r Fo(/)p Fj(new)t Fo(/)p Fp(,)f(or)g(with)g(`)p
+Fo(&)p Fp('.)p eop
 %%Page: 4 6
-4 5 bop 75 -58 a Fo(4)1347 b(GNU)15 b(History)g(Library)p
+4 5 bop 75 -58 a Fp(4)1347 b(GNU)15 b(History)g(Library)p
 eop
 %%Page: 5 7
-5 6 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(5)75 183 y Fk(2)41 b(Programming)28 b(with)e(GNU)i
-(History)137 282 y Fo(This)16 b(c)o(hapter)e(describ)q(es)j(ho)o(w)d
-(to)g(in)o(terface)h(programs)e(that)h(y)o(ou)h(write)g(with)g(the)g
-(GNU)f(History)75 337 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g
+5 6 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(5)75 149 y Fl(2)41 b(Programming)28 b(with)e(GNU)i
+(History)137 269 y Fp(This)17 b(c)o(hapter)f(describ)q(es)i(ho)o(w)e
+(to)f(in)o(terface)i(programs)e(that)g(y)o(ou)h(write)g(with)h(the)f
+Fk(gnu)g Fp(History)75 324 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g
 (considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15
 b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75
-391 y(of)e(GNU)g(History)l(,)g(see)g(Chapter)g(1)g([Using)g(History)g
-(In)o(teractiv)o(ely],)h(page)f(1.)75 509 y Fm(2.1)33
-b(In)n(tro)r(duction)24 b(to)e(History)137 602 y Fo(Man)o(y)c(programs)
-g(read)h(input)g(from)f(the)h(user)g(a)f(line)j(at)d(a)g(time.)31
-b(The)19 b(GNU)g(History)f(library)75 656 y(is)k(able)g(to)e(k)o(eep)i
-(trac)o(k)e(of)h(those)g(lines,)j(asso)q(ciate)d(arbitrary)g(data)f
-(with)i(eac)o(h)f(line,)j(and)e(utilize)75 711 y(information)15
-b(from)g(previous)h(lines)h(in)f(comp)q(osing)f(new)h(ones.)137
-775 y(The)e(programmer)f(using)h(the)g(History)g(library)g(has)g(a)o(v)
-m(ailable)h(functions)g(for)e(remem)o(b)q(ering)h(lines)75
-830 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g(arbitrary)f(data)f
-(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d(the)i(list,)h(searc)o
-(hing)75 884 y(through)17 b(the)h(list)g(for)f(a)h(line)h(con)o
-(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o
-(y)e(line)i(in)75 939 y(the)c(list)i(directly)l(.)22
-b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fo(function)h(is)e
+379 y(of)e Fk(gnu)g Fp(History)l(,)g(see)g(Chapter)g(1)g([Using)g
+(History)g(In)o(teractiv)o(ely],)h(page)f(1.)75 509 y
+Fn(2.1)33 b(In)n(tro)r(duction)24 b(to)e(History)137
+607 y Fp(Man)o(y)11 b(programs)f(read)h(input)i(from)d(the)i(user)f(a)g
+(line)i(at)e(a)g(time.)19 b(The)12 b Fk(gnu)f Fp(History)g(library)h
+(is)g(able)75 661 y(to)i(k)o(eep)g(trac)o(k)g(of)g(those)g(lines,)i
+(asso)q(ciate)e(arbitrary)g(data)g(with)g(eac)o(h)h(line,)h(and)e
+(utilize)j(information)75 716 y(from)d(previous)i(lines)h(in)f(comp)q
+(osing)g(new)f(ones.)137 784 y(The)f(programmer)f(using)h(the)g
+(History)g(library)g(has)g(a)o(v)m(ailable)h(functions)g(for)e(remem)o
+(b)q(ering)h(lines)75 839 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g
+(arbitrary)f(data)f(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d
+(the)i(list,)h(searc)o(hing)75 894 y(through)17 b(the)h(list)g(for)f(a)
+h(line)h(con)o(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g
+(referencing)h(an)o(y)e(line)i(in)75 949 y(the)c(list)i(directly)l(.)22
+b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fp(function)h(is)e
 (a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75
-994 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g
-(programs.)137 1058 y(The)f(user)h(using)f(programs)f(written)h(with)g
+1003 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g
+(programs.)137 1072 y(The)f(user)h(using)f(programs)f(written)h(with)g
 (the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h
-(consisten)o(t)75 1112 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f
+(consisten)o(t)75 1126 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f
 (w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g
-(previous)75 1167 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f
+(previous)75 1181 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f
 (commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d
-(are)75 1222 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o
-(vided)g(b)o(y)g Fn(csh)p Fo(.)137 1286 y(If)f(the)g(programmer)f
-(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f
-(includes)j(some)c(history)75 1340 y(manipulation)j(b)o(y)e(default,)g
+(are)75 1236 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o
+(vided)g(b)o(y)g Fo(csh)p Fp(.)137 1304 y(If)f(the)g(programmer)f
+(desires,)h(he)g(can)g(use)g(the)g(Readline)h(library)l(,)g(whic)o(h)f
+(includes)j(some)c(history)75 1359 y(manipulation)j(b)o(y)e(default,)g
 (and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i
-(editing.)137 1404 y(Before)i(declaring)i(an)o(y)d(functions)i(using)g
+(editing.)137 1427 y(Before)i(declaring)i(an)o(y)d(functions)i(using)g
 (an)o(y)f(functionalit)o(y)h(the)f(History)g(library)h(pro)o(vides)f
-(in)75 1459 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should)
-i(include)g(the)f(\014le)g Fn(<readline/history.h>)d
-Fo(in)j(an)o(y)f(\014le)75 1513 y(that)d(uses)h(the)h(History)e
+(in)75 1482 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should)
+i(include)g(the)f(\014le)g Fo(<readline/history.h>)d
+Fp(in)j(an)o(y)f(\014le)75 1537 y(that)d(uses)h(the)h(History)e
 (library's)i(features.)18 b(It)12 b(supplies)i(extern)e(declarations)h
-(for)e(all)i(of)f(the)g(library's)75 1568 y(public)17
+(for)e(all)i(of)f(the)g(library's)75 1591 y(public)17
 b(functions)f(and)g(v)m(ariables,)g(and)f(declares)h(all)g(of)f(the)h
-(public)h(data)d(structures.)75 1686 y Fm(2.2)33 b(History)22
-b(Storage)137 1778 y Fo(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f
+(public)h(data)d(structures.)75 1722 y Fn(2.2)33 b(History)22
+b(Storage)137 1819 y Fp(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f
 (of)g(history)i(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h
-(declared)g(as)f(follo)o(ws:)195 1839 y Fn(typedef)23
-b(struct)g(_hist_entry)f({)243 1891 y(char)h(*line;)243
-1943 y(char)g(*data;)195 1995 y(})h(HIST_ENTRY;)137 2058
-y Fo(The)16 b(history)f(list)h(itself)g(migh)o(t)f(therefore)g(b)q(e)h
-(declared)g(as)195 2119 y Fn(HIST_ENTRY)22 b(**the_history_list;)137
-2183 y Fo(The)16 b(state)e(of)h(the)g(History)g(library)h(is)g
-(encapsulated)g(in)o(to)f(a)g(single)i(structure:)195
-2243 y Fn(/*)24 b(A)f(structure)g(used)g(to)h(pass)f(the)h(current)f
-(state)g(of)g(the)h(history)f(stuff)g(around.)g(*/)p
-2033 2253 21 42 v 195 2295 a(typedef)g(struct)g(_hist_state)f({)243
-2347 y(HIST_ENTRY)g(**entries;)214 b(/*)23 b(Pointer)g(to)h(the)f
-(entries)g(themselves.)f(*/)243 2399 y(int)h(offset;)453
-b(/*)23 b(The)h(location)e(pointer)h(within)g(this)h(array.)f(*/)p
-2033 2409 V 243 2451 a(int)g(length;)453 b(/*)23 b(Number)g(of)h
-(elements)f(within)g(this)g(array.)g(*/)p 1985 2461 V
-243 2503 a(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f(allocated)g
-(to)g(this)h(array.)f(*/)p 2057 2513 V 243 2555 a(int)g(flags;)195
-2606 y(})h(HISTORY_STATE;)137 2670 y Fo(If)16 b(the)f(\015ags)g(mem)o
-(b)q(er)g(includes)j Fn(HS_STIFLED)p Fo(,)13 b(the)i(history)h(has)f(b)
-q(een)h(sti\015ed.)p eop
+(declared)g(as)f(follo)o(ws:)195 1885 y Fo(typedef)23
+b(void)g(*histdata_t;)195 1988 y(typedef)g(struct)g(_hist_entry)f({)243
+2040 y(char)h(*line;)243 2092 y(histdata_t)f(data;)195
+2144 y(})i(HIST_ENTRY;)137 2212 y Fp(The)16 b(history)f(list)h(itself)g
+(migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2277
+y Fo(HIST_ENTRY)22 b(**the_history_list;)137 2345 y Fp(The)16
+b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g(in)o(to)f
+(a)g(single)i(structure:)195 2411 y Fo(/*)219 2462 y(*)24
+b(A)f(structure)g(used)g(to)h(pass)f(around)g(the)h(current)f(state)g
+(of)g(the)h(history.)219 2514 y(*/)195 2566 y(typedef)f(struct)g
+(_hist_state)f({)243 2618 y(HIST_ENTRY)g(**entries;)h(/*)g(Pointer)g
+(to)h(the)f(entries)g(themselves.)g(*/)243 2670 y(int)g(offset;)262
+b(/*)23 b(The)h(location)f(pointer)f(within)h(this)h(array.)f(*/)p
+eop
 %%Page: 6 8
-6 7 bop 75 -58 a Fo(6)1347 b(GNU)15 b(History)g(Library)75
-183 y Fm(2.3)33 b(History)22 b(F)-6 b(unctions)137 278
-y Fo(This)21 b(section)g(describ)q(es)h(the)f(calling)h(sequence)g(for)
-e(the)g(v)m(arious)h(functions)g(presen)o(t)g(in)g(GNU)75
-333 y(History)l(.)75 441 y Fi(2.3.1)30 b(Initializing)20
-b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fo(This)e(section)g
-(describ)q(es)h(functions)f(used)g(to)e(initialize)21
-b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75
-591 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g
-(functions)h(in)g(y)o(our)f(program.)1650 679 y(F)l(unction)-1749
-b Fh(void)20 b Fg(using)p 333 679 18 3 v 20 w(history)j
-Ff(\(\))195 734 y Fo(Begin)18 b(a)f(session)h(in)g(whic)o(h)g(the)g
-(history)f(functions)h(migh)o(t)f(b)q(e)h(used.)27 b(This)18
-b(initializes)195 788 y(the)d(in)o(teractiv)o(e)h(v)m(ariables.)1650
-877 y(F)l(unction)-1749 b Fh(HISTORY_STATE)21 b(*)e Fg(history)p
-657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877
-V 21 w(state)j Ff(\(\))195 931 y Fo(Return)16 b(a)f(structure)g
-(describing)i(the)e(curren)o(t)g(state)f(of)h(the)g(input)i(history)l
-(.)1650 1019 y(F)l(unction)-1749 b Fh(void)20 b Fg(history)p
-377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019
-V 21 w(state)j Ff(\()p Fn(HISTORY_STATE)13 b(*state)p
-Ff(\))195 1074 y Fo(Set)i(the)h(state)e(of)h(the)g(history)g(list)h
-(according)g(to)e Fj(state)p Fo(.)75 1182 y Fi(2.3.2)30
-b(History)20 b(List)h(Managemen)n(t)137 1277 y Fo(These)11
+6 7 bop 75 -58 a Fp(6)1347 b(GNU)15 b(History)g(Library)243
+149 y Fo(int)23 b(length;)262 b(/*)23 b(Number)g(of)h(elements)f
+(within)g(this)g(array.)g(*/)243 201 y(int)g(size;)310
+b(/*)23 b(Number)g(of)h(slots)f(allocated)g(to)g(this)h(array.)f(*/)243
+253 y(int)g(flags;)195 305 y(})h(HISTORY_STATE;)137 372
+y Fp(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j
+Fo(HS_STIFLED)p Fp(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)75
+498 y Fn(2.3)33 b(History)22 b(F)-6 b(unctions)137 593
+y Fp(This)13 b(section)g(describ)q(es)h(the)e(calling)i(sequence)g(for)
+e(the)g(v)m(arious)h(functions)g(exp)q(orted)f(b)o(y)h(the)f
+Fk(gnu)75 648 y Fp(History)j(library)l(.)75 758 y Fi(2.3.1)30
+b(Initializing)20 b(History)h(and)f(State)g(Managemen)n(t)137
+853 y Fp(This)e(section)g(describ)q(es)h(functions)f(used)g(to)e
+(initialize)21 b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75
+908 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g
+(functions)h(in)g(y)o(our)f(program.)1762 1021 y(F)l(unction)-1861
+b Fh(void)20 b Fg(using)p 333 1021 18 3 v 20 w(history)j
+Ff(\()p Fo(void)p Ff(\))195 1075 y Fp(Begin)e(a)f(session)g(in)h(whic)o
+(h)g(the)f(history)g(functions)g(migh)o(t)g(b)q(e)h(used.)34
+b(This)21 b(initializes)i(the)195 1130 y(in)o(teractiv)o(e)16
+b(v)m(ariables.)1762 1243 y(F)l(unction)-1861 b Fh(HISTORY_STATE)21
+b(*)e Fg(history)p 657 1243 V 21 w(get)p 755 1243 V 21
+w(history)p 951 1243 V 21 w(state)j Ff(\()p Fo(void)p
+Ff(\))195 1298 y Fp(Return)15 b(a)g(structure)g(describing)i(the)e
+(curren)o(t)g(state)f(of)h(the)g(input)i(history)l(.)1762
+1411 y(F)l(unction)-1861 b Fh(void)20 b Fg(history)p
+377 1411 V 20 w(set)p 468 1411 V 21 w(history)p 664 1411
+V 21 w(state)j Ff(\()p Fo(HISTORY_STATE)13 b(*state)p
+Ff(\))195 1466 y Fp(Set)i(the)h(state)e(of)h(the)g(history)g(list)h
+(according)g(to)e Fj(state)p Fp(.)75 1575 y Fi(2.3.2)30
+b(History)20 b(List)h(Managemen)n(t)137 1671 y Fp(These)11
 b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f
-(list,)i(or)f(set)f(parameters)g(managing)75 1332 y(the)15
-b(list)h(itself.)1650 1420 y(F)l(unction)-1749 b Fh(void)20
-b Fg(add)p 294 1420 V 20 w(history)j Ff(\()p Fn(char)14
-b(*string)p Ff(\))195 1475 y Fo(Place)i Fj(string)j Fo(at)c(the)g(end)i
-(of)d(the)i(history)f(list.)22 b(The)15 b(asso)q(ciated)h(data)f
-(\014eld)h(\(if)g(an)o(y\))e(is)195 1530 y(set)h(to)g
-Fn(NULL)p Fo(.)1650 1618 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
-b(*)e Fg(remo)n(v)n(e)p 584 1618 V 20 w(history)k Ff(\()p
-Fn(int)14 b(which)p Ff(\))195 1673 y Fo(Remo)o(v)o(e)g(history)g(en)o
-(try)f(at)h(o\013set)f Fj(whic)o(h)h Fo(from)g(the)g(history)l(.)19
-b(The)14 b(remo)o(v)o(ed)g(elemen)o(t)g(is)195 1727 y(returned)i(so)e
-(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)h
-(structure.)1650 1816 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
-b(*)e Fg(replace)p 580 1816 V 22 w(history)p 777 1816
-V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)283
-1870 y(*line,)g(char)g(*data)p Ff(\))195 1925 y Fo(Mak)o(e)f(the)h
-(history)f(en)o(try)g(at)g(o\013set)g Fj(whic)o(h)h Fo(ha)o(v)o(e)g
-Fj(line)k Fo(and)13 b Fj(data)p Fo(.)19 b(This)14 b(returns)g(the)f
-(old)195 1980 y(en)o(try)k(so)g(y)o(ou)g(can)g(disp)q(ose)i(of)d(the)i
-(data.)25 b(In)18 b(the)f(case)h(of)f(an)g(in)o(v)m(alid)i
-Fj(whic)o(h)p Fo(,)g(a)e Fn(NULL)195 2035 y Fo(p)q(oin)o(ter)f(is)f
-(returned.)1650 2123 y(F)l(unction)-1749 b Fh(void)20
-b Fg(clear)p 320 2123 V 21 w(history)j Ff(\(\))195 2178
-y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f
-(en)o(tries.)1650 2266 y(F)l(unction)-1749 b Fh(void)20
-b Fg(sti\015e)p 320 2266 V 21 w(history)j Ff(\()p Fn(int)14
-b(max)p Ff(\))195 2321 y Fo(Sti\015e)i(the)f(history)h(list,)f(remem)o
-(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fo(en)o(tries.)1650
-2409 y(F)l(unction)-1749 b Fh(int)20 b Fg(unsti\015e)p
-358 2409 V 21 w(history)i Ff(\(\))195 2463 y Fo(Stop)e(sti\015ing)i
-(the)f(history)l(.)36 b(This)21 b(returns)g(the)f(previous)i(amoun)o(t)
-e(the)g(history)h(w)o(as)195 2518 y(sti\015ed.)g(The)15
-b(v)m(alue)i(is)e(p)q(ositiv)o(e)i(if)e(the)g(history)h(w)o(as)e
-(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.)1650
-2606 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351
-2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Ff(\(\))195
-2661 y Fo(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,)
-g(zero)f(if)g(it)h(is)g(not.)p eop
+(list,)i(or)f(set)f(parameters)g(managing)75 1725 y(the)15
+b(list)h(itself.)1762 1838 y(F)l(unction)-1861 b Fh(void)20
+b Fg(add)p 294 1838 V 20 w(history)j Ff(\()p Fo(const)14
+b(char)g(*string)p Ff(\))195 1893 y Fp(Place)i Fj(string)i
+Fp(at)d(the)g(end)h(of)e(the)h(history)g(list.)21 b(The)15
+b(asso)q(ciated)g(data)g(\014eld)h(\(if)f(an)o(y\))f(is)i(set)f(to)195
+1948 y Fo(NULL)p Fp(.)1762 2061 y(F)l(unction)-1861 b
+Fh(HIST_ENTRY)21 b(*)e Fg(remo)n(v)n(e)p 584 2061 V 20
+w(history)k Ff(\()p Fo(int)14 b(which)p Ff(\))195 2115
+y Fp(Remo)o(v)o(e)22 b(history)g(en)o(try)h(at)f(o\013set)g
+Fj(whic)o(h)h Fp(from)f(the)h(history)l(.)43 b(The)23
+b(remo)o(v)o(ed)f(elemen)o(t)h(is)195 2170 y(returned)16
+b(so)e(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)
+h(structure.)1762 2283 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21
+b(*)e Fg(replace)p 580 2283 V 22 w(history)p 777 2283
+V 20 w(en)n(try)24 b Ff(\()p Fo(int)14 b(which,)g(const)h(char)283
+2338 y(*line,)f(histdata_t)g(data)p Ff(\))195 2393 y
+Fp(Mak)o(e)f(the)h(history)g(en)o(try)f(at)g(o\013set)g
+Fj(whic)o(h)i Fp(ha)o(v)o(e)e Fj(line)18 b Fp(and)c Fj(data)p
+Fp(.)19 b(This)14 b(returns)g(the)g(old)g(en)o(try)195
+2448 y(so)19 b(y)o(ou)f(can)i(disp)q(ose)g(of)e(the)i(data.)30
+b(In)20 b(the)f(case)g(of)g(an)g(in)o(v)m(alid)i Fj(whic)o(h)p
+Fp(,)g(a)d Fo(NULL)h Fp(p)q(oin)o(ter)g(is)195 2502 y(returned.)1762
+2615 y(F)l(unction)-1861 b Fh(void)20 b Fg(clear)p 320
+2615 V 21 w(history)j Ff(\()p Fo(void)p Ff(\))195 2670
+y Fp(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f
+(en)o(tries.)p eop
 %%Page: 7 9
-7 8 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(7)75 183 y Fi(2.3.3)30 b(Information)19
-b(Ab)r(out)i(the)f(History)h(List)137 279 y Fo(These)13
-b(functions)h(return)f(information)g(ab)q(out)f(the)h(en)o(tire)h
-(history)e(list)i(or)e(individual)k(list)e(en)o(tries.)1650
-371 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p
-605 371 18 3 v 21 w(list)24 b Ff(\(\))195 426 y Fo(Return)f(a)g
-Fn(NULL)f Fo(terminated)g(arra)o(y)g(of)g Fn(HIST_ENTRY)f
-Fo(whic)o(h)j(is)f(the)f(curren)o(t)h(input)195 481 y(history)l(.)j
-(Elemen)o(t)18 b(0)e(of)h(this)h(list)g(is)f(the)h(b)q(eginning)h(of)e
-(time.)26 b(If)17 b(there)g(is)h(no)f(history)l(,)195
-535 y(return)e Fn(NULL)p Fo(.)1650 627 y(F)l(unction)-1749
-b Fh(int)20 b Fg(where)p 325 627 V 20 w(history)j Ff(\(\))195
-682 y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history)
-g(elemen)o(t.)1650 773 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
-b(*)e Fg(curren)n(t)p 587 773 V 21 w(history)k Ff(\(\))195
-828 y Fo(Return)g(the)f(history)g(en)o(try)g(at)f(the)h(curren)o(t)g(p)
-q(osition,)j(as)c(determined)j(b)o(y)e Fn(where_)195
-883 y(history)14 b(\(\))p Fo(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try)
-g(there,)g(return)g(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)1650
-975 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(*)e Fg(history)p
-579 975 V 21 w(get)j Ff(\()p Fn(int)15 b(offset)p Ff(\))195
-1029 y Fo(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i
-Fj(o\013set)p Fo(,)e(starting)g(from)g Fn(history_base)p
-Fo(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g
-(if)g Fj(o\013set)h Fo(is)g(greater)e(than)h(the)h(history)f(length,)h
-(return)f(a)195 1139 y Fn(NULL)f Fo(p)q(oin)o(ter.)1650
-1231 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351
-1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Ff(\(\))195
-1285 y Fo(Return)c(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h
-(primary)h(history)f(en)o(tries)g(are)g(using.)29 b(This)195
-1340 y(function)16 b(returns)f(the)g(sum)h(of)e(the)i(lengths)f(of)g
-(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1452 y
+7 8 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(7)1762 149 y(F)l(unction)-1861 b Fh(void)20
+b Fg(sti\015e)p 320 149 18 3 v 21 w(history)j Ff(\()p
+Fo(int)14 b(max)p Ff(\))195 204 y Fp(Sti\015e)i(the)f(history)h(list,)f
+(remem)o(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fp(en)o(tries.)1762
+302 y(F)l(unction)-1861 b Fh(int)20 b Fg(unsti\015e)p
+358 302 V 21 w(history)i Ff(\()p Fo(void)p Ff(\))195
+357 y Fp(Stop)14 b(sti\015ing)g(the)g(history)l(.)20
+b(This)14 b(returns)f(the)h(previously-set)h(maxim)o(um)f(n)o(um)o(b)q
+(er)g(of)f(history)195 411 y(en)o(tries)h(\(as)e(set)i(b)o(y)f
+Fo(stifle_history\(\))p Fp(\).)k(The)c(v)m(alue)i(is)f(p)q(ositiv)o(e)g
+(if)g(the)g(history)f(w)o(as)f(sti\015ed,)195 466 y(negativ)o(e)j(if)h
+(it)f(w)o(asn't.)1762 564 y(F)l(unction)-1861 b Fh(int)20
+b Fg(history)p 351 564 V 20 w(is)p 409 564 V 21 w(sti\015ed)k
+Ff(\()p Fo(void)p Ff(\))195 619 y Fp(Returns)15 b(non-zero)g(if)h(the)f
+(history)g(is)h(sti\015ed,)g(zero)f(if)g(it)h(is)g(not.)75
+719 y Fi(2.3.3)30 b(Information)19 b(Ab)r(out)i(the)f(History)h(List)
+137 811 y Fp(These)13 b(functions)h(return)f(information)g(ab)q(out)f
+(the)h(en)o(tire)h(history)e(list)i(or)e(individual)k(list)e(en)o
+(tries.)1762 909 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21
+b(**)e Fg(history)p 605 909 V 21 w(list)24 b Ff(\()p
+Fo(void)p Ff(\))195 964 y Fp(Return)15 b(a)g Fo(NULL)f
+Fp(terminated)i(arra)o(y)e(of)h Fo(HIST_ENTRY)f(*)h Fp(whic)o(h)h(is)f
+(the)h(curren)o(t)f(input)h(history)l(.)195 1018 y(Elemen)o(t)g(0)f(of)
+f(this)i(list)g(is)g(the)f(b)q(eginning)i(of)e(time.)20
+b(If)c(there)f(is)h(no)f(history)l(,)g(return)g Fo(NULL)p
+Fp(.)1762 1116 y(F)l(unction)-1861 b Fh(int)20 b Fg(where)p
+325 1116 V 20 w(history)j Ff(\()p Fo(void)p Ff(\))195
+1171 y Fp(Returns)15 b(the)g(o\013set)f(of)h(the)g(curren)o(t)g
+(history)g(elemen)o(t.)1762 1268 y(F)l(unction)-1861
+b Fh(HIST_ENTRY)21 b(*)e Fg(curren)n(t)p 587 1268 V 21
+w(history)k Ff(\()p Fo(void)p Ff(\))195 1323 y Fp(Return)12
+b(the)h(history)f(en)o(try)g(at)g(the)g(curren)o(t)h(p)q(osition,)g(as)
+f(determined)i(b)o(y)e Fo(where_history\(\))p Fp(.)195
+1378 y(If)j(there)h(is)f(no)h(en)o(try)e(there,)h(return)g(a)g
+Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1475 y(F)l(unction)-1861
+b Fh(HIST_ENTRY)21 b(*)e Fg(history)p 579 1475 V 21 w(get)j
+Ff(\()p Fo(int)15 b(offset)p Ff(\))195 1530 y Fp(Return)20
+b(the)h(history)g(en)o(try)f(at)h(p)q(osition)g Fj(o\013set)p
+Fp(,)g(starting)f(from)g Fo(history_base)f Fp(\(see)i(Sec-)195
+1585 y(tion)15 b(2.4)f([History)g(V)l(ariables],)h(page)g(10\).)j(If)d
+(there)g(is)g(no)g(en)o(try)f(there,)h(or)f(if)h Fj(o\013set)g
+Fp(is)g(greater)195 1640 y(than)g(the)g(history)g(length,)h(return)f(a)
+g Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1737 y(F)l(unction)-1861
+b Fh(int)20 b Fg(history)p 351 1737 V 20 w(total)p 487
+1737 V 22 w(b)n(ytes)j Ff(\()p Fo(void)p Ff(\))195 1792
+y Fp(Return)13 b(the)h(n)o(um)o(b)q(er)g(of)g(b)o(ytes)f(that)g(the)h
+(primary)g(history)g(en)o(tries)g(are)g(using.)20 b(This)14
+b(function)195 1847 y(returns)h(the)g(sum)h(of)e(the)i(lengths)f(of)g
+(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1947 y
 Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137
-1548 y Fo(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g
+2040 y Fp(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g
 (in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.)
-1650 1640 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p
-351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Ff(\()p
-Fn(int)15 b(pos)p Ff(\))195 1694 y Fo(Set)g(the)h(p)q(osition)g(in)g
-(the)f(history)g(list)h(to)f Fj(p)q(os)p Fo(,)g(an)g(absolute)g(index)i
-(in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749
-b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p 615 1786 V 20
-w(history)k Ff(\(\))195 1841 y Fo(Bac)o(k)17 b(up)h(the)f(curren)o(t)g
-(history)g(o\013set)f(to)h(the)g(previous)h(history)f(en)o(try)l(,)g
-(and)g(return)g(a)195 1896 y(p)q(oin)o(ter)f(to)e(that)h(en)o(try)l(.)k
-(If)d(there)f(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g
-Fn(NULL)f Fo(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749
-b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 1987 V 21 w(history)k
-Ff(\(\))195 2042 y Fo(Mo)o(v)o(e)17 b(the)h(curren)o(t)g(history)f
-(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g
-(and)g(return)195 2097 y(the)d(a)g(p)q(oin)o(ter)h(to)e(that)h(en)o
-(try)l(.)20 b(If)15 b(there)g(is)h(no)f(next)g(en)o(try)l(,)g(return)g
-(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)75 2208 y Fi(2.3.5)30
-b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fo(These)14
-b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i(history)f(list)h
-(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c)i(string.)75
-2359 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o
-(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g(history)f(p)q
-(osition.)75 2414 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i
-Fj(anc)o(hored)p Fo(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc)
-o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 2469 y(history)g(en)o(try)l
-(.)1650 2560 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p
-351 2560 V 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h
-(direction)p Ff(\))195 2615 y Fo(Searc)o(h)g(the)h(history)f(for)f
-Fj(string)p Fo(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g
-(o\013set.)k(If)d Fj(direction)195 2670 y Fn(<)j Fo(0,)g(then)g(the)h
-(searc)o(h)e(is)i(through)e(previous)i(en)o(tries,)g(else)g(through)f
-(subsequen)o(t.)32 b(If)p eop
+1762 2137 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p
+351 2137 V 20 w(set)p 442 2137 V 21 w(p)r(os)h Ff(\()p
+Fo(int)15 b(pos)p Ff(\))195 2192 y Fp(Set)j(the)h(curren)o(t)f(history)
+g(o\013set)g(to)f Fj(p)q(os)p Fp(,)i(an)f(absolute)h(index)h(in)o(to)e
+(the)g(list.)30 b(Returns)18 b(1)g(on)195 2247 y(success,)d(0)g(if)h
+Fj(p)q(os)h Fp(is)f(less)g(than)f(zero)g(or)g(greater)f(than)h(the)g(n)
+o(um)o(b)q(er)h(of)e(history)i(en)o(tries.)1762 2344
+y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p
+615 2344 V 20 w(history)k Ff(\()p Fo(void)p Ff(\))195
+2399 y Fp(Bac)o(k)14 b(up)h(the)g(curren)o(t)f(history)g(o\013set)g(to)
+f(the)i(previous)g(history)f(en)o(try)l(,)g(and)h(return)f(a)g(p)q(oin)
+o(ter)195 2454 y(to)h(that)f(en)o(try)l(.)20 b(If)15
+b(there)g(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g
+Fo(NULL)g Fp(p)q(oin)o(ter.)1762 2552 y(F)l(unction)-1861
+b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 2552 V 21 w(history)k
+Ff(\()p Fo(void)p Ff(\))195 2606 y Fp(Mo)o(v)o(e)17 b(the)h(curren)o(t)
+f(history)h(o\013set)f(forw)o(ard)f(to)h(the)h(next)g(history)g(en)o
+(try)l(,)g(and)g(return)f(the)h(a)195 2661 y(p)q(oin)o(ter)e(to)e(that)
+h(en)o(try)l(.)k(If)d(there)f(is)h(no)f(next)g(en)o(try)l(,)g(return)g
+(a)g Fo(NULL)g Fp(p)q(oin)o(ter.)p eop
 %%Page: 8 10
-8 9 bop 75 -58 a Fo(8)1347 b(GNU)15 b(History)g(Library)195
-183 y Fj(string)k Fo(is)d(found,)f(then)h(the)f(curren)o(t)g(history)g
-(index)i(is)f(set)f(to)f(that)h(history)g(en)o(try)l(,)g(and)195
-238 y(the)g(v)m(alue)h(returned)f(is)g(the)g(o\013set)f(in)h(the)g
-(line)h(of)e(the)h(en)o(try)g(where)g Fj(string)j Fo(w)o(as)c(found.)
-195 293 y(Otherwise,)i(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
-(returned.)1650 396 y(F)l(unction)-1749 b Fh(int)20 b
-Fg(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396
-V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g(direction)p
-Ff(\))195 451 y Fo(Searc)o(h)i(the)f(history)g(for)g
-Fj(string)p Fo(,)g(starting)g(at)g(the)g(curren)o(t)h(history)f
-(o\013set.)k(The)d(searc)o(h)195 506 y(is)h(anc)o(hored:)23
-b(matc)o(hing)17 b(lines)h(m)o(ust)e(b)q(egin)i(with)f
-Fj(string)p Fo(.)25 b(If)17 b Fj(direction)h Fn(<)e Fo(0,)h(then)g(the)
-195 560 y(searc)o(h)f(is)g(through)f(previous)i(en)o(tries,)f(else)g
-(through)g(subsequen)o(t.)22 b(If)16 b Fj(string)k Fo(is)c(found,)195
-615 y(then)i(the)g(curren)o(t)g(history)g(index)h(is)g(set)e(to)h(that)
-f(en)o(try)l(,)h(and)g(the)g(return)g(v)m(alue)h(is)g(0.)195
-670 y(Otherwise,)d(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
-(returned.)1650 773 y(F)l(unction)-1749 b Fh(int)20 b
-Fg(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21
-w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g(direction,)g(int)283
-828 y(pos)p Ff(\))195 883 y Fo(Searc)o(h)h(for)g Fj(string)k
-Fo(in)d(the)f(history)g(list,)g(starting)g(at)f Fj(p)q(os)p
-Fo(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937
-y(list.)21 b(If)15 b Fj(direction)h Fo(is)g(negativ)o(e,)f(the)g(searc)
-o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p
-Fo(,)h(otherwise)195 992 y(forw)o(ard.)27 b(Returns)18
-b(the)g(absolute)g(index)h(of)f(the)g(history)f(elemen)o(t)i(where)f
-Fj(string)k Fo(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75
-1170 y Fi(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137
-1272 y Fo(The)16 b(History)g(library)h(can)e(read)h(the)g(history)g
-(from)f(and)h(write)g(it)g(to)f(a)h(\014le.)22 b(This)17
-b(section)f(do)q(cu-)75 1327 y(men)o(ts)f(the)g(functions)h(for)f
-(managing)g(a)g(history)g(\014le.)1650 1430 y(F)l(unction)-1749
-b Fh(int)20 b Fg(read)p 286 1430 V 20 w(history)i Ff(\()p
-Fn(char)15 b(*filename)p Ff(\))195 1485 y Fo(Add)h(the)f(con)o(ten)o
-(ts)f(of)h Fj(\014lename)j Fo(to)d(the)g(history)g(list,)g(a)g(line)h
-(at)f(a)f(time.)21 b(If)15 b Fj(\014lename)j Fo(is)195
-1539 y Fn(NULL)p Fo(,)c(then)i(read)f(from)f(`)p Fn(~/.history)p
-Fo('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650
-1643 y(F)l(unction)-1749 b Fh(int)20 b Fg(read)p 286
-1643 V 20 w(history)p 481 1643 V 20 w(range)i Ff(\()p
-Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))195
-1697 y Fo(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fj(\014lename)p
-Fo(,)i(adding)f(them)g(to)f(the)g(history)h(list.)36
-b(Start)195 1752 y(reading)15 b(at)e(line)j Fj(from)e
-Fo(and)g(end)h(at)e Fj(to)p Fo(.)19 b(If)c Fj(from)e
-Fo(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15
-b Fj(to)195 1807 y Fo(is)i(less)g(than)f Fj(from)p Fo(,)g(then)h(read)f
-(un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17
-b Fj(\014lename)j Fo(is)d Fn(NULL)p Fo(,)f(then)195 1862
-y(read)f(from)g(`)p Fn(~/.history)p Fo('.)i(Returns)f(0)f(if)h
-(successful,)g(or)e Fn(errno)h Fo(if)h(not.)1650 1965
-y(F)l(unction)-1749 b Fh(int)20 b Fg(write)p 304 1965
-V 22 w(history)i Ff(\()p Fn(char)15 b(*filename)p Ff(\))195
-2020 y Fo(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f
-Fj(\014lename)p Fo(,)j(o)o(v)o(erwriting)d Fj(\014lename)k
-Fo(if)d(necessary)l(.)42 b(If)195 2074 y Fj(\014lename)20
-b Fo(is)d Fn(NULL)p Fo(,)f(then)g(write)h(the)f(history)h(list)g(to)f
-(`)p Fn(~/.history)p Fo('.)21 b(V)l(alues)d(returned)195
-2129 y(are)d(as)g(in)h Fn(read_history)d(\(\))p Fo(.)1650
-2232 y(F)l(unction)-1749 b Fh(int)20 b Fg(app)r(end)p
-360 2232 V 19 w(history)j Ff(\()p Fn(int)14 b(nelements,)g(char)h
-(*filename)p Ff(\))195 2287 y Fo(App)q(end)i(the)e(last)g
-Fj(nelemen)o(ts)j Fo(of)d(the)g(history)g(list)h(to)f
-Fj(\014lename)p Fo(.)1650 2390 y(F)l(unction)-1749 b
-Fh(int)20 b Fg(history)p 351 2390 V 20 w(truncate)p 582
-2390 V 21 w(\014le)k Ff(\()p Fn(char)14 b(*filename,)g(int)h(nlines)p
-Ff(\))195 2445 y Fo(T)l(runcate)g(the)h(history)f(\014le)h
-Fj(\014lename)p Fo(,)g(lea)o(ving)g(only)g(the)f(last)g
-Fj(nlines)k Fo(lines.)75 2568 y Fi(2.3.7)30 b(History)20
-b(Expansion)137 2670 y Fo(These)c(functions)g(implemen)o(t)g
-Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)p eop
+8 9 bop 75 -58 a Fp(8)1347 b(GNU)15 b(History)g(Library)75
+149 y Fi(2.3.5)30 b(Searc)n(hing)21 b(the)f(History)h(List)137
+245 y Fp(These)14 b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i
+(history)f(list)h(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c)
+i(string.)75 300 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q
+(oth)g(forw)o(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g
+(history)f(p)q(osition.)75 355 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i
+Fj(anc)o(hored)p Fp(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc)
+o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 410 y(history)g(en)o(try)l
+(.)1762 524 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p
+351 524 18 3 v 20 w(searc)n(h)j Ff(\()p Fo(const)14 b(char)h(*string,)f
+(int)h(direction)p Ff(\))195 578 y Fp(Searc)o(h)g(the)f(history)g(for)g
+Fj(string)p Fp(,)g(starting)g(at)g(the)h(curren)o(t)f(history)g
+(o\013set.)19 b(If)c Fj(direction)g Fp(is)g(less)195
+633 y(than)20 b(0,)g(then)h(the)f(searc)o(h)f(is)i(through)f(previous)g
+(en)o(tries,)i(otherwise)e(through)f(subsequen)o(t)195
+688 y(en)o(tries.)h(If)c Fj(string)j Fp(is)d(found,)f(then)g(the)h
+(curren)o(t)f(history)g(index)h(is)g(set)f(to)g(that)f(history)h(en)o
+(try)l(,)195 743 y(and)i(the)g(v)m(alue)h(returned)f(is)g(the)g
+(o\013set)e(in)j(the)f(line)h(of)e(the)h(en)o(try)g(where)g
+Fj(string)j Fp(w)o(as)c(found.)195 798 y(Otherwise,)g(nothing)f(is)h(c)
+o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 912 y(F)l(unction)-1861
+b Fh(int)20 b Fg(history)p 351 912 V 20 w(searc)n(h)p
+527 912 V 21 w(pre\014x)i Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h
+(direction)p Ff(\))195 966 y Fp(Searc)o(h)20 b(the)h(history)f(for)g
+Fj(string)p Fp(,)h(starting)e(at)h(the)g(curren)o(t)h(history)f
+(o\013set.)34 b(The)20 b(searc)o(h)g(is)195 1021 y(anc)o(hored:)g(matc)
+o(hing)14 b(lines)j(m)o(ust)d(b)q(egin)i(with)f Fj(string)p
+Fp(.)20 b(If)15 b Fj(direction)h Fp(is)f(less)g(than)g(0,)f(then)h(the)
+195 1076 y(searc)o(h)g(is)i(through)e(previous)h(en)o(tries,)g
+(otherwise)g(through)f(subsequen)o(t)h(en)o(tries.)22
+b(If)16 b Fj(string)j Fp(is)195 1131 y(found,)e(then)g(the)f(curren)o
+(t)h(history)f(index)i(is)f(set)f(to)g(that)g(en)o(try)l(,)g(and)h(the)
+f(return)h(v)m(alue)h(is)f(0.)195 1186 y(Otherwise,)f(nothing)f(is)h(c)
+o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 1300 y(F)l(unction)-1861
+b Fh(int)20 b Fg(history)p 351 1300 V 20 w(searc)n(h)p
+527 1300 V 21 w(p)r(os)h Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h
+(direction,)f(int)283 1355 y(pos)p Ff(\))195 1409 y Fp(Searc)o(h)j(for)
+g Fj(string)k Fp(in)d(the)f(history)g(list,)h(starting)e(at)h
+Fj(p)q(os)p Fp(,)g(an)g(absolute)h(index)g(in)o(to)f(the)h(list.)195
+1464 y(If)g Fj(direction)i Fp(is)e(negativ)o(e,)h(the)f(searc)o(h)g
+(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p Fp(,)h(otherwise)h
+(forw)o(ard.)195 1519 y(Returns)j(the)g(absolute)g(index)h(of)f(the)g
+(history)g(elemen)o(t)h(where)f Fj(string)k Fp(w)o(as)21
+b(found,)j(or)d(-1)195 1574 y(otherwise.)75 1684 y Fi(2.3.6)30
+b(Managing)20 b(the)g(History)h(File)137 1780 y Fp(The)16
+b(History)g(library)h(can)e(read)h(the)g(history)g(from)f(and)h(write)g
+(it)g(to)f(a)h(\014le.)22 b(This)17 b(section)f(do)q(cu-)75
+1835 y(men)o(ts)f(the)g(functions)h(for)f(managing)g(a)g(history)g
+(\014le.)1762 1949 y(F)l(unction)-1861 b Fh(int)20 b
+Fg(read)p 286 1949 V 20 w(history)i Ff(\()p Fo(const)15
+b(char)f(*filename)p Ff(\))195 2003 y Fp(Add)h(the)g(con)o(ten)o(ts)f
+(of)h Fj(\014lename)j Fp(to)c(the)h(history)g(list,)g(a)g(line)h(at)f
+(a)f(time.)20 b(If)15 b Fj(\014lename)k Fp(is)c Fo(NULL)p
+Fp(,)195 2058 y(then)h(read)f(from)f(`)p Fo(~/.history)p
+Fp('.)k(Returns)d(0)f(if)i(successful,)g(or)f Fo(errno)f
+Fp(if)i(not.)1762 2172 y(F)l(unction)-1861 b Fh(int)20
+b Fg(read)p 286 2172 V 20 w(history)p 481 2172 V 20 w(range)i
+Ff(\()p Fo(const)14 b(char)h(*filename,)f(int)h(from,)f(int)h(to)p
+Ff(\))195 2227 y Fp(Read)f(a)f(range)h(of)f(lines)j(from)d
+Fj(\014lename)p Fp(,)i(adding)g(them)f(to)f(the)h(history)g(list.)20
+b(Start)13 b(reading)i(at)195 2282 y(line)g Fj(from)d
+Fp(and)h(end)h(at)f Fj(to)p Fp(.)18 b(If)c Fj(from)e
+Fp(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)13
+b Fj(to)i Fp(is)e(less)h(than)f Fj(from)p Fp(,)195 2337
+y(then)i(read)g(un)o(til)i(the)e(end)g(of)g(the)g(\014le.)21
+b(If)15 b Fj(\014lename)k Fp(is)d Fo(NULL)p Fp(,)e(then)h(read)g(from)f
+(`)p Fo(~/.history)p Fp('.)195 2392 y(Returns)h(0)g(if)g(successful,)h
+(or)f Fo(errno)g Fp(if)g(not.)1762 2506 y(F)l(unction)-1861
+b Fh(int)20 b Fg(write)p 304 2506 V 22 w(history)i Ff(\()p
+Fo(const)15 b(char)f(*filename)p Ff(\))195 2560 y Fp(W)l(rite)k(the)f
+(curren)o(t)g(history)h(to)f Fj(\014lename)p Fp(,)h(o)o(v)o(erwriting)f
+Fj(\014lename)k Fp(if)d(necessary)l(.)27 b(If)18 b Fj(\014lename)195
+2615 y Fp(is)f Fo(NULL)p Fp(,)e(then)h(write)h(the)f(history)g(list)h
+(to)e(`)p Fo(~/.history)p Fp('.)21 b(Returns)16 b(0)f(on)h(success,)h
+(or)f Fo(errno)195 2670 y Fp(on)f(a)g(read)g(or)g(write)g(error.)p
+eop
 %%Page: 9 11
-9 10 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(9)1650 183 y(F)l(unction)-1749 b Fh(int)20
-b Fg(history)p 351 183 18 3 v 20 w(expand)j Ff(\()p Fn(char)14
-b(*string,)g(char)h(**output)p Ff(\))195 238 y Fo(Expand)k
-Fj(string)p Fo(,)g(placing)h(the)e(result)h(in)o(to)g
-Fj(output)p Fo(,)g(a)f(p)q(oin)o(ter)h(to)f(a)g(string)h(\(see)f(Sec-)
-195 293 y(tion)d(1.1)g([History)f(In)o(teraction],)h(page)g(1\).)k
-(Returns:)195 370 y Fn(0)216 b Fo(If)16 b(no)g(expansions)h(to)q(ok)e
-(place)i(\(or,)d(if)j(the)f(only)g(c)o(hange)g(in)h(the)e(text)h(w)o
-(as)435 425 y(the)f(de-slashifying)j(of)c(the)i(history)f(expansion)h
-(c)o(haracter\);)195 502 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g
-(tak)o(e)e(place;)195 580 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an)
-h(error)g(in)h(expansion;)195 657 y Fn(2)216 b Fo(if)16
-b(the)g(returned)f(line)j(should)e(b)q(e)g(displa)o(y)o(ed,)h(but)e
-(not)g(executed,)i(as)e(with)435 712 y(the)g Fn(:p)g
-Fo(mo)q(di\014er)h(\(see)f(Section)i(1.1.3)c([Mo)q(di\014ers],)i(page)g
-(2\).)195 789 y(If)g(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h
-Fj(output)f Fo(con)o(tains)g(a)g(descriptiv)o(e)i(error)d(mes-)195
-844 y(sage.)1650 932 y(F)l(unction)-1749 b Fh(char)20
-b(*)f Fg(history)p 422 932 V 21 w(arg)p 524 932 V 19
-w(extract)24 b Ff(\()p Fn(int)14 b(first,)h(int)g(last,)f(char)283
-987 y(*string)p Ff(\))195 1042 y Fo(Extract)g(a)g(string)g(segmen)o(t)g
-(consisting)i(of)e(the)g Fj(\014rst)i Fo(through)e Fj(last)h
-Fo(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fj(string)p
-Fo(.)k(Argumen)o(ts)15 b(are)f(brok)o(en)i(up)f(as)g(in)h(Bash.)1650
-1185 y(F)l(unction)-1749 b Fh(char)20 b(*)f Fg(get)p
-324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25
-b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,)f(int)283
-1240 y(qchar)p Ff(\))195 1295 y Fo(Returns)h(the)g(text)f(of)g(the)h
-(history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fj(string)k
-Fn(+)d Fj(*cindex)p Fo(.)20 b Fj(*cindex)f Fo(is)195
-1350 y(mo)q(di\014ed)e(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o
-(t)f(sp)q(eci\014er.)23 b(A)o(t)16 b(function)g(en)o(try)l(,)f
-Fj(cindex)21 b Fo(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o
-(to)e Fj(string)21 b Fo(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q
-(eci\014cation)h(b)q(egins.)26 b Fj(qc)o(har)19 b Fo(is)195
-1459 y(a)h(c)o(haracter)g(that)g(is)h(allo)o(w)o(ed)f(to)g(end)h(the)g
-(ev)o(en)o(t)f(sp)q(eci\014cation)i(in)g(addition)f(to)f(the)195
-1514 y(\\normal")15 b(terminating)g(c)o(haracters.)1650
-1602 y(F)l(unction)-1749 b Fh(char)20 b(**)f Fg(history)p
-448 1602 V 21 w(tok)n(enize)25 b Ff(\()p Fn(char)14 b(*string)p
-Ff(\))195 1657 y Fo(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h
-(out)g(of)f Fj(string)p Fo(,)h(m)o(uc)o(h)g(as)f(the)h(shell)h(migh)o
-(t.)25 b(The)195 1712 y(tok)o(ens)d(are)g(split)i(on)f(white)g(space)g
-(and)f(on)h(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)h(and)f(shell)
-195 1767 y(quoting)15 b(con)o(v)o(en)o(tions)h(are)e(ob)q(ey)o(ed.)75
-1892 y Fm(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987
-y Fo(This)23 b(section)f(describ)q(es)h(the)f(externally)h(visible)h(v)
-m(ariables)f(exp)q(orted)f(b)o(y)g(the)g(GNU)f(History)75
-2042 y(Library)l(.)1661 2130 y(V)l(ariable)-1749 b Fh(int)20
-b Fg(history)p 351 2130 V 20 w(base)195 2185 y Fo(The)15
-b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f
-(history)g(list.)1661 2274 y(V)l(ariable)-1749 b Fh(int)20
-b Fg(history)p 351 2274 V 20 w(length)195 2329 y Fo(The)15
-b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the)
-f(history)g(list.)1661 2417 y(V)l(ariable)-1749 b Fh(int)20
-b Fg(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195
-2472 y Fo(The)14 b(maxim)o(um)f(n)o(um)o(b)q(er)h(of)e(history)i(en)o
-(tries.)19 b(This)14 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)g
-Fn(stifle_)195 2527 y(history)g(\(\))p Fo(.)1661 2615
-y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 2615
-V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y
-Fo(The)15 b(c)o(haracter)g(that)f(starts)g(a)h(history)g(ev)o(en)o(t.)
-20 b(The)15 b(default)h(is)g(`)p Fn(!)p Fo('.)p eop
+9 10 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(9)1762 149 y(F)l(unction)-1861 b Fh(int)20
+b Fg(app)r(end)p 360 149 18 3 v 19 w(history)j Ff(\()p
+Fo(int)14 b(nelements,)g(const)h(char)f(*filename)p Ff(\))195
+204 y Fp(App)q(end)19 b(the)e(last)g Fj(nelemen)o(ts)k
+Fp(of)16 b(the)i(history)f(list)h(to)f Fj(\014lename)p
+Fp(.)27 b(If)18 b Fj(\014lename)j Fp(is)d Fo(NULL)p Fp(,)f(then)195
+259 y(app)q(end)f(to)f(`)p Fo(~/.history)p Fp('.)j(Returns)c(0)h(on)g
+(success,)h(or)e Fo(errno)h Fp(on)g(a)g(read)g(or)g(write)g(error.)1762
+404 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p 351
+404 V 20 w(truncate)p 582 404 V 21 w(\014le)k Ff(\()p
+Fo(const)14 b(char)h(*filename,)e(int)i(nlines)p Ff(\))195
+459 y Fp(T)l(runcate)k(the)h(history)f(\014le)h Fj(\014lename)p
+Fp(,)h(lea)o(ving)f(only)g(the)f(last)g Fj(nlines)k Fp(lines.)34
+b(If)20 b Fj(\014lename)i Fp(is)195 513 y Fo(NULL)p Fp(,)14
+b(then)i(`)p Fo(~/.history)p Fp(')d(is)j(truncated.)j(Returns)c(0)g(on)
+g(success,)h(or)e Fo(errno)h Fp(on)g(failure.)75 644
+y Fi(2.3.7)30 b(History)20 b(Expansion)137 750 y Fp(These)c(functions)g
+(implemen)o(t)g(history)f(expansion.)1762 895 y(F)l(unction)-1861
+b Fh(int)20 b Fg(history)p 351 895 V 20 w(expand)j Ff(\()p
+Fo(char)14 b(*string,)g(char)h(**output)p Ff(\))195 949
+y Fp(Expand)j Fj(string)p Fp(,)f(placing)h(the)g(result)f(in)o(to)g
+Fj(output)p Fp(,)h(a)e(p)q(oin)o(ter)i(to)f(a)g(string)g(\(see)g
+(Section)h(1.1)195 1004 y([History)d(In)o(teraction],)f(page)h(1\).)20
+b(Returns:)195 1098 y Fo(0)216 b Fp(If)19 b(no)g(expansions)g(to)q(ok)f
+(place)i(\(or,)e(if)i(the)e(only)i(c)o(hange)e(in)i(the)f(text)f(w)o
+(as)g(the)435 1152 y(remo)o(v)m(al)d(of)g(escap)q(e)h(c)o(haracters)e
+(preceding)i(the)f(history)g(expansion)h(c)o(haracter\);)195
+1241 y Fo(1)216 b Fp(if)16 b(expansions)g(did)g(tak)o(e)e(place;)195
+1330 y Fo(-1)192 b Fp(if)16 b(there)f(w)o(as)f(an)h(error)g(in)h
+(expansion;)195 1419 y Fo(2)216 b Fp(if)14 b(the)g(returned)g(line)i
+(should)f(b)q(e)f(displa)o(y)o(ed,)h(but)f(not)f(executed,)i(as)e(with)
+h(the)g Fo(:p)435 1474 y Fp(mo)q(di\014er)i(\(see)f(Section)h(1.1.3)e
+([Mo)q(di\014ers],)h(page)g(2\).)195 1568 y(If)g(an)h(error)e(o)q
+(curred)i(in)g(expansion,)f(then)h Fj(output)g Fp(con)o(tains)f(a)g
+(descriptiv)o(e)i(error)d(message.)1762 1713 y(F)l(unction)-1861
+b Fh(char)20 b(*)f Fg(get)p 324 1713 V 21 w(history)p
+520 1713 V 20 w(ev)n(en)n(t)25 b Ff(\()p Fo(const)14
+b(char)h(*string,)f(int)g(*cindex,)g(int)283 1767 y(qchar)p
+Ff(\))195 1822 y Fp(Returns)22 b(the)h(text)f(of)h(the)f(history)h(ev)o
+(en)o(t)g(b)q(eginning)h(at)f Fj(string)j Fo(+)d Fj(*cindex)p
+Fp(.)43 b Fj(*cindex)27 b Fp(is)195 1877 y(mo)q(di\014ed)16
+b(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o(t)f(sp)q(eci\014er.)
+22 b(A)o(t)14 b(function)h(en)o(try)l(,)g Fj(cindex)k
+Fp(p)q(oin)o(ts)c(to)f(the)195 1932 y(index)19 b(in)o(to)f
+Fj(string)k Fp(where)c(the)g(history)g(ev)o(en)o(t)g(sp)q
+(eci\014cation)h(b)q(egins.)30 b Fj(qc)o(har)21 b Fp(is)d(a)g(c)o
+(haracter)195 1987 y(that)13 b(is)h(allo)o(w)o(ed)g(to)e(end)i(the)g
+(ev)o(en)o(t)f(sp)q(eci\014cation)j(in)e(addition)g(to)f(the)h
+(\\normal")f(terminating)195 2041 y(c)o(haracters.)1762
+2186 y(F)l(unction)-1861 b Fh(char)20 b(**)f Fg(history)p
+448 2186 V 21 w(tok)n(enize)25 b Ff(\()p Fo(const)14
+b(char)h(*string)p Ff(\))195 2241 y Fp(Return)g(an)g(arra)o(y)g(of)g
+(tok)o(ens)g(parsed)g(out)g(of)g Fj(string)p Fp(,)g(m)o(uc)o(h)h(as)f
+(the)g(shell)i(migh)o(t.)k(The)15 b(tok)o(ens)195 2296
+y(are)h(split)h(on)e(the)h(c)o(haracters)g(in)g(the)g
+Fj(history)p 1007 2296 14 2 v 17 w(w)o(ord)p 1122 2296
+V 15 w(delimiters)k Fp(v)m(ariable,)d(and)f(shell)i(quoting)195
+2351 y(con)o(v)o(en)o(tions)d(are)g(ob)q(ey)o(ed.)1762
+2496 y(F)l(unction)-1861 b Fh(char)20 b(*)f Fg(history)p
+422 2496 18 3 v 21 w(arg)p 524 2496 V 19 w(extract)24
+b Ff(\()p Fo(int)14 b(first,)h(int)g(last,)f(const)g(char)283
+2550 y(*string)p Ff(\))195 2605 y Fp(Extract)19 b(a)h(string)g(segmen)o
+(t)g(consisting)h(of)f(the)g Fj(\014rst)h Fp(through)f
+Fj(last)h Fp(argumen)o(ts)e(presen)o(t)h(in)195 2660
+y Fj(string)p Fp(.)g(Argumen)o(ts)15 b(are)f(split)j(using)f
+Fo(history_tokenize)p Fp(.)p eop
 %%Page: 10 12
-10 11 bop 75 -58 a Fo(10)1324 b(GNU)15 b(History)g(Library)1661
-183 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377
-183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238
-y Fo(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g(w)o(ord)g
-(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g(line.)21
-b(The)195 293 y(default)16 b(is)f(`)p Fn(^)p Fo('.)1661
-388 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377
-388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443
-y Fo(During)e(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)i(seen)f
-(as)g(the)g(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)195
-498 y(then)e(it)g(and)g(all)h(subsequen)o(t)g(c)o(haracters)e(up)h(to)g
-(a)f(newline)j(are)e(ignored,)g(suppressing)195 553 y(history)f
-(expansion)h(for)f(the)g(remainder)h(of)f(the)g(line.)22
-b(This)15 b(is)h(disabled)h(b)o(y)e(default.)1661 648
-y(V)l(ariable)-1749 b Fh(char)20 b(*)f Fg(history)p 422
-648 V 21 w(no)p 504 648 V 20 w(expand)p 704 648 V 20
-w(c)n(hars)195 703 y Fo(The)j(list)h(of)f(c)o(haracters)f(whic)o(h)i
-(inhibit)h(history)e(expansion)h(if)g(found)f(immediately)195
-758 y(follo)o(wing)16 b Fj(history)p 528 758 14 2 v 16
-w(expansion)p 739 758 V 18 w(c)o(har)p Fo(.)j(The)d(default)f(is)h
-(whitespace)g(and)g(`)p Fn(=)p Fo('.)1661 853 y(V)l(ariable)-1749
-b Fh(char)20 b(*)f Fg(history)p 422 853 18 3 v 21 w(searc)n(h)p
-599 853 V 20 w(delimiter)p 843 853 V 23 w(c)n(hars)195
-908 y Fo(The)f(list)h(of)e(additional)i(c)o(haracters)e(whic)o(h)i(can)
-f(delimit)h(a)f(history)g(searc)o(h)f(string,)h(in)195
-963 y(addition)c(to)d(whitespace,)j(`)p Fn(:)p Fo(')d(and)i(`)p
-Fn(?)p Fo(')f(in)h(the)f(case)h(of)f(a)g(substring)h(searc)o(h.)19
-b(The)12 b(default)195 1018 y(is)k(empt)o(y)l(.)1661
-1113 y(V)l(ariable)-1749 b Fh(int)20 b Fg(history)p 351
-1113 V 20 w(quotes)p 533 1113 V 21 w(inhibit)p 717 1113
-V 23 w(expansion)195 1168 y Fo(If)13 b(non-zero,)f(single-quoted)i(w)o
-(ords)e(are)g(not)g(scanned)h(for)f(the)g(history)h(expansion)g(c)o
-(har-)195 1223 y(acter.)19 b(The)d(default)g(v)m(alue)g(is)g(0.)1661
-1318 y(V)l(ariable)-1749 b Fh(Function)20 b(*)g Fg(history)p
-527 1318 V 20 w(inhibit)p 710 1318 V 23 w(expansion)p
-980 1318 V 21 w(function)195 1373 y Fo(This)12 b(should)g(b)q(e)g(set)f
-(to)f(the)i(address)f(of)g(a)g(function)h(that)e(tak)o(es)h(t)o(w)o(o)f
-(argumen)o(ts:)17 b(a)11 b Fn(char)195 1428 y(*)j Fo(\()p
-Fj(string)t Fo(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g
-(string)g(\()p Fj(i)r Fo(\).)20 b(It)14 b(should)h(return)f(a)g
-(non-zero)195 1482 y(v)m(alue)g(if)e(the)h(history)f(expansion)h
-(starting)f(at)g Fj(string[i])i Fo(should)f(not)f(b)q(e)h(p)q
-(erformed;)g(zero)195 1537 y(if)g(the)h(expansion)f(should)h(b)q(e)g
-(done.)20 b(It)13 b(is)g(in)o(tended)i(for)d(use)h(b)o(y)g
-(applications)i(lik)o(e)f(Bash)195 1592 y(that)j(use)h(the)g(history)f
-(expansion)i(c)o(haracter)e(for)g(additional)i(purp)q(oses.)28
-b(By)18 b(default,)195 1647 y(this)e(v)m(ariable)g(is)g(set)f(to)f
-(NULL.)75 1780 y Fm(2.5)33 b(History)22 b(Programming)h(Example)137
-1878 y Fo(The)16 b(follo)o(wing)g(program)e(demonstrates)g(simple)j
-(use)e(of)g(the)g(GNU)g(History)g(Library)l(.)195 1944
-y Fn(main)23 b(\(\))195 1995 y({)243 2047 y(char)g(line[1024],)f(*t;)
-243 2099 y(int)h(len,)g(done)h(=)g(0;)243 2203 y(line[0])f(=)g(0;)243
-2307 y(using_history)f(\(\);)243 2359 y(while)h(\(!done\))290
-2411 y({)338 2462 y(printf)g(\("history$)g("\);)338 2514
-y(fflush)g(\(stdout\);)338 2566 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g
-(\(line\))g(-)h(1,)f(stdin\);)338 2618 y(if)h(\(t)f(&&)h(*t\))386
-2670 y({)p eop
+10 11 bop 75 -58 a Fp(10)1324 b(GNU)15 b(History)g(Library)75
+149 y Fn(2.4)33 b(History)22 b(V)-6 b(ariables)137 251
+y Fp(This)18 b(section)f(describ)q(es)i(the)e(externally-visible)k(v)m
+(ariables)d(exp)q(orted)f(b)o(y)g(the)g Fk(gnu)g Fp(History)g(Li-)75
+306 y(brary)l(.)1773 438 y(V)l(ariable)-1861 b Fh(int)20
+b Fg(history)p 351 438 18 3 v 20 w(base)195 493 y Fp(The)15
+b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f
+(history)g(list.)1773 625 y(V)l(ariable)-1861 b Fh(int)20
+b Fg(history)p 351 625 V 20 w(length)195 680 y Fp(The)15
+b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the)
+f(history)g(list.)1773 812 y(V)l(ariable)-1861 b Fh(int)20
+b Fg(history)p 351 812 V 20 w(max)p 478 812 V 20 w(en)n(tries)195
+867 y Fp(The)j(maxim)o(um)g(n)o(um)o(b)q(er)g(of)g(history)g(en)o
+(tries.)43 b(This)24 b(m)o(ust)e(b)q(e)i(c)o(hanged)f(using)h
+Fo(stifle_)195 922 y(history\(\))p Fp(.)1773 1054 y(V)l(ariable)-1861
+b Fh(char)20 b Fg(history)p 377 1054 V 20 w(expansion)p
+644 1054 V 21 w(c)n(har)195 1109 y Fp(The)e(c)o(haracter)f(that)g(in)o
+(tro)q(duces)h(a)f(history)h(ev)o(en)o(t.)27 b(The)18
+b(default)g(is)g(`)p Fo(!)p Fp('.)26 b(Setting)18 b(this)g(to)f(0)195
+1164 y(inhibits)g(history)f(expansion.)1773 1296 y(V)l(ariable)-1861
+b Fh(char)20 b Fg(history)p 377 1296 V 20 w(subst)p 529
+1296 V 20 w(c)n(har)195 1351 y Fp(The)h(c)o(haracter)e(that)h(in)o(v)o
+(ok)o(es)g(w)o(ord)g(substitution)h(if)g(found)f(at)g(the)h(start)e(of)
+h(a)g(line.)37 b(The)195 1406 y(default)16 b(is)f(`)p
+Fo(^)p Fp('.)1773 1538 y(V)l(ariable)-1861 b Fh(char)20
+b Fg(history)p 377 1538 V 20 w(commen)n(t)p 627 1538
+V 19 w(c)n(har)195 1593 y Fp(During)f(tok)o(enization,)h(if)f(this)h(c)
+o(haracter)e(is)h(seen)h(as)e(the)h(\014rst)g(c)o(haracter)f(of)g(a)h
+(w)o(ord,)g(then)195 1648 y(it)j(and)g(all)g(subsequen)o(t)h(c)o
+(haracters)d(up)j(to)e(a)g(newline)i(are)f(ignored,)h(suppressing)g
+(history)195 1702 y(expansion)16 b(for)f(the)g(remainder)h(of)f(the)g
+(line.)21 b(This)16 b(is)g(disabled)h(b)o(y)e(default.)1773
+1835 y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p
+422 1835 V 21 w(w)n(ord)p 567 1835 V 20 w(delimiters)195
+1889 y Fp(The)14 b(c)o(haracters)f(that)g(separate)g(tok)o(ens)h(for)f
+Fo(history_tokenize\(\))p Fp(.)k(The)d(default)g(v)m(alue)h(is)f
+Fo(")195 1944 y(\\t\\n\(\)<>;&|")p Fp(.)1773 2077 y(V)l(ariable)-1861
+b Fh(char)20 b(*)f Fg(history)p 422 2077 V 21 w(no)p
+504 2077 V 20 w(expand)p 704 2077 V 20 w(c)n(hars)195
+2131 y Fp(The)c(list)h(of)e(c)o(haracters)g(whic)o(h)i(inhibit)h
+(history)e(expansion)h(if)f(found)h(immediately)g(follo)o(wing)195
+2186 y Fj(history)p 336 2186 14 2 v 16 w(expansion)p
+547 2186 V 18 w(c)o(har)p Fp(.)j(The)d(default)f(is)h(space,)f(tab,)g
+(newline,)h(carriage)f(return,)g(and)h(`)p Fo(=)p Fp('.)1773
+2318 y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p
+422 2318 18 3 v 21 w(searc)n(h)p 599 2318 V 20 w(delimiter)p
+843 2318 V 23 w(c)n(hars)195 2373 y Fp(The)13 b(list)h(of)f(additional)
+h(c)o(haracters)e(whic)o(h)i(can)g(delimit)g(a)f(history)g(searc)o(h)g
+(string,)g(in)h(addition)195 2428 y(to)h(space,)g(T)l(AB,)g(`)p
+Fo(:)p Fp(')f(and)h(`)p Fo(?)p Fp(')g(in)h(the)f(case)g(of)g(a)g
+(substring)g(searc)o(h.)20 b(The)c(default)f(is)h(empt)o(y)l(.)1773
+2560 y(V)l(ariable)-1861 b Fh(int)20 b Fg(history)p 351
+2560 V 20 w(quotes)p 533 2560 V 21 w(inhibit)p 717 2560
+V 23 w(expansion)195 2615 y Fp(If)15 b(non-zero,)f(single-quoted)j(w)o
+(ords)c(are)i(not)f(scanned)h(for)f(the)h(history)g(expansion)g(c)o
+(haracter.)195 2670 y(The)g(default)h(v)m(alue)h(is)e(0.)p
+eop
 %%Page: 11 13
-11 12 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)867 b(11)434 183 y Fn(len)23 b(=)h(strlen)f(\(t\);)434
-235 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 287 y(t[len)h(-)f(1])h
-(=)g('\\0';)386 339 y(})338 443 y(if)g(\(!t\))386 495
-y(strcpy)f(\(line,)g("quit"\);)338 598 y(if)h(\(line[0]\))386
-650 y({)434 702 y(char)f(*expansion;)434 754 y(int)g(result;)434
-858 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434
-910 y(if)g(\(result\))481 962 y(fprintf)g(\(stderr,)g("\045s\\n",)g
-(expansion\);)434 1065 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h
-(2\))481 1117 y({)529 1169 y(free)f(\(expansion\);)529
-1221 y(continue;)481 1273 y(})434 1377 y(add_history)f(\(expansion\);)
-434 1429 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h
-(1\);)434 1480 y(free)f(\(expansion\);)386 1532 y(})338
-1636 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))386
-1688 y(done)g(=)h(1;)338 1740 y(else)f(if)h(\(strcmp)f(\(line,)g
-("save"\))g(==)h(0\))386 1792 y(write_history)e(\("history_file"\);)338
-1844 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386
-1896 y(read_history)e(\("history_file"\);)338 1947 y(else)h(if)h
-(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 1999 y({)434
-2051 y(register)e(HIST_ENTRY)h(**the_list;)434 2103 y(register)f(int)i
-(i;)434 2207 y(the_list)e(=)i(history_list)e(\(\);)434
-2259 y(if)h(\(the_list\))481 2311 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e
-(i++\))529 2363 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g
-(history_base,)e(the_list[i]->line\);)386 2414 y(})338
-2466 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386
-2518 y({)434 2570 y(int)f(which;)434 2622 y(if)g(\(\(sscanf)g(\(line)g
-(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop
+11 12 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)867 b(11)1773 149 y(V)l(ariable)-1861 b Fh(rl_linebuf_func_t)
+22 b(*)d Fg(history)p 762 149 18 3 v 21 w(inhibit)p 946
+149 V 23 w(expansion)p 1216 149 V 20 w(function)195 204
+y Fp(This)e(should)h(b)q(e)f(set)g(to)f(the)g(address)h(of)f(a)h
+(function)g(that)f(tak)o(es)g(t)o(w)o(o)f(argumen)o(ts:)22
+b(a)17 b Fo(char)d(*)195 259 y Fp(\()p Fj(string)t Fp(\))e(and)i(an)f
+Fo(int)g Fp(index)i(in)o(to)e(that)f(string)i(\()p Fj(i)r
+Fp(\).)19 b(It)14 b(should)g(return)f(a)g(non-zero)h(v)m(alue)g(if)g
+(the)195 314 y(history)h(expansion)g(starting)f(at)g
+Fj(string[i])i Fp(should)g(not)e(b)q(e)h(p)q(erformed;)g(zero)f(if)h
+(the)g(expansion)195 369 y(should)i(b)q(e)g(done.)22
+b(It)16 b(is)h(in)o(tended)g(for)e(use)i(b)o(y)f(applications)h(lik)o
+(e)g(Bash)f(that)g(use)g(the)g(history)195 423 y(expansion)g(c)o
+(haracter)f(for)f(additional)j(purp)q(oses.)j(By)c(default,)f(this)h(v)
+m(ariable)g(is)g(set)f(to)f Fo(NULL)p Fp(.)75 543 y Fn(2.5)33
+b(History)22 b(Programming)h(Example)137 637 y Fp(The)16
+b(follo)o(wing)g(program)e(demonstrates)g(simple)j(use)e(of)g(the)g
+Fk(gnu)g Fp(History)g(Library)l(.)195 698 y Fo(#include)23
+b(<stdio.h>)195 750 y(#include)g(<readline/history.h>)195
+854 y(main)g(\(argc,)g(argv\))314 906 y(int)h(argc;)314
+958 y(char)g(**argv;)195 1010 y({)243 1061 y(char)f(line[1024],)f(*t;)
+243 1113 y(int)h(len,)g(done)h(=)g(0;)243 1217 y(line[0])f(=)g(0;)243
+1321 y(using_history)f(\(\);)243 1373 y(while)h(\(!done\))290
+1425 y({)338 1477 y(printf)g(\("history$)g("\);)338 1528
+y(fflush)g(\(stdout\);)338 1580 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g
+(\(line\))g(-)h(1,)f(stdin\);)338 1632 y(if)h(\(t)f(&&)h(*t\))386
+1684 y({)434 1736 y(len)f(=)h(strlen)f(\(t\);)434 1788
+y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 1840 y(t[len)h(-)f(1])h(=)g
+('\\0';)386 1892 y(})338 1995 y(if)g(\(!t\))386 2047
+y(strcpy)f(\(line,)g("quit"\);)338 2151 y(if)h(\(line[0]\))386
+2203 y({)434 2255 y(char)f(*expansion;)434 2307 y(int)g(result;)434
+2411 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434
+2462 y(if)g(\(result\))481 2514 y(fprintf)g(\(stderr,)g("\045s\\n",)g
+(expansion\);)434 2618 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h
+(2\))481 2670 y({)p eop
 %%Page: 12 14
-12 13 bop 75 -58 a Fo(12)1324 b(GNU)15 b(History)g(Library)481
-183 y Fn({)529 235 y(HIST_ENTRY)23 b(*entry)g(=)g(remove_history)f
-(\(which\);)529 287 y(if)i(\(!entry\))577 339 y(fprintf)f(\(stderr,)f
-("No)i(such)f(entry)g(\045d\\n",)g(which\);)529 391 y(else)577
-443 y({)625 495 y(free)g(\(entry->line\);)625 546 y(free)g(\(entry\);)
-577 598 y(})481 650 y(})434 702 y(else)481 754 y({)529
-806 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f
-(`delete'\\n"\);)481 858 y(})386 910 y(})290 962 y(})195
-1013 y(})p eop
+12 13 bop 75 -58 a Fp(12)1324 b(GNU)15 b(History)g(Library)529
+149 y Fo(free)23 b(\(expansion\);)529 201 y(continue;)481
+253 y(})434 357 y(add_history)f(\(expansion\);)434 409
+y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h(1\);)434
+461 y(free)f(\(expansion\);)386 513 y(})338 616 y(if)h(\(strcmp)f
+(\(line,)g("quit"\))g(==)g(0\))386 668 y(done)g(=)h(1;)338
+720 y(else)f(if)h(\(strcmp)f(\(line,)g("save"\))g(==)h(0\))386
+772 y(write_history)e(\("history_file"\);)338 824 y(else)h(if)h
+(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386 876 y(read_history)e
+(\("history_file"\);)338 928 y(else)h(if)h(\(strcmp)f(\(line,)g
+("list"\))g(==)h(0\))386 980 y({)434 1032 y(register)e(HIST_ENTRY)h
+(**the_list;)434 1083 y(register)f(int)i(i;)434 1187
+y(the_list)e(=)i(history_list)e(\(\);)434 1239 y(if)h(\(the_list\))481
+1291 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e(i++\))529
+1343 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g(history_base,)e
+(the_list[i]->line\);)386 1395 y(})338 1447 y(else)h(if)h(\(strncmp)f
+(\(line,)g("delete",)g(6\))g(==)h(0\))386 1499 y({)434
+1550 y(int)f(which;)434 1602 y(if)g(\(\(sscanf)g(\(line)g(+)h(6,)f
+("\045d",)h(&which\)\))e(==)i(1\))481 1654 y({)529 1706
+y(HIST_ENTRY)f(*entry)g(=)g(remove_history)f(\(which\);)529
+1758 y(if)i(\(!entry\))577 1810 y(fprintf)f(\(stderr,)f("No)i(such)f
+(entry)g(\045d\\n",)g(which\);)529 1862 y(else)577 1914
+y({)625 1966 y(free)g(\(entry->line\);)625 2017 y(free)g(\(entry\);)577
+2069 y(})481 2121 y(})434 2173 y(else)481 2225 y({)529
+2277 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f
+(`delete'\\n"\);)481 2329 y(})386 2381 y(})290 2433 y(})195
+2484 y(})p eop
 %%Page: 13 15
-13 14 bop 75 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1196
-b(13)75 183 y Fk(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75
-359 y Fm(A)75 417 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)7
-b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
-b Fe(7)75 517 y Fm(E)75 575 y Fe(ev)o(en)o(t)d(designators)c
-Fd(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21
-b Fe(1)1012 359 y Fm(H)1012 417 y Fe(history)15 b(ev)o(en)o(ts)s
-Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)16 b Fe(1)1012 467 y(history)f(expansion)6 b Fd(.)j(.)d(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(1)1012 517 y(History)14
-b(Searc)o(hing)5 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)18 b Fe(7)p eop
+13 14 bop 75 -58 a Fp(App)q(endix)17 b(A:)e(Concept)g(Index)1196
+b(13)75 149 y Fl(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75
+321 y Fn(A)75 383 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)8
+b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16
+b Fe(8)75 507 y Fn(E)75 568 y Fe(ev)o(en)o(t)d(designators)g
+Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b
+Fe(1)1012 321 y Fn(H)1012 431 y Fe(history)15 b(ev)o(en)o(ts)d
+Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24
+b Fe(1)1012 500 y(history)15 b(expansion)8 b Fd(.)g(.)e(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)21 b Fe(1)1012 568 y(History)14 b(Searc)o(hing)6
+b Fd(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b
+Fe(8)p eop
 %%Page: 14 16
-14 15 bop 75 -58 a Fo(14)1324 b(GNU)15 b(History)g(Library)p
+14 15 bop 75 -58 a Fp(14)1324 b(GNU)15 b(History)g(Library)p
 eop
 %%Page: 15 17
-15 16 bop 75 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l
-(ariable)g(Index)919 b(15)75 183 y Fk(App)r(endix)25
+15 16 bop 75 -58 a Fp(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l
+(ariable)g(Index)919 b(15)75 149 y Fl(App)r(endix)25
 b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
-b(Index)75 359 y Fm(A)75 417 y Fc(add)p 137 417 12 2
-v 13 w(history)6 b Fd(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(6)75 467 y Fc(append)p
-197 467 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)23 b Fe(8)75 567 y Fm(C)75 625 y Fc(clear)p
-177 625 V 12 w(history)s Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(6)75 675 y Fc(current)p
-217 675 V 11 w(history)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)22 b Fe(7)75 774 y Fm(G)75 832 y Fc(get)p
-137 832 V 13 w(history)p 290 832 V 11 w(event)8 b Fd(.)e(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(9)75 932 y Fm(H)75
-990 y Fc(history)p 217 990 V 11 w(arg)p 288 990 V 13
-w(extract)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Fe(9)75 1040 y Fc(history)p 217 1040 V 11 w(base)f
-Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19
-b Fe(9)75 1090 y Fc(history_co)o(mm)o(ent)o(_c)o(har)g
-Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(10)75 1139 y Fc(history)p
-217 1139 V 11 w(expand)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)23 b Fe(9)75 1189 y Fc(history)p 217
-1189 V 11 w(expansion)p 408 1189 V 11 w(char)17 b Fd(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1239 y Fc(history)p 217
-1239 V 11 w(get)6 b Fd(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(7)75 1289 y Fc(history)p
-217 1289 V 11 w(get)p 288 1289 V 13 w(history)p 441 1289
-V 12 w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1339 y Fc(history_in)o(hi)o
-(bit)o(_e)o(xpa)o(nsi)o(on)o(_fu)o(nc)o(tio)o(n)c Fd(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(10)75 1389 y Fc(history)p
-217 1389 V 11 w(is)p 268 1389 V 14 w(stifled)8 b Fd(.)s(.)f(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)21 b Fe(6)75 1438 y Fc(history)p
-217 1438 V 11 w(length)15 b Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)17 b Fe(9)75 1488 y Fc(history)p 217
-1488 V 11 w(list)5 b Fd(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)17 b Fe(7)75 1538 y Fc(history_no)o(_e)o(xpa)o(nd)o
-(_ch)o(ars)e Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(10)75 1588 y Fc(history_qu)o(ot)o
-(es_)o(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)13 b Fd(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(10)75 1638
-y Fc(history)p 217 1638 V 11 w(search)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75 1687 y Fc(history_se)o(ar)o
-(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)15 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)18 b Fe(10)75 1737 y Fc(history)p
-217 1737 V 11 w(search)p 348 1737 V 12 w(pos)8 b Fd(.)d(.)i(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)21 b Fe(8)75 1787 y Fc(history)p
-217 1787 V 11 w(search)p 348 1787 V 12 w(prefix)5 b Fd(.)t(.)h(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)17 b Fe(8)75 1837 y Fc(history)p 217 1837
-V 11 w(set)p 288 1837 V 13 w(history)p 441 1837 V 12
-w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1887 y Fc(history)p
-217 1887 V 11 w(set)p 288 1887 V 13 w(pos)t Fd(.)5 b(.)h(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(7)1012 359
-y Fc(history_sub)o(st)o(_ch)o(ar)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-17 b Fe(10)1012 409 y Fc(history)p 1154 409 V 12 w(tokenize)8
-b Fd(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fe(9)1012 459 y Fc(history)p 1154 459 V 12 w(total)p
-1266 459 V 12 w(bytes)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20
-b Fe(7)1012 509 y Fc(history)p 1154 509 V 12 w(truncate)p
-1326 509 V 11 w(file)5 b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
-b Fe(8)1012 612 y Fm(M)1012 670 y Fc(max)p 1074 670 V
-13 w(input)p 1187 670 V 13 w(history)13 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)16 b Fe(9)1012 773 y Fm(N)1012 831
-y Fc(next)p 1094 831 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(7)1012
-934 y Fm(P)1012 992 y Fc(previous)p 1174 992 V 11 w(history)8
-b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Fe(7)1012 1096 y Fm(R)1012 1154 y Fc(read)p 1094 1154
-V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)18 b Fe(8)1012 1204 y Fc(read)p 1094
-1204 V 13 w(history)p 1247 1204 V 11 w(range)8 b Fd(.)d(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)21 b Fe(8)1012 1253 y Fc(remove)p
-1134 1253 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)24 b Fe(6)1012 1303 y Fc(replace)p 1154
-1303 V 12 w(history)p 1306 1303 V 11 w(entry)5 b Fd(.)t(.)h(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)18 b Fe(6)1012 1406 y Fm(S)1012 1464 y Fc(stifle)p
-1134 1464 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)24 b Fe(6)1012 1568 y Fm(U)1012 1626
-y Fc(unstifle)p 1174 1626 V 11 w(history)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(6)1012 1676 y Fc(using)p
-1114 1676 V 13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1779 y Fm(W)1012
-1837 y Fc(where)p 1114 1837 V 13 w(history)s Fd(.)s(.)6
-b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Fe(7)1012 1887 y Fc(write)p 1114 1887 V 13 w(history)s
-Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b(Index)75 321 y Fn(A)75 382 y Fc(add_histor)o(y)8 b
+Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23
+b Fe(6)75 428 y Fc(append_his)o(to)o(ry)8 b Fd(.)s(.)f(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)21 b Fe(9)75 557 y Fn(C)75 618
+y Fc(clear_hist)o(or)o(y)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)22 b Fe(6)75 664 y Fc(current_hi)o(st)o(ory)7
+b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b
+Fe(7)75 793 y Fn(G)75 854 y Fc(get_histor)o(y_)o(eve)o(nt)5
+b Fd(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 b Fe(9)75
+984 y Fn(H)75 1044 y Fc(history_ar)o(g_)o(ext)o(ra)o(ct)5
+b Fd(.)s(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1090 y Fc(history_ba)o(se)
+6 b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Fe(10)75 1136 y Fc(history_co)o(mm)o(ent)o(_c)o(har)s
+Fd(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(10)75 1182 y Fc(history_ex)o(pa)o(nd)8
+b Fd(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
+b Fe(9)75 1227 y Fc(history_ex)o(pa)o(nsi)o(on)o(_ch)o(ar)8
+b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)24 b Fe(10)75 1273 y Fc(history_ge)o(t)8
+b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23
+b Fe(7)75 1319 y Fc(history_ge)o(t_)o(his)o(to)o(ry_)o(sta)o(te)6
+b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)22 b Fe(6)75 1364 y Fc(history_in)o(hi)o(bit)o(_e)o(xpa)o(nsi)o(on)
+o(_fu)o(nc)o(tio)o(n)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)h(.)24
+b Fe(11)75 1410 y Fc(history_is)o(_s)o(tif)o(le)o(d)6
+b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(7)75 1456
+y Fc(history_le)o(ng)o(th)8 b Fd(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)21 b Fe(10)75 1501 y Fc(history_li)o(st)6 b Fd(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75
+1547 y Fc(history_ma)o(x_)o(ent)o(ri)o(es)t Fd(.)s(.)6
+b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)17 b Fe(10)75 1593 y Fc(history_no)o(_e)o(xpa)o(nd)o
+(_ch)o(ars)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)23 b Fe(10)75 1638 y Fc(history_qu)o(ot)o(es_)o
+(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)t Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)17 b Fe(10)75 1684 y Fc(history_se)o(ar)o(ch)8
+b Fd(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
+b Fe(8)75 1730 y Fc(history_se)o(ar)o(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o
+(rs)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18
+b Fe(10)75 1776 y Fc(history_se)o(ar)o(ch_)o(po)o(s)6
+b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(8)75 1821
+y Fc(history_se)o(ar)o(ch_)o(pr)o(efi)o(x)s Fd(.)t(.)6
+b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)16 b Fe(8)75 1867 y Fc(history_se)o(t_)o(his)o(to)o(ry_)
+o(sta)o(te)6 b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)22 b Fe(6)75 1913 y Fc(history_se)o(t_)o(pos)7
+b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b
+Fe(7)1012 321 y Fc(history_sub)o(st)o(_ch)o(ar)t Fd(.)t(.)6
+b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(10)1012 368 y Fc(history_tok)o(en)o(ize)
+6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)20 b Fe(9)1012
+414 y Fc(history_tot)o(al)o(_by)o(te)o(s)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)18 b Fe(7)1012 460 y Fc(history_tru)o(nc)o(ate)o(_f)o(ile)s
+Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(9)1012 507 y Fc(history_wor)o(d_)o(del)
+o(im)o(ite)o(rs)7 b Fd(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Fe(10)1012 640 y Fn(N)1012
+702 y Fc(next_histor)o(y)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)23 b Fe(7)1012 836 y Fn(P)1012 898 y
+Fc(previous_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)20 b Fe(7)1012 1031 y Fn(R)1012 1094 y Fc(read_histor)o(y)7
+b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23
+b Fe(8)1012 1140 y Fc(read_histor)o(y_)o(ran)o(ge)5 b
+Fd(.)s(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Fe(8)1012 1186
+y Fc(remove_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)22 b Fe(6)1012 1233 y Fc(replace_his)o(to)o(ry_)o(en)o(try)s
+Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1366 y Fn(S)1012
+1429 y Fc(stifle_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)22 b Fe(7)1012 1562 y Fn(U)1012 1624
+y Fc(unstifle_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)20 b Fe(7)1012 1671 y Fc(using_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(6)1012 1804
+y Fn(W)1012 1866 y Fc(where_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(7)1012 1913 y Fc(write_histo)o(ry)6
+b Fd(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
 b Fe(8)p eop
 %%Page: 16 18
-16 17 bop 75 -58 a Fo(16)1324 b(GNU)15 b(History)g(Library)p
+16 17 bop 75 -58 a Fp(16)1324 b(GNU)15 b(History)g(Library)p
 eop
 %%Page: -1 19
--1 18 bop 1862 -58 a Fo(i)75 183 y Fk(T)-7 b(able)27
-b(of)f(Con)n(ten)n(ts)75 354 y Fm(1)67 b(Using)22 b(History)h(In)n
+-1 18 bop 1862 -58 a Fp(i)75 149 y Fl(T)-7 b(able)27
+b(of)f(Con)n(ten)n(ts)75 320 y Fn(1)67 b(Using)22 b(History)h(In)n
 (teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)h(.)31 b Fm(1)224 423 y Fo(1.1)45 b(History)15
+(.)f(.)g(.)g(.)h(.)31 b Fn(1)224 389 y Fp(1.1)45 b(History)15
 b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fo(1)374 478 y(1.1.1)44
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fp(1)374 444 y(1.1.1)44
 b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)26 b Fo(1)374 532 y(1.1.2)44 b(W)l(ord)15
+f(.)h(.)f(.)h(.)26 b Fp(1)374 499 y(1.1.2)44 b(W)l(ord)15
 b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)19 b Fo(2)374 587 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8
+(.)19 b Fp(2)374 553 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8
 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)19 b Fo(2)75 708 y Fm(2)67 b(Programming)23
+f(.)h(.)f(.)19 b Fp(2)75 675 y Fn(2)67 b(Programming)23
 b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f
-(.)g(.)38 b Fm(5)224 777 y Fo(2.1)45 b(In)o(tro)q(duction)16
+(.)g(.)38 b Fn(5)224 743 y Fp(2.1)45 b(In)o(tro)q(duction)16
 b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)24 b Fo(5)224 832 y(2.2)45 b(History)15
+f(.)h(.)f(.)h(.)24 b Fp(5)224 798 y(2.2)45 b(History)15
 b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fo(5)224 886
+g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fp(5)224 853
 y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h
 (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26
-b Fo(6)374 941 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e
+b Fp(6)374 907 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e
 (Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b
-Fo(6)374 996 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d
+Fp(6)374 962 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d
 Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)29 b Fo(6)374 1051 y(2.3.3)44
+h(.)f(.)h(.)f(.)h(.)f(.)29 b Fp(6)374 1017 y(2.3.3)44
 b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c
 Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26
-b Fo(7)374 1106 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g
+b Fp(7)374 1072 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g
 (List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)25 b Fo(7)374 1160 y(2.3.5)44 b(Searc)o(hing)16
+(.)h(.)25 b Fp(7)374 1127 y(2.3.5)44 b(Searc)o(hing)16
 b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
-b Fo(7)374 1215 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6
+b Fp(8)374 1181 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6
 b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)20 b Fo(8)374 1270 y(2.3.7)44
+f(.)h(.)f(.)h(.)f(.)h(.)20 b Fp(8)374 1236 y(2.3.7)44
 b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)24 b Fo(8)224 1325 y(2.4)45 b(History)15 b(V)l(ariables)6
-b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)21 b Fo(9)224 1380 y(2.5)45 b(History)15
+h(.)f(.)24 b Fp(9)224 1291 y(2.4)45 b(History)15 b(V)l(ariables)6
+b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)21 b Fp(10)224 1346 y(2.5)45 b(History)15
 b(Programming)f(Example)7 b Fa(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
-b Fo(10)75 1501 y Fm(App)r(endix)i(A)67 b(Concept)22
+b Fp(11)75 1467 y Fn(App)r(endix)i(A)67 b(Concept)22
 b(Index)17 b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)h(.)f(.)g(.)38 b Fm(13)75 1636 y(App)r(endix)24 b(B)67
+(.)h(.)f(.)g(.)38 b Fn(13)75 1602 y(App)r(endix)24 b(B)67
 b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16
-b Fb(.)10 b(.)g(.)g(.)38 b Fm(15)p eop
+b Fb(.)10 b(.)g(.)g(.)38 b Fn(15)p eop
 %%Page: -2 20
--2 19 bop 75 -58 a Fo(ii)1346 b(GNU)15 b(History)g(Library)p
+-2 19 bop 75 -58 a Fp(ii)1346 b(GNU)15 b(History)g(Library)p
 eop
 %%Trailer
 end
diff --git a/readline/doc/history_3.ps b/readline/doc/history_3.ps
new file mode 100644
index 0000000..f5231a5
--- /dev/null
+++ b/readline/doc/history_3.ps
@@ -0,0 +1,800 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.16.1
+%%CreationDate: Mon Mar 18 10:17:27 2002
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.16 1
+%%Pages: 7
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.16 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME)
+.219 E F0(history \255 GNU History Library)108 96 Q F1(COPYRIGHT)72
+112.8 Q F0(The GNU History Library is Cop)108 124.8 Q
+(yright \251 1989-2002 by the Free Softw)-.1 E(are F)-.1 E
+(oundation, Inc.)-.15 E F1(DESCRIPTION)72 141.6 Q F0(Man)108 153.6 Q
+2.81(yp)-.15 G .31(rograms read input from the user a line at a time.)
+-2.81 F .309(The GNU History library is able to k)5.309 F .309
+(eep track of)-.1 F .024(those lines, associate arbitrary data with eac\
+h line, and utilize information from pre)108 165.6 R .024
+(vious lines in composing)-.25 F(ne)108 177.6 Q 2.5(wo)-.25 G(nes.)-2.5
+E F1(HIST)72 199.2 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81
+E F0 .823(The history library supports a history e)108 211.2 R .822
+(xpansion feature that is identical to the history e)-.15 F .822
+(xpansion in)-.15 F/F2 10/Times-Bold@0 SF(bash.)3.322 E F0
+(This section describes what syntax features are a)108 223.2 Q -.25(va)
+-.2 G(ilable.).25 E 1.305(History e)108 240 R 1.305
+(xpansions introduce w)-.15 F 1.306(ords from the history list into the\
+ input stream, making it easy to repeat)-.1 F .21
+(commands, insert the ar)108 252 R .21(guments to a pre)-.18 F .209
+(vious command into the current input line, or \214x errors in pre)-.25
+F(vious)-.25 E(commands quickly)108 264 Q(.)-.65 E 1.296(History e)108
+280.8 R 1.297(xpansion is usually performed immediately after a complet\
+e line is read.)-.15 F 1.297(It tak)6.297 F 1.297(es place in tw)-.1 F
+(o)-.1 E 2.855(parts. The)108 292.8 R .354(\214rst is to determine whic\
+h line from the history list to use during substitution.)2.855 F .354
+(The second is to)5.354 F .116
+(select portions of that line for inclusion into the current one.)108
+304.8 R .117(The line selected from the history is the)5.116 F/F3 10
+/Times-Italic@0 SF -.15(ev)2.617 G(ent).15 E F0(,)A .846
+(and the portions of that line that are acted upon are)108 316.8 R F3
+(wor)3.346 E(ds)-.37 E F0 5.846(.V)C(arious)-6.956 E F3(modi\214er)3.346
+E(s)-.1 E F0 .846(are a)3.346 F -.25(va)-.2 G .845(ilable to manipulate)
+.25 F .304(the selected w)108 328.8 R 2.804(ords. The)-.1 F .304
+(line is brok)2.804 F .304(en into w)-.1 F .304(ords in the same f)-.1 F
+.304(ashion as)-.1 F F2(bash)2.804 E F0 .305
+(does when reading input, so)2.804 F .539(that se)108 340.8 R -.15(ve)
+-.25 G .539(ral w).15 F .539(ords that w)-.1 F .539
+(ould otherwise be separated are considered one w)-.1 F .538
+(ord when surrounded by quotes)-.1 F .307(\(see the description of)108
+352.8 R F2(history_tok)2.807 E(enize\(\))-.1 E F0(belo)2.807 E 2.807
+(w\). History)-.25 F -.15(ex)2.807 G .307
+(pansions are introduced by the appearance of).15 F .52(the history e)
+108 364.8 R .52(xpansion character)-.15 F 3.02(,w)-.4 G .52(hich is)
+-3.02 F F2(!)3.853 E F0 .52(by def)3.853 F 3.02(ault. Only)-.1 F .52
+(backslash \()3.02 F F2(\\).833 E F0 3.02(\)a).833 G .52
+(nd single quotes can quote the)-3.02 F(history e)108 376.8 Q
+(xpansion character)-.15 E(.)-.55 E F2(Ev)87 393.6 Q(ent Designators)-.1
+E F0(An e)108 405.6 Q -.15(ve)-.25 G(nt designator is a reference to a \
+command line entry in the history list.).15 E F2(!)108 422.4 Q F0
+(Start a history substitution, e)32.67 E(xcept when follo)-.15 E
+(wed by a)-.25 E F2(blank)2.5 E F0 2.5(,n)C -.25(ew)-2.5 G
+(line, = or \(.).25 E F2(!)108 434.4 Q F3(n)A F0(Refer to command line)
+27.67 E F3(n)2.5 E F0(.).24 E F2<21ad>108 446.4 Q F3(n)A F0
+(Refer to the current command line minus)21.97 E F3(n)2.5 E F0(.).24 E
+F2(!!)108 458.4 Q F0(Refer to the pre)29.34 E(vious command.)-.25 E
+(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 470.4 Q F3(string)
+A F0(Refer to the most recent command starting with)9.33 E F3(string)2.5
+E F0(.).22 E F2(!?)108 482.4 Q F3(string)A F2([?])A F0 1.057
+(Refer to the most recent command containing)144 494.4 R F3(string)3.557
+E F0 6.057(.T).22 G 1.057(he trailing)-6.057 F F2(?)3.557 E F0 1.057
+(may be omitted if)3.557 F F3(string)3.557 E F0(is)3.557 E(follo)144
+506.4 Q(wed immediately by a ne)-.25 E(wline.)-.25 E/F4 12/Times-Bold@0
+SF(^)108 523.4 Q F3(string1)-5 I F4(^)5 I F3(string2)-5 I F4(^)5 I F0
+2.66(Quick substitution.)144 530.4 R 2.66
+(Repeat the last command, replacing)7.66 F F3(string1)5.16 E F0(with)
+5.16 E F3(string2)5.16 E F0 7.66(.E).02 G(qui)-7.66 E -.25(va)-.25 G
+2.66(lent to).25 F -.74(``)144 542.4 S(!!:s/).74 E F3(string1)A F0(/)A
+F3(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0
+(belo)2.5 E(w\).)-.25 E F2(!#)108 554.4 Q F0
+(The entire command line typed so f)27.67 E(ar)-.1 E(.)-.55 E F2 -.75
+(Wo)87 571.2 S(rd Designators).75 E F0 -.8(Wo)108 583.2 S 1.313
+(rd designators are used to select desired w).8 F 1.314(ords from the e)
+-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.314
+(separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F
+.53(from the w)108 595.2 R .529(ord designator)-.1 F 5.529(.I)-.55 G
+3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529
+(ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2
+($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F2<ad>3.029 E F0 3.029(,o)C(r)
+-3.029 E F2(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3
+(are numbered from the be)108 607.2 R 1.3
+(ginning of the line, with the \214rst w)-.15 F 1.301
+(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8
+F(inserted into the current line separated by single spaces.)108 619.2 Q
+F2 2.5(0\()108 636 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 648 Q 2.5
+(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E F3
+(n)108 660 Q F0(The)31 E F3(n)2.5 E F0(th w)A(ord.)-.1 E F2(^)108 672 Q
+F0(The \214rst ar)32.67 E 2.5(gument. That)-.18 F(is, w)2.5 E(ord 1.)-.1
+E F2($)108 684 Q F0(The last ar)31 E(gument.)-.18 E F2(%)108 696 Q F0
+(The w)26 E(ord matched by the most recent `?)-.1 E F3(string)A F0
+(?' search.)A F3(x)108 708 Q F2<ad>A F3(y)A F0 2.5(Ar)21.42 G(ange of w)
+-2.5 E(ords; `\255)-.1 E F3(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255)
+-.25 E F3(y)A F0('.)A(GNU History 4.3)72 768 Q(2002 January 31)131.79 E
+(1)195.95 E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(*)108 84 Q F0 .316
+(All of the w)31 F .316(ords b)-.1 F .316(ut the zeroth.)-.2 F .315
+(This is a synon)5.315 F .315(ym for `)-.15 F/F2 10/Times-Italic@0 SF
+(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*)
+2.815 E F0 .315(if there is)2.815 F(just one w)144 96 Q(ord in the e)-.1
+E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 E F1
+(x*)108 108 Q F0(Abbre)26 E(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1
+<78ad>108 120 Q F0(Abbre)25.3 E(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5
+E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E
+(If a w)108 136.8 Q(ord designator is supplied without an e)-.1 E -.15
+(ve)-.25 G(nt speci\214cation, the pre).15 E
+(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1
+(Modi\214ers)87 153.6 Q F0 .183(After the optional w)108 165.6 R .183
+(ord designator)-.1 F 2.683(,t)-.4 G .184
+(here may appear a sequence of one or more of the follo)-2.683 F .184
+(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 177.6 Q F1(h)108
+194.4 Q F0(Remo)30.44 E .3 -.15(ve a t)-.15 H
+(railing \214le name component, lea).15 E(ving only the head.)-.2 E F1
+(t)108 206.4 Q F0(Remo)32.67 E .3 -.15(ve a)-.15 H
+(ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r)
+108 218.4 Q F0(Remo)31.56 E .3 -.15(ve a t)-.15 H(railing suf).15 E
+(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E
+(ving the basename.)-.2 E F1(e)108 230.4 Q F0(Remo)31.56 E .3 -.15(ve a)
+-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 242.4
+Q F0(Print the ne)30.44 E 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2
+E -.15(xe)-.15 G(cute it.).15 E F1(q)108 254.4 Q F0
+(Quote the substituted w)30.44 E(ords, escaping further substitutions.)
+-.1 E F1(x)108 266.4 Q F0(Quote the substituted w)31 E(ords as with)-.1
+E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks)
+2.5 E F0(and ne)2.5 E(wlines.)-.25 E F1(s/)108 278.4 Q F2(old)A F1(/)A
+F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 290.4 Q F2(ne)2.814 E(w)-.15 E
+F0 .314(for the \214rst occurrence of)2.814 F F2(old)2.814 E F0 .314
+(in the e)2.814 F -.15(ve)-.25 G .314(nt line.).15 F(An)5.314 E 2.814
+(yd)-.15 G .314(elimiter can be used in place)-2.814 F .616(of /.)144
+302.4 R .617
+(The \214nal delimiter is optional if it is the last character of the e)
+5.616 F -.15(ve)-.25 G .617(nt line.).15 F .617(The delimiter may)5.617
+F .75(be quoted in)144 314.4 R F2(old)3.25 E F0(and)3.25 E F2(ne)3.25 E
+(w)-.15 E F0 .75(with a single backslash.)3.25 F .749(If & appears in)
+5.75 F F2(ne)3.249 E(w)-.15 E F0 3.249(,i).31 G 3.249(ti)-3.249 G 3.249
+(sr)-3.249 G .749(eplaced by)-3.249 F F2(old)3.249 E F0 5.749(.A).77 G
+.369(single backslash will quote the &.)144 326.4 R(If)5.369 E F2(old)
+2.869 E F0 .37(is null, it is set to the last)2.869 F F2(old)2.87 E F0
+.37(substituted, or)2.87 F 2.87(,i)-.4 G 2.87(fn)-2.87 G 2.87(op)-2.87 G
+(re)-2.87 E(vi-)-.25 E(ous history substitutions took place, the last)
+144 338.4 Q F2(string)2.5 E F0(in a)2.5 E F1(!?)2.5 E F2(string)A F1
+([?])A F0(search.)5 E F1(&)108 350.4 Q F0(Repeat the pre)27.67 E
+(vious substitution.)-.25 E F1(g)108 362.4 Q F0 .398
+(Cause changes to be applied o)31 F -.15(ve)-.15 G 2.898(rt).15 G .398
+(he entire e)-2.898 F -.15(ve)-.25 G .398(nt line.).15 F .397
+(This is used in conjunction with `)5.398 F F1(:s)A F0 2.897('\()C
+(e.g.,)-2.897 E(`)144 374.4 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w)-.15 E
+F1(/)A F0 1.218('\) or `)B F1(:&)A F0 3.718('. If)B 1.218(used with `)
+3.718 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.219
+(elimiter can be used in place of /, and the \214nal)-3.718 F
+(delimiter is optional if it is the last character of the e)144 386.4 Q
+-.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(PR)72 403.2 Q
+(OGRAMMING WITH HIST)-.329 E(OR)-.197 E 2.738(YF)-.383 G(UNCTIONS)-2.738
+E F0(This section describes ho)108 415.2 Q 2.5(wt)-.25 G 2.5(ou)-2.5 G
+(se the History library in other programs.)-2.5 E F1(Intr)87 432 Q
+(oduction to History)-.18 E F0 .797
+(The programmer using the History library has a)108 444 R -.25(va)-.2 G
+.796(ilable functions for remembering lines on a history list,).25 F
+.307(associating arbitrary data with a line, remo)108 456 R .308
+(ving lines from the list, searching through the list for a line con-)
+-.15 F .303(taining an arbitrary te)108 468 R .303
+(xt string, and referencing an)-.15 F 2.803(yl)-.15 G .303
+(ine in the list directly)-2.803 F 5.303(.I)-.65 G 2.803(na)-5.303 G
+.303(ddition, a history)-2.803 F F2 -.2(ex)2.802 G(pansion).2 E F0
+(function is a)108 480 Q -.25(va)-.2 G(ilable which pro).25 E
+(vides for a consistent user interf)-.15 E(ace across dif)-.1 E
+(ferent programs.)-.25 E .059(The user using programs written with the \
+History library has the bene\214t of a consistent user interf)108 496.8
+R .059(ace with a)-.1 F .918(set of well-kno)108 508.8 R .917
+(wn commands for manipulating the te)-.25 F .917(xt of pre)-.15 F .917
+(vious lines and using that te)-.25 F .917(xt in ne)-.15 F 3.417(wc)-.25
+G(om-)-3.417 E 4.183(mands. The)108 520.8 R 1.684(basic history manipul\
+ation commands are identical to the history substitution pro)4.183 F
+1.684(vided by)-.15 F F1(bash)108 532.8 Q F0(.)A .904
+(If the programmer desires, he can use the Readline library)108 549.6 R
+3.403(,w)-.65 G .903(hich includes some history manipulation by)-3.403 F
+(def)108 561.6 Q(ault, and has the added adv)-.1 E
+(antage of command line editing.)-.25 E .39(Before declaring an)108
+578.4 R 2.89(yf)-.15 G .39(unctions using an)-2.89 F 2.89(yf)-.15 G .39
+(unctionality the History library pro)-2.89 F .39
+(vides in other code, an appli-)-.15 F .067
+(cation writer should include the \214le)108 590.4 R F2(<r)4.233 E
+(eadline/history)-.37 E(.h>)-.55 E F0 .067(in an)4.233 F 2.566<798c>-.15
+G .066(le that uses the History library')-2.566 F 2.566(sf)-.55 G
+(eatures.)-2.566 E .538(It supplies e)108 602.4 R .538
+(xtern declarations for all of the library')-.15 F 3.038(sp)-.55 G .538
+(ublic functions and v)-3.038 F .539(ariables, and declares all of the)
+-.25 F(public data structures.)108 614.4 Q F1(History Storage)87 643.2 Q
+F0(The history list is an array of history entries.)108 655.2 Q 2.5(Ah)5
+G(istory entry is declared as follo)-2.5 E(ws:)-.25 E F2(typedef void *)
+108 672 Q F1(histdata_t;)2.5 E F0(typedef struct _hist_entry {)108 688.8
+Q(char *line;)113 700.8 Q(histdata_t data;)113 712.8 Q 2.5(}H)108 724.8
+S(IST_ENTR)-2.5 E -.92(Y;)-.65 G(GNU History 4.3)72 768 Q
+(2002 January 31)131.79 E(2)195.95 E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E
+(The history list itself might therefore be declared as)108 84 Q/F1 10
+/Times-Italic@0 SF(HIST_ENTR)108 100.8 Q 2.5(Y*)-.18 G(*)-2.5 E/F2 10
+/Times-Bold@0 SF(the_history_list;)2.5 E F0(The state of the History li\
+brary is encapsulated into a single structure:)108 117.6 Q(/*)108 134.4
+Q 2.5(*As)110.5 146.4 S
+(tructure used to pass around the current state of the history)-2.5 E(.)
+-.65 E(*/)110.5 158.4 Q(typedef struct _hist_state {)108 170.4 Q
+(HIST_ENTR)113 182.4 Q 2.5(Y*)-.65 G
+(*entries; /* Pointer to the entries themselv)-2.5 E(es. */)-.15 E
+(int of)113 194.4 Q 25(fset; /*)-.25 F
+(The location pointer within this array)2.5 E 2.5(.*)-.65 G(/)-2.5 E
+(int length;)113 206.4 Q(/* Number of elements within this array)27.5 E
+2.5(.*)-.65 G(/)-2.5 E(int size;)113 218.4 Q
+(/* Number of slots allocated to this array)32.5 E 2.5(.*)-.65 G(/)-2.5
+E(int \215ags;)113 230.4 Q 2.5(}H)108 242.4 S(IST)-2.5 E(OR)-.18 E(Y_ST)
+-.65 E -1.11(AT)-.93 G(E;)1.11 E(If the \215ags member includes)108
+259.2 Q F2(HS_STIFLED)2.5 E F0 2.5(,t)C(he history has been sti\215ed.)
+-2.5 E/F3 10.95/Times-Bold@0 SF(History Functions)72 276 Q F0
+(This section describes the calling sequence for the v)108 288 Q
+(arious functions e)-.25 E(xported by the GNU History library)-.15 E(.)
+-.65 E F2(Initializing History and State Management)87 304.8 Q F0 1.274
+(This section describes functions used to initialize and manage the sta\
+te of the History library when you)108 316.8 R -.1(wa)108 328.8 S
+(nt to use the history functions in your program.).1 E F1(void)108 352.8
+Q F2(using_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Be)108
+364.8 Q(gin a session in which the history functions might be used.)-.15
+E(This initializes the interacti)5 E .3 -.15(ve v)-.25 H(ariables.)-.1 E
+F1(HIST)108 388.8 Q(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5(E*).37 G F2
+(history_get_history_state)A F0(\()4.166 E F1(void)A F0(\))1.666 E
+(Return a structure describing the current state of the input history)
+108 400.8 Q(.)-.65 E F1(void)108 424.8 Q F2(history_set_history_state)
+2.5 E F0(\()4.166 E F1(HIST)A(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5
+(E*).37 G(state)-2.5 E F0(\))1.666 E
+(Set the state of the history list according to)108 436.8 Q F1(state)2.5
+E F0(.)A F2(History List Management)87 465.6 Q F0
+(These functions manage indi)108 477.6 Q(vidual entries on the history \
+list, or set parameters managing the list itself.)-.25 E F1(void)108
+501.6 Q F2(add_history)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15
+E F0(\))1.666 E(Place)108 513.6 Q F1(string)2.5 E F0
+(at the end of the history list.)2.5 E
+(The associated data \214eld \(if an)5 E(y\) is set to)-.15 E F2(NULL)
+2.5 E F0(.)A F1(HIST_ENTR)108 537.6 Q 2.5(Y*)-.18 G F2 -.18(re)C(mo).18
+E -.1(ve)-.1 G(_history).1 E F0(\()4.166 E F1(int whic)A(h)-.15 E F0(\))
+1.666 E(Remo)108 549.6 Q .352 -.15(ve h)-.15 H .052(istory entry at of)
+.15 F(fset)-.25 E F1(whic)2.553 E(h)-.15 E F0 .053(from the history)
+2.553 F 5.053(.T)-.65 G .053(he remo)-5.053 F -.15(ve)-.15 G 2.553(de)
+.15 G .053(lement is returned so you can free the)-2.553 F
+(line, data, and containing structure.)108 561.6 Q F1(HIST_ENTR)108
+585.6 Q 2.5(Y*)-.18 G F2 -.18(re)C(place_history_entry).18 E F0(\()4.166
+E F1(int whic)A -.834(h, const)-.15 F -.15(ch)2.5 G(ar *line).15 E 1.666
+(,h)-.1 G(istdata_t data)-1.666 E F0(\))3.332 E(Mak)108 597.6 Q 2.868
+(et)-.1 G .368(he history entry at of)-2.868 F(fset)-.25 E F1(whic)2.868
+E(h)-.15 E F0(ha)2.868 E -.15(ve)-.2 G F1(line)3.018 E F0(and)2.868 E F1
+(data)2.868 E F0 5.367(.T)C .367
+(his returns the old entry so you can dispose of)-5.367 F(the data.)108
+609.6 Q(In the case of an in)5 E -.25(va)-.4 G(lid).25 E F1(whic)2.5 E
+(h)-.15 E F0 2.5(,a)C F2(NULL)A F0(pointer is returned.)2.5 E F1(void)
+108 633.6 Q F2(clear_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E
+(Clear the history list by deleting all the entries.)108 645.6 Q F1
+(void)108 669.6 Q F2(sti\215e_history)2.5 E F0(\()4.166 E F1(int max)A
+F0(\))1.666 E(Sti\215e the history list, remembering only the last)108
+681.6 Q F1(max)2.5 E F0(entries.)2.5 E F1(int)108 705.6 Q F2
+(unsti\215e_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .46
+(Stop sti\215ing the history)108 717.6 R 5.46(.T)-.65 G .46
+(his returns the pre)-5.46 F .46
+(viously-set maximum number of history entries \(as set by)-.25 F F2
+(sti-)2.96 E(\215e_history\(\))108 729.6 Q F0 2.5(\). history)B -.1(wa)
+2.5 G 2.5(ss).1 G 2.5(ti\215ed. The)-2.5 F -.25(va)2.5 G(lue is positi)
+.25 E .3 -.15(ve i)-.25 H 2.5(ft).15 G(he history w)-2.5 E
+(as sti\215ed, ne)-.1 E -.05(ga)-.15 G(ti).05 E .3 -.15(ve i)-.25 H 2.5
+(fi).15 G 2.5(tw)-2.5 G(asn')-2.6 E(t.)-.18 E(GNU History 4.3)72 768 Q
+(2002 January 31)131.79 E(3)195.95 E EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF(int)108 84 Q/F2 10
+/Times-Bold@0 SF(history_is_sti\215ed)2.5 E F0(\()4.166 E F1(void)A F0
+(\))1.666 E
+(Returns non-zero if the history is sti\215ed, zero if it is not.)108 96
+Q F2(Inf)87 124.8 Q(ormation About the History List)-.25 E F0(These fun\
+ctions return information about the entire history list or indi)108
+136.8 Q(vidual list entries.)-.25 E F1(HIST_ENTR)108 160.8 Q 2.5(Y*)-.18
+G(*)-2.5 E F2(history_list)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E
+.708(Return a)108 172.8 R F2(NULL)3.208 E F0 .708(terminated array of)
+3.208 F F1(HIST_ENTR)3.208 E 3.208(Y*)-.18 G F0 .708
+(which is the current input history)B 5.707(.E)-.65 G .707
+(lement 0 of this)-5.707 F(list is the be)108 184.8 Q(ginning of time.)
+-.15 E(If there is no history)5 E 2.5(,r)-.65 G(eturn)-2.5 E F2(NULL)2.5
+E F0(.)A F1(int)108 208.8 Q F2(wher)2.5 E(e_history)-.18 E F0(\()4.166 E
+F1(void)A F0(\))1.666 E(Returns the of)108 220.8 Q
+(fset of the current history element.)-.25 E F1(HIST_ENTR)108 244.8 Q
+2.5(Y*)-.18 G F2(curr)A(ent_history)-.18 E F0(\()4.166 E F1(void)A F0
+(\))1.666 E 1.373
+(Return the history entry at the current position, as determined by)108
+256.8 R F2(wher)3.873 E(e_history\(\))-.18 E F0 6.373(.I)C 3.873(ft)
+-6.373 G 1.374(here is no entry)-3.873 F(there, return a)108 268.8 Q F2
+(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(HIST_ENTR)108 292.8 Q 2.5(Y*)
+-.18 G F2(history_get)A F0(\()4.166 E F1(int of)A(fset)-.18 E F0(\))
+1.666 E .288(Return the history entry at position)108 304.8 R F1(of)
+2.787 E(fset)-.18 E F0 2.787(,s)C .287(tarting from)-2.787 F F2
+(history_base)2.787 E F0 5.287(.I)C 2.787(ft)-5.287 G .287
+(here is no entry there, or if)-2.787 F F1(of)2.787 E(fset)-.18 E F0
+(is greater than the history length, return a)108 316.8 Q F2(NULL)2.5 E
+F0(pointer)2.5 E(.)-.55 E F1(int)108 340.8 Q F2(history_total_bytes)2.5
+E F0(\()4.166 E F1(void)A F0(\))1.666 E .391
+(Return the number of bytes that the primary history entries are using.)
+108 352.8 R .392(This function returns the sum of the)5.392 F
+(lengths of all the lines in the history)108 364.8 Q(.)-.65 E F2(Mo)87
+393.6 Q(ving Ar)-.1 E(ound the History List)-.18 E F0
+(These functions allo)108 405.6 Q 2.5(wt)-.25 G(he current inde)-2.5 E
+2.5(xi)-.15 G(nto the history list to be set or changed.)-2.5 E F1(int)
+108 429.6 Q F2(history_set_pos)2.5 E F0(\()4.166 E F1(int pos)A F0(\))
+1.666 E .79(Set the current history of)108 441.6 R .79(fset to)-.25 F F1
+(pos)3.29 E F0 3.29(,a)C 3.29(na)-3.29 G .79(bsolute inde)-3.29 F 3.29
+(xi)-.15 G .79(nto the list.)-3.29 F .79(Returns 1 on success, 0 if)5.79
+F F1(pos)3.29 E F0 .79(is less)3.29 F
+(than zero or greater than the number of history entries.)108 453.6 Q F1
+(HIST_ENTR)108 477.6 Q 2.5(Y*)-.18 G F2(pr)A -.15(ev)-.18 G
+(ious_history).15 E F0(\()4.166 E F1(void)A F0(\))1.666 E .207
+(Back up the current history of)108 489.6 R .207(fset to the pre)-.25 F
+.207(vious history entry)-.25 F 2.708(,a)-.65 G .208
+(nd return a pointer to that entry)-2.708 F 5.208(.I)-.65 G 2.708(ft)
+-5.208 G .208(here is)-2.708 F(no pre)108 501.6 Q(vious entry)-.25 E 2.5
+(,r)-.65 G(eturn a)-2.5 E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1
+(HIST_ENTR)108 525.6 Q 2.5(Y*)-.18 G F2(next_history)A F0(\()4.166 E F1
+(void)A F0(\))1.666 E(Mo)108 537.6 Q 1.047 -.15(ve t)-.15 H .747
+(he current history of).15 F .747(fset forw)-.25 F .746(ard to the ne)
+-.1 F .746(xt history entry)-.15 F 3.246(,a)-.65 G .746
+(nd return the a pointer to that entry)-3.246 F 5.746(.I)-.65 G(f)-5.746
+E(there is no ne)108 549.6 Q(xt entry)-.15 E 2.5(,r)-.65 G(eturn a)-2.5
+E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F2(Sear)87 578.4 Q
+(ching the History List)-.18 E F0 .005(These functions allo)108 590.4 R
+2.505(ws)-.25 G .006(earching of the history list for entries containin\
+g a speci\214c string.)-2.505 F .006(Searching may be)5.006 F 1.452
+(performed both forw)108 602.4 R 1.452(ard and backw)-.1 F 1.451
+(ard from the current history position.)-.1 F 1.451(The search may be)
+6.451 F F1(anc)3.951 E(hor)-.15 E(ed)-.37 E F0(,)A
+(meaning that the string must match at the be)108 614.4 Q
+(ginning of the history entry)-.15 E(.)-.65 E F1(int)108 638.4 Q F2
+(history_sear)2.5 E(ch)-.18 E F0(\()4.166 E F1(const c)A(har *string)
+-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))1.666 E .155
+(Search the history for)108 650.4 R F1(string)2.655 E F0 2.656(,s)C .156
+(tarting at the current history of)-2.656 F 2.656(fset. If)-.25 F F1
+(dir)2.656 E(ection)-.37 E F0 .156(is less than 0, then the search)2.656
+F .802(is through pre)108 662.4 R .802
+(vious entries, otherwise through subsequent entries.)-.25 F(If)5.801 E
+F1(string)3.301 E F0 .801(is found, then the current his-)3.301 F .064
+(tory inde)108 674.4 R 2.564(xi)-.15 G 2.564(ss)-2.564 G .064
+(et to that history entry)-2.564 F 2.564(,a)-.65 G .064(nd the v)-2.564
+F .064(alue returned is the of)-.25 F .064
+(fset in the line of the entry where)-.25 F F1(string)2.565 E F0 -.1(wa)
+108 686.4 S 2.5(sf).1 G 2.5(ound. Otherwise,)-2.5 F
+(nothing is changed, and a -1 is returned.)2.5 E F1(int)108 710.4 Q F2
+(history_sear)2.5 E(ch_pr)-.18 E(e\214x)-.18 E F0(\()4.166 E F1(const c)
+A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))
+1.666 E .684(Search the history for)108 722.4 R F1(string)3.183 E F0
+3.183(,s)C .683(tarting at the current history of)-3.183 F 3.183
+(fset. The)-.25 F .683(search is anchored: matching lines)3.183 F
+(GNU History 4.3)72 768 Q(2002 January 31)131.79 E(4)195.95 E EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E 1.063(must be)108 84 R 1.063(gin with)-.15 F/F1
+10/Times-Italic@0 SF(string)3.563 E F0 6.063(.I)C(f)-6.063 E F1(dir)
+3.563 E(ection)-.37 E F0 1.064
+(is less than 0, then the search is through pre)3.563 F 1.064
+(vious entries, otherwise)-.25 F 1.115(through subsequent entries.)108
+96 R(If)6.115 E F1(string)3.615 E F0 1.115
+(is found, then the current history inde)3.615 F 3.614(xi)-.15 G 3.614
+(ss)-3.614 G 1.114(et to that entry)-3.614 F 3.614(,a)-.65 G 1.114
+(nd the)-3.614 F(return v)108 108 Q(alue is 0.)-.25 E
+(Otherwise, nothing is changed, and a -1 is returned.)5 E F1(int)108 132
+Q/F2 10/Times-Bold@0 SF(history_sear)2.5 E(ch_pos)-.18 E F0(\()4.166 E
+F1(const c)A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E -.834
+(ection, int)-.37 F(pos)2.5 E F0(\))3.332 E .603(Search for)108 144 R F1
+(string)3.103 E F0 .603(in the history list, starting at)3.103 F F1(pos)
+3.104 E F0 3.104(,a)C 3.104(na)-3.104 G .604(bsolute inde)-3.104 F 3.104
+(xi)-.15 G .604(nto the list.)-3.104 F(If)5.604 E F1(dir)3.104 E(ection)
+-.37 E F0 .604(is ne)3.104 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(,)
+.15 E .608(the search proceeds backw)108 156 R .608(ard from)-.1 F F1
+(pos)3.108 E F0 3.108(,o)C .608(therwise forw)-3.108 F 3.108
+(ard. Returns)-.1 F .608(the absolute inde)3.108 F 3.108(xo)-.15 G 3.108
+(ft)-3.108 G .608(he history ele-)-3.108 F(ment where)108 168 Q F1
+(string)2.5 E F0 -.1(wa)2.5 G 2.5(sf).1 G(ound, or -1 otherwise.)-2.5 E
+F2(Managing the History File)87 196.8 Q F0 .035(The History library can\
+ read the history from and write it to a \214le.)108 208.8 R .036
+(This section documents the functions for)5.035 F
+(managing a history \214le.)108 220.8 Q F1(int)108 244.8 Q F2 -.18(re)
+2.5 G(ad_history).18 E F0(\()4.166 E F1(const c)A(har *\214lename)-.15 E
+F0(\))1.666 E .151(Add the contents of)108 256.8 R F1(\214lename)2.651 E
+F0 .151(to the history list, a line at a time.)2.651 F(If)5.15 E F1
+(\214lename)2.65 E F0(is)2.65 E F2(NULL)2.65 E F0 2.65(,t)C .15
+(hen read from)-2.65 F F1(~/.his-)2.65 E(tory)108 268.8 Q F0 5(.R)C
+(eturns 0 if successful, or)-5 E F2(err)2.5 E(no)-.15 E F0(if not.)2.5 E
+F1(int)108 292.8 Q F2 -.18(re)2.5 G(ad_history_range).18 E F0(\()4.166 E
+F1(const c)A(har *\214lename)-.15 E 1.666(,i)-.1 G(nt fr)-1.666 E -.834
+(om, int)-.45 F(to)2.5 E F0(\))3.332 E .052(Read a range of lines from)
+108 304.8 R F1(\214lename)2.553 E F0 2.553(,a)C .053
+(dding them to the history list.)-2.553 F .053(Start reading at line)
+5.053 F F1(fr)2.553 E(om)-.45 E F0 .053(and end at)2.553 F F1(to)2.553 E
+F0(.)A(If)108 316.8 Q F1(fr)2.889 E(om)-.45 E F0 .389
+(is zero, start at the be)2.889 F 2.889(ginning. If)-.15 F F1(to)2.889 E
+F0 .389(is less than)2.889 F F1(fr)2.889 E(om)-.45 E F0 2.889(,t)C .388
+(hen read until the end of the \214le.)-2.889 F(If)5.388 E F1
+(\214lename)2.888 E F0(is)108 328.8 Q F2(NULL)2.5 E F0 2.5(,t)C
+(hen read from)-2.5 E F1(~/.history)2.5 E F0 5(.R)C
+(eturns 0 if successful, or)-5 E F2(err)2.5 E(no)-.15 E F0(if not.)2.5 E
+F1(int)108 352.8 Q F2(write_history)2.5 E F0(\()4.166 E F1(const c)A
+(har *\214lename)-.15 E F0(\))1.666 E .961(Write the current history to)
+108 364.8 R F1(\214lename)3.461 E F0 3.461(,o)C -.15(ve)-3.611 G
+(rwriting).15 E F1(\214lename)3.461 E F0 .961(if necessary)3.461 F 5.961
+(.I)-.65 G(f)-5.961 E F1(\214lename)3.462 E F0(is)3.462 E F2(NULL)3.462
+E F0 3.462(,t)C .962(hen write)-3.462 F(the history list to)108 376.8 Q
+F1(~/.history)2.5 E F0 5(.R)C(eturns 0 on success, or)-5 E F2(err)2.5 E
+(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F1(int)108 412.8 Q
+F2(append_history)2.5 E F0(\()4.166 E F1(int nelements,)A(const c)1.666
+E(har *\214lename)-.15 E F0(\))1.666 E .839(Append the last)108 424.8 R
+F1(nelements)3.339 E F0 .839(of the history list to)3.339 F F1
+(\214lename)3.339 E F0 5.839(.I)C(f)-5.839 E F1(\214lename)3.339 E F0
+(is)3.339 E F2(NULL)3.339 E F0 3.339(,t)C .838(hen append to)-3.339 F F1
+(~/.history)3.338 E F0(.)A(Returns 0 on success, or)108 436.8 Q F2(err)
+2.5 E(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F1(int)108
+460.8 Q F2(history_truncate_\214le)2.5 E F0(\()4.166 E F1(const c)A
+(har *\214lename)-.15 E 1.666(,i)-.1 G(nt nlines)-1.666 E F0(\))1.666 E
+-.35(Tr)108 472.8 S .38(uncate the history \214le).35 F F1(\214lename)
+2.88 E F0 2.88(,l)C(ea)-2.88 E .38(ving only the last)-.2 F F1(nlines)
+2.881 E F0 2.881(lines. If)2.881 F F1(\214lename)2.881 E F0(is)2.881 E
+F2(NULL)2.881 E F0 2.881(,t)C(hen)-2.881 E F1(~/.history)2.881 E F0(is)
+2.881 E 2.5(truncated. Returns)108 484.8 R 2.5(0o)2.5 G 2.5(ns)-2.5 G
+(uccess, or)-2.5 E F2(err)2.5 E(no)-.15 E F0(on f)2.5 E(ailure.)-.1 E F2
+(History Expansion)87 513.6 Q F0(These functions implement history e)108
+525.6 Q(xpansion.)-.15 E F1(int)108 549.6 Q F2(history_expand)2.5 E F0
+(\()4.166 E F1 -.15(ch)C(ar *string).15 E 1.666(,c)-.1 G(har **output)
+-1.816 E F0(\))1.666 E(Expand)108 561.6 Q F1(string)2.5 E F0 2.5(,p)C
+(lacing the result into)-2.5 E F1(output)2.5 E F0 2.5(,ap)C
+(ointer to a string.)-2.5 E(Returns:)5 E 31(0I)144 573.6 S 3.066(fn)-31
+G 3.066(oe)-3.066 G .566(xpansions took place \(or)-3.216 F 3.065(,i)-.4
+G 3.065(ft)-3.065 G .565(he only change in the te)-3.065 F .565(xt w)
+-.15 F .565(as the remo)-.1 F -.25(va)-.15 G 3.065(lo).25 G 3.065(fe)
+-3.065 G(scape)-3.065 E(characters preceding the history e)180 585.6 Q
+(xpansion character\);)-.15 E 31(1i)144 597.6 S 2.5(fe)-31 G
+(xpansions did tak)-2.65 E 2.5(ep)-.1 G(lace;)-2.5 E 25.17(-1 if)144
+609.6 R(there w)2.5 E(as an error in e)-.1 E(xpansion;)-.15 E 31(2i)144
+621.6 S 2.5(ft)-31 G(he returned line should be displayed, b)-2.5 E
+(ut not e)-.2 E -.15(xe)-.15 G(cuted, as with the).15 E F2(:p)2.5 E F0
+(modi\214er)2.5 E(.)-.55 E(If an error ocurred in e)108 633.6 Q
+(xpansion, then)-.15 E F1(output)2.5 E F0(contains a descripti)2.5 E .3
+-.15(ve e)-.25 H(rror message.).15 E F1 -.15(ch)108 657.6 S(ar *).15 E
+F2(get_history_e)2.5 E -.1(ve)-.15 G(nt).1 E F0(\()4.166 E F1(const c)A
+(har *string)-.15 E 1.666(,i)-.1 G(nt *cinde)-1.666 E -.834(x, int)-.2 F
+(qc)2.5 E(har)-.15 E F0(\))3.332 E .262(Returns the te)108 669.6 R .262
+(xt of the history e)-.15 F -.15(ve)-.25 G .262(nt be).15 F .263
+(ginning at)-.15 F F1(string)2.763 E F0(+)2.763 E F1(*cinde)2.763 E(x)
+-.2 E F0(.)A F1(*cinde)5.263 E(x)-.2 E F0 .263
+(is modi\214ed to point to after the)2.763 F -2.15 -.25(ev e)108 681.6 T
+.71(nt speci\214er).25 F 5.71(.A)-.55 G 3.21(tf)-5.71 G .71
+(unction entry)-3.21 F(,)-.65 E F1(cinde)3.21 E(x)-.2 E F0 .709
+(points to the inde)3.21 F 3.209(xi)-.15 G(nto)-3.209 E F1(string)3.209
+E F0 .709(where the history e)3.209 F -.15(ve)-.25 G .709
+(nt speci\214ca-).15 F .527(tion be)108 693.6 R(gins.)-.15 E F1(qc)5.527
+E(har)-.15 E F0 .527(is a character that is allo)3.027 F .527
+(wed to end the e)-.25 F -.15(ve)-.25 G .528
+(nt speci\214cation in addition to the `).15 F(`normal')-.74 E(')-.74 E
+(terminating characters.)108 705.6 Q F1 -.15(ch)108 729.6 S(ar **).15 E
+F2(history_tok)2.5 E(enize)-.1 E F0(\()4.166 E F1(const c)A(har *string)
+-.15 E F0(\))1.666 E(GNU History 4.3)72 768 Q(2002 January 31)131.79 E
+(5)195.95 E EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E .239(Return an array of tok)108 84 R .239
+(ens parsed out of)-.1 F/F1 10/Times-Italic@0 SF(string)2.739 E F0 2.739
+(,m)C .238(uch as the shell might.)-2.739 F .238(The tok)5.238 F .238
+(ens are split on the charac-)-.1 F(ters in the)108 96 Q/F2 10
+/Times-Bold@0 SF(history_w)2.5 E(ord_delimiters)-.1 E F0 -.25(va)2.5 G
+(riable, and shell quoting con).25 E -.15(ve)-.4 G(ntions are obe).15 E
+(yed.)-.15 E F1 -.15(ch)108 120 S(ar *).15 E F2(history_ar)2.5 E
+(g_extract)-.1 E F0(\()4.166 E F1(int \214r)A -.834(st, int)-.1 F -.834
+(last, const)2.5 F -.15(ch)2.5 G(ar *string).15 E F0(\))3.332 E .025
+(Extract a string se)108 132 R .025(gment consisting of the)-.15 F F1
+<8c72>2.526 E(st)-.1 E F0(through)2.526 E F1(last)2.526 E F0(ar)2.526 E
+.026(guments present in)-.18 F F1(string)2.526 E F0 5.026(.A)C -.18(rg)
+-5.026 G .026(uments are split).18 F(using)108 144 Q F2(history_tok)2.5
+E(enize\(\))-.1 E F0(.)A F2(History V)87 172.8 Q(ariables)-.92 E F0
+(This section describes the e)108 184.8 Q(xternally-visible v)-.15 E
+(ariables e)-.25 E(xported by the GNU History Library)-.15 E(.)-.65 E F1
+(int)108 208.8 Q F2(history_base)2.5 E F0(The logical of)108 220.8 Q
+(fset of the \214rst entry in the history list.)-.25 E F1(int)108 244.8
+Q F2(history_length)2.5 E F0
+(The number of entries currently stored in the history list.)108 256.8 Q
+F1(int)108 280.8 Q F2(history_max_entries)2.5 E F0
+(The maximum number of history entries.)108 292.8 Q
+(This must be changed using)5 E F2(sti\215e_history\(\))2.5 E F0(.)A F1
+-.15(ch)108 316.8 S(ar).15 E F2(history_expansion_char)2.5 E F0
+(The character that introduces a history e)108 328.8 Q -.15(ve)-.25 G
+2.5(nt. The).15 F(def)2.5 E(ault is)-.1 E F2(!)2.5 E F0 5(.S)C
+(etting this to 0 inhibits history e)-5 E(xpansion.)-.15 E F1 -.15(ch)
+108 352.8 S(ar).15 E F2(history_subst_char)2.5 E F0
+(The character that in)108 364.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(sw).1 G
+(ord substitution if found at the start of a line.)-2.6 E(The def)5 E
+(ault is)-.1 E F2(^)2.5 E F0(.)A F1 -.15(ch)108 388.8 S(ar).15 E F2
+(history_comment_char)2.5 E F0 .117(During tok)108 400.8 R .117
+(enization, if this character is seen as the \214rst character of a w)
+-.1 F .117(ord, then it and all subsequent char)-.1 F(-)-.2 E .276
+(acters up to a ne)108 412.8 R .276
+(wline are ignored, suppressing history e)-.25 F .276
+(xpansion for the remainder of the line.)-.15 F .277(This is dis-)5.276
+F(abled by def)108 424.8 Q(ault.)-.1 E F1 -.15(ch)108 448.8 S(ar *).15 E
+F2(history_w)2.5 E(ord_delimiters)-.1 E F0
+(The characters that separate tok)108 460.8 Q(ens for)-.1 E F2
+(history_tok)2.5 E(enize\(\))-.1 E F0 5(.T)C(he def)-5 E(ault v)-.1 E
+(alue is)-.25 E F2 2.5("\\)2.5 G(t\\n\(\)<>;&|")-2.5 E F0(.)A F1 -.15
+(ch)108 484.8 S(ar *).15 E F2(history_no_expand_chars)2.5 E F0 2.054
+(The list of characters which inhibit history e)108 496.8 R 2.054
+(xpansion if found immediately follo)-.15 F(wing)-.25 E F2
+(history_expan-)4.554 E(sion_char)108 508.8 Q F0 5(.T)C(he def)-5 E
+(ault is space, tab, ne)-.1 E(wline,)-.25 E F2(\\r)2.5 E F0 2.5(,a)C(nd)
+-2.5 E F2(=)2.5 E F0(.)A F1 -.15(ch)108 532.8 S(ar *).15 E F2
+(history_sear)2.5 E(ch_delimiter_chars)-.18 E F0 .401(The list of addit\
+ional characters which can delimit a history search string, in addition\
+ to space, tab,)108 544.8 R F1(:)2.901 E F0(and)2.901 E F1(?)2.902 E F0
+(in the case of a substring search.)108 556.8 Q(The def)5 E
+(ault is empty)-.1 E(.)-.65 E F1(int)108 580.8 Q F2
+(history_quotes_inhibit_expansion)2.5 E F0 .625
+(If non-zero, single-quoted w)108 592.8 R .625
+(ords are not scanned for the history e)-.1 F .624(xpansion character)
+-.15 F 5.624(.T)-.55 G .624(he def)-5.624 F .624(ault v)-.1 F .624
+(alue is)-.25 F(0.)108 604.8 Q F1(rl_lineb)108 628.8 Q(uf_func_t *)-.2 E
+F2(history_inhibit_expansion_function)2.5 E F0 .347
+(This should be set to the address of a function that tak)108 640.8 R
+.348(es tw)-.1 F 2.848(oa)-.1 G -.18(rg)-2.848 G .348(uments: a).18 F F2
+.348(char *)2.848 F F0(\()2.848 E F1(string)A F0 2.848(\)a)C .348(nd an)
+-2.848 F F2(int)2.848 E F0(inde)2.848 E(x)-.15 E .228
+(into that string \()108 652.8 R F1(i)A F0 2.728(\). It)B .227
+(should return a non-zero v)2.727 F .227(alue if the history e)-.25 F
+.227(xpansion starting at)-.15 F F1(string[i])2.727 E F0 .227
+(should not)2.727 F .019(be performed; zero if the e)108 664.8 R .019
+(xpansion should be done.)-.15 F .019
+(It is intended for use by applications lik)5.019 F(e)-.1 E F2(bash)
+2.519 E F0 .019(that use)2.519 F(the history e)108 676.8 Q
+(xpansion character for additional purposes.)-.15 E(By def)5 E
+(ault, this v)-.1 E(ariable is set to)-.25 E F2(NULL)2.5 E F0(.)A/F3
+10.95/Times-Bold@0 SF(FILES)72 693.6 Q F1(~/.history)109.666 705.6 Q F0
+(Def)144 717.6 Q(ault \214lename for reading and writing sa)-.1 E -.15
+(ve)-.2 G 2.5(dh).15 G(istory)-2.5 E(GNU History 4.3)72 768 Q
+(2002 January 31)131.79 E(6)195.95 E EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F
+(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 84 Q/F2 10
+/Times-Italic@0 SF(The Gnu Readline Libr)108 96 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 108 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E
+(y)-.15 E F2(bash)108 120 Q F0(\(1\))A F2 -.37(re)108 132 S(adline).37 E
+F0(\(3\))A F1 -.548(AU)72 148.8 S(THORS).548 E F0(Brian F)108 160.8 Q
+(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108
+172.8 Q(g)-.18 E(Chet Rame)108 189.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@ins.CWR)108 201.6 Q(U.Edu)-.4 E F1 -.11(BU)72 218.4 S 2.738(GR).11
+G(EPOR)-2.738 E(TS)-.438 E F0 .16(If you \214nd a b)108 230.4 R .16
+(ug in the)-.2 F/F3 10/Times-Bold@0 SF(history)2.66 E F0(library)2.66 E
+2.66(,y)-.65 G .16(ou should report it.)-2.66 F .16
+(But \214rst, you should mak)5.16 F 2.66(es)-.1 G .16
+(ure that it really is)-2.66 F 2.5(ab)108 242.4 S
+(ug, and that it appears in the latest v)-2.7 E(ersion of the)-.15 E F3
+(history)2.5 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.).15 E .704
+(Once you ha)108 259.2 R 1.004 -.15(ve d)-.2 H .704(etermined that a b)
+.15 F .704(ug actually e)-.2 F .704(xists, mail a b)-.15 F .705
+(ug report to)-.2 F F2 -.2(bu)3.205 G(g\255r).2 E(eadline)-.37 E F0(@)A
+F2(gnu.or)A(g)-.37 E F0 5.705(.I)C 3.205(fy)-5.705 G(ou)-3.205 E(ha)108
+271.2 Q 1.81 -.15(ve a \214)-.2 H 1.51
+(x, you are welcome to mail that as well!).15 F 1.509
+(Suggestions and `philosophical' b)6.509 F 1.509(ug reports may be)-.2 F
+(mailed to)108 283.2 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2
+(gnu.or)A(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(Comments and b)108 300 Q
+(ug reports concerning this manual page should be directed to)-.2 E F2
+-.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E
+(GNU History 4.3)72 768 Q(2002 January 31)131.79 E(7)195.95 E EP
+%%Trailer
+end
+%%EOF
diff --git a/readline/doc/hstech.texinfo b/readline/doc/hstech.texinfo
index 12fff2c..9494446 100644
--- a/readline/doc/hstech.texinfo
+++ b/readline/doc/hstech.texinfo
@@ -1,7 +1,7 @@
 @ignore
 This file documents the user interface to the GNU History library.
 
-Copyright (C) 1988, 1991, 1994, 1996 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 Authored by Brian Fox and Chet Ramey.
 
 Permission is granted to make and distribute verbatim copies of this manual
@@ -27,9 +27,9 @@
 @chapter Programming with GNU History
 
 This chapter describes how to interface programs that you write
-with the GNU History Library.
+with the @sc{gnu} History Library.
 It should be considered a technical guide.
-For information on the interactive use of GNU History, @pxref{Using
+For information on the interactive use of @sc{gnu} History, @pxref{Using
 History Interactively}.
 
 @menu
@@ -43,10 +43,10 @@
 @node Introduction to History
 @section Introduction to History
 
-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.
+Many programs read input from the user a line at a time.  The @sc{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. 
 
 The programmer using the History library has available functions
 for remembering lines on a history list, associating arbitrary data
@@ -80,9 +80,11 @@
 declared as follows:
 
 @example
+typedef void *histdata_t;
+
 typedef struct _hist_entry @{
   char *line;
-  char *data;
+  histdata_t data;
 @} HIST_ENTRY;
 @end example
 
@@ -95,12 +97,14 @@
 The state of the History library is encapsulated into a single structure:
 
 @example
-/* A structure used to pass the current state of the history stuff around. */
+/*
+ * A structure used to pass around the current state of the history.
+ */
 typedef struct _hist_state @{
-  HIST_ENTRY **entries;         /* Pointer to the entries themselves. */
-  int offset;                   /* The location pointer within this array. */
-  int length;                   /* Number of elements within this array. */
-  int size;                     /* Number of slots allocated to this array. */
+  HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+  int offset;           /* The location pointer within this array. */
+  int length;           /* Number of elements within this array. */
+  int size;             /* Number of slots allocated to this array. */
   int flags;
 @} HISTORY_STATE;
 @end example
@@ -112,7 +116,7 @@
 @section History Functions
 
 This section describes the calling sequence for the various functions
-present in GNU History.
+exported by the @sc{gnu} History library.
 
 @menu
 * Initializing History and State Management::	Functions to call when you
@@ -139,12 +143,12 @@
 the state of the History library when you want to use the history
 functions in your program.
 
-@deftypefun void using_history ()
+@deftypefun void using_history (void)
 Begin a session in which the history functions might be used.  This
 initializes the interactive variables.
 @end deftypefun
 
-@deftypefun {HISTORY_STATE *} history_get_history_state ()
+@deftypefun {HISTORY_STATE *} history_get_history_state (void)
 Return a structure describing the current state of the input history.
 @end deftypefun
 
@@ -158,7 +162,7 @@
 These functions manage individual entries on the history list, or set
 parameters managing the list itself.
 
-@deftypefun void add_history (char *string)
+@deftypefun void add_history (const char *string)
 Place @var{string} at the end of the history list.  The associated data
 field (if any) is set to @code{NULL}.
 @end deftypefun
@@ -169,13 +173,13 @@
 and containing structure.
 @end deftypefun
 
-@deftypefun {HIST_ENTRY *} replace_history_entry (int which, char *line, char *data)
+@deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data)
 Make the history entry at offset @var{which} have @var{line} and @var{data}.
 This returns the old entry so you can dispose of the data.  In the case
 of an invalid @var{which}, a @code{NULL} pointer is returned.
 @end deftypefun
 
-@deftypefun void clear_history ()
+@deftypefun void clear_history (void)
 Clear the history list by deleting all the entries.
 @end deftypefun
 
@@ -183,13 +187,14 @@
 Stifle the history list, remembering only the last @var{max} entries.
 @end deftypefun
 
-@deftypefun int unstifle_history ()
-Stop stifling the history.  This returns the previous amount the
-history was stifled.  The value is positive if the history was
+@deftypefun int unstifle_history (void)
+Stop stifling the history.  This returns the previously-set
+maximum number of history entries (as set by @code{stifle_history()}).
+The value is positive if the history was
 stifled, negative if it wasn't.
 @end deftypefun
 
-@deftypefun int history_is_stifled ()
+@deftypefun int history_is_stifled (void)
 Returns non-zero if the history is stifled, zero if it is not.
 @end deftypefun
 
@@ -199,29 +204,30 @@
 These functions return information about the entire history list or
 individual list entries.
 
-@deftypefun {HIST_ENTRY **} history_list ()
-Return a @code{NULL} terminated array of @code{HIST_ENTRY} which is the
+@deftypefun {HIST_ENTRY **} history_list (void)
+Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the
 current input history.  Element 0 of this list is the beginning of time.
 If there is no history, return @code{NULL}.
 @end deftypefun
 
-@deftypefun int where_history ()
+@deftypefun int where_history (void)
 Returns the offset of the current history element.
 @end deftypefun
 
-@deftypefun {HIST_ENTRY *} current_history ()
+@deftypefun {HIST_ENTRY *} current_history (void)
 Return the history entry at the current position, as determined by
-@code{where_history ()}.  If there is no entry there, return a @code{NULL}
+@code{where_history()}.  If there is no entry there, return a @code{NULL}
 pointer.
 @end deftypefun
 
 @deftypefun {HIST_ENTRY *} history_get (int offset)
 Return the history entry at position @var{offset}, starting from
-@code{history_base}.  If there is no entry there, or if @var{offset}
+@code{history_base} (@pxref{History Variables}).
+If there is no entry there, or if @var{offset}
 is greater than the history length, return a @code{NULL} pointer.
 @end deftypefun
 
-@deftypefun int history_total_bytes ()
+@deftypefun 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.
@@ -234,17 +240,19 @@
 set or changed.
 
 @deftypefun int history_set_pos (int pos)
-Set the position in the history list to @var{pos}, an absolute index
+Set the current history offset to @var{pos}, an absolute index
 into the list.
+Returns 1 on success, 0 if @var{pos} is less than zero or greater
+than the number of history entries.
 @end deftypefun
 
-@deftypefun {HIST_ENTRY *} previous_history ()
+@deftypefun {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 @code{NULL} pointer.
 @end deftypefun
 
-@deftypefun {HIST_ENTRY *} next_history ()
+@deftypefun {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 @code{NULL} pointer.
@@ -260,26 +268,28 @@
 meaning that the string must match at the beginning of the history entry.
 @cindex anchored search
 
-@deftypefun int history_search (char *string, int direction)
-Search the history for @var{string}, starting at the current history
-offset.  If @var{direction} < 0, then the search is through previous entries,
-else through subsequent.  If @var{string} is found, then
+@deftypefun int history_search (const char *string, int direction)
+Search the history for @var{string}, starting at the current history offset.
+If @var{direction} is less than 0, then the search is through
+previous entries, otherwise through subsequent entries.
+If @var{string} is found, then
 the current history index is set to that history entry, and the value
 returned is the offset in the line of the entry where
 @var{string} was found.  Otherwise, nothing is changed, and a -1 is
 returned.
 @end deftypefun
 
-@deftypefun int history_search_prefix (char *string, int direction)
+@deftypefun int history_search_prefix (const char *string, int direction)
 Search the history for @var{string}, starting at the current history
 offset.  The search is anchored: matching lines must begin with
-@var{string}.  If @var{direction} < 0, then the search is through previous
-entries, else through subsequent.  If @var{string} is found, then the
+@var{string}.  If @var{direction} is less than 0, then the search is
+through previous entries, otherwise through subsequent entries.
+If @var{string} is found, then the
 current history index is set to that entry, and the return value is 0. 
 Otherwise, nothing is changed, and a -1 is returned. 
 @end deftypefun
 
-@deftypefun int history_search_pos (char *string, int direction, int pos)
+@deftypefun int history_search_pos (const char *string, int direction, int pos)
 Search for @var{string} in the history list, starting at @var{pos}, an
 absolute index into the list.  If @var{direction} is negative, the search
 proceeds backward from @var{pos}, otherwise forward.  Returns the absolute
@@ -292,41 +302,46 @@
 The History library can read the history from and write it to a file.
 This section documents the functions for managing a history file.
 
-@deftypefun int read_history (char *filename)
-Add the contents of @var{filename} to the history list, a line at a
-time.  If @var{filename} is @code{NULL}, then read from
-@file{~/.history}.  Returns 0 if successful, or errno if not.
+@deftypefun int read_history (const char *filename)
+Add the contents of @var{filename} to the history list, a line at a time.
+If @var{filename} is @code{NULL}, then read from @file{~/.history}.
+Returns 0 if successful, or @code{errno} if not.
 @end deftypefun
 
-@deftypefun int read_history_range (char *filename, int from, int to)
+@deftypefun int read_history_range (const char *filename, int from, int to)
 Read a range of lines from @var{filename}, adding them to the history list.
-Start reading at line @var{from} and end at @var{to}.  If
-@var{from} is zero, start at the beginning.  If @var{to} is less than
+Start reading at line @var{from} and end at @var{to}.
+If @var{from} is zero, start at the beginning.  If @var{to} is less than
 @var{from}, then read until the end of the file.  If @var{filename} is
 @code{NULL}, then read from @file{~/.history}.  Returns 0 if successful,
 or @code{errno} if not.
 @end deftypefun
 
-@deftypefun int write_history (char *filename)
+@deftypefun int write_history (const char *filename)
 Write the current history to @var{filename}, overwriting @var{filename}
-if necessary.  If @var{filename} is
-@code{NULL}, then write the history list to @file{~/.history}.  Values
-returned are as in @code{read_history ()}.
+if necessary.
+If @var{filename} is @code{NULL}, then write the history list to
+@file{~/.history}.
+Returns 0 on success, or @code{errno} on a read or write error.
 @end deftypefun
 
-@deftypefun int append_history (int nelements, char *filename)
+@deftypefun int append_history (int nelements, const char *filename)
 Append the last @var{nelements} of the history list to @var{filename}.
+If @var{filename} is @code{NULL}, then append to @file{~/.history}.
+Returns 0 on success, or @code{errno} on a read or write error.
 @end deftypefun
 
-@deftypefun int history_truncate_file (char *filename, int nlines)
+@deftypefun int history_truncate_file (const char *filename, int nlines)
 Truncate the history file @var{filename}, leaving only the last
 @var{nlines} lines.
+If @var{filename} is @code{NULL}, then @file{~/.history} is truncated.
+Returns 0 on success, or @code{errno} on failure.
 @end deftypefun
 
 @node History Expansion
 @subsection History Expansion
 
-These functions implement @code{csh}-like history expansion.
+These functions implement history expansion.
 
 @deftypefun int history_expand (char *string, char **output)
 Expand @var{string}, placing the result into @var{output}, a pointer
@@ -334,7 +349,7 @@
 @table @code
 @item 0
 If no expansions took place (or, if the only change in
-the text was the de-slashifying of the history expansion
+the text was the removal of escape characters preceding the history expansion
 character);
 @item 1
 if expansions did take place;
@@ -349,12 +364,7 @@
 error message.
 @end deftypefun
 
-@deftypefun {char *} history_arg_extract (int first, int last, char *string)
-Extract a string segment consisting of the @var{first} through @var{last}
-arguments present in @var{string}.  Arguments are broken up as in Bash.
-@end deftypefun
-
-@deftypefun {char *} get_history_event (char *string, int *cindex, int qchar)
+@deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar)
 Returns the text of the history event beginning at @var{string} +
 @var{*cindex}.  @var{*cindex} is modified to point to after the event
 specifier.  At function entry, @var{cindex} points to the index into
@@ -363,18 +373,24 @@
 to the ``normal'' terminating characters.
 @end deftypefun
 
-@deftypefun {char **} history_tokenize (char *string)
+@deftypefun {char **} history_tokenize (const char *string)
 Return an array of tokens parsed out of @var{string}, much as the
-shell might.  The tokens are split on white space and on the
-characters @code{()<>;&|$}, and shell quoting conventions are
-obeyed.
+shell might.  The tokens are split on the characters in the
+@var{history_word_delimiters} variable,
+and shell quoting conventions are obeyed.
+@end deftypefun
+
+@deftypefun {char *} history_arg_extract (int first, int last, const char *string)
+Extract a string segment consisting of the @var{first} through @var{last}
+arguments present in @var{string}.  Arguments are split using
+@code{history_tokenize}.
 @end deftypefun
 
 @node History Variables
 @section 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 @sc{gnu} History Library.
 
 @deftypevar int history_base
 The logical offset of the first entry in the history list.
@@ -384,13 +400,14 @@
 The number of entries currently stored in the history list.
 @end deftypevar
 
-@deftypevar int max_input_history
+@deftypevar int history_max_entries
 The maximum number of history entries.  This must be changed using
-@code{stifle_history ()}.
+@code{stifle_history()}.
 @end deftypevar
 
 @deftypevar char history_expansion_char
-The character that starts a history event.  The default is @samp{!}.
+The character that introduces a history event.  The default is @samp{!}.
+Setting this to 0 inhibits history expansion.
 @end deftypevar
 
 @deftypevar char history_subst_char
@@ -405,15 +422,20 @@
 This is disabled by default.
 @end deftypevar
 
+@deftypevar {char *} history_word_delimiters
+The characters that separate tokens for @code{history_tokenize()}.
+The default value is @code{" \t\n()<>;&|"}.
+@end deftypevar
+
 @deftypevar {char *} history_no_expand_chars
 The list of characters which inhibit history expansion if found immediately
-following @var{history_expansion_char}.  The default is whitespace and
-@samp{=}.
+following @var{history_expansion_char}.  The default is space, tab, newline,
+carriage return, and @samp{=}.
 @end deftypevar
 
 @deftypevar {char *} history_search_delimiter_chars
 The list of additional characters which can delimit a history search
-string, in addition to whitespace, @samp{:} and @samp{?} in the case of
+string, in addition to space, TAB, @samp{:} and @samp{?} in the case of
 a substring search.  The default is empty.
 @end deftypevar
 
@@ -422,24 +444,30 @@
 character.  The default value is 0.
 @end deftypevar
 
-@deftypevar {Function *} history_inhibit_expansion_function
+@deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function
 This should be set to the address of a function that takes two arguments:
-a @code{char *} (@var{string}) and an integer index into that string (@var{i}).
+a @code{char *} (@var{string})
+and an @code{int} index into that string (@var{i}).
 It should return a non-zero value if the history expansion starting at
 @var{string[i]} should not be performed; zero if the expansion should
 be done.
 It is intended for use by applications like Bash that use the history
 expansion character for additional purposes.
-By default, this variable is set to NULL.
+By default, this variable is set to @code{NULL}.
 @end deftypevar
 
 @node History Programming Example
 @section History Programming Example
 
-The following program demonstrates simple use of the GNU History Library.
+The following program demonstrates simple use of the @sc{gnu} History Library.
 
 @smallexample
-main ()
+#include <stdio.h>
+#include <readline/history.h>
+
+main (argc, argv)
+     int argc;
+     char **argv;
 @{
   char line[1024], *t;
   int len, done = 0;
diff --git a/readline/doc/hsuser.texinfo b/readline/doc/hsuser.texinfo
index 5f75f5d..418bfa8 100644
--- a/readline/doc/hsuser.texinfo
+++ b/readline/doc/hsuser.texinfo
@@ -1,7 +1,7 @@
 @ignore
 This file documents the user interface to the GNU History library.
 
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 Authored by Brian Fox and Chet Ramey.
 
 Permission is granted to make and distribute verbatim copies of this manual
@@ -38,9 +38,9 @@
 see the @sc{gnu} Readline Library Manual.
 @end ifset
 @ifclear BashFeatures
-This chapter describes how to use the GNU History Library interactively,
+This chapter describes how to use the @sc{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,
+information on using the @sc{gnu} History Library in your own programs,
 @pxref{Programming with GNU History}.
 @end ifclear
 
@@ -65,36 +65,36 @@
 @cindex command history
 @cindex history list
 
-When the @samp{-o history} option to the @code{set} builtin
+When the @option{-o history} option to the @code{set} builtin
 is enabled (@pxref{The Set Builtin}),
-the shell provides access to the @var{command history},
+the shell provides access to the @dfn{command history},
 the list of commands previously typed.
-The value of the @code{HISTSIZE} shell variable is used as the
+The value of the @env{HISTSIZE} shell variable is used as the
 number of commands to save in a history list.
-The text of the last @code{$HISTSIZE}
+The text of the last @env{$HISTSIZE}
 commands (default 500) is saved.
 The shell stores each command in the history list prior to
 parameter and variable expansion
 but after history expansion is performed, subject to the
 values of the shell variables
-@code{HISTIGNORE} and @code{HISTCONTROL}.
+@env{HISTIGNORE} and @env{HISTCONTROL}.
 
 When the shell starts up, the history is initialized from the
-file named by the @code{HISTFILE} variable (default @file{~/.bash_history}).
-The file named by the value of @code{HISTFILE} is truncated, if
+file named by the @env{HISTFILE} variable (default @file{~/.bash_history}).
+The file named by the value of @env{HISTFILE} is truncated, if
 necessary, to contain no more than the number of lines specified by
-the value of the @code{HISTFILESIZE} variable.
+the value of the @env{HISTFILESIZE} variable.
 When an interactive shell exits, the last
-@code{$HISTSIZE} lines are copied from the history list to the file
-named by @code{$HISTFILE}.
+@env{$HISTSIZE} lines are copied from the history list to the file
+named by @env{$HISTFILE}.
 If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
 the lines are appended to the history file,
 otherwise the history file is overwritten.
-If @code{HISTFILE}
+If @env{HISTFILE}
 is unset, or if the history file is unwritable, the history is
 not saved.  After saving the history, the history file is truncated
-to contain no more than @code{$HISTFILESIZE}
-lines.  If @code{HISTFILESIZE} is not set, no truncation is performed.
+to contain no more than @env{$HISTFILESIZE}
+lines.  If @env{HISTFILESIZE} is not set, no truncation is performed.
 
 The builtin command @code{fc} may be used to list or edit and re-execute
 a portion of the history list.
@@ -105,7 +105,7 @@
 history list (@pxref{Commands For History}).
 
 The shell allows control over which commands are saved on the history
-list.  The @code{HISTCONTROL} and @code{HISTIGNORE}
+list.  The @env{HISTCONTROL} and @env{HISTIGNORE}
 variables may be set to cause the shell to save only a subset of the
 commands entered.
 The @code{cmdhist}
@@ -141,15 +141,15 @@
 history list, where a negative number is used as an offset from the
 current command number).  If @var{last} is not specified it is set to
 @var{first}.  If @var{first} is not specified it is set to the previous
-command for editing and @minus{}16 for listing.  If the @samp{-l} flag is
-given, the commands are listed on standard output.  The @samp{-n} flag
-suppresses the command numbers when listing.  The @samp{-r} flag
+command for editing and @minus{}16 for listing.  If the @option{-l} flag is
+given, the commands are listed on standard output.  The @option{-n} flag
+suppresses the command numbers when listing.  The @option{-r} flag
 reverses the order of the listing.  Otherwise, the editor given by
 @var{ename} is invoked on a file containing those commands.  If
 @var{ename} is not given, the value of the following variable expansion
 is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}.  This says to use the
-value of the @code{FCEDIT} variable if set, or the value of the
-@code{EDITOR} variable if that is set, or @code{vi} if neither is set.
+value of the @env{FCEDIT} variable if set, or the value of the
+@env{EDITOR} variable if that is set, or @code{vi} if neither is set.
 When editing is complete, the edited commands are echoed and executed.
 
 In the second form, @var{command} is re-executed after each instance
@@ -170,7 +170,7 @@
 @end example
 
 With no options, display the history list with line numbers.
-Lines prefixed with with a @samp{*} have been modified.
+Lines prefixed with a @samp{*} have been modified.
 An argument of @var{n} lists only the last @var{n} lines.
 Options, if supplied, have the following meanings:
 
@@ -211,10 +211,10 @@
 
 @end table
 
-When any of the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} options is
+When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
 used, if @var{filename}
 is given, then it is used as the history file.  If not, then
-the value of the @code{HISTFILE} variable is used.
+the value of the @env{HISTFILE} variable is used.
 
 @end table
 @end ifset
@@ -260,9 +260,9 @@
 If Readline is being used, and the @code{histreedit}
 shell option is enabled, a failed history expansion will be
 reloaded into the Readline editing buffer for correction.
-The @samp{-p} option to the @code{history} builtin command
+The @option{-p} option to the @code{history} builtin command
 may be used to see what a history expansion will do before using it.
-The @samp{-s} option to the @code{history} builtin may be used to
+The @option{-s} option to the @code{history} builtin may be used to
 add commands to the end of the history list without actually executing
 them, so that they are available for subsequent recall.
 This is most useful in conjunction with Readline.
diff --git a/readline/doc/manvers.texinfo b/readline/doc/manvers.texinfo
index 3122b6c..1206cf0 100644
--- a/readline/doc/manvers.texinfo
+++ b/readline/doc/manvers.texinfo
@@ -1,6 +1,10 @@
-@set EDITION 4.1
-@set VERSION 4.1
-@set UPDATED 2000 January 19
-@set UPDATE-MONTH January 2000
+@ignore
+Copyright (C) 1988-2002 Free Software Foundation, Inc. 
+@end ignore
 
-@set LASTCHANGE Wed Jan 19 12:16:30 EST 2000
+@set EDITION 4.3
+@set VERSION 4.3
+@set UPDATED 2002 March 4
+@set UPDATE-MONTH March 2002
+
+@set LASTCHANGE Mon Mar  4 12:00:16 EST 2002
diff --git a/readline/doc/readline.0 b/readline/doc/readline.0
index 8d453cd..87beeac 100644
--- a/readline/doc/readline.0
+++ b/readline/doc/readline.0
@@ -1,93 +1,84 @@
-
-
-
 READLINE(3)                                           READLINE(3)
 
 
+
 NNAAMMEE
        readline - get a line from a user with editing
 
 SSYYNNOOPPSSIISS
        ##iinncclluuddee <<ssttddiioo..hh>>
-       ##iinncclluuddee <<rreeaaddlliinnee..hh>>
-       ##iinncclluuddee <<hhiissttoorryy..hh>>
+       ##iinncclluuddee <<rreeaaddlliinnee//rreeaaddlliinnee..hh>>
+       ##iinncclluuddee <<rreeaaddlliinnee//hhiissttoorryy..hh>>
 
-       cchhaarr **rreeaaddlliinnee ((pprroommpptt))
-       cchhaarr **pprroommpptt;;
+       _c_h_a_r _*
+       rreeaaddlliinnee (_c_o_n_s_t _c_h_a_r _*_p_r_o_m_p_t);
 
 CCOOPPYYRRIIGGHHTT
-       Readline  is Copyright (C) 1989, 1991, 1993, 1995, 1996 by
-       the Free Software Foundation, Inc.
+       Readline  is  Copyright (C) 1989-2002 by the Free Software
+       Foundation, Inc.
 
 DDEESSCCRRIIPPTTIIOONN
        rreeaaddlliinnee will read a line from the terminal and return it,
-       using pprroommpptt as a prompt.  If pprroommpptt is null, no prompt is
-       issued.  The line returned is allocated with _m_a_l_l_o_c(3), so
-       the  caller must free it when finished.  The line returned
-       has the final newline removed, so only  the  text  of  the
-       line remains.
+       using  pprroommpptt as a prompt.  If pprroommpptt is NNUULLLL or the empty
+       string, no prompt is issued.  The line returned  is  allo-
+       cated  with  _m_a_l_l_o_c(3);  the caller must free it when fin-
+       ished.  The line returned has the final  newline  removed,
+       so only the text of the line remains.
 
        rreeaaddlliinnee  offers  editing  capabilities  while the user is
        entering the line.  By default, the line editing  commands
        are  similar  to  those of emacs.  A vi-style line editing
        interface is also available.
 
+       This manual page describes only  the  most  basic  use  of
+       rreeaaddlliinnee.   Much  more functionality is available; see _T_h_e
+       _G_N_U _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y and _T_h_e _G_N_U _H_i_s_t_o_r_y _L_i_b_r_a_r_y for addi-
+       tional information.
+
 RREETTUURRNN VVAALLUUEE
-       rreeaaddlliinnee returns the text of the line read.  A blank  line
-       returns  the  empty  string.   If EEOOFF is encountered while
-       reading a line, and the line is empty, NNUULLLL  is  returned.
-       If  an EEOOFF is read with a non-empty line, it is treated as
+       rreeaaddlliinnee  returns the text of the line read.  A blank line
+       returns the empty string.  If  EEOOFF  is  encountered  while
+       reading  a  line, and the line is empty, NNUULLLL is returned.
+       If an EEOOFF is read with a non-empty line, it is treated  as
        a newline.
 
 NNOOTTAATTIIOONN
-       An emacs-style notation  is  used  to  denote  keystrokes.
-       Control  keys  are  denoted by C-_k_e_y, e.g., C-n means Con-
+       An  emacs-style  notation  is  used  to denote keystrokes.
+       Control keys are denoted by C-_k_e_y, e.g.,  C-n  means  Con-
        trol-N.  Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x
        means Meta-X.  (On keyboards without a _m_e_t_a key, M-_x means
-       ESC _x, i.e., press the Escape key then the  _x  key.   This
-       makes  ESC  the  _m_e_t_a _p_r_e_f_i_x.  The combination M-C-_x means
-       ESC-Control-_x, or press the Escape key then hold the  Con-
+       ESC  _x,  i.e.,  press the Escape key then the _x key.  This
+       makes ESC the _m_e_t_a _p_r_e_f_i_x.  The  combination  M-C-_x  means
+       ESC-Control-_x,  or press the Escape key then hold the Con-
        trol key while pressing the _x key.)
 
-       Readline  commands  may  be given numeric _a_r_g_u_m_e_n_t_s, which
+       Readline commands may be given  numeric  _a_r_g_u_m_e_n_t_s,  which
        normally act as a repeat count.  Sometimes, however, it is
-       the  sign  of the argument that is significant.  Passing a
-       negative argument to a command that acts  in  the  forward
-       direction  (e.g., kkiillll--lliinnee) causes that command to act in
-       a backward direction.  Commands whose behavior with  argu-
+       the sign of the argument that is significant.   Passing  a
+       negative  argument  to  a command that acts in the forward
+       direction (e.g., kkiillll--lliinnee) causes that command to act  in
+       a  backward direction.  Commands whose behavior with argu-
        ments deviates from this are noted.
 
-       When  a  command  is  described  as _k_i_l_l_i_n_g text, the text
-
-
-
-GNU                         1999 Jun 1                          1
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-       deleted is saved for possible future retrieval  (_y_a_n_k_i_n_g).
-       The  killed  text  is  saved  in a _k_i_l_l _r_i_n_g.  Consecutive
-       kills cause the text to  be  accumulated  into  one  unit,
-       which  can  be  yanked all at once.  Commands which do not
+       When a command is described  as  _k_i_l_l_i_n_g  text,  the  text
+       deleted  is saved for possible future retrieval (_y_a_n_k_i_n_g).
+       The killed text is saved  in  a  _k_i_l_l  _r_i_n_g.   Consecutive
+       kills  cause  the  text  to  be accumulated into one unit,
+       which can be yanked all at once.  Commands  which  do  not
        kill text separate the chunks of text on the kill ring.
 
 IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE
-       Readline is customized by putting commands in an  initial-
+       Readline  is customized by putting commands in an initial-
        ization file (the _i_n_p_u_t_r_c file).  The name of this file is
-       taken from the value of the IINNPPUUTTRRCC environment  variable.
-       If  that  variable  is  unset,  the default is _~_/_._i_n_p_u_t_r_c.
-       When a program which uses the readline library starts  up,
-       the  init file is read, and the key bindings and variables
+       taken  from the value of the IINNPPUUTTRRCC environment variable.
+       If that variable is  unset,  the  default  is  _~_/_._i_n_p_u_t_r_c.
+       When  a program which uses the readline library starts up,
+       the init file is read, and the key bindings and  variables
        are set.  There are only a few basic constructs allowed in
-       the  readline  init file.  Blank lines are ignored.  Lines
+       the readline init file.  Blank lines are  ignored.   Lines
        beginning with a ## are comments.  Lines beginning with a $$
-       indicate  conditional  constructs.  Other lines denote key
-       bindings and variable settings.  Each program  using  this
+       indicate conditional constructs.  Other lines  denote  key
+       bindings  and  variable settings.  Each program using this
        library may add its own commands and bindings.
 
        For example, placing
@@ -95,55 +86,47 @@
               M-Control-u: universal-argument
        or
               C-Meta-u: universal-argument
-       into  the  _i_n_p_u_t_r_c  would  make M-C-u execute the readline
+
+       into the _i_n_p_u_t_r_c would make  M-C-u  execute  the  readline
        command _u_n_i_v_e_r_s_a_l_-_a_r_g_u_m_e_n_t.
 
-       The following  symbolic  character  names  are  recognized
-       while processing key bindings: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_-
-       _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B.
+       The  following  symbolic  character  names  are recognized
+       while processing key bindings: _D_E_L, _E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_-
+       _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T, _S_P_A_C_E, _S_P_C, and _T_A_B.
 
-       In addition to command names, readline allows keys  to  be
+       In  addition  to command names, readline allows keys to be
        bound to a string that is inserted when the key is pressed
        (a _m_a_c_r_o).
 
 
    KKeeyy BBiinnddiinnggss
-       The syntax for controlling key  bindings  in  the  _i_n_p_u_t_r_c
-       file  is  simple.  All that is required is the name of the
+       The  syntax  for  controlling  key bindings in the _i_n_p_u_t_r_c
+       file is simple.  All that is required is the name  of  the
        command or the text of a macro and a key sequence to which
-       it  should  be  bound. The name may be specified in one of
-       two ways: as a symbolic key name, possibly with  _M_e_t_a_-  or
-       _C_o_n_t_r_o_l_-  prefixes,  or as a key sequence.  When using the
-       form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is  the  name
-       of a key spelled out in English.  For example:
+       it should be bound. The name may be specified  in  one  of
+       two  ways:  as a symbolic key name, possibly with _M_e_t_a_- or
+       _C_o_n_t_r_o_l_- prefixes, or as a key sequence.
+
+       When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or  _m_a_c_r_o,  _k_e_y_-
+       _n_a_m_e  is  the  name  of a key spelled out in English.  For
+       example:
 
               Control-u: universal-argument
               Meta-Rubout: backward-kill-word
-              Control-o: ">&output"
+              Control-o: "> output"
 
        In the above example, _C_-_u is bound to the function uunniivveerr--
-       ssaall--aarrgguummeenntt,  _M_-_D_E_L  is  bound  to  the  function   bbaacckk--
-       wwaarrdd--kkiillll--wwoorrdd,   and  _C_-_o  is  bound  to  run  the  macro
+       ssaall--aarrgguummeenntt,   _M_-_D_E_L  is  bound  to  the  function  bbaacckk--
+       wwaarrdd--kkiillll--wwoorrdd,  and  _C_-_o  is  bound  to  run  the   macro
+       expressed  on  the right hand side (that is, to insert the
+       text ``> output'' into the line).
 
-
-
-GNU                         1999 Jun 1                          2
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-       expressed on the right hand side (that is, to  insert  the
-       text _>_&_o_u_t_p_u_t into the line).
-
-       In  the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyy--
+       In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o,  kkeeyy--
        sseeqq differs from kkeeyynnaammee above in that strings denoting an
-       entire  key  sequence  may  be  specified  by  placing the
-       sequence within double quotes.  Some GNU Emacs  style  key
-       escapes can be used, as in the following example.
+       entire key  sequence  may  be  specified  by  placing  the
+       sequence  within  double quotes.  Some GNU Emacs style key
+       escapes can be used, as in the following example, but  the
+       symbolic character names are not recognized.
 
               "\C-u": universal-argument
               "\C-x\C-r": re-read-init-file
@@ -152,14 +135,16 @@
        In  this  example, _C_-_u is again bound to the function uunnii--
        vveerrssaall--aarrgguummeenntt.   _C_-_x  _C_-_r  is  bound  to  the   function
        rree--rreeaadd--iinniitt--ffiillee,  and _E_S_C _[ _1 _1 _~ is bound to insert the
-       text FFuunnccttiioonn KKeeyy 11.  The full  set  of  GNU  Emacs  style
-       escape sequences is
+       text ``Function Key 1''.
+
+       The full set of GNU Emacs style escape sequences available
+       when specifying key sequences is
               \\CC--    control prefix
               \\MM--    meta prefix
               \\ee     an escape character
               \\\\     backslash
-              \\""     literal "
-              \\''     literal '
+              \\""     literal ", a double quote
+              \\''     literal ', a single quote
 
        In  addition  to  the  GNU Emacs style escape sequences, a
        second set of backslash escapes is available:
@@ -171,48 +156,37 @@
               \\rr     carriage return
               \\tt     horizontal tab
               \\vv     vertical tab
-              \\_n_n_n   the character whose ASCII code is the  octal
-                     value _n_n_n (one to three digits)
-              \\xx_n_n_n  the  character  whose ASCII code is the hex-
-                     adecimal value _n_n_n (one to three digits)
+              \\_n_n_n   the eight-bit character whose value  is  the
+                     octal value _n_n_n (one to three digits)
+              \\xx_H_H   the  eight-bit  character whose value is the
+                     hexadecimal value _H_H (one or two hex digits)
 
        When entering the text of a macro, single or double quotes
-       should  be  used to indicate a macro definition.  Unquoted
+       should be used to indicate a macro  definition.   Unquoted
        text is assumed to be a function name.  In the macro body,
        the backslash escapes described above are expanded.  Back-
-       slash will quote any other character in  the  macro  text,
+       slash  will  quote  any other character in the macro text,
        including " and '.
 
-       BBaasshh  allows  the current readline key bindings to be dis-
-       played or modified with the  bbiinndd  builtin  command.   The
-       editing  mode  may  be  switched during interactive use by
-       using the --oo option to the  sseett  builtin  command.   Other
-       programs  using  this  library provide similar mechanisms.
-       The _i_n_p_u_t_r_c file may be edited and re-read  if  a  program
-       does  not  provide  any  other  means  to  incorporate new
-
-
-
-GNU                         1999 Jun 1                          3
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-       bindings.
+       BBaasshh allows the current readline key bindings to  be  dis-
+       played  or  modified  with  the bbiinndd builtin command.  The
+       editing mode may be switched  during  interactive  use  by
+       using  the  --oo  option  to the sseett builtin command.  Other
+       programs using this library  provide  similar  mechanisms.
+       The  _i_n_p_u_t_r_c  file  may be edited and re-read if a program
+       does not provide any other means to incorporate new  bind-
+       ings.
 
    VVaarriiaabblleess
-       Readline has variables that can be used  to  further  cus-
+       Readline  has  variables  that can be used to further cus-
        tomize its behavior.  A variable may be set in the _i_n_p_u_t_r_c
        file with a statement of the form
 
               sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e
 
        Except where noted, readline variables can take the values
-       OOnn or OOffff.  The variables and their default values are:
+       OOnn or OOffff (without regard to  case).   The  variables  and
+       their default values are:
 
        bbeellll--ssttyyllee ((aauuddiibbllee))
               Controls  what  happens when readline wants to ring
@@ -241,36 +215,28 @@
        ccoonnvveerrtt--mmeettaa ((OOnn))
               If set to OOnn, readline will convert characters with
               the  eighth  bit  set  to  an ASCII key sequence by
-              stripping the eighth bit and prepending  an  escape
-              character (in effect, using escape as the _m_e_t_a _p_r_e_-
-              _f_i_x).
+              stripping the eighth bit and prefixing it  with  an
+              escape  character  (in  effect, using escape as the
+              _m_e_t_a _p_r_e_f_i_x).
        ddiissaabbllee--ccoommpplleettiioonn ((OOffff))
               If set to OOnn, readline will  inhibit  word  comple-
               tion.   Completion characters will be inserted into
               the line as if they had been mapped to sseellff--iinnsseerrtt.
        eeddiittiinngg--mmooddee ((eemmaaccss))
               Controls  whether readline begins with a set of key
-              bindings similar to _e_m_a_c_s or _v_i.  eeddiittiinngg--mmooddee  can
+              bindings similar to emacs or vi.  eeddiittiinngg--mmooddee  can
               be set to either eemmaaccss or vvii.
        eennaabbllee--kkeeyyppaadd ((OOffff))
               When  set  to  OOnn,  readline will try to enable the
               application keypad when it is called.  Some systems
               need this to enable the arrow keys.
-
-
-
-GNU                         1999 Jun 1                          4
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
        eexxppaanndd--ttiillddee ((OOffff))
               If  set  to  oonn,  tilde expansion is performed when
               readline attempts word completion.
+       hhiissttoorryy--pprreesseerrvvee--ppooiinntt
+              If set to oonn, the history code  attempts  to  place
+              point  at  the  same  location on each history line
+              retrived with pprreevviioouuss--hhiissttoorryy or nneexxtt--hhiissttoorryy.
        hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff))
               When set to OOnn, makes readline use  a  single  line
               for  display, scrolling the input horizontally on a
@@ -278,11 +244,11 @@
               screen width rather than wrapping to a new line.
        iinnppuutt--mmeettaa ((OOffff))
               If  set to OOnn, readline will enable eight-bit input
-              (that is, it will not strip the high bit  from  the
+              (that is, it will not clear the eighth bit  in  the
               characters it reads), regardless of what the termi-
               nal claims it can support.  The name mmeettaa--ffllaagg is a
               synonym for this variable.
-       iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ''''))
+       iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ''''))
               The  string  of characters that should terminate an
               incremental search without  subsequently  executing
               the  character  as a command.  If this variable has
@@ -293,19 +259,33 @@
               keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_,  _e_m_a_c_s_-_m_e_t_a_,
               _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t.
               _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent
-              to _e_m_a_c_s_-_s_t_a_n_d_a_r_d.  The default value is _e_m_a_c_s; the
-              value of  eeddiittiinngg--mmooddee  also  affects  the  default
+              to  _e_m_a_c_s_-_s_t_a_n_d_a_r_d.   The  default  value is _e_m_a_c_s.
+              The value of eeddiittiinngg--mmooddee also affects the  default
               keymap.
        mmaarrkk--ddiirreeccttoorriieess ((OOnn))
-              If  set  to  OOnn,  complete<d directory names have a
+              If  set  to  OOnn,  completed  directory names have a
               slash appended.
        mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff))
               If set to OOnn, history lines that have been modified
               are displayed with a preceding asterisk (**).
+       mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff))
+              If  set  to  OOnn, completed names which are symbolic
+              links to directories have a slash appended (subject
+              to the value of mmaarrkk--ddiirreeccttoorriieess).
+       mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn))
+              This  variable,  when set to OOnn, causes readline to
+              match files whose names begin with  a  `.'  (hidden
+              files)  when performing filename completion, unless
+              the leading `.' is supplied  by  the  user  in  the
+              filename to be completed.
        oouuttppuutt--mmeettaa ((OOffff))
               If set to OOnn, readline will display characters with
               the eighth bit set directly rather than as a  meta-
               prefixed escape sequence.
+       ppaaggee--ccoommpplleettiioonnss ((OOnn))
+              If  set  to OOnn, readline uses an internal _m_o_r_e-like
+              pager to display a screenful  of  possible  comple-
+              tions at a time.
        pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
               If  set  to  OOnn,  readline will display completions
               with matches sorted  horizontally  in  alphabetical
@@ -317,23 +297,11 @@
               be listed immediately instead of ringing the  bell.
        vviissiibbllee--ssttaattss ((OOffff))
               If set to OOnn, a character denoting a file's type as
-              reported by ssttaatt(2) is  appended  to  the  filename
+              reported by _s_t_a_t(2) is  appended  to  the  filename
               when listing possible completions.
 
    CCoonnddiittiioonnaall CCoonnssttrruuccttss
        Readline  implements  a  facility similar in spirit to the
-
-
-
-GNU                         1999 Jun 1                          5
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
        conditional compilation features  of  the  C  preprocessor
        which allows key bindings and variable settings to be per-
        formed as the result of  tests.   There  are  four  parser
@@ -374,7 +342,7 @@
                      that quotes the current or previous word  in
                      Bash:
 
-                     $$iiff bash
+                     $$iiff Bash
                      # Quote the current or previous word
                      "\C-xq": "\eb\"\ef\""
                      $$eennddiiff
@@ -388,18 +356,6 @@
        $$iinncclluuddee
               This  directive takes a single filename as an argu-
               ment and reads  commands  and  bindings  from  that
-
-
-
-GNU                         1999 Jun 1                          6
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
               file.   For  example, the following directive would
               read _/_e_t_c_/_i_n_p_u_t_r_c:
 
@@ -416,34 +372,44 @@
        string is typed, readline displays the next entry from the
        history matching the string typed so far.  An  incremental
        search  requires only as many characters as needed to find
-       the desired history entry.  The characters present in  the
-       value of the _i_s_e_a_r_c_h_-_t_e_r_m_i_n_a_t_o_r_s variable are used to ter-
-       minate an incremental search.  If that  variable  has  not
-       been  assigned a value the Escape and Control-J characters
-       will terminate  an  incremental  search.   Control-G  will
-       abort an incremental search and restore the original line.
-       When the search is terminated, the history entry  contain-
-       ing  the  search string becomes the current line.  To find
-       other matching entries in the history list, type Control-S
-       or Control-R as appropriate.  This will search backward or
-       forward in the history for  the  next  line  matching  the
-       search  string typed so far.  Any other key sequence bound
-       to a readline command will terminate the search  and  exe-
-       cute that command.  For instance, a _n_e_w_l_i_n_e will terminate
-       the search and accept the line, thereby executing the com-
-       mand from the history list.
+       the desired history entry.  To search backward in the his-
+       tory  for  a  particular  string,  type  CC--rr.   Typing CC--ss
+       searches forward through the history.  The characters pre-
+       sent  in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are
+       used to terminate an incremental search.  If that variable
+       has  not  been assigned a value the _E_s_c_a_p_e and CC--JJ charac-
+       ters will terminate an incremental search.  CC--GG will abort
+       an incremental search and restore the original line.  When
+       the search is terminated, the history entry containing the
+       search string becomes the current line.
 
-       Non-incremental  searches  read  the  entire search string
+       To  find  other matching entries in the history list, type
+       CC--ss or CC--rr as appropriate.  This will search  backward  or
+       forward  in  the  history  for  the next line matching the
+       search string typed so far.  Any other key sequence  bound
+       to  a  readline command will terminate the search and exe-
+       cute that command.  For instance, a newline will terminate
+       the search and accept the line, thereby executing the com-
+       mand from the history list.  A movement command will  ter-
+       minate  the  search,  make the last line found the current
+       line, and begin editing.
+
+       Non-incremental searches read  the  entire  search  string
        before starting to search for matching history lines.  The
-       search  string  may be typed by the user or be part of the
+       search string may be typed by the user or be part  of  the
        contents of the current line.
 
 EEDDIITTIINNGG CCOOMMMMAANNDDSS
-       The following is a list of the names of the  commands  and
-       the  default  key sequences to which they are bound.  Com-
+       The  following  is a list of the names of the commands and
+       the default key sequences to which they are  bound.   Com-
        mand  names  without  an  accompanying  key  sequence  are
        unbound by default.
 
+       In the following descriptions, _p_o_i_n_t refers to the current
+       cursor  position,  and  _m_a_r_k  refers  to a cursor position
+       saved by the sseett--mmaarrkk command.  The text between the point
+       and mark is referred to as the _r_e_g_i_o_n.
+
    CCoommmmaannddss ffoorr MMoovviinngg
        bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa))
               Move to the start of the current line.
@@ -453,19 +419,6 @@
               Move forward a character.
        bbaacckkwwaarrdd--cchhaarr ((CC--bb))
               Move back a character.
-
-
-
-
-GNU                         1999 Jun 1                          7
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
        ffoorrwwaarrdd--wwoorrdd ((MM--ff))
               Move  forward  to  the end of the next word.  Words
               are composed of  alphanumeric  characters  (letters
@@ -484,89 +437,76 @@
    CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy
        aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn))
               Accept  the line regardless of where the cursor is.
-              If this line is non-empty, add it  to  the  history
-              list.  If the line is a modified history line, then
-              restore the history line to its original state.
+              If this line is non-empty, it may be added  to  the
+              history  list for future recall with aadddd__hhiissttoorryy(()).
+              If the line is a modified history line, the history
+              line is restored to its original state.
        pprreevviioouuss--hhiissttoorryy ((CC--pp))
-              Fetch the previous command from the  history  list,
+              Fetch  the  previous command from the history list,
               moving back in the list.
        nneexxtt--hhiissttoorryy ((CC--nn))
-              Fetch  the next command from the history list, mov-
+              Fetch the next command from the history list,  mov-
               ing forward in the list.
        bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
               Move to the first line in the history.
        eenndd--ooff--hhiissttoorryy ((MM-->>))
-              Move to the end of the  input  history,  i.e.,  the
+              Move  to  the  end  of the input history, i.e., the
               line currently being entered.
        rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr))
-              Search  backward  starting  at the current line and
+              Search backward starting at the  current  line  and
               moving `up' through the history as necessary.  This
               is an incremental search.
        ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss))
-              Search  forward  starting  at  the current line and
-              moving `down' through  the  history  as  necessary.
+              Search forward starting at  the  current  line  and
+              moving  `down'  through  the  history as necessary.
               This is an incremental search.
        nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp))
               Search backward through the history starting at the
-              current line using a non-incremental search  for  a
+              current  line  using a non-incremental search for a
               string supplied by the user.
        nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn))
-              Search  forward  through  the  history using a non-
-              incremental search for a  string  supplied  by  the
+              Search forward through the  history  using  a  non-
+              incremental  search  for  a  string supplied by the
               user.
        hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd
-              Search  forward  through the history for the string
+              Search forward through the history for  the  string
               of characters between the start of the current line
-              and  the current cursor position (the _p_o_i_n_t).  This
+              and the current cursor position (the _p_o_i_n_t).   This
               is a non-incremental search.
-
-
-
-
-GNU                         1999 Jun 1                          8
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
        hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd
-              Search backward through the history for the  string
+              Search  backward through the history for the string
               of characters between the start of the current line
               and the point.  This is a non-incremental search.
        yyaannkk--nntthh--aarrgg ((MM--CC--yy))
-              Insert the first argument to the  previous  command
-              (usually  the  second word on the previous line) at
-              point (the current cursor position).  With an argu-
-              ment  _n, insert the _nth word from the previous com-
-              mand (the words in the previous command begin  with
-              word  0).  A negative argument inserts the _nth word
-              from the end of the previous command.
+              Insert  the  first argument to the previous command
+              (usually the second word on the previous  line)  at
+              point.   With  an  argument  _n, insert the _nth word
+              from the previous command (the words in the  previ-
+              ous  command  begin with word 0).  A negative argu-
+              ment inserts the _nth word from the end of the  pre-
+              vious command.
        yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__))
-              Insert the last argument to  the  previous  command
-              (the  last  word  of  the  previous history entry).
+              Insert  the  last  argument to the previous command
+              (the last word  of  the  previous  history  entry).
               With an argument, behave exactly like yyaannkk--nntthh--aarrgg.
               Successive calls to yyaannkk--llaasstt--aarrgg move back through
-              the history list, inserting the  last  argument  of
+              the  history  list,  inserting the last argument of
               each line in turn.
 
    CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt
        ddeelleettee--cchhaarr ((CC--dd))
-              Delete the character under the cursor.  If point is
-              at the beginning of the line, there are no  charac-
-              ters  in the line, and the last character typed was
-              not bound to BBddeelleettee--cchhaarr, then return EEOOFF.
+              Delete the character at point.  If point is at  the
+              beginning  of  the line, there are no characters in
+              the line, and the  last  character  typed  was  not
+              bound to ddeelleettee--cchhaarr, then return EEOOFF.
        bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
               Delete the character behind the cursor.  When given
-              a  numeric  argument,  save the deleted text on the
+              a numeric argument, save the deleted  text  on  the
               kill ring.
        ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
-              Delete the character under the cursor,  unless  the
+              Delete  the  character under the cursor, unless the
               cursor is at the end of the line, in which case the
-              character  behind  the  cursor  is   deleted.    By
-              default, this is not bound to a key.
+              character behind the cursor is deleted.
        qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv))
               Add  the  next  character that you type to the line
               verbatim.  This is how to  insert  characters  like
@@ -577,69 +517,68 @@
               Insert the character typed.
        ttrraannssppoossee--cchhaarrss ((CC--tt))
               Drag  the  character  before point forward over the
-              character at point.  Point moves forward  as  well.
-              If  point is at the end of the line, then transpose
-              the two characters before  point.   Negative  argu-
-              ments don't work.
+              character at point, moving point forward  as  well.
+              If  point  is  at  the  end  of the line, then this
+              transposes the two characters before point.   Nega-
+              tive arguments have no effect.
        ttrraannssppoossee--wwoorrddss ((MM--tt))
-              Drag  the  word  behind the cursor past the word in
-              front of the cursor moving  the  cursor  over  that
-              word as well.
-
-
-
-
-GNU                         1999 Jun 1                          9
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
+              Drag  the  word  before  point  past the word after
+              point, moving point over that  word  as  well.   If
+              point  is  at  the end of the line, this transposes
+              the last two words on the line.
        uuppccaassee--wwoorrdd ((MM--uu))
-              Uppercase  the current (or following) word.  With a
+              Uppercase the current (or following) word.  With  a
               negative argument, uppercase the previous word, but
               do not move point.
        ddoowwnnccaassee--wwoorrdd ((MM--ll))
-              Lowercase  the current (or following) word.  With a
+              Lowercase the current (or following) word.  With  a
               negative argument, lowercase the previous word, but
               do not move point.
        ccaappiittaalliizzee--wwoorrdd ((MM--cc))
               Capitalize the current (or following) word.  With a
-              negative argument, capitalize  the  previous  word,
+              negative  argument,  capitalize  the previous word,
               but do not move point.
+       oovveerrwwrriittee--mmooddee
+              Toggle overwrite mode.  With an  explicit  positive
+              numeric argument, switches to overwrite mode.  With
+              an explicit non-positive numeric argument, switches
+              to  insert  mode.   This command affects only eemmaaccss
+              mode; vvii mode  does  overwrite  differently.   Each
+              call to _r_e_a_d_l_i_n_e_(_) starts in insert mode.  In over-
+              write mode, characters bound to sseellff--iinnsseerrtt replace
+              the  text  at point rather than pushing the text to
+              the   right.     Characters    bound    to    bbaacckk--
+              wwaarrdd--ddeelleettee--cchhaarr replace the character before point
+              with a space.  By default, this command is unbound.
 
    KKiilllliinngg aanndd YYaannkkiinngg
        kkiillll--lliinnee ((CC--kk))
-              Kill  the  text from the current cursor position to
-              the end of the line.
+              Kill the text from point to the end of the line.
        bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt))
               Kill backward to the beginning of the line.
        uunniixx--lliinnee--ddiissccaarrdd ((CC--uu))
-              Kill backward from point to the  beginning  of  the
+              Kill  backward  from  point to the beginning of the
               line.  The killed text is saved on the kill-ring.
        kkiillll--wwhhoollee--lliinnee
-              Kill  all characters on the current line, no matter
-              where the cursor is.
+              Kill all characters on the current line, no  matter
+              where point is.
        kkiillll--wwoorrdd ((MM--dd))
-              Kill from the cursor to  the  end  of  the  current
-              word,  or  if between words, to the end of the next
-              word.  Word boundaries are the same as  those  used
-              by ffoorrwwaarrdd--wwoorrdd.
+              Kill  from point the end of the current word, or if
+              between words, to the end of the next  word.   Word
+              boundaries  are  the  same  as  those  used by ffoorr--
+              wwaarrdd--wwoorrdd.
        bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
-              Kill  the  word behind the cursor.  Word boundaries
-              are the same as those used by bbaacckkwwaarrdd--wwoorrdd.
+              Kill the word behind point.   Word  boundaries  are
+              the same as those used by bbaacckkwwaarrdd--wwoorrdd.
        uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
-              Kill the word behind the cursor, using white  space
-              as  a  word boundary.  The word boundaries are dif-
-              ferent from bbaacckkwwaarrdd--kkiillll--wwoorrdd.
+              Kill  the word behind point, using white space as a
+              word boundary.  The killed text  is  saved  on  the
+              kill-ring.
        ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\))
               Delete all spaces and tabs around point.
        kkiillll--rreeggiioonn
-              Kill the text between the  point  and  _m_a_r_k  (saved
-              cursor  position).  This text is referred to as the
+              Kill  the  text  between  the point and _m_a_r_k (saved
+              cursor position).  This text is referred to as  the
               _r_e_g_i_o_n.
        ccooppyy--rreeggiioonn--aass--kkiillll
               Copy the text in the region to the kill buffer.
@@ -647,155 +586,118 @@
               Copy the word before point to the kill buffer.  The
               word boundaries are the same as bbaacckkwwaarrdd--wwoorrdd.
        ccooppyy--ffoorrwwaarrdd--wwoorrdd
-              Copy  the  word following point to the kill buffer.
+              Copy the word following point to the  kill  buffer.
               The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd.
        yyaannkk ((CC--yy))
-              Yank the top of the kill ring into  the  buffer  at
-              the cursor.
-
-
-
-GNU                         1999 Jun 1                         10
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
+              Yank  the  top  of the kill ring into the buffer at
+              point.
        yyaannkk--ppoopp ((MM--yy))
-              Rotate  the  kill ring, and yank the new top.  Only
+              Rotate the kill ring, and yank the new  top.   Only
               works following yyaannkk or yyaannkk--ppoopp.
 
    NNuummeerriicc AArrgguummeennttss
        ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----))
-              Add this digit to the argument  already  accumulat-
-              ing,  or  start a new argument.  M-- starts a nega-
+              Add  this  digit to the argument already accumulat-
+              ing, or start a new argument.  M-- starts  a  nega-
               tive argument.
        uunniivveerrssaall--aarrgguummeenntt
-              This is another way to  specify  an  argument.   If
-              this  command  is  followed  by one or more digits,
-              optionally with a leading minus sign, those  digits
+              This  is  another  way  to specify an argument.  If
+              this command is followed by  one  or  more  digits,
+              optionally  with a leading minus sign, those digits
               define the argument.  If the command is followed by
               digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the
-              numeric  argument,  but is otherwise ignored.  As a
-              special case, if this command is  immediately  fol-
-              lowed  by  a  character  that is neither a digit or
+              numeric argument, but is otherwise ignored.   As  a
+              special  case,  if this command is immediately fol-
+              lowed by a character that is  neither  a  digit  or
               minus sign, the argument count for the next command
-              is  multiplied by four.  The argument count is ini-
-              tially one, so executing this  function  the  first
-              time  makes  the argument count four, a second time
+              is multiplied by four.  The argument count is  ini-
+              tially  one,  so  executing this function the first
+              time makes the argument count four, a  second  time
               makes the argument count sixteen, and so on.
 
    CCoommpplleettiinngg
        ccoommpplleettee ((TTAABB))
-              Attempt to perform completion on  the  text  before
+              Attempt  to  perform  completion on the text before
               point.  The actual completion performed is applica-
-              tion-specific.  BBaasshh, for instance,  attempts  com-
-              pletion  treating  the  text  as a variable (if the
-              text begins with $$), username (if the  text  begins
-              with  ~~),  hostname (if the text begins with @@), or
-              command (including aliases and functions) in  turn.
+              tion-specific.   BBaasshh,  for instance, attempts com-
+              pletion treating the text as  a  variable  (if  the
+              text  begins  with $$), username (if the text begins
+              with ~~), hostname (if the text begins with  @@),  or
+              command  (including aliases and functions) in turn.
               If none of these produces a match, filename comple-
-              tion is attempted.  GGddbb, on the other hand,  allows
-              completion  of program functions and variables, and
-              only attempts  filename  completion  under  certain
+              tion  is attempted.  GGddbb, on the other hand, allows
+              completion of program functions and variables,  and
+              only  attempts  filename  completion  under certain
               circumstances.
        ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??))
-              List  the  possible  completions of the text before
+              List the possible completions of  the  text  before
               point.
        iinnsseerrtt--ccoommpplleettiioonnss ((MM--**))
-              Insert all completions of  the  text  before  point
-              that  would have been generated by ppoossssiibbllee--ccoommppllee--
+              Insert  all  completions  of  the text before point
+              that would have been generated by  ppoossssiibbllee--ccoommppllee--
               ttiioonnss.
        mmeennuu--ccoommpplleettee
-              Similar to ccoommpplleettee, but replaces the  word  to  be
+              Similar  to  ccoommpplleettee,  but replaces the word to be
               completed with a single match from the list of pos-
               sible completions.  Repeated execution of mmeennuu--ccoomm--
-              pplleettee  steps  through  the list of possible comple-
+              pplleettee steps through the list  of  possible  comple-
               tions, inserting each match in turn.  At the end of
-              the  list  of completions, the bell is rung and the
-              original text is restored.  An argument of _n  moves
-              _n  positions  forward  in  the  list  of matches; a
-
-
-
-GNU                         1999 Jun 1                         11
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-              negative argument may  be  used  to  move  backward
-              through  the  list.  This command is intended to be
-              bound to TTAABB, but is unbound by default.
+              the list of completions, the bell is rung  (subject
+              to  the  setting  of  00aanndd  tthhee  oorriiggiinnaall  tteexxtt  iiss
+              rreessttoorreedd..  AAnn aarrgguummeenntt ooff _n mmoovveess _n ppoossiittiioonnss  ffoorr--
+              wwaarrdd  iinn  tthhee  lliisstt ooff mmaattcchheess;; aa nneeggaattiivvee aarrgguummeenntt
+              mmaayy bbee uusseedd ttoo  mmoovvee  bbaacckkwwaarrdd  tthhrroouugghh  tthhee  lliisstt..
+              TThhiiss ccoommmmaanndd iiss iinntteennddeedd ttoo bbee bboouunndd ttoo TTAABB,, bbuutt iiss
+              uunnbboouunndd bbyy ddeeffaauulltt..
        ddeelleettee--cchhaarr--oorr--lliisstt
               Deletes the character under the cursor  if  not  at
               the  beginning  or  end  of  the line (like ddeelleettee--
               cchhaarr).  If at the end of the line, behaves  identi-
-              cally  to  ppoossssiibbllee--ccoommpplleettiioonnss.   This  command is
-              unbound by default.
+              cally to ppoossssiibbllee--ccoommpplleettiioonnss.
 
    KKeeyybbooaarrdd MMaaccrrooss
        ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (())
-              Begin saving the characters typed into the  current
+              Begin  saving the characters typed into the current
               keyboard macro.
        eenndd--kkbbdd--mmaaccrroo ((CC--xx ))))
-              Stop  saving  the characters typed into the current
+              Stop saving the characters typed into  the  current
               keyboard macro and store the definition.
        ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee))
               Re-execute the last keyboard macro defined, by mak-
-              ing  the characters in the macro appear as if typed
+              ing the characters in the macro appear as if  typed
               at the keyboard.
 
    MMiisscceellllaanneeoouuss
        rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
-              Read in the  contents  of  the  _i_n_p_u_t_r_c  file,  and
-              incorporate  any  bindings  or variable assignments
+              Read  in  the  contents  of  the  _i_n_p_u_t_r_c file, and
+              incorporate any bindings  or  variable  assignments
               found there.
        aabboorrtt ((CC--gg))
               Abort the current editing command and ring the ter-
               minal's   bell   (subject   to   the   setting   of
               bbeellll--ssttyyllee).
        ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......))
-              If the metafied character _x is lowercase,  run  the
-              command  that  is bound to the corresponding upper-
+              If  the  metafied character _x is lowercase, run the
+              command that is bound to the  corresponding  upper-
               case character.
        pprreeffiixx--mmeettaa ((EESSCC))
-              Metafy the next character typed.  EESSCC ff is  equiva-
+              Metafy  the next character typed.  EESSCC ff is equiva-
               lent to MMeettaa--ff.
        uunnddoo ((CC--__,, CC--xx CC--uu))
-              Incremental  undo,  separately  remembered for each
+              Incremental undo, separately  remembered  for  each
               line.
        rreevveerrtt--lliinnee ((MM--rr))
-              Undo all changes made to this line.  This  is  like
-              executing  the  uunnddoo command enough times to return
+              Undo  all  changes made to this line.  This is like
+              executing the uunnddoo command enough times  to  return
               the line to its initial state.
        ttiillddee--eexxppaanndd ((MM--&&))
               Perform tilde expansion on the current word.
        sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>))
-              Set the mark to the current point.   If  a  numeric
-              argument is supplied, the mark is set to that posi-
-              tion.
+              Set  the  mark to the point.  If a numeric argument
+              is supplied, the mark is set to that position.
        eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx))
               Swap the point with the mark.  The  current  cursor
               position  is set to the saved position, and the old
-
-
-
-GNU                         1999 Jun 1                         12
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
               cursor position is saved as the mark.
        cchhaarraacctteerr--sseeaarrcchh ((CC--]]))
               A character is read and point is moved to the  next
@@ -806,63 +708,60 @@
               vious  occurrence  of  that  character.  A negative
               count searches for subsequent occurrences.
        iinnsseerrtt--ccoommmmeenntt ((MM--##))
-              The value of the readline ccoommmmeenntt--bbeeggiinn variable is
-              inserted  at the beginning of the current line, and
-              the line is accepted  as  if  a  newline  had  been
-              typed.   This  makes  the current line a shell com-
-              ment.
+              Without a numeric argument, the value of the  read-
+              line  ccoommmmeenntt--bbeeggiinn  variable  is  inserted  at the
+              beginning of the current line.  If a numeric  argu-
+              ment  is  supplied,  this command acts as a toggle:
+              if the characters at the beginning of the  line  do
+              not  match the value of ccoommmmeenntt--bbeeggiinn, the value is
+              inserted, otherwise the characters in ccoommmmeenntt--bbeeggiinn
+              are  deleted  from  the  beginning of the line.  In
+              either case, the line is accepted as if  a  newline
+              had been typed.  The default value of ccoommmmeenntt--bbeeggiinn
+              makes the current  line  a  shell  comment.   If  a
+              numeric argument causes the comment character to be
+              removed, the line will be executed by the shell.
        dduummpp--ffuunnccttiioonnss
               Print all of the functions and their  key  bindings
-              to  the readline output stream.  If a numeric argu-
-              ment is supplied, the output is formatted in such a
-              way that it can be made part of an _i_n_p_u_t_r_c file.
+              to  the  readline  output  stream.   If  a  numeric
+              argument is supplied, the output  is  formatted  in
+              such  a  way that it can be made part of an _i_n_p_u_t_r_c
+              file.
        dduummpp--vvaarriiaabblleess
-              Print  all of the settable variables and their val-
-              ues to the readline output stream.   If  a  numeric
-              argument  is  supplied,  the output is formatted in
-              such a way that it can be made part of  an  _i_n_p_u_t_r_c
+              Print all of the settable variables and their  val-
+              ues  to  the  readline output stream.  If a numeric
+              argument is supplied, the output  is  formatted  in
+              such  a  way that it can be made part of an _i_n_p_u_t_r_c
               file.
        dduummpp--mmaaccrrooss
-              Print  all  of  the readline key sequences bound to
-              macros and the strings they ouput.   If  a  numeric
-              argument  is  supplied,  the output is formatted in
-              such a way that it can be made part of  an  _i_n_p_u_t_r_c
+              Print all of the readline key  sequences  bound  to
+              macros  and  the  strings they ouput.  If a numeric
+              argument is supplied, the output  is  formatted  in
+              such  a  way that it can be made part of an _i_n_p_u_t_r_c
               file.
        eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee))
-              When  in  vvii  editing mode, this causes a switch to
+              When in vvii command mode, this causes  a  switch  to
               eemmaaccss editing mode.
        vvii--eeddiittiinngg--mmooddee ((MM--CC--jj))
               When in eemmaaccss editing mode, this causes a switch to
               vvii editing mode.
 
 DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS
-       The  following is a list of the default emacs and vi bind-
-       ings.  Characters with the 8th  bit  set  are  written  as
+       The following is a list of the default emacs and vi  bind-
+       ings.   Characters  with the eighth bit set are written as
        M-<character>, and are referred to as _m_e_t_a_f_i_e_d characters.
-       The printable ASCII characters not mentioned in  the  list
-       of  emacs  standard  bindings are bound to the _s_e_l_f_-_i_n_s_e_r_t
-       function, which just inserts the given character into  the
-       input  line.   In  vi  insertion  mode, all characters not
-       specifically mentioned are bound to _s_e_l_f_-_i_n_s_e_r_t.   Charac-
-       ters  assigned to signal generation by _s_t_t_y(1) or the ter-
-       minal driver, such as C-Z or C-C,  retain  that  function.
-       Upper  and lower case _m_e_t_a_f_i_e_d characters are bound to the
-       same function in the emacs mode meta keymap.  The  remain-
-       ing  characters are unbound, which causes readline to ring
-       the  bell  (subject  to  the  setting  of  the  bbeellll--ssttyyllee
-
-
-
-GNU                         1999 Jun 1                         13
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-       variable).
+       The  printable  ASCII characters not mentioned in the list
+       of emacs standard bindings are bound  to  the  sseellff--iinnsseerrtt
+       function,  which just inserts the given character into the
+       input line.  In vi  insertion  mode,  all  characters  not
+       specifically  mentioned are bound to sseellff--iinnsseerrtt.  Charac-
+       ters assigned to signal generation by _s_t_t_y(1) or the  ter-
+       minal  driver,  such  as C-Z or C-C, retain that function.
+       Upper and lower case metafied characters are bound to  the
+       same  function in the emacs mode meta keymap.  The remain-
+       ing characters are unbound, which causes readline to  ring
+       the  bell  (subject to the setting of the bbeellll--ssttyyllee vari-
+       able).
 
    EEmmaaccss MMooddee
              Emacs Standard bindings
@@ -916,18 +815,6 @@
              "M-."  yank-last-arg
              "M-0"  digit-argument
              "M-1"  digit-argument
-
-
-
-GNU                         1999 Jun 1                         14
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
              "M-2"  digit-argument
              "M-3"  digit-argument
              "M-4"  digit-argument
@@ -953,7 +840,7 @@
              "M-Y"  yank-pop
              "M-\"  delete-horizontal-space
              "M-~"  tilde-expand
-             "M-C-?"  backward-delete-word
+             "M-C-?"  backward-kill-word
              "M-_"  yank-last-arg
 
              Emacs Control-X bindings
@@ -982,18 +869,6 @@
              "C-U"  unix-line-discard
              "C-V"  quoted-insert
              "C-W"  unix-word-rubout
-
-
-
-GNU                         1999 Jun 1                         15
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
              "C-Y"  yank
              "C-["  vi-movement-mode
              "C-_"  undo
@@ -1020,6 +895,7 @@
              "C-V"  quoted-insert
              "C-W"  unix-word-rubout
              "C-Y"  yank
+             "C-_"  vi-undo
              " "  forward-char
              "#"  insert-comment
              "$"  end-of-line
@@ -1048,18 +924,6 @@
              "P"  vi-put
              "R"  vi-replace
              "S"  vi-subst
-
-
-
-GNU                         1999 Jun 1                         16
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
              "T"  vi-char-search
              "U"  revert-line
              "W"  vi-next-word
@@ -1086,7 +950,7 @@
              "r"  vi-change-char
              "s"  vi-subst
              "t"  vi-char-search
-             "u"  undo
+             "u"  vi-undo
              "w"  vi-next-word
              "x"  vi-delete
              "y"  vi-yank-to
@@ -1110,30 +974,19 @@
        chet@ins.CWRU.Edu
 
 BBUUGG RREEPPOORRTTSS
-       If  you find a bug in rreeaaddlliinnee,, you should report it.  But
-       first, you should make sure that it really is a  bug,  and
-       that  it  appears  in  the  latest version of the rreeaaddlliinnee
+       If you find a bug in rreeaaddlliinnee,, you should report it.   But
+       first,  you  should make sure that it really is a bug, and
+       that it appears in the  latest  version  of  the  rreeaaddlliinnee
        library that you have.
 
-
-
-GNU                         1999 Jun 1                         17
-
-
-
-
-
-READLINE(3)                                           READLINE(3)
-
-
-       Once you have determined that a bug actually exists,  mail
-       a  bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g.  If you have a fix,
-       you are welcome to mail that  as  well!   Suggestions  and
-       `philosophical'  bug  reports  may  be mailed to _b_u_g_-_r_e_a_d_-
+       Once  you have determined that a bug actually exists, mail
+       a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g.  If you have a  fix,
+       you  are  welcome  to  mail that as well!  Suggestions and
+       `philosophical' bug reports may  be  mailed  to  _b_u_g_-_r_e_a_d_-
        _l_i_n_e@_g_n_u_._o_r_g   or   posted   to   the   Usenet   newsgroup
        ggnnuu..bbaasshh..bbuugg.
 
-       Comments  and  bug  reports  concerning  this  manual page
+       Comments and  bug  reports  concerning  this  manual  page
        should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u.
 
 BBUUGGSS
@@ -1141,48 +994,4 @@
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-GNU                         1999 Jun 1                         18
-
-
+GNU Readline 4.3         2002 January 22              READLINE(3)
diff --git a/readline/doc/readline.3 b/readline/doc/readline.3
index c1ed9cf..afd6ba2 100644
--- a/readline/doc/readline.3
+++ b/readline/doc/readline.3
@@ -6,9 +6,9 @@
 .\"	Case Western Reserve University
 .\"	chet@ins.CWRU.Edu
 .\"
-.\"	Last Change: Tue Jun  1 13:28:03 EDT 1999
+.\"	Last Change: Tue Jan 22 09:18:25 EST 2002
 .\"
-.TH READLINE 3 "1999 Jun 1" GNU
+.TH READLINE 3 "2002 January 22" "GNU Readline 4.3"
 .\"
 .\" File Name macro.  This used to be `.PN', for Path Name,
 .\" but Sun doesn't seem to like that very much.
@@ -23,20 +23,19 @@
 .nf
 .ft B
 #include <stdio.h>
-#include <readline.h>
-#include <history.h>
+#include <readline/readline.h>
+#include <readline/history.h>
 .ft
 .fi
 .LP
 .nf
-.ft B
-char *readline (prompt)
-char *prompt;
-.ft
+\fIchar *\fP
+.br
+\fBreadline\fP (\fIconst char *prompt\fP);
 .fi
 .SH COPYRIGHT
-.if n Readline is Copyright (C) 1989, 1991, 1993, 1995, 1996 by the Free Software Foundation, Inc.
-.if t Readline is Copyright \(co 1989, 1991, 1993, 1995, 1996 by the Free Software Foundation, Inc.
+.if n Readline is Copyright (C) 1989\-2002 by the Free Software Foundation, Inc.
+.if t Readline is Copyright \(co 1989\-2002 by the Free Software Foundation, Inc.
 .SH DESCRIPTION
 .LP
 .B readline
@@ -45,9 +44,10 @@
 .B prompt
 as a prompt.  If 
 .B prompt
-is null, no prompt is issued.  The line returned is allocated with
-.IR malloc (3),
-so the caller must free it when finished.  The line returned
+is \fBNULL\fP or the empty string, no prompt is issued.
+The line returned is allocated with
+.IR malloc (3);
+the caller must free it when finished.  The line returned
 has the final newline removed, so only the text of the line
 remains.
 .LP
@@ -57,6 +57,11 @@
 By default, the line editing commands
 are similar to those of emacs.
 A vi\-style line editing interface is also available.
+.LP
+This manual page describes only the most basic use of \fBreadline\fP.
+Much more functionality is available; see
+\fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP
+for additional information.
 .SH RETURN VALUE
 .LP
 .B readline
@@ -130,6 +135,7 @@
 .RS
 C\-Meta\-u: universal\-argument
 .RE
+.sp
 into the 
 .I inputrc
 would make M\-C\-u execute the readline command
@@ -137,15 +143,16 @@
 .PP
 The following symbolic character names are recognized while
 processing key bindings:
-.IR RUBOUT ,
 .IR DEL ,
 .IR ESC ,
+.IR ESCAPE ,
 .IR LFD ,
 .IR NEWLINE ,
 .IR RET ,
 .IR RETURN ,
-.IR SPC ,
+.IR RUBOUT ,
 .IR SPACE ,
+.IR SPC ,
 and
 .IR TAB .
 .PP
@@ -161,6 +168,7 @@
 it should be bound. The name may be specified in one of two ways:
 as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
 prefixes, or as a key sequence.
+.PP
 When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP,
 .I keyname
 is the name of a key spelled out in English.  For example:
@@ -170,7 +178,7 @@
 .br
 Meta\-Rubout: backward\-kill\-word
 .br
-Control\-o: ">&output"
+Control\-o: "> output"
 .RE
 .LP
 In the above example,
@@ -184,7 +192,8 @@
 .I C\-o
 is bound to run the macro
 expressed on the right hand side (that is, to insert the text
-.I >&output
+.if t \f(CW> output\fP
+.if n ``> output''
 into the line).
 .PP
 In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
@@ -194,7 +203,8 @@
 above in that strings denoting
 an entire key sequence may be specified by placing the sequence
 within double quotes.  Some GNU Emacs style key escapes can be
-used, as in the following example.
+used, as in the following example, but the symbolic character names
+are not recognized.
 .sp
 .RS
 "\eC\-u": universal\-argument
@@ -214,8 +224,11 @@
 and 
 .I "ESC [ 1 1 ~"
 is bound to insert the text
-.BR "Function Key 1" .
-The full set of GNU Emacs style escape sequences is
+.if t \f(CWFunction Key 1\fP.
+.if n ``Function Key 1''.
+.PP
+The full set of GNU Emacs style escape sequences available when specifying
+key sequences is
 .RS
 .PD 0
 .TP
@@ -232,10 +245,10 @@
 backslash
 .TP
 .B \e"
-literal "
+literal ", a double quote
 .TP
 .B \e'
-literal '
+literal ', a single quote
 .RE
 .PD
 .PP
@@ -269,12 +282,12 @@
 vertical tab
 .TP
 .B \e\fInnn\fP
-the character whose ASCII code is the octal value \fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
 (one to three digits)
 .TP
-.B \ex\fInnn\fP
-the character whose ASCII code is the hexadecimal value \fInnn\fP
-(one to three digits)
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
 .RE
 .PD
 .PP
@@ -313,7 +326,8 @@
 Except where noted, readline variables can take the values
 .B On
 or
-.BR Off .
+.B Off
+(without regard to case).
 The variables and their default values are:
 .PP
 .PD 0
@@ -351,7 +365,7 @@
 .B convert\-meta (On)
 If set to \fBOn\fP, readline will convert characters with the
 eighth bit set to an ASCII key sequence
-by stripping the eighth bit and prepending an
+by stripping the eighth bit and prefixing it with an
 escape character (in effect, using escape as the \fImeta prefix\fP).
 .TP
 .B disable\-completion (Off)
@@ -361,7 +375,7 @@
 .TP
 .B editing\-mode (emacs)
 Controls whether readline begins with a set of key bindings similar
-to \fIemacs\fP or \fIvi\fP.
+to emacs or vi.
 .B editing\-mode
 can be set to either
 .B emacs
@@ -377,6 +391,11 @@
 If set to \fBon\fP, tilde expansion is performed when readline
 attempts word completion.
 .TP
+.B history-preserve-point     
+If set to \fBon\fP, the history code attempts to place point at the 
+same location on each history line retrived with \fBprevious-history\fP 
+or \fBnext-history\fP.
+.TP
 .B horizontal\-scroll\-mode (Off)
 When set to \fBOn\fP, makes readline use a single line for display,
 scrolling the input horizontally on a single screen line when it
@@ -384,12 +403,12 @@
 .TP
 .B input\-meta (Off)
 If set to \fBOn\fP, readline will enable eight-bit input (that is,
-it will not strip the high bit from the characters it reads),
+it will not clear the eighth bit in the characters it reads),
 regardless of what the terminal claims it can support.  The name
 .B meta\-flag
 is a synonym for this variable.
 .TP
-.B isearch\-terminators (``C\-[C\-J'')
+.B isearch\-terminators (``C\-[ C\-J'')
 The string of characters that should terminate an incremental
 search without subsequently executing the character as a command.
 If this variable has not been given a value, the characters
@@ -402,24 +421,39 @@
 .IR vi-insert .
 \fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is
 equivalent to \fIemacs-standard\fP.  The default value is
-.IR emacs ;
-the value of
+.IR emacs .
+The value of
 .B editing\-mode
 also affects the default keymap.
 .TP
 .B mark\-directories (On)
-If set to \fBOn\fP, complete<d directory names have a slash
+If set to \fBOn\fP, completed directory names have a slash
 appended.
 .TP
 .B mark\-modified\-lines (Off)
 If set to \fBOn\fP, history lines that have been modified are displayed
 with a preceding asterisk (\fB*\fP).
 .TP
+.B mark\-symlinked\-directories (Off)
+If set to \fBOn\fP, completed names which are symbolic links to directories
+have a slash appended (subject to the value of
+\fBmark\-directories\fP).
+.TP
+.B match\-hidden\-files (On)
+This variable, when set to \fBOn\fP, causes readline to match files whose 
+names begin with a `.' (hidden files) when performing filename     
+completion, unless the leading `.' is     
+supplied by the user in the filename to be completed.
+.TP
 .B output\-meta (Off)
 If set to \fBOn\fP, readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
 sequence.
 .TP
+.B page\-completions (On)
+If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
+to display a screenful of possible completions at a time.
+.TP
 .B print\-completions\-horizontally (Off)
 If set to \fBOn\fP, readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
@@ -433,7 +467,7 @@
 .TP
 .B visible\-stats (Off)
 If set to \fBOn\fP, a character denoting a file's type as reported  
-by \fBstat\fP(2) is appended to the filename when listing possible
+by \fIstat\fP(2) is appended to the filename when listing possible
 completions.
 .PD
 .SS Conditional Constructs
@@ -481,7 +515,7 @@
 .sp 1
 .RS
 .nf
-\fB$if\fP bash
+\fB$if\fP Bash
 # Quote the current or previous word
 "\eC-xq": "\eeb\e"\eef\e""
 \fB$endif\fP
@@ -519,22 +553,27 @@
 the next entry from the history matching the string typed so far.
 An incremental search requires only as many characters as needed to
 find the desired history entry.
-The characters present in the value of the \fIisearch-terminators\fP
+To search backward in the history for a particular string, type
+\fBC\-r\fP.  Typing \fBC\-s\fP searches forward through the history.
+The characters present in the value of the \fBisearch-terminators\fP
 variable are used to terminate an incremental search.
-If that variable has not been assigned a value the Escape and
-Control-J characters will terminate an incremental search.
-Control-G will abort an incremental search and restore the original
+If that variable has not been assigned a value the \fIEscape\fP and
+\fBC\-J\fP characters will terminate an incremental search.
+\fBC\-G\fP will abort an incremental search and restore the original
 line.
 When the search is terminated, the history entry containing the
 search string becomes the current line.
-To find other matching entries in the history list, type Control-S or
-Control-R as appropriate.
+.PP
+To find other matching entries in the history list, type \fBC\-s\fP or
+\fBC\-r\fP as appropriate.
 This will search backward or forward in the history for the next
 line matching the search string typed so far.
 Any other key sequence bound to a readline command will terminate
 the search and execute that command.
-For instance, a \fInewline\fP will terminate the search and accept
+For instance, a newline will terminate the search and accept
 the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
 .PP
 Non-incremental searches read the entire search string before starting
 to search for matching history lines.  The search string may be
@@ -544,6 +583,11 @@
 The following is a list of the names of the commands and the default
 key sequences to which they are bound.
 Command names without an accompanying key sequence are unbound by default.
+.PP
+In the following descriptions, \fIpoint\fP refers to the current cursor
+position, and \fImark\fP refers to a cursor position saved by the
+\fBset\-mark\fP command.
+The text between the point and mark is referred to as the \fIregion\fP.
 .SS Commands for Moving
 .PP
 .PD 0
@@ -581,9 +625,11 @@
 .PD 0
 .TP
 .B accept\-line (Newline, Return)
-Accept the line regardless of where the cursor is.  If this line is
-non-empty, add it to the history list. If the line is a modified
-history line, then restore the history line to its original state.
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+\fBadd_history()\fP.
+If the line is a modified history line, the history line is restored to its original state.
 .TP
 .B previous\-history (C\-p)
 Fetch the previous command from the history list, moving back in
@@ -629,8 +675,8 @@
 .TP
 .B yank\-nth\-arg (M\-C\-y)
 Insert the first argument to the previous command (usually
-the second word on the previous line) at point (the current
-cursor position).  With an argument
+the second word on the previous line) at point.
+With an argument
 .IR n ,
 insert the \fIn\fPth word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
@@ -649,9 +695,9 @@
 .PD 0
 .TP
 .B delete\-char (C\-d)
-Delete the character under the cursor.  If point is at the
+Delete the character at point.  If point is at the
 beginning of the line, there are no characters in the line, and
-the last character typed was not bound to \fBBdelete\-char\fP, then return
+the last character typed was not bound to \fBdelete\-char\fP, then return
 .SM
 .BR EOF .
 .TP
@@ -662,7 +708,7 @@
 .B forward\-backward\-delete\-char   
 Delete the character under the cursor, unless the cursor is at the
 end of the line, in which case the character behind the cursor is
-deleted.  By default, this is not bound to a key.
+deleted.
 .TP
 .B quoted\-insert (C\-q, C\-v)
 Add the next character that you type to the line verbatim.  This is
@@ -675,13 +721,17 @@
 Insert the character typed.
 .TP
 .B transpose\-chars (C\-t)
-Drag the character before point forward over the character at point.
-Point moves forward as well.  If point is at the end of the line, then
-transpose the two characters before point.  Negative arguments don't work.
+Drag the character before point forward over the character at point,
+moving point forward as well.
+If point is at the end of the line, then this transposes
+the two characters before point.
+Negative arguments have no effect.
 .TP
 .B transpose\-words (M\-t)
-Drag the word behind the cursor past the word in front of the cursor
-moving the cursor over that word as well.
+Drag the word before point past the word after point,
+moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
 .TP
 .B upcase\-word (M\-u)
 Uppercase the current (or following) word.  With a negative argument,
@@ -694,13 +744,24 @@
 .B capitalize\-word (M\-c)
 Capitalize the current (or following) word.  With a negative argument,
 capitalize the previous word, but do not move point.
+.TP
+.B overwrite\-mode
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
+Each call to \fIreadline()\fP starts in insert mode.
+In overwrite mode, characters bound to \fBself\-insert\fP replace   
+the text at point rather than pushing the text to the right.
+Characters bound to \fBbackward\-delete\-char\fP replace the character
+before point with a space.  By default, this command is unbound.
 .PD
 .SS Killing and Yanking
 .PP
 .PD 0
 .TP
 .B kill\-line (C\-k)
-Kill the text from the current cursor position to the end of the line.
+Kill the text from point to the end of the line.
 .TP
 .B backward\-kill\-line (C\-x Rubout)
 Kill backward to the beginning of the line.
@@ -711,22 +772,20 @@
 .\" There is no real difference between this and backward-kill-line
 .TP
 .B kill\-whole\-line
-Kill all characters on the current line, no matter where the
-cursor is.
+Kill all characters on the current line, no matter where point is.
 .TP
 .B kill\-word  (M\-d)
-Kill from the cursor to the end of the current word, or if between
+Kill from point the end of the current word, or if between
 words, to the end of the next word.  Word boundaries are the same as
 those used by \fBforward\-word\fP.
 .TP
 .B backward\-kill\-word (M\-Rubout)
-Kill the word behind the cursor.  Word boundaries are the same as
-those used by \fBbackward\-word\fP.
+Kill the word behind point.
+Word boundaries are the same as those used by \fBbackward\-word\fP.
 .TP
 .B unix\-word\-rubout (C\-w)
-Kill the word behind the cursor, using white space as a word boundary.
-The word boundaries are different from
-.BR backward\-kill\-word .
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
 .TP
 .B delete\-horizontal\-space (M\-\e)
 Delete all spaces and tabs around point.
@@ -747,7 +806,7 @@
 The word boundaries are the same as \fBforward\-word\fP.
 .TP
 .B yank (C\-y)
-Yank the top of the kill ring into the buffer at the cursor.
+Yank the top of the kill ring into the buffer at point.
 .TP
 .B yank\-pop (M\-y)
 Rotate the kill ring, and yank the new top.  Only works following
@@ -808,8 +867,9 @@
 with a single match from the list of possible completions.
 Repeated execution of \fBmenu\-complete\fP steps through the list
 of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
+At the end of the list of completions, the bell is rung
+(subject to the setting of \Bbell\-style\fP)
+and the original text is restored.
 An argument of \fIn\fP moves \fIn\fP positions forward in the list
 of matches; a negative argument may be used to move backward 
 through the list.
@@ -821,7 +881,6 @@
 end of the line (like \fBdelete-char\fP).
 If at the end of the line, behaves identically to
 \fBpossible-completions\fP.
-This command is unbound by default.
 .PD
 .SS Keyboard Macros
 .PP
@@ -874,8 +933,8 @@
 .B tilde\-expand (M\-&)
 Perform tilde expansion on the current word.
 .TP
-.B set\-mark (C\-@, M-<space>)
-Set the mark to the current point.  If a
+.B set\-mark (C\-@, M\-<space>)
+Set the mark to the point.  If a
 numeric argument is supplied, the mark is set to that position.
 .TP
 .B exchange\-point\-and\-mark (C\-x C\-x)
@@ -891,11 +950,20 @@
 character.  A negative count searches for subsequent occurrences.
 .TP
 .B insert\-comment (M\-#)
-The value of the readline
+Without a numeric argument, the value of the readline
 .B comment\-begin
-variable is inserted at the beginning of the current line, and the line
-is accepted as if a newline had been typed.  This makes the current line
-a shell comment.
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value   
+of \fBcomment\-begin\fP, the value is inserted, otherwise             
+the characters in \fBcomment-begin\fP are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+The default value of
+.B comment\-begin
+makes the current line a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
 .TP
 .B dump\-functions
 Print all of the functions and their key bindings to the
@@ -918,7 +986,7 @@
 .B emacs\-editing\-mode (C\-e)
 When in
 .B vi
-editing mode, this causes a switch to
+command mode, this causes a switch to
 .B emacs
 editing mode.
 .TP
@@ -932,25 +1000,23 @@
 .SH DEFAULT KEY BINDINGS
 .LP
 The following is a list of the default emacs and vi bindings.
-Characters with the 8th bit set are written as M\-<character>, and
+Characters with the eighth bit set are written as M\-<character>, and
 are referred to as
 .I metafied
 characters.
 The printable ASCII characters not mentioned in the list of emacs
 standard bindings are bound to the
-.I self\-insert
+.B self\-insert
 function, which just inserts the given character into the input line.
 In vi insertion mode, all characters not specifically mentioned are
 bound to
-.IR self\-insert .
+.BR self\-insert .
 Characters assigned to signal generation by
 .IR stty (1)
 or the terminal driver, such as C-Z or C-C,
 retain that function.
-Upper and lower case
-.I metafied
-characters are bound to the same function in the emacs mode
-meta keymap.
+Upper and lower case metafied characters are bound to the same function in
+the emacs mode meta keymap.
 The remaining characters are unbound, which causes readline
 to ring the bell (subject to the setting of the
 .B bell\-style
@@ -1036,7 +1102,7 @@
 "M-Y"  yank-pop
 "M-\e"  delete-horizontal-space
 "M-~"  tilde-expand
-"M-C-?"  backward-delete-word
+"M-C-?"  backward-kill-word
 "M-_"  yank-last-arg
 .PP
 Emacs Control-X bindings
@@ -1096,6 +1162,7 @@
 "C-V"  quoted-insert
 "C-W"  unix-word-rubout
 "C-Y"  yank
+"C-_"  vi-undo
 "\^ "  forward-char
 "#"  insert-comment
 "$"  end-of-line
@@ -1150,7 +1217,7 @@
 "r"  vi-change-char
 "s"  vi-subst
 "t"  vi-char-search
-"u"  undo
+"u"  vi-undo
 "w"  vi-next-word
 "x"  vi-delete
 "y"  vi-yank-to
diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi
index 5d859d8..3c1c30f 100644
--- a/readline/doc/readline.dvi
+++ b/readline/doc/readline.dvi
Binary files differ
diff --git a/readline/doc/readline.html b/readline/doc/readline.html
index d8a2eda..42485f5 100644
--- a/readline/doc/readline.html
+++ b/readline/doc/readline.html
@@ -1,159 +1,111 @@
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on June, 27  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+ 
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.52
-     from /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo on 1 March 2000 -->
+<TITLE>GNU Readline Library: </TITLE>
 
-<TITLE>GNU Readline Library</TITLE>
+<META NAME="description" CONTENT="GNU Readline Library: ">
+<META NAME="keywords" CONTENT="GNU Readline Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
 </HEAD>
-<BODY>
-<H1>GNU Readline Library</H1>
-<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2>
-<H2>January 2000</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="readline.html#SEC1">Command Line Editing</A>
-<UL>
-<LI><A NAME="TOC2" HREF="readline.html#SEC2">Introduction to Line Editing</A>
-<LI><A NAME="TOC3" HREF="readline.html#SEC3">Readline Interaction</A>
-<UL>
-<LI><A NAME="TOC4" HREF="readline.html#SEC4">Readline Bare Essentials</A>
-<LI><A NAME="TOC5" HREF="readline.html#SEC5">Readline Movement Commands</A>
-<LI><A NAME="TOC6" HREF="readline.html#SEC6">Readline Killing Commands</A>
-<LI><A NAME="TOC7" HREF="readline.html#SEC7">Readline Arguments</A>
-<LI><A NAME="TOC8" HREF="readline.html#SEC8">Searching for Commands in the History</A>
-</UL>
-<LI><A NAME="TOC9" HREF="readline.html#SEC9">Readline Init File</A>
-<UL>
-<LI><A NAME="TOC10" HREF="readline.html#SEC10">Readline Init File Syntax</A>
-<LI><A NAME="TOC11" HREF="readline.html#SEC11">Conditional Init Constructs</A>
-<LI><A NAME="TOC12" HREF="readline.html#SEC12">Sample Init File</A>
-</UL>
-<LI><A NAME="TOC13" HREF="readline.html#SEC13">Bindable Readline Commands</A>
-<UL>
-<LI><A NAME="TOC14" HREF="readline.html#SEC14">Commands For Moving</A>
-<LI><A NAME="TOC15" HREF="readline.html#SEC15">Commands For Manipulating The History</A>
-<LI><A NAME="TOC16" HREF="readline.html#SEC16">Commands For Changing Text</A>
-<LI><A NAME="TOC17" HREF="readline.html#SEC17">Killing And Yanking</A>
-<LI><A NAME="TOC18" HREF="readline.html#SEC18">Specifying Numeric Arguments</A>
-<LI><A NAME="TOC19" HREF="readline.html#SEC19">Letting Readline Type For You</A>
-<LI><A NAME="TOC20" HREF="readline.html#SEC20">Keyboard Macros</A>
-<LI><A NAME="TOC21" HREF="readline.html#SEC21">Some Miscellaneous Commands</A>
-</UL>
-<LI><A NAME="TOC22" HREF="readline.html#SEC22">Readline vi Mode</A>
-</UL>
-<LI><A NAME="TOC23" HREF="readline.html#SEC23">Programming with GNU Readline</A>
-<UL>
-<LI><A NAME="TOC24" HREF="readline.html#SEC24">Basic Behavior</A>
-<LI><A NAME="TOC25" HREF="readline.html#SEC25">Custom Functions</A>
-<UL>
-<LI><A NAME="TOC26" HREF="readline.html#SEC26">The Function Type</A>
-<LI><A NAME="TOC27" HREF="readline.html#SEC27">Writing a New Function</A>
-</UL>
-<LI><A NAME="TOC28" HREF="readline.html#SEC28">Readline Variables</A>
-<LI><A NAME="TOC29" HREF="readline.html#SEC29">Readline Convenience Functions</A>
-<UL>
-<LI><A NAME="TOC30" HREF="readline.html#SEC30">Naming a Function</A>
-<LI><A NAME="TOC31" HREF="readline.html#SEC31">Selecting a Keymap</A>
-<LI><A NAME="TOC32" HREF="readline.html#SEC32">Binding Keys</A>
-<LI><A NAME="TOC33" HREF="readline.html#SEC33">Associating Function Names and Bindings</A>
-<LI><A NAME="TOC34" HREF="readline.html#SEC34">Allowing Undoing</A>
-<LI><A NAME="TOC35" HREF="readline.html#SEC35">Redisplay</A>
-<LI><A NAME="TOC36" HREF="readline.html#SEC36">Modifying Text</A>
-<LI><A NAME="TOC37" HREF="readline.html#SEC37">Utility Functions</A>
-<LI><A NAME="TOC38" HREF="readline.html#SEC38">Alternate Interface</A>
-<LI><A NAME="TOC39" HREF="readline.html#SEC39">An Example</A>
-</UL>
-<LI><A NAME="TOC40" HREF="readline.html#SEC40">Readline Signal Handling</A>
-<LI><A NAME="TOC41" HREF="readline.html#SEC41">Custom Completers</A>
-<UL>
-<LI><A NAME="TOC42" HREF="readline.html#SEC42">How Completing Works</A>
-<LI><A NAME="TOC43" HREF="readline.html#SEC43">Completion Functions</A>
-<LI><A NAME="TOC44" HREF="readline.html#SEC44">Completion Variables</A>
-<LI><A NAME="TOC45" HREF="readline.html#SEC45">A Short Completion Example</A>
-</UL>
-</UL>
-<LI><A NAME="TOC46" HREF="readline.html#SEC46">Concept Index</A>
-<LI><A NAME="TOC47" HREF="readline.html#SEC47">Function and Variable Index</A>
-</UL>
-<P><HR><P>
 
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU Readline Library</H1></P><P>
+
 This document describes the GNU Readline Library, a utility which aids
 in the consistency of user interface across discrete programs that need
 to provide a command line interface.
+</P><P>
 
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC1">1. Command Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC23">2. Programming with GNU Readline</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline Programmer's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC49">Concept Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC50">Function and Variable Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions
+				   and variables.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
 
-</P>
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Command Line Editing"></A>
+<H1> 1. Command Line Editing </H1>
+<!--docid::SEC1::-->
 <P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
 
-</P>
-<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-</P>
-<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-
-</P>
-<P>
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
-
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="readline.html#TOC1">Command Line Editing</A></H1>
-
-<P>
 This chapter describes the basic features of the GNU
 command line editing interface.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC2">Introduction and Notation</A>: Notation used in this text.
-<LI><A HREF="readline.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line.
-<LI><A HREF="readline.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view.
-<LI><A HREF="readline.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands
-				available for binding
-<LI><A HREF="readline.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline
-				behave like the vi editor.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="readline.html#TOC2">Introduction to Line Editing</A></H2>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands
+				available for binding</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC22">1.5 Readline vi Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline
+				behave like the vi editor.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Introduction and Notation"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Introduction to Line Editing </H2>
+<!--docid::SEC2::-->
+<P>
+
 The following paragraphs describe the notation used to represent
 keystrokes.
+</P><P>
 
-</P>
-<P>
 The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
 produced when the <KBD>k</KBD> key is pressed while the Control key
 is depressed.
+</P><P>
 
-</P>
-<P>
 The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
 produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD>
 key is pressed.
@@ -164,39 +116,46 @@
 The <KBD>ALT</KBD> key on the right may also be configured to work as a
 Meta key or may be configured as some other modifier, such as a
 Compose key for typing accented characters.
+</P><P>
 
-</P>
-<P>
 If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as
 a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD>
-<I>first</I>, and then typing <KBD>k</KBD>.
+<EM>first</EM>, and then typing <KBD>k</KBD>.
 Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+</P><P>
 
-</P>
-<P>
 The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
 character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+</P><P>
 
-</P>
-<P>
 In addition, several keys have their own names.  Specifically,
 <KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
 stand for themselves when seen in this text, or in an init file
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
 If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will
 produce the desired character.
 The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on
 some keyboards.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC3" HREF="readline.html#TOC3">Readline Interaction</A></H2>
+<A NAME="Readline Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 Readline Interaction </H2>
+<!--docid::SEC3::-->
 <P>
-<A NAME="IDX1"></A>
 
-</P>
-<P>
 Often during an interactive session you type in a long line of text,
 only to notice that the first word on the line is misspelled.  The
 Readline library gives you a set of commands for manipulating the text
@@ -204,231 +163,269 @@
 you to retype the majority of the line.  Using these editing commands,
 you move the cursor to the place that needs correction, and delete or
 insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press <KBD>RETURN</KBD>.  You do not have to be at the
-end of the line to press <KBD>RETURN</KBD>; the entire line is accepted
+the line, you simply press <KBD>RET</KBD>.  You do not have to be at the
+end of the line to press <KBD>RET</KBD>; the entire line is accepted
 regardless of the location of the cursor within the line.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline.
-<LI><A HREF="readline.html#SEC5">Readline Movement Commands</A>: Moving about the input line.
-<LI><A HREF="readline.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back!
-<LI><A HREF="readline.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands.
-<LI><A HREF="readline.html#SEC8">Searching</A>: Searching through previous lines.
-</UL>
-
-
-
-<H3><A NAME="SEC4" HREF="readline.html#TOC4">Readline Bare Essentials</A></H3>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC7">1.2.4 Readline Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-<A NAME="IDX2"></A>
-<A NAME="IDX3"></A>
-<A NAME="IDX4"></A>
 
-</P>
+<A NAME="Readline Bare Essentials"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.1 Readline Bare Essentials </H3>
+<!--docid::SEC4::-->
 <P>
+
 In order to enter characters into the line, simply type them.  The typed
 character appears where the cursor was, and then the cursor moves one
 space to the right.  If you mistype a character, you can use your
 erase character to back up and delete the mistyped character.
+</P><P>
 
-</P>
-<P>
 Sometimes you may mistype a character, and
 not notice the error until you have typed several other characters.  In
 that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
 correct your mistake.  Afterwards, you can move the cursor to the right
 with <KBD>C-f</KBD>.
+</P><P>
 
-</P>
-<P>
 When you add text in the middle of a line, you will notice that characters
 to the right of the cursor are `pushed over' to make room for the text
 that you have inserted.  Likewise, when you delete text behind the cursor,
 characters to the right of the cursor are `pulled back' to fill in the
 blank space created by the removal of the text.  A list of the bare
 essentials for editing the text of an input line follows.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-b</KBD>
-<DD>
-Move back one character.
+<DD>Move back one character.
 <DT><KBD>C-f</KBD>
-<DD>
-Move forward one character.
+<DD>Move forward one character.
 <DT><KBD>DEL</KBD> or <KBD>Backspace</KBD>
-<DD>
-Delete the character to the left of the cursor.
+<DD>Delete the character to the left of the cursor.
 <DT><KBD>C-d</KBD>
-<DD>
-Delete the character underneath the cursor.
+<DD>Delete the character underneath the cursor.
 <DT>Printing characters
-<DD>
-Insert the character into the line at the cursor.
+<DD>Insert the character into the line at the cursor.
 <DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD>
-<DD>
-Undo the last editing command.  You can undo all the way back to an
+<DD>Undo the last editing command.  You can undo all the way back to an
 empty line.
 </DL>
-
 <P>
+
 (Depending on your configuration, the <KBD>Backspace</KBD> key be set to
 delete the character to the left of the cursor and the <KBD>DEL</KBD> key set
 to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather
 than the character to the left of the cursor.)
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC5" HREF="readline.html#TOC5">Readline Movement Commands</A></H3>
-
+<A NAME="Readline Movement Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.2 Readline Movement Commands </H3>
+<!--docid::SEC5::-->
 <P>
+
 The above table describes the most basic keystrokes that you need
 in order to do editing of the input line.  For your convenience, many
 other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
 <KBD>C-d</KBD>, and <KBD>DEL</KBD>.  Here are some commands for moving more rapidly
 about the line.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-a</KBD>
-<DD>
-Move to the start of the line.
+<DD>Move to the start of the line.
 <DT><KBD>C-e</KBD>
-<DD>
-Move to the end of the line.
+<DD>Move to the end of the line.
 <DT><KBD>M-f</KBD>
-<DD>
-Move forward a word, where a word is composed of letters and digits.
+<DD>Move forward a word, where a word is composed of letters and digits.
 <DT><KBD>M-b</KBD>
-<DD>
-Move backward a word.
+<DD>Move backward a word.
 <DT><KBD>C-l</KBD>
-<DD>
-Clear the screen, reprinting the current line at the top.
+<DD>Clear the screen, reprinting the current line at the top.
 </DL>
-
 <P>
+
 Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
 forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC6" HREF="readline.html#TOC6">Readline Killing Commands</A></H3>
-
+<A NAME="Readline Killing Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.3 Readline Killing Commands </H3>
+<!--docid::SEC6::-->
 <P>
-<A NAME="IDX5"></A>
-<A NAME="IDX6"></A>
 
-</P>
-<P>
+<A NAME="IDX1"></A>
+<A NAME="IDX2"></A>
+</P><P>
+
 <EM>Killing</EM> text means to delete the text from the line, but to save
 it away for later use, usually by <EM>yanking</EM> (re-inserting)
 it back into the line.
 (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+</P><P>
 
-</P>
-<P>
 If the description for a command says that it `kills' text, then you can
 be sure that you can get the text back in a different (or the same)
 place later.
+</P><P>
 
-</P>
-<P>
 When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
 Any number of consecutive kills save all of the killed text together, so
 that when you yank it back, you get it all.  The kill
 ring is not line specific; the text that you killed on a previously
 typed line is available to be yanked back later, when you are typing
 another line.
-<A NAME="IDX7"></A>
+<A NAME="IDX3"></A>
+</P><P>
 
-</P>
-<P>
 Here is the list of commands for killing text.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-k</KBD>
-<DD>
-Kill the text from the current cursor position to the end of the line.
+<DD>Kill the text from the current cursor position to the end of the line.
+<P>
 
 <DT><KBD>M-d</KBD>
-<DD>
-Kill from the cursor to the end of the current word, or, if between
+<DD>Kill from the cursor to the end of the current word, or, if between
 words, to the end of the next word.
 Word boundaries are the same as those used by <KBD>M-f</KBD>.
+<P>
 
-<DT><KBD>M-DEL</KBD>
-<DD>
-Kill from the cursor the start of the previous word, or, if between
+<DT><KBD>M-<KBD>DEL</KBD></KBD>
+<DD>Kill from the cursor the start of the current word, or, if between
 words, to the start of the previous word.
 Word boundaries are the same as those used by <KBD>M-b</KBD>.
+<P>
 
 <DT><KBD>C-w</KBD>
-<DD>
-Kill from the cursor to the previous whitespace.  This is different than
-<KBD>M-DEL</KBD> because the word boundaries differ.
+<DD>Kill from the cursor to the previous whitespace.  This is different than
+<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ.
+<P>
 
 </DL>
-
 <P>
+
 Here is how to <EM>yank</EM> the text back into the line.  Yanking
 means to copy the most-recently-killed text from the kill buffer.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-y</KBD>
-<DD>
-Yank the most recently killed text back into the buffer at the cursor.
+<DD>Yank the most recently killed text back into the buffer at the cursor.
+<P>
 
 <DT><KBD>M-y</KBD>
-<DD>
-Rotate the kill-ring, and yank the new top.  You can only do this if
+<DD>Rotate the kill-ring, and yank the new top.  You can only do this if
 the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
 </DL>
-
-
-
-<H3><A NAME="SEC7" HREF="readline.html#TOC7">Readline Arguments</A></H3>
-
 <P>
+
+<A NAME="Readline Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.4 Readline Arguments </H3>
+<!--docid::SEC7::-->
+<P>
+
 You can pass numeric arguments to Readline commands.  Sometimes the
 argument acts as a repeat count, other times it is the <I>sign</I> of the
 argument that is significant.  If you pass a negative argument to a
 command which normally acts in a forward direction, that command will
 act in a backward direction.  For example, to kill text back to the
 start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+</P><P>
 
-</P>
-<P>
 The general way to pass numeric arguments to a command is to type meta
 digits before the command.  If the first `digit' typed is a minus
 sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative.  Once
 you have typed one meta digit to get the argument started, you can type
 the remainder of the digits, and then the command.  For example, to give
-the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>.
+the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>,
+which will delete the next ten characters on the input line.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC8" HREF="readline.html#TOC8">Searching for Commands in the History</A></H3>
-
+<A NAME="Searching"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.5 Searching for Commands in the History </H3>
+<!--docid::SEC8::-->
 <P>
+
 Readline provides commands for searching through the command history
 for lines containing a specified string.
-There are two search modes:  <VAR>incremental</VAR> and <VAR>non-incremental</VAR>.
+There are two search modes:  <EM>incremental</EM> and <EM>non-incremental</EM>.
+</P><P>
 
-</P>
-<P>
 Incremental searches begin before the user has finished typing the
 search string.
 As each character of the search string is typed, Readline displays
@@ -444,9 +441,8 @@
 <KBD>C-g</KBD> will abort an incremental search and restore the original line.
 When the search is terminated, the history entry containing the
 search string becomes the current line.
+</P><P>
 
-</P>
-<P>
 To find other matching entries in the history list, type <KBD>C-r</KBD> or
 <KBD>C-s</KBD> as appropriate.
 This will search backward or forward in the history for the next
@@ -455,22 +451,38 @@
 the search and execute that command.
 For instance, a <KBD>RET</KBD> will terminate the search and accept
 the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+</P><P>
 
-</P>
-<P>
+Readline remembers the last incremental search string.  If two
+<KBD>C-r</KBD>s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+</P><P>
+
 Non-incremental searches read the entire search string before starting
 to search for matching history lines.  The search string may be
 typed by the user or be part of the contents of the current line.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC9" HREF="readline.html#TOC9">Readline Init File</A></H2>
+<A NAME="Readline Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Readline Init File </H2>
+<!--docid::SEC9::-->
 <P>
-<A NAME="IDX8"></A>
 
-</P>
-<P>
 Although the Readline library comes with a set of Emacs-like
 keybindings installed by default, it is possible to use a different set
 of keybindings.
@@ -479,158 +491,191 @@
 The name of this
 file is taken from the value of the environment variable <CODE>INPUTRC</CODE>.  If
 that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+</P><P>
 
-</P>
-<P>
 When a program which uses the Readline library starts up, the
 init file is read, and the key bindings are set.
+</P><P>
 
-</P>
-<P>
 In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
 incorporating any changes that you might have made to it.
+</P><P>
 
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR>
+</TABLE>
 
-<UL>
-<LI><A HREF="readline.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file.
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR>
+</TABLE>
 
-<LI><A HREF="readline.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file.
-
-<LI><A HREF="readline.html#SEC12">Sample Init File</A>: An example inputrc file.
-</UL>
-
-
-
-<H3><A NAME="SEC10" HREF="readline.html#TOC10">Readline Init File Syntax</A></H3>
-
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC12">1.3.3 Sample Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Readline Init File Syntax"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.1 Readline Init File Syntax </H3>
+<!--docid::SEC10::-->
+<P>
+
 There are only a few basic constructs allowed in the
 Readline init file.  Blank lines are ignored.
 Lines beginning with a <SAMP>`#'</SAMP> are comments.
 Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
-constructs (see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>).  Other lines
+constructs (see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>).  Other lines
 denote variable settings and key bindings.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT>Variable Settings
-<DD>
-You can modify the run-time behavior of Readline by
+<DD>You can modify the run-time behavior of Readline by
 altering the values of variables in Readline
-using the <CODE>set</CODE> command within the init file.  Here is how to
+using the <CODE>set</CODE> command within the init file.
+The syntax is simple:
+<P>
+
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR>
+</pre></td></tr></table></P><P>
+
+Here, for example, is how to
 change from the default Emacs-like key binding to use
 <CODE>vi</CODE> line editing commands:
+</P><P>
 
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set editing-mode vi
+</pre></td></tr></table></P><P>
 
-<PRE>
-set editing-mode vi
-</PRE>
+Variable names and values, where appropriate, are recognized without regard
+to case. 
+</P><P>
 
 A great deal of run-time behavior is changeable with the following
 variables.
+</P><P>
 
+<A NAME="IDX4"></A>
 <DL COMPACT>
 
 <DT><CODE>bell-style</CODE>
-<DD>
-<A NAME="IDX9"></A>
+<DD><A NAME="IDX5"></A>
 Controls what happens when Readline wants to ring the terminal bell.
 If set to <SAMP>`none'</SAMP>, Readline never rings the bell.  If set to
 <SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
 If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
 the terminal's bell.
+<P>
 
 <DT><CODE>comment-begin</CODE>
-<DD>
-<A NAME="IDX10"></A>
+<DD><A NAME="IDX6"></A>
 The string to insert at the beginning of the line when the
 <CODE>insert-comment</CODE> command is executed.  The default value
 is <CODE>"#"</CODE>.
+<P>
 
 <DT><CODE>completion-ignore-case</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
 in a case-insensitive fashion.
 The default value is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>completion-query-items</CODE>
-<DD>
-<A NAME="IDX11"></A>
+<DD><A NAME="IDX7"></A>
 The number of possible completions that determines when the user is
 asked whether he wants to see the list of possibilities.  If the
 number of possible completions is greater than this value,
 Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed.  The default limit is
-<CODE>100</CODE>.
+them; otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to 0.
+The default limit is <CODE>100</CODE>.
+<P>
 
 <DT><CODE>convert-meta</CODE>
-<DD>
-<A NAME="IDX12"></A>
+<DD><A NAME="IDX8"></A>
 If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
 eighth bit set to an ASCII key sequence by stripping the eighth
 bit and prefixing an <KBD>ESC</KBD> character, converting them to a
 meta-prefixed key sequence.  The default value is <SAMP>`on'</SAMP>.
+<P>
 
 <DT><CODE>disable-completion</CODE>
-<DD>
-<A NAME="IDX13"></A>
+<DD><A NAME="IDX9"></A>
 If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
 Completion  characters will be inserted into the line as if they had
 been mapped to <CODE>self-insert</CODE>.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>editing-mode</CODE>
-<DD>
-<A NAME="IDX14"></A>
+<DD><A NAME="IDX10"></A>
 The <CODE>editing-mode</CODE> variable controls which default set of
 key bindings is used.  By default, Readline starts up in Emacs editing
 mode, where the keystrokes are most similar to Emacs.  This variable can be
 set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+<P>
 
 <DT><CODE>enable-keypad</CODE>
-<DD>
-<A NAME="IDX15"></A>
+<DD><A NAME="IDX11"></A>
 When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
 keypad when it is called.  Some systems need this to enable the
 arrow keys.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>expand-tilde</CODE>
-<DD>
-<A NAME="IDX16"></A>
+<DD><A NAME="IDX12"></A>
 If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
 attempts word completion.  The default is <SAMP>`off'</SAMP>.
+<P>
+
+<A NAME="IDX13"></A>
+If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the
+same location on each history line retrived with <CODE>previous-history</CODE>
+or <CODE>next-history</CODE>.
+</P><P>
 
 <DT><CODE>horizontal-scroll-mode</CODE>
-<DD>
-<A NAME="IDX17"></A>
+<DD><A NAME="IDX14"></A>
 This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>.  Setting it
 to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
 horizontally on a single screen line when they are longer than the width
 of the screen, instead of wrapping onto a new screen line.  By default,
 this variable is set to <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>input-meta</CODE>
-<DD>
-<A NAME="IDX18"></A>
-<A NAME="IDX19"></A>
+<DD><A NAME="IDX15"></A>
+<A NAME="IDX16"></A>
 If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
-will not strip the eighth bit from the characters it reads),
+will not clear the eighth bit in the characters it reads),
 regardless of what the terminal claims it can support.  The
 default value is <SAMP>`off'</SAMP>.  The name <CODE>meta-flag</CODE> is a
 synonym for this variable.
+<P>
 
 <DT><CODE>isearch-terminators</CODE>
-<DD>
-<A NAME="IDX20"></A>
+<DD><A NAME="IDX17"></A>
 The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">Searching for Commands in the History</A>).
+subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A>).
 If this variable has not been given a value, the characters <KBD>ESC</KBD> and
 <KBD>C-J</KBD> will terminate an incremental search.
+<P>
 
 <DT><CODE>keymap</CODE>
-<DD>
-<A NAME="IDX21"></A>
+<DD><A NAME="IDX18"></A>
 Sets Readline's idea of the current keymap for key binding commands.
 Acceptable <CODE>keymap</CODE> names are
 <CODE>emacs</CODE>,
@@ -638,173 +683,207 @@
 <CODE>emacs-meta</CODE>,
 <CODE>emacs-ctlx</CODE>,
 <CODE>vi</CODE>,
+<CODE>vi-move</CODE>,
 <CODE>vi-command</CODE>, and
 <CODE>vi-insert</CODE>.
 <CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is
 equivalent to <CODE>emacs-standard</CODE>.  The default value is <CODE>emacs</CODE>.
 The value of the <CODE>editing-mode</CODE> variable also affects the
 default keymap.
+<P>
 
 <DT><CODE>mark-directories</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash
 appended.  The default is <SAMP>`on'</SAMP>.
+<P>
 
 <DT><CODE>mark-modified-lines</CODE>
-<DD>
-<A NAME="IDX22"></A>
+<DD><A NAME="IDX19"></A>
 This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
 asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
 This variable is <SAMP>`off'</SAMP> by default.
+<P>
+
+<DT><CODE>mark-symlinked-directories</CODE>
+<DD><A NAME="IDX20"></A>
+If set to <SAMP>`on'</SAMP>, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+<CODE>mark-directories</CODE>).
+The default is <SAMP>`off'</SAMP>.
+<P>
+
+<DT><CODE>match-hidden-files</CODE>
+<DD><A NAME="IDX21"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose
+names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename
+completion, unless the leading <SAMP>`.'</SAMP> is
+supplied by the user in the filename to be completed.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
 
 <DT><CODE>output-meta</CODE>
-<DD>
-<A NAME="IDX23"></A>
+<DD><A NAME="IDX22"></A>
 If set to <SAMP>`on'</SAMP>, Readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
 sequence.  The default is <SAMP>`off'</SAMP>.
+<P>
+
+<DT><CODE>page-completions</CODE>
+<DD><A NAME="IDX23"></A>
+If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager
+to display a screenful of possible completions at a time.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
 
 <DT><CODE>print-completions-horizontally</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
 The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>show-all-if-ambiguous</CODE>
-<DD>
-<A NAME="IDX24"></A>
+<DD><A NAME="IDX24"></A>
 This alters the default behavior of the completion functions.  If
 set to <SAMP>`on'</SAMP>, 
 words which have more than one possible completion cause the
 matches to be listed immediately instead of ringing the bell.
 The default value is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>visible-stats</CODE>
-<DD>
-<A NAME="IDX25"></A>
+<DD><A NAME="IDX25"></A>
 If set to <SAMP>`on'</SAMP>, a character denoting a file's type
 is appended to the filename when listing possible
 completions.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 </DL>
+<P>
 
 <DT>Key Bindings
-<DD>
-The syntax for controlling key bindings in the init file is
+<DD>The syntax for controlling key bindings in the init file is
 simple.  First you need to find the name of the command that you
 want to change.  The following sections contain tables of the command
 name, the default keybinding, if any, and a short description of what
 the command does.
+<P>
 
-Once you know the name of the command, simply place the name of the key
+Once you know the name of the command, simply place on a line
+in the init file the name of the key
 you wish to bind the command to, a colon, and then the name of the
-command on a line in the init file.  The name of the key
-can be expressed in different ways, depending on which is most
-comfortable for you.
+command.  The name of the key
+can be expressed in different ways, depending on what you find most
+comfortable.
+</P><P>
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a <VAR>macro</VAR>).
+</P><P>
 
 <DL COMPACT>
-
 <DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
-
-<PRE>
-Control-u: universal-argument
+<DD><VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Control-u: universal-argument
 Meta-Rubout: backward-kill-word
 Control-o: "&#62; output"
-</PRE>
+</pre></td></tr></table><P>
 
 In the above example, <KBD>C-u</KBD> is bound to the function
-<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro
+<CODE>universal-argument</CODE>,
+<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</CODE>, and
+<KBD>C-o</KBD> is bound to run the macro
 expressed on the right hand side (that is, to insert the text
 <SAMP>`&#62; output'</SAMP> into the line).
+</P><P>
+
+A number of symbolic character names are recognized while
+processing this key binding syntax:
+<VAR>DEL</VAR>,
+<VAR>ESC</VAR>,
+<VAR>ESCAPE</VAR>,
+<VAR>LFD</VAR>,
+<VAR>NEWLINE</VAR>,
+<VAR>RET</VAR>,
+<VAR>RETURN</VAR>,
+<VAR>RUBOUT</VAR>,
+<VAR>SPACE</VAR>,
+<VAR>SPC</VAR>,
+and
+<VAR>TAB</VAR>.
+</P><P>
 
 <DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
 denoting an entire key sequence can be specified, by placing
 the key sequence in double quotes.  Some GNU Emacs style key
 escapes can be used, as in the following example, but the
 special character names are not recognized.
+<P>
 
-
-<PRE>
-"\C-u": universal-argument
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-u": universal-argument
 "\C-x\C-r": re-read-init-file
 "\e[11~": "Function Key 1"
-</PRE>
+</pre></td></tr></table></P><P>
 
-In the above example, <KBD>C-u</KBD> is bound to the function
+In the above example, <KBD>C-u</KBD> is again bound to the function
 <CODE>universal-argument</CODE> (just as it was in the first example),
 <SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
 and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
 the text <SAMP>`Function Key 1'</SAMP>.
+</P><P>
 
 </DL>
+<P>
 
 The following GNU Emacs style escape sequences are available when
 specifying key sequences:
+</P><P>
 
 <DL COMPACT>
-
 <DT><CODE><KBD>\C-</KBD></CODE>
-<DD>
-control prefix
+<DD>control prefix
 <DT><CODE><KBD>\M-</KBD></CODE>
-<DD>
-meta prefix
+<DD>meta prefix
 <DT><CODE><KBD>\e</KBD></CODE>
-<DD>
-an escape character
+<DD>an escape character
 <DT><CODE><KBD>\\</KBD></CODE>
-<DD>
-backslash
+<DD>backslash
 <DT><CODE><KBD>\"</KBD></CODE>
-<DD>
-<KBD>"</KBD>, a double quotation mark
+<DD><KBD>"</KBD>, a double quotation mark
 <DT><CODE><KBD>\'</KBD></CODE>
-<DD>
-<KBD>'</KBD>, a single quote or apostrophe
+<DD><KBD>'</KBD>, a single quote or apostrophe
 </DL>
+<P>
 
 In addition to the GNU Emacs style escape sequences, a second
 set of backslash escapes is available:
+</P><P>
 
 <DL COMPACT>
-
 <DT><CODE>\a</CODE>
-<DD>
-alert (bell)
+<DD>alert (bell)
 <DT><CODE>\b</CODE>
-<DD>
-backspace
+<DD>backspace
 <DT><CODE>\d</CODE>
-<DD>
-delete
+<DD>delete
 <DT><CODE>\f</CODE>
-<DD>
-form feed
+<DD>form feed
 <DT><CODE>\n</CODE>
-<DD>
-newline
+<DD>newline
 <DT><CODE>\r</CODE>
-<DD>
-carriage return
+<DD>carriage return
 <DT><CODE>\t</CODE>
-<DD>
-horizontal tab
+<DD>horizontal tab
 <DT><CODE>\v</CODE>
-<DD>
-vertical tab
+<DD>vertical tab
 <DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>
-the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR>
+<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
 (one to three digits)
-<DT><CODE>\x<VAR>nnn</VAR></CODE>
-<DD>
-the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR>
-(one to three digits)
+<DT><CODE>\x<VAR>HH</VAR></CODE>
+<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
+(one or two hex digits)
 </DL>
+<P>
 
 When entering the text of a macro, single or double quotes must
 be used to indicate a macro definition.
@@ -812,115 +891,130 @@
 In the macro body, the backslash escapes described above are expanded.
 Backslash will quote any other character in the macro text,
 including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
-For example, the following binding will make <SAMP>`C-x \'</SAMP>
+For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP>
 insert a single <SAMP>`\'</SAMP> into the line:
-
-<PRE>
-"\C-x\\": "\\"
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-x\\": "\\"
+</pre></td></tr></table></P><P>
 
 </DL>
-
-
-
-<H3><A NAME="SEC11" HREF="readline.html#TOC11">Conditional Init Constructs</A></H3>
-
 <P>
+
+<A NAME="Conditional Init Constructs"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.2 Conditional Init Constructs </H3>
+<!--docid::SEC11::-->
+<P>
+
 Readline implements a facility similar in spirit to the conditional
 compilation features of the C preprocessor which allows key
 bindings and variable settings to be performed as the result
 of tests.  There are four parser directives used.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><CODE>$if</CODE>
-<DD>
-The <CODE>$if</CODE> construct allows bindings to be made based on the
+<DD>The <CODE>$if</CODE> construct allows bindings to be made based on the
 editing mode, the terminal being used, or the application using
 Readline.  The text of the test extends to the end of the line;
 no characters are required to isolate it.
+<P>
 
 <DL COMPACT>
-
 <DT><CODE>mode</CODE>
-<DD>
-The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
 whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
 This may be used in conjunction
 with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
 the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
 Readline is starting out in <CODE>emacs</CODE> mode.
+<P>
 
 <DT><CODE>term</CODE>
-<DD>
-The <CODE>term=</CODE> form may be used to include terminal-specific
+<DD>The <CODE>term=</CODE> form may be used to include terminal-specific
 key bindings, perhaps to bind the key sequences output by the
 terminal's function keys.  The word on the right side of the
 <SAMP>`='</SAMP> is tested against both the full name of the terminal and
 the portion of the terminal name before the first <SAMP>`-'</SAMP>.  This
 allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
 for instance.
+<P>
 
 <DT><CODE>application</CODE>
-<DD>
-The <VAR>application</VAR> construct is used to include
+<DD>The <VAR>application</VAR> construct is used to include
 application-specific settings.  Each program using the Readline
-library sets the <VAR>application name</VAR>, and you can test for it. 
+library sets the <VAR>application name</VAR>, and you can test for
+a particular value. 
 This could be used to bind key sequences to functions useful for
 a specific program.  For instance, the following command adds a
 key sequence that quotes the current or previous word in Bash:
-
-<PRE>
-$if Bash
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$if Bash
 # Quote the current or previous word
 "\C-xq": "\eb\"\ef\""
 $endif
-</PRE>
-
-</DL>
+</pre></td></tr></table></DL>
+<P>
 
 <DT><CODE>$endif</CODE>
-<DD>
-This command, as seen in the previous example, terminates an
+<DD>This command, as seen in the previous example, terminates an
 <CODE>$if</CODE> command.
+<P>
 
 <DT><CODE>$else</CODE>
-<DD>
-Commands in this branch of the <CODE>$if</CODE> directive are executed if
+<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if
 the test fails.
+<P>
 
 <DT><CODE>$include</CODE>
-<DD>
-This directive takes a single filename as an argument and reads commands
+<DD>This directive takes a single filename as an argument and reads commands
 and bindings from that file.
-
-<PRE>
-$include /etc/inputrc
-</PRE>
-
-</DL>
-
-
-
-<H3><A NAME="SEC12" HREF="readline.html#TOC12">Sample Init File</A></H3>
-
+For example, the following directive reads from <TT>`/etc/inputrc'</TT>:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$include /etc/inputrc
+</pre></td></tr></table></DL>
 <P>
-Here is an example of an inputrc file.  This illustrates key
+
+<A NAME="Sample Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.3 Sample Init File </H3>
+<!--docid::SEC12::-->
+<P>
+
+Here is an example of an <VAR>inputrc</VAR> file.  This illustrates key
 binding, variable assignment, and conditional syntax.
+</P><P>
 
-</P>
-
-<PRE>
-# This file controls the behaviour of line input editing for
-# programs that use the Gnu Readline library.  Existing programs
-# include FTP, Bash, and Gdb.
+<TABLE><tr><td>&nbsp;</td><td class=example><pre># This file controls the behaviour of line input editing for
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
 #
 # You can re-read the inputrc file with C-x C-r.
 # Lines beginning with '#' are comments.
 #
-# First, include any systemwide bindings and variable assignments from
-# /etc/Inputrc
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
 $include /etc/Inputrc
 
 #
@@ -972,10 +1066,12 @@
 $if Bash
 # edit the path
 "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word -- insert open and close double quotes
+# prepare to type a quoted word --
+# insert open and close double quotes
 # and move to just after the open quote
 "\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes in sequences and macros)
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
 "\C-x\\": "\\"
 # Quote the current or previous word
 "\C-xq": "\eb\"\ef\""
@@ -991,16 +1087,16 @@
 # don't strip characters to 7 bits when reading
 set input-meta on
 
-# allow iso-latin1 characters to be inserted rather than converted to
-# prefix-meta sequences
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
 set convert-meta off
 
-# display characters with the eighth bit set directly rather than
-# as meta-prefixed characters
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
 set output-meta on
 
-# if there are more than 150 possible completions for a word, ask the
-# user if he wants to see all of them
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
 set completion-query-items 150
 
 # For FTP
@@ -1009,365 +1105,516 @@
 "\C-xt": "put \M-?"
 "\M-.": yank-last-arg
 $endif
-</PRE>
+</pre></td></tr></table></P><P>
 
-
-
-<H2><A NAME="SEC13" HREF="readline.html#TOC13">Bindable Readline Commands</A></H2>
-
-
-<UL>
-<LI><A HREF="readline.html#SEC14">Commands For Moving</A>: Moving about the line.
-<LI><A HREF="readline.html#SEC15">Commands For History</A>: Getting at previous lines.
-<LI><A HREF="readline.html#SEC16">Commands For Text</A>: Commands for changing text.
-<LI><A HREF="readline.html#SEC17">Commands For Killing</A>: Commands for killing and yanking.
-<LI><A HREF="readline.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts.
-<LI><A HREF="readline.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you.
-<LI><A HREF="readline.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters
-<LI><A HREF="readline.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands.
-</UL>
-
+<A NAME="Bindable Readline Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.4 Bindable Readline Commands </H2>
+<!--docid::SEC13::-->
 <P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
 This section describes Readline commands that may be bound to key
 sequences.
-
-</P>
-<P>
 Command names without an accompanying key sequence are unbound by default.
-In the following descriptions, <VAR>point</VAR> refers to the current cursor
-position, and <VAR>mark</VAR> refers to a cursor position saved by the
+</P><P>
+
+In the following descriptions, <EM>point</EM> refers to the current cursor
+position, and <EM>mark</EM> refers to a cursor position saved by the
 <CODE>set-mark</CODE> command.
-The text between the point and mark is referred to as the <VAR>region</VAR>.
+The text between the point and mark is referred to as the <EM>region</EM>.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC14" HREF="readline.html#TOC14">Commands For Moving</A></H3>
+<A NAME="Commands For Moving"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.1 Commands For Moving </H3>
+<!--docid::SEC14::-->
 <DL COMPACT>
-
-<DT><CODE>beginning-of-line (C-a)</CODE>
-<DD>
 <A NAME="IDX26"></A>
+<DT><CODE>beginning-of-line (C-a)</CODE>
+<DD><A NAME="IDX27"></A>
 Move to the start of the current line.
+<P>
 
-<DT><CODE>end-of-line (C-e)</CODE>
-<DD>
-<A NAME="IDX27"></A>
-Move to the end of the line.
-
-<DT><CODE>forward-char (C-f)</CODE>
-<DD>
 <A NAME="IDX28"></A>
-Move forward a character.
+<DT><CODE>end-of-line (C-e)</CODE>
+<DD><A NAME="IDX29"></A>
+Move to the end of the line.
+<P>
 
-<DT><CODE>backward-char (C-b)</CODE>
-<DD>
-<A NAME="IDX29"></A>
-Move back a character.
-
-<DT><CODE>forward-word (M-f)</CODE>
-<DD>
 <A NAME="IDX30"></A>
+<DT><CODE>forward-char (C-f)</CODE>
+<DD><A NAME="IDX31"></A>
+Move forward a character.
+<P>
+
+<A NAME="IDX32"></A>
+<DT><CODE>backward-char (C-b)</CODE>
+<DD><A NAME="IDX33"></A>
+Move back a character.
+<P>
+
+<A NAME="IDX34"></A>
+<DT><CODE>forward-word (M-f)</CODE>
+<DD><A NAME="IDX35"></A>
 Move forward to the end of the next word.  Words are composed of
 letters and digits.
+<P>
 
+<A NAME="IDX36"></A>
 <DT><CODE>backward-word (M-b)</CODE>
-<DD>
-<A NAME="IDX31"></A>
+<DD><A NAME="IDX37"></A>
 Move back to the start of the current or previous word.  Words are
 composed of letters and digits.
+<P>
 
+<A NAME="IDX38"></A>
 <DT><CODE>clear-screen (C-l)</CODE>
-<DD>
-<A NAME="IDX32"></A>
+<DD><A NAME="IDX39"></A>
 Clear the screen and redraw the current line,
 leaving the current line at the top of the screen.
+<P>
 
+<A NAME="IDX40"></A>
 <DT><CODE>redraw-current-line ()</CODE>
-<DD>
-<A NAME="IDX33"></A>
+<DD><A NAME="IDX41"></A>
 Refresh the current line.  By default, this is unbound.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC15" HREF="readline.html#TOC15">Commands For Manipulating The History</A></H3>
+<A NAME="Commands For History"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.2 Commands For Manipulating The History </H3>
+<!--docid::SEC15::-->
+<P>
 
 <DL COMPACT>
+<A NAME="IDX42"></A>
+<DT><CODE>accept-line (Newline or Return)</CODE>
+<DD><A NAME="IDX43"></A>
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+<CODE>add_history()</CODE>.
+If this line is a modified history line, the history line is restored
+to its original state.
+<P>
 
-<DT><CODE>accept-line (Newline, Return)</CODE>
-<DD>
-<A NAME="IDX34"></A>
-Accept the line regardless of where the cursor is.  If this line is
-non-empty, add it to the history list.  If this line was a history
-line, then restore the history line to its original state.
-
+<A NAME="IDX44"></A>
 <DT><CODE>previous-history (C-p)</CODE>
-<DD>
-<A NAME="IDX35"></A>
-Move `up' through the history list.
+<DD><A NAME="IDX45"></A>
+Move `back' through the history list, fetching the previous command.
+<P>
 
+<A NAME="IDX46"></A>
 <DT><CODE>next-history (C-n)</CODE>
-<DD>
-<A NAME="IDX36"></A>
-Move `down' through the history list.
+<DD><A NAME="IDX47"></A>
+Move `forward' through the history list, fetching the next command.
+<P>
 
+<A NAME="IDX48"></A>
 <DT><CODE>beginning-of-history (M-&#60;)</CODE>
-<DD>
-<A NAME="IDX37"></A>
+<DD><A NAME="IDX49"></A>
 Move to the first line in the history.
+<P>
 
+<A NAME="IDX50"></A>
 <DT><CODE>end-of-history (M-&#62;)</CODE>
-<DD>
-<A NAME="IDX38"></A>
+<DD><A NAME="IDX51"></A>
 Move to the end of the input history, i.e., the line currently
 being entered.
+<P>
 
+<A NAME="IDX52"></A>
 <DT><CODE>reverse-search-history (C-r)</CODE>
-<DD>
-<A NAME="IDX39"></A>
+<DD><A NAME="IDX53"></A>
 Search backward starting at the current line and moving `up' through
 the history as necessary.  This is an incremental search.
+<P>
 
+<A NAME="IDX54"></A>
 <DT><CODE>forward-search-history (C-s)</CODE>
-<DD>
-<A NAME="IDX40"></A>
+<DD><A NAME="IDX55"></A>
 Search forward starting at the current line and moving `down' through
 the the history as necessary.  This is an incremental search.
+<P>
 
+<A NAME="IDX56"></A>
 <DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
-<DD>
-<A NAME="IDX41"></A>
+<DD><A NAME="IDX57"></A>
 Search backward starting at the current line and moving `up'
 through the history as necessary using a non-incremental search
 for a string supplied by the user.
+<P>
 
+<A NAME="IDX58"></A>
 <DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
-<DD>
-<A NAME="IDX42"></A>
+<DD><A NAME="IDX59"></A>
 Search forward starting at the current line and moving `down'
 through the the history as necessary using a non-incremental search
 for a string supplied by the user.
+<P>
 
+<A NAME="IDX60"></A>
 <DT><CODE>history-search-forward ()</CODE>
-<DD>
-<A NAME="IDX43"></A>
+<DD><A NAME="IDX61"></A>
 Search forward through the history for the string of characters
 between the start of the current line and the point.
 This is a non-incremental search.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX62"></A>
 <DT><CODE>history-search-backward ()</CODE>
-<DD>
-<A NAME="IDX44"></A>
+<DD><A NAME="IDX63"></A>
 Search backward through the history for the string of characters
 between the start of the current line and the point.  This
 is a non-incremental search.  By default, this command is unbound.
+<P>
 
+<A NAME="IDX64"></A>
 <DT><CODE>yank-nth-arg (M-C-y)</CODE>
-<DD>
-<A NAME="IDX45"></A>
+<DD><A NAME="IDX65"></A>
 Insert the first argument to the previous command (usually
-the second word on the previous line).  With an argument <VAR>n</VAR>,
+the second word on the previous line) at point.
+With an argument <VAR>n</VAR>,
 insert the <VAR>n</VAR>th word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
 inserts the <VAR>n</VAR>th word from the end of the previous command.
+<P>
 
-<DT><CODE>yank-last-arg (M-., M-_)</CODE>
-<DD>
-<A NAME="IDX46"></A>
+<A NAME="IDX66"></A>
+<DT><CODE>yank-last-arg (M-. or M-_)</CODE>
+<DD><A NAME="IDX67"></A>
 Insert last argument to the previous command (the last word of the
 previous history entry).  With an
 argument, behave exactly like <CODE>yank-nth-arg</CODE>.
 Successive calls to <CODE>yank-last-arg</CODE> move back through the history
 list, inserting the last argument of each line in turn.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC16" HREF="readline.html#TOC16">Commands For Changing Text</A></H3>
+<A NAME="Commands For Text"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.3 Commands For Changing Text </H3>
+<!--docid::SEC16::-->
+<P>
 
 <DL COMPACT>
-
+<A NAME="IDX68"></A>
 <DT><CODE>delete-char (C-d)</CODE>
-<DD>
-<A NAME="IDX47"></A>
-Delete the character under the cursor.  If the cursor is at the
+<DD><A NAME="IDX69"></A>
+Delete the character at point.  If point is at the
 beginning of the line, there are no characters in the line, and
 the last character typed was not bound to <CODE>delete-char</CODE>, then
-return <CODE>EOF</CODE>.
+return EOF.
+<P>
 
+<A NAME="IDX70"></A>
 <DT><CODE>backward-delete-char (Rubout)</CODE>
-<DD>
-<A NAME="IDX48"></A>
+<DD><A NAME="IDX71"></A>
 Delete the character behind the cursor.  A numeric argument means
 to kill the characters instead of deleting them.
+<P>
 
+<A NAME="IDX72"></A>
 <DT><CODE>forward-backward-delete-char ()</CODE>
-<DD>
-<A NAME="IDX49"></A>
+<DD><A NAME="IDX73"></A>
 Delete the character under the cursor, unless the cursor is at the
 end of the line, in which case the character behind the cursor is
 deleted.  By default, this is not bound to a key.
+<P>
 
-<DT><CODE>quoted-insert (C-q, C-v)</CODE>
-<DD>
-<A NAME="IDX50"></A>
+<A NAME="IDX74"></A>
+<DT><CODE>quoted-insert (C-q or C-v)</CODE>
+<DD><A NAME="IDX75"></A>
 Add the next character typed to the line verbatim.  This is
 how to insert key sequences like <KBD>C-q</KBD>, for example.
+<P>
 
-<DT><CODE>tab-insert (M-TAB)</CODE>
-<DD>
-<A NAME="IDX51"></A>
+<A NAME="IDX76"></A>
+<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE>
+<DD><A NAME="IDX77"></A>
 Insert a tab character.
+<P>
 
-<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
-<DD>
-<A NAME="IDX52"></A>
+<A NAME="IDX78"></A>
+<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE>
+<DD><A NAME="IDX79"></A>
 Insert yourself.
+<P>
 
+<A NAME="IDX80"></A>
 <DT><CODE>transpose-chars (C-t)</CODE>
-<DD>
-<A NAME="IDX53"></A>
+<DD><A NAME="IDX81"></A>
 Drag the character before the cursor forward over
 the character at the cursor, moving the
 cursor forward as well.  If the insertion point
 is at the end of the line, then this
 transposes the last two characters of the line.
 Negative arguments have no effect.
+<P>
 
+<A NAME="IDX82"></A>
 <DT><CODE>transpose-words (M-t)</CODE>
-<DD>
-<A NAME="IDX54"></A>
+<DD><A NAME="IDX83"></A>
 Drag the word before point past the word after point,
 moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+<P>
 
+<A NAME="IDX84"></A>
 <DT><CODE>upcase-word (M-u)</CODE>
-<DD>
-<A NAME="IDX55"></A>
+<DD><A NAME="IDX85"></A>
 Uppercase the current (or following) word.  With a negative argument,
 uppercase the previous word, but do not move the cursor.
+<P>
 
+<A NAME="IDX86"></A>
 <DT><CODE>downcase-word (M-l)</CODE>
-<DD>
-<A NAME="IDX56"></A>
+<DD><A NAME="IDX87"></A>
 Lowercase the current (or following) word.  With a negative argument,
 lowercase the previous word, but do not move the cursor.
+<P>
 
+<A NAME="IDX88"></A>
 <DT><CODE>capitalize-word (M-c)</CODE>
-<DD>
-<A NAME="IDX57"></A>
+<DD><A NAME="IDX89"></A>
 Capitalize the current (or following) word.  With a negative argument,
 capitalize the previous word, but do not move the cursor.
+<P>
+
+<A NAME="IDX90"></A>
+<DT><CODE>overwrite-mode ()</CODE>
+<DD><A NAME="IDX91"></A>
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently.
+Each call to <CODE>readline()</CODE> starts in insert mode.
+<P>
+
+In overwrite mode, characters bound to <CODE>self-insert</CODE> replace
+the text at point rather than pushing the text to the right.
+Characters bound to <CODE>backward-delete-char</CODE> replace the character
+before point with a space.
+</P><P>
+
+By default, this command is unbound.
+</P><P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC17" HREF="readline.html#TOC17">Killing And Yanking</A></H3>
+<A NAME="Commands For Killing"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.4 Killing And Yanking </H3>
+<!--docid::SEC17::-->
+<P>
 
 <DL COMPACT>
 
+<A NAME="IDX92"></A>
 <DT><CODE>kill-line (C-k)</CODE>
-<DD>
-<A NAME="IDX58"></A>
+<DD><A NAME="IDX93"></A>
 Kill the text from point to the end of the line.
+<P>
 
+<A NAME="IDX94"></A>
 <DT><CODE>backward-kill-line (C-x Rubout)</CODE>
-<DD>
-<A NAME="IDX59"></A>
+<DD><A NAME="IDX95"></A>
 Kill backward to the beginning of the line.
+<P>
 
+<A NAME="IDX96"></A>
 <DT><CODE>unix-line-discard (C-u)</CODE>
-<DD>
-<A NAME="IDX60"></A>
+<DD><A NAME="IDX97"></A>
 Kill backward from the cursor to the beginning of the current line.
+<P>
 
+<A NAME="IDX98"></A>
 <DT><CODE>kill-whole-line ()</CODE>
-<DD>
-<A NAME="IDX61"></A>
-Kill all characters on the current line, no matter point is.
+<DD><A NAME="IDX99"></A>
+Kill all characters on the current line, no matter where point is.
 By default, this is unbound.
+<P>
 
+<A NAME="IDX100"></A>
 <DT><CODE>kill-word (M-d)</CODE>
-<DD>
-<A NAME="IDX62"></A>
+<DD><A NAME="IDX101"></A>
 Kill from point to the end of the current word, or if between
 words, to the end of the next word.
 Word boundaries are the same as <CODE>forward-word</CODE>.
+<P>
 
-<DT><CODE>backward-kill-word (M-DEL)</CODE>
-<DD>
-<A NAME="IDX63"></A>
+<A NAME="IDX102"></A>
+<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE>
+<DD><A NAME="IDX103"></A>
 Kill the word behind point.
 Word boundaries are the same as <CODE>backward-word</CODE>.
+<P>
 
+<A NAME="IDX104"></A>
 <DT><CODE>unix-word-rubout (C-w)</CODE>
-<DD>
-<A NAME="IDX64"></A>
+<DD><A NAME="IDX105"></A>
 Kill the word behind point, using white space as a word boundary.
 The killed text is saved on the kill-ring.
+<P>
 
+<A NAME="IDX106"></A>
 <DT><CODE>delete-horizontal-space ()</CODE>
-<DD>
-<A NAME="IDX65"></A>
+<DD><A NAME="IDX107"></A>
 Delete all spaces and tabs around point.  By default, this is unbound.
+<P>
 
+<A NAME="IDX108"></A>
 <DT><CODE>kill-region ()</CODE>
-<DD>
-<A NAME="IDX66"></A>
+<DD><A NAME="IDX109"></A>
 Kill the text in the current region.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX110"></A>
 <DT><CODE>copy-region-as-kill ()</CODE>
-<DD>
-<A NAME="IDX67"></A>
+<DD><A NAME="IDX111"></A>
 Copy the text in the region to the kill buffer, so it can be yanked
 right away.  By default, this command is unbound.
+<P>
 
+<A NAME="IDX112"></A>
 <DT><CODE>copy-backward-word ()</CODE>
-<DD>
-<A NAME="IDX68"></A>
+<DD><A NAME="IDX113"></A>
 Copy the word before point to the kill buffer.
 The word boundaries are the same as <CODE>backward-word</CODE>.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX114"></A>
 <DT><CODE>copy-forward-word ()</CODE>
-<DD>
-<A NAME="IDX69"></A>
+<DD><A NAME="IDX115"></A>
 Copy the word following point to the kill buffer.
 The word boundaries are the same as <CODE>forward-word</CODE>.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX116"></A>
 <DT><CODE>yank (C-y)</CODE>
-<DD>
-<A NAME="IDX70"></A>
-Yank the top of the kill ring into the buffer at the current
-cursor position.
+<DD><A NAME="IDX117"></A>
+Yank the top of the kill ring into the buffer at point.
+<P>
 
+<A NAME="IDX118"></A>
 <DT><CODE>yank-pop (M-y)</CODE>
-<DD>
-<A NAME="IDX71"></A>
+<DD><A NAME="IDX119"></A>
 Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is yank or yank-pop.
+the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC18" HREF="readline.html#TOC18">Specifying Numeric Arguments</A></H3>
+<A NAME="Numeric Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.5 Specifying Numeric Arguments </H3>
+<!--docid::SEC18::-->
 <DL COMPACT>
 
-<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE>
-<DD>
-<A NAME="IDX72"></A>
+<A NAME="IDX120"></A>
+<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
+<DD><A NAME="IDX121"></A>
 Add this digit to the argument already accumulating, or start a new
 argument.  <KBD>M--</KBD> starts a negative argument.
+<P>
 
+<A NAME="IDX122"></A>
 <DT><CODE>universal-argument ()</CODE>
-<DD>
-<A NAME="IDX73"></A>
+<DD><A NAME="IDX123"></A>
 This is another way to specify an argument.
 If this command is followed by one or more digits, optionally with a
 leading minus sign, those digits define the argument.
@@ -1381,321 +1628,453 @@
 argument count sixteen, and so on.
 By default, this is not bound to a key.
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC19" HREF="readline.html#TOC19">Letting Readline Type For You</A></H3>
+<A NAME="Commands For Completion"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.6 Letting Readline Type For You </H3>
+<!--docid::SEC19::-->
+<P>
 
 <DL COMPACT>
+<A NAME="IDX124"></A>
+<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
+<DD><A NAME="IDX125"></A>
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
+The default is filename completion.
+<P>
 
-<DT><CODE>complete (TAB)</CODE>
-<DD>
-<A NAME="IDX74"></A>
-Attempt to do completion on the text before the cursor.  This is
-application-specific.  Generally, if you are typing a filename
-argument, you can do filename completion; if you are typing a command,
-you can do command completion; if you are typing in a symbol to GDB, you
-can do symbol name completion; if you are typing in a variable to Bash,
-you can do variable name completion, and so on.
-
+<A NAME="IDX126"></A>
 <DT><CODE>possible-completions (M-?)</CODE>
-<DD>
-<A NAME="IDX75"></A>
-List the possible completions of the text before the cursor.
+<DD><A NAME="IDX127"></A>
+List the possible completions of the text before point.
+<P>
 
+<A NAME="IDX128"></A>
 <DT><CODE>insert-completions (M-*)</CODE>
-<DD>
-<A NAME="IDX76"></A>
+<DD><A NAME="IDX129"></A>
 Insert all completions of the text before point that would have
 been generated by <CODE>possible-completions</CODE>.
+<P>
 
+<A NAME="IDX130"></A>
 <DT><CODE>menu-complete ()</CODE>
-<DD>
-<A NAME="IDX77"></A>
+<DD><A NAME="IDX131"></A>
 Similar to <CODE>complete</CODE>, but replaces the word to be completed
 with a single match from the list of possible completions.
 Repeated execution of <CODE>menu-complete</CODE> steps through the list
 of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
+At the end of the list of completions, the bell is rung
+(subject to the setting of <CODE>bell-style</CODE>)
+and the original text is restored.
 An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list
 of matches; a negative argument may be used to move backward
 through the list.
-This command is intended to be bound to <CODE>TAB</CODE>, but is unbound
+This command is intended to be bound to <KBD>TAB</KBD>, but is unbound
 by default.
+<P>
 
+<A NAME="IDX132"></A>
 <DT><CODE>delete-char-or-list ()</CODE>
-<DD>
-<A NAME="IDX78"></A>
+<DD><A NAME="IDX133"></A>
 Deletes the character under the cursor if not at the beginning or
 end of the line (like <CODE>delete-char</CODE>).
 If at the end of the line, behaves identically to
 <CODE>possible-completions</CODE>.
 This command is unbound by default.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC20" HREF="readline.html#TOC20">Keyboard Macros</A></H3>
+<A NAME="Keyboard Macros"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.7 Keyboard Macros </H3>
+<!--docid::SEC20::-->
 <DL COMPACT>
 
+<A NAME="IDX134"></A>
 <DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD>
-<A NAME="IDX79"></A>
+<DD><A NAME="IDX135"></A>
 Begin saving the characters typed into the current keyboard macro.
+<P>
 
+<A NAME="IDX136"></A>
 <DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD>
-<A NAME="IDX80"></A>
+<DD><A NAME="IDX137"></A>
 Stop saving the characters typed into the current keyboard macro
 and save the definition.
+<P>
 
+<A NAME="IDX138"></A>
 <DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD>
-<A NAME="IDX81"></A>
+<DD><A NAME="IDX139"></A>
 Re-execute the last keyboard macro defined, by making the characters
 in the macro appear as if typed at the keyboard.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC21" HREF="readline.html#TOC21">Some Miscellaneous Commands</A></H3>
+<A NAME="Miscellaneous Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.8 Some Miscellaneous Commands </H3>
+<!--docid::SEC21::-->
 <DL COMPACT>
 
+<A NAME="IDX140"></A>
 <DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD>
-<A NAME="IDX82"></A>
+<DD><A NAME="IDX141"></A>
 Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
 any bindings or variable assignments found there.
+<P>
 
+<A NAME="IDX142"></A>
 <DT><CODE>abort (C-g)</CODE>
-<DD>
-<A NAME="IDX83"></A>
+<DD><A NAME="IDX143"></A>
 Abort the current editing command and
 ring the terminal's bell (subject to the setting of
 <CODE>bell-style</CODE>).
+<P>
 
-<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
-<DD>
-<A NAME="IDX84"></A>
+<A NAME="IDX144"></A>
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
+<DD><A NAME="IDX145"></A>
 If the metafied character <VAR>x</VAR> is lowercase, run the command
 that is bound to the corresponding uppercase character.
+<P>
 
-<DT><CODE>prefix-meta (ESC)</CODE>
-<DD>
-<A NAME="IDX85"></A>
-Make the next character typed be metafied.  This is for keyboards
-without a meta key.  Typing <SAMP>`ESC f'</SAMP> is equivalent to typing
-<SAMP>`M-f'</SAMP>.
+<A NAME="IDX146"></A>
+<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
+<DD><A NAME="IDX147"></A>
+Metafy the next character typed.  This is for keyboards
+without a meta key.  Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
+<KBD>M-f</KBD>.
+<P>
 
-<DT><CODE>undo (C-_, C-x C-u)</CODE>
-<DD>
-<A NAME="IDX86"></A>
+<A NAME="IDX148"></A>
+<DT><CODE>undo (C-_ or C-x C-u)</CODE>
+<DD><A NAME="IDX149"></A>
 Incremental undo, separately remembered for each line.
+<P>
 
+<A NAME="IDX150"></A>
 <DT><CODE>revert-line (M-r)</CODE>
-<DD>
-<A NAME="IDX87"></A>
+<DD><A NAME="IDX151"></A>
 Undo all changes made to this line.  This is like executing the <CODE>undo</CODE>
 command enough times to get back to the beginning.
+<P>
 
+<A NAME="IDX152"></A>
 <DT><CODE>tilde-expand (M-~)</CODE>
-<DD>
-<A NAME="IDX88"></A>
+<DD><A NAME="IDX153"></A>
 Perform tilde expansion on the current word.
+<P>
 
+<A NAME="IDX154"></A>
 <DT><CODE>set-mark (C-@)</CODE>
-<DD>
-<A NAME="IDX89"></A>
-Set the mark to the current point.  If a
+<DD><A NAME="IDX155"></A>
+Set the mark to the point.  If a
 numeric argument is supplied, the mark is set to that position.
+<P>
 
+<A NAME="IDX156"></A>
 <DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD>
-<A NAME="IDX90"></A>
+<DD><A NAME="IDX157"></A>
 Swap the point with the mark.  The current cursor position is set to
 the saved position, and the old cursor position is saved as the mark.
+<P>
 
+<A NAME="IDX158"></A>
 <DT><CODE>character-search (C-])</CODE>
-<DD>
-<A NAME="IDX91"></A>
+<DD><A NAME="IDX159"></A>
 A character is read and point is moved to the next occurrence of that
 character.  A negative count searches for previous occurrences.
+<P>
 
+<A NAME="IDX160"></A>
 <DT><CODE>character-search-backward (M-C-])</CODE>
-<DD>
-<A NAME="IDX92"></A>
+<DD><A NAME="IDX161"></A>
 A character is read and point is moved to the previous occurrence
 of that character.  A negative count searches for subsequent
 occurrences.
+<P>
 
+<A NAME="IDX162"></A>
 <DT><CODE>insert-comment (M-#)</CODE>
-<DD>
-<A NAME="IDX93"></A>
-The value of the <CODE>comment-begin</CODE>
-variable is inserted at the beginning of the current line,
-and the line is accepted as if a newline had been typed.
+<DD><A NAME="IDX163"></A>
+Without a numeric argument, the value of the <CODE>comment-begin</CODE>
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value
+of <CODE>comment-begin</CODE>, the value is inserted, otherwise
+the characters in <CODE>comment-begin</CODE> are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+<P>
 
+<A NAME="IDX164"></A>
 <DT><CODE>dump-functions ()</CODE>
-<DD>
-<A NAME="IDX94"></A>
+<DD><A NAME="IDX165"></A>
 Print all of the functions and their key bindings to the
 Readline output stream.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
 
+<A NAME="IDX166"></A>
 <DT><CODE>dump-variables ()</CODE>
-<DD>
-<A NAME="IDX95"></A>
+<DD><A NAME="IDX167"></A>
 Print all of the settable variables and their values to the
 Readline output stream.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
 
+<A NAME="IDX168"></A>
 <DT><CODE>dump-macros ()</CODE>
-<DD>
-<A NAME="IDX96"></A>
+<DD><A NAME="IDX169"></A>
 Print all of the Readline key sequences bound to macros and the
-strings they ouput.  If a numeric argument is supplied,
+strings they output.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
+
+<A NAME="IDX170"></A>
+<DT><CODE>emacs-editing-mode (C-e)</CODE>
+<DD><A NAME="IDX171"></A>
+When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE>
+editing mode.
+<P>
+
+<A NAME="IDX172"></A>
+<DT><CODE>vi-editing-mode (M-C-j)</CODE>
+<DD><A NAME="IDX173"></A>
+When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE>
+editing mode.
+<P>
 
 </DL>
-
-
-
-<H2><A NAME="SEC22" HREF="readline.html#TOC22">Readline vi Mode</A></H2>
-
 <P>
+
+<A NAME="Readline vi Mode"></A>
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.5 Readline vi Mode </H2>
+<!--docid::SEC22::-->
+<P>
+
 While the Readline library does not have a full set of <CODE>vi</CODE>
 editing functions, it does contain enough to allow simple editing
 of the line.  The Readline <CODE>vi</CODE> mode behaves as specified in
 the POSIX 1003.2 standard.
+</P><P>
 
-</P>
-<P>
 In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
-editing modes, use the command M-C-j (toggle-editing-mode).
+editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode
+when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode).
 The Readline default is <CODE>emacs</CODE> mode.
+</P><P>
 
-</P>
-<P>
 When you enter a line in <CODE>vi</CODE> mode, you are already placed in
 `insertion' mode, as if you had typed an <SAMP>`i'</SAMP>.  Pressing <KBD>ESC</KBD>
 switches you into `command' mode, where you can edit the text of the
 line with the standard <CODE>vi</CODE> movement keys, move to previous
 history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
 so forth.
+</P><P>
 
-</P>
+This document describes the GNU Readline Library, a utility for aiding
+in the consitency of user interface across discrete programs that need
+to provide a command line interface.
+</P><P>
 
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
+</P><P>
 
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+pare preserved on all copies.
+</P><P>
 
-<H1><A NAME="SEC23" HREF="readline.html#TOC23">Programming with GNU Readline</A></H1>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+</P><P>
 
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+</P><P>
+
+<A NAME="Programming with GNU Readline"></A>
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Programming with GNU Readline </H1>
+<!--docid::SEC23::-->
 <P>
+
 This chapter describes the interface between the GNU Readline Library and
 other programs.  If you are a programmer, and you wish to include the
 features found in GNU Readline
 such as completion, line editing, and interactive history manipulation
 in your own programs, this section is for you.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC24">Basic Behavior</A>: Using the default behavior of Readline.
-<LI><A HREF="readline.html#SEC25">Custom Functions</A>: Adding your own functions to Readline.
-<LI><A HREF="readline.html#SEC28">Readline Variables</A>: Variables accessible to custom
-					functions.
-<LI><A HREF="readline.html#SEC29">Readline Convenience Functions</A>: Functions which Readline supplies to
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Using the default behavior of Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC25">2.2 Custom Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Adding your own functions to Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables accessible to custom
+					functions.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions which Readline supplies to
 					aid in writing your own custom
-					functions.
-<LI><A HREF="readline.html#SEC40">Readline Signal Handling</A>: How Readline behaves when it receives signals.
-<LI><A HREF="readline.html#SEC41">Custom Completers</A>: Supplanting or supplementing Readline's
-			completion functions.
-</UL>
-
-
-
-<H2><A NAME="SEC24" HREF="readline.html#TOC24">Basic Behavior</A></H2>
-
+					functions.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Readline behaves when it receives signals.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC44">2.6 Custom Completers</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Supplanting or supplementing Readline's
+			completion functions.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Basic Behavior"></A>
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Basic Behavior </H2>
+<!--docid::SEC24::-->
+<P>
+
 Many programs provide a command line interface, such as <CODE>mail</CODE>,
 <CODE>ftp</CODE>, and <CODE>sh</CODE>.  For such programs, the default behaviour of
 Readline is sufficient.  This section describes how to use Readline in
 the simplest way possible, perhaps to replace calls in your code to
-<CODE>gets()</CODE> or <CODE>fgets ()</CODE>.
+<CODE>gets()</CODE> or <CODE>fgets()</CODE>.
+</P><P>
 
-</P>
-<P>
-<A NAME="IDX97"></A>
-<A NAME="IDX98"></A>
-The function <CODE>readline ()</CODE> prints a prompt and then reads and returns
-a single line of text from the user.  The line <CODE>readline</CODE>
-returns is allocated with <CODE>malloc ()</CODE>; you should <CODE>free ()</CODE>
-the line when you are done with it.  The declaration for <CODE>readline</CODE>
-in ANSI C is
+<A NAME="IDX174"></A>
+<A NAME="IDX175"></A>
+</P><P>
 
-</P>
+The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR>
+and then reads and returns a single line of text from the user.
+If <VAR>prompt</VAR> is <CODE>NULL</CODE> or the empty string, no prompt is displayed.
+The line <CODE>readline</CODE> returns is allocated with <CODE>malloc()</CODE>;
+the caller should <CODE>free()</CODE> the line when it has finished with it.
+The declaration for <CODE>readline</CODE> in ANSI C is
+</P><P>
 
-<PRE>
-<CODE>char *readline (char *<VAR>prompt</VAR>);</CODE>
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>char *readline (const char *<VAR>prompt</VAR>);</CODE>
+</pre></td></tr></table></P><P>
 
-<P>
 So, one might say
-
-<PRE>
-<CODE>char *line = readline ("Enter a line: ");</CODE>
-</PRE>
-
-<P>
-in order to read a line of text from the user.
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>char *line = readline ("Enter a line: ");</CODE>
+</pre></td></tr></table>in order to read a line of text from the user.
 The line returned has the final newline removed, so only the
 text remains.
+</P><P>
 
-</P>
-<P>
 If <CODE>readline</CODE> encounters an <CODE>EOF</CODE> while reading the line, and the
 line is empty at that point, then <CODE>(char *)NULL</CODE> is returned.
 Otherwise, the line is ended just as if a newline had been typed.
+</P><P>
 
-</P>
-<P>
 If you want the user to be able to get at the line later, (with
-<KBD>C-p</KBD> for example), you must call <CODE>add_history ()</CODE> to save the
+<KBD>C-p</KBD> for example), you must call <CODE>add_history()</CODE> to save the
 line away in a <EM>history</EM> list of such lines.
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>add_history (line)</CODE>;
+</pre></td></tr></table></P><P>
 
-<PRE>
-<CODE>add_history (line)</CODE>;
-</PRE>
-
-<P>
 For full details on the GNU History Library, see the associated manual.
+</P><P>
 
-</P>
-<P>
 It is preferable to avoid saving empty lines on the history list, since
 users rarely have a burning need to reuse a blank line.  Here is
-a function which usefully replaces the standard <CODE>gets ()</CODE> library
+a function which usefully replaces the standard <CODE>gets()</CODE> library
 function, and has the advantage of no static buffer to overflow:
+</P><P>
 
-</P>
-
-<PRE>
-/* A static variable for holding the line. */
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/* A static variable for holding the line. */
 static char *line_read = (char *)NULL;
 
-/* Read a string, and return a pointer to it.  Returns NULL on EOF. */
+/* Read a string, and return a pointer to it.
+   Returns NULL on EOF. */
 char *
 rl_gets ()
 {
-  /* If the buffer has already been allocated, return the memory
-     to the free pool. */
+  /* If the buffer has already been allocated,
+     return the memory to the free pool. */
   if (line_read)
     {
       free (line_read);
@@ -1705,150 +2084,222 @@
   /* Get a line from the user. */
   line_read = readline ("");
 
-  /* If the line has any text in it, save it on the history. */
+  /* If the line has any text in it,
+     save it on the history. */
   if (line_read &#38;&#38; *line_read)
     add_history (line_read);
 
   return (line_read);
 }
-</PRE>
+</pre></td></tr></table></P><P>
 
-<P>
 This function gives the user the default behaviour of <KBD>TAB</KBD>
 completion: completion on file names.  If you do not want Readline to
 complete on filenames, you can change the binding of the <KBD>TAB</KBD> key
-with <CODE>rl_bind_key ()</CODE>.
+with <CODE>rl_bind_key()</CODE>.
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>int rl_bind_key (int <VAR>key</VAR>, rl_command_func_t *<VAR>function</VAR>);</CODE>
+</pre></td></tr></table></P><P>
 
-<PRE>
-<CODE>int rl_bind_key (int <VAR>key</VAR>, int (*<VAR>function</VAR>)());</CODE>
-</PRE>
-
-<P>
-<CODE>rl_bind_key ()</CODE> takes two arguments: <VAR>key</VAR> is the character that
+<CODE>rl_bind_key()</CODE> takes two arguments: <VAR>key</VAR> is the character that
 you want to bind, and <VAR>function</VAR> is the address of the function to
-call when <VAR>key</VAR> is pressed.  Binding <KBD>TAB</KBD> to <CODE>rl_insert ()</CODE>
+call when <VAR>key</VAR> is pressed.  Binding <KBD>TAB</KBD> to <CODE>rl_insert()</CODE>
 makes <KBD>TAB</KBD> insert itself.
-<CODE>rl_bind_key ()</CODE> returns non-zero if <VAR>key</VAR> is not a valid
+<CODE>rl_bind_key()</CODE> returns non-zero if <VAR>key</VAR> is not a valid
 ASCII character code (between 0 and 255).
+</P><P>
 
-</P>
-<P>
 Thus, to disable the default <KBD>TAB</KBD> behavior, the following suffices:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>rl_bind_key ('\t', rl_insert);</CODE>
+</pre></td></tr></table></P><P>
 
-<PRE>
-<CODE>rl_bind_key ('\t', rl_insert);</CODE>
-</PRE>
-
-<P>
 This code should be executed once at the start of your program; you
-might write a function called <CODE>initialize_readline ()</CODE> which
+might write a function called <CODE>initialize_readline()</CODE> which
 performs this and other desired initializations, such as installing
-custom completers (see section <A HREF="readline.html#SEC41">Custom Completers</A>).
+custom completers (see section <A HREF="readline.html#SEC44">2.6 Custom Completers</A>).
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC25" HREF="readline.html#TOC25">Custom Functions</A></H2>
-
+<A NAME="Custom Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 Custom Functions </H2>
+<!--docid::SEC25::-->
 <P>
+
 Readline provides many functions for manipulating the text of
 the line, but it isn't possible to anticipate the needs of all
 programs.  This section describes the various functions and variables
 defined within the Readline library which allow a user program to add
 customized functionality to Readline.
+</P><P>
 
-</P>
-<P>
 Before declaring any functions that customize Readline's behavior, or
 using any functionality Readline provides in other code, an
 application writer should include the file <CODE>&#60;readline/readline.h&#62;</CODE>
 in any file that uses Readline's features.  Since some of the definitions
 in <CODE>readline.h</CODE> use the <CODE>stdio</CODE> library, the file
 <CODE>&#60;stdio.h&#62;</CODE> should be included before <CODE>readline.h</CODE>.
+</P><P>
 
-</P>
+<CODE>readline.h</CODE> defines a C preprocessor variable that should
+be treated as an integer, <CODE>RL_READLINE_VERSION</CODE>, which may
+be used to conditionally compile application code depending on
+the installed Readline version.  The value is a hexadecimal
+encoding of the major and minor version numbers of the library,
+of the form 0x<VAR>MMmm</VAR>.  <VAR>MM</VAR> is the two-digit major
+version number; <VAR>mm</VAR> is the two-digit minor version number. 
+For Readline 4.2, for example, the value of
+<CODE>RL_READLINE_VERSION</CODE> would be <CODE>0x0402</CODE>. 
+</P><P>
 
-<UL>
-<LI><A HREF="readline.html#SEC26">The Function Type</A>: C declarations to make code readable.
-<LI><A HREF="readline.html#SEC27">Function Writing</A>: Variables and calling conventions.
-</UL>
-
-
-
-<H3><A NAME="SEC26" HREF="readline.html#TOC26">The Function Type</A></H3>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">C declarations to make code readable.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC27">2.2.2 Writing a New Function</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables and calling conventions.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-For readabilty, we declare a new type of object, called
-<EM>Function</EM>.  A <CODE>Function</CODE> is a C function which
-returns an <CODE>int</CODE>.  The type declaration for <CODE>Function</CODE> is:
 
-</P>
+<A NAME="Readline Typedefs"></A>
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.1 Readline Typedefs </H3>
+<!--docid::SEC26::-->
 <P>
-<CODE>typedef int Function ();</CODE>
 
-</P>
-<P>
-The reason for declaring this new type is to make it easier to write
-code describing pointers to C functions.  Let us say we had a variable
-called <VAR>func</VAR> which was a pointer to a function.  Instead of the
-classic C declaration
+For readabilty, we declare a number of new object types, all pointers
+to functions.
+</P><P>
 
-</P>
-<P>
-<CODE>int (*)()func;</CODE>
+The reason for declaring these new types is to make it easier to write
+code describing pointers to C functions with appropriately prototyped
+arguments and return values.
+</P><P>
 
-</P>
-<P>
+For instance, say we want to declare a variable <VAR>func</VAR> as a pointer
+to a function which takes two <CODE>int</CODE> arguments and returns an
+<CODE>int</CODE> (this is the type of all of the Readline bindable functions).
+Instead of the classic C declaration
+</P><P>
+
+<CODE>int (*func)();</CODE>
+</P><P>
+
+or the ANSI-C style declaration
+</P><P>
+
+<CODE>int (*func)(int, int);</CODE>
+</P><P>
+
 we may write
+</P><P>
 
-</P>
+<CODE>rl_command_func_t *func;</CODE>
+</P><P>
+
+The full list of function pointer types available is
+</P><P>
+
+<DL COMPACT>
+<DT><CODE>typedef int rl_command_func_t (int, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef char *rl_compentry_func_t (const char *, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef char **rl_completion_func_t (const char *, int, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef char *rl_quote_func_t (char *, int, char *);</CODE>
+<DD><P>
+
+<DT><CODE>typedef char *rl_dequote_func_t (char *, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef int rl_compignore_func_t (char **);</CODE>
+<DD><P>
+
+<DT><CODE>typedef void rl_compdisp_func_t (char **, int, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef int rl_hook_func_t (void);</CODE>
+<DD><P>
+
+<DT><CODE>typedef int rl_getc_func_t (FILE *);</CODE>
+<DD><P>
+
+<DT><CODE>typedef int rl_linebuf_func_t (char *, int);</CODE>
+<DD><P>
+
+<DT><CODE>typedef int rl_intfunc_t (int);</CODE>
+<DD><DT><CODE>#define rl_ivoidfunc_t rl_hook_func_t</CODE>
+<DD><DT><CODE>typedef int rl_icpfunc_t (char *);</CODE>
+<DD><DT><CODE>typedef int rl_icppfunc_t (char **);</CODE>
+<DD><P>
+
+<DT><CODE>typedef void rl_voidfunc_t (void);</CODE>
+<DD><DT><CODE>typedef void rl_vintfunc_t (int);</CODE>
+<DD><DT><CODE>typedef void rl_vcpfunc_t (char *);</CODE>
+<DD><DT><CODE>typedef void rl_vcppfunc_t (char **);</CODE>
+<DD><P>
+
+</DL>
 <P>
-<CODE>Function *func;</CODE>
 
-</P>
+<A NAME="Function Writing"></A>
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.2 Writing a New Function </H3>
+<!--docid::SEC27::-->
 <P>
-Similarly, there are
 
-</P>
-
-<PRE>
-typedef void VFunction ();
-typedef char *CPFunction (); and
-typedef char **CPPFunction ();
-</PRE>
-
-<P>
-for functions returning no value, <CODE>pointer to char</CODE>, and
-<CODE>pointer to pointer to char</CODE>, respectively.
-
-</P>
-
-
-<H3><A NAME="SEC27" HREF="readline.html#TOC27">Writing a New Function</A></H3>
-
-<P>
 In order to write new functions for Readline, you need to know the
 calling conventions for keyboard-invoked functions, and the names of the
 variables that describe the current state of the line read so far.
+</P><P>
 
-</P>
-<P>
 The calling sequence for a command <CODE>foo</CODE> looks like
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>int foo (int count, int key)</CODE>
+</pre></td></tr></table></P><P>
 
-<PRE>
-<CODE>foo (int count, int key)</CODE>
-</PRE>
-
-<P>
 where <VAR>count</VAR> is the numeric argument (or 1 if defaulted) and
 <VAR>key</VAR> is the key that invoked this function.
+</P><P>
 
-</P>
-<P>
 It is completely up to the function as to what should be done with the
 numeric argument.  Some functions use it as a repeat count, some
 as a flag, and others to choose alternate behavior (refreshing the current
@@ -1858,98 +2309,126 @@
 to do something useful with both negative and positive arguments.
 At the very least, it should be aware that it can be passed a
 negative argument.
+</P><P>
 
-</P>
+A command function should return 0 if its action completes successfully,
+and a non-zero value if some error occurs.
+</P><P>
 
-
-<H2><A NAME="SEC28" HREF="readline.html#TOC28">Readline Variables</A></H2>
-
+<A NAME="Readline Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 Readline Variables </H2>
+<!--docid::SEC28::-->
 <P>
+
 These variables are available to function writers.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX176"></A>
 <DL>
 <DT><U>Variable:</U> char * <B>rl_line_buffer</B>
-<DD><A NAME="IDX99"></A>
-This is the line gathered so far.  You are welcome to modify the
-contents of the line, but see section <A HREF="readline.html#SEC34">Allowing Undoing</A>.  The
+<DD>This is the line gathered so far.  You are welcome to modify the
+contents of the line, but see <A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>.  The
 function <CODE>rl_extend_line_buffer</CODE> is available to increase
 the memory allocated to <CODE>rl_line_buffer</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX177"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_point</B>
-<DD><A NAME="IDX100"></A>
-The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
+<DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
 (the <EM>point</EM>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX178"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_end</B>
-<DD><A NAME="IDX101"></A>
-The number of characters present in <CODE>rl_line_buffer</CODE>.  When
+<DD>The number of characters present in <CODE>rl_line_buffer</CODE>.  When
 <CODE>rl_point</CODE> is at the end of the line, <CODE>rl_point</CODE> and
 <CODE>rl_end</CODE> are equal.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX179"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_mark</B>
-<DD><A NAME="IDX102"></A>
-The mark (saved position) in the current line.  If set, the mark
+<DD>The <VAR>mark</VAR> (saved position) in the current line.  If set, the mark
 and point define a <EM>region</EM>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX180"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_done</B>
-<DD><A NAME="IDX103"></A>
-Setting this to a non-zero value causes Readline to return the current
+<DD>Setting this to a non-zero value causes Readline to return the current
 line immediately.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX181"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_num_chars_to_read</B>
+<DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes
+Readline to return after accepting that many characters, rather
+than reading up to a character bound to <CODE>accept-line</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX182"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_pending_input</B>
-<DD><A NAME="IDX104"></A>
-Setting this to a value makes it the next keystroke read.  This is a
+<DD>Setting this to a value makes it the next keystroke read.  This is a
 way to stuff a single character into the input stream.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX183"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_dispatching</B>
+<DD>Set to a non-zero value if a function is being called from a key binding;
+zero otherwise.  Application functions can test this to discover whether
+they were called directly or by Readline's dispatching mechanism.
+</DL>
+</P><P>
+
+<A NAME="IDX184"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_erase_empty_line</B>
-<DD><A NAME="IDX105"></A>
-Setting this to a non-zero value causes Readline to completely erase
+<DD>Setting this to a non-zero value causes Readline to completely erase
 the current line, including any prompt, any time a newline is typed as
 the only character on an otherwise-empty line.  The cursor is moved to
 the beginning of the newly-blank line.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX185"></A>
 <DL>
 <DT><U>Variable:</U> char * <B>rl_prompt</B>
-<DD><A NAME="IDX106"></A>
-The prompt Readline uses.  This is set from the argument to
-<CODE>readline ()</CODE>, and should not be assigned to directly.
+<DD>The prompt Readline uses.  This is set from the argument to
+<CODE>readline()</CODE>, and should not be assigned to directly.
+The <CODE>rl_set_prompt()</CODE> function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>) may
+be used to modify the prompt string after calling <CODE>readline()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX186"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_already_prompted</B>
-<DD><A NAME="IDX107"></A>
-If an application wishes to display the prompt itself, rather than have
+<DD>If an application wishes to display the prompt itself, rather than have
 Readline do it the first time <CODE>readline()</CODE> is called, it should set
 this variable to a non-zero value after displaying the prompt.
 The prompt must also be passed as the argument to <CODE>readline()</CODE> so
@@ -1957,896 +2436,1363 @@
 The calling application is responsible for managing the value; Readline
 never sets it.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX187"></A>
 <DL>
-<DT><U>Variable:</U> char * <B>rl_library_version</B>
-<DD><A NAME="IDX108"></A>
-The version number of this revision of the library.
+<DT><U>Variable:</U> const char * <B>rl_library_version</B>
+<DD>The version number of this revision of the library.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX188"></A>
 <DL>
-<DT><U>Variable:</U> char * <B>rl_terminal_name</B>
-<DD><A NAME="IDX109"></A>
-The terminal type, used for initialization.
+<DT><U>Variable:</U> int <B>rl_readline_version</B>
+<DD>An integer encoding the current version of the library.  The encoding is
+of the form 0x<VAR>MMmm</VAR>, where <VAR>MM</VAR> is the two-digit major version
+number, and <VAR>mm</VAR> is the two-digit minor version number.
+For example, for Readline-4.2, <CODE>rl_readline_version</CODE> would have the
+value 0x0402.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX189"></A>
 <DL>
-<DT><U>Variable:</U> char * <B>rl_readline_name</B>
-<DD><A NAME="IDX110"></A>
-This variable is set to a unique name by each application using Readline.
+<DT><U>Variable:</U> int <B>rl_gnu_readline_p</B>
+<DD>Always set to 1, denoting that this is GNU readline rather than some
+emulation.
+</DL>
+</P><P>
+
+<A NAME="IDX190"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_terminal_name</B>
+<DD>The terminal type, used for initialization.  If not set by the application,
+Readline sets this to the value of the <CODE>TERM</CODE> environment variable
+the first time it is called.
+</DL>
+</P><P>
+
+<A NAME="IDX191"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_readline_name</B>
+<DD>This variable is set to a unique name by each application using Readline.
 The value allows conditional parsing of the inputrc file
-(see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>).
+(see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX192"></A>
 <DL>
 <DT><U>Variable:</U> FILE * <B>rl_instream</B>
-<DD><A NAME="IDX111"></A>
-The stdio stream from which Readline reads input.
+<DD>The stdio stream from which Readline reads input.
+If <CODE>NULL</CODE>, Readline defaults to <VAR>stdin</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX193"></A>
 <DL>
 <DT><U>Variable:</U> FILE * <B>rl_outstream</B>
-<DD><A NAME="IDX112"></A>
-The stdio stream to which Readline performs output.
+<DD>The stdio stream to which Readline performs output.
+If <CODE>NULL</CODE>, Readline defaults to <VAR>stdout</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX194"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_startup_hook</B>
-<DD><A NAME="IDX113"></A>
-If non-zero, this is the address of a function to call just
+<DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B>
+<DD>The address of the last command function Readline executed.  May be used to
+test whether or not a function is being executed twice in succession, for
+example.
+</DL>
+</P><P>
+
+<A NAME="IDX195"></A>
+<DL>
+<DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B>
+<DD>If non-zero, this is the address of a function to call just
 before <CODE>readline</CODE> prints the first prompt.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX196"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_pre_input_hook</B>
-<DD><A NAME="IDX114"></A>
-If non-zero, this is the address of a function to call after
+<DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B>
+<DD>If non-zero, this is the address of a function to call after
 the first prompt has been printed and just before <CODE>readline</CODE>
 starts reading input characters.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX197"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_event_hook</B>
-<DD><A NAME="IDX115"></A>
-If non-zero, this is the address of a function to call periodically
-when readline is waiting for terminal input.
+<DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B>
+<DD>If non-zero, this is the address of a function to call periodically
+when Readline is waiting for terminal input.
+By default, this will be called at most ten times a second if there
+is no keyboard input.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX198"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_getc_function</B>
-<DD><A NAME="IDX116"></A>
-If non-zero, <CODE>readline</CODE> will call indirectly through this pointer
+<DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B>
+<DD>If non-zero, Readline will call indirectly through this pointer
 to get a character from the input stream.  By default, it is set to
-<CODE>rl_getc</CODE>, the default <CODE>readline</CODE> character input function
-(see section <A HREF="readline.html#SEC37">Utility Functions</A>).
+<CODE>rl_getc</CODE>, the default Readline character input function
+(see section <A HREF="readline.html#SEC37">2.4.8 Character Input</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX199"></A>
 <DL>
-<DT><U>Variable:</U> VFunction * <B>rl_redisplay_function</B>
-<DD><A NAME="IDX117"></A>
-If non-zero, <CODE>readline</CODE> will call indirectly through this pointer
+<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B>
+<DD>If non-zero, Readline will call indirectly through this pointer
 to update the display with the current contents of the editing buffer.
-By default, it is set to <CODE>rl_redisplay</CODE>, the default <CODE>readline</CODE>
-redisplay function (see section <A HREF="readline.html#SEC35">Redisplay</A>).
+By default, it is set to <CODE>rl_redisplay</CODE>, the default Readline
+redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX200"></A>
+<DL>
+<DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B>
+<DD>If non-zero, Readline will call indirectly through this pointer
+to initialize the terminal.  The function takes a single argument, an
+<CODE>int</CODE> flag that says whether or not to use eight-bit characters.
+By default, this is set to <CODE>rl_prep_terminal</CODE>
+(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>).
+</DL>
+</P><P>
+
+<A NAME="IDX201"></A>
+<DL>
+<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B>
+<DD>If non-zero, Readline will call indirectly through this pointer
+to reset the terminal.  This function should undo the effects of
+<CODE>rl_prep_term_function</CODE>.
+By default, this is set to <CODE>rl_deprep_terminal</CODE>
+(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>).
+</DL>
+</P><P>
+
+<A NAME="IDX202"></A>
 <DL>
 <DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B>
-<DD><A NAME="IDX118"></A>
-This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
 currently executing readline function was found.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX203"></A>
 <DL>
 <DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B>
-<DD><A NAME="IDX119"></A>
-This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
 last key binding occurred.
 </DL>
+</P><P>
 
-</P>
+<A NAME="IDX204"></A>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_executing_macro</B>
+<DD>This variable is set to the text of any currently-executing macro.
+</DL>
+</P><P>
 
+<A NAME="IDX205"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_readline_state</B>
+<DD>A variable with bit values that encapsulate the current Readline state.
+A bit is set with the <CODE>RL_SETSTATE</CODE> macro, and unset with the
+<CODE>RL_UNSETSTATE</CODE> macro.  Use the <CODE>RL_ISSTATE</CODE> macro to test
+whether a particular state bit is set.  Current state bits include:
+</P><P>
 
-<H2><A NAME="SEC29" HREF="readline.html#TOC29">Readline Convenience Functions</A></H2>
-
-
-<UL>
-<LI><A HREF="readline.html#SEC30">Function Naming</A>: How to give a function you write a name.
-<LI><A HREF="readline.html#SEC31">Keymaps</A>: Making keymaps.
-<LI><A HREF="readline.html#SEC32">Binding Keys</A>: Changing Keymaps.
-<LI><A HREF="readline.html#SEC33">Associating Function Names and Bindings</A>: Translate function names to
-						key sequences.
-<LI><A HREF="readline.html#SEC34">Allowing Undoing</A>: How to make your functions undoable.
-<LI><A HREF="readline.html#SEC35">Redisplay</A>: Functions to control line display.
-<LI><A HREF="readline.html#SEC36">Modifying Text</A>: Functions to modify <CODE>rl_line_buffer</CODE>.
-<LI><A HREF="readline.html#SEC37">Utility Functions</A>: Generally useful functions and hooks.
-<LI><A HREF="readline.html#SEC38">Alternate Interface</A>: Using Readline in a `callback' fashion.
-</UL>
-
-
-
-<H3><A NAME="SEC30" HREF="readline.html#TOC30">Naming a Function</A></H3>
-
+<DL COMPACT>
+<DT><CODE>RL_STATE_NONE</CODE>
+<DD>Readline has not yet been called, nor has it begun to intialize.
+<DT><CODE>RL_STATE_INITIALIZING</CODE>
+<DD>Readline is initializing its internal data structures.
+<DT><CODE>RL_STATE_INITIALIZED</CODE>
+<DD>Readline has completed its initialization.
+<DT><CODE>RL_STATE_TERMPREPPED</CODE>
+<DD>Readline has modified the terminal modes to do its own input and redisplay.
+<DT><CODE>RL_STATE_READCMD</CODE>
+<DD>Readline is reading a command from the keyboard.
+<DT><CODE>RL_STATE_METANEXT</CODE>
+<DD>Readline is reading more input after reading the meta-prefix character.
+<DT><CODE>RL_STATE_DISPATCHING</CODE>
+<DD>Readline is dispatching to a command.
+<DT><CODE>RL_STATE_MOREINPUT</CODE>
+<DD>Readline is reading more input while executing an editing command.
+<DT><CODE>RL_STATE_ISEARCH</CODE>
+<DD>Readline is performing an incremental history search.
+<DT><CODE>RL_STATE_NSEARCH</CODE>
+<DD>Readline is performing a non-incremental history search.
+<DT><CODE>RL_STATE_SEARCH</CODE>
+<DD>Readline is searching backward or forward through the history for a string.
+<DT><CODE>RL_STATE_NUMERICARG</CODE>
+<DD>Readline is reading a numeric argument.
+<DT><CODE>RL_STATE_MACROINPUT</CODE>
+<DD>Readline is currently getting its input from a previously-defined keyboard
+macro.
+<DT><CODE>RL_STATE_MACRODEF</CODE>
+<DD>Readline is currently reading characters defining a keyboard macro.
+<DT><CODE>RL_STATE_OVERWRITE</CODE>
+<DD>Readline is in overwrite mode.
+<DT><CODE>RL_STATE_COMPLETING</CODE>
+<DD>Readline is performing word completion.
+<DT><CODE>RL_STATE_SIGHANDLER</CODE>
+<DD>Readline is currently executing the readline signal handler.
+<DT><CODE>RL_STATE_UNDOING</CODE>
+<DD>Readline is performing an undo.
+<DT><CODE>RL_STATE_DONE</CODE>
+<DD>Readline has read a key sequence bound to <CODE>accept-line</CODE>
+and is about to return the line to the caller.
+</DL>
 <P>
+
+</DL>
+</P><P>
+
+<A NAME="IDX206"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_explicit_arg</B>
+<DD>Set to a non-zero value if an explicit numeric argument was specified by
+the user.  Only valid in a bindable command function.
+</DL>
+</P><P>
+
+<A NAME="IDX207"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_numeric_arg</B>
+<DD>Set to the value of any numeric argument explicitly specified by the user
+before executing the current Readline function.  Only valid in a bindable
+command function.
+</DL>
+</P><P>
+
+<A NAME="IDX208"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_editing_mode</B>
+<DD>Set to a value denoting Readline's current editing mode.  A value of
+<VAR>1</VAR> means Readline is currently in emacs mode; <VAR>0</VAR>
+means that vi mode is active.
+</DL>
+</P><P>
+
+<A NAME="Readline Convenience Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 Readline Convenience Functions </H2>
+<!--docid::SEC29::-->
+<P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to give a function you write a name.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Making keymaps.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Changing Keymaps.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Translate function names to
+						key sequences.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to make your functions undoable.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to control line display.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to modify <CODE>rl_line_buffer</CODE>.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to read keyboard input.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to manage terminal settings.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Generally useful functions and hooks.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that don't fall into any category.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Using Readline in a `callback' fashion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC42">2.4.13 A Readline Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example Readline function.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Function Naming"></A>
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.1 Naming a Function </H3>
+<!--docid::SEC30::-->
+<P>
+
 The user can dynamically change the bindings of keys while using
 Readline.  This is done by representing the function with a descriptive
 name.  The user is able to type the descriptive name when referring to
 the function.  Thus, in an init file, one might find
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Meta-Rubout:	backward-kill-word
+</pre></td></tr></table></P><P>
 
-<PRE>
-Meta-Rubout:	backward-kill-word
-</PRE>
-
-<P>
 This binds the keystroke <KBD>Meta-Rubout</KBD> to the function
 <EM>descriptively</EM> named <CODE>backward-kill-word</CODE>.  You, as the
 programmer, should bind the functions you write to descriptive names as
 well.  Readline provides a function for doing that:
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX209"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(char *name, Function *function, int key)</I>
-<DD><A NAME="IDX120"></A>
-Add <VAR>name</VAR> to the list of named functions.  Make <VAR>function</VAR> be
+<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I>
+<DD>Add <VAR>name</VAR> to the list of named functions.  Make <VAR>function</VAR> be
 the function that gets called.  If <VAR>key</VAR> is not -1, then bind it to
-<VAR>function</VAR> using <CODE>rl_bind_key ()</CODE>.
+<VAR>function</VAR> using <CODE>rl_bind_key()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
 Using this function alone is sufficient for most applications.  It is
 the recommended way to add a few functions to the default functions that
 Readline has built in.  If you need to do something other
 than adding a function to Readline, you may need to use the
 underlying functions described below.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC31" HREF="readline.html#TOC31">Selecting a Keymap</A></H3>
-
+<A NAME="Keymaps"></A>
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.2 Selecting a Keymap </H3>
+<!--docid::SEC31::-->
 <P>
+
 Key bindings take place on a <EM>keymap</EM>.  The keymap is the
 association between the keys that the user types and the functions that
 get run.  You can make your own keymaps, copy existing keymaps, and tell
 Readline which keymap to use.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX210"></A>
 <DL>
-<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>()</I>
-<DD><A NAME="IDX121"></A>
-Returns a new, empty keymap.  The space for the keymap is allocated with
-<CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> it when you are done.
+<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I>
+<DD>Returns a new, empty keymap.  The space for the keymap is allocated with
+<CODE>malloc()</CODE>; the caller should free it by calling
+<CODE>rl_discard_keymap()</CODE> when done.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX211"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I>
-<DD><A NAME="IDX122"></A>
-Return a new keymap which is a copy of <VAR>map</VAR>.
+<DD>Return a new keymap which is a copy of <VAR>map</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX212"></A>
 <DL>
-<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>()</I>
-<DD><A NAME="IDX123"></A>
-Return a new keymap with the printing characters bound to rl_insert,
+<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I>
+<DD>Return a new keymap with the printing characters bound to rl_insert,
 the lowercase Meta characters bound to run their equivalents, and
 the Meta digits bound to produce numeric arguments.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX213"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX124"></A>
-Free the storage associated with <VAR>keymap</VAR>.
+<DD>Free the storage associated with <VAR>keymap</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
 Readline has several internal keymaps.  These functions allow you to
 change which keymap is active.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX214"></A>
 <DL>
-<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>()</I>
-<DD><A NAME="IDX125"></A>
-Returns the currently active keymap.
+<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I>
+<DD>Returns the currently active keymap.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX215"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX126"></A>
-Makes <VAR>keymap</VAR> the currently active keymap.
+<DD>Makes <VAR>keymap</VAR> the currently active keymap.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX216"></A>
 <DL>
-<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(char *name)</I>
-<DD><A NAME="IDX127"></A>
-Return the keymap matching <VAR>name</VAR>.  <VAR>name</VAR> is one which would
-be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I>
+<DD>Return the keymap matching <VAR>name</VAR>.  <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX217"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX128"></A>
-Return the name matching <VAR>keymap</VAR>.  <VAR>name</VAR> is one which would
-be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+<DD>Return the name matching <VAR>keymap</VAR>.  <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC32" HREF="readline.html#TOC32">Binding Keys</A></H3>
-
+<A NAME="Binding Keys"></A>
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.3 Binding Keys </H3>
+<!--docid::SEC32::-->
 <P>
-You associate keys with functions through the keymap.  Readline has
-several internal keymaps: <CODE>emacs_standard_keymap</CODE>,
+
+Key sequences are associate with functions through the keymap.
+Readline has several internal keymaps: <CODE>emacs_standard_keymap</CODE>,
 <CODE>emacs_meta_keymap</CODE>, <CODE>emacs_ctlx_keymap</CODE>,
 <CODE>vi_movement_keymap</CODE>, and <CODE>vi_insertion_keymap</CODE>.
 <CODE>emacs_standard_keymap</CODE> is the default, and the examples in
 this manual assume that.
+</P><P>
 
-</P>
-<P>
-Since <CODE>readline</CODE> installs a set of default key bindings the first
+Since <CODE>readline()</CODE> installs a set of default key bindings the first
 time it is called, there is always the danger that a custom binding
-installed before the first call to <CODE>readline</CODE> will be overridden.
+installed before the first call to <CODE>readline()</CODE> will be overridden.
 An alternate mechanism is to install custom key bindings in an
 initialization function assigned to the <CODE>rl_startup_hook</CODE> variable
-(see section <A HREF="readline.html#SEC28">Readline Variables</A>).
+(see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>).
+</P><P>
 
-</P>
-<P>
 These functions manage key bindings.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX218"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, Function *function)</I>
-<DD><A NAME="IDX129"></A>
-Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
+<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I>
+<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
 Returns non-zero in the case of an invalid <VAR>key</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX219"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, Function *function, Keymap map)</I>
-<DD><A NAME="IDX130"></A>
-Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>.  Returns non-zero in the case
+<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I>
+<DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>.  Returns non-zero in the case
 of an invalid <VAR>key</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX220"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I>
-<DD><A NAME="IDX131"></A>
-Bind <VAR>key</VAR> to the null function in the currently active keymap.
+<DD>Bind <VAR>key</VAR> to the null function in the currently active keymap.
 Returns non-zero in case of error.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX221"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I>
-<DD><A NAME="IDX132"></A>
-Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
+<DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
 Returns non-zero in case of error.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX222"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(Function *function, Keymap map)</I>
-<DD><A NAME="IDX133"></A>
-Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
+<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
+<DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX223"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(char *command, Keymap map)</I>
-<DD><A NAME="IDX134"></A>
-Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
+<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I>
+<DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX224"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, char *keyseq, char *data, Keymap map)</I>
-<DD><A NAME="IDX135"></A>
-Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
+<DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
+<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
+<VAR>function</VAR>.  This makes new keymaps as
+necessary.  The initial keymap in which to do bindings is <VAR>map</VAR>.
+</DL>
+</P><P>
+
+<A NAME="IDX225"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I>
+<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
 pointer <VAR>data</VAR>.  <VAR>type</VAR> says what kind of data is pointed to by
 <VAR>data</VAR>; this can be a function (<CODE>ISFUNC</CODE>), a macro
 (<CODE>ISMACR</CODE>), or a keymap (<CODE>ISKMAP</CODE>).  This makes new keymaps as
 necessary.  The initial keymap in which to do bindings is <VAR>map</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX226"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I>
-<DD><A NAME="IDX136"></A>
-Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
+<DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
 perform any key bindings and variable assignments found
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX227"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(char *filename)</I>
-<DD><A NAME="IDX137"></A>
-Read keybindings and variable assignments from <VAR>filename</VAR>
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I>
+<DD>Read keybindings and variable assignments from <VAR>filename</VAR>
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC33" HREF="readline.html#TOC33">Associating Function Names and Bindings</A></H3>
-
+<A NAME="Associating Function Names and Bindings"></A>
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.4 Associating Function Names and Bindings </H3>
+<!--docid::SEC33::-->
 <P>
+
 These functions allow you to find out what keys invoke named functions
-and the functions invoked by a particular key sequence.
+and the functions invoked by a particular key sequence.  You may also
+associate a new function name with an arbitrary function.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX228"></A>
 <DL>
-<DT><U>Function:</U> Function * <B>rl_named_function</B> <I>(char *name)</I>
-<DD><A NAME="IDX138"></A>
-Return the function with name <VAR>name</VAR>.
+<DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I>
+<DD>Return the function with name <VAR>name</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX229"></A>
 <DL>
-<DT><U>Function:</U> Function * <B>rl_function_of_keyseq</B> <I>(char *keyseq, Keymap map, int *type)</I>
-<DD><A NAME="IDX139"></A>
-Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
-If <VAR>map</VAR> is NULL, the current keymap is used.  If <VAR>type</VAR> is
-not NULL, the type of the object is returned in it (one of <CODE>ISFUNC</CODE>,
-<CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>).
+<DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I>
+<DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
+If <VAR>map</VAR> is <CODE>NULL</CODE>, the current keymap is used.  If <VAR>type</VAR> is
+not <CODE>NULL</CODE>, the type of the object is returned in the <CODE>int</CODE> variable
+it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX230"></A>
 <DL>
-<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(Function *function)</I>
-<DD><A NAME="IDX140"></A>
-Return an array of strings representing the key sequences used to
+<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I>
+<DD>Return an array of strings representing the key sequences used to
 invoke <VAR>function</VAR> in the current keymap.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX231"></A>
 <DL>
-<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(Function *function, Keymap map)</I>
-<DD><A NAME="IDX141"></A>
-Return an array of strings representing the key sequences used to
+<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
+<DD>Return an array of strings representing the key sequences used to
 invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX232"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I>
-<DD><A NAME="IDX142"></A>
-Print the readline function names and the key sequences currently
+<DD>Print the readline function names and the key sequences currently
 bound to them to <CODE>rl_outstream</CODE>.  If <VAR>readable</VAR> is non-zero,
 the list is formatted in such a way that it can be made part of an
 <CODE>inputrc</CODE> file and re-read.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX233"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>()</I>
-<DD><A NAME="IDX143"></A>
-Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
+<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I>
+<DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX234"></A>
 <DL>
-<DT><U>Function:</U> char ** <B>rl_funmap_names</B> <I>()</I>
-<DD><A NAME="IDX144"></A>
-Return a NULL terminated array of known function names.  The array is
+<DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I>
+<DD>Return a NULL terminated array of known function names.  The array is
 sorted.  The array itself is allocated, but not the strings inside.  You
-should free () the array when you done, but not the pointrs.
+should <CODE>free()</CODE> the array when you are done, but not the pointers.
 </DL>
+</P><P>
 
-</P>
+<A NAME="IDX235"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I>
+<DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make
+<VAR>function</VAR> the function to be called when <VAR>name</VAR> is invoked.
+</DL>
+</P><P>
 
-
-<H3><A NAME="SEC34" HREF="readline.html#TOC34">Allowing Undoing</A></H3>
-
+<A NAME="Allowing Undoing"></A>
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.5 Allowing Undoing </H3>
+<!--docid::SEC34::-->
 <P>
+
 Supporting the undo command is a painless thing, and makes your
 functions much more useful.  It is certainly easy to try
-something if you know you can undo it.  I could use an undo function for
-the stock market.
+something if you know you can undo it.
+</P><P>
 
-</P>
-<P>
 If your function simply inserts text once, or deletes text once, and
-uses <CODE>rl_insert_text ()</CODE> or <CODE>rl_delete_text ()</CODE> to do it, then
+uses <CODE>rl_insert_text()</CODE> or <CODE>rl_delete_text()</CODE> to do it, then
 undoing is already done for you automatically.
+</P><P>
 
-</P>
-<P>
 If you do multiple insertions or multiple deletions, or any combination
 of these operations, you should group them together into one operation.
-This is done with <CODE>rl_begin_undo_group ()</CODE> and
-<CODE>rl_end_undo_group ()</CODE>.
+This is done with <CODE>rl_begin_undo_group()</CODE> and
+<CODE>rl_end_undo_group()</CODE>.
+</P><P>
 
-</P>
-<P>
 The types of events that can be undone are:
+</P><P>
 
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; 
+</FONT></pre></td></tr></table></P><P>
 
-<PRE>
-enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; 
-</PRE>
-
-<P>
 Notice that <CODE>UNDO_DELETE</CODE> means to insert some text, and
 <CODE>UNDO_INSERT</CODE> means to delete some text.  That is, the undo code
-tells undo what to undo, not how to undo it.  <CODE>UNDO_BEGIN</CODE> and
-<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group ()</CODE> and
-<CODE>rl_end_undo_group ()</CODE>.
+tells what to undo, not how to undo it.  <CODE>UNDO_BEGIN</CODE> and
+<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group()</CODE> and
+<CODE>rl_end_undo_group()</CODE>.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX236"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>()</I>
-<DD><A NAME="IDX145"></A>
-Begins saving undo information in a group construct.  The undo
-information usually comes from calls to <CODE>rl_insert_text ()</CODE> and
-<CODE>rl_delete_text ()</CODE>, but could be the result of calls to
-<CODE>rl_add_undo ()</CODE>.
+<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I>
+<DD>Begins saving undo information in a group construct.  The undo
+information usually comes from calls to <CODE>rl_insert_text()</CODE> and
+<CODE>rl_delete_text()</CODE>, but could be the result of calls to
+<CODE>rl_add_undo()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX237"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>()</I>
-<DD><A NAME="IDX146"></A>
-Closes the current undo group started with <CODE>rl_begin_undo_group
-()</CODE>.  There should be one call to <CODE>rl_end_undo_group ()</CODE>
-for each call to <CODE>rl_begin_undo_group ()</CODE>.
+<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I>
+<DD>Closes the current undo group started with <CODE>rl_begin_undo_group
+()</CODE>.  There should be one call to <CODE>rl_end_undo_group()</CODE>
+for each call to <CODE>rl_begin_undo_group()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX238"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I>
-<DD><A NAME="IDX147"></A>
-Remember how to undo an event (according to <VAR>what</VAR>).  The affected
+<DD>Remember how to undo an event (according to <VAR>what</VAR>).  The affected
 text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX239"></A>
 <DL>
-<DT><U>Function:</U> void <B>free_undo_list</B> <I>()</I>
-<DD><A NAME="IDX148"></A>
-Free the existing undo list.
+<DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I>
+<DD>Free the existing undo list.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX240"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_do_undo</B> <I>()</I>
-<DD><A NAME="IDX149"></A>
-Undo the first thing on the undo list.  Returns <CODE>0</CODE> if there was
+<DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I>
+<DD>Undo the first thing on the undo list.  Returns <CODE>0</CODE> if there was
 nothing to undo, non-zero if something was undone.
 </DL>
+</P><P>
 
-</P>
-<P>
 Finally, if you neither insert nor delete text, but directly modify the
-existing text (e.g., change its case), call <CODE>rl_modifying ()</CODE>
+existing text (e.g., change its case), call <CODE>rl_modifying()</CODE>
 once, just before you modify the text.  You must supply the indices of
 the text range that you are going to modify.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX241"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX150"></A>
-Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
+<DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
 single undo unit.  It is assumed that you will subsequently modify
 that text.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC35" HREF="readline.html#TOC35">Redisplay</A></H3>
-
+<A NAME="Redisplay"></A>
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.6 Redisplay </H3>
+<!--docid::SEC35::-->
 <P>
+
+<A NAME="IDX242"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_redisplay</B> <I>()</I>
-<DD><A NAME="IDX151"></A>
-Change what's displayed on the screen to reflect the current contents
+<DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I>
+<DD>Change what's displayed on the screen to reflect the current contents
 of <CODE>rl_line_buffer</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX243"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>()</I>
-<DD><A NAME="IDX152"></A>
-Force the line to be updated and redisplayed, whether or not
+<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I>
+<DD>Force the line to be updated and redisplayed, whether or not
 Readline thinks the screen display is correct.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX244"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>()</I>
-<DD><A NAME="IDX153"></A>
-Tell the update functions that we have moved onto a new (empty) line,
+<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I>
+<DD>Tell the update functions that we have moved onto a new (empty) line,
 usually after ouputting a newline.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX245"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>()</I>
-<DD><A NAME="IDX154"></A>
-Tell the update functions that we have moved onto a new line, with
+<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I>
+<DD>Tell the update functions that we have moved onto a new line, with
 <VAR>rl_prompt</VAR> already displayed.
 This could be used by applications that want to output the prompt string
 themselves, but still need Readline to know the prompt string length for
 redisplay.
 It should be used after setting <VAR>rl_already_prompted</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX246"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>()</I>
-<DD><A NAME="IDX155"></A>
-Reset the display state to a clean state and redisplay the current line
+<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I>
+<DD>Reset the display state to a clean state and redisplay the current line
 starting on a new line.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX247"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_message</B> <I>(va_alist)</I>
-<DD><A NAME="IDX156"></A>
-The arguments are a string as would be supplied to <CODE>printf</CODE>.  The
-resulting string is displayed in the <EM>echo area</EM>.  The echo area
+<DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I>
+<DD>Move the cursor to the start of the next screen line.
+</DL>
+</P><P>
+
+<A NAME="IDX248"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I>
+<DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>.
+If Readline has not been set to display meta characters directly, this
+will convert meta characters to a meta-prefixed key sequence.
+This is intended for use by applications which wish to do their own
+redisplay.
+</DL>
+</P><P>
+
+<A NAME="IDX249"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I>
+<DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>,
+possibly containing conversion specifications such as <SAMP>`%d'</SAMP>, and
+any additional arguments necessary to satisfy the conversion specifications.
+The resulting string is displayed in the <EM>echo area</EM>.  The echo area
 is also used to display numeric arguments and search strings.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX250"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_clear_message</B> <I>()</I>
-<DD><A NAME="IDX157"></A>
-Clear the message in the echo area.
+<DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I>
+<DD>Clear the message in the echo area.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX251"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>()</I>
-<DD><A NAME="IDX158"></A>
-Save the local Readline prompt display state in preparation for
-displaying a new message in the message area with <CODE>rl_message</CODE>.
+<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I>
+<DD>Save the local Readline prompt display state in preparation for
+displaying a new message in the message area with <CODE>rl_message()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX252"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>()</I>
-<DD><A NAME="IDX159"></A>
-Restore the local Readline prompt display state saved by the most
+<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I>
+<DD>Restore the local Readline prompt display state saved by the most
 recent call to <CODE>rl_save_prompt</CODE>.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC36" HREF="readline.html#TOC36">Modifying Text</A></H3>
-
-<P>
+<A NAME="IDX253"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(char *text)</I>
-<DD><A NAME="IDX160"></A>
-Insert <VAR>text</VAR> into the line at the current cursor position.
+<DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I>
+<DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the
+local Readline prompt redisplay variables.
+This function is called by <CODE>readline()</CODE>.  It may also be called to
+expand the primary prompt if the <CODE>rl_on_new_line_with_prompt()</CODE>
+function or <CODE>rl_already_prompted</CODE> variable is used.
+It returns the number of visible characters on the last line of the
+(possibly multi-line) prompt.
 </DL>
+</P><P>
 
-</P>
+<A NAME="IDX254"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I>
+<DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay.  This calls
+<CODE>rl_expand_prompt()</CODE> to expand the prompt and sets <CODE>rl_prompt</CODE>
+to the result.
+</DL>
+</P><P>
+
+<A NAME="Modifying Text"></A>
+<HR SIZE="6">
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.7 Modifying Text </H3>
+<!--docid::SEC36::-->
 <P>
+
+<A NAME="IDX255"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I>
+<DD>Insert <VAR>text</VAR> into the line at the current cursor position.
+Returns the number of characters inserted.
+</DL>
+</P><P>
+
+<A NAME="IDX256"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX161"></A>
-Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
+<DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
+Returns the number of characters deleted.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX257"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX162"></A>
-Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
+<DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
 the current line.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX258"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX163"></A>
-Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
+<DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
 to the kill ring, appending or prepending to the last kill if the
 last command was a kill command.  The text is deleted.
 If <VAR>start</VAR> is less than <VAR>end</VAR>,
 the text is appended, otherwise prepended.  If the last command was
 not a kill, a new kill ring slot is used.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC37" HREF="readline.html#TOC37">Utility Functions</A></H3>
-
-<P>
+<A NAME="IDX259"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_read_key</B> <I>()</I>
-<DD><A NAME="IDX164"></A>
-Return the next character available.  This handles input inserted into
-the input stream via <VAR>pending input</VAR> (see section <A HREF="readline.html#SEC28">Readline Variables</A>)
-and <CODE>rl_stuff_char ()</CODE>, macros, and characters read from the keyboard.
+<DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I>
+<DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked
+by a key bound to a macro.  Not especially useful; use
+<CODE>rl_insert_text()</CODE> instead.
 </DL>
+</P><P>
 
-</P>
+<A NAME="Character Input"></A>
+<HR SIZE="6">
+<A NAME="SEC37"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.8 Character Input </H3>
+<!--docid::SEC37::-->
 <P>
+
+<A NAME="IDX260"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *)</I>
-<DD><A NAME="IDX165"></A>
-Return the next character available from the keyboard.
+<DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I>
+<DD>Return the next character available from Readline's current input stream.
+This handles input inserted into
+the input stream via <VAR>rl_pending_input</VAR> (see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>)
+and <CODE>rl_stuff_char()</CODE>, macros, and characters read from the keyboard.
+While waiting for input, this function will call any function assigned to
+the <CODE>rl_event_hook</CODE> variable.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX261"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I>
+<DD>Return the next character available from <VAR>stream</VAR>, which is assumed to
+be the keyboard.
+</DL>
+</P><P>
+
+<A NAME="IDX262"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I>
-<DD><A NAME="IDX166"></A>
-Insert <VAR>c</VAR> into the Readline input stream.  It will be "read"
+<DD>Insert <VAR>c</VAR> into the Readline input stream.  It will be "read"
 before Readline attempts to read characters from the terminal with
-<CODE>rl_read_key ()</CODE>.
+<CODE>rl_read_key()</CODE>.  Up to 512 characters may be pushed back.
+<CODE>rl_stuff_char</CODE> returns 1 if the character was successfully inserted;
+0 otherwise.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX263"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I>
-<DD><A NAME="IDX167"></A>
-Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
-characters, possibly reallocating it if necessary.
+<DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I>
+<DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE>
+is called.  This sets <VAR>rl_pending_input</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX264"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_initialize</B> <I>()</I>
-<DD><A NAME="IDX168"></A>
-Initialize or re-initialize Readline's internal state.
+<DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I>
+<DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any
+previous call to <CODE>rl_execute_next()</CODE>.  This works only if the
+pending input has not already been read with <CODE>rl_read_key()</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX265"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(char *terminal_name)</I>
-<DD><A NAME="IDX169"></A>
-Reinitialize Readline's idea of the terminal settings using
+<DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I>
+<DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will
+wait for <VAR>u</VAR> microseconds for input before calling any function
+assigned to <CODE>rl_event_hook</CODE>.  The default waiting period is
+one-tenth of a second.  Returns the old timeout value.
+</DL>
+</P><P>
+
+<A NAME="Terminal Management"></A>
+<HR SIZE="6">
+<A NAME="SEC38"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.9 Terminal Management </H3>
+<!--docid::SEC38::-->
+<P>
+
+<A NAME="IDX266"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I>
+<DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE>
+can read a single character at a time from the keyboard.
+The <VAR>meta_flag</VAR> argument should be non-zero if Readline should
+read eight-bit input.
+</DL>
+</P><P>
+
+<A NAME="IDX267"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I>
+<DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in
+the state in which it was before the most recent call to
+<CODE>rl_prep_terminal()</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX268"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I>
+<DD>Read the operating system's terminal editing characters (as would be displayed
+by <CODE>stty</CODE>) to their Readline equivalents.  The bindings are performed
+in <VAR>kmap</VAR>.
+</DL>
+</P><P>
+
+<A NAME="IDX269"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I>
+<DD>Reinitialize Readline's idea of the terminal settings using
 <VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>).
-If <VAR>terminal_name</VAR> is NULL, the value of the <CODE>TERM</CODE>
+If <VAR>terminal_name</VAR> is <CODE>NULL</CODE>, the value of the <CODE>TERM</CODE>
 environment variable is used.
 </DL>
+</P><P>
 
-</P>
+<A NAME="Utility Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC39"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.10 Utility Functions </H3>
+<!--docid::SEC39::-->
 <P>
+
+<A NAME="IDX270"></A>
 <DL>
-<DT><U>Function:</U> int <B>alphabetic</B> <I>(int c)</I>
-<DD><A NAME="IDX170"></A>
-Return 1 if <VAR>c</VAR> is an alphabetic character.
+<DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I>
+<DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>.
+The point and mark are preserved, if possible.
+If <VAR>clear_undo</VAR> is non-zero, the undo list associated with the
+current line is cleared.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX271"></A>
 <DL>
-<DT><U>Function:</U> int <B>numeric</B> <I>(int c)</I>
-<DD><A NAME="IDX171"></A>
-Return 1 if <VAR>c</VAR> is a numeric character.
+<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I>
+<DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
+characters, possibly reallocating it if necessary.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX272"></A>
 <DL>
-<DT><U>Function:</U> int <B>ding</B> <I>()</I>
-<DD><A NAME="IDX172"></A>
-Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
+<DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I>
+<DD>Initialize or re-initialize Readline's internal state.
+It's not strictly necessary to call this; <CODE>readline()</CODE> calls it before
+reading any input.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX273"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I>
+<DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX274"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I>
+<DD>Return 1 if <VAR>c</VAR> is an alphabetic character.
+</DL>
+</P><P>
+
+<A NAME="IDX275"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I>
-<DD><A NAME="IDX173"></A>
-A convenience function for displaying a list of strings in
+<DD>A convenience function for displaying a list of strings in
 columnar format on Readline's output stream.  <CODE>matches</CODE> is the list
 of strings, in argv format, such as a list of completion matches.
 <CODE>len</CODE> is the number of strings in <CODE>matches</CODE>, and <CODE>max</CODE>
 is the length of the longest string in <CODE>matches</CODE>.  This function uses
 the setting of <CODE>print-completions-horizontally</CODE> to select how the
-matches are displayed (see section <A HREF="readline.html#SEC10">Readline Init File Syntax</A>).
+matches are displayed (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>).
 </DL>
+</P><P>
 
-</P>
-<P>
-The following are implemented as macros, defined in <CODE>chartypes.h</CODE>.
+The following are implemented as macros, defined in <CODE>chardefs.h</CODE>.
+Applications should refrain from using them.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX276"></A>
 <DL>
-<DT><U>Function:</U> int <B>uppercase_p</B> <I>(int c)</I>
-<DD><A NAME="IDX174"></A>
-Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
+<DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I>
+<DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX277"></A>
 <DL>
-<DT><U>Function:</U> int <B>lowercase_p</B> <I>(int c)</I>
-<DD><A NAME="IDX175"></A>
-Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
+<DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I>
+<DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX278"></A>
 <DL>
-<DT><U>Function:</U> int <B>digit_p</B> <I>(int c)</I>
-<DD><A NAME="IDX176"></A>
-Return 1 if <VAR>c</VAR> is a numeric character.
+<DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I>
+<DD>Return 1 if <VAR>c</VAR> is a numeric character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX279"></A>
 <DL>
-<DT><U>Function:</U> int <B>to_upper</B> <I>(int c)</I>
-<DD><A NAME="IDX177"></A>
-If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
+<DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I>
+<DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
 uppercase character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX280"></A>
 <DL>
-<DT><U>Function:</U> int <B>to_lower</B> <I>(int c)</I>
-<DD><A NAME="IDX178"></A>
-If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
+<DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I>
+<DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
 lowercase character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX281"></A>
 <DL>
-<DT><U>Function:</U> int <B>digit_value</B> <I>(int c)</I>
-<DD><A NAME="IDX179"></A>
-If <VAR>c</VAR> is a number, return the value it represents.
+<DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I>
+<DD>If <VAR>c</VAR> is a number, return the value it represents.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC38" HREF="readline.html#TOC38">Alternate Interface</A></H3>
-
+<A NAME="Miscellaneous Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC40"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.11 Miscellaneous Functions </H3>
+<!--docid::SEC40::-->
 <P>
+
+<A NAME="IDX282"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I>
+<DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>.
+The binding is performed in <VAR>map</VAR>.  When <VAR>keyseq</VAR> is invoked, the
+<VAR>macro</VAR> will be inserted into the line.  This function is deprecated;
+use <CODE>rl_generic_bind()</CODE> instead.
+</DL>
+</P><P>
+
+<A NAME="IDX283"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I>
+<DD>Print the key sequences bound to macros and their values, using
+the current keymap, to <CODE>rl_outstream</CODE>.
+If <VAR>readable</VAR> is non-zero, the list is formatted in such a way
+that it can be made part of an <CODE>inputrc</CODE> file and re-read.
+</DL>
+</P><P>
+
+<A NAME="IDX284"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I>
+<DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>.
+This behaves as if the readline command
+<SAMP>`set <VAR>variable</VAR> <VAR>value</VAR>'</SAMP> had been executed in an <CODE>inputrc</CODE>
+file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>).
+</DL>
+</P><P>
+
+<A NAME="IDX285"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I>
+<DD>Print the readline variable names and their current values
+to <CODE>rl_outstream</CODE>.
+If <VAR>readable</VAR> is non-zero, the list is formatted in such a way
+that it can be made part of an <CODE>inputrc</CODE> file and re-read.
+</DL>
+</P><P>
+
+<A NAME="IDX286"></A>
+<DL>
+<DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I>
+<DD>Set the time interval (in microseconds) that Readline waits when showing
+a balancing character when <CODE>blink-matching-paren</CODE> has been enabled.
+</DL>
+</P><P>
+
+<A NAME="IDX287"></A>
+<DL>
+<DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I>
+<DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>.
+Readline fetches the termcap entry for the current terminal name and
+uses those capabilities to move around the screen line and perform other
+terminal-specific operations, like erasing a line.  Readline does not
+use all of a terminal's capabilities, and this function will return
+values for only those capabilities Readline uses.
+</DL>
+</P><P>
+
+<A NAME="Alternate Interface"></A>
+<HR SIZE="6">
+<A NAME="SEC41"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.12 Alternate Interface </H3>
+<!--docid::SEC41::-->
+<P>
+
 An alternate interface is available to plain <CODE>readline()</CODE>.  Some
 applications need to interleave keyboard I/O with file, device, or
 window system I/O, typically by using a main loop to <CODE>select()</CODE>
 on various file descriptors.  To accomodate this need, readline can
 also be invoked as a `callback' function from an event loop.  There
 are functions available to make this easy.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX288"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(char *prompt, Vfunction *lhandler)</I>
-<DD><A NAME="IDX180"></A>
-Set up the terminal for readline I/O and display the initial
+<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I>
+<DD>Set up the terminal for readline I/O and display the initial
 expanded value of <VAR>prompt</VAR>.  Save the value of <VAR>lhandler</VAR> to
-use as a callback when a complete line of input has been entered.
+use as a function to call when a complete line of input has been entered.
+The function takes the text of the line as an argument.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX289"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>()</I>
-<DD><A NAME="IDX181"></A>
-Whenever an application determines that keyboard input is available, it
+<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I>
+<DD>Whenever an application determines that keyboard input is available, it
 should call <CODE>rl_callback_read_char()</CODE>, which will read the next
-character from the current input source.  If that character completes the
-line, <CODE>rl_callback_read_char</CODE> will invoke the <VAR>lhandler</VAR>
-function saved by <CODE>rl_callback_handler_install</CODE> to process the
-line.  <CODE>EOF</CODE> is  indicated by calling <VAR>lhandler</VAR> with a
+character from the current input source.
+If that character completes the line, <CODE>rl_callback_read_char</CODE> will
+invoke the <VAR>lhandler</VAR> function saved by <CODE>rl_callback_handler_install</CODE>
+to process the line.
+Before calling the <VAR>lhandler</VAR> function, the terminal settings are
+reset to the values they had before calling
+<CODE>rl_callback_handler_install</CODE>.
+If the <VAR>lhandler</VAR> function returns,
+the terminal settings are modified for Readline's use again.
+<CODE>EOF</CODE> is  indicated by calling <VAR>lhandler</VAR> with a
 <CODE>NULL</CODE> line.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX290"></A>
 <DL>
-<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>()</I>
-<DD><A NAME="IDX182"></A>
-Restore the terminal to its initial state and remove the line handler.
+<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I>
+<DD>Restore the terminal to its initial state and remove the line handler.
 This may be called from within a callback as well as independently.
+If the <VAR>lhandler</VAR> installed by <CODE>rl_callback_handler_install</CODE>
+does not exit the program, either this function or the function referred
+to by the value of <CODE>rl_deprep_term_function</CODE> should be called before
+the program exits to reset the terminal settings.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC39" HREF="readline.html#TOC39">An Example</A></H3>
-
+<A NAME="A Readline Example"></A>
+<HR SIZE="6">
+<A NAME="SEC42"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.13 A Readline Example </H3>
+<!--docid::SEC42::-->
 <P>
+
 Here is a function which changes lowercase characters to their uppercase
 equivalents, and uppercase characters to lowercase.  If
 this function was bound to <SAMP>`M-c'</SAMP>, then typing <SAMP>`M-c'</SAMP> would
 change the case of the character under point.  Typing <SAMP>`M-1 0 M-c'</SAMP>
 would change the case of the following 10 characters, leaving the cursor on
 the last character changed.
+</P><P>
 
-</P>
-
-<PRE>
-/* Invert the case of the COUNT following characters. */
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/* Invert the case of the COUNT following characters. */
 int
 invert_case_line (count, key)
      int count, key;
@@ -2885,209 +3831,254 @@
       end = temp;
     }
 
-  /* Tell readline that we are modifying the line, so it will save
-     the undo information. */
+  /* Tell readline that we are modifying the line,
+     so it will save the undo information. */
   rl_modifying (start, end);
 
   for (i = start; i != end; i++)
     {
-      if (uppercase_p (rl_line_buffer[i]))
-        rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
-      else if (lowercase_p (rl_line_buffer[i]))
-        rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
+      if (_rl_uppercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
+      else if (_rl_lowercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
     }
   /* Move point to on top of the last character changed. */
   rl_point = (direction == 1) ? end - 1 : start;
   return (0);
 }
-</PRE>
+</pre></td></tr></table></P><P>
 
-
-
-<H2><A NAME="SEC40" HREF="readline.html#TOC40">Readline Signal Handling</A></H2>
-
+<A NAME="Readline Signal Handling"></A>
+<HR SIZE="6">
+<A NAME="SEC43"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 Readline Signal Handling </H2>
+<!--docid::SEC43::-->
 <P>
+
 Signals are asynchronous events sent to a process by the Unix kernel,
 sometimes on behalf of another process.  They are intended to indicate
-exceptional events, like a user pressing the interrupt key on his
-terminal, or a network connection being broken.  There is a class of
-signals that can be sent to the process currently reading input from
-the keyboard.  Since Readline changes the terminal attributes when it
-is called, it needs to perform special processing when a signal is
-received to restore the terminal to a sane state, or provide application
-writers with functions to do so manually.
+exceptional events, like a user pressing the interrupt key on his terminal,
+or a network connection being broken.  There is a class of signals that can
+be sent to the process currently reading input from the keyboard.  Since
+Readline changes the terminal attributes when it is called, it needs to
+perform special processing when such a signal is received in order to
+restore the terminal to a sane state, or provide application writers with
+functions to do so manually. 
+</P><P>
 
-</P>
-<P>
 Readline contains an internal signal handler that is installed for a
 number of signals (<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>,
 <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>).
 When one of these signals is received, the signal handler
 will reset the terminal attributes to those that were in effect before
-<CODE>readline ()</CODE> was called, reset the signal handling to what it was
-before <CODE>readline ()</CODE> was called, and resend the signal to the calling
+<CODE>readline()</CODE> was called, reset the signal handling to what it was
+before <CODE>readline()</CODE> was called, and resend the signal to the calling
 application.
 If and when the calling application's signal handler returns, Readline
 will reinitialize the terminal and continue to accept input.
 When a <CODE>SIGINT</CODE> is received, the Readline signal handler performs
 some additional work, which will cause any partially-entered line to be
-aborted (see the description of <CODE>rl_free_line_state ()</CODE>).
+aborted (see the description of <CODE>rl_free_line_state()</CODE> below).
+</P><P>
 
-</P>
-<P>
 There is an additional Readline signal handler, for <CODE>SIGWINCH</CODE>, which
 the kernel sends to a process whenever the terminal's size changes (for
 example, if a user resizes an <CODE>xterm</CODE>).  The Readline <CODE>SIGWINCH</CODE>
-handler updates Readline's internal screen size state, and then calls any
-<CODE>SIGWINCH</CODE> signal handler the calling application has installed. 
+handler updates Readline's internal screen size information, and then calls
+any <CODE>SIGWINCH</CODE> signal handler the calling application has installed. 
 Readline calls the application's <CODE>SIGWINCH</CODE> signal handler without
 resetting the terminal to its original state.  If the application's signal
 handler does more than update its idea of the terminal size and return (for
 example, a <CODE>longjmp</CODE> back to a main processing loop), it <EM>must</EM>
-call <CODE>rl_cleanup_after_signal ()</CODE> (described below), to restore the
+call <CODE>rl_cleanup_after_signal()</CODE> (described below), to restore the
 terminal state. 
+</P><P>
 
-</P>
-<P>
 Readline provides two variables that allow application writers to
 control whether or not it will catch certain signals and act on them
 when they are received.  It is important that applications change the
-values of these variables only when calling <CODE>readline ()</CODE>, not in
+values of these variables only when calling <CODE>readline()</CODE>, not in
 a signal handler, so Readline's internal signal state is not corrupted.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX291"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_catch_signals</B>
-<DD><A NAME="IDX183"></A>
-If this variable is non-zero, Readline will install signal handlers for
+<DD>If this variable is non-zero, Readline will install signal handlers for
 <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>,
 <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>.
+</P><P>
 
-</P>
-<P>
 The default value of <CODE>rl_catch_signals</CODE> is 1.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX292"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_catch_sigwinch</B>
-<DD><A NAME="IDX184"></A>
-If this variable is non-zero, Readline will install a signal handler for
+<DD>If this variable is non-zero, Readline will install a signal handler for
 <CODE>SIGWINCH</CODE>.
+</P><P>
 
-</P>
-<P>
 The default value of <CODE>rl_catch_sigwinch</CODE> is 1.
 </DL>
+</P><P>
 
-</P>
-<P>
 If an application does not wish to have Readline catch any signals, or
 to handle signals other than those Readline catches (<CODE>SIGHUP</CODE>,
 for example), 
 Readline provides convenience functions to do the necessary terminal
 and internal state cleanup upon receipt of a signal.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX293"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I>
-<DD><A NAME="IDX185"></A>
-This function will reset the state of the terminal to what it was before
-<CODE>readline ()</CODE> was called, and remove the Readline signal handlers for
+<DD>This function will reset the state of the terminal to what it was before
+<CODE>readline()</CODE> was called, and remove the Readline signal handlers for
 all signals, depending on the values of <CODE>rl_catch_signals</CODE> and
 <CODE>rl_catch_sigwinch</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX294"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I>
-<DD><A NAME="IDX186"></A>
-This will free any partial state associated with the current input line
+<DD>This will free any partial state associated with the current input line
 (undo information, any partial history entry, any partially-entered
 keyboard macro, and any partially-entered numeric argument).  This
-should be called before <CODE>rl_cleanup_after_signal ()</CODE>.  The
+should be called before <CODE>rl_cleanup_after_signal()</CODE>.  The
 Readline signal handler for <CODE>SIGINT</CODE> calls this to abort the
 current input line.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX295"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I>
-<DD><A NAME="IDX187"></A>
-This will reinitialize the terminal and reinstall any Readline signal
+<DD>This will reinitialize the terminal and reinstall any Readline signal
 handlers, depending on the values of <CODE>rl_catch_signals</CODE> and
 <CODE>rl_catch_sigwinch</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
 If an application does not wish Readline to catch <CODE>SIGWINCH</CODE>, it may
-call <CODE>rl_resize_terminal ()</CODE> to force Readline to update its idea of
-the terminal size when a <CODE>SIGWINCH</CODE> is received.
+call <CODE>rl_resize_terminal()</CODE> or <CODE>rl_set_screen_size()</CODE> to force
+Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE>
+is received.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX296"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I>
-<DD><A NAME="IDX188"></A>
-Update Readline's internal screen size.
+<DD>Update Readline's internal screen size by reading values from the kernel.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX297"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I>
+<DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and
+<VAR>cols</VAR> columns.
+</DL>
+</P><P>
+
+If an application does not want to install a <CODE>SIGWINCH</CODE> handler, but
+is still interested in the screen dimensions, Readline's idea of the screen
+size may be queried.
+</P><P>
+
+<A NAME="IDX298"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I>
+<DD>Return Readline's idea of the terminal's size in the
+variables pointed to by the arguments.
+</DL>
+</P><P>
+
 The following functions install and remove Readline's signal handlers.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX299"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I>
-<DD><A NAME="IDX189"></A>
-Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
+<DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
 <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>,
 <CODE>SIGTTOU</CODE>, and <CODE>SIGWINCH</CODE>, depending on the values of
 <CODE>rl_catch_signals</CODE> and <CODE>rl_catch_sigwinch</CODE>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX300"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I>
-<DD><A NAME="IDX190"></A>
-Remove all of the Readline signal handlers installed by
-<CODE>rl_set_signals ()</CODE>.
+<DD>Remove all of the Readline signal handlers installed by
+<CODE>rl_set_signals()</CODE>.
 </DL>
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC41" HREF="readline.html#TOC41">Custom Completers</A></H2>
-
+<A NAME="Custom Completers"></A>
+<HR SIZE="6">
+<A NAME="SEC44"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.6 Custom Completers </H2>
+<!--docid::SEC44::-->
 <P>
+
 Typically, a program that reads commands from the user has a way of
 disambiguating commands and data.  If your program is one of these, then
 it can provide completion for commands, data, or both.
 The following sections describe how your program and Readline
 cooperate to provide this service.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC42">How Completing Works</A>: The logic used to do completion.
-<LI><A HREF="readline.html#SEC43">Completion Functions</A>: Functions provided by Readline.
-<LI><A HREF="readline.html#SEC44">Completion Variables</A>: Variables which control completion.
-<LI><A HREF="readline.html#SEC45">A Short Completion Example</A>: An example of writing completer subroutines.
-</UL>
-
-
-
-<H3><A NAME="SEC42" HREF="readline.html#TOC42">How Completing Works</A></H3>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The logic used to do completion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions provided by Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables which control completion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example of writing completer subroutines.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="How Completing Works"></A>
+<HR SIZE="6">
+<A NAME="SEC45"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.1 How Completing Works </H3>
+<!--docid::SEC45::-->
+<P>
+
 In order to complete some text, the full list of possible completions
 must be available.  That is, it is not possible to accurately
 expand a partial word without knowing all of the possible words
@@ -3096,204 +4087,233 @@
 completion functions:  filename and username.  For completing other types
 of text, you must write your own completion function.  This section
 describes exactly what such functions must do, and provides an example.
+</P><P>
 
-</P>
-<P>
 There are three major functions used to perform completion:
-
-</P>
+</P><P>
 
 <OL>
 <LI>
-
-The user-interface function <CODE>rl_complete ()</CODE>.  This function is
-called with the same arguments as other Readline
-functions intended for interactive use:  <VAR>count</VAR> and
-<VAR>invoking_key</VAR>.  It isolates the word to be completed and calls
-<CODE>completion_matches ()</CODE> to generate a list of possible completions.
+The user-interface function <CODE>rl_complete()</CODE>.  This function is
+called with the same arguments as other bindable Readline functions:
+<VAR>count</VAR> and <VAR>invoking_key</VAR>.
+It isolates the word to be completed and calls
+<CODE>rl_completion_matches()</CODE> to generate a list of possible completions.
 It then either lists the possible completions, inserts the possible
 completions, or actually performs the
 completion, depending on which behavior is desired.
+<P>
 
 <LI>
-
-The internal function <CODE>completion_matches ()</CODE> uses your
-<EM>generator</EM> function to generate the list of possible matches, and
-then returns the array of these matches.  You should place the address
-of your generator function in <CODE>rl_completion_entry_function</CODE>.
+The internal function <CODE>rl_completion_matches()</CODE> uses an
+application-supplied <EM>generator</EM> function to generate the list of
+possible matches, and then returns the array of these matches.
+The caller should place the address of its generator function in
+<CODE>rl_completion_entry_function</CODE>.
+<P>
 
 <LI>
-
 The generator function is called repeatedly from
-<CODE>completion_matches ()</CODE>, returning a string each time.  The
+<CODE>rl_completion_matches()</CODE>, returning a string each time.  The
 arguments to the generator function are <VAR>text</VAR> and <VAR>state</VAR>.
 <VAR>text</VAR> is the partial word to be completed.  <VAR>state</VAR> is zero the
 first time the function is called, allowing the generator to perform
 any necessary initialization, and a positive non-zero integer for
-each subsequent call.  When the generator function returns
-<CODE>(char *)NULL</CODE> this signals <CODE>completion_matches ()</CODE> that there are
+each subsequent call.  The generator function returns
+<CODE>(char *)NULL</CODE> to inform <CODE>rl_completion_matches()</CODE> that there are
 no more possibilities left.  Usually the generator function computes the
 list of possible completions when <VAR>state</VAR> is zero, and returns them
 one at a time on subsequent calls.  Each string the generator function
 returns as a match must be allocated with <CODE>malloc()</CODE>; Readline
 frees the strings when it has finished with them.
+<P>
 
 </OL>
-
 <P>
+
+<A NAME="IDX301"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
-<DD><A NAME="IDX191"></A>
-Complete the word at or before point.  You have supplied the function
+<DD>Complete the word at or before point.  You have supplied the function
 that does the initial simple matching selection algorithm (see
-<CODE>completion_matches ()</CODE>).  The default is to do filename completion.
+<CODE>rl_completion_matches()</CODE>).  The default is to do filename completion.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX302"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B>
-<DD><A NAME="IDX192"></A>
-This is a pointer to the generator function for <CODE>completion_matches
-()</CODE>.  If the value of <CODE>rl_completion_entry_function</CODE> is
-<CODE>(Function *)NULL</CODE> then the default filename generator function,
-<CODE>filename_completion_function ()</CODE>, is used.
+<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
+<DD>This is a pointer to the generator function for
+<CODE>rl_completion_matches()</CODE>.
+If the value of <CODE>rl_completion_entry_function</CODE> is
+<CODE>NULL</CODE> then the default filename generator
+function, <CODE>rl_filename_completion_function()</CODE>, is used.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC43" HREF="readline.html#TOC43">Completion Functions</A></H3>
-
+<A NAME="Completion Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC46"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.2 Completion Functions </H3>
+<!--docid::SEC46::-->
 <P>
+
 Here is the complete list of callable completion functions present in
 Readline.
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX303"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I>
-<DD><A NAME="IDX193"></A>
-Complete the word at or before point.  <VAR>what_to_do</VAR> says what to do
+<DD>Complete the word at or before point.  <VAR>what_to_do</VAR> says what to do
 with the completion.  A value of <SAMP>`?'</SAMP> means list the possible
 completions.  <SAMP>`TAB'</SAMP> means do standard completion.  <SAMP>`*'</SAMP> means
 insert all of the possible completions.  <SAMP>`!'</SAMP> means to display
 all of the possible completions, if there is more than one, as well as
 performing partial completion.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX304"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
-<DD><A NAME="IDX194"></A>
-Complete the word at or before point.  You have supplied the function
+<DD>Complete the word at or before point.  You have supplied the function
 that does the initial simple matching selection algorithm (see
-<CODE>completion_matches ()</CODE> and <CODE>rl_completion_entry_function</CODE>).
+<CODE>rl_completion_matches()</CODE> and <CODE>rl_completion_entry_function</CODE>).
 The default is to do filename
-completion.  This calls <CODE>rl_complete_internal ()</CODE> with an
+completion.  This calls <CODE>rl_complete_internal()</CODE> with an
 argument depending on <VAR>invoking_key</VAR>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX305"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key))</I>
-<DD><A NAME="IDX195"></A>
-List the possible completions.  See description of <CODE>rl_complete
-()</CODE>.  This calls <CODE>rl_complete_internal ()</CODE> with an argument of
+<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I>
+<DD>List the possible completions.  See description of <CODE>rl_complete
+()</CODE>.  This calls <CODE>rl_complete_internal()</CODE> with an argument of
 <SAMP>`?'</SAMP>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX306"></A>
 <DL>
-<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key))</I>
-<DD><A NAME="IDX196"></A>
-Insert the list of possible completions into the line, deleting the
-partially-completed word.  See description of <CODE>rl_complete ()</CODE>.
-This calls <CODE>rl_complete_internal ()</CODE> with an argument of <SAMP>`*'</SAMP>.
+<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I>
+<DD>Insert the list of possible completions into the line, deleting the
+partially-completed word.  See description of <CODE>rl_complete()</CODE>.
+This calls <CODE>rl_complete_internal()</CODE> with an argument of <SAMP>`*'</SAMP>.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX307"></A>
 <DL>
-<DT><U>Function:</U> char ** <B>completion_matches</B> <I>(char *text, CPFunction *entry_func)</I>
-<DD><A NAME="IDX197"></A>
-Returns an array of <CODE>(char *)</CODE> which is a list of completions for
-<VAR>text</VAR>.  If there are no completions, returns <CODE>(char **)NULL</CODE>.
+<DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I>
+<DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE>
+depending on whether <VAR>cfunc</VAR> was called twice in succession and
+the value of the <CODE>show-all-if-ambiguous</CODE> variable.
+Application-specific completion functions may use this function to present
+the same interface as <CODE>rl_complete()</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX308"></A>
+<DL>
+<DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I>
+<DD>Returns an array of strings which is a list of completions for
+<VAR>text</VAR>.  If there are no completions, returns <CODE>NULL</CODE>.
 The first entry in the returned array is the substitution for <VAR>text</VAR>.
 The remaining entries are the possible completions.  The array is
 terminated with a <CODE>NULL</CODE> pointer.
+</P><P>
 
-</P>
-<P>
 <VAR>entry_func</VAR> is a function of two args, and returns a
-<CODE>(char *)</CODE>.  The first argument is <VAR>text</VAR>.  The second is a
+<CODE>char *</CODE>.  The first argument is <VAR>text</VAR>.  The second is a
 state argument; it is zero on the first call, and non-zero on subsequent
 calls.  <VAR>entry_func</VAR> returns a <CODE>NULL</CODE>  pointer to the caller
 when there are no more matches.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX309"></A>
 <DL>
-<DT><U>Function:</U> char * <B>filename_completion_function</B> <I>(char *text, int state)</I>
-<DD><A NAME="IDX198"></A>
-A generator function for filename completion in the general case.  Note
-that completion in Bash is a little different because of all
-the pathnames that must be followed when looking up completions for a
-command.  The Bash source is a useful reference for writing custom
-completion functions.
+<DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I>
+<DD>A generator function for filename completion in the general case.
+<VAR>text</VAR> is a partial filename.
+The Bash source is a useful reference for writing custom
+completion functions (the Bash completion functions call this and other
+Readline functions).
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX310"></A>
 <DL>
-<DT><U>Function:</U> char * <B>username_completion_function</B> <I>(char *text, int state)</I>
-<DD><A NAME="IDX199"></A>
-A completion generator for usernames.  <VAR>text</VAR> contains a partial
+<DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I>
+<DD>A completion generator for usernames.  <VAR>text</VAR> contains a partial
 username preceded by a random character (usually <SAMP>`~'</SAMP>).  As with all
 completion generators, <VAR>state</VAR> is zero on the first call and non-zero
 for subsequent calls.
 </DL>
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC44" HREF="readline.html#TOC44">Completion Variables</A></H3>
-
+<A NAME="Completion Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC47"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.3 Completion Variables </H3>
+<!--docid::SEC47::-->
 <P>
+
+<A NAME="IDX311"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B>
-<DD><A NAME="IDX200"></A>
-A pointer to the generator function for <CODE>completion_matches ()</CODE>.
-<CODE>NULL</CODE> means to use <CODE>filename_completion_function ()</CODE>, the default
+<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
+<DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>.
+<CODE>NULL</CODE> means to use <CODE>rl_filename_completion_function()</CODE>, the default
 filename completer.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX312"></A>
 <DL>
-<DT><U>Variable:</U> CPPFunction * <B>rl_attempted_completion_function</B>
-<DD><A NAME="IDX201"></A>
-A pointer to an alternative function to create matches.
+<DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B>
+<DD>A pointer to an alternative function to create matches.
 The function is called with <VAR>text</VAR>, <VAR>start</VAR>, and <VAR>end</VAR>.
-<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> saying
-what the boundaries of <VAR>text</VAR> are.  If this function exists and
-returns <CODE>NULL</CODE>, or if this variable is set to <CODE>NULL</CODE>, then
-<CODE>rl_complete ()</CODE> will call the value of
+<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> defining
+the boundaries of <VAR>text</VAR>, which is a character string.
+If this function exists and returns <CODE>NULL</CODE>, or if this variable is
+set to <CODE>NULL</CODE>, then <CODE>rl_complete()</CODE> will call the value of
 <CODE>rl_completion_entry_function</CODE> to generate matches, otherwise the
 array of strings returned will be used.
+If this function sets the <CODE>rl_attempted_completion_over</CODE>
+variable to a non-zero value, Readline will not perform its default
+completion even if this function returns no matches.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX313"></A>
 <DL>
-<DT><U>Variable:</U> CPFunction * <B>rl_filename_quoting_function</B>
-<DD><A NAME="IDX202"></A>
-A pointer to a function that will quote a filename in an application-
-specific fashion.  This is called if filename completion is being
+<DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B>
+<DD>A pointer to a function that will quote a filename in an
+application-specific fashion.  This is called if filename completion is being
 attempted and one of the characters in <CODE>rl_filename_quote_characters</CODE>
 appears in a completed filename.  The function is called with
 <VAR>text</VAR>, <VAR>match_type</VAR>, and <VAR>quote_pointer</VAR>.  The <VAR>text</VAR>
@@ -3304,13 +4324,12 @@
 to any opening quote character the user typed.  Some functions choose
 to reset this character.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX314"></A>
 <DL>
-<DT><U>Variable:</U> CPFunction * <B>rl_filename_dequoting_function</B>
-<DD><A NAME="IDX203"></A>
-A pointer to a function that will remove application-specific quoting
+<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B>
+<DD>A pointer to a function that will remove application-specific quoting
 characters from a filename before completion is attempted, so those
 characters do not interfere with matching the text against names in
 the filesystem.  It is called with <VAR>text</VAR>, the text of the word
@@ -3318,156 +4337,25 @@
 that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>).  If
 <VAR>quote_char</VAR> is zero, the filename was not in an embedded string.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX315"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_char_is_quoted_p</B>
-<DD><A NAME="IDX204"></A>
-A pointer to a function to call that determines whether or not a specific
+<DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B>
+<DD>A pointer to a function to call that determines whether or not a specific
 character in the line buffer is quoted, according to whatever quoting
-mechanism the program calling readline uses.  The function is called with
+mechanism the program calling Readline uses.  The function is called with
 two arguments: <VAR>text</VAR>, the text of the line, and <VAR>index</VAR>, the
 index of the character in the line.  It is used to decide whether a
 character found in <CODE>rl_completer_word_break_characters</CODE> should be
 used to break words for the completer.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX316"></A>
 <DL>
-<DT><U>Variable:</U> int <B>rl_completion_query_items</B>
-<DD><A NAME="IDX205"></A>
-Up to this many items will be displayed in response to a
-possible-completions call.  After that, we ask the user if she is sure
-she wants to see them all.  The default value is 100.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_basic_word_break_characters</B>
-<DD><A NAME="IDX206"></A>
-The basic list of characters that signal a break between words for the
-completer routine.  The default value of this variable is the characters
-which break words for completion in Bash, i.e.,
-<CODE>" \t\n\"\\'`@$&#62;&#60;=;|&#38;{("</CODE>.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_basic_quote_characters</B>
-<DD><A NAME="IDX207"></A>
-List of quote characters which can cause a word break.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_completer_word_break_characters</B>
-<DD><A NAME="IDX208"></A>
-The list of characters that signal a break between words for
-<CODE>rl_complete_internal ()</CODE>.  The default list is the value of
-<CODE>rl_basic_word_break_characters</CODE>.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_completer_quote_characters</B>
-<DD><A NAME="IDX209"></A>
-List of characters which can be used to quote a substring of the line.
-Completion occurs on the entire substring, and within the substring
-<CODE>rl_completer_word_break_characters</CODE> are treated as any other character,
-unless they also appear within this list.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_filename_quote_characters</B>
-<DD><A NAME="IDX210"></A>
-A list of characters that cause a filename to be quoted by the completer
-when they appear in a completed filename.  The default is the null string.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> char * <B>rl_special_prefixes</B>
-<DD><A NAME="IDX211"></A>
-The list of characters that are word break characters, but should be
-left in <VAR>text</VAR> when it is passed to the completion function.
-Programs can use this to help determine what kind of completing to do.
-For instance, Bash sets this variable to "$@" so that it can complete
-shell variables and hostnames.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> int <B>rl_completion_append_character</B>
-<DD><A NAME="IDX212"></A>
-When a single completion alternative matches at the end of the command
-line, this character is appended to the inserted completion text.  The
-default is a space character (<SAMP>` '</SAMP>).  Setting this to the null
-character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically.
-This can be changed in custom completion functions to
-provide the "most sensible word separator character" according to
-an application-specific command line syntax specification.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
-<DD><A NAME="IDX213"></A>
-If non-zero, then disallow duplicates in the matches.  Default is 1.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
-<DD><A NAME="IDX214"></A>
-Non-zero means that the results of the matches are to be treated as
-filenames.  This is <EM>always</EM> zero on entry, and can only be changed
-within a completion entry generator function.  If it is set to a non-zero
-value, directory names have a slash appended and Readline attempts to
-quote completed filenames if they contain any embedded word break
-characters.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
-<DD><A NAME="IDX215"></A>
-Non-zero means that the results of the matches are to be quoted using
-double quotes (or an application-specific quoting mechanism) if the
-completed filename contains any characters in
-<CODE>rl_filename_quote_chars</CODE>.  This is <EM>always</EM> non-zero
-on entry, and can only be changed within a completion entry generator
-function.  The quoting is effected via a call to the function pointed to
-by <CODE>rl_filename_quoting_function</CODE>.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
-<DD><A NAME="IDX216"></A>
-If this variable is non-zero, completion is inhibit&#60;ed.  The completion
-character will be inserted as any other bound to <CODE>self-insert</CODE>.
-</DL>
-
-</P>
-<P>
-<DL>
-<DT><U>Variable:</U> Function * <B>rl_ignore_some_completions_function</B>
-<DD><A NAME="IDX217"></A>
-This function, if defined, is called by the completer when real filename
+<DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B>
+<DD>This function, if defined, is called by the completer when real filename
 completion is done, after all the matching names have been generated.
 It is passed a <CODE>NULL</CODE> terminated array of matches.
 The first element (<CODE>matches[0]</CODE>) is the
@@ -3475,24 +4363,28 @@
 re-arrange the list of matches as required, but each element deleted
 from the array must be freed.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX317"></A>
 <DL>
-<DT><U>Variable:</U> Function * <B>rl_directory_completion_hook</B>
-<DD><A NAME="IDX218"></A>
-This function, if defined, is allowed to modify the directory portion
+<DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B>
+<DD>This function, if defined, is allowed to modify the directory portion
 of filenames Readline completes.  It is called with the address of a
-string (the current directory name) as an argument.  It could be used
-to expand symbolic links or shell variables in pathnames.
+string (the current directory name) as an argument, and may modify that string.
+If the string is replaced with a new string, the old value should be freed.
+Any modified directory name should have a trailing slash.
+The modified value will be displayed as part of the completion, replacing
+the directory portion of the pathname the user typed.
+It returns an integer that should be non-zero if the function modifies
+its directory argument.
+It could be used to expand symbolic links or shell variables in pathnames.
 </DL>
+</P><P>
 
-</P>
-<P>
+<A NAME="IDX318"></A>
 <DL>
-<DT><U>Variable:</U> VFunction * <B>rl_completion_display_matches_hook</B>
-<DD><A NAME="IDX219"></A>
-If non-zero, then this is the address of a function to call when
+<DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B>
+<DD>If non-zero, then this is the address of a function to call when
 completing a word would normally display the list of possible matches.
 This function is called in lieu of Readline displaying the list.
 It takes three arguments:
@@ -3504,23 +4396,197 @@
 that takes care of doing the display to Readline's output stream.  That
 function may be called from this hook.
 </DL>
+</P><P>
 
-</P>
+<A NAME="IDX319"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B>
+<DD>The basic list of characters that signal a break between words for the
+completer routine.  The default value of this variable is the characters
+which break words for completion in Bash:
+<CODE>" \t\n\"\\'`@$>&#60;=;|&#38;{("</CODE>.
+</DL>
+</P><P>
 
+<A NAME="IDX320"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B>
+<DD>A list of quote characters which can cause a word break.
+</DL>
+</P><P>
 
-<H3><A NAME="SEC45" HREF="readline.html#TOC45">A Short Completion Example</A></H3>
+<A NAME="IDX321"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B>
+<DD>The list of characters that signal a break between words for
+<CODE>rl_complete_internal()</CODE>.  The default list is the value of
+<CODE>rl_basic_word_break_characters</CODE>.
+</DL>
+</P><P>
 
+<A NAME="IDX322"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B>
+<DD>A list of characters which can be used to quote a substring of the line.
+Completion occurs on the entire substring, and within the substring
+<CODE>rl_completer_word_break_characters</CODE> are treated as any other character,
+unless they also appear within this list.
+</DL>
+</P><P>
+
+<A NAME="IDX323"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B>
+<DD>A list of characters that cause a filename to be quoted by the completer
+when they appear in a completed filename.  The default is the null string.
+</DL>
+</P><P>
+
+<A NAME="IDX324"></A>
+<DL>
+<DT><U>Variable:</U> const char * <B>rl_special_prefixes</B>
+<DD>The list of characters that are word break characters, but should be
+left in <VAR>text</VAR> when it is passed to the completion function.
+Programs can use this to help determine what kind of completing to do.
+For instance, Bash sets this variable to "$@" so that it can complete
+shell variables and hostnames.
+</DL>
+</P><P>
+
+<A NAME="IDX325"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_query_items</B>
+<DD>Up to this many items will be displayed in response to a
+possible-completions call.  After that, we ask the user if she is sure
+she wants to see them all.  The default value is 100.
+</DL>
+</P><P>
+
+<A NAME="IDX326"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_append_character</B>
+<DD>When a single completion alternative matches at the end of the command
+line, this character is appended to the inserted completion text.  The
+default is a space character (<SAMP>` '</SAMP>).  Setting this to the null
+character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically.
+This can be changed in custom completion functions to
+provide the "most sensible word separator character" according to
+an application-specific command line syntax specification.
+</DL>
+</P><P>
+
+<A NAME="IDX327"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_suppress_append</B>
+<DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to
+matches at the end of the command line, as described above.  It is
+set to 0 before any application-specific completion function is called.
+</DL>
+</P><P>
+
+<A NAME="IDX328"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B>
+<DD>If non-zero, a slash will be appended to completed filenames that are
+symbolic links to directory names, subject to the value of the
+user-settable <VAR>mark-directories</VAR> variable.
+This variable exists so that application completion functions can
+override the user's global preference (set via the
+<VAR>mark-symlinked-directories</VAR> Readline variable) if appropriate.
+This variable is set to the user's preference before any
+application completion function is called, so unless that function
+modifies the value, the user's preferences are honored.
+</DL>
+</P><P>
+
+<A NAME="IDX329"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
+<DD>If non-zero, then duplicates in the matches are removed.
+The default is 1.
+</DL>
+</P><P>
+
+<A NAME="IDX330"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
+<DD>Non-zero means that the results of the matches are to be treated as
+filenames.  This is <EM>always</EM> zero on entry, and can only be changed
+within a completion entry generator function.  If it is set to a non-zero
+value, directory names have a slash appended and Readline attempts to
+quote completed filenames if they contain any characters in
+<CODE>rl_filename_quote_characters</CODE> and <CODE>rl_filename_quoting_desired</CODE>
+is set to a non-zero value.
+</DL>
+</P><P>
+
+<A NAME="IDX331"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
+<DD>Non-zero means that the results of the matches are to be quoted using
+double quotes (or an application-specific quoting mechanism) if the
+completed filename contains any characters in
+<CODE>rl_filename_quote_chars</CODE>.  This is <EM>always</EM> non-zero
+on entry, and can only be changed within a completion entry generator
+function.  The quoting is effected via a call to the function pointed to
+by <CODE>rl_filename_quoting_function</CODE>.
+</DL>
+</P><P>
+
+<A NAME="IDX332"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_attempted_completion_over</B>
+<DD>If an application-specific completion function assigned to
+<CODE>rl_attempted_completion_function</CODE> sets this variable to a non-zero
+value, Readline will not perform its default filename completion even
+if the application's completion function returns no matches.
+It should be set only by an application's completion function.
+</DL>
+</P><P>
+
+<A NAME="IDX333"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_type</B>
+<DD>Set to a character describing the type of completion Readline is currently
+attempting; see the description of <CODE>rl_complete_internal()</CODE>
+(see section <A HREF="readline.html#SEC46">2.6.2 Completion Functions</A>) for the list of characters.
+</DL>
+</P><P>
+
+<A NAME="IDX334"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
+<DD>If this variable is non-zero, completion is inhibited.  The completion
+character will be inserted as any other bound to <CODE>self-insert</CODE>.
+</DL>
+</P><P>
+
+<A NAME="A Short Completion Example"></A>
+<HR SIZE="6">
+<A NAME="SEC48"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.4 A Short Completion Example </H3>
+<!--docid::SEC48::-->
 <P>
+
 Here is a small application demonstrating the use of the GNU Readline
 library.  It is called <CODE>fileman</CODE>, and the source code resides in
 <TT>`examples/fileman.c'</TT>.  This sample application provides
 completion of command names, line editing features, and access to the
 history list.
+</P><P>
 
-</P>
-
-<PRE>
-/* fileman.c -- A tiny application which demonstrates how to use the
+<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>/* fileman.c -- A tiny application which demonstrates how to use the
    GNU Readline library.  This application interactively allows users
    to manipulate files and their modes. */
 
@@ -3533,19 +4599,25 @@
 #include &#60;readline/readline.h&#62;
 #include &#60;readline/history.h&#62;
 
-extern char *getwd ();
 extern char *xmalloc ();
 
 /* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
+int com_list __P((char *));
+int com_view __P((char *));
+int com_rename __P((char *));
+int com_stat __P((char *));
+int com_pwd __P((char *));
+int com_delete __P((char *));
+int com_help __P((char *));
+int com_cd __P((char *));
+int com_quit __P((char *));
 
 /* A structure which contains information on the commands this program
    can understand. */
 
 typedef struct {
   char *name;			/* User printable name of the function. */
-  Function *func;		/* Function to call to do the job. */
+  rl_icpfunc_t *func;		/* Function to call to do the job. */
   char *doc;			/* Documentation for this function.  */
 } COMMAND;
 
@@ -3561,7 +4633,7 @@
   { "rename", com_rename, "Rename FILE to NEWNAME" },
   { "stat", com_stat, "Print out statistics on FILE" },
   { "view", com_view, "View the contents of FILE" },
-  { (char *)NULL, (Function *)NULL, (char *)NULL }
+  { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
 };
 
 /* Forward declarations. */
@@ -3571,7 +4643,7 @@
 /* The name of this program, as taken from argv[0]. */
 char *progname;
 
-/* When non-zero, this global means the user is done using this program. */
+/* When non-zero, this means the user is done using this program. */
 int done;
 
 char *
@@ -3701,29 +4773,29 @@
 /*                                                                  */
 /* **************************************************************** */
 
-char *command_generator ();
-char **fileman_completion ();
+char *command_generator __P((const char *, int));
+char **fileman_completion __P((const char *, int, int));
 
-/* Tell the GNU Readline library how to complete.  We want to try to complete
-   on command names if this is the first word in the line, or on filenames
-   if not. */
+/* Tell the GNU Readline library how to complete.  We want to try to
+   complete on command names if this is the first word in the line, or
+   on filenames if not. */
 initialize_readline ()
 {
   /* Allow conditional parsing of the ~/.inputrc file. */
   rl_readline_name = "FileMan";
 
   /* Tell the completer that we want a crack first. */
-  rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+  rl_attempted_completion_function = fileman_completion;
 }
 
-/* Attempt to complete on the contents of TEXT.  START and END bound the
-   region of rl_line_buffer that contains the word to complete.  TEXT is
-   the word to complete.  We can use the entire contents of rl_line_buffer
-   in case we want to do some simple parsing.  Return the array of matches,
-   or NULL if there aren't any. */
+/* Attempt to complete on the contents of TEXT.  START and END
+   bound the region of rl_line_buffer that contains the word to
+   complete.  TEXT is the word to complete.  We can use the entire
+   contents of rl_line_buffer in case we want to do some simple
+   parsing.  Returnthe array of matches, or NULL if there aren't any. */
 char **
 fileman_completion (text, start, end)
-     char *text;
+     const char *text;
      int start, end;
 {
   char **matches;
@@ -3734,32 +4806,33 @@
      to complete.  Otherwise it is the name of a file in the current
      directory. */
   if (start == 0)
-    matches = completion_matches (text, command_generator);
+    matches = rl_completion_matches (text, command_generator);
 
   return (matches);
 }
 
-/* Generator function for command completion.  STATE lets us know whether
-   to start from scratch; without any state (i.e. STATE == 0), then we
-   start at the top of the list. */
+/* Generator function for command completion.  STATE lets us
+   know whether to start from scratch; without any state
+   (i.e. STATE == 0), then we start at the top of the list. */
 char *
 command_generator (text, state)
-     char *text;
+     const char *text;
      int state;
 {
   static int list_index, len;
   char *name;
 
-  /* If this is a new word to complete, initialize now.  This includes
-     saving the length of TEXT for efficiency, and initializing the index
-     variable to 0. */
+  /* If this is a new word to complete, initialize now.  This
+     includes saving the length of TEXT for efficiency, and
+     initializing the index variable to 0. */
   if (!state)
     {
       list_index = 0;
       len = strlen (text);
     }
 
-  /* Return the next name which partially matches from the command list. */
+  /* Return the next name which partially matches from the
+     command list. */
   while (name = commands[list_index].name)
     {
       list_index++;
@@ -3904,7 +4977,7 @@
 {
   char dir[1024], *s;
 
-  s = getwd (dir);
+  s = getcwd (dir, sizeof(dir) - 1);
   if (s == 0)
     {
       printf ("Error getting pwd: %s\n", dir);
@@ -3915,7 +4988,8 @@
   return 0;
 }
 
-/* The user wishes to quit using this program.  Just set DONE non-zero. */
+/* The user wishes to quit using this program.  Just set DONE
+   non-zero. */
 com_quit (arg)
      char *arg;
 {
@@ -3928,12 +5002,13 @@
      char *caller;
 {
   fprintf (stderr,
-           "%s: Too dangerous for me to distribute.  Write it yourself.\n",
+           "%s: Too dangerous for me to distribute.\n"
            caller);
+  fprintf (stderr, "Write it yourself.\n");
 }
 
-/* Return non-zero if ARG is a valid argument for CALLER, else print
-   an error message and return zero. */
+/* Return non-zero if ARG is a valid argument for CALLER,
+   else print an error message and return zero. */
 int
 valid_argument (caller, arg)
      char *caller, *arg;
@@ -3946,382 +5021,888 @@
 
   return (1);
 }
-</PRE>
+</FONT></pre></td></tr></table></P><P>
 
+<A NAME="Concept Index"></A>
+<HR SIZE="6">
+<A NAME="SEC49"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC50"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> Concept Index </H1>
+<!--docid::SEC49::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp; 
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">command editing</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC3">interaction, readline</A></TD><TD valign=top><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX3">kill ring</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX1">killing text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175">readline, function</A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_Y"></A>Y</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX2">yanking text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp; 
+<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp; 
+</td></tr></table><br><P>
 
+<A NAME="Function and Variable Index"></A>
+<HR SIZE="6">
+<A NAME="SEC50"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> Function and Variable Index </H1>
+<!--docid::SEC50::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A>
+ &nbsp; 
+<BR>
+<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp; 
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_B"></A>B</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX32"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX33"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX71"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX95"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX102"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX103"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX36"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX37"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX48"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX49"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX27"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX38"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">comment-begin</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">completion-query-items</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">convert-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX106"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">disable-completion</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">editing-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">enable-keypad</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX50"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX28"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">expand-tilde</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX72"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX73"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX31"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX55"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX34"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX35"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX13">history-preserve-point</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX62"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX63"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX60"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX61"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX14">horizontal-scroll-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">input-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">isearch-terminators</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">keymap</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX92"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_M"></A>M</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">mark-modified-lines</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">mark-symlinked-directories</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">match-hidden-files</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">meta-flag</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX47"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX58"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX59"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX56"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX57"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_O"></A>O</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX22">output-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX91"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">page-completions</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_Q"></A>Q</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX74"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX75"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_already_prompted</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_binding_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291">rl_catch_signals</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_completion_append_character</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_completion_query_items</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completion_type</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_deprep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_dispatching</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_done</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_editing_mode</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">rl_end</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_erase_empty_line</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_event_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_executing_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_executing_macro</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_explicit_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_getc_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_inhibit_completion</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_instream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_last_func</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_library_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176">rl_line_buffer</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_mark</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_numeric_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_outstream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_pending_input</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177">rl_point</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_pre_input_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_prep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_prompt</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_readline_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_readline_state</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_readline_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_redisplay_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_special_prefixes</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_startup_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_terminal_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX76"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX96"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX104"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX85"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25">visible-stats</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX64"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A>
+ &nbsp; 
+<BR>
+<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp; 
+<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp; 
+</td></tr></table><br><P>
 
-<H1><A NAME="SEC46" HREF="readline.html#TOC46">Concept Index</A></H1>
-<P>
-Jump to:
-<A HREF="#cindex_c">c</A>
--
-<A HREF="#cindex_e">e</A>
--
-<A HREF="#cindex_i">i</A>
--
-<A HREF="#cindex_k">k</A>
--
-<A HREF="#cindex_n">n</A>
--
-<A HREF="#cindex_r">r</A>
--
-<A HREF="#cindex_y">y</A>
-<P>
-<H2><A NAME="cindex_c">c</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX3">command editing</A>
-</DIR>
-<H2><A NAME="cindex_e">e</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX4">editing command lines</A>
-</DIR>
-<H2><A NAME="cindex_i">i</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX8">initialization file, readline</A>
-<LI><A HREF="readline.html#IDX1">interaction, readline</A>
-</DIR>
-<H2><A NAME="cindex_k">k</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX7">kill ring</A>
-<LI><A HREF="readline.html#IDX5">killing text</A>
-</DIR>
-<H2><A NAME="cindex_n">n</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX2">notation, readline</A>
-</DIR>
-<H2><A NAME="cindex_r">r</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX98">readline, function</A>
-</DIR>
-<H2><A NAME="cindex_y">y</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX6">yanking text</A>
-</DIR>
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A>
+<BR>
+<A NAME="TOC3" HREF="readline.html#SEC3">1.2 Readline Interaction</A>
+<BR>
+<UL>
+<A NAME="TOC4" HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A>
+<BR>
+<A NAME="TOC5" HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A>
+<BR>
+<A NAME="TOC6" HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A>
+<BR>
+<A NAME="TOC7" HREF="readline.html#SEC7">1.2.4 Readline Arguments</A>
+<BR>
+<A NAME="TOC8" HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A>
+<BR>
+</UL>
+<A NAME="TOC9" HREF="readline.html#SEC9">1.3 Readline Init File</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>
+<BR>
+<A NAME="TOC11" HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>
+<BR>
+<A NAME="TOC12" HREF="readline.html#SEC12">1.3.3 Sample Init File</A>
+<BR>
+</UL>
+<A NAME="TOC13" HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A>
+<BR>
+<UL>
+<A NAME="TOC14" HREF="readline.html#SEC14">1.4.1 Commands For Moving</A>
+<BR>
+<A NAME="TOC15" HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A>
+<BR>
+<A NAME="TOC16" HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A>
+<BR>
+<A NAME="TOC17" HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A>
+<BR>
+<A NAME="TOC18" HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A>
+<BR>
+<A NAME="TOC19" HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A>
+<BR>
+<A NAME="TOC20" HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A>
+<BR>
+<A NAME="TOC21" HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A>
+<BR>
+</UL>
+<A NAME="TOC22" HREF="readline.html#SEC22">1.5 Readline vi Mode</A>
+<BR>
+</UL>
+<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A>
+<BR>
+<UL>
+<A NAME="TOC24" HREF="readline.html#SEC24">2.1 Basic Behavior</A>
+<BR>
+<A NAME="TOC25" HREF="readline.html#SEC25">2.2 Custom Functions</A>
+<BR>
+<UL>
+<A NAME="TOC26" HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A>
+<BR>
+<A NAME="TOC27" HREF="readline.html#SEC27">2.2.2 Writing a New Function</A>
+<BR>
+</UL>
+<A NAME="TOC28" HREF="readline.html#SEC28">2.3 Readline Variables</A>
+<BR>
+<A NAME="TOC29" HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A>
+<BR>
+<UL>
+<A NAME="TOC30" HREF="readline.html#SEC30">2.4.1 Naming a Function</A>
+<BR>
+<A NAME="TOC31" HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>
+<BR>
+<A NAME="TOC32" HREF="readline.html#SEC32">2.4.3 Binding Keys</A>
+<BR>
+<A NAME="TOC33" HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A>
+<BR>
+<A NAME="TOC34" HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>
+<BR>
+<A NAME="TOC35" HREF="readline.html#SEC35">2.4.6 Redisplay</A>
+<BR>
+<A NAME="TOC36" HREF="readline.html#SEC36">2.4.7 Modifying Text</A>
+<BR>
+<A NAME="TOC37" HREF="readline.html#SEC37">2.4.8 Character Input</A>
+<BR>
+<A NAME="TOC38" HREF="readline.html#SEC38">2.4.9 Terminal Management</A>
+<BR>
+<A NAME="TOC39" HREF="readline.html#SEC39">2.4.10 Utility Functions</A>
+<BR>
+<A NAME="TOC40" HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A>
+<BR>
+<A NAME="TOC41" HREF="readline.html#SEC41">2.4.12 Alternate Interface</A>
+<BR>
+<A NAME="TOC42" HREF="readline.html#SEC42">2.4.13 A Readline Example</A>
+<BR>
+</UL>
+<A NAME="TOC43" HREF="readline.html#SEC43">2.5 Readline Signal Handling</A>
+<BR>
+<A NAME="TOC44" HREF="readline.html#SEC44">2.6 Custom Completers</A>
+<BR>
+<UL>
+<A NAME="TOC45" HREF="readline.html#SEC45">2.6.1 How Completing Works</A>
+<BR>
+<A NAME="TOC46" HREF="readline.html#SEC46">2.6.2 Completion Functions</A>
+<BR>
+<A NAME="TOC47" HREF="readline.html#SEC47">2.6.3 Completion Variables</A>
+<BR>
+<A NAME="TOC48" HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A>
+<BR>
+<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A>
+<BR>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A>
+<BR>
+<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A>
+<BR>
+<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A>
+<BR>
+<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A>
+<BR>
 
-</P>
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Chet Ramey</I> on <I>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>  
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section 
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position 
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
+the following structure:
+<UL>
+<LI> 1. Section One  </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
 
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
 
-<H1><A NAME="SEC47" HREF="readline.html#TOC47">Function and Variable Index</A></H1>
-<P>
-Jump to:
-<A HREF="#findex_a">a</A>
--
-<A HREF="#findex_b">b</A>
--
-<A HREF="#findex_c">c</A>
--
-<A HREF="#findex_d">d</A>
--
-<A HREF="#findex_e">e</A>
--
-<A HREF="#findex_f">f</A>
--
-<A HREF="#findex_h">h</A>
--
-<A HREF="#findex_i">i</A>
--
-<A HREF="#findex_k">k</A>
--
-<A HREF="#findex_l">l</A>
--
-<A HREF="#findex_m">m</A>
--
-<A HREF="#findex_n">n</A>
--
-<A HREF="#findex_o">o</A>
--
-<A HREF="#findex_p">p</A>
--
-<A HREF="#findex_q">q</A>
--
-<A HREF="#findex_r">r</A>
--
-<A HREF="#findex_s">s</A>
--
-<A HREF="#findex_t">t</A>
--
-<A HREF="#findex_u">u</A>
--
-<A HREF="#findex_v">v</A>
--
-<A HREF="#findex_y">y</A>
-<P>
-<H2><A NAME="findex_a">a</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX83">abort (C-g)</A>
-<LI><A HREF="readline.html#IDX34">accept-line (Newline, Return)</A>
-<LI><A HREF="readline.html#IDX170">alphabetic</A>
-</DIR>
-<H2><A NAME="findex_b">b</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX29">backward-char (C-b)</A>
-<LI><A HREF="readline.html#IDX48">backward-delete-char (Rubout)</A>
-<LI><A HREF="readline.html#IDX59">backward-kill-line (C-x Rubout)</A>
-<LI><A HREF="readline.html#IDX63">backward-kill-word (M-DEL)</A>
-<LI><A HREF="readline.html#IDX31">backward-word (M-b)</A>
-<LI><A HREF="readline.html#IDX37">beginning-of-history (M-&#38;#60;)</A>
-<LI><A HREF="readline.html#IDX26">beginning-of-line (C-a)</A>
-<LI><A HREF="readline.html#IDX9">bell-style</A>
-</DIR>
-<H2><A NAME="findex_c">c</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX81">call-last-kbd-macro (C-x e)</A>
-<LI><A HREF="readline.html#IDX57">capitalize-word (M-c)</A>
-<LI><A HREF="readline.html#IDX91">character-search (C-])</A>
-<LI><A HREF="readline.html#IDX92">character-search-backward (M-C-])</A>
-<LI><A HREF="readline.html#IDX32">clear-screen (C-l)</A>
-<LI><A HREF="readline.html#IDX10">comment-begin</A>
-<LI><A HREF="readline.html#IDX74">complete (TAB)</A>
-<LI><A HREF="readline.html#IDX11">completion-query-items</A>
-<LI><A HREF="readline.html#IDX197">completion_matches</A>
-<LI><A HREF="readline.html#IDX12">convert-meta</A>
-<LI><A HREF="readline.html#IDX68">copy-backward-word ()</A>
-<LI><A HREF="readline.html#IDX69">copy-forward-word ()</A>
-<LI><A HREF="readline.html#IDX67">copy-region-as-kill ()</A>
-</DIR>
-<H2><A NAME="findex_d">d</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX47">delete-char (C-d)</A>
-<LI><A HREF="readline.html#IDX78">delete-char-or-list ()</A>
-<LI><A HREF="readline.html#IDX65">delete-horizontal-space ()</A>
-<LI><A HREF="readline.html#IDX72">digit-argument (M-0, M-1, ... M--)</A>
-<LI><A HREF="readline.html#IDX176">digit_p</A>
-<LI><A HREF="readline.html#IDX179">digit_value</A>
-<LI><A HREF="readline.html#IDX172">ding</A>
-<LI><A HREF="readline.html#IDX13">disable-completion</A>
-<LI><A HREF="readline.html#IDX84">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A>
-<LI><A HREF="readline.html#IDX56">downcase-word (M-l)</A>
-<LI><A HREF="readline.html#IDX94">dump-functions ()</A>
-<LI><A HREF="readline.html#IDX96">dump-macros ()</A>
-<LI><A HREF="readline.html#IDX95">dump-variables ()</A>
-</DIR>
-<H2><A NAME="findex_e">e</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX14">editing-mode</A>
-<LI><A HREF="readline.html#IDX15">enable-keypad</A>
-<LI><A HREF="readline.html#IDX80">end-kbd-macro (C-x ))</A>
-<LI><A HREF="readline.html#IDX38">end-of-history (M-&#38;#62;)</A>
-<LI><A HREF="readline.html#IDX27">end-of-line (C-e)</A>
-<LI><A HREF="readline.html#IDX90">exchange-point-and-mark (C-x C-x)</A>
-<LI><A HREF="readline.html#IDX16">expand-tilde</A>
-</DIR>
-<H2><A NAME="findex_f">f</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX198">filename_completion_function</A>
-<LI><A HREF="readline.html#IDX49">forward-backward-delete-char ()</A>
-<LI><A HREF="readline.html#IDX28">forward-char (C-f)</A>
-<LI><A HREF="readline.html#IDX40">forward-search-history (C-s)</A>
-<LI><A HREF="readline.html#IDX30">forward-word (M-f)</A>
-<LI><A HREF="readline.html#IDX148">free_undo_list</A>
-</DIR>
-<H2><A NAME="findex_h">h</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX44">history-search-backward ()</A>
-<LI><A HREF="readline.html#IDX43">history-search-forward ()</A>
-<LI><A HREF="readline.html#IDX17">horizontal-scroll-mode</A>
-</DIR>
-<H2><A NAME="findex_i">i</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX18">input-meta</A>
-<LI><A HREF="readline.html#IDX93">insert-comment (M-#)</A>
-<LI><A HREF="readline.html#IDX76">insert-completions (M-*)</A>
-<LI><A HREF="readline.html#IDX20">isearch-terminators</A>
-</DIR>
-<H2><A NAME="findex_k">k</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX21">keymap</A>
-<LI><A HREF="readline.html#IDX58">kill-line (C-k)</A>
-<LI><A HREF="readline.html#IDX66">kill-region ()</A>
-<LI><A HREF="readline.html#IDX61">kill-whole-line ()</A>
-<LI><A HREF="readline.html#IDX62">kill-word (M-d)</A>
-</DIR>
-<H2><A NAME="findex_l">l</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX175">lowercase_p</A>
-</DIR>
-<H2><A NAME="findex_m">m</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX22">mark-modified-lines</A>
-<LI><A HREF="readline.html#IDX77">menu-complete ()</A>
-<LI><A HREF="readline.html#IDX19">meta-flag</A>
-</DIR>
-<H2><A NAME="findex_n">n</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX36">next-history (C-n)</A>
-<LI><A HREF="readline.html#IDX42">non-incremental-forward-search-history (M-n)</A>
-<LI><A HREF="readline.html#IDX41">non-incremental-reverse-search-history (M-p)</A>
-<LI><A HREF="readline.html#IDX171">numeric</A>
-</DIR>
-<H2><A NAME="findex_o">o</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX23">output-meta</A>
-</DIR>
-<H2><A NAME="findex_p">p</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX75">possible-completions (M-?)</A>
-<LI><A HREF="readline.html#IDX85">prefix-meta (ESC)</A>
-<LI><A HREF="readline.html#IDX35">previous-history (C-p)</A>
-</DIR>
-<H2><A NAME="findex_q">q</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX50">quoted-insert (C-q, C-v)</A>
-</DIR>
-<H2><A NAME="findex_r">r</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX82">re-read-init-file (C-x C-r)</A>
-<LI><A HREF="readline.html#IDX97">readline</A>
-<LI><A HREF="readline.html#IDX33">redraw-current-line ()</A>
-<LI><A HREF="readline.html#IDX39">reverse-search-history (C-r)</A>
-<LI><A HREF="readline.html#IDX87">revert-line (M-r)</A>
-<LI><A HREF="readline.html#IDX120">rl_add_defun</A>
-<LI><A HREF="readline.html#IDX147">rl_add_undo</A>
-<LI><A HREF="readline.html#IDX107">rl_already_prompted</A>
-<LI><A HREF="readline.html#IDX201">rl_attempted_completion_function</A>
-<LI><A HREF="readline.html#IDX207">rl_basic_quote_characters</A>
-<LI><A HREF="readline.html#IDX206">rl_basic_word_break_characters</A>
-<LI><A HREF="readline.html#IDX145">rl_begin_undo_group</A>
-<LI><A HREF="readline.html#IDX129">rl_bind_key</A>
-<LI><A HREF="readline.html#IDX130">rl_bind_key_in_map</A>
-<LI><A HREF="readline.html#IDX119">rl_binding_keymap</A>
-<LI><A HREF="readline.html#IDX180">rl_callback_handler_install</A>
-<LI><A HREF="readline.html#IDX182">rl_callback_handler_remove</A>
-<LI><A HREF="readline.html#IDX181">rl_callback_read_char</A>
-<LI><A HREF="readline.html#IDX183">rl_catch_signals</A>
-<LI><A HREF="readline.html#IDX184">rl_catch_sigwinch</A>
-<LI><A HREF="readline.html#IDX204">rl_char_is_quoted_p</A>
-<LI><A HREF="readline.html#IDX185">rl_cleanup_after_signal</A>
-<LI><A HREF="readline.html#IDX157">rl_clear_message</A>
-<LI><A HREF="readline.html#IDX190">rl_clear_signals</A>
-<LI><A HREF="readline.html#IDX191">rl_complete</A>, <A HREF="readline.html#IDX194">rl_complete</A>
-<LI><A HREF="readline.html#IDX193">rl_complete_internal</A>
-<LI><A HREF="readline.html#IDX209">rl_completer_quote_characters</A>
-<LI><A HREF="readline.html#IDX208">rl_completer_word_break_characters</A>
-<LI><A HREF="readline.html#IDX212">rl_completion_append_character</A>
-<LI><A HREF="readline.html#IDX219">rl_completion_display_matches_hook</A>
-<LI><A HREF="readline.html#IDX192">rl_completion_entry_function</A>, <A HREF="readline.html#IDX200">rl_completion_entry_function</A>
-<LI><A HREF="readline.html#IDX205">rl_completion_query_items</A>
-<LI><A HREF="readline.html#IDX122">rl_copy_keymap</A>
-<LI><A HREF="readline.html#IDX162">rl_copy_text</A>
-<LI><A HREF="readline.html#IDX161">rl_delete_text</A>
-<LI><A HREF="readline.html#IDX218">rl_directory_completion_hook</A>
-<LI><A HREF="readline.html#IDX124">rl_discard_keymap</A>
-<LI><A HREF="readline.html#IDX173">rl_display_match_list</A>
-<LI><A HREF="readline.html#IDX149">rl_do_undo</A>
-<LI><A HREF="readline.html#IDX103">rl_done</A>
-<LI><A HREF="readline.html#IDX101">rl_end</A>
-<LI><A HREF="readline.html#IDX146">rl_end_undo_group</A>
-<LI><A HREF="readline.html#IDX105">rl_erase_empty_line</A>
-<LI><A HREF="readline.html#IDX115">rl_event_hook</A>
-<LI><A HREF="readline.html#IDX118">rl_executing_keymap</A>
-<LI><A HREF="readline.html#IDX167">rl_extend_line_buffer</A>
-<LI><A HREF="readline.html#IDX214">rl_filename_completion_desired</A>
-<LI><A HREF="readline.html#IDX203">rl_filename_dequoting_function</A>
-<LI><A HREF="readline.html#IDX210">rl_filename_quote_characters</A>
-<LI><A HREF="readline.html#IDX215">rl_filename_quoting_desired</A>
-<LI><A HREF="readline.html#IDX202">rl_filename_quoting_function</A>
-<LI><A HREF="readline.html#IDX152">rl_forced_update_display</A>
-<LI><A HREF="readline.html#IDX186">rl_free_line_state</A>
-<LI><A HREF="readline.html#IDX142">rl_function_dumper</A>
-<LI><A HREF="readline.html#IDX139">rl_function_of_keyseq</A>
-<LI><A HREF="readline.html#IDX144">rl_funmap_names</A>
-<LI><A HREF="readline.html#IDX135">rl_generic_bind</A>
-<LI><A HREF="readline.html#IDX125">rl_get_keymap</A>
-<LI><A HREF="readline.html#IDX127">rl_get_keymap_by_name</A>
-<LI><A HREF="readline.html#IDX128">rl_get_keymap_name</A>
-<LI><A HREF="readline.html#IDX165">rl_getc</A>
-<LI><A HREF="readline.html#IDX116">rl_getc_function</A>
-<LI><A HREF="readline.html#IDX213">rl_ignore_completion_duplicates</A>
-<LI><A HREF="readline.html#IDX217">rl_ignore_some_completions_function</A>
-<LI><A HREF="readline.html#IDX216">rl_inhibit_completion</A>
-<LI><A HREF="readline.html#IDX168">rl_initialize</A>
-<LI><A HREF="readline.html#IDX196">rl_insert_completions</A>
-<LI><A HREF="readline.html#IDX160">rl_insert_text</A>
-<LI><A HREF="readline.html#IDX111">rl_instream</A>
-<LI><A HREF="readline.html#IDX140">rl_invoking_keyseqs</A>
-<LI><A HREF="readline.html#IDX141">rl_invoking_keyseqs_in_map</A>
-<LI><A HREF="readline.html#IDX163">rl_kill_text</A>
-<LI><A HREF="readline.html#IDX108">rl_library_version</A>
-<LI><A HREF="readline.html#IDX99">rl_line_buffer</A>
-<LI><A HREF="readline.html#IDX143">rl_list_funmap_names</A>
-<LI><A HREF="readline.html#IDX121">rl_make_bare_keymap</A>
-<LI><A HREF="readline.html#IDX123">rl_make_keymap</A>
-<LI><A HREF="readline.html#IDX102">rl_mark</A>
-<LI><A HREF="readline.html#IDX156">rl_message</A>
-<LI><A HREF="readline.html#IDX150">rl_modifying</A>
-<LI><A HREF="readline.html#IDX138">rl_named_function</A>
-<LI><A HREF="readline.html#IDX153">rl_on_new_line</A>
-<LI><A HREF="readline.html#IDX154">rl_on_new_line_with_prompt</A>
-<LI><A HREF="readline.html#IDX112">rl_outstream</A>
-<LI><A HREF="readline.html#IDX136">rl_parse_and_bind</A>
-<LI><A HREF="readline.html#IDX104">rl_pending_input</A>
-<LI><A HREF="readline.html#IDX100">rl_point</A>
-<LI><A HREF="readline.html#IDX195">rl_possible_completions</A>
-<LI><A HREF="readline.html#IDX114">rl_pre_input_hook</A>
-<LI><A HREF="readline.html#IDX106">rl_prompt</A>
-<LI><A HREF="readline.html#IDX137">rl_read_init_file</A>
-<LI><A HREF="readline.html#IDX164">rl_read_key</A>
-<LI><A HREF="readline.html#IDX110">rl_readline_name</A>
-<LI><A HREF="readline.html#IDX151">rl_redisplay</A>
-<LI><A HREF="readline.html#IDX117">rl_redisplay_function</A>
-<LI><A HREF="readline.html#IDX187">rl_reset_after_signal</A>
-<LI><A HREF="readline.html#IDX155">rl_reset_line_state</A>
-<LI><A HREF="readline.html#IDX169">rl_reset_terminal</A>
-<LI><A HREF="readline.html#IDX188">rl_resize_terminal</A>
-<LI><A HREF="readline.html#IDX159">rl_restore_prompt</A>
-<LI><A HREF="readline.html#IDX158">rl_save_prompt</A>
-<LI><A HREF="readline.html#IDX126">rl_set_keymap</A>
-<LI><A HREF="readline.html#IDX189">rl_set_signals</A>
-<LI><A HREF="readline.html#IDX211">rl_special_prefixes</A>
-<LI><A HREF="readline.html#IDX113">rl_startup_hook</A>
-<LI><A HREF="readline.html#IDX166">rl_stuff_char</A>
-<LI><A HREF="readline.html#IDX109">rl_terminal_name</A>
-<LI><A HREF="readline.html#IDX134">rl_unbind_command_in_map</A>
-<LI><A HREF="readline.html#IDX133">rl_unbind_function_in_map</A>
-<LI><A HREF="readline.html#IDX131">rl_unbind_key</A>
-<LI><A HREF="readline.html#IDX132">rl_unbind_key_in_map</A>
-</DIR>
-<H2><A NAME="findex_s">s</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX52">self-insert (a, b, A, 1, !, ...)</A>
-<LI><A HREF="readline.html#IDX89">set-mark (C-@)</A>
-<LI><A HREF="readline.html#IDX24">show-all-if-ambiguous</A>
-<LI><A HREF="readline.html#IDX79">start-kbd-macro (C-x ()</A>
-</DIR>
-<H2><A NAME="findex_t">t</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX51">tab-insert (M-TAB)</A>
-<LI><A HREF="readline.html#IDX88">tilde-expand (M-~)</A>
-<LI><A HREF="readline.html#IDX178">to_lower</A>
-<LI><A HREF="readline.html#IDX177">to_upper</A>
-<LI><A HREF="readline.html#IDX53">transpose-chars (C-t)</A>
-<LI><A HREF="readline.html#IDX54">transpose-words (M-t)</A>
-</DIR>
-<H2><A NAME="findex_u">u</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX86">undo (C-_, C-x C-u)</A>
-<LI><A HREF="readline.html#IDX73">universal-argument ()</A>
-<LI><A HREF="readline.html#IDX60">unix-line-discard (C-u)</A>
-<LI><A HREF="readline.html#IDX64">unix-word-rubout (C-w)</A>
-<LI><A HREF="readline.html#IDX55">upcase-word (M-u)</A>
-<LI><A HREF="readline.html#IDX174">uppercase_p</A>
-<LI><A HREF="readline.html#IDX199">username_completion_function</A>
-</DIR>
-<H2><A NAME="findex_v">v</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX25">visible-stats</A>
-</DIR>
-<H2><A NAME="findex_y">y</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX70">yank (C-y)</A>
-<LI><A HREF="readline.html#IDX46">yank-last-arg (M-., M-_)</A>
-<LI><A HREF="readline.html#IDX45">yank-nth-arg (M-C-y)</A>
-<LI><A HREF="readline.html#IDX71">yank-pop (M-y)</A>
-</DIR>
-
-</P>
-<P><HR><P>
-This document was generated on 1 March 2000 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
 </BODY>
 </HTML>
diff --git a/readline/doc/readline.info b/readline/doc/readline.info
index ae6767f..57dbdfa 100644
--- a/readline/doc/readline.info
+++ b/readline/doc/readline.info
@@ -1,5 +1,5 @@
-This is Info file readline.info, produced by Makeinfo version 1.68 from
-the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo.
+This is readline.info, produced by makeinfo version 4.1 from
+/usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo.
 
 INFO-DIR-SECTION Libraries
 START-INFO-DIR-ENTRY
@@ -10,7 +10,7 @@
 aids in the consistency of user interface across discrete programs that
 need to provide a command line interface.
 
-   Copyright (C) 1988-1999 Free Software Foundation, Inc.
+   Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice pare
@@ -72,10 +72,10 @@
    The following paragraphs describe the notation used to represent
 keystrokes.
 
-   The text <C-k> is read as `Control-K' and describes the character
+   The text `C-k' is read as `Control-K' and describes the character
 produced when the <k> key is pressed while the Control key is depressed.
 
-   The text <M-k> is read as `Meta-K' and describes the character
+   The text `M-k' is read as `Meta-K' and describes the character
 produced when the Meta key (if you have one) is depressed, and the <k>
 key is pressed.  The Meta key is labeled <ALT> on many keyboards.  On
 keyboards with two keys labeled <ALT> (usually to either side of the
@@ -86,18 +86,18 @@
 
    If you do not have a Meta or <ALT> key, or another key working as a
 Meta key, the identical keystroke can be generated by typing <ESC>
-first, and then typing <k>.  Either process is known as "metafying" the
-<k> key.
+_first_, and then typing <k>.  Either process is known as "metafying"
+the <k> key.
 
-   The text <M-C-k> is read as `Meta-Control-k' and describes the
-character produced by "metafying" <C-k>.
+   The text `M-C-k' is read as `Meta-Control-k' and describes the
+character produced by "metafying" `C-k'.
 
    In addition, several keys have their own names.  Specifically,
 <DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
-when seen in this text, or in an init file (*note Readline Init
-File::.).  If your keyboard lacks a <LFD> key, typing <C-j> will
-produce the desired character.  The <RET> key may be labeled <Return>
-or <Enter> on some keyboards.
+when seen in this text, or in an init file (*note Readline Init File::).
+If your keyboard lacks a <LFD> key, typing <C-j> will produce the
+desired character.  The <RET> key may be labeled <Return> or <Enter> on
+some keyboards.
 
 
 File: readline.info,  Node: Readline Interaction,  Next: Readline Init File,  Prev: Introduction and Notation,  Up: Command Line Editing
@@ -112,9 +112,9 @@
 you to retype the majority of the line.  Using these editing commands,
 you move the cursor to the place that needs correction, and delete or
 insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press <RETURN>.  You do not have to be at the end
-of the line to press <RETURN>; the entire line is accepted regardless
-of the location of the cursor within the line.
+the line, you simply press <RET>.  You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
 
 * Menu:
 
@@ -137,8 +137,8 @@
 
    Sometimes you may mistype a character, and not notice the error
 until you have typed several other characters.  In that case, you can
-type <C-b> to move the cursor to the left, and then correct your
-mistake.  Afterwards, you can move the cursor to the right with <C-f>.
+type `C-b' to move the cursor to the left, and then correct your
+mistake.  Afterwards, you can move the cursor to the right with `C-f'.
 
    When you add text in the middle of a line, you will notice that
 characters to the right of the cursor are `pushed over' to make room
@@ -148,28 +148,28 @@
 list of the bare essentials for editing the text of an input line
 follows.
 
-<C-b>
+`C-b'
      Move back one character.
 
-<C-f>
+`C-f'
      Move forward one character.
 
 <DEL> or <Backspace>
      Delete the character to the left of the cursor.
 
-<C-d>
+`C-d'
      Delete the character underneath the cursor.
 
 Printing characters
      Insert the character into the line at the cursor.
 
-<C-_> or <C-x C-u>
+`C-_' or `C-x C-u'
      Undo the last editing command.  You can undo all the way back to an
      empty line.
 
 (Depending on your configuration, the <Backspace> key be set to delete
 the character to the left of the cursor and the <DEL> key set to delete
-the character underneath the cursor, like <C-d>, rather than the
+the character underneath the cursor, like `C-d', rather than the
 character to the left of the cursor.)
 
 
@@ -180,26 +180,26 @@
 
    The above table describes the most basic keystrokes that you need in
 order to do editing of the input line.  For your convenience, many
-other commands have been added in addition to <C-b>, <C-f>, <C-d>, and
+other commands have been added in addition to `C-b', `C-f', `C-d', and
 <DEL>.  Here are some commands for moving more rapidly about the line.
 
-<C-a>
+`C-a'
      Move to the start of the line.
 
-<C-e>
+`C-e'
      Move to the end of the line.
 
-<M-f>
+`M-f'
      Move forward a word, where a word is composed of letters and
      digits.
 
-<M-b>
+`M-b'
      Move backward a word.
 
-<C-l>
+`C-l'
      Clear the screen, reprinting the current line at the top.
 
-   Notice how <C-f> moves forward a character, while <M-f> moves
+   Notice how `C-f' moves forward a character, while `M-f' moves
 forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
 
@@ -226,34 +226,34 @@
 
    Here is the list of commands for killing text.
 
-<C-k>
+`C-k'
      Kill the text from the current cursor position to the end of the
      line.
 
-<M-d>
+`M-d'
      Kill from the cursor to the end of the current word, or, if between
      words, to the end of the next word.  Word boundaries are the same
-     as those used by <M-f>.
+     as those used by `M-f'.
 
-<M-DEL>
-     Kill from the cursor the start of the previous word, or, if between
+`M-<DEL>'
+     Kill from the cursor the start of the current word, or, if between
      words, to the start of the previous word.  Word boundaries are the
-     same as those used by <M-b>.
+     same as those used by `M-b'.
 
-<C-w>
+`C-w'
      Kill from the cursor to the previous whitespace.  This is
-     different than <M-DEL> because the word boundaries differ.
+     different than `M-<DEL>' because the word boundaries differ.
 
    Here is how to "yank" the text back into the line.  Yanking means to
 copy the most-recently-killed text from the kill buffer.
 
-<C-y>
+`C-y'
      Yank the most recently killed text back into the buffer at the
      cursor.
 
-<M-y>
+`M-y'
      Rotate the kill-ring, and yank the new top.  You can only do this
-     if the prior command is <C-y> or <M-y>.
+     if the prior command is `C-y' or `M-y'.
 
 
 File: readline.info,  Node: Readline Arguments,  Next: Searching,  Prev: Readline Killing Commands,  Up: Readline Interaction
@@ -273,7 +273,8 @@
 sign (`-'), then the sign of the argument will be negative.  Once you
 have typed one meta digit to get the argument started, you can type the
 remainder of the digits, and then the command.  For example, to give
-the <C-d> command an argument of 10, you could type `M-1 0 C-d'.
+the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
+will delete the next ten characters on the input line.
 
 
 File: readline.info,  Node: Searching,  Prev: Readline Arguments,  Up: Readline Interaction
@@ -283,29 +284,34 @@
 
    Readline provides commands for searching through the command history
 for lines containing a specified string.  There are two search modes:
-INCREMENTAL and NON-INCREMENTAL.
+"incremental" and "non-incremental".
 
    Incremental searches begin before the user has finished typing the
 search string.  As each character of the search string is typed,
 Readline displays the next entry from the history matching the string
 typed so far.  An incremental search requires only as many characters
 as needed to find the desired history entry.  To search backward in the
-history for a particular string, type <C-r>.  Typing <C-s> searches
+history for a particular string, type `C-r'.  Typing `C-s' searches
 forward through the history.  The characters present in the value of
 the `isearch-terminators' variable are used to terminate an incremental
 search.  If that variable has not been assigned a value, the <ESC> and
-<C-J> characters will terminate an incremental search.  <C-g> will
+`C-J' characters will terminate an incremental search.  `C-g' will
 abort an incremental search and restore the original line.  When the
 search is terminated, the history entry containing the search string
 becomes the current line.
 
-   To find other matching entries in the history list, type <C-r> or
-<C-s> as appropriate.  This will search backward or forward in the
+   To find other matching entries in the history list, type `C-r' or
+`C-s' as appropriate.  This will search backward or forward in the
 history for the next entry matching the search string typed so far.
 Any other key sequence bound to a Readline command will terminate the
 search and execute that command.  For instance, a <RET> will terminate
 the search and accept the line, thereby executing the command from the
-history list.
+history list.  A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+   Readline remembers the last incremental search string.  If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
 
    Non-incremental searches read the entire search string before
 starting to search for matching history lines.  The search string may be
@@ -348,17 +354,24 @@
    There are only a few basic constructs allowed in the Readline init
 file.  Blank lines are ignored.  Lines beginning with a `#' are
 comments.  Lines beginning with a `$' indicate conditional constructs
-(*note Conditional Init Constructs::.).  Other lines denote variable
+(*note Conditional Init Constructs::).  Other lines denote variable
 settings and key bindings.
 
 Variable Settings
      You can modify the run-time behavior of Readline by altering the
      values of variables in Readline using the `set' command within the
-     init file.  Here is how to change from the default Emacs-like key
-     binding to use `vi' line editing commands:
+     init file.  The syntax is simple:
+
+          set VARIABLE VALUE
+
+     Here, for example, is how to change from the default Emacs-like
+     key binding to use `vi' line editing commands:
 
           set editing-mode vi
 
+     Variable names and values, where appropriate, are recognized
+     without regard to case.
+
      A great deal of run-time behavior is changeable with the following
      variables.
 
@@ -385,7 +398,8 @@
           possibilities.  If the number of possible completions is
           greater than this value, Readline will ask the user whether
           or not he wishes to view them; otherwise, they are simply
-          listed.  The default limit is `100'.
+          listed.  This variable must be set to an integer value
+          greater than or equal to 0.  The default limit is `100'.
 
     `convert-meta'
           If set to `on', Readline will convert characters with the
@@ -413,6 +427,10 @@
           If set to `on', tilde expansion is performed when Readline
           attempts word completion.  The default is `off'.
 
+          If set to `on', the history code attempts to place point at
+          the same location on each history line retrived with
+          `previous-history' or `next-history'.
+
     `horizontal-scroll-mode'
           This variable can be set to either `on' or `off'.  Setting it
           to `on' means that the text of the lines being edited will
@@ -422,7 +440,7 @@
 
     `input-meta'
           If set to `on', Readline will enable eight-bit input (it will
-          not strip the eighth bit from the characters it reads),
+          not clear the eighth bit in the characters it reads),
           regardless of what the terminal claims it can support.  The
           default value is `off'.  The name `meta-flag' is a synonym
           for this variable.
@@ -430,14 +448,14 @@
     `isearch-terminators'
           The string of characters that should terminate an incremental
           search without subsequently executing the character as a
-          command (*note Searching::.).  If this variable has not been
-          given a value, the characters <ESC> and <C-J> will terminate
+          command (*note Searching::).  If this variable has not been
+          given a value, the characters <ESC> and `C-J' will terminate
           an incremental search.
 
     `keymap'
           Sets Readline's idea of the current keymap for key binding
           commands.  Acceptable `keymap' names are `emacs',
-          `emacs-standard', `emacs-meta', `emacs-ctlx', `vi',
+          `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
           `vi-command', and `vi-insert'.  `vi' is equivalent to
           `vi-command'; `emacs' is equivalent to `emacs-standard'.  The
           default value is `emacs'.  The value of the `editing-mode'
@@ -452,11 +470,28 @@
           asterisk (`*') at the start of history lines which have been
           modified.  This variable is `off' by default.
 
+    `mark-symlinked-directories'
+          If set to `on', completed names which are symbolic links to
+          directories have a slash appended (subject to the value of
+          `mark-directories').  The default is `off'.
+
+    `match-hidden-files'
+          This variable, when set to `on', causes Readline to match
+          files whose names begin with a `.' (hidden files) when
+          performing filename completion, unless the leading `.' is
+          supplied by the user in the filename to be completed.  This
+          variable is `on' by default.
+
     `output-meta'
           If set to `on', Readline will display characters with the
           eighth bit set directly rather than as a meta-prefixed escape
           sequence.  The default is `off'.
 
+    `page-completions'
+          If set to `on', Readline uses an internal `more'-like pager
+          to display a screenful of possible completions at a time.
+          This variable is `on' by default.
+
     `print-completions-horizontally'
           If set to `on', Readline will display completions with matches
           sorted horizontally in alphabetical order, rather than down
@@ -480,11 +515,14 @@
      command name, the default keybinding, if any, and a short
      description of what the command does.
 
-     Once you know the name of the command, simply place the name of
-     the key you wish to bind the command to, a colon, and then the
-     name of the command on a line in the init file.  The name of the
-     key can be expressed in different ways, depending on which is most
-     comfortable for you.
+     Once you know the name of the command, simply place on a line in
+     the init file the name of the key you wish to bind the command to,
+     a colon, and then the name of the command.  The name of the key
+     can be expressed in different ways, depending on what you find most
+     comfortable.
+
+     In addition to command names, readline allows keys to be bound to
+     a string that is inserted when the key is pressed (a MACRO).
 
     KEYNAME: FUNCTION-NAME or MACRO
           KEYNAME is the name of a key spelled out in English.  For
@@ -493,11 +531,16 @@
                Meta-Rubout: backward-kill-word
                Control-o: "> output"
 
-          In the above example, <C-u> is bound to the function
-          `universal-argument', and <C-o> is bound to run the macro
+          In the above example, `C-u' is bound to the function
+          `universal-argument', `M-DEL' is bound to the function
+          `backward-kill-word', and `C-o' is bound to run the macro
           expressed on the right hand side (that is, to insert the text
           `> output' into the line).
 
+          A number of symbolic character names are recognized while
+          processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+          NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
     "KEYSEQ": FUNCTION-NAME or MACRO
           KEYSEQ differs from KEYNAME above in that strings denoting an
           entire key sequence can be specified, by placing the key
@@ -509,11 +552,11 @@
                "\C-x\C-r": re-read-init-file
                "\e[11~": "Function Key 1"
 
-          In the above example, <C-u> is bound to the function
+          In the above example, `C-u' is again bound to the function
           `universal-argument' (just as it was in the first example),
-          `<C-x> <C-r>' is bound to the function `re-read-init-file',
-          and `<ESC> <[> <1> <1> <~>' is bound to insert the text
-          `Function Key 1'.
+          `C-x C-r' is bound to the function `re-read-init-file', and
+          `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
+          Key 1'.
 
      The following GNU Emacs style escape sequences are available when
      specifying key sequences:
@@ -564,13 +607,13 @@
           vertical tab
 
     `\NNN'
-          the character whose `ASCII' code is the octal value NNN (one
-          to three digits)
-
-    `\xNNN'
-          the character whose `ASCII' code is the hexadecimal value NNN
+          the eight-bit character whose value is the octal value NNN
           (one to three digits)
 
+    `\xHH'
+          the eight-bit character whose value is the hexadecimal value
+          HH (one or two hex digits)
+
      When entering the text of a macro, single or double quotes must be
      used to indicate a macro definition.  Unquoted text is assumed to
      be a function name.  In the macro body, the backslash escapes
@@ -617,10 +660,10 @@
           The APPLICATION construct is used to include
           application-specific settings.  Each program using the
           Readline library sets the APPLICATION NAME, and you can test
-          for it.  This could be used to bind key sequences to
-          functions useful for a specific program.  For instance, the
-          following command adds a key sequence that quotes the current
-          or previous word in Bash:
+          for a particular value.  This could be used to bind key
+          sequences to functions useful for a specific program.  For
+          instance, the following command adds a key sequence that
+          quotes the current or previous word in Bash:
                $if Bash
                # Quote the current or previous word
                "\C-xq": "\eb\"\ef\""
@@ -636,7 +679,8 @@
 
 `$include'
      This directive takes a single filename as an argument and reads
-     commands and bindings from that file.
+     commands and bindings from that file.  For example, the following
+     directive reads from `/etc/inputrc':
           $include /etc/inputrc
 
 
@@ -645,19 +689,19 @@
 Sample Init File
 ----------------
 
-   Here is an example of an inputrc file.  This illustrates key
+   Here is an example of an INPUTRC file.  This illustrates key
 binding, variable assignment, and conditional syntax.
 
 
      # This file controls the behaviour of line input editing for
-     # programs that use the Gnu Readline library.  Existing programs
-     # include FTP, Bash, and Gdb.
+     # programs that use the GNU Readline library.  Existing
+     # programs include FTP, Bash, and GDB.
      #
      # You can re-read the inputrc file with C-x C-r.
      # Lines beginning with '#' are comments.
      #
-     # First, include any systemwide bindings and variable assignments from
-     # /etc/Inputrc
+     # First, include any systemwide bindings and variable
+     # assignments from /etc/Inputrc
      $include /etc/Inputrc
      
      #
@@ -709,10 +753,12 @@
      $if Bash
      # edit the path
      "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-     # prepare to type a quoted word -- insert open and close double quotes
+     # prepare to type a quoted word --
+     # insert open and close double quotes
      # and move to just after the open quote
      "\C-x\"": "\"\"\C-b"
-     # insert a backslash (testing backslash escapes in sequences and macros)
+     # insert a backslash (testing backslash escapes
+     # in sequences and macros)
      "\C-x\\": "\\"
      # Quote the current or previous word
      "\C-xq": "\eb\"\ef\""
@@ -728,16 +774,16 @@
      # don't strip characters to 7 bits when reading
      set input-meta on
      
-     # allow iso-latin1 characters to be inserted rather than converted to
-     # prefix-meta sequences
+     # allow iso-latin1 characters to be inserted rather
+     # than converted to prefix-meta sequences
      set convert-meta off
      
-     # display characters with the eighth bit set directly rather than
-     # as meta-prefixed characters
+     # display characters with the eighth bit set directly
+     # rather than as meta-prefixed characters
      set output-meta on
      
-     # if there are more than 150 possible completions for a word, ask the
-     # user if he wants to see all of them
+     # if there are more than 150 possible completions for
+     # a word, ask the user if he wants to see all of them
      set completion-query-items 150
      
      # For FTP
@@ -765,13 +811,13 @@
 * Miscellaneous Commands::	Other miscellaneous commands.
 
    This section describes Readline commands that may be bound to key
-sequences.
+sequences.  Command names without an accompanying key sequence are
+unbound by default.
 
-   Command names without an accompanying key sequence are unbound by
-default.  In the following descriptions, POINT refers to the current
-cursor position, and MARK refers to a cursor position saved by the
+   In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the
 `set-mark' command.  The text between the point and mark is referred to
-as the REGION.
+as the "region".
 
 
 File: readline.info,  Node: Commands For Moving,  Next: Commands For History,  Up: Bindable Readline Commands
@@ -812,16 +858,18 @@
 Commands For Manipulating The History
 -------------------------------------
 
-`accept-line (Newline, Return)'
+`accept-line (Newline or Return)'
      Accept the line regardless of where the cursor is.  If this line is
-     non-empty, add it to the history list.  If this line was a history
-     line, then restore the history line to its original state.
+     non-empty, it may be added to the history list for future recall
+     with `add_history()'.  If this line is a modified history line,
+     the history line is restored to its original state.
 
 `previous-history (C-p)'
-     Move `up' through the history list.
+     Move `back' through the history list, fetching the previous
+     command.
 
 `next-history (C-n)'
-     Move `down' through the history list.
+     Move `forward' through the history list, fetching the next command.
 
 `beginning-of-history (M-<)'
      Move to the first line in the history.
@@ -861,12 +909,12 @@
 
 `yank-nth-arg (M-C-y)'
      Insert the first argument to the previous command (usually the
-     second word on the previous line).  With an argument N, insert the
-     Nth word from the previous command (the words in the previous
-     command begin with word 0).  A negative argument inserts the Nth
-     word from the end of the previous command.
+     second word on the previous line) at point.  With an argument N,
+     insert the Nth word from the previous command (the words in the
+     previous command begin with word 0).  A negative argument inserts
+     the Nth word from the end of the previous command.
 
-`yank-last-arg (M-., M-_)'
+`yank-last-arg (M-. or M-_)'
      Insert last argument to the previous command (the last word of the
      previous history entry).  With an argument, behave exactly like
      `yank-nth-arg'.  Successive calls to `yank-last-arg' move back
@@ -880,10 +928,9 @@
 --------------------------
 
 `delete-char (C-d)'
-     Delete the character under the cursor.  If the cursor is at the
-     beginning of the line, there are no characters in the line, and
-     the last character typed was not bound to `delete-char', then
-     return `EOF'.
+     Delete the character at point.  If point is at the beginning of
+     the line, there are no characters in the line, and the last
+     character typed was not bound to `delete-char', then return EOF.
 
 `backward-delete-char (Rubout)'
      Delete the character behind the cursor.  A numeric argument means
@@ -894,11 +941,11 @@
      end of the line, in which case the character behind the cursor is
      deleted.  By default, this is not bound to a key.
 
-`quoted-insert (C-q, C-v)'
+`quoted-insert (C-q or C-v)'
      Add the next character typed to the line verbatim.  This is how to
-     insert key sequences like <C-q>, for example.
+     insert key sequences like `C-q', for example.
 
-`tab-insert (M-TAB)'
+`tab-insert (M-<TAB>)'
      Insert a tab character.
 
 `self-insert (a, b, A, 1, !, ...)'
@@ -912,7 +959,8 @@
 
 `transpose-words (M-t)'
      Drag the word before point past the word after point, moving point
-     past that word as well.
+     past that word as well.  If the insertion point is at the end of
+     the line, this transposes the last two words on the line.
 
 `upcase-word (M-u)'
      Uppercase the current (or following) word.  With a negative
@@ -926,6 +974,20 @@
      Capitalize the current (or following) word.  With a negative
      argument, capitalize the previous word, but do not move the cursor.
 
+`overwrite-mode ()'
+     Toggle overwrite mode.  With an explicit positive numeric argument,
+     switches to overwrite mode.  With an explicit non-positive numeric
+     argument, switches to insert mode.  This command affects only
+     `emacs' mode; `vi' mode does overwrite differently.  Each call to
+     `readline()' starts in insert mode.
+
+     In overwrite mode, characters bound to `self-insert' replace the
+     text at point rather than pushing the text to the right.
+     Characters bound to `backward-delete-char' replace the character
+     before point with a space.
+
+     By default, this command is unbound.
+
 
 File: readline.info,  Node: Commands For Killing,  Next: Numeric Arguments,  Prev: Commands For Text,  Up: Bindable Readline Commands
 
@@ -942,15 +1004,15 @@
      Kill backward from the cursor to the beginning of the current line.
 
 `kill-whole-line ()'
-     Kill all characters on the current line, no matter point is.  By
-     default, this is unbound.
+     Kill all characters on the current line, no matter where point is.
+     By default, this is unbound.
 
 `kill-word (M-d)'
      Kill from point to the end of the current word, or if between
      words, to the end of the next word.  Word boundaries are the same
      as `forward-word'.
 
-`backward-kill-word (M-DEL)'
+`backward-kill-word (M-<DEL>)'
      Kill the word behind point.  Word boundaries are the same as
      `backward-word'.
 
@@ -981,12 +1043,11 @@
      command is unbound.
 
 `yank (C-y)'
-     Yank the top of the kill ring into the buffer at the current
-     cursor position.
+     Yank the top of the kill ring into the buffer at point.
 
 `yank-pop (M-y)'
      Rotate the kill-ring, and yank the new top.  You can only do this
-     if the prior command is yank or yank-pop.
+     if the prior command is `yank' or `yank-pop'.
 
 
 File: readline.info,  Node: Numeric Arguments,  Next: Commands For Completion,  Prev: Commands For Killing,  Up: Bindable Readline Commands
@@ -996,7 +1057,7 @@
 
 `digit-argument (M-0, M-1, ... M--)'
      Add this digit to the argument already accumulating, or start a new
-     argument.  <M-> starts a negative argument.
+     argument.  `M--' starts a negative argument.
 
 `universal-argument ()'
      This is another way to specify an argument.  If this command is
@@ -1017,17 +1078,13 @@
 Letting Readline Type For You
 -----------------------------
 
-`complete (TAB)'
-     Attempt to do completion on the text before the cursor.  This is
-     application-specific.  Generally, if you are typing a filename
-     argument, you can do filename completion; if you are typing a
-     command, you can do command completion; if you are typing in a
-     symbol to GDB, you can do symbol name completion; if you are
-     typing in a variable to Bash, you can do variable name completion,
-     and so on.
+`complete (<TAB>)'
+     Attempt to perform completion on the text before point.  The
+     actual completion performed is application-specific.  The default
+     is filename completion.
 
 `possible-completions (M-?)'
-     List the possible completions of the text before the cursor.
+     List the possible completions of the text before point.
 
 `insert-completions (M-*)'
      Insert all completions of the text before point that would have
@@ -1038,10 +1095,11 @@
      a single match from the list of possible completions.  Repeated
      execution of `menu-complete' steps through the list of possible
      completions, inserting each match in turn.  At the end of the list
-     of completions, the bell is rung and the original text is restored.
-     An argument of N moves N positions forward in the list of matches;
-     a negative argument may be used to move backward through the list.
-     This command is intended to be bound to `TAB', but is unbound by
+     of completions, the bell is rung (subject to the setting of
+     `bell-style') and the original text is restored.  An argument of N
+     moves N positions forward in the list of matches; a negative
+     argument may be used to move backward through the list.  This
+     command is intended to be bound to <TAB>, but is unbound by
      default.
 
 `delete-char-or-list ()'
@@ -1085,11 +1143,11 @@
      If the metafied character X is lowercase, run the command that is
      bound to the corresponding uppercase character.
 
-`prefix-meta (ESC)'
-     Make the next character typed be metafied.  This is for keyboards
-     without a meta key.  Typing `ESC f' is equivalent to typing `M-f'.
+`prefix-meta (<ESC>)'
+     Metafy the next character typed.  This is for keyboards without a
+     meta key.  Typing `<ESC> f' is equivalent to typing `M-f'.
 
-`undo (C-_, C-x C-u)'
+`undo (C-_ or C-x C-u)'
      Incremental undo, separately remembered for each line.
 
 `revert-line (M-r)'
@@ -1100,8 +1158,8 @@
      Perform tilde expansion on the current word.
 
 `set-mark (C-@)'
-     Set the mark to the current point.  If a numeric argument is
-     supplied, the mark is set to that position.
+     Set the mark to the point.  If a numeric argument is supplied, the
+     mark is set to that position.
 
 `exchange-point-and-mark (C-x C-x)'
      Swap the point with the mark.  The current cursor position is set
@@ -1119,9 +1177,14 @@
      occurrences.
 
 `insert-comment (M-#)'
-     The value of the `comment-begin' variable is inserted at the
-     beginning of the current line, and the line is accepted as if a
-     newline had been typed.
+     Without a numeric argument, the value of the `comment-begin'
+     variable is inserted at the beginning of the current line.  If a
+     numeric argument is supplied, this command acts as a toggle:  if
+     the characters at the beginning of the line do not match the value
+     of `comment-begin', the value is inserted, otherwise the
+     characters in `comment-begin' are deleted from the beginning of
+     the line.  In either case, the line is accepted as if a newline
+     had been typed.
 
 `dump-functions ()'
      Print all of the functions and their key bindings to the Readline
@@ -1137,9 +1200,17 @@
 
 `dump-macros ()'
      Print all of the Readline key sequences bound to macros and the
-     strings they ouput.  If a numeric argument is supplied, the output
-     is formatted in such a way that it can be made part of an INPUTRC
-     file.  This command is unbound by default.
+     strings they output.  If a numeric argument is supplied, the
+     output is formatted in such a way that it can be made part of an
+     INPUTRC file.  This command is unbound by default.
+
+`emacs-editing-mode (C-e)'
+     When in `vi' command mode, this causes a switch to `emacs' editing
+     mode.
+
+`vi-editing-mode (M-C-j)'
+     When in `emacs' editing mode, this causes a switch to `vi' editing
+     mode.
 
 
 File: readline.info,  Node: Readline vi Mode,  Prev: Bindable Readline Commands,  Up: Command Line Editing
@@ -1153,7 +1224,8 @@
 standard.
 
    In order to switch interactively between `emacs' and `vi' editing
-modes, use the command M-C-j (toggle-editing-mode).  The Readline
+modes, use the command `M-C-j' (bound to emacs-editing-mode when in
+`vi' mode and to vi-editing-mode in `emacs' mode).  The Readline
 default is `emacs' mode.
 
    When you enter a line in `vi' mode, you are already placed in
@@ -1166,8 +1238,7 @@
 aiding in the consitency of user interface across discrete programs
 that need to provide a command line interface.
 
-   Copyright (C) 1988, 1994, 1996, 1998, 1999 Free Software Foundation,
-Inc.
+   Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice pare
@@ -1218,14 +1289,15 @@
 `ftp', and `sh'.  For such programs, the default behaviour of Readline
 is sufficient.  This section describes how to use Readline in the
 simplest way possible, perhaps to replace calls in your code to
-`gets()' or `fgets ()'.
+`gets()' or `fgets()'.
 
-   The function `readline ()' prints a prompt and then reads and returns
-a single line of text from the user.  The line `readline' returns is
-allocated with `malloc ()'; you should `free ()' the line when you are
-done with it.  The declaration for `readline' in ANSI C is
+   The function `readline()' prints a prompt PROMPT and then reads and
+returns a single line of text from the user.  If PROMPT is `NULL' or
+the empty string, no prompt is displayed.  The line `readline' returns
+is allocated with `malloc()'; the caller should `free()' the line when
+it has finished with it.  The declaration for `readline' in ANSI C is
 
-     `char *readline (char *PROMPT);'
+     `char *readline (const char *PROMPT);'
 
 So, one might say
      `char *line = readline ("Enter a line: ");'
@@ -1238,8 +1310,8 @@
 Otherwise, the line is ended just as if a newline had been typed.
 
    If you want the user to be able to get at the line later, (with
-<C-p> for example), you must call `add_history ()' to save the line
-away in a "history" list of such lines.
+<C-p> for example), you must call `add_history()' to save the line away
+in a "history" list of such lines.
 
      `add_history (line)';
 
@@ -1247,18 +1319,19 @@
 
    It is preferable to avoid saving empty lines on the history list,
 since users rarely have a burning need to reuse a blank line.  Here is
-a function which usefully replaces the standard `gets ()' library
+a function which usefully replaces the standard `gets()' library
 function, and has the advantage of no static buffer to overflow:
 
      /* A static variable for holding the line. */
      static char *line_read = (char *)NULL;
      
-     /* Read a string, and return a pointer to it.  Returns NULL on EOF. */
+     /* Read a string, and return a pointer to it.
+        Returns NULL on EOF. */
      char *
      rl_gets ()
      {
-       /* If the buffer has already been allocated, return the memory
-          to the free pool. */
+       /* If the buffer has already been allocated,
+          return the memory to the free pool. */
        if (line_read)
          {
            free (line_read);
@@ -1268,7 +1341,8 @@
        /* Get a line from the user. */
        line_read = readline ("");
      
-       /* If the line has any text in it, save it on the history. */
+       /* If the line has any text in it,
+          save it on the history. */
        if (line_read && *line_read)
          add_history (line_read);
      
@@ -1278,23 +1352,23 @@
    This function gives the user the default behaviour of <TAB>
 completion: completion on file names.  If you do not want Readline to
 complete on filenames, you can change the binding of the <TAB> key with
-`rl_bind_key ()'.
+`rl_bind_key()'.
 
-     `int rl_bind_key (int KEY, int (*FUNCTION)());'
+     `int rl_bind_key (int KEY, rl_command_func_t *FUNCTION);'
 
-   `rl_bind_key ()' takes two arguments: KEY is the character that you
+   `rl_bind_key()' takes two arguments: KEY is the character that you
 want to bind, and FUNCTION is the address of the function to call when
-KEY is pressed.  Binding <TAB> to `rl_insert ()' makes <TAB> insert
-itself.  `rl_bind_key ()' returns non-zero if KEY is not a valid ASCII
+KEY is pressed.  Binding <TAB> to `rl_insert()' makes <TAB> insert
+itself.  `rl_bind_key()' returns non-zero if KEY is not a valid ASCII
 character code (between 0 and 255).
 
    Thus, to disable the default <TAB> behavior, the following suffices:
      `rl_bind_key ('\t', rl_insert);'
 
    This code should be executed once at the start of your program; you
-might write a function called `initialize_readline ()' which performs
+might write a function called `initialize_readline()' which performs
 this and other desired initializations, such as installing custom
-completers (*note Custom Completers::.).
+completers (*note Custom Completers::).
 
 
 File: readline.info,  Node: Custom Functions,  Next: Readline Variables,  Prev: Basic Behavior,  Up: Programming with GNU Readline
@@ -1315,45 +1389,87 @@
 `readline.h' use the `stdio' library, the file `<stdio.h>' should be
 included before `readline.h'.
 
+   `readline.h' defines a C preprocessor variable that should be
+treated as an integer, `RL_READLINE_VERSION', which may be used to
+conditionally compile application code depending on the installed
+Readline version.  The value is a hexadecimal encoding of the major and
+minor version numbers of the library, of the form 0xMMMM.  MM is the
+two-digit major version number; MM is the two-digit minor version
+number.  For Readline 4.2, for example, the value of
+`RL_READLINE_VERSION' would be `0x0402'.
+
 * Menu:
 
-* The Function Type::	C declarations to make code readable.
+* Readline Typedefs::	C declarations to make code readable.
 * Function Writing::	Variables and calling conventions.
 
 
-File: readline.info,  Node: The Function Type,  Next: Function Writing,  Up: Custom Functions
+File: readline.info,  Node: Readline Typedefs,  Next: Function Writing,  Up: Custom Functions
 
-The Function Type
+Readline Typedefs
 -----------------
 
-   For readabilty, we declare a new type of object, called "Function".
-A `Function' is a C function which returns an `int'.  The type
-declaration for `Function' is:
+   For readabilty, we declare a number of new object types, all pointers
+to functions.
 
-`typedef int Function ();'
+   The reason for declaring these new types is to make it easier to
+write code describing pointers to C functions with appropriately
+prototyped arguments and return values.
 
-   The reason for declaring this new type is to make it easier to write
-code describing pointers to C functions.  Let us say we had a variable
-called FUNC which was a pointer to a function.  Instead of the classic
-C declaration
+   For instance, say we want to declare a variable FUNC as a pointer to
+a function which takes two `int' arguments and returns an `int' (this
+is the type of all of the Readline bindable functions).  Instead of the
+classic C declaration
 
-   `int (*)()func;'
+   `int (*func)();'
+
+or the ANSI-C style declaration
+
+   `int (*func)(int, int);'
 
 we may write
 
-   `Function *func;'
+   `rl_command_func_t *func;'
 
-Similarly, there are
+   The full list of function pointer types available is
 
-     typedef void VFunction ();
-     typedef char *CPFunction (); and
-     typedef char **CPPFunction ();
+`typedef int rl_command_func_t (int, int);'
 
-for functions returning no value, `pointer to char', and `pointer to
-pointer to char', respectively.
+`typedef char *rl_compentry_func_t (const char *, int);'
 
+`typedef char **rl_completion_func_t (const char *, int, int);'
+
+`typedef char *rl_quote_func_t (char *, int, char *);'
+
+`typedef char *rl_dequote_func_t (char *, int);'
+
+`typedef int rl_compignore_func_t (char **);'
+
+`typedef void rl_compdisp_func_t (char **, int, int);'
+
+`typedef int rl_hook_func_t (void);'
+
+`typedef int rl_getc_func_t (FILE *);'
+
+`typedef int rl_linebuf_func_t (char *, int);'
+
+`typedef int rl_intfunc_t (int);'
+
+`#define rl_ivoidfunc_t rl_hook_func_t'
+
+`typedef int rl_icpfunc_t (char *);'
+
+`typedef int rl_icppfunc_t (char **);'
+
+`typedef void rl_voidfunc_t (void);'
+
+`typedef void rl_vintfunc_t (int);'
+
+`typedef void rl_vcpfunc_t (char *);'
+
+`typedef void rl_vcppfunc_t (char **);'
 
-File: readline.info,  Node: Function Writing,  Prev: The Function Type,  Up: Custom Functions
+File: readline.info,  Node: Function Writing,  Prev: Readline Typedefs,  Up: Custom Functions
 
 Writing a New Function
 ----------------------
@@ -1364,7 +1480,7 @@
 
    The calling sequence for a command `foo' looks like
 
-     `foo (int count, int key)'
+     `int foo (int count, int key)'
 
 where COUNT is the numeric argument (or 1 if defaulted) and KEY is the
 key that invoked this function.
@@ -1378,6 +1494,9 @@
 negative and positive arguments.  At the very least, it should be aware
 that it can be passed a negative argument.
 
+   A command function should return 0 if its action completes
+successfully, and a non-zero value if some error occurs.
+
 
 File: readline.info,  Node: Readline Variables,  Next: Readline Convenience Functions,  Prev: Custom Functions,  Up: Programming with GNU Readline
 
@@ -1394,7 +1513,7 @@
 
  - Variable: int rl_point
      The offset of the current cursor position in `rl_line_buffer' (the
-     *point*).
+     _point_).
 
  - Variable: int rl_end
      The number of characters present in `rl_line_buffer'.  When
@@ -1402,17 +1521,28 @@
      equal.
 
  - Variable: int rl_mark
-     The mark (saved position) in the current line.  If set, the mark
-     and point define a *region*.
+     The MARK (saved position) in the current line.  If set, the mark
+     and point define a _region_.
 
  - Variable: int rl_done
      Setting this to a non-zero value causes Readline to return the
      current line immediately.
 
+ - Variable: int rl_num_chars_to_read
+     Setting this to a positive value before calling `readline()' causes
+     Readline to return after accepting that many characters, rather
+     than reading up to a character bound to `accept-line'.
+
  - Variable: int rl_pending_input
      Setting this to a value makes it the next keystroke read.  This is
      a way to stuff a single character into the input stream.
 
+ - Variable: int rl_dispatching
+     Set to a non-zero value if a function is being called from a key
+     binding; zero otherwise.  Application functions can test this to
+     discover whether they were called directly or by Readline's
+     dispatching mechanism.
+
  - Variable: int rl_erase_empty_line
      Setting this to a non-zero value causes Readline to completely
      erase the current line, including any prompt, any time a newline
@@ -1421,7 +1551,9 @@
 
  - Variable: char * rl_prompt
      The prompt Readline uses.  This is set from the argument to
-     `readline ()', and should not be assigned to directly.
+     `readline()', and should not be assigned to directly.  The
+     `rl_set_prompt()' function (*note Redisplay::) may be used to
+     modify the prompt string after calling `readline()'.
 
  - Variable: int rl_already_prompted
      If an application wishes to display the prompt itself, rather than
@@ -1432,56 +1564,180 @@
      properly.  The calling application is responsible for managing the
      value; Readline never sets it.
 
- - Variable: char * rl_library_version
+ - Variable: const char * rl_library_version
      The version number of this revision of the library.
 
- - Variable: char * rl_terminal_name
-     The terminal type, used for initialization.
+ - Variable: int rl_readline_version
+     An integer encoding the current version of the library.  The
+     encoding is of the form 0xMMMM, where MM is the two-digit major
+     version number, and MM is the two-digit minor version number.  For
+     example, for Readline-4.2, `rl_readline_version' would have the
+     value 0x0402.
 
- - Variable: char * rl_readline_name
+ - Variable: int rl_gnu_readline_p
+     Always set to 1, denoting that this is GNU readline rather than
+     some emulation.
+
+ - Variable: const char * rl_terminal_name
+     The terminal type, used for initialization.  If not set by the
+     application, Readline sets this to the value of the `TERM'
+     environment variable the first time it is called.
+
+ - Variable: const char * rl_readline_name
      This variable is set to a unique name by each application using
      Readline.  The value allows conditional parsing of the inputrc file
-     (*note Conditional Init Constructs::.).
+     (*note Conditional Init Constructs::).
 
  - Variable: FILE * rl_instream
-     The stdio stream from which Readline reads input.
+     The stdio stream from which Readline reads input.  If `NULL',
+     Readline defaults to STDIN.
 
  - Variable: FILE * rl_outstream
-     The stdio stream to which Readline performs output.
+     The stdio stream to which Readline performs output.  If `NULL',
+     Readline defaults to STDOUT.
 
- - Variable: Function * rl_startup_hook
+ - Variable: rl_command_func_t * rl_last_func
+     The address of the last command function Readline executed.  May
+     be used to test whether or not a function is being executed twice
+     in succession, for example.
+
+ - Variable: rl_hook_func_t * rl_startup_hook
      If non-zero, this is the address of a function to call just before
      `readline' prints the first prompt.
 
- - Variable: Function * rl_pre_input_hook
+ - Variable: rl_hook_func_t * rl_pre_input_hook
      If non-zero, this is the address of a function to call after the
      first prompt has been printed and just before `readline' starts
      reading input characters.
 
- - Variable: Function * rl_event_hook
+ - Variable: rl_hook_func_t * rl_event_hook
      If non-zero, this is the address of a function to call periodically
-     when readline is waiting for terminal input.
+     when Readline is waiting for terminal input.  By default, this
+     will be called at most ten times a second if there is no keyboard
+     input.
 
- - Variable: Function * rl_getc_function
-     If non-zero, `readline' will call indirectly through this pointer
-     to get a character from the input stream.  By default, it is set to
-     `rl_getc', the default `readline' character input function (*note
-     Utility Functions::.).
+ - Variable: rl_getc_func_t * rl_getc_function
+     If non-zero, Readline will call indirectly through this pointer to
+     get a character from the input stream.  By default, it is set to
+     `rl_getc', the default Readline character input function (*note
+     Character Input::).
 
- - Variable: VFunction * rl_redisplay_function
-     If non-zero, `readline' will call indirectly through this pointer
-     to update the display with the current contents of the editing
-     buffer.  By default, it is set to `rl_redisplay', the default
-     `readline' redisplay function (*note Redisplay::.).
+ - Variable: rl_voidfunc_t * rl_redisplay_function
+     If non-zero, Readline will call indirectly through this pointer to
+     update the display with the current contents of the editing buffer.
+     By default, it is set to `rl_redisplay', the default Readline
+     redisplay function (*note Redisplay::).
+
+ - Variable: rl_vintfunc_t * rl_prep_term_function
+     If non-zero, Readline will call indirectly through this pointer to
+     initialize the terminal.  The function takes a single argument, an
+     `int' flag that says whether or not to use eight-bit characters.
+     By default, this is set to `rl_prep_terminal' (*note Terminal
+     Management::).
+
+ - Variable: rl_voidfunc_t * rl_deprep_term_function
+     If non-zero, Readline will call indirectly through this pointer to
+     reset the terminal.  This function should undo the effects of
+     `rl_prep_term_function'.  By default, this is set to
+     `rl_deprep_terminal' (*note Terminal Management::).
 
  - Variable: Keymap rl_executing_keymap
-     This variable is set to the keymap (*note Keymaps::.) in which the
+     This variable is set to the keymap (*note Keymaps::) in which the
      currently executing readline function was found.
 
  - Variable: Keymap rl_binding_keymap
-     This variable is set to the keymap (*note Keymaps::.) in which the
+     This variable is set to the keymap (*note Keymaps::) in which the
      last key binding occurred.
 
+ - Variable: char * rl_executing_macro
+     This variable is set to the text of any currently-executing macro.
+
+ - Variable: int rl_readline_state
+     A variable with bit values that encapsulate the current Readline
+     state.  A bit is set with the `RL_SETSTATE' macro, and unset with
+     the `RL_UNSETSTATE' macro.  Use the `RL_ISSTATE' macro to test
+     whether a particular state bit is set.  Current state bits include:
+
+    `RL_STATE_NONE'
+          Readline has not yet been called, nor has it begun to
+          intialize.
+
+    `RL_STATE_INITIALIZING'
+          Readline is initializing its internal data structures.
+
+    `RL_STATE_INITIALIZED'
+          Readline has completed its initialization.
+
+    `RL_STATE_TERMPREPPED'
+          Readline has modified the terminal modes to do its own input
+          and redisplay.
+
+    `RL_STATE_READCMD'
+          Readline is reading a command from the keyboard.
+
+    `RL_STATE_METANEXT'
+          Readline is reading more input after reading the meta-prefix
+          character.
+
+    `RL_STATE_DISPATCHING'
+          Readline is dispatching to a command.
+
+    `RL_STATE_MOREINPUT'
+          Readline is reading more input while executing an editing
+          command.
+
+    `RL_STATE_ISEARCH'
+          Readline is performing an incremental history search.
+
+    `RL_STATE_NSEARCH'
+          Readline is performing a non-incremental history search.
+
+    `RL_STATE_SEARCH'
+          Readline is searching backward or forward through the history
+          for a string.
+
+    `RL_STATE_NUMERICARG'
+          Readline is reading a numeric argument.
+
+    `RL_STATE_MACROINPUT'
+          Readline is currently getting its input from a
+          previously-defined keyboard macro.
+
+    `RL_STATE_MACRODEF'
+          Readline is currently reading characters defining a keyboard
+          macro.
+
+    `RL_STATE_OVERWRITE'
+          Readline is in overwrite mode.
+
+    `RL_STATE_COMPLETING'
+          Readline is performing word completion.
+
+    `RL_STATE_SIGHANDLER'
+          Readline is currently executing the readline signal handler.
+
+    `RL_STATE_UNDOING'
+          Readline is performing an undo.
+
+    `RL_STATE_DONE'
+          Readline has read a key sequence bound to `accept-line' and
+          is about to return the line to the caller.
+
+
+ - Variable: int rl_explicit_arg
+     Set to a non-zero value if an explicit numeric argument was
+     specified by the user.  Only valid in a bindable command function.
+
+ - Variable: int rl_numeric_arg
+     Set to the value of any numeric argument explicitly specified by
+     the user before executing the current Readline function.  Only
+     valid in a bindable command function.
+
+ - Variable: int rl_editing_mode
+     Set to a value denoting Readline's current editing mode.  A value
+     of 1 means Readline is currently in emacs mode; 0 means that vi
+     mode is active.
+
 
 File: readline.info,  Node: Readline Convenience Functions,  Next: Readline Signal Handling,  Prev: Readline Variables,  Up: Programming with GNU Readline
 
@@ -1498,8 +1754,12 @@
 * Allowing Undoing::	How to make your functions undoable.
 * Redisplay::		Functions to control line display.
 * Modifying Text::	Functions to modify `rl_line_buffer'.
+* Character Input::	Functions to read keyboard input.
+* Terminal Management::	Functions to manage terminal settings.
 * Utility Functions::	Generally useful functions and hooks.
+* Miscellaneous Functions::	Functions that don't fall into any category.
 * Alternate Interface::	Using Readline in a `callback' fashion.
+* A Readline Example::		An example Readline function.
 
 
 File: readline.info,  Node: Function Naming,  Next: Keymaps,  Up: Readline Convenience Functions
@@ -1515,14 +1775,15 @@
      Meta-Rubout:	backward-kill-word
 
    This binds the keystroke <Meta-Rubout> to the function
-*descriptively* named `backward-kill-word'.  You, as the programmer,
+_descriptively_ named `backward-kill-word'.  You, as the programmer,
 should bind the functions you write to descriptive names as well.
 Readline provides a function for doing that:
 
- - Function: int rl_add_defun (char *name, Function *function, int key)
+ - Function: int rl_add_defun (const char *name, rl_command_func_t
+          *function, int key)
      Add NAME to the list of named functions.  Make FUNCTION be the
      function that gets called.  If KEY is not -1, then bind it to
-     FUNCTION using `rl_bind_key ()'.
+     FUNCTION using `rl_bind_key()'.
 
    Using this function alone is sufficient for most applications.  It is
 the recommended way to add a few functions to the default functions that
@@ -1541,15 +1802,15 @@
 get run.  You can make your own keymaps, copy existing keymaps, and tell
 Readline which keymap to use.
 
- - Function: Keymap rl_make_bare_keymap ()
+ - Function: Keymap rl_make_bare_keymap (void)
      Returns a new, empty keymap.  The space for the keymap is
-     allocated with `malloc ()'; you should `free ()' it when you are
-     done.
+     allocated with `malloc()'; the caller should free it by calling
+     `rl_discard_keymap()' when done.
 
  - Function: Keymap rl_copy_keymap (Keymap map)
      Return a new keymap which is a copy of MAP.
 
- - Function: Keymap rl_make_keymap ()
+ - Function: Keymap rl_make_keymap (void)
      Return a new keymap with the printing characters bound to
      rl_insert, the lowercase Meta characters bound to run their
      equivalents, and the Meta digits bound to produce numeric
@@ -1561,21 +1822,21 @@
    Readline has several internal keymaps.  These functions allow you to
 change which keymap is active.
 
- - Function: Keymap rl_get_keymap ()
+ - Function: Keymap rl_get_keymap (void)
      Returns the currently active keymap.
 
  - Function: void rl_set_keymap (Keymap keymap)
      Makes KEYMAP the currently active keymap.
 
- - Function: Keymap rl_get_keymap_by_name (char *name)
+ - Function: Keymap rl_get_keymap_by_name (const char *name)
      Return the keymap matching NAME.  NAME is one which would be
      supplied in a `set keymap' inputrc line (*note Readline Init
-     File::.).
+     File::).
 
  - Function: char * rl_get_keymap_name (Keymap keymap)
      Return the name matching KEYMAP.  NAME is one which would be
      supplied in a `set keymap' inputrc line (*note Readline Init
-     File::.).
+     File::).
 
 
 File: readline.info,  Node: Binding Keys,  Next: Associating Function Names and Bindings,  Prev: Keymaps,  Up: Readline Convenience Functions
@@ -1583,27 +1844,27 @@
 Binding Keys
 ------------
 
-   You associate keys with functions through the keymap.  Readline has
-several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap',
-`emacs_ctlx_keymap', `vi_movement_keymap', and `vi_insertion_keymap'.
-`emacs_standard_keymap' is the default, and the examples in this manual
-assume that.
+   Key sequences are associate with functions through the keymap.
+Readline has several internal keymaps: `emacs_standard_keymap',
+`emacs_meta_keymap', `emacs_ctlx_keymap', `vi_movement_keymap', and
+`vi_insertion_keymap'.  `emacs_standard_keymap' is the default, and the
+examples in this manual assume that.
 
-   Since `readline' installs a set of default key bindings the first
+   Since `readline()' installs a set of default key bindings the first
 time it is called, there is always the danger that a custom binding
-installed before the first call to `readline' will be overridden.  An
+installed before the first call to `readline()' will be overridden.  An
 alternate mechanism is to install custom key bindings in an
 initialization function assigned to the `rl_startup_hook' variable
-(*note Readline Variables::.).
+(*note Readline Variables::).
 
    These functions manage key bindings.
 
- - Function: int rl_bind_key (int key, Function *function)
+ - Function: int rl_bind_key (int key, rl_command_func_t *function)
      Binds KEY to FUNCTION in the currently active keymap.  Returns
      non-zero in the case of an invalid KEY.
 
- - Function: int rl_bind_key_in_map (int key, Function *function,
-          Keymap map)
+ - Function: int rl_bind_key_in_map (int key, rl_command_func_t
+          *function, Keymap map)
      Bind KEY to FUNCTION in MAP.  Returns non-zero in the case of an
      invalid KEY.
 
@@ -1615,15 +1876,22 @@
      Bind KEY to the null function in MAP.  Returns non-zero in case of
      error.
 
- - Function: int rl_unbind_function_in_map (Function *function, Keymap
-          map)
+ - Function: int rl_unbind_function_in_map (rl_command_func_t
+          *function, Keymap map)
      Unbind all keys that execute FUNCTION in MAP.
 
- - Function: int rl_unbind_command_in_map (char *command, Keymap map)
+ - Function: int rl_unbind_command_in_map (const char *command, Keymap
+          map)
      Unbind all keys that are bound to COMMAND in MAP.
 
- - Function: int rl_generic_bind (int type, char *keyseq, char *data,
-          Keymap map)
+ - Function: int rl_set_key (const char *keyseq, rl_command_func_t
+          *function, Keymap map)
+     Bind the key sequence represented by the string KEYSEQ to the
+     function FUNCTION.  This makes new keymaps as necessary.  The
+     initial keymap in which to do bindings is MAP.
+
+ - Function: int rl_generic_bind (int type, const char *keyseq, char
+          *data, Keymap map)
      Bind the key sequence represented by the string KEYSEQ to the
      arbitrary pointer DATA.  TYPE says what kind of data is pointed to
      by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or
@@ -1633,11 +1901,11 @@
  - Function: int rl_parse_and_bind (char *line)
      Parse LINE as if it had been read from the `inputrc' file and
      perform any key bindings and variable assignments found (*note
-     Readline Init File::.).
+     Readline Init File::).
 
- - Function: int rl_read_init_file (char *filename)
+ - Function: int rl_read_init_file (const char *filename)
      Read keybindings and variable assignments from FILENAME (*note
-     Readline Init File::.).
+     Readline Init File::).
 
 
 File: readline.info,  Node: Associating Function Names and Bindings,  Next: Allowing Undoing,  Prev: Binding Keys,  Up: Readline Convenience Functions
@@ -1646,24 +1914,25 @@
 ---------------------------------------
 
    These functions allow you to find out what keys invoke named
-functions and the functions invoked by a particular key sequence.
+functions and the functions invoked by a particular key sequence.  You
+may also associate a new function name with an arbitrary function.
 
- - Function: Function * rl_named_function (char *name)
+ - Function: rl_command_func_t * rl_named_function (const char *name)
      Return the function with name NAME.
 
- - Function: Function * rl_function_of_keyseq (char *keyseq, Keymap
-          map, int *type)
+ - Function: rl_command_func_t * rl_function_of_keyseq (const char
+          *keyseq, Keymap map, int *type)
      Return the function invoked by KEYSEQ in keymap MAP.  If MAP is
-     NULL, the current keymap is used.  If TYPE is not NULL, the type
-     of the object is returned in it (one of `ISFUNC', `ISKMAP', or
-     `ISMACR').
+     `NULL', the current keymap is used.  If TYPE is not `NULL', the
+     type of the object is returned in the `int' variable it points to
+     (one of `ISFUNC', `ISKMAP', or `ISMACR').
 
- - Function: char ** rl_invoking_keyseqs (Function *function)
+ - Function: char ** rl_invoking_keyseqs (rl_command_func_t *function)
      Return an array of strings representing the key sequences used to
      invoke FUNCTION in the current keymap.
 
- - Function: char ** rl_invoking_keyseqs_in_map (Function *function,
-          Keymap map)
+ - Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t
+          *function, Keymap map)
      Return an array of strings representing the key sequences used to
      invoke FUNCTION in the keymap MAP.
 
@@ -1673,15 +1942,20 @@
      list is formatted in such a way that it can be made part of an
      `inputrc' file and re-read.
 
- - Function: void rl_list_funmap_names ()
+ - Function: void rl_list_funmap_names (void)
      Print the names of all bindable Readline functions to
      `rl_outstream'.
 
- - Function: char ** rl_funmap_names ()
+ - Function: const char ** rl_funmap_names (void)
      Return a NULL terminated array of known function names.  The array
      is sorted.  The array itself is allocated, but not the strings
-     inside.  You should free () the array when you done, but not the
-     pointrs.
+     inside.  You should `free()' the array when you are done, but not
+     the pointers.
+
+ - Function: int rl_add_funmap_entry (const char *name,
+          rl_command_func_t *function)
+     Add NAME to the list of bindable Readline command names, and make
+     FUNCTION the function to be called when NAME is invoked.
 
 
 File: readline.info,  Node: Allowing Undoing,  Next: Redisplay,  Prev: Associating Function Names and Bindings,  Up: Readline Convenience Functions
@@ -1691,17 +1965,16 @@
 
    Supporting the undo command is a painless thing, and makes your
 functions much more useful.  It is certainly easy to try something if
-you know you can undo it.  I could use an undo function for the stock
-market.
+you know you can undo it.
 
    If your function simply inserts text once, or deletes text once, and
-uses `rl_insert_text ()' or `rl_delete_text ()' to do it, then undoing
-is already done for you automatically.
+uses `rl_insert_text()' or `rl_delete_text()' to do it, then undoing is
+already done for you automatically.
 
    If you do multiple insertions or multiple deletions, or any
 combination of these operations, you should group them together into
-one operation.  This is done with `rl_begin_undo_group ()' and
-`rl_end_undo_group ()'.
+one operation.  This is done with `rl_begin_undo_group()' and
+`rl_end_undo_group()'.
 
    The types of events that can be undone are:
 
@@ -1709,34 +1982,34 @@
 
    Notice that `UNDO_DELETE' means to insert some text, and
 `UNDO_INSERT' means to delete some text.  That is, the undo code tells
-undo what to undo, not how to undo it.  `UNDO_BEGIN' and `UNDO_END' are
-tags added by `rl_begin_undo_group ()' and `rl_end_undo_group ()'.
+what to undo, not how to undo it.  `UNDO_BEGIN' and `UNDO_END' are tags
+added by `rl_begin_undo_group()' and `rl_end_undo_group()'.
 
- - Function: int rl_begin_undo_group ()
+ - Function: int rl_begin_undo_group (void)
      Begins saving undo information in a group construct.  The undo
-     information usually comes from calls to `rl_insert_text ()' and
-     `rl_delete_text ()', but could be the result of calls to
-     `rl_add_undo ()'.
+     information usually comes from calls to `rl_insert_text()' and
+     `rl_delete_text()', but could be the result of calls to
+     `rl_add_undo()'.
 
- - Function: int rl_end_undo_group ()
+ - Function: int rl_end_undo_group (void)
      Closes the current undo group started with `rl_begin_undo_group
-     ()'.  There should be one call to `rl_end_undo_group ()' for each
-     call to `rl_begin_undo_group ()'.
+     ()'.  There should be one call to `rl_end_undo_group()' for each
+     call to `rl_begin_undo_group()'.
 
  - Function: void rl_add_undo (enum undo_code what, int start, int end,
           char *text)
      Remember how to undo an event (according to WHAT).  The affected
      text runs from START to END, and encompasses TEXT.
 
- - Function: void free_undo_list ()
+ - Function: void rl_free_undo_list (void)
      Free the existing undo list.
 
- - Function: int rl_do_undo ()
+ - Function: int rl_do_undo (void)
      Undo the first thing on the undo list.  Returns `0' if there was
      nothing to undo, non-zero if something was undone.
 
    Finally, if you neither insert nor delete text, but directly modify
-the existing text (e.g., change its case), call `rl_modifying ()' once,
+the existing text (e.g., change its case), call `rl_modifying()' once,
 just before you modify the text.  You must supply the indices of the
 text range that you are going to modify.
 
@@ -1751,56 +2024,84 @@
 Redisplay
 ---------
 
- - Function: void rl_redisplay ()
+ - Function: void rl_redisplay (void)
      Change what's displayed on the screen to reflect the current
      contents of `rl_line_buffer'.
 
- - Function: int rl_forced_update_display ()
+ - Function: int rl_forced_update_display (void)
      Force the line to be updated and redisplayed, whether or not
      Readline thinks the screen display is correct.
 
- - Function: int rl_on_new_line ()
+ - Function: int rl_on_new_line (void)
      Tell the update functions that we have moved onto a new (empty)
      line, usually after ouputting a newline.
 
- - Function: int rl_on_new_line_with_prompt ()
+ - Function: int rl_on_new_line_with_prompt (void)
      Tell the update functions that we have moved onto a new line, with
      RL_PROMPT already displayed.  This could be used by applications
      that want to output the prompt string themselves, but still need
      Readline to know the prompt string length for redisplay.  It
      should be used after setting RL_ALREADY_PROMPTED.
 
- - Function: int rl_reset_line_state ()
+ - Function: int rl_reset_line_state (void)
      Reset the display state to a clean state and redisplay the current
      line starting on a new line.
 
- - Function: int rl_message (va_alist)
-     The arguments are a string as would be supplied to `printf'.  The
-     resulting string is displayed in the "echo area".  The echo area
-     is also used to display numeric arguments and search strings.
+ - Function: int rl_crlf (void)
+     Move the cursor to the start of the next screen line.
 
- - Function: int rl_clear_message ()
+ - Function: int rl_show_char (int c)
+     Display character C on `rl_outstream'.  If Readline has not been
+     set to display meta characters directly, this will convert meta
+     characters to a meta-prefixed key sequence.  This is intended for
+     use by applications which wish to do their own redisplay.
+
+ - Function: int rl_message (const char *, ...)
+     The arguments are a format string as would be supplied to `printf',
+     possibly containing conversion specifications such as `%d', and
+     any additional arguments necessary to satisfy the conversion
+     specifications.  The resulting string is displayed in the "echo
+     area".  The echo area is also used to display numeric arguments
+     and search strings.
+
+ - Function: int rl_clear_message (void)
      Clear the message in the echo area.
 
- - Function: void rl_save_prompt ()
+ - Function: void rl_save_prompt (void)
      Save the local Readline prompt display state in preparation for
-     displaying a new message in the message area with `rl_message'.
+     displaying a new message in the message area with `rl_message()'.
 
- - Function: void rl_restore_prompt ()
+ - Function: void rl_restore_prompt (void)
      Restore the local Readline prompt display state saved by the most
      recent call to `rl_save_prompt'.
 
+ - Function: int rl_expand_prompt (char *prompt)
+     Expand any special character sequences in PROMPT and set up the
+     local Readline prompt redisplay variables.  This function is
+     called by `readline()'.  It may also be called to expand the
+     primary prompt if the `rl_on_new_line_with_prompt()' function or
+     `rl_already_prompted' variable is used.  It returns the number of
+     visible characters on the last line of the (possibly multi-line)
+     prompt.
+
+ - Function: int rl_set_prompt (const char *prompt)
+     Make Readline use PROMPT for subsequent redisplay.  This calls
+     `rl_expand_prompt()' to expand the prompt and sets `rl_prompt' to
+     the result.
+
 
-File: readline.info,  Node: Modifying Text,  Next: Utility Functions,  Prev: Redisplay,  Up: Readline Convenience Functions
+File: readline.info,  Node: Modifying Text,  Next: Character Input,  Prev: Redisplay,  Up: Readline Convenience Functions
 
 Modifying Text
 --------------
 
- - Function: int rl_insert_text (char *text)
-     Insert TEXT into the line at the current cursor position.
+ - Function: int rl_insert_text (const char *text)
+     Insert TEXT into the line at the current cursor position.  Returns
+     the number of characters inserted.
 
  - Function: int rl_delete_text (int start, int end)
      Delete the text between START and END in the current line.
+     Returns the number of characters deleted.
 
  - Function: char * rl_copy_text (int start, int end)
      Return a copy of the text between START and END in the current
@@ -1813,48 +2114,105 @@
      less than END, the text is appended, otherwise prepended.  If the
      last command was not a kill, a new kill ring slot is used.
 
+ - Function: int rl_push_macro_input (char *macro)
+     Cause MACRO to be inserted into the line, as if it had been invoked
+     by a key bound to a macro.  Not especially useful; use
+     `rl_insert_text()' instead.
+
 
-File: readline.info,  Node: Utility Functions,  Next: Alternate Interface,  Prev: Modifying Text,  Up: Readline Convenience Functions
+File: readline.info,  Node: Character Input,  Next: Terminal Management,  Prev: Modifying Text,  Up: Readline Convenience Functions
 
-Utility Functions
------------------
+Character Input
+---------------
 
- - Function: int rl_read_key ()
-     Return the next character available.  This handles input inserted
-     into the input stream via PENDING INPUT (*note Readline
-     Variables::.)  and `rl_stuff_char ()', macros, and characters read
-     from the keyboard.
+ - Function: int rl_read_key (void)
+     Return the next character available from Readline's current input
+     stream.  This handles input inserted into the input stream via
+     RL_PENDING_INPUT (*note Readline Variables::) and
+     `rl_stuff_char()', macros, and characters read from the keyboard.
+     While waiting for input, this function will call any function
+     assigned to the `rl_event_hook' variable.
 
- - Function: int rl_getc (FILE *)
-     Return the next character available from the keyboard.
+ - Function: int rl_getc (FILE *stream)
+     Return the next character available from STREAM, which is assumed
+     to be the keyboard.
 
  - Function: int rl_stuff_char (int c)
      Insert C into the Readline input stream.  It will be "read" before
      Readline attempts to read characters from the terminal with
-     `rl_read_key ()'.
+     `rl_read_key()'.  Up to 512 characters may be pushed back.
+     `rl_stuff_char' returns 1 if the character was successfully
+     inserted; 0 otherwise.
+
+ - Function: int rl_execute_next (int c)
+     Make C be the next command to be executed when `rl_read_key()' is
+     called.  This sets RL_PENDING_INPUT.
+
+ - Function: int rl_clear_pending_input (void)
+     Unset RL_PENDING_INPUT, effectively negating the effect of any
+     previous call to `rl_execute_next()'.  This works only if the
+     pending input has not already been read with `rl_read_key()'.
+
+ - Function: int rl_set_keyboard_input_timeout (int u)
+     While waiting for keyboard input in `rl_read_key()', Readline will
+     wait for U microseconds for input before calling any function
+     assigned to `rl_event_hook'.  The default waiting period is
+     one-tenth of a second.  Returns the old timeout value.
+
+
+File: readline.info,  Node: Terminal Management,  Next: Utility Functions,  Prev: Character Input,  Up: Readline Convenience Functions
+
+Terminal Management
+-------------------
+
+ - Function: void rl_prep_terminal (int meta_flag)
+     Modify the terminal settings for Readline's use, so `readline()'
+     can read a single character at a time from the keyboard.  The
+     META_FLAG argument should be non-zero if Readline should read
+     eight-bit input.
+
+ - Function: void rl_deprep_terminal (void)
+     Undo the effects of `rl_prep_terminal()', leaving the terminal in
+     the state in which it was before the most recent call to
+     `rl_prep_terminal()'.
+
+ - Function: void rl_tty_set_default_bindings (Keymap kmap)
+     Read the operating system's terminal editing characters (as would
+     be displayed by `stty') to their Readline equivalents.  The
+     bindings are performed in KMAP.
+
+ - Function: int rl_reset_terminal (const char *terminal_name)
+     Reinitialize Readline's idea of the terminal settings using
+     TERMINAL_NAME as the terminal type (e.g., `vt100').  If
+     TERMINAL_NAME is `NULL', the value of the `TERM' environment
+     variable is used.
+
+
+File: readline.info,  Node: Utility Functions,  Next: Miscellaneous Functions,  Prev: Terminal Management,  Up: Readline Convenience Functions
+
+Utility Functions
+-----------------
+
+ - Function: void rl_replace_line (const char *text, int clear_undo)
+     Replace the contents of `rl_line_buffer' with TEXT.  The point and
+     mark are preserved, if possible.  If CLEAR_UNDO is non-zero, the
+     undo list associated with the current line is cleared.
 
  - Function: int rl_extend_line_buffer (int len)
      Ensure that `rl_line_buffer' has enough space to hold LEN
      characters, possibly reallocating it if necessary.
 
- - Function: int rl_initialize ()
-     Initialize or re-initialize Readline's internal state.
+ - Function: int rl_initialize (void)
+     Initialize or re-initialize Readline's internal state.  It's not
+     strictly necessary to call this; `readline()' calls it before
+     reading any input.
 
- - Function: int rl_reset_terminal (char *terminal_name)
-     Reinitialize Readline's idea of the terminal settings using
-     TERMINAL_NAME as the terminal type (e.g., `vt100').  If
-     TERMINAL_NAME is NULL, the value of the `TERM' environment
-     variable is used.
-
- - Function: int alphabetic (int c)
-     Return 1 if C is an alphabetic character.
-
- - Function: int numeric (int c)
-     Return 1 if C is a numeric character.
-
- - Function: int ding ()
+ - Function: int rl_ding (void)
      Ring the terminal bell, obeying the setting of `bell-style'.
 
+ - Function: int rl_alphabetic (int c)
+     Return 1 if C is an alphabetic character.
+
  - Function: void rl_display_match_list (char **matches, int len, int
           max)
      A convenience function for displaying a list of strings in
@@ -1863,32 +2221,77 @@
      `len' is the number of strings in `matches', and `max' is the
      length of the longest string in `matches'.  This function uses the
      setting of `print-completions-horizontally' to select how the
-     matches are displayed (*note Readline Init File Syntax::.).
+     matches are displayed (*note Readline Init File Syntax::).
 
-   The following are implemented as macros, defined in `chartypes.h'.
+   The following are implemented as macros, defined in `chardefs.h'.
+Applications should refrain from using them.
 
- - Function: int uppercase_p (int c)
+ - Function: int _rl_uppercase_p (int c)
      Return 1 if C is an uppercase alphabetic character.
 
- - Function: int lowercase_p (int c)
+ - Function: int _rl_lowercase_p (int c)
      Return 1 if C is a lowercase alphabetic character.
 
- - Function: int digit_p (int c)
+ - Function: int _rl_digit_p (int c)
      Return 1 if C is a numeric character.
 
- - Function: int to_upper (int c)
+ - Function: int _rl_to_upper (int c)
      If C is a lowercase alphabetic character, return the corresponding
      uppercase character.
 
- - Function: int to_lower (int c)
+ - Function: int _rl_to_lower (int c)
      If C is an uppercase alphabetic character, return the corresponding
      lowercase character.
 
- - Function: int digit_value (int c)
+ - Function: int _rl_digit_value (int c)
      If C is a number, return the value it represents.
 
 
-File: readline.info,  Node: Alternate Interface,  Prev: Utility Functions,  Up: Readline Convenience Functions
+File: readline.info,  Node: Miscellaneous Functions,  Next: Alternate Interface,  Prev: Utility Functions,  Up: Readline Convenience Functions
+
+Miscellaneous Functions
+-----------------------
+
+ - Function: int rl_macro_bind (const char *keyseq, const char *macro,
+          Keymap map)
+     Bind the key sequence KEYSEQ to invoke the macro MACRO.  The
+     binding is performed in MAP.  When KEYSEQ is invoked, the MACRO
+     will be inserted into the line.  This function is deprecated; use
+     `rl_generic_bind()' instead.
+
+ - Function: void rl_macro_dumper (int readable)
+     Print the key sequences bound to macros and their values, using
+     the current keymap, to `rl_outstream'.  If READABLE is non-zero,
+     the list is formatted in such a way that it can be made part of an
+     `inputrc' file and re-read.
+
+ - Function: int rl_variable_bind (const char *variable, const char
+          *value)
+     Make the Readline variable VARIABLE have VALUE.  This behaves as
+     if the readline command `set VARIABLE VALUE' had been executed in
+     an `inputrc' file (*note Readline Init File Syntax::).
+
+ - Function: void rl_variable_dumper (int readable)
+     Print the readline variable names and their current values to
+     `rl_outstream'.  If READABLE is non-zero, the list is formatted in
+     such a way that it can be made part of an `inputrc' file and
+     re-read.
+
+ - Function: int rl_set_paren_blink_timeout (int u)
+     Set the time interval (in microseconds) that Readline waits when
+     showing a balancing character when `blink-matching-paren' has been
+     enabled.
+
+ - Function: char * rl_get_termcap (const char *cap)
+     Retrieve the string value of the termcap capability CAP.  Readline
+     fetches the termcap entry for the current terminal name and uses
+     those capabilities to move around the screen line and perform other
+     terminal-specific operations, like erasing a line.  Readline does
+     not use all of a terminal's capabilities, and this function will
+     return values for only those capabilities Readline uses.
+
+
+File: readline.info,  Node: Alternate Interface,  Next: A Readline Example,  Prev: Miscellaneous Functions,  Up: Readline Convenience Functions
 
 Alternate Interface
 -------------------
@@ -1900,28 +2303,39 @@
 be invoked as a `callback' function from an event loop.  There are
 functions available to make this easy.
 
- - Function: void rl_callback_handler_install (char *prompt, Vfunction
-          *lhandler)
+ - Function: void rl_callback_handler_install (const char *prompt,
+          rl_vcpfunc_t *lhandler)
      Set up the terminal for readline I/O and display the initial
      expanded value of PROMPT.  Save the value of LHANDLER to use as a
-     callback when a complete line of input has been entered.
+     function to call when a complete line of input has been entered.
+     The function takes the text of the line as an argument.
 
- - Function: void rl_callback_read_char ()
+ - Function: void rl_callback_read_char (void)
      Whenever an application determines that keyboard input is
      available, it should call `rl_callback_read_char()', which will
      read the next character from the current input source.  If that
      character completes the line, `rl_callback_read_char' will invoke
      the LHANDLER function saved by `rl_callback_handler_install' to
-     process the line.  `EOF' is  indicated by calling LHANDLER with a
-     `NULL' line.
+     process the line.  Before calling the LHANDLER function, the
+     terminal settings are reset to the values they had before calling
+     `rl_callback_handler_install'.  If the LHANDLER function returns,
+     the terminal settings are modified for Readline's use again.
+     `EOF' is  indicated by calling LHANDLER with a `NULL' line.
 
- - Function: void rl_callback_handler_remove ()
+ - Function: void rl_callback_handler_remove (void)
      Restore the terminal to its initial state and remove the line
      handler.  This may be called from within a callback as well as
-     independently.
+     independently.  If the LHANDLER installed by
+     `rl_callback_handler_install' does not exit the program, either
+     this function or the function referred to by the value of
+     `rl_deprep_term_function' should be called before the program
+     exits to reset the terminal settings.
 
-An Example
-----------
+
+File: readline.info,  Node: A Readline Example,  Prev: Alternate Interface,  Up: Readline Convenience Functions
+
+A Readline Example
+------------------
 
    Here is a function which changes lowercase characters to their
 uppercase equivalents, and uppercase characters to lowercase.  If this
@@ -1969,16 +2383,16 @@
            end = temp;
          }
      
-       /* Tell readline that we are modifying the line, so it will save
-          the undo information. */
+       /* Tell readline that we are modifying the line,
+          so it will save the undo information. */
        rl_modifying (start, end);
      
        for (i = start; i != end; i++)
          {
-           if (uppercase_p (rl_line_buffer[i]))
-             rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
-           else if (lowercase_p (rl_line_buffer[i]))
-             rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
+           if (_rl_uppercase_p (rl_line_buffer[i]))
+             rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
+           else if (_rl_lowercase_p (rl_line_buffer[i]))
+             rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
          }
        /* Move point to on top of the last character changed. */
        rl_point = (direction == 1) ? end - 1 : start;
@@ -1997,39 +2411,39 @@
 terminal, or a network connection being broken.  There is a class of
 signals that can be sent to the process currently reading input from
 the keyboard.  Since Readline changes the terminal attributes when it
-is called, it needs to perform special processing when a signal is
-received to restore the terminal to a sane state, or provide application
-writers with functions to do so manually.
+is called, it needs to perform special processing when such a signal is
+received in order to restore the terminal to a sane state, or provide
+application writers with functions to do so manually.
 
    Readline contains an internal signal handler that is installed for a
 number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM',
 `SIGTSTP', `SIGTTIN', and `SIGTTOU').  When one of these signals is
 received, the signal handler will reset the terminal attributes to
-those that were in effect before `readline ()' was called, reset the
-signal handling to what it was before `readline ()' was called, and
+those that were in effect before `readline()' was called, reset the
+signal handling to what it was before `readline()' was called, and
 resend the signal to the calling application.  If and when the calling
 application's signal handler returns, Readline will reinitialize the
 terminal and continue to accept input.  When a `SIGINT' is received,
 the Readline signal handler performs some additional work, which will
 cause any partially-entered line to be aborted (see the description of
-`rl_free_line_state ()').
+`rl_free_line_state()' below).
 
    There is an additional Readline signal handler, for `SIGWINCH', which
 the kernel sends to a process whenever the terminal's size changes (for
 example, if a user resizes an `xterm').  The Readline `SIGWINCH'
-handler updates Readline's internal screen size state, and then calls
-any `SIGWINCH' signal handler the calling application has installed.
-Readline calls the application's `SIGWINCH' signal handler without
-resetting the terminal to its original state.  If the application's
-signal handler does more than update its idea of the terminal size and
-return (for example, a `longjmp' back to a main processing loop), it
-*must* call `rl_cleanup_after_signal ()' (described below), to restore
-the terminal state.
+handler updates Readline's internal screen size information, and then
+calls any `SIGWINCH' signal handler the calling application has
+installed.  Readline calls the application's `SIGWINCH' signal handler
+without resetting the terminal to its original state.  If the
+application's signal handler does more than update its idea of the
+terminal size and return (for example, a `longjmp' back to a main
+processing loop), it _must_ call `rl_cleanup_after_signal()' (described
+below), to restore the terminal state.
 
    Readline provides two variables that allow application writers to
 control whether or not it will catch certain signals and act on them
 when they are received.  It is important that applications change the
-values of these variables only when calling `readline ()', not in a
+values of these variables only when calling `readline()', not in a
 signal handler, so Readline's internal signal state is not corrupted.
 
  - Variable: int rl_catch_signals
@@ -2052,7 +2466,7 @@
 
  - Function: void rl_cleanup_after_signal (void)
      This function will reset the state of the terminal to what it was
-     before `readline ()' was called, and remove the Readline signal
+     before `readline()' was called, and remove the Readline signal
      handlers for all signals, depending on the values of
      `rl_catch_signals' and `rl_catch_sigwinch'.
 
@@ -2061,7 +2475,7 @@
      line (undo information, any partial history entry, any
      partially-entered keyboard macro, and any partially-entered
      numeric argument).  This should be called before
-     `rl_cleanup_after_signal ()'.  The Readline signal handler for
+     `rl_cleanup_after_signal()'.  The Readline signal handler for
      `SIGINT' calls this to abort the current input line.
 
  - Function: void rl_reset_after_signal (void)
@@ -2070,11 +2484,24 @@
      `rl_catch_sigwinch'.
 
    If an application does not wish Readline to catch `SIGWINCH', it may
-call `rl_resize_terminal ()' to force Readline to update its idea of
-the terminal size when a `SIGWINCH' is received.
+call `rl_resize_terminal()' or `rl_set_screen_size()' to force Readline
+to update its idea of the terminal size when a `SIGWINCH' is received.
 
  - Function: void rl_resize_terminal (void)
-     Update Readline's internal screen size.
+     Update Readline's internal screen size by reading values from the
+     kernel.
+
+ - Function: void rl_set_screen_size (int rows, int cols)
+     Set Readline's idea of the terminal size to ROWS rows and COLS
+     columns.
+
+   If an application does not want to install a `SIGWINCH' handler, but
+is still interested in the screen dimensions, Readline's idea of the
+screen size may be queried.
+
+ - Function: void rl_get_screen_size (int *rows, int *cols)
+     Return Readline's idea of the terminal's size in the variables
+     pointed to by the arguments.
 
    The following functions install and remove Readline's signal
 handlers.
@@ -2087,7 +2514,7 @@
 
  - Function: int rl_clear_signals (void)
      Remove all of the Readline signal handlers installed by
-     `rl_set_signals ()'.
+     `rl_set_signals()'.
 
 
 File: readline.info,  Node: Custom Completers,  Prev: Readline Signal Handling,  Up: Programming with GNU Readline
@@ -2125,32 +2552,31 @@
 
    There are three major functions used to perform completion:
 
-  1. The user-interface function `rl_complete ()'.  This function is
-     called with the same arguments as other Readline functions
-     intended for interactive use:  COUNT and INVOKING_KEY.  It
-     isolates the word to be completed and calls `completion_matches
-     ()' to generate a list of possible completions.  It then either
-     lists the possible completions, inserts the possible completions,
-     or actually performs the completion, depending on which behavior
-     is desired.
+  1. The user-interface function `rl_complete()'.  This function is
+     called with the same arguments as other bindable Readline
+     functions: COUNT and INVOKING_KEY.  It isolates the word to be
+     completed and calls `rl_completion_matches()' to generate a list
+     of possible completions.  It then either lists the possible
+     completions, inserts the possible completions, or actually
+     performs the completion, depending on which behavior is desired.
 
-  2. The internal function `completion_matches ()' uses your
-     "generator" function to generate the list of possible matches, and
-     then returns the array of these matches.  You should place the
-     address of your generator function in
+  2. The internal function `rl_completion_matches()' uses an
+     application-supplied "generator" function to generate the list of
+     possible matches, and then returns the array of these matches.
+     The caller should place the address of its generator function in
      `rl_completion_entry_function'.
 
   3. The generator function is called repeatedly from
-     `completion_matches ()', returning a string each time.  The
+     `rl_completion_matches()', returning a string each time.  The
      arguments to the generator function are TEXT and STATE.  TEXT is
      the partial word to be completed.  STATE is zero the first time
      the function is called, allowing the generator to perform any
      necessary initialization, and a positive non-zero integer for each
-     subsequent call.  When the generator function returns `(char
-     *)NULL' this signals `completion_matches ()' that there are no
-     more possibilities left.  Usually the generator function computes
-     the list of possible completions when STATE is zero, and returns
-     them one at a time on subsequent calls.  Each string the generator
+     subsequent call.  The generator function returns `(char *)NULL' to
+     inform `rl_completion_matches()' that there are no more
+     possibilities left.  Usually the generator function computes the
+     list of possible completions when STATE is zero, and returns them
+     one at a time on subsequent calls.  Each string the generator
      function returns as a match must be allocated with `malloc()';
      Readline frees the strings when it has finished with them.
 
@@ -2158,14 +2584,14 @@
  - Function: int rl_complete (int ignore, int invoking_key)
      Complete the word at or before point.  You have supplied the
      function that does the initial simple matching selection algorithm
-     (see `completion_matches ()').  The default is to do filename
+     (see `rl_completion_matches()').  The default is to do filename
      completion.
 
- - Variable: Function * rl_completion_entry_function
-     This is a pointer to the generator function for `completion_matches
-     ()'.  If the value of `rl_completion_entry_function' is `(Function
-     *)NULL' then the default filename generator function,
-     `filename_completion_function ()', is used.
+ - Variable: rl_compentry_func_t * rl_completion_entry_function
+     This is a pointer to the generator function for
+     `rl_completion_matches()'.  If the value of
+     `rl_completion_entry_function' is `NULL' then the default filename
+     generator function, `rl_filename_completion_function()', is used.
 
 
 File: readline.info,  Node: Completion Functions,  Next: Completion Variables,  Prev: How Completing Works,  Up: Custom Completers
@@ -2187,42 +2613,50 @@
  - Function: int rl_complete (int ignore, int invoking_key)
      Complete the word at or before point.  You have supplied the
      function that does the initial simple matching selection algorithm
-     (see `completion_matches ()' and `rl_completion_entry_function').
+     (see `rl_completion_matches()' and `rl_completion_entry_function').
      The default is to do filename completion.  This calls
-     `rl_complete_internal ()' with an argument depending on
+     `rl_complete_internal()' with an argument depending on
      INVOKING_KEY.
 
- - Function: int rl_possible_completions (int count, int invoking_key))
+ - Function: int rl_possible_completions (int count, int invoking_key)
      List the possible completions.  See description of `rl_complete
-     ()'.  This calls `rl_complete_internal ()' with an argument of `?'.
+     ()'.  This calls `rl_complete_internal()' with an argument of `?'.
 
- - Function: int rl_insert_completions (int count, int invoking_key))
+ - Function: int rl_insert_completions (int count, int invoking_key)
      Insert the list of possible completions into the line, deleting the
-     partially-completed word.  See description of `rl_complete ()'.
-     This calls `rl_complete_internal ()' with an argument of `*'.
+     partially-completed word.  See description of `rl_complete()'.
+     This calls `rl_complete_internal()' with an argument of `*'.
 
- - Function: char ** completion_matches (char *text, CPFunction
-          *entry_func)
-     Returns an array of `(char *)' which is a list of completions for
-     TEXT.  If there are no completions, returns `(char **)NULL'.  The
-     first entry in the returned array is the substitution for TEXT.
-     The remaining entries are the possible completions.  The array is
+ - Function: int rl_completion_mode (rl_command_func_t *cfunc)
+     Returns the apppriate value to pass to `rl_complete_internal()'
+     depending on whether CFUNC was called twice in succession and the
+     value of the `show-all-if-ambiguous' variable.
+     Application-specific completion functions may use this function to
+     present the same interface as `rl_complete()'.
+
+ - Function: char ** rl_completion_matches (const char *text,
+          rl_compentry_func_t *entry_func)
+     Returns an array of strings which is a list of completions for
+     TEXT.  If there are no completions, returns `NULL'.  The first
+     entry in the returned array is the substitution for TEXT.  The
+     remaining entries are the possible completions.  The array is
      terminated with a `NULL' pointer.
 
-     ENTRY_FUNC is a function of two args, and returns a `(char *)'.
-     The first argument is TEXT.  The second is a state argument; it is
+     ENTRY_FUNC is a function of two args, and returns a `char *'.  The
+     first argument is TEXT.  The second is a state argument; it is
      zero on the first call, and non-zero on subsequent calls.
      ENTRY_FUNC returns a `NULL'  pointer to the caller when there are
      no more matches.
 
- - Function: char * filename_completion_function (char *text, int state)
+ - Function: char * rl_filename_completion_function (const char *text,
+          int state)
      A generator function for filename completion in the general case.
-     Note that completion in Bash is a little different because of all
-     the pathnames that must be followed when looking up completions
-     for a command.  The Bash source is a useful reference for writing
-     custom completion functions.
+     TEXT is a partial filename.  The Bash source is a useful reference
+     for writing custom completion functions (the Bash completion
+     functions call this and other Readline functions).
 
- - Function: char * username_completion_function (char *text, int state)
+ - Function: char * rl_username_completion_function (const char *text,
+          int state)
      A completion generator for usernames.  TEXT contains a partial
      username preceded by a random character (usually `~').  As with all
      completion generators, STATE is zero on the first call and non-zero
@@ -2234,23 +2668,26 @@
 Completion Variables
 --------------------
 
- - Variable: Function * rl_completion_entry_function
-     A pointer to the generator function for `completion_matches ()'.
-     `NULL' means to use `filename_completion_function ()', the default
-     filename completer.
+ - Variable: rl_compentry_func_t * rl_completion_entry_function
+     A pointer to the generator function for `rl_completion_matches()'.
+     `NULL' means to use `rl_filename_completion_function()', the
+     default filename completer.
 
- - Variable: CPPFunction * rl_attempted_completion_function
+ - Variable: rl_completion_func_t * rl_attempted_completion_function
      A pointer to an alternative function to create matches.  The
      function is called with TEXT, START, and END.  START and END are
-     indices in `rl_line_buffer' saying what the boundaries of TEXT
-     are.  If this function exists and returns `NULL', or if this
-     variable is set to `NULL', then `rl_complete ()' will call the
-     value of `rl_completion_entry_function' to generate matches,
-     otherwise the array of strings returned will be used.
+     indices in `rl_line_buffer' defining the boundaries of TEXT, which
+     is a character string.  If this function exists and returns
+     `NULL', or if this variable is set to `NULL', then `rl_complete()'
+     will call the value of `rl_completion_entry_function' to generate
+     matches, otherwise the array of strings returned will be used.  If
+     this function sets the `rl_attempted_completion_over' variable to
+     a non-zero value, Readline will not perform its default completion
+     even if this function returns no matches.
 
- - Variable: CPFunction * rl_filename_quoting_function
+ - Variable: rl_quote_func_t * rl_filename_quoting_function
      A pointer to a function that will quote a filename in an
-     application- specific fashion.  This is called if filename
+     application-specific fashion.  This is called if filename
      completion is being attempted and one of the characters in
      `rl_filename_quote_characters' appears in a completed filename.
      The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER.
@@ -2261,7 +2698,7 @@
      to any opening quote character the user typed.  Some functions
      choose to reset this character.
 
- - Variable: CPFunction * rl_filename_dequoting_function
+ - Variable: rl_dequote_func_t * rl_filename_dequoting_function
      A pointer to a function that will remove application-specific
      quoting characters from a filename before completion is attempted,
      so those characters do not interfere with matching the text
@@ -2270,89 +2707,17 @@
      character that delimits the filename (usually `'' or `"').  If
      QUOTE_CHAR is zero, the filename was not in an embedded string.
 
- - Variable: Function * rl_char_is_quoted_p
+ - Variable: rl_linebuf_func_t * rl_char_is_quoted_p
      A pointer to a function to call that determines whether or not a
      specific character in the line buffer is quoted, according to
-     whatever quoting mechanism the program calling readline uses.  The
+     whatever quoting mechanism the program calling Readline uses.  The
      function is called with two arguments: TEXT, the text of the line,
      and INDEX, the index of the character in the line.  It is used to
      decide whether a character found in
      `rl_completer_word_break_characters' should be used to break words
      for the completer.
 
- - Variable: int rl_completion_query_items
-     Up to this many items will be displayed in response to a
-     possible-completions call.  After that, we ask the user if she is
-     sure she wants to see them all.  The default value is 100.
-
- - Variable: char * rl_basic_word_break_characters
-     The basic list of characters that signal a break between words for
-     the completer routine.  The default value of this variable is the
-     characters which break words for completion in Bash, i.e., `"
-     \t\n\"\\'`@$><=;|&{("'.
-
- - Variable: char * rl_basic_quote_characters
-     List of quote characters which can cause a word break.
-
- - Variable: char * rl_completer_word_break_characters
-     The list of characters that signal a break between words for
-     `rl_complete_internal ()'.  The default list is the value of
-     `rl_basic_word_break_characters'.
-
- - Variable: char * rl_completer_quote_characters
-     List of characters which can be used to quote a substring of the
-     line.  Completion occurs on the entire substring, and within the
-     substring `rl_completer_word_break_characters' are treated as any
-     other character, unless they also appear within this list.
-
- - Variable: char * rl_filename_quote_characters
-     A list of characters that cause a filename to be quoted by the
-     completer when they appear in a completed filename.  The default
-     is the null string.
-
- - Variable: char * rl_special_prefixes
-     The list of characters that are word break characters, but should
-     be left in TEXT when it is passed to the completion function.
-     Programs can use this to help determine what kind of completing to
-     do.  For instance, Bash sets this variable to "$@" so that it can
-     complete shell variables and hostnames.
-
- - Variable: int rl_completion_append_character
-     When a single completion alternative matches at the end of the
-     command line, this character is appended to the inserted
-     completion text.  The default is a space character (` ').  Setting
-     this to the null character (`\0') prevents anything being appended
-     automatically.  This can be changed in custom completion functions
-     to provide the "most sensible word separator character" according
-     to an application-specific command line syntax specification.
-
- - Variable: int rl_ignore_completion_duplicates
-     If non-zero, then disallow duplicates in the matches.  Default is
-     1.
-
- - Variable: int rl_filename_completion_desired
-     Non-zero means that the results of the matches are to be treated as
-     filenames.  This is *always* zero on entry, and can only be changed
-     within a completion entry generator function.  If it is set to a
-     non-zero value, directory names have a slash appended and Readline
-     attempts to quote completed filenames if they contain any embedded
-     word break characters.
-
- - Variable: int rl_filename_quoting_desired
-     Non-zero means that the results of the matches are to be quoted
-     using double quotes (or an application-specific quoting mechanism)
-     if the completed filename contains any characters in
-     `rl_filename_quote_chars'.  This is *always* non-zero on entry,
-     and can only be changed within a completion entry generator
-     function.  The quoting is effected via a call to the function
-     pointed to by `rl_filename_quoting_function'.
-
- - Variable: int rl_inhibit_completion
-     If this variable is non-zero, completion is inhibit<ed.  The
-     completion character will be inserted as any other bound to
-     `self-insert'.
-
- - Variable: Function * rl_ignore_some_completions_function
+ - Variable: rl_compignore_func_t * rl_ignore_some_completions_function
      This function, if defined, is called by the completer when real
      filename completion is done, after all the matching names have
      been generated.  It is passed a `NULL' terminated array of matches.
@@ -2360,14 +2725,20 @@
      to all matches. This function can re-arrange the list of matches
      as required, but each element deleted from the array must be freed.
 
- - Variable: Function * rl_directory_completion_hook
+ - Variable: rl_icppfunc_t * rl_directory_completion_hook
      This function, if defined, is allowed to modify the directory
      portion of filenames Readline completes.  It is called with the
-     address of a string (the current directory name) as an argument.
-     It could be used to expand symbolic links or shell variables in
-     pathnames.
+     address of a string (the current directory name) as an argument,
+     and may modify that string.  If the string is replaced with a new
+     string, the old value should be freed.  Any modified directory
+     name should have a trailing slash.  The modified value will be
+     displayed as part of the completion, replacing the directory
+     portion of the pathname the user typed.  It returns an integer
+     that should be non-zero if the function modifies its directory
+     argument.  It could be used to expand symbolic links or shell
+     variables in pathnames.
 
- - Variable: VFunction * rl_completion_display_matches_hook
+ - Variable: rl_compdisp_func_t * rl_completion_display_matches_hook
      If non-zero, then this is the address of a function to call when
      completing a word would normally display the list of possible
      matches.  This function is called in lieu of Readline displaying
@@ -2380,6 +2751,109 @@
      Readline's output stream.  That function may be called from this
      hook.
 
+ - Variable: const char * rl_basic_word_break_characters
+     The basic list of characters that signal a break between words for
+     the completer routine.  The default value of this variable is the
+     characters which break words for completion in Bash: `"
+     \t\n\"\\'`@$><=;|&{("'.
+
+ - Variable: const char * rl_basic_quote_characters
+     A list of quote characters which can cause a word break.
+
+ - Variable: const char * rl_completer_word_break_characters
+     The list of characters that signal a break between words for
+     `rl_complete_internal()'.  The default list is the value of
+     `rl_basic_word_break_characters'.
+
+ - Variable: const char * rl_completer_quote_characters
+     A list of characters which can be used to quote a substring of the
+     line.  Completion occurs on the entire substring, and within the
+     substring `rl_completer_word_break_characters' are treated as any
+     other character, unless they also appear within this list.
+
+ - Variable: const char * rl_filename_quote_characters
+     A list of characters that cause a filename to be quoted by the
+     completer when they appear in a completed filename.  The default
+     is the null string.
+
+ - Variable: const char * rl_special_prefixes
+     The list of characters that are word break characters, but should
+     be left in TEXT when it is passed to the completion function.
+     Programs can use this to help determine what kind of completing to
+     do.  For instance, Bash sets this variable to "$@" so that it can
+     complete shell variables and hostnames.
+
+ - Variable: int rl_completion_query_items
+     Up to this many items will be displayed in response to a
+     possible-completions call.  After that, we ask the user if she is
+     sure she wants to see them all.  The default value is 100.
+
+ - Variable: int rl_completion_append_character
+     When a single completion alternative matches at the end of the
+     command line, this character is appended to the inserted
+     completion text.  The default is a space character (` ').  Setting
+     this to the null character (`\0') prevents anything being appended
+     automatically.  This can be changed in custom completion functions
+     to provide the "most sensible word separator character" according
+     to an application-specific command line syntax specification.
+
+ - Variable: int rl_completion_suppress_append
+     If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to
+     matches at the end of the command line, as described above.  It is
+     set to 0 before any application-specific completion function is
+     called.
+
+ - Variable: int rl_completion_mark_symlink_dirs
+     If non-zero, a slash will be appended to completed filenames that
+     are symbolic links to directory names, subject to the value of the
+     user-settable MARK-DIRECTORIES variable.  This variable exists so
+     that application completion functions can override the user's
+     global preference (set via the MARK-SYMLINKED-DIRECTORIES Readline
+     variable) if appropriate.  This variable is set to the user's
+     preference before any application completion function is called,
+     so unless that function modifies the value, the user's preferences
+     are honored.
+
+ - Variable: int rl_ignore_completion_duplicates
+     If non-zero, then duplicates in the matches are removed.  The
+     default is 1.
+
+ - Variable: int rl_filename_completion_desired
+     Non-zero means that the results of the matches are to be treated as
+     filenames.  This is _always_ zero on entry, and can only be changed
+     within a completion entry generator function.  If it is set to a
+     non-zero value, directory names have a slash appended and Readline
+     attempts to quote completed filenames if they contain any
+     characters in `rl_filename_quote_characters' and
+     `rl_filename_quoting_desired' is set to a non-zero value.
+
+ - Variable: int rl_filename_quoting_desired
+     Non-zero means that the results of the matches are to be quoted
+     using double quotes (or an application-specific quoting mechanism)
+     if the completed filename contains any characters in
+     `rl_filename_quote_chars'.  This is _always_ non-zero on entry,
+     and can only be changed within a completion entry generator
+     function.  The quoting is effected via a call to the function
+     pointed to by `rl_filename_quoting_function'.
+
+ - Variable: int rl_attempted_completion_over
+     If an application-specific completion function assigned to
+     `rl_attempted_completion_function' sets this variable to a non-zero
+     value, Readline will not perform its default filename completion
+     even if the application's completion function returns no matches.
+     It should be set only by an application's completion function.
+
+ - Variable: int rl_completion_type
+     Set to a character describing the type of completion Readline is
+     currently attempting; see the description of
+     `rl_complete_internal()' (*note Completion Functions::) for the
+     list of characters.
+
+ - Variable: int rl_inhibit_completion
+     If this variable is non-zero, completion is inhibited.  The
+     completion character will be inserted as any other bound to
+     `self-insert'.
+
 
 File: readline.info,  Node: A Short Completion Example,  Prev: Completion Variables,  Up: Custom Completers
 
@@ -2404,19 +2878,25 @@
      #include <readline/readline.h>
      #include <readline/history.h>
      
-     extern char *getwd ();
      extern char *xmalloc ();
      
      /* The names of functions that actually do the manipulation. */
-     int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-     int com_delete (), com_help (), com_cd (), com_quit ();
+     int com_list __P((char *));
+     int com_view __P((char *));
+     int com_rename __P((char *));
+     int com_stat __P((char *));
+     int com_pwd __P((char *));
+     int com_delete __P((char *));
+     int com_help __P((char *));
+     int com_cd __P((char *));
+     int com_quit __P((char *));
      
      /* A structure which contains information on the commands this program
         can understand. */
      
      typedef struct {
        char *name;			/* User printable name of the function. */
-       Function *func;		/* Function to call to do the job. */
+       rl_icpfunc_t *func;		/* Function to call to do the job. */
        char *doc;			/* Documentation for this function.  */
      } COMMAND;
      
@@ -2432,7 +2912,7 @@
        { "rename", com_rename, "Rename FILE to NEWNAME" },
        { "stat", com_stat, "Print out statistics on FILE" },
        { "view", com_view, "View the contents of FILE" },
-       { (char *)NULL, (Function *)NULL, (char *)NULL }
+       { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
      };
      
      /* Forward declarations. */
@@ -2442,7 +2922,7 @@
      /* The name of this program, as taken from argv[0]. */
      char *progname;
      
-     /* When non-zero, this global means the user is done using this program. */
+     /* When non-zero, this means the user is done using this program. */
      int done;
      
      char *
@@ -2572,29 +3052,29 @@
      /*                                                                  */
      /* **************************************************************** */
      
-     char *command_generator ();
-     char **fileman_completion ();
+     char *command_generator __P((const char *, int));
+     char **fileman_completion __P((const char *, int, int));
      
-     /* Tell the GNU Readline library how to complete.  We want to try to complete
-        on command names if this is the first word in the line, or on filenames
-        if not. */
+     /* Tell the GNU Readline library how to complete.  We want to try to
+        complete on command names if this is the first word in the line, or
+        on filenames if not. */
      initialize_readline ()
      {
        /* Allow conditional parsing of the ~/.inputrc file. */
        rl_readline_name = "FileMan";
      
        /* Tell the completer that we want a crack first. */
-       rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+       rl_attempted_completion_function = fileman_completion;
      }
      
-     /* Attempt to complete on the contents of TEXT.  START and END bound the
-        region of rl_line_buffer that contains the word to complete.  TEXT is
-        the word to complete.  We can use the entire contents of rl_line_buffer
-        in case we want to do some simple parsing.  Return the array of matches,
-        or NULL if there aren't any. */
+     /* Attempt to complete on the contents of TEXT.  START and END
+        bound the region of rl_line_buffer that contains the word to
+        complete.  TEXT is the word to complete.  We can use the entire
+        contents of rl_line_buffer in case we want to do some simple
+        parsing.  Returnthe array of matches, or NULL if there aren't any. */
      char **
      fileman_completion (text, start, end)
-          char *text;
+          const char *text;
           int start, end;
      {
        char **matches;
@@ -2605,32 +3085,33 @@
           to complete.  Otherwise it is the name of a file in the current
           directory. */
        if (start == 0)
-         matches = completion_matches (text, command_generator);
+         matches = rl_completion_matches (text, command_generator);
      
        return (matches);
      }
      
-     /* Generator function for command completion.  STATE lets us know whether
-        to start from scratch; without any state (i.e. STATE == 0), then we
-        start at the top of the list. */
+     /* Generator function for command completion.  STATE lets us
+        know whether to start from scratch; without any state
+        (i.e. STATE == 0), then we start at the top of the list. */
      char *
      command_generator (text, state)
-          char *text;
+          const char *text;
           int state;
      {
        static int list_index, len;
        char *name;
      
-       /* If this is a new word to complete, initialize now.  This includes
-          saving the length of TEXT for efficiency, and initializing the index
-          variable to 0. */
+       /* If this is a new word to complete, initialize now.  This
+          includes saving the length of TEXT for efficiency, and
+          initializing the index variable to 0. */
        if (!state)
          {
            list_index = 0;
            len = strlen (text);
          }
      
-       /* Return the next name which partially matches from the command list. */
+       /* Return the next name which partially matches from the
+          command list. */
        while (name = commands[list_index].name)
          {
            list_index++;
@@ -2775,7 +3256,7 @@
      {
        char dir[1024], *s;
      
-       s = getwd (dir);
+       s = getcwd (dir, sizeof(dir) - 1);
        if (s == 0)
          {
            printf ("Error getting pwd: %s\n", dir);
@@ -2786,7 +3267,8 @@
        return 0;
      }
      
-     /* The user wishes to quit using this program.  Just set DONE non-zero. */
+     /* The user wishes to quit using this program.  Just set DONE
+        non-zero. */
      com_quit (arg)
           char *arg;
      {
@@ -2799,12 +3281,13 @@
           char *caller;
      {
        fprintf (stderr,
-                "%s: Too dangerous for me to distribute.  Write it yourself.\n",
+                "%s: Too dangerous for me to distribute.\n"
                 caller);
+       fprintf (stderr, "Write it yourself.\n");
      }
      
-     /* Return non-zero if ARG is a valid argument for CALLER, else print
-        an error message and return zero. */
+     /* Return non-zero if ARG is a valid argument for CALLER,
+        else print an error message and return zero. */
      int
      valid_argument (caller, arg)
           char *caller, *arg;
@@ -2834,6 +3317,7 @@
 * killing text:                          Readline Killing Commands.
 * notation, readline:                    Readline Bare Essentials.
 * readline, function:                    Basic Behavior.
+* variables, readline:                   Readline Init File Syntax.
 * yanking text:                          Readline Killing Commands.
 
 
@@ -2844,13 +3328,18 @@
 
 * Menu:
 
+* _rl_digit_p:                           Utility Functions.
+* _rl_digit_value:                       Utility Functions.
+* _rl_lowercase_p:                       Utility Functions.
+* _rl_to_lower:                          Utility Functions.
+* _rl_to_upper:                          Utility Functions.
+* _rl_uppercase_p:                       Utility Functions.
 * abort (C-g):                           Miscellaneous Commands.
-* accept-line (Newline, Return):         Commands For History.
-* alphabetic:                            Utility Functions.
+* accept-line (Newline or Return):       Commands For History.
 * backward-char (C-b):                   Commands For Moving.
 * backward-delete-char (Rubout):         Commands For Text.
 * backward-kill-line (C-x Rubout):       Commands For Killing.
-* backward-kill-word (M-DEL):            Commands For Killing.
+* backward-kill-word (M-<DEL>):          Commands For Killing.
 * backward-word (M-b):                   Commands For Moving.
 * beginning-of-history (M-<):            Commands For History.
 * beginning-of-line (C-a):               Commands For Moving.
@@ -2861,9 +3350,8 @@
 * character-search-backward (M-C-]):     Miscellaneous Commands.
 * clear-screen (C-l):                    Commands For Moving.
 * comment-begin:                         Readline Init File Syntax.
-* complete (TAB):                        Commands For Completion.
+* complete (<TAB>):                      Commands For Completion.
 * completion-query-items:                Readline Init File Syntax.
-* completion_matches:                    Completion Functions.
 * convert-meta:                          Readline Init File Syntax.
 * copy-backward-word ():                 Commands For Killing.
 * copy-forward-word ():                  Commands For Killing.
@@ -2872,9 +3360,6 @@
 * delete-char-or-list ():                Commands For Completion.
 * delete-horizontal-space ():            Commands For Killing.
 * digit-argument (M-0, M-1, ... M--):    Numeric Arguments.
-* digit_p:                               Utility Functions.
-* digit_value:                           Utility Functions.
-* ding:                                  Utility Functions.
 * disable-completion:                    Readline Init File Syntax.
 * do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
 * downcase-word (M-l):                   Commands For Text.
@@ -2888,12 +3373,11 @@
 * end-of-line (C-e):                     Commands For Moving.
 * exchange-point-and-mark (C-x C-x):     Miscellaneous Commands.
 * expand-tilde:                          Readline Init File Syntax.
-* filename_completion_function:          Completion Functions.
 * forward-backward-delete-char ():       Commands For Text.
 * forward-char (C-f):                    Commands For Moving.
 * forward-search-history (C-s):          Commands For History.
 * forward-word (M-f):                    Commands For Moving.
-* free_undo_list:                        Allowing Undoing.
+* history-preserve-point:                Readline Init File Syntax.
 * history-search-backward ():            Commands For History.
 * history-search-forward ():             Commands For History.
 * horizontal-scroll-mode:                Readline Init File Syntax.
@@ -2906,28 +3390,33 @@
 * kill-region ():                        Commands For Killing.
 * kill-whole-line ():                    Commands For Killing.
 * kill-word (M-d):                       Commands For Killing.
-* lowercase_p:                           Utility Functions.
 * mark-modified-lines:                   Readline Init File Syntax.
+* mark-symlinked-directories:            Readline Init File Syntax.
+* match-hidden-files:                    Readline Init File Syntax.
 * menu-complete ():                      Commands For Completion.
 * meta-flag:                             Readline Init File Syntax.
 * next-history (C-n):                    Commands For History.
 * non-incremental-forward-search-history (M-n): Commands For History.
 * non-incremental-reverse-search-history (M-p): Commands For History.
-* numeric:                               Utility Functions.
 * output-meta:                           Readline Init File Syntax.
+* overwrite-mode ():                     Commands For Text.
+* page-completions:                      Readline Init File Syntax.
 * possible-completions (M-?):            Commands For Completion.
-* prefix-meta (ESC):                     Miscellaneous Commands.
+* prefix-meta (<ESC>):                   Miscellaneous Commands.
 * previous-history (C-p):                Commands For History.
-* quoted-insert (C-q, C-v):              Commands For Text.
+* quoted-insert (C-q or C-v):            Commands For Text.
 * re-read-init-file (C-x C-r):           Miscellaneous Commands.
 * readline:                              Basic Behavior.
 * redraw-current-line ():                Commands For Moving.
 * reverse-search-history (C-r):          Commands For History.
 * revert-line (M-r):                     Miscellaneous Commands.
 * rl_add_defun:                          Function Naming.
+* rl_add_funmap_entry:                   Associating Function Names and Bindings.
 * rl_add_undo:                           Allowing Undoing.
+* rl_alphabetic:                         Utility Functions.
 * rl_already_prompted:                   Readline Variables.
 * rl_attempted_completion_function:      Completion Variables.
+* rl_attempted_completion_over:          Completion Variables.
 * rl_basic_quote_characters:             Completion Variables.
 * rl_basic_word_break_characters:        Completion Variables.
 * rl_begin_undo_group:                   Allowing Undoing.
@@ -2942,9 +3431,10 @@
 * rl_char_is_quoted_p:                   Completion Variables.
 * rl_cleanup_after_signal:               Readline Signal Handling.
 * rl_clear_message:                      Redisplay.
+* rl_clear_pending_input:                Character Input.
 * rl_clear_signals:                      Readline Signal Handling.
-* rl_complete <1>:                       Completion Functions.
-* rl_complete:                           How Completing Works.
+* rl_complete <1>:                       How Completing Works.
+* rl_complete:                           Completion Functions.
 * rl_complete_internal:                  Completion Functions.
 * rl_completer_quote_characters:         Completion Variables.
 * rl_completer_word_break_characters:    Completion Variables.
@@ -2952,28 +3442,45 @@
 * rl_completion_display_matches_hook:    Completion Variables.
 * rl_completion_entry_function <1>:      Completion Variables.
 * rl_completion_entry_function:          How Completing Works.
+* rl_completion_mark_symlink_dirs:       Completion Variables.
+* rl_completion_matches:                 Completion Functions.
+* rl_completion_mode:                    Completion Functions.
 * rl_completion_query_items:             Completion Variables.
+* rl_completion_suppress_append:         Completion Variables.
+* rl_completion_type:                    Completion Variables.
 * rl_copy_keymap:                        Keymaps.
 * rl_copy_text:                          Modifying Text.
+* rl_crlf:                               Redisplay.
 * rl_delete_text:                        Modifying Text.
+* rl_deprep_term_function:               Readline Variables.
+* rl_deprep_terminal:                    Terminal Management.
+* rl_ding:                               Utility Functions.
 * rl_directory_completion_hook:          Completion Variables.
 * rl_discard_keymap:                     Keymaps.
+* rl_dispatching:                        Readline Variables.
 * rl_display_match_list:                 Utility Functions.
 * rl_do_undo:                            Allowing Undoing.
 * rl_done:                               Readline Variables.
+* rl_editing_mode:                       Readline Variables.
 * rl_end:                                Readline Variables.
 * rl_end_undo_group:                     Allowing Undoing.
 * rl_erase_empty_line:                   Readline Variables.
 * rl_event_hook:                         Readline Variables.
+* rl_execute_next:                       Character Input.
 * rl_executing_keymap:                   Readline Variables.
+* rl_executing_macro:                    Readline Variables.
+* rl_expand_prompt:                      Redisplay.
+* rl_explicit_arg:                       Readline Variables.
 * rl_extend_line_buffer:                 Utility Functions.
 * rl_filename_completion_desired:        Completion Variables.
+* rl_filename_completion_function:       Completion Functions.
 * rl_filename_dequoting_function:        Completion Variables.
 * rl_filename_quote_characters:          Completion Variables.
 * rl_filename_quoting_desired:           Completion Variables.
 * rl_filename_quoting_function:          Completion Variables.
 * rl_forced_update_display:              Redisplay.
 * rl_free_line_state:                    Readline Signal Handling.
+* rl_free_undo_list:                     Allowing Undoing.
 * rl_function_dumper:                    Associating Function Names and Bindings.
 * rl_function_of_keyseq:                 Associating Function Names and Bindings.
 * rl_funmap_names:                       Associating Function Names and Bindings.
@@ -2981,8 +3488,11 @@
 * rl_get_keymap:                         Keymaps.
 * rl_get_keymap_by_name:                 Keymaps.
 * rl_get_keymap_name:                    Keymaps.
-* rl_getc:                               Utility Functions.
+* rl_get_screen_size:                    Readline Signal Handling.
+* rl_get_termcap:                        Miscellaneous Functions.
+* rl_getc:                               Character Input.
 * rl_getc_function:                      Readline Variables.
+* rl_gnu_readline_p:                     Readline Variables.
 * rl_ignore_completion_duplicates:       Completion Variables.
 * rl_ignore_some_completions_function:   Completion Variables.
 * rl_inhibit_completion:                 Completion Variables.
@@ -2993,15 +3503,20 @@
 * rl_invoking_keyseqs:                   Associating Function Names and Bindings.
 * rl_invoking_keyseqs_in_map:            Associating Function Names and Bindings.
 * rl_kill_text:                          Modifying Text.
+* rl_last_func:                          Readline Variables.
 * rl_library_version:                    Readline Variables.
 * rl_line_buffer:                        Readline Variables.
 * rl_list_funmap_names:                  Associating Function Names and Bindings.
+* rl_macro_bind:                         Miscellaneous Functions.
+* rl_macro_dumper:                       Miscellaneous Functions.
 * rl_make_bare_keymap:                   Keymaps.
 * rl_make_keymap:                        Keymaps.
 * rl_mark:                               Readline Variables.
 * rl_message:                            Redisplay.
 * rl_modifying:                          Allowing Undoing.
 * rl_named_function:                     Associating Function Names and Bindings.
+* rl_num_chars_to_read:                  Readline Variables.
+* rl_numeric_arg:                        Readline Variables.
 * rl_on_new_line:                        Redisplay.
 * rl_on_new_line_with_prompt:            Redisplay.
 * rl_outstream:                          Readline Variables.
@@ -3010,98 +3525,114 @@
 * rl_point:                              Readline Variables.
 * rl_possible_completions:               Completion Functions.
 * rl_pre_input_hook:                     Readline Variables.
+* rl_prep_term_function:                 Readline Variables.
+* rl_prep_terminal:                      Terminal Management.
 * rl_prompt:                             Readline Variables.
+* rl_push_macro_input:                   Modifying Text.
 * rl_read_init_file:                     Binding Keys.
-* rl_read_key:                           Utility Functions.
+* rl_read_key:                           Character Input.
 * rl_readline_name:                      Readline Variables.
+* rl_readline_state:                     Readline Variables.
+* rl_readline_version:                   Readline Variables.
 * rl_redisplay:                          Redisplay.
 * rl_redisplay_function:                 Readline Variables.
+* rl_replace_line:                       Utility Functions.
 * rl_reset_after_signal:                 Readline Signal Handling.
 * rl_reset_line_state:                   Redisplay.
-* rl_reset_terminal:                     Utility Functions.
+* rl_reset_terminal:                     Terminal Management.
 * rl_resize_terminal:                    Readline Signal Handling.
 * rl_restore_prompt:                     Redisplay.
 * rl_save_prompt:                        Redisplay.
+* rl_set_key:                            Binding Keys.
+* rl_set_keyboard_input_timeout:         Character Input.
 * rl_set_keymap:                         Keymaps.
+* rl_set_paren_blink_timeout:            Miscellaneous Functions.
+* rl_set_prompt:                         Redisplay.
+* rl_set_screen_size:                    Readline Signal Handling.
 * rl_set_signals:                        Readline Signal Handling.
+* rl_show_char:                          Redisplay.
 * rl_special_prefixes:                   Completion Variables.
 * rl_startup_hook:                       Readline Variables.
-* rl_stuff_char:                         Utility Functions.
+* rl_stuff_char:                         Character Input.
 * rl_terminal_name:                      Readline Variables.
+* rl_tty_set_default_bindings:           Terminal Management.
 * rl_unbind_command_in_map:              Binding Keys.
 * rl_unbind_function_in_map:             Binding Keys.
 * rl_unbind_key:                         Binding Keys.
 * rl_unbind_key_in_map:                  Binding Keys.
+* rl_username_completion_function:       Completion Functions.
+* rl_variable_bind:                      Miscellaneous Functions.
+* rl_variable_dumper:                    Miscellaneous Functions.
 * self-insert (a, b, A, 1, !, ...):      Commands For Text.
 * set-mark (C-@):                        Miscellaneous Commands.
 * show-all-if-ambiguous:                 Readline Init File Syntax.
 * start-kbd-macro (C-x ():               Keyboard Macros.
-* to_lower:                              Utility Functions.
-* to_upper:                              Utility Functions.
 * transpose-chars (C-t):                 Commands For Text.
 * transpose-words (M-t):                 Commands For Text.
-* undo (C-_, C-x C-u):                   Miscellaneous Commands.
+* undo (C-_ or C-x C-u):                 Miscellaneous Commands.
 * universal-argument ():                 Numeric Arguments.
 * unix-line-discard (C-u):               Commands For Killing.
 * unix-word-rubout (C-w):                Commands For Killing.
 * upcase-word (M-u):                     Commands For Text.
-* uppercase_p:                           Utility Functions.
-* username_completion_function:          Completion Functions.
 * visible-stats:                         Readline Init File Syntax.
 * yank (C-y):                            Commands For Killing.
-* yank-last-arg (M-., M-_):              Commands For History.
+* yank-last-arg (M-. or M-_):            Commands For History.
 * yank-nth-arg (M-C-y):                  Commands For History.
 * yank-pop (M-y):                        Commands For Killing.
 
 
 
 Tag Table:
-Node: Top1190
-Node: Command Line Editing1789
-Node: Introduction and Notation2440
-Node: Readline Interaction4058
-Node: Readline Bare Essentials5251
-Node: Readline Movement Commands7032
-Node: Readline Killing Commands7989
-Node: Readline Arguments9895
-Node: Searching10870
-Node: Readline Init File12713
-Node: Readline Init File Syntax13774
-Node: Conditional Init Constructs23039
-Node: Sample Init File25478
-Node: Bindable Readline Commands28648
-Node: Commands For Moving29692
-Node: Commands For History30541
-Node: Commands For Text33258
-Node: Commands For Killing35261
-Node: Numeric Arguments37228
-Node: Commands For Completion38355
-Node: Keyboard Macros40103
-Node: Miscellaneous Commands40662
-Node: Readline vi Mode43466
-Node: Programming with GNU Readline45236
-Node: Basic Behavior46204
-Node: Custom Functions49530
-Node: The Function Type50508
-Node: Function Writing51353
-Node: Readline Variables52437
-Node: Readline Convenience Functions56649
-Node: Function Naming57387
-Node: Keymaps58615
-Node: Binding Keys60329
-Node: Associating Function Names and Bindings62903
-Node: Allowing Undoing64746
-Node: Redisplay67331
-Node: Modifying Text69108
-Node: Utility Functions70019
-Node: Alternate Interface72799
-Node: Readline Signal Handling76093
-Node: Custom Completers81139
-Node: How Completing Works81854
-Node: Completion Functions84850
-Node: Completion Variables87865
-Node: A Short Completion Example95768
-Node: Concept Index108074
-Node: Function and Variable Index108828
+Node: Top1164
+Node: Command Line Editing1763
+Node: Introduction and Notation2414
+Node: Readline Interaction4032
+Node: Readline Bare Essentials5219
+Node: Readline Movement Commands7000
+Node: Readline Killing Commands7957
+Node: Readline Arguments9866
+Node: Searching10902
+Node: Readline Init File13045
+Node: Readline Init File Syntax14106
+Node: Conditional Init Constructs24989
+Node: Sample Init File27514
+Node: Bindable Readline Commands30698
+Node: Commands For Moving31748
+Node: Commands For History32597
+Node: Commands For Text35455
+Node: Commands For Killing38169
+Node: Numeric Arguments40120
+Node: Commands For Completion41248
+Node: Keyboard Macros42780
+Node: Miscellaneous Commands43339
+Node: Readline vi Mode46688
+Node: Programming with GNU Readline48506
+Node: Basic Behavior49474
+Node: Custom Functions52904
+Node: Readline Typedefs54382
+Node: Function Writing56011
+Node: Readline Variables57219
+Node: Readline Convenience Functions66642
+Node: Function Naming67624
+Node: Keymaps68876
+Node: Binding Keys70632
+Node: Associating Function Names and Bindings73558
+Node: Allowing Undoing75803
+Node: Redisplay78338
+Node: Modifying Text81409
+Node: Character Input82638
+Node: Terminal Management84418
+Node: Utility Functions85593
+Node: Miscellaneous Functions87932
+Node: Alternate Interface89996
+Node: A Readline Example92141
+Node: Readline Signal Handling94078
+Node: Custom Completers99681
+Node: How Completing Works100396
+Node: Completion Functions103394
+Node: Completion Variables106778
+Node: A Short Completion Example117049
+Node: Concept Index129602
+Node: Function and Variable Index130424
 
 End Tag Table
diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps
index c16dca6..21ca2ca 100644
--- a/readline/doc/readline.ps
+++ b/readline/doc/readline.ps
@@ -1,14 +1,14 @@
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software
+%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
 %%Title: readline.dvi
-%%Pages: 56
+%%Pages: 66
 %%PageOrder: Ascend
 %%BoundingBox: 0 0 612 792
 %%EndComments
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -t letter -o readline.ps readline.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2000.03.01:1453
+%DVIPSSource:  TeX output 2002.06.27:1354
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -20,9 +20,9 @@
 matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
 exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
 statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
 /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
 df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
 definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
@@ -50,7 +50,7 @@
 mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
 SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
 userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
 /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
 /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
@@ -69,80 +69,76 @@
 %%EndProcSet
 TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi)
 @start
-%DVIPSBitmapFont: Fa cmti10 10.95 1
-/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmbxti10 14.4 1
-/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46
+%DVIPSBitmapFont: Fa cmbxti10 14.4 1
+/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46
 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmmi9 9 1
-/Fc 1 59 df<126012F0A2126004047D830B>58 D E
+%DVIPSBitmapFont: Fb cmsl9 9 1
+/Fb 1 121 df<383FC7E038078380EB0200EA038413C8EA01D8EA00F05B7F1201133812
+02487EEA081E123838FC3FC013107F8F14>120 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmtt9 9 53
-/Fd 53 127 df<126012F0AD12601200A4126012F0A212600417789614>33
+%DVIPSBitmapFont: Fc cmsltt10 9 4
+/Fc 4 78 df<EAFFFC13FE13FC0F037C8C14>45 D<EA01E0EA07F8EA0E3CEA1C1CEA180E
+12381270A312E0A4131CA31338A21370EA70E01271EA3F80EA1F000F177C9614>48
+D<134013E0EA01C01203120F123D12111201EA0380A6EA0700A6120EEAFFE0A20B177B96
+14>I<381F81F813C1380FC3E0EA0EC213C6A213CE13CC381CCDC013DD13D9A213F1A238
+38E3801303A53870070038FC0FC0A215177F9614>77 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fd cmtt9 9 47
+/Fd 47 127 df<126012F0AD12601200A4126012F0A212600417789614>33
 D<EA071CA5B51280A27E380E3800A7387FFF80B5FCA2381C7000A511177F9614>35
 D<EA01801203EA06005A121C121812385AA35AA91270A37E1218121C120C7EEA03801201
 091D799914>40 D<128012C01260123012381218121C120EA31207A9120EA3121C121812
 381230126012C01280081D7C9914>I<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2
 EA3FF8EA7FFCEAF39EEA638CEA0380A30F107E9214>I<127012F812FCA2127C120C1218
 123012E012C0060A798414>44 D<EAFFFEA30F037E8C14>I<127012F8A3127005057984
-14>I<EA07C0EA0FE0EA1C70EA3838EA3018EA701CA2EAE00EA9EA701CA2EA3838A2EA1C
-70EA0FE0EA07C00F177E9614>48 D<1203A25A5A123F12F712471207AEEA7FF0A20C177C
-9614>I<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F
-80EA03C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA
-03E0EA01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F
-157E9514>62 D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A4
-1300C7FCA41203EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC
-1271EA731E1277EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F
-177E9614>I<EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2
-487EA238FE3F80A211177F9614>I<EAFFF013FCEA381E130E1307A4130E131EEA3FFCA2
-EA381E130E1307A5130E131EEAFFFC13F810177F9614>I<3801F180EA07FFEA0E1FEA1C
-071238EA7003A348C7FCA738700380A338380700121CEA0E0EEA07FCEA01F011177F9614
->I<EAFFE013F8EA383C7F130E7FA3EB0380A8EB0700A2130E131E5BEAFFF813E011177F
-9614>I<B5FCA2EA3807A490C7FCA21338A2EA3FF8A2EA3838A290C7FCA3EB0380A4B5FC
-A211177F9614>I<B4FCA21238AF1307A4B5FCA210177E9614>76
-D<38FC1F80A2007C1300EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80
-A211177F9614>I<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4
-133E12FEA211177F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA5
-1480EB1DC0A238FE0F80EB070012177F9614>82 D<EA0FCCEA1FFCEA307CEA603CEAE01C
-A313001270127EEA3FE0EA0FF0EA01F8EA001C131E130E126012E0A2EAF01CEAF838EAFF
-F0EAC7E00F177E9614>I<387FFF80B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I<
-EAFFE0A21200B3A712FFA20B1D7F9914>93 D<EAFFFEA30F037E7E14>95
-D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3EA707C383FFF
-80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0
-A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804
-EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130E
-A5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF1217
-7F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA
-380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12
-FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA30
-18EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C
-1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF
-8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I<
-12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF
-1F80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF38
-3CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA
-38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA
-3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB
-0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA
-1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F
-14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8
-EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFF
-F8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F0
-0F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A238
-3C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700
-EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA
-0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38
-FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7
-FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA07
-00120EEA1C0712381270B5FCA210107F8F14>I<EA1C10EA3F38EAE7E0EA41C00D047D96
-14>126 D E
+14>I<1203A25A5A123F12F712471207AEEA7FF0A20C177C9614>49
+D<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F80EA03
+C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA03E0EA
+01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F157E95
+14>62 D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A41300C7
+FCA41203EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC1271EA
+731E1277EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F177E96
+14>I<EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2487EA2
+38FE3F80A211177F9614>I<3801F180EA07FFEA0E1FEA1C071238EA7003A348C7FCA738
+700380A338380700121CEA0E0EEA07FCEA01F011177F9614>67 D<38FC1F80A2007C1300
+EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80A211177F9614>77
+D<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4133E12FEA21117
+7F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA51480EB1DC0A238
+FE0F80EB070012177F9614>82 D<EAFFE0A21200B3A712FFA20B1D7F9914>93
+D<EAFFFEA30F037E7E14>95 D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C
+1C127012E0A3EA707C383FFF80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA
+1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<
+EA03F8EA0FFEEA1C0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F0
+0F107E8F14>I<137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301E
+EA383E381FEFC0EA07CF12177F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2
+EAFFFEA2EAE00012601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA
+038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA
+383B38301800EA701CA3EA3018EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA70
+0F38E00380A438700700EA3C1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1D
+FEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA212
+07ACEAFFF8A20D187C9714>I<136013F0A213601300A4EA1FF0A2EA0070B2EA40E0EAE0
+C0EA7F80EA3F000C207E9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0
+A2EA1E70EA1C38133C131C7F38FF1F80A21117809614>I<EAFF80A21203B3EAFFFEA20F
+177E9614>I<EAFB8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78
+EAFDFEEA1F86EA1E07121CAA38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701C
+A2EAE00EA6EA701CEA783CEA3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07
+EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218
+808F14>I<EA03E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7
+EA0007A6EB3FE0A213187F8F14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EA
+FFF0A211107F8F14>I<EA0FD8EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA00
+1CEA600612E012F0EAF81CEAFFF8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E
+00A8130EA3131CEA07F8EA01F00F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03
+E71310808F14>I<38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA31110
+7F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811
+107F8F14>I<EA7E3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E78133848
+7E38FE3F80A211107F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370
+A25B1201A25BA3485A12730077C7FC127E123C11187F8F14>I<EA3FFF5AEA700E131C13
+38EA007013E0EA01C0EA0380EA0700120EEA1C0712381270B5FCA210107F8F14>I<EA1C
+10EA3F38EAE7E0EA41C00D047D9614>126 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmsl9 9 2
-/Fe 2 121 df<1270A212F0126004047D830B>46 D<383FC7E038078380EB0200EA0384
-13C8EA01D8EA00F05B7F120113381202487EEA081E123838FC3FC013107F8F14>120
-D E
+%DVIPSBitmapFont: Fe cmti9 9 1
+/Fe 1 47 df<1230127812F0126005047C830C>46 D E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Ff cmr9 9 39
 /Ff 39 123 df<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA1C03AE38FF
@@ -245,59 +241,52 @@
 5A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA7E03B5FCA214167E95
 19>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmtt10 12 24
-/Fi 24 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F
-FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<EB7C38EA01FF000713F8EA
-0F83EA1E00001C13785A14385AA214005AA812701438A27EA26C1370001E13F0380F83E0
-3807FFC00001138038007C00151E7E9D1A>67 D<B512F8A3381C0038A51400A2130EA3EA
-1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E00
-1CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<B5
-1280A33801C000B3A6B51280A3111E7C9D1A>73 D<387F03F838FF87FC387F03F8381C01
-E0EB03C01480EB07005B131E131C5B13785B7F121DEA1FDC139C130EEA1E0F7F001C1380
-1303EB01C0A2EB00E0A21470007F13FC38FF81FE387F00FC171E7F9D1A>75
-D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E7F9D1A>I<EAFFFEEBFF80
-14C0381C03E0EB00F0147014781438A41478147014F0EB03E0381FFFC01480EBFE00001C
-C7FCA9B47EA3151E7E9D1A>80 D<38FF01FEA3381C0070A3001E13F0000E13E0A3380701
-C0A438038380A43801C700A4EA00C613EEA3136C137CA21338171E7F9D1A>86
-D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803127012
-E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 D<EBFF80000313C0000F13
-E0EA1F01383C00C04813001270A25AA51270A2007813707E381F01F0380FFFE0000313C0
-3800FE0014157D941A>99 D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA78
-03EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<EA01
-F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0A300E0C7FC1270A200
-7813707E381F01F0380FFFE0000313803800FE0014157D941A>I<12FEA3120EA6133EEB
-FF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104
-D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I<
-387CE0E038FFFBF8EA7FFF381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F
-00191580941A>109 D<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E7
-13E317157F941A>I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0
-A6EAF001007013C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<EA
-FE3EEBFF80B512E0380FC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EB
-FFC0000E1380EB3E0090C7FCA8EAFFE0A316207F941A>I<387F81F838FF8FFC387F9FFE
-3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114
-D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F
-9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F
-C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C
-A2133817157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB
-8380EA01C3A2EBC700EA00E7A213E61366136E133CA31338A3137813701230EA78E01271
-EA7FC06C5A001EC7FC17207F941A>121 D E
+%DVIPSBitmapFont: Fi cmtt10 12 29
+/Fi 29 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F
+FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<B512F8A3381C0038A51400
+A2130EA3EA1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69
+D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012
+FF127F161E7F9D1A>I<B51280A33801C000B3A6B51280A3111E7C9D1A>73
+D<387F03F838FF87FC387F03F8381C01E0EB03C01480EB07005B131E131C5B13785B7F12
+1DEA1FDC139C130EEA1E0F7F001C13801303EB01C0A2EB00E0A21470007F13FC38FF81FE
+387F00FC171E7F9D1A>75 D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E
+7F9D1A>I<387FFFC0B512E0A26C13C013047D7E1A>95 D<EA1FF0EA3FFC487EEA780FEA
+300738000380A2137FEA07FF121FEA3F83EA7803127012E0A3EA7007EA780F383FFFFCEA
+1FFDEA07F016157D941A>97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB00
+38120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>I<
+EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E381F
+01F0380FFFE0000313C03800FE0014157D941A>I<EB1FC0A31301A6EA01F1EA07FDEA0F
+FFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1
+161E7E9D1A>I<EA01F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0
+A300E0C7FC1270A2007813707E381F01F0380FFFE0000313803800FE0014157D941A>I<
+EB07E0EB1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF8048
+13C06C1380151E7F9D1A>I<3801F87C3807FFFE5A381E078C381C0380383801C0A5381C
+0380EA1E07381FFF005BEA39F80038C7FCA27E381FFF8014E04813F83878007C0070131C
+48130EA40070131C0078133C003E13F8381FFFF0000713C00001130017217F941A>I<12
+FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D
+1A>I<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>
+I<12FEA3120EA6EB0FFCEB1FFEEB0FFCEB03C0EB0780EB0F00131E5B5B13FC120F13DE13
+8F380E07801303EB01C014E0EB00F038FFE3FE14FF14FE181E7F9D1A>107
+D<EAFFE0A31200B3A6B512E0A3131E7D9D1A>I<387CE0E038FFFBF8EA7FFF381F1F1CEA
+1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>I<EAFE3EEBFF80B512
+C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>I<EA01F0EA07FCEA1FFF
+383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0EA7803383C0780EA3E0F
+381FFF00EA07FCEA01F013157D941A>I<EAFE3EEBFF80B512E0380FC1F0EB8070EB0038
+120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E1380EB3E0090C7FCA8EAFFE0A316
+207F941A>I<3801F8E0EA07FEEA0FFFEA1E07EA3C03EA78011270EAE000A613011270EA
+7803123CEA1E0FEA0FFFEA07FCEA01F0C7FCA8EB0FFEA317207E941A>I<387F81F838FF
+8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>I<3807FB
+80EA1FFF127FEA7807EAE003A30078C7FCEA7FC0EA1FFCEA07FE38003F801307386001C0
+12E0A2EAF00338FC0780B51200EAEFFEEAE3F812157C941A>I<487E1203A6387FFFE0B5
+FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F9B1A>I<38FE0FE0A3EA0E
+00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387FC7FC00FF13FE007F13FC380E
+00E0A3380701C0A338038380A33801C700A3EA00EEA3137CA2133817157F941A>I<387F
+C7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7
+A213E61366136E133CA31338A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F
+941A>121 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmmi10 10.95 1
-/Fj 1 59 df<127012F8A3127005057C840D>58 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmsltt10 10.95 6
-/Fk 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E
-769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07
-C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C
-0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E
-00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6
-38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E
-A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92
-D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303
-3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmbx12 13.14 52
-/Fl 52 122 df<123C127E12FFA4127E123C08087C8711>46 D<EB7F803803FFF03807E1
+%DVIPSBitmapFont: Fj cmbx12 13.14 52
+/Fj 52 122 df<123C127E12FFA4127E123C08087C8711>46 D<EB7F803803FFF03807E1
 F8380F807C48487E48133F003E7F007E1480A400FE14C0AD007E1480A46CEB3F00A26C13
 3E6C6C5A3807E1F86CB45A38007F801A237EA21F>48 D<131C133C13FC12FFA21200B3AA
 387FFFFCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12
@@ -401,55 +390,130 @@
 5AA26DC7FCA21306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720
 >I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmsl10 10.95 28
-/Fm 28 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380
+%DVIPSBitmapFont: Fk cmsl10 10.95 48
+/Fk 48 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380
 70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12
-D<EAFFF0A20C027E8A0F>45 D<0007B512F83900F800780178133815185B1508A53901E0
-0800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>
-70 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C
-146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381
-380F00016D487E39FFF00FFE231F7E9E23>75 D<EA07F8EA0C0CEA1E061307121C1200A3
-13FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F878014147D9317
->97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14F0A538
-7001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA0383380E
-0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>
-I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278
-12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07
-0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18
-EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA
-0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238
-0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0
-14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012
-0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6
-381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FCA6EA03
-80121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712011200
-A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E7FA213
-0F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0
-A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98618639
-07A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E
-3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713E01300
-A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C
-00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07
-E014147D9317>I<EBE3E03807EC383801F01C6C487E140F48487E1580A53903800F00A2
-140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>
-I<EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0A21307
-127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381F
-B380EA07C71203EB8300EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9
-EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212
-601306EAF004EAC818EA87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00
-A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03
-A238380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0
-001C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15
-147C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D810013
-09EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321
->I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E13
-4E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F80
-3901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C
-133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I
-E
+D<EB03F4EB1C1CEB383C137013E01438EA01C0A538038070387FFFF038038070A4380700
+E0A6380E01C0A6381C0380001E13C038FF9FF016207E9F19>I<EAFFF0A20C027E8A0F>
+45 D<137EEA01C338030180000713C0EA0E0014E05AA2EA3C0112381278A538F003C0A5
+1480130712E01400A2130E1260EA701CEA3038EA3870EA0FC0131F7C9D17>48
+D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B
+9D17>I<1408140C141C143CA2147C147E149EA2EB011EA21302801304A21308A2011013
+8014071320A2EB7FFF90384007C0EB8003A2EA0100A21202EC01E01206001F130339FF80
+1FFE1F207F9F22>65 D<0007B5FC3900F803C090387801E0EC00F04913F8A515F03801E0
+01EC03E015C0EC0F809038FFFE009038E00F803903C003C0EC01E015F0A21400A2485A14
+01A215E01403EC07C0390F000F80EC3E00B512F01D1F7E9E20>I<ECFE02903807018690
+381C004E0170133E49131E4848131C4848130C120748C7FC5A121E003E1408003C140012
+7CA45AA4127815101520A27E1540001C14806CEB01006C13023803800C3800E030EB3FC0
+1F217C9F21>I<0007B57E3900F801E0903878007081497F151E150E150FA348481480A6
+484814005DA3151E153E4848133C5DA25D4A5A4A5A260F000FC7FC143CB512F0211F7E9E
+23>I<0007B512FC3900F8007C0178131C150C5B1504A414043901E00800A31438EBFFF8
+EBE0383803C010A4EC00081510485AA21520A2156015C0380F00011407B612801E1F7E9E
+1F>I<0007B512F83900F800780178133815185B1508A53901E00800A314181438EBFFF8
+3803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<3A07FF83FFC03A00F8
+007C000178133CA2495BA648485BA490B5FCEBE0004848485AA64848485AA64848485A01
+807F39FFF07FF8221F7E9E22>72 D<3807FF803800F8001378A25BA6485AA6485AA6485A
+A648C7FC7FEAFFF0111F7E9E10>I<3A07FF803FE03A00F8001F000178130C5D4913205D
+5D4AC7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E
+141F48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75
+D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780A25C1402140614
+0E380F001E147CB512FC191F7E9E1C>I<D807F8EC7FE00000ED7C00017814BCA2019C49
+5AA21502A2018E13041508D8010E5C1510A26D1320A215400002EC41E09038038081EC81
+01A21482A23A0401C403C0A214C8A2EB00F0000C13E04B5A001E01C07FD8FFC0EB7FFC2B
+1F7E9E2A>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83
+C0D801035BEB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A214
+01000C5C001E1300B47E221F7E9E22>I<EB01FCEB0E0790383801C090387000E0484813
+F048481378485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01
+F0007C14E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F80
+1F217C9F23>I<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC
+01E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807
+FFFE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00
+EBFFF03803C03880141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078C
+C7EA01F020207E9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C0006130412
+0EA3000F1300A27FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA2004013
+38A3143000601370146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512
+F0383C078000301430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383F
+FFE01C1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A648
+5BA600705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFF
+F07FF81FF03B1F000FC007C0001E903907800380001FED01006C1502140F5EEC17C00213
+5B142301805C000713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C4
+15F2EBC80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87
+D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313
+1EEB2E2038784F40381F878014147D9317>97 D<1207123F120F7EA2120EA65A137CEA1D
+83381E0180001C13C0EB00E05A14F0A5387001E0A214C013031480EB0700EAE80EEACC38
+EA83E014207B9F19>I<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5B
+EA70026C5AEA1C18EA07E011147D9314>I<1438EB01F8EB00781438A21470A614E013FC
+EA0382EA0601121CEA3C00383801C0127812F0A438E00380A412F0EA700738380F00381C
+37803807C7E015207D9F19>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00
+F0C7FCA25AA46C5AEA7002EA3004EA1C18EA07E011147D9314>I<EB07C0EB1C60EB30F0
+1360EBE0E0EBC0001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F
+9F0E>I<140EEB3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB87
+00EA04FC48C7FCA21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0
+381C0700EA07FC181F809417>I<13E0120712011200A2485AA6485AEB8F80EB90E013A0
+EBC0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014207E9F19>I<
+EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA65A121EEA
+FF800B1F7F9E0C>I<13E0120712011200A2485AA6485AEB81FCEB80F014C0EB81801400
+EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F
+18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B
+207F9F0C>I<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB00
+70A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F
+90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014
+147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0
+130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C
+6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90
+C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C0038
+13C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4
+131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120E
+A65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13
+F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<
+1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C
+9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F
+9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075B
+A25BEA039013A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C03
+0060148015401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB
+80F0A26C485A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0
+C0EBE180EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03
+E038FE07FC18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B14301420
+5C13705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8
+FC12E61278191D809318>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmr8 8 41
-/Fn 41 124 df<126012F0A212701210A21220A21240A2040A7D960A>39
+%DVIPSBitmapFont: Fl cmti10 10.95 20
+/Fl 20 122 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5
+12E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801701310EC0E20A313609038E0
+0640EC038091C7FC5BA21201EA3180127948C8FC1262123C1D29829F1A>12
+D<127012F8A212F012E005057B840E>46 D<EBF180380389C038070780EA0E03121C123C
+383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F070013147C9317>
+97 D<137EEA01C138030080EA0E07121E001C1300003CC7FC5AA35AA45B12701302EA30
+0CEA1830EA07C011147C9315>99 D<1478EB03F8EB0070A414E0A4EB01C0A213F1EA0389
+38070780EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C
+80380F070015207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA780CEA7FF0EA
+78005AA4EA7001A21302EA380CEA1830EA07C010147C9315>I<EB3C60EBE2703801C1E0
+EA0380EA07005A380E01C0121EA3383C0380A4EB0700A2EA1C0F1317EA0C2EEA03CEEA00
+0EA25BA21230EA7838485AEA60E0EA3F80141D7E9315>103 D<13C0EA01E0A213C0C7FC
+A7120E12131223EA4380EA4700A21287120EA35AA3EA38401380A21270EA31001232121C
+0B1F7C9E0E>105 D<EA03C0121FEA0380A4EA0700A4120EA45AA45AA45AA3127112E2A4
+126412380A207C9F0C>108 D<391C0F80F0392630C318394740640C903880680EEB0070
+A2008E495A120EA34848485AA3ED70803A3803807100A215E115623970070064D8300313
+3821147C9325>I<381C0F80382630C0384740601380EB0070A2008E13E0120EA3381C01
+C0A3EB038400381388A2EB0708EB031000701330383001C016147C931A>I<137CEA01C3
+38030180000E13C0121E001C13E0123C1278A338F003C0A3EB07801400EA700F130EEA30
+18EA1870EA07C013147C9317>I<3801C1E0380262183804741C1378EB701EA2EA08E012
+00A33801C03CA3143838038078147014E0EBC1C038072380EB1E0090C7FCA2120EA45AA2
+B47E171D809317>I<EA1C1EEA266138278380EA47871307EB0300008EC7FC120EA35AA4
+5AA45A123011147C9313>114 D<13FCEA0302EA0601EA0C03130713061300EA0F8013F0
+EA07F8EA03FCEA003E130E1270EAF00CA2EAE008EA4010EA2060EA1F8010147D9313>I<
+EA018013C0EA0380A4EA0700A2EAFFF0EA0700120EA45AA45AA31320EA7040A21380A2EA
+3100121E0C1C7C9B0F>I<000E13C0001313E0382301C0EA4381EA4701A238870380120E
+A3381C0700A31410EB0E201218A2381C1E40EA0C263807C38014147C9318>I<380E0380
+EA1307002313C0EA4383EA4701130000871380120EA3381C0100A31302A25BA25BEA0E30
+EA03C012147C9315>I<000EEBC1C0001313E3392301C3E0384381C1384701C015603987
+038040120EA3391C070080A3EC0100A21306EB0F02000C5B380E13083803E1F01B147C93
+1E>I<000E13C0001313E0382301C0EA4381EA4701A238870380120EA3381C0700A4130E
+1218A2EA1C1EEA0C3CEA07DCEA001CA25B12F05BEAE060485AEA4380003EC7FC131D7C93
+16>121 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fm cmr8 8 29
+/Fm 29 118 df<126012F0A212701210A21220A21240A2040A7D960A>39
 D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49
 D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018
 13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0
@@ -459,65 +523,104 @@
 381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512
 E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214
 3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C
-0C1304A390C7FCA6EAFFC014177F9617>I<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F
-000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616
->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3
-EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13
-101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0
-14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0
-EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470
-A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96
-1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC
-EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038
-1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814
-10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206
-217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379
-EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400
-5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA
-70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012
-E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA
-E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670
-120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70
-70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838
-EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712
-7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813
-F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C
-EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5
-EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400
-5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12
-6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A
-70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80
-EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0
-EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80
-110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700
-0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07
-4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE
-1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212
-A4127810147F8D13>I<B512801101808812>123 D E
+0C1304A390C7FCA6EAFFC014177F9617>I<EAFFC0001CC7FCAD1420A31460A2144014C0
+1303B5FC13177F9616>76 D<00FEEB03F8001E14C000171305A338138009A23811C011A3
+3810E021A2EB7041A3EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<EAFF
+FE381C0380EB00C014601470A4146014C0EB0380381FFE00001CC7FCAAB47E14177F9618
+>80 D<EAFFFC381C0380EB00C014E01470A414E014C0EB0380381FFE00381C0780EB01C0
+EB00E0A514E1A2147238FF803C18177F961A>82 D<EA0FC4EA302CEA601CEA400CEAC004
+A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C130E13061280A3EAC004EAE008EAD810
+EA87E00F177E9614>I<387FFFF83860381800401308A200801304A300001300AF3803FF
+8016177F9619>I<12FCA212C0B3AB12FCA206217D980A>91 D<EA3FC0EA70601330EA20
+381200EA03F8EA1E3812301270EAE039A21379EA70FFEA1F1E100E7F8D12>97
+D<12F81238A8EA39F0EA3E0CEA380613077F1480A414005B1306EA361CEA21F011177F96
+14>I<EA07F0EA18381230EA7010EA600012E0A41260EA70081230EA1830EA07C00D0E7F
+8D10>I<EA0FC0EA1860EA3030EA7038EAE018EAFFF8EAE000A31260EA7008EA3010EA18
+30EA07C00D0E7F8D10>101 D<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE300
+12E7127C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0
+123813F01378133CA2EAFE7F10177F9613>I<EAF8F8EA3B1CEA3C0E1238AA38FE3F8011
+0E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5EA701CEA3018EA1830EA07
+C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A414005B130EEA3E1CEA39F00038
+C7FCA512FE11147F8D14>I<EAF9E0EA3A70123CEA38201300A9B4FC0C0E7F8D0E>114
+D<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80EA1FC0EA01E0EA8060A212C0EAE0C0EA9F
+000B0E7F8D0E>I<1208A31218A21238EAFFC0EA3800A71340A4EA1C80EA0F000A147F93
+0E>I<EAF83EEA380EAA131EEA1C2E3807CF80110E7F8D14>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmsy9 9 2
-/Fo 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E
+%DVIPSBitmapFont: Fn cmsy9 9 2
+/Fn 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E
 A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA
 0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I
 E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fp cmcsc10 10.95 8
-/Fp 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E
-48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900
-781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E
-38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4
-15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038
-0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713
-80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300
-EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB
-F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB
-087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A
-FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813
-08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E
-961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C
-130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110
+%DVIPSBitmapFont: Fo cmsltt10 10.95 29
+/Fo 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E
+769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3
+C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA
+7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203
+120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I<EB3E18EBFFB8
+4813F8EA07C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338
+380780383C0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3807FFC014E014F03801C0F814
+78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013
+07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000
+A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18
+1C7F9B18>I<EB1FF8EB3FFCEB1FF8EB01C0A4EB0380A6EB0700A6130EA2124012E06C5A
+EAE03CEAFFF86C5AEA1FC0161C7C9B18>74 D<EA07FC487E6C5AEA01C0A4485AA648C7FC
+A6120E14301470A4B512E0A3141C7E9B18>76 D<3907E01F80000FEB3FC0000714803903
+B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6
+5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12
+1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92
+D<387FFFC0B512E0A26C13C013047E7F18>95 D<EA03FC48B4FC4813801303380601C012
+00A2137FEA07FF121FEA3F813878038012F012E0A21307EA701F387FFFF0EA3FFBEA0FE1
+14147D9318>97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012
+38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I<EB07E0
+A31300A4EB01C0EA01F1EA07FDEA0FFFEA1E0FEA3C0738780380127012E0A4EB0700A25B
+5B6C5AEA787F383FFFC0381FEFE0380F87C0131C7C9B18>100 D<13F8EA07FE487E381F
+0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F
+FE6C5AEA07F012147B9318>I<EB01F8EB07FC131FEB1E3CEB38181400A25B381FFFF05A
+7E38007000A25BA6485AA6EA7FFE12FF127F161C7E9B18>I<EB1E1F90387FFF8090B5FC
+3901E1E3003803C0E01380EA0700A3495AA238038780EA07FF49C7FCEA0E7890C8FCA26C
+B47E4813E0487F383C007848133812705AA2147800705B387C03E0383FFFC0000F90C7FC
+EA03FC191F809318>I<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6
+EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106
+D<EA07E0120F12071200A4485AEBC7FEA3EBC1E0EBC3C038038780EB8F00139E13BC13FE
+13EEEA07CF1387EB0780130314C01301387FC7F838FFE7FC387FC7F8171C7F9B18>I<EA
+0FFCA3EA001CA45BA65BA65BA6B5128014C01480121C7D9B18>I<13FCEA03FF000F1380
+EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F
+FC6C5AEA07E013147C9318>111 D<EBF8C0EA03FDEA0FFFEA1F0FEA3C07387803801270
+12E0A4EB0700A25BA26C5AEA787FEA3FFEEA1FEEEA078EEA000EA35BA43801FF80A3121E
+7C9318>113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA
+FFFC7F5B17147E9318>I<EBFE603807FFE05AEA1F01121C003813C0EA3C00001F1300EA
+0FF8EA07FE3800FF801307383001C01270A238780380EA7C07B51200EAEFFEEA63F81314
+7D9318>I<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF
+E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013
+E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119
+D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC
+EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F
+F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13
+78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I
+E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fp cmcsc10 10.95 12
+/Fp 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807
+FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97
+D<EB7E083803819838070078000C1338001C13185A00781308127000F01300A700701308
+127812386C1310120C000713603803818038007E0015177E961B>99
+D<B512C0EA1C011300144014601420A213081400A21318EA1FF8EA1C1813081410A21300
+14301420A21460EB01E0B5FC14177E9619>101 D<B512C0EA1C011300144014601420A2
+13081400A21318EA1FF8EA1C181308A390C7FCA6EAFFC013177E9618>I<EB7E08380381
+9838070078000C1338001C13185A00781308127000F01300A5EB03FEEB00381270127812
+387E120C1207380380D838007F0817177E961D>I<EAFF80EA1C00B3A3EAFF8009177E96
+0E>105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13
+0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110
+D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700
+70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D>
+I<EAFFFCEA1C07EB03C0130114E0A414C01303EB0700EA1FFC001CC7FCAAB47E13177E96
+19>I<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA
+001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9615>115
 D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117
-D E
+D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F
+133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF
+18177F961C>120 D E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fq cmbx12 17.28 34
 /Fq 34 121 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3
@@ -602,10 +705,10 @@
 A328207F9F2B>I E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fr cmsy10 10.95 1
-/Fr 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000
-061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15
-30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7
-FC282B7EA02D>13 D E
+/Fr 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01
+800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15
+306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0
+D900FEC7FC272B7DA02E>13 D E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fs cmbx12 14.4 55
 /Fs 55 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
@@ -730,8 +833,8 @@
 3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B
 EA74F0EA3FE0EA0F8020277F9A23>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ft cmtt10 10.95 90
-/Ft 90 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
+%DVIPSBitmapFont: Ft cmtt10 10.95 91
+/Ft 91 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
 D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5
 12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18>
 I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F
@@ -782,8 +885,8 @@
 14005AA8127014E0A27E123C381E01C0EA0F073807FF803803FE00EA00F8131C7E9B18>
 I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114
 C01303EB0F80387FFF00485AEA7FF8141C7F9B18>I<B512F0A3381C0070A41400A2130E
-A3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F8A3381C0038A4
-1400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<3801F1C0EA03FD
+A3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F0A3381C0070A4
+1400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0A3141C7E9B18>I<3801F1C0EA03FD
 EA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F130F387001C0A2130312
 38A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F07F038FF8FF8387F07F0
 381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>I<EA7FFFB5
@@ -811,55 +914,56 @@
 8EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138EEA070F7F000E138013
 03001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03F8EAFF07EAFE03381C
 01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC48
-7E6C5A151C7F9B18>I<EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>91
-D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F
-1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8A3EA00
-38B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18>95
-D<1206121E123E12381270A212E0A312F812FC127CA21238070E789E18>I<EA0FF0EA1F
-FC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3EAF007EA780F383F
-FFF8EA1FFDEA07F015147E9318>I<127E12FE127E120EA5133EEBFF80000F13C0EBC1E0
-1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E138038063E00151C809B18
->I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270EB01C01238EA3E0338
-1FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5EA03E3EA0FFBEA1FFF
-EA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFFF0380FFBF83803E3F0
-151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A238E001C0A2B5FCA300
-E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D9318>I<EB1F80EB7F
-C0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7FFFA3131C7F9B18>I<
-3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7
-FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E03381FFFC06C13
-803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13C013C1EB80E013
-00120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA07C0A3EA0380C7FCA4
-EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA313381300A4EA0FFCA3EA00
-1CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E12FE127E120EA5EB3F
-F0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014C0387FC7F812FF
-127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9C1C038FFF7F013
-FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF
-80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA
-01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C
-0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E0
-1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7F
-C0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6
-EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E93
-18>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E
-9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F3860
-0780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5
-FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EA
-FE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF0
-00FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A2
-137015147F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD
-000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA07
-8EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000
-FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207
-EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F
-806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B
-13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB
-780013E0AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>
-I<126012F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB
-7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8
-EAF1F0EA60C00F067C9B18>I E
+7E6C5A151C7F9B18>I<383FFFE05AA2387001C01303EB07801400C65A131E131C133C5B
+137013F0485A5B1203485A90C7FC5A001E13E0121C123C5A1270B5FCA3131C7E9B18>I<
+EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>I<126012F0A27E1278127C123CA2123E12
+1E121F7EA27F12077F1203A27F12017F12007F1378A2137C133C133E131EA2131F7F1480
+1307A2EB030011247D9F18>I<EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>I<387FFFC0
+B512E0A26C13C013047E7F18>95 D<1206121E123E12381270A212E0A312F812FC127CA2
+1238070E789E18>I<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F
+03127812E0A3EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>I<127E12FE127E12
+0EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFF
+C0000E138038063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FC
+A25AA61270EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F
+131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA
+3C1F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F383807
+80EA7003A238E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA
+01F812147D9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801
+C000AEEA7FFFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C
+0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338
+A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA513
+3EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>
+I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338
+137CA313381300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C
+18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA
+0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>I<EAFFC0A31201B3A4B51280A311
+1C7D9B18>I<38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB
+3E3E1714809318>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38
+FFE7FE387FC7FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E0
+00E0A5EAF001007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<
+EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EB
+FFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1F
+FFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA00
+03A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0
+005BA290C7FCA9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7
+FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F01114
+7D9318>I<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380
+EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE
+3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700
+A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0
+A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>
+I<387F8FF0139F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA03
+9E138EEA0707000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13
+F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC13
+78A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA23870
+01E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A3
+14147F9318>I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E01200AB
+1378EB7FE0131F130713247E9F18>I<126012F0B3B012600424769F18>I<127CB4FC13C0
+1203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18
+>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA60C00F067C9B18>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fu cmr10 10.95 78
-/Fu 78 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
+%DVIPSBitmapFont: Fu cmr10 10.95 77
+/Fu 77 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
 B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701
 A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07
 00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903
@@ -877,7 +981,7 @@
 A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35AA2122D
 7EA117>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78
 0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>I<13801203120F12F31203B3A6EA
-07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF803
+07C0EA7FFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF803
 A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380EA
 3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F1200
 1400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F013801240
@@ -905,24 +1009,23 @@
 9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF130113
 001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B6128038078007
 1401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE1A
-1F7F9E1E>I<90380FE0109038381C309038E002703803C00139078000F048C71270121E
-15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903
-C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD
-90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<
-3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E
-17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13
-C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E
-9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>
-I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A2
-90380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E
-2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2
-EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E
-9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A200
-7C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB
-03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C14
-1E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<
-B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143CA3
-143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82
+1F7F9E1E>I<90380FE02090387818609038E004E03803800238070001481300001E1460
+A25A1520127C127800F81400A7EC7FFCEC03E000781301127C123CA27EA27E7E38038002
+3900E00460903878182090380FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5FC
+EB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<39FFF0
+07FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21E01341
+EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23>75
+D<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>I<B4
+6CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A29038
+0E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>
+I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03
+C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22
+>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14
+F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C0
+6C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80
+EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<B512
+E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814
+3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>82
 D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8
 6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180
 38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014
@@ -938,41 +1041,41 @@
 D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA80
 40A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80
 A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96
-D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313
+D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313
 1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00
 C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F
 19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C
 0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112
 381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA
-0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706
-EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0
-1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA
-33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C
-13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2
-121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F
-7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA
-6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013
-E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12
-FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2
-001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38
-FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600
-7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01
-8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7
-FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612
-7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD
-18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0
-00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14
-7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C
-7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83
-F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370
-A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8
-0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14
-7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370
-137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>
-I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00
-E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12
-60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70
-06130EEAFFFE10147F9314>I E
+0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA
+01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010
+20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33
+E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13
+C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212
+1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F
+9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61
+80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0
+EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC
+121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200
+1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF
+8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070
+13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180
+14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC
+A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270
+12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18
+EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000
+127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F
+9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F
+9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8
+383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3
+132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807
+04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F
+9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013
+7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I<
+38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8
+A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260
+EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006
+130EEAFFFE10147F9314>I E
 %EndDVIPSBitmapFont
 %DVIPSBitmapFont: Fv cmbx12 20.736 14
 /Fv 14 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F
@@ -1027,3543 +1130,4070 @@
 
 %%EndSetup
 %%Page: 1 1
-1 0 bop 75 693 a Fv(GNU)33 b(Readline)h(Library)p 75
-743 1800 17 v 936 791 a Fu(Edition)17 b(4.1,)c(for)i
-Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.1.)1609 845
-y(Jan)o(uary)f(2000)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23
+1 0 bop 75 659 a Fv(GNU)33 b(Readline)h(Library)p 75
+709 1800 17 v 936 757 a Fu(Edition)17 b(4.3,)c(for)i
+Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.3.)1643 811
+y(Marc)o(h)e(2002)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23
 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75
 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop
 %%Page: 2 2
-2 1 bop 75 250 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f
-(GNU)g(Readline)i(Library)l(,)e(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h
-(the)f(consistency)75 305 y(of)h(user)g(in)o(terface)h(across)e
+2 1 bop 75 217 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f
+(GNU)g(Readline)h(Library)l(,)f(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h
+(the)f(consistency)75 271 y(of)h(user)g(in)o(terface)h(across)e
 (discrete)i(programs)e(that)h(need)h(to)e(pro)o(vide)i(a)f(command)g
-(line)i(in)o(terface.)75 373 y(Published)g(b)o(y)f(the)f(F)l(ree)g
-(Soft)o(w)o(are)f(F)l(oundation)75 427 y(59)h(T)l(emple)h(Place,)f
-(Suite)i(330,)75 482 y(Boston,)d(MA)h(02111)f(USA)75
-549 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g
+(line)i(in)o(terface.)75 339 y(Published)g(b)o(y)f(the)f(F)l(ree)g
+(Soft)o(w)o(are)f(F)l(oundation)75 394 y(59)h(T)l(emple)h(Place,)f
+(Suite)i(330,)75 448 y(Boston,)d(MA)h(02111)f(USA)75
+516 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g
 (distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o
-(vided)h(the)75 604 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q
+(vided)h(the)75 570 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q
 (ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)75
-671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g
+638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g
 (distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h(man)o(ual)g
-(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,)
+(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,)
 g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g(deriv)o(ed)g(w)o
-(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g(of)g(a)f(p)q
+(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g(of)g(a)f(p)q
 (ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
-848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
+814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
 (distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
-g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
+g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
 (for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
-(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
+(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
 (translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are)
 d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289
-2661 y Fr(\015)i Fu(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+2661 y Fr(\015)h Fu(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l
 (oundation,)h(Inc.)p eop
 %%Page: 1 3
 1 2 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(1)75 183 y Fq(1)41 b(Command)28 b(Line)e(Editing)137
-299 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f
+b(1)75 149 y Fq(1)41 b(Command)28 b(Line)e(Editing)137
+271 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f
 (of)g(the)g Fp(gnu)g Fu(command)g(line)i(editing)f(in)o(terface.)75
-426 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137
-522 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e
+403 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137
+501 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e
 (notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137
-589 y(The)h(text)327 587 y Fo(h)p 339 561 56 2 v 339
-589 a Fn(C-k)p 339 597 V 393 587 a Fo(i)424 589 y Fu(is)f(read)g(as)g
-(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q
-(duced)h(when)f(the)1831 587 y Fo(h)p 1844 561 19 2 v
-1844 589 a Fn(k)p 1844 597 V 1860 587 a Fo(i)75 644 y
-Fu(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h
-(depressed.)137 711 y(The)f(text)325 709 y Fo(h)p 337
-683 63 2 v 337 711 a Fn(M-k)p 337 719 V 397 709 a Fo(i)427
-711 y Fu(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o
-(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y)
+569 y(The)h(text)f Fo(C-k)h Fu(is)g(read)g(as)f(`Con)o(trol-K')g(and)h
+(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831
+567 y Fn(h)p 1844 541 19 2 v 1844 569 a Fm(k)p 1844 577
+V 1860 567 a Fn(i)75 624 y Fu(k)o(ey)d(is)h(pressed)g(while)g(the)f
+(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g
+Fo(M-k)f Fu(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o
+(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y)
 o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930
-764 y Fo(h)p 942 738 19 2 v 942 766 a Fn(k)p 942 774
-V 958 764 a Fo(i)987 766 y Fu(k)o(ey)g(is)h(pressed.)20
-b(The)15 b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 764 y
-Fo(h)p 1791 738 72 2 v 1791 766 a Fn(AL)m(T)p 1791 774
-V 1860 764 a Fo(i)75 821 y Fu(on)e(man)o(y)g(k)o(eyb)q(oards.)19
+745 y Fn(h)p 942 719 V 942 747 a Fm(k)p 942 755 V 958
+745 a Fn(i)987 747 y Fu(k)o(ey)g(is)h(pressed.)20 b(The)15
+b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Fn(h)p 1791
+719 72 2 v 1791 747 a Fm(AL)m(T)p 1791 755 V 1860 745
+a Fn(i)75 802 y Fu(on)e(man)o(y)g(k)o(eyb)q(oards.)19
 b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled)
-1213 819 y Fo(h)p 1225 793 V 1225 821 a Fn(AL)m(T)p 1225
-828 V 1294 819 a Fo(i)1322 821 y Fu(\(usually)i(to)e(either)i(side)g
-(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fo(h)p
-400 847 V 400 876 a Fn(AL)m(T)p 400 883 V 469 874 a Fo(i)499
-876 y Fu(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g
-(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 874 y Fo(h)p
-1709 847 V 1709 876 a Fn(AL)m(T)p 1709 883 V 1778 874
-a Fo(i)1808 876 y Fu(k)o(ey)75 930 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f
+1213 800 y Fn(h)p 1225 774 V 1225 802 a Fm(AL)m(T)p 1225
+810 V 1294 800 a Fn(i)1322 802 y Fu(\(usually)i(to)e(either)i(side)g
+(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Fn(h)p
+400 829 V 400 857 a Fm(AL)m(T)p 400 865 V 469 855 a Fn(i)499
+857 y Fu(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g
+(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Fn(h)p
+1709 829 V 1709 857 a Fm(AL)m(T)p 1709 865 V 1778 855
+a Fn(i)1808 857 y Fu(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f
 (also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g
-(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 985
+(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967
 y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g
-(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1052
+(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035
 y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694
-1050 y Fo(h)p 706 1024 V 706 1052 a Fn(AL)m(T)p 706 1060
-V 775 1050 a Fo(i)801 1052 y Fu(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w)
+1033 y Fn(h)p 706 1007 V 706 1035 a Fm(AL)m(T)p 706 1043
+V 775 1033 a Fn(i)801 1035 y Fu(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w)
 o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75
-1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping)
-809 1105 y Fo(h)p 821 1079 70 2 v 821 1107 a Fn(ESC)p
-821 1115 V 888 1105 a Fo(i)915 1107 y Fm(\014rst)p Fu(,)g(and)g(then)h
-(t)o(yping)1339 1105 y Fo(h)p 1351 1079 19 2 v 1351 1107
-a Fn(k)p 1351 1115 V 1368 1105 a Fo(i)1383 1107 y Fu(.)18
-b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j
-Fm(metafying)k Fu(the)425 1160 y Fo(h)p 437 1134 V 437
-1162 a Fn(k)p 437 1169 V 454 1160 a Fo(i)484 1162 y Fu(k)o(ey)l(.)137
-1229 y(The)h(text)334 1227 y Fo(h)p 347 1201 100 2 v
-347 1229 a Fn(M-C-k)p 347 1236 V 444 1227 a Fo(i)479
-1229 y Fu(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h
-(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Fm(metafying)291
-1281 y Fo(h)p 303 1255 56 2 v 303 1283 a Fn(C-k)p 303
-1291 V 357 1281 a Fo(i)372 1283 y Fu(.)137 1350 y(In)e(addition,)h(sev)
-o(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30
-b(Sp)q(eci\014cally)l(,)1384 1348 y Fo(h)p 1396 1322
-73 2 v 1396 1350 a Fn(DEL)p 1396 1358 V 1467 1348 a Fo(i)1482
-1350 y Fu(,)1514 1348 y Fo(h)p 1526 1322 70 2 v 1526
-1350 a Fn(ESC)p 1526 1358 V 1593 1348 a Fo(i)1608 1350
-y Fu(,)1640 1348 y Fo(h)p 1652 1322 72 2 v 1652 1350
-a Fn(LFD)p 1652 1358 V 1722 1348 a Fo(i)1737 1350 y Fu(,)1768
-1348 y Fo(h)p 1780 1322 70 2 v 1780 1350 a Fn(SPC)p 1780
-1358 V 1847 1348 a Fo(i)1862 1350 y Fu(,)75 1403 y Fo(h)p
-87 1377 76 2 v 87 1405 a Fn(RET)p 87 1413 V 160 1403
-a Fo(i)175 1405 y Fu(,)23 b(and)306 1403 y Fo(h)p 318
-1377 74 2 v 318 1405 a Fn(T)m(AB)p 318 1413 V 390 1403
-a Fo(i)427 1405 y Fu(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f
+1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping)
+809 1088 y Fn(h)p 822 1062 70 2 v 822 1090 a Fm(ESC)p
+822 1098 V 888 1088 a Fn(i)915 1090 y Fl(\014rst)p Fu(,)g(and)g(then)h
+(t)o(yping)1339 1088 y Fn(h)p 1351 1062 19 2 v 1351 1090
+a Fm(k)p 1351 1098 V 1368 1088 a Fn(i)1383 1090 y Fu(.)18
+b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j
+Fk(metafying)k Fu(the)425 1143 y Fn(h)p 437 1117 V 437
+1145 a Fm(k)p 437 1153 V 454 1143 a Fn(i)484 1145 y Fu(k)o(ey)l(.)137
+1214 y(The)i(text)e Fo(M-C-k)h Fu(is)h(read)f(as)f(`Meta-Con)o(trol-k')
+g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75
+1268 y Fk(metafying)e Fo(C-k)p Fu(.)137 1337 y(In)g(addition,)h(sev)o
+(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30
+b(Sp)q(eci\014cally)l(,)1384 1335 y Fn(h)p 1396 1309
+73 2 v 1396 1337 a Fm(DEL)p 1396 1345 V 1467 1335 a Fn(i)1482
+1337 y Fu(,)1514 1335 y Fn(h)p 1526 1309 70 2 v 1526
+1337 a Fm(ESC)p 1526 1345 V 1593 1335 a Fn(i)1608 1337
+y Fu(,)1640 1335 y Fn(h)p 1652 1309 72 2 v 1652 1337
+a Fm(LFD)p 1652 1345 V 1722 1335 a Fn(i)1737 1337 y Fu(,)1768
+1335 y Fn(h)p 1780 1309 70 2 v 1780 1337 a Fm(SPC)p 1780
+1345 V 1847 1335 a Fn(i)1862 1337 y Fu(,)75 1390 y Fn(h)p
+87 1364 76 2 v 87 1392 a Fm(RET)p 87 1399 V 160 1390
+a Fn(i)175 1392 y Fu(,)23 b(and)306 1390 y Fn(h)p 318
+1364 74 2 v 318 1392 a Fm(T)m(AB)p 318 1399 V 390 1390
+a Fn(i)427 1392 y Fu(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f
 (in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75
-1460 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32
+1447 y(Section)d(1.3)f([Readline)h(Init)g(File],)h(page)e(4\).)32
 b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444
-1458 y Fo(h)p 1456 1432 72 2 v 1456 1460 a Fn(LFD)p 1456
-1468 V 1526 1458 a Fo(i)1560 1460 y Fu(k)o(ey)l(,)h(t)o(yping)1802
-1458 y Fo(h)p 1814 1432 49 2 v 1814 1460 a Fn(C-j)p 1814
-1468 V 1860 1458 a Fo(i)75 1515 y Fu(will)c(pro)q(duce)g(the)f(desired)
-h(c)o(haracter.)j(The)874 1513 y Fo(h)p 886 1487 76 2
-v 886 1515 a Fn(RET)p 886 1522 V 959 1513 a Fo(i)989
-1515 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513
-y Fo(h)p 1397 1487 109 2 v 1397 1515 a Fn(Return)p 1397
-1522 V 1503 1513 a Fo(i)1533 1515 y Fu(or)1588 1513 y
-Fo(h)p 1600 1487 86 2 v 1600 1515 a Fn(En)o(ter)p 1600
-1522 V 1684 1513 a Fo(i)1714 1515 y Fu(on)f(some)75 1569
-y(k)o(eyb)q(oards.)75 1697 y Fs(1.2)33 b(Readline)23
-b(In)n(teraction)137 1793 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o
+1445 y Fn(h)p 1456 1419 72 2 v 1456 1447 a Fm(LFD)p 1456
+1454 V 1526 1445 a Fn(i)1560 1447 y Fu(k)o(ey)l(,)h(t)o(yping)1802
+1445 y Fn(h)p 1814 1419 49 2 v 1814 1447 a Fm(C-j)p 1814
+1454 V 1860 1445 a Fn(i)75 1501 y Fu(will)c(pro)q(duce)g(the)f(desired)
+h(c)o(haracter.)j(The)874 1499 y Fn(h)p 886 1473 76 2
+v 886 1501 a Fm(RET)p 886 1509 V 959 1499 a Fn(i)989
+1501 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499
+y Fn(h)p 1397 1473 109 2 v 1397 1501 a Fm(Return)p 1397
+1509 V 1503 1499 a Fn(i)1533 1501 y Fu(or)1588 1499 y
+Fn(h)p 1600 1473 86 2 v 1600 1501 a Fm(En)o(ter)p 1600
+1509 V 1684 1499 a Fn(i)1714 1501 y Fu(on)f(some)75 1556
+y(k)o(eyb)q(oards.)75 1688 y Fs(1.2)33 b(Readline)23
+b(In)n(teraction)137 1786 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o
 (e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,)
-h(only)g(to)f(notice)h(that)f(the)75 1848 y(\014rst)k(w)o(ord)f(on)h
-(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e
+h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h
+(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)i(library)f
 (giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75
-1903 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,)
+1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,)
 g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g
-(and)h(not)g(forcing)75 1958 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s
+(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s
 (jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h
-(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2012
+(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005
 y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f
 (insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75
-2067 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o
-(ou)e(simply)i(press)1160 2065 y Fo(h)p 1172 2039 155
-2 v 1172 2067 a Fn(RETURN)p 1172 2075 V 1324 2065 a Fo(i)1339
-2067 y Fu(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75
-2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120
-y Fo(h)p 646 2094 V 646 2122 a Fn(RETURN)p 646 2130 V
-798 2120 a Fo(i)813 2122 y Fu(;)g(the)h(en)o(tire)g(line)h(is)f
-(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177
-y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y
-Fl(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137
-2384 y Fu(In)12 b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g
-(the)h(line,)h(simply)g(t)o(yp)q(e)f(them.)18 b(The)12
-b(t)o(yp)q(ed)g(c)o(haracter)f(app)q(ears)75 2439 y(where)16
-b(the)h(cursor)f(w)o(as,)f(and)h(then)h(the)f(cursor)g(mo)o(v)o(es)g
-(one)g(space)g(to)g(the)g(righ)o(t.)23 b(If)17 b(y)o(ou)f(mist)o(yp)q
-(e)g(a)75 2493 y(c)o(haracter,)e(y)o(ou)h(can)g(use)h(y)o(our)f(erase)g
-(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h(delete)g(the)f(mist)o(yp)q
-(ed)h(c)o(haracter.)137 2560 y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)
-q(e)h(a)f(c)o(haracter,)f(and)i(not)f(notice)h(the)f(error)g(un)o(til)i
-(y)o(ou)e(ha)o(v)o(e)g(t)o(yp)q(ed)75 2615 y(sev)o(eral)f(other)f(c)o
-(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102
-2613 y Fo(h)p 1114 2587 57 2 v 1114 2615 a Fn(C-b)p 1114
-2623 V 1168 2613 a Fo(i)1197 2615 y Fu(to)f(mo)o(v)o(e)g(the)h(cursor)g
-(to)f(the)h(left,)g(and)75 2670 y(then)i(correct)e(y)o(our)h(mistak)o
-(e.)20 b(Afterw)o(ards,)13 b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g
-(to)g(the)g(righ)o(t)g(with)1714 2668 y Fo(h)p 1727 2642
-49 2 v 1727 2670 a Fn(C-f)p 1727 2678 V 1772 2668 a Fo(i)1787
-2670 y Fu(.)p eop
+2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o
+(ou)e(simply)i(press)1160 2058 y Fn(h)p 1172 2032 76
+2 v 1172 2060 a Fm(RET)p 1172 2068 V 1245 2058 a Fn(i)1260
+2060 y Fu(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f
+(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563
+2113 y Fn(h)p 575 2087 V 575 2115 a Fm(RET)p 575 2122
+V 648 2113 a Fn(i)663 2115 y Fu(;)i(the)f(en)o(tire)h(line)g(is)g
+(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75
+2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fj(1.2.1)30
+b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fu(In)12
+b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h
+(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f
+(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h
+(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23
+b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h
+(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h
+(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560
+y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f
+(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t)
+o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19
+b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fo(C-b)f
+Fu(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75
+2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13
+b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g
+(with)g Fo(C-f)p Fu(.)p eop
 %%Page: 2 4
-2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)i(Library)137
-183 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j
+2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)h(Library)137
+149 y(When)h(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j
 (y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75
-238 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h
+204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h
 (ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21
-b(Lik)o(ewise,)75 293 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j
+b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j
 (the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h
-(cursor)g(are)f(`pulled)75 348 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e
+(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e
 (blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h
 (text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75
-402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o
-(ws.)75 479 y Fo(h)p 87 453 57 2 v 87 481 a Fn(C-b)p
-87 489 V 142 479 a Fo(i)315 481 y Fu(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o
-(haracter.)75 558 y Fo(h)p 87 532 49 2 v 87 560 a Fn(C-f)p
-87 567 V 133 558 a Fo(i)315 560 y Fu(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c)
-o(haracter.)75 636 y Fo(h)p 87 610 73 2 v 87 638 a Fn(DEL)p
-87 646 V 158 636 a Fo(i)188 638 y Fu(or)244 636 y Fo(h)p
-256 610 159 2 v 256 638 a Fn(Bac)o(kspace)p 256 646 V
-412 636 a Fo(i)315 693 y Fu(Delete)h(the)f(c)o(haracter)g(to)f(the)h
-(left)h(of)f(the)g(cursor.)75 770 y Fo(h)p 87 744 57
-2 v 87 772 a Fn(C-d)p 87 779 V 142 770 a Fo(i)315 772
-y Fu(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75
-850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o
+369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o
+(ws.)75 449 y Fo(C-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o
+(haracter.)75 530 y Fo(C-f)168 b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h
+(c)o(haracter.)75 608 y Fn(h)p 87 582 73 2 v 87 610 a
+Fm(DEL)p 87 618 V 158 608 a Fn(i)188 610 y Fu(or)244
+608 y Fn(h)p 256 582 159 2 v 256 610 a Fm(Bac)o(kspace)p
+256 618 V 412 608 a Fn(i)315 665 y Fu(Delete)h(the)f(c)o(haracter)g(to)
+f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fo(C-d)168
+b Fu(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75
+825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o
 (haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75
-981 y Fo(h)p 87 955 50 2 v 87 983 a Fn(C-)p 126 983 11
-2 v 87 991 50 2 v 135 981 a Fo(i)165 983 y Fu(or)221
-981 y Fo(h)p 233 955 125 2 v 233 983 a Fn(C-x)c(C-u)p
-233 991 V 355 981 a Fo(i)315 1038 y Fu(Undo)17 b(the)g(last)f(editing)i
-(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o(y)f(bac)o
-(k)h(to)f(an)g(empt)o(y)315 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on)
-f(y)o(our)g(con\014guration,)g(the)863 1170 y Fo(h)p
-875 1144 159 2 v 875 1172 a Fn(Bac)o(kspace)p 875 1179
-V 1032 1170 a Fo(i)1063 1172 y Fu(k)o(ey)g(b)q(e)h(set)f(to)f(delete)i
-(the)f(c)o(haracter)g(to)f(the)75 1226 y(left)h(of)f(the)h(cursor)f
-(and)g(the)596 1224 y Fo(h)p 608 1198 73 2 v 608 1226
-a Fn(DEL)p 608 1234 V 679 1224 a Fo(i)710 1226 y Fu(k)o(ey)h(set)f(to)g
-(delete)h(the)g(c)o(haracter)f(underneath)h(the)g(cursor,)f(lik)o(e)75
-1279 y Fo(h)p 87 1253 57 2 v 87 1281 a Fn(C-d)p 87 1289
-V 142 1279 a Fo(i)157 1281 y Fu(,)f(rather)f(than)h(the)h(c)o(haracter)
-e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fl(1.2.2)30
-b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487
-y Fu(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e
+961 y Fo(C-_)g Fu(or)f Fo(C-x)h(C-u)315 1015 y Fu(Undo)i(the)g(last)f
+(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o
+(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75
+1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863
+1149 y Fn(h)p 875 1123 V 875 1151 a Fm(Bac)o(kspace)p
+875 1159 V 1032 1149 a Fn(i)1063 1151 y Fu(k)o(ey)g(b)q(e)h(set)f(to)f
+(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h
+(cursor)f(and)g(the)596 1204 y Fn(h)p 608 1178 73 2 v
+608 1206 a Fm(DEL)p 608 1213 V 679 1204 a Fn(i)710 1206
+y Fu(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h
+(the)g(cursor,)f(lik)o(e)75 1260 y Fo(C-d)p Fu(,)e(rather)h(than)g(the)
+g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75
+1374 y Fj(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137
+1471 y Fu(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e
 (basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g
-(do)g(editing)75 1542 y(of)f(the)h(input)h(line.)21 b(F)l(or)12
+(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12
 b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o
-(e)f(b)q(een)i(added)f(in)h(addition)75 1597 y(to)130
-1595 y Fo(h)p 142 1569 V 142 1597 a Fn(C-b)p 142 1605
-V 197 1595 a Fo(i)212 1597 y Fu(,)239 1595 y Fo(h)p 251
-1569 49 2 v 251 1597 a Fn(C-f)p 251 1605 V 297 1595 a
-Fo(i)312 1597 y Fu(,)339 1595 y Fo(h)p 351 1569 57 2
-v 351 1597 a Fn(C-d)p 351 1605 V 406 1595 a Fo(i)421
-1597 y Fu(,)g(and)536 1595 y Fo(h)p 548 1569 73 2 v 548
-1597 a Fn(DEL)p 548 1605 V 619 1595 a Fo(i)634 1597 y
-Fu(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h
-(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fo(h)p
-87 1702 55 2 v 87 1730 a Fn(C-a)p 87 1738 V 140 1728
-a Fo(i)315 1730 y Fu(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.)
-75 1807 y Fo(h)p 87 1781 53 2 v 87 1809 a Fn(C-e)p 87
-1817 V 138 1807 a Fo(i)315 1809 y Fu(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f
-(the)g(line.)75 1885 y Fo(h)p 87 1859 55 2 v 87 1887
-a Fn(M-f)p 87 1895 V 140 1885 a Fo(i)315 1887 y Fu(Mo)o(v)o(e)f(forw)o
-(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h(is)h(comp)q(osed)f(of)g
-(letters)g(and)h(digits.)75 1964 y Fo(h)p 87 1938 64
-2 v 87 1966 a Fn(M-b)p 87 1974 V 149 1964 a Fo(i)315
-1966 y Fu(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75
-2043 y Fo(h)p 87 2017 48 2 v 87 2045 a Fn(C-l)p 87 2052
-V 132 2043 a Fo(i)315 2045 y Fu(Clear)g(the)h(screen,)f(reprin)o(ting)h
-(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w)
-368 2121 y Fo(h)p 380 2095 49 2 v 380 2123 a Fn(C-f)p
-380 2131 V 426 2121 a Fo(i)452 2123 y Fu(mo)o(v)o(es)f(forw)o(ard)f(a)i
-(c)o(haracter,)f(while)1105 2121 y Fo(h)p 1117 2095 55
-2 v 1117 2123 a Fn(M-f)p 1117 2131 V 1170 2121 a Fo(i)1197
-2123 y Fu(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18
-b(It)12 b(is)g(a)g(lo)q(ose)75 2178 y(con)o(v)o(en)o(tion)j(that)f(con)
+(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fo(C-b)p
+Fu(,)h Fo(C-f)p Fu(,)f Fo(C-d)p Fu(,)g(and)522 1578 y
+Fn(h)p 534 1552 V 534 1580 a Fm(DEL)p 534 1588 V 605
+1578 a Fn(i)619 1580 y Fu(.)23 b(Here)16 b(are)g(some)f(commands)h(for)
+f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635
+y(line.)75 1716 y Fo(C-a)168 b Fu(Mo)o(v)o(e)14 b(to)h(the)g(start)f
+(of)h(the)g(line.)75 1796 y Fo(C-e)168 b Fu(Mo)o(v)o(e)14
+b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fo(M-f)168
+b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h
+(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957
+y Fo(M-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75
+2037 y Fo(C-l)168 b Fu(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f
+(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f
+Fo(C-f)g Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i
+Fo(M-f)e Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18
+b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con)
 o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h
-(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2233 y(w)o(ords.)75
-2343 y Fl(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137
-2439 y Fm(Killing)26 b Fu(text)18 b(means)g(to)g(delete)i(the)f(text)f
+(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75
+2341 y Fj(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137
+2438 y Fk(Killing)26 b Fu(text)18 b(means)g(to)g(delete)i(the)f(text)f
 (from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for)
-h(later)h(use,)75 2494 y(usually)f(b)o(y)f Fm(y)o(anking)22
+h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fk(y)o(anking)22
 b Fu(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27
 b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75
-2549 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137
+2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137
 2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h
 (it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o
 (ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o
 (t)g(\(or)g(the)g(same\))g(place)h(later.)p eop
 %%Page: 3 5
 3 4 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(3)137 183 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g
-(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fm(kill-ring)p Fu(.)21
+b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g
+(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fk(kill-ring)p Fu(.)21
 b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75
-238 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d
+204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d
 (together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o
-(ou)g(get)g(it)h(all.)22 b(The)75 293 y(kill)c(ring)f(is)f(not)g(line)i
+(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i
 (sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g
 (previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75
-348 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f
-(are)g(t)o(yping)g(another)g(line.)137 415 y(Here)h(is)f(the)h(list)g
-(of)e(commands)h(for)g(killing)j(text.)75 492 y Fo(h)p
-87 466 56 2 v 87 494 a Fn(C-k)p 87 502 V 141 492 a Fo(i)315
-494 y Fu(Kill)f(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q
-(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 571 y
-Fo(h)p 87 545 64 2 v 87 573 a Fn(M-d)p 87 581 V 149 571
-a Fo(i)315 573 y Fu(Kill)g(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e
+314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f
+(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g
+(of)e(commands)h(for)g(killing)j(text.)75 458 y Fo(C-k)168
+b Fu(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q
+(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y
+Fo(M-d)168 b Fu(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e
 (the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)
-e(to)h(the)315 628 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
-(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)1728
-626 y Fo(h)p 1740 600 55 2 v 1740 628 a Fn(M-f)p 1740
-636 V 1793 626 a Fo(i)1808 628 y Fu(.)75 705 y Fo(h)p
-87 679 118 2 v 87 707 a Fn(M-DEL)p 87 715 V 202 705 a
-Fo(i)315 707 y Fu(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h
-(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f
-(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19
-b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g
-(b)o(y)315 815 y Fo(h)p 327 789 64 2 v 327 817 a Fn(M-b)p
-327 825 V 389 815 a Fo(i)404 817 y Fu(.)75 894 y Fo(h)p
-87 868 63 2 v 87 896 a Fn(C-w)p 87 904 V 148 894 a Fo(i)315
-896 y Fu(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h
-(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733
-894 y Fo(h)p 1745 868 118 2 v 1745 896 a Fn(M-DEL)p 1745
-904 V 1860 894 a Fo(i)315 951 y Fu(b)q(ecause)g(the)f(w)o(ord)g(b)q
-(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g
-Fm(y)o(ank)j Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39
-b(Y)l(anking)21 b(means)g(to)f(cop)o(y)h(the)g(most-)75
-1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75
-1163 y Fo(h)p 87 1137 56 2 v 87 1165 a Fn(C-y)p 87 1172
-V 141 1163 a Fo(i)315 1165 y Fu(Y)l(ank)e(the)h(most)e(recen)o(tly)i
-(killed)h(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i
-(cursor.)75 1242 y Fo(h)p 87 1216 63 2 v 87 1244 a Fn(M-y)p
-87 1252 V 148 1242 a Fo(i)315 1244 y Fu(Rotate)h(the)g(kill-ring,)j
-(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
-(this)h(if)f(the)h(prior)315 1299 y(command)d(is)568
-1297 y Fo(h)p 580 1271 56 2 v 580 1299 a Fn(C-y)p 580
-1306 V 634 1297 a Fo(i)664 1299 y Fu(or)719 1297 y Fo(h)p
-732 1271 63 2 v 732 1299 a Fn(M-y)p 732 1306 V 792 1297
-a Fo(i)807 1299 y Fu(.)75 1410 y Fl(1.2.4)30 b(Readline)20
-b(Argumen)n(ts)137 1506 y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i
-(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15
-b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,)
-h(other)f(times)g(it)h(is)g(the)f Fm(sign)h Fu(of)f(the)g(argumen)o(t)f
-(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75
-1616 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)f(to)g(a)g(command)h(whic)o
-(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g(direction,)i(that)75
-1671 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o(ard)g(direction.)28
-b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o(k)g(to)g(the)h(start)
-e(of)75 1726 y(the)f(line,)i(y)o(ou)e(migh)o(t)g(t)o(yp)q(e)g(`)p
-Ft(M--)f(C-k)p Fu('.)137 1793 y(The)h(general)f(w)o(a)o(y)f(to)h(pass)g
-(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)h(to)e(t)o(yp)q(e)h
-(meta)g(digits)h(b)q(efore)75 1847 y(the)h(command.)k(If)c(the)f
-(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)g(min)o(us)g(sign)g(\(`)p
-Ft(-)p Fu('\),)d(then)j(the)f(sign)h(of)f(the)h(argumen)o(t)75
-1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o
-(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g
-(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g
-(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30
-b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955
-y Fo(h)p 1805 1929 57 2 v 1805 1957 a Fn(C-d)p 1805 1965
-V 1860 1955 a Fo(i)75 2012 y Fu(command)c(an)g(argumen)o(t)g(of)f(10,)h
-(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Ft(M-1)f(0)h(C-d)p
-Fu('.)75 2123 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f
-(the)h(History)137 2219 y Fu(Readline)e(pro)o(vides)d(commands)g(for)g
-(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-)
-75 2274 y(taining)e(a)f(sp)q(eci\014ed)i(string.)j(There)c(are)e(t)o(w)
-o(o)g(searc)o(h)h(mo)q(des:)20 b Fm(incremen)o(tal)e
-Fu(and)e Fm(non-incremen)o(tal)p Fu(.)137 2341 y(Incremen)o(tal)e
-(searc)o(hes)f(b)q(egin)h(b)q(efore)f(the)g(user)g(has)g(\014nished)h
-(t)o(yping)f(the)g(searc)o(h)g(string.)19 b(As)13 b(eac)o(h)75
-2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g(string)f(is)h(t)o(yp)q
-(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en)o(try)f(from)g(the)h
-(history)75 2451 y(matc)o(hing)12 b(the)g(string)g(t)o(yp)q(ed)g(so)g
-(far.)18 b(An)13 b(incremen)o(tal)g(searc)o(h)f(requires)g(only)h(as)f
-(man)o(y)f(c)o(haracters)g(as)75 2506 y(needed)16 b(to)d(\014nd)j(the)e
-(desired)i(history)e(en)o(try)l(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o
-(ard)f(in)j(the)e(history)g(for)g(a)g(particular)75 2560
-y(string,)g(t)o(yp)q(e)317 2558 y Fo(h)p 329 2532 51
-2 v 329 2560 a Fn(C-r)p 329 2568 V 378 2558 a Fo(i)393
-2560 y Fu(.)19 b(T)o(yping)580 2558 y Fo(h)p 592 2532
-52 2 v 592 2560 a Fn(C-s)p 592 2568 V 641 2558 a Fo(i)670
-2560 y Fu(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20
-b(The)14 b(c)o(haracters)f(presen)o(t)75 2615 y(in)20
-b(the)f(v)m(alue)h(of)f(the)g Ft(isearch-terminators)d
+e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
+(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f
+Fo(M-f)p Fu(.)75 668 y Fo(M-)123 666 y Fn(h)p 135 640
+73 2 v 135 668 a Fm(DEL)p 135 675 V 206 666 a Fn(i)315
+668 y Fu(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o
+(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315
+723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19
+b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315
+777 y Fo(M-b)p Fu(.)75 855 y Fo(C-w)168 b Fu(Kill)18
+b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
+b(This)16 b(is)g(di\013eren)o(t)g(than)f Fo(M-)1777 853
+y Fn(h)p 1789 827 V 1789 855 a Fm(DEL)p 1789 863 V 1860
+853 a Fn(i)315 910 y Fu(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h
+(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fk(y)o(ank)j
+Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21
+b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d
+(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fo(C-y)168
+b Fu(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g
+(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198
+y Fo(M-y)168 b Fu(Rotate)16 b(the)h(kill-ring,)j(and)d(y)o(ank)g(the)h
+(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f(this)h(if)f(the)h(prior)
+315 1252 y(command)d(is)h Fo(C-y)f Fu(or)f Fo(M-y)p Fu(.)75
+1361 y Fj(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457
+y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g
+(Readline)h(commands.)20 b(Sometimes)15 b(the)g(argumen)o(t)e(acts)75
+1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f
+(the)g Fl(sign)j Fu(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o
+(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)
+f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g
+(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o
+(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o
+(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g
+(t)o(yp)q(e)g(`)p Ft(M--)f(C-k)p Fu('.)137 1742 y(The)h(general)f(w)o
+(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)
+h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797
+y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)
+g(min)o(us)g(sign)g(\(`)p Ft(-)p Fu('\),)d(then)j(the)f(sign)h(of)f
+(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31
+b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h
+(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75
+1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g
+(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f
+Fo(C-d)75 1961 y Fu(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f
+(could)i(t)o(yp)q(e)f(`)p Ft(M-1)14 b(0)h(C-d)p Fu(',)k(whic)o(h)g
+(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14
+b(on)i(the)f(input)h(line.)75 2125 y Fj(1.2.5)30 b(Searc)n(hing)21
+b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fu(Readline)d(pro)o
+(vides)e(commands)g(for)g(searc)o(hing)g(through)g(the)g(command)g
+(history)g(for)g(lines)i(con-)75 2275 y(taining)e(a)f(sp)q(eci\014ed)i
+(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20
+b Fk(incremen)o(tal)e Fu(and)e Fk(non-incremen)o(tal)p
+Fu(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f
+(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.)
+19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g
+(string)f(is)h(t)o(yp)q(ed,)h(Readline)g(displa)o(ys)f(the)g(next)g(en)
+o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12
+b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g
+(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75
+2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l
+(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g
+(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fo(C-r)p
+Fu(.)k(T)o(yping)d Fo(C-s)e Fu(searc)o(hes)h(forw)o(ard)e(through)h
+(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75
+2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Ft(isearch-terminators)d
 Fu(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75
-2670 y(searc)o(h.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q
-(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fo(h)p
-1294 2642 70 2 v 1294 2670 a Fn(ESC)p 1294 2678 V 1361
-2668 a Fo(i)1395 2670 y Fu(and)1486 2668 y Fo(h)p 1498
-2642 56 2 v 1498 2670 a Fn(C-J)p 1498 2678 V 1551 2668
-a Fo(i)1585 2670 y Fu(c)o(haracters)d(will)p eop
+2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q
+(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Fn(h)p
+1301 2642 70 2 v 1301 2670 a Fm(ESC)p 1301 2678 V 1368
+2668 a Fn(i)1402 2670 y Fu(and)e Fo(C-J)f Fu(c)o(haracters)g(will)p
+eop
 %%Page: 4 6
-4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75
-183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780
-181 y Fo(h)p 792 155 55 2 v 792 183 a Fn(C-g)p 792 191
-V 845 181 a Fo(i)880 183 y Fu(will)g(ab)q(ort)e(an)h(incremen)o(tal)h
-(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(line.)21
+4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)h(Library)75
+149 y(terminate)21 b(an)g(incremen)o(tal)i(searc)o(h.)37
+b Fo(C-g)21 b Fu(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f
+(and)g(restore)g(the)75 204 y(original)16 b(line.)21
 b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o
-(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 293
-y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h
-(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o
-(yp)q(e)1231 355 y Fo(h)p 1243 329 51 2 v 1243 357 a
-Fn(C-r)p 1243 364 V 1292 355 a Fo(i)1322 357 y Fu(or)1377
-355 y Fo(h)p 1389 329 52 2 v 1389 357 a Fn(C-s)p 1389
-364 V 1438 355 a Fo(i)1468 357 y Fu(as)f(appropriate.)k(This)75
-412 y(will)c(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i(the)f
-(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g(searc)o(h)
-g(string)75 466 y(t)o(yp)q(ed)19 b(so)g(far.)30 b(An)o(y)19
-b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)i(command)d
-(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f
-(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fo(h)p
-1163 493 76 2 v 1163 521 a Fn(RET)p 1163 529 V 1236 519
-a Fo(i)1271 521 y Fu(will)g(terminate)f(the)f(searc)o(h)h(and)75
-576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command)
-g(from)g(the)g(history)g(list.)137 640 y(Non-incremen)o(tal)25
-b(searc)o(hes)e(read)h(the)f(en)o(tire)h(searc)o(h)f(string)g(b)q
-(efore)h(starting)f(to)f(searc)o(h)i(for)75 695 y(matc)o(hing)d
-(history)h(lines.)39 b(The)22 b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h
-(t)o(yp)q(ed)f(b)o(y)h(the)f(user)h(or)e(b)q(e)i(part)f(of)g(the)75
-750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75
-868 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137 961 y
-Fu(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g
-(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 y(b)o(y)d(default,)
-h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)
-o(eybindings.)39 b(An)o(y)20 b(user)h(can)g(customize)75
-1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g
-(commands)g(in)i(an)e Fm(inputrc)k Fu(\014le,)d(con)o(v)o(en)o
-(tionally)g(in)g(his)75 1126 y(home)g(directory)l(.)24
-b(The)17 b(name)g(of)f(this)h(\014le)g(is)g(tak)o(en)g(from)e(the)i(v)m
-(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m(ariable)75
-1181 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h(is)g(unset,)f(the)
-g(default)h(is)g(`)p Ft(~/.inputrc)p Fu('.)137 1244 y(When)f(a)g
-(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i
-(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299
-y(k)o(ey)g(bindings)i(are)e(set.)137 1363 y(In)f(addition,)h(the)e
-Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us)
-e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1418 y(that)h(y)o(ou)h
-(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fl(1.3.1)30
-b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 y Fu(There)c(are)g
-(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g
-(Readline)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75
-1668 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p
-Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e
-(a)f(`)p Ft($)p Fu(')f(indicate)75 1723 y(conditional)c(constructs)f
-(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h
-(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h
-(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315
-1906 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of)
-e(Readline)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315
-1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g
-Ft(set)g Fu(command)g(within)h(the)f(init)h(\014le.)20
-b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g
-(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g
-Ft(vi)g Fu(line)i(editing)g(commands:)435 2076 y Ft(set)23
-b(editing-mode)g(vi)315 2140 y Fu(A)15 b(great)g(deal)g(of)g(run-time)h
-(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m
-(ariables.)315 2213 y Ft(bell-style)555 2268 y Fu(Con)o(trols)21
-b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f
-(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
-Ft(none)p Fu(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32
-b(If)19 b(set)g(to)555 2378 y(`)p Ft(visible)p Fu(',)c(Readline)j(uses)
-f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
-b(If)16 b(set)h(to)555 2432 y(`)p Ft(audible)p Fu(')g(\(the)h
-(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555
-2487 y(b)q(ell.)315 2560 y Ft(comment-begin)555 2615
-y Fu(The)c(string)f(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h
-(line)h(when)f(the)g Ft(insert-)555 2670 y(comment)f
-Fu(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g
-Ft("#")p Fu(.)p eop
+(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259
+y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i
+(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o
+(yp)q(e)f Fo(C-r)g Fu(or)g Fo(C-s)g Fu(as)h(appropriate.)k(This)75
+380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
+(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g
+(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30
+b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)
+h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10
+b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063
+487 y Fn(h)p 1076 461 76 2 v 1076 489 a Fm(RET)p 1076
+497 V 1149 487 a Fn(i)1174 489 y Fu(will)g(terminate)f(the)g(searc)o(h)
+f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
+(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f
+(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
+(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g
+(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen)
+o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f
+Fo(C-r)p Fu(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o
+(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f
+(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75
+774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)
+f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
+(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22
+b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f
+(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15
+b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fs(1.3)33 b(Readline)23
+b(Init)h(File)137 1169 y Fu(Although)f(the)g(Readline)h(library)f
+(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g
+(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e
+(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39
+b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15
+b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e
+Fk(inputrc)k Fu(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75
+1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g
+(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g
+(v)m(ariable)75 1388 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h
+(is)g(unset,)f(the)g(default)h(is)g(`)p Ft(~/.inputrc)p
+Fu('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)
+h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g
+(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574
+y(In)f(addition,)h(the)e Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g
+(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75
+1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75
+1737 y Fj(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137
+1832 y Fu(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)
+o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18
+b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d
+(a)h(`)p Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22
+b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75
+1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f
+([Conditional)h(Init)h(Constructs],)e(page)h(9\).)k(Other)c(lines)75
+1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75
+2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g
+(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h
+(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f
+(the)g Ft(set)g Fu(command)f(within)i(the)f(init)h(\014le.)26
+b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300
+y Ft(set)23 b Fk(v)m(ariable)28 b(v)m(alue)315 2366 y
+Fu(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f
+(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315
+2421 y(use)g Ft(vi)e Fu(line)j(editing)g(commands:)435
+2484 y Ft(set)23 b(editing-mode)g(vi)315 2549 y Fu(V)l(ariable)c(names)
+e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)
+e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g
+(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o
+(wing)f(v)m(ariables.)p eop
 %%Page: 5 7
 5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(5)315 183 y Ft(completion-ignore-case)555 238 y Fu(If)14
-b(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)j(p)q(erforms)d(\014lename)i
-(matc)o(hing)f(and)g(completion)555 293 y(in)i(a)f(case-insensitiv)o(e)
-i(fashion.)k(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p
-Fu('.)315 384 y Ft(completion-query-items)555 439 y Fu(The)d(n)o(um)o
-(b)q(er)h(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g
-(the)f(user)555 494 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d
-(to)i(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40
-b(If)21 b(the)555 549 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i
-(completions)f(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
-604 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f
-(view)h(them;)f(otherwise,)555 658 y(they)i(are)g(simply)i(listed.)k
-(The)15 b(default)h(limit)h(is)e Ft(100)p Fu(.)315 750
-y Ft(convert-meta)555 805 y Fu(If)i(set)g(to)g(`)p Ft(on)p
-Fu(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f
-(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f
-(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555
-915 y(\014xing)i(an)749 913 y Fo(h)p 761 887 70 2 v 761
-915 a Fn(ESC)p 761 922 V 828 913 a Fo(i)861 915 y Fu(c)o(haracter,)f
-(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555
-969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p
-Ft(on)p Fu('.)315 1061 y Ft(disable-completion)555 1116
-y Fu(If)k(set)f(to)f(`)p Ft(On)p Fu(',)h(Readline)j(will)f(inhibit)g(w)
-o(ord)e(completion.)30 b(Completion)555 1171 y(c)o(haracters)12
-b(will)j(b)q(e)f(inserted)g(in)o(to)f(the)g(line)h(as)f(if)h(they)f
-(had)g(b)q(een)h(mapp)q(ed)555 1225 y(to)h Ft(self-insert)p
-Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 1317
-y Ft(editing-mode)555 1372 y Fu(The)f Ft(editing-mode)d
-Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g
-(bind-)555 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g
-(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481
-y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g(similar)i(to)d(Emacs.)
-20 b(This)15 b(v)m(ariable)h(can)555 1536 y(b)q(e)g(set)f(to)f(either)i
-(`)p Ft(emacs)p Fu(')e(or)h(`)p Ft(vi)p Fu('.)315 1628
-y Ft(enable-keypad)555 1683 y Fu(When)d(set)f(to)h(`)p
-Ft(on)p Fu(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f
-(application)h(k)o(eypad)555 1737 y(when)h(it)f(is)h(called.)21
-b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g(arro)o(w)e(k)o
-(eys.)555 1792 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315
-1884 y Ft(expand-tilde)555 1939 y Fu(If)e(set)g(to)f(`)p
-Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g
-(Readline)i(attempts)555 1994 y(w)o(ord)f(completion.)21
-b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 2085
-y Ft(horizontal-scroll-mode)555 2140 y Fu(This)k(v)m(ariable)g(can)f(b)
-q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p
-Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p
-Fu(')555 2195 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q
-(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555
-2250 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h
-(than)g(the)g(width)g(of)g(the)555 2304 y(screen,)e(instead)f(of)g
-(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13
-b(default,)h(this)555 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p
-Ft(off)p Fu('.)315 2451 y Ft(input-meta)555 2506 y Fu(If)h(set)g(to)f
-(`)p Ft(on)p Fu(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h
-(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e
-(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555
-2615 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34
-b(The)20 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33
-b(The)555 2670 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)
-f(this)i(v)m(ariable.)p eop
+b(5)315 149 y Ft(bell-style)555 204 y Fu(Con)o(trols)21
+b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
+(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
+Ft(none)p Fu(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
+b(If)19 b(set)g(to)555 314 y(`)p Ft(visible)p Fu(',)c(Readline)i(uses)g
+(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
+b(If)16 b(set)h(to)555 369 y(`)p Ft(audible)p Fu(')g(\(the)h
+(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555
+423 y(b)q(ell.)315 504 y Ft(comment-begin)555 559 y Fu(The)c(string)f
+(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g
+Ft(insert-)555 614 y(comment)f Fu(command)h(is)h(executed.)21
+b(The)15 b(default)h(v)m(alue)g(is)g Ft("#")p Fu(.)315
+694 y Ft(completion-ignore-case)555 749 y Fu(If)e(set)f(to)g(`)p
+Ft(on)p Fu(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f
+(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
+(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)315
+884 y Ft(completion-query-items)555 939 y Fu(The)d(n)o(um)o(b)q(er)h
+(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f
+(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
+(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21
+b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
+(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
+1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)
+f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20
+b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger)
+h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
+(default)f(limit)i(is)f Ft(100)p Fu(.)315 1294 y Ft(convert-meta)555
+1348 y Fu(If)11 b(set)g(to)g(`)p Ft(on)p Fu(',)f(Readline)i(will)h(con)
+o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555
+1403 y(to)f(an)h Fp(asci)q(i)e Fu(k)o(ey)i(sequence)g(b)o(y)g
+(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555
+1456 y Fn(h)p 567 1430 70 2 v 567 1458 a Fm(ESC)p 567
+1466 V 634 1456 a Fn(i)666 1458 y Fu(c)o(haracter,)k(con)o(v)o(erting)h
+(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555
+1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)315
+1593 y Ft(disable-completion)555 1648 y Fu(If)k(set)f(to)f(`)p
+Ft(On)p Fu(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30
+b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
+(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555
+1758 y(to)h Ft(self-insert)p Fu(.)j(The)d(default)h(is)g(`)p
+Ft(off)p Fu('.)315 1838 y Ft(editing-mode)555 1893 y
+Fu(The)f Ft(editing-mode)d Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h
+(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20
+b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i
+(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
+(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555
+2058 y(b)q(e)g(set)f(to)f(either)i(`)p Ft(emacs)p Fu(')e(or)h(`)p
+Ft(vi)p Fu('.)315 2138 y Ft(enable-keypad)555 2193 y
+Fu(When)d(set)f(to)h(`)p Ft(on)p Fu(',)e(Readline)j(will)h(try)d(to)g
+(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h
+(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g
+(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p
+Ft(off)p Fu('.)315 2383 y Ft(expand-tilde)555 2438 y
+Fu(If)e(set)g(to)f(`)p Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q
+(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g
+(completion.)21 b(The)15 b(default)h(is)f(`)p Ft(off)p
+Fu('.)555 2560 y(If)g(set)g(to)f(`)p Ft(on)p Fu(',)g(the)g(history)h
+(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555
+2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g
+(with)f Ft(previous-history)e Fu(or)555 2670 y Ft(next-history)p
+Fu(.)p eop
 %%Page: 6 8
-6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)i(Library)315
-183 y Ft(isearch-terminators)555 238 y Fu(The)26 b(string)g(of)f(c)o
-(haracters)g(that)g(should)i(terminate)f(an)g(incremen)o(tal)555
-293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o
-(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d
-([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has)
-555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o
-(haracters)1312 400 y Fo(h)p 1324 374 70 2 v 1324 402
-a Fn(ESC)p 1324 410 V 1391 400 a Fo(i)1419 402 y Fu(and)1505
-400 y Fo(h)p 1518 374 56 2 v 1518 402 a Fn(C-J)p 1518
-410 V 1571 400 a Fo(i)1599 402 y Fu(will)i(terminate)555
-457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Ft(keymap)114
-b Fu(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f
-(for)g(k)o(ey)g(binding)j(com-)555 595 y(mands.)41 b(Acceptable)23
-b Ft(keymap)f Fu(names)g(are)f Ft(emacs)p Fu(,)i Ft(emacs-standard)p
-Fu(,)555 650 y Ft(emacs-meta)p Fu(,)15 b Ft(emacs-ctlx)p
-Fu(,)h Ft(vi)p Fu(,)g Ft(vi-command)p Fu(,)g(and)h Ft(vi-insert)p
-Fu(.)23 b Ft(vi)16 b Fu(is)555 705 y(equiv)m(alen)o(t)e(to)f
-Ft(vi-command)p Fu(;)e Ft(emacs)h Fu(is)i(equiv)m(alen)o(t)g(to)e
-Ft(emacs-standard)p Fu(.)555 759 y(The)f(default)h(v)m(alue)g(is)f
-Ft(emacs)p Fu(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Ft(editing-mode)f
-Fu(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o
-(eymap.)315 897 y Ft(mark-directories)555 952 y Fu(If)j(set)g(to)g(`)p
-Ft(on)p Fu(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h(slash)
-h(app)q(ended.)555 1007 y(The)15 b(default)h(is)g(`)p
-Ft(on)p Fu('.)315 1090 y Ft(mark-modified-lines)555 1145
-y Fu(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Ft(on)p
-Fu(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555
-1200 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g(of)h(history)f
-(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q(di\014ed.)555
-1254 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p Fu(')e(b)o(y)h(default.)
-315 1337 y Ft(output-meta)555 1392 y Fu(If)j(set)f(to)g(`)p
-Ft(on)p Fu(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j
-(the)e(eigh)o(th)h(bit)555 1447 y(set)g(directly)i(rather)d(than)h(as)g
+6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)h(Library)315
+149 y Ft(horizontal-scroll-mode)555 204 y Fu(This)j(v)m(ariable)g(can)f
+(b)q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p
+Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p
+Fu(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing)
+f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i
+(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g
+(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g
+(screen)h(line.)21 b(By)13 b(default,)h(this)555 423
+y(v)m(ariable)j(is)e(set)g(to)g(`)p Ft(off)p Fu('.)315
+506 y Ft(input-meta)555 560 y Fu(If)h(set)f(to)g(`)p
+Ft(on)p Fu(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it)
+g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
+o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555
+670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
+b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33 b(The)555
+725 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
+m(ariable.)315 807 y Ft(isearch-terminators)555 862 y
+Fu(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f
+(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o
+(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555
+971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
+b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17
+b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247
+1024 y Fn(h)p 1259 998 70 2 v 1259 1026 a Fm(ESC)p 1259
+1034 V 1326 1024 a Fn(i)1357 1026 y Fu(and)g Fo(C-J)f
+Fu(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315
+1163 y Ft(keymap)96 b Fu(Sets)19 b(Readline's)i(idea)f(of)f(the)g
+(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555
+1218 y(mands.)41 b(Acceptable)23 b Ft(keymap)f Fu(names)g(are)f
+Ft(emacs)p Fu(,)i Ft(emacs-standard)p Fu(,)555 1273 y
+Ft(emacs-meta)p Fu(,)49 b Ft(emacs-ctlx)p Fu(,)g Ft(vi)p
+Fu(,)h Ft(vi-move)p Fu(,)f Ft(vi-command)p Fu(,)g(and)555
+1328 y Ft(vi-insert)p Fu(.)31 b Ft(vi)20 b Fu(is)g(equiv)m(alen)o(t)h
+(to)e Ft(vi-command)p Fu(;)g Ft(emacs)g Fu(is)h(equiv)m(alen)o(t)555
+1382 y(to)15 b Ft(emacs-standard)p Fu(.)20 b(The)d(default)f(v)m(alue)h
+(is)g Ft(emacs)p Fu(.)k(The)16 b(v)m(alue)h(of)f(the)555
+1437 y Ft(editing-mode)e Fu(v)m(ariable)i(also)f(a\013ects)g(the)g
+(default)h(k)o(eymap.)315 1519 y Ft(mark-directories)555
+1574 y Fu(If)j(set)g(to)g(`)p Ft(on)p Fu(',)f(completed)i(directory)g
+(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629
+y(The)15 b(default)h(is)g(`)p Ft(on)p Fu('.)315 1711
+y Ft(mark-modified-lines)555 1766 y Fu(This)j(v)m(ariable,)g(when)g
+(set)e(to)h(`)p Ft(on)p Fu(',)f(causes)h(Readline)h(to)e(displa)o(y)i
+(an)f(as-)555 1821 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g
+(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q
+(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p
+Fu(')e(b)o(y)h(default.)315 1958 y Ft(mark-symlinked-directories)555
+2012 y Fu(If)23 b(set)f(to)f(`)p Ft(on)p Fu(',)i(completed)g(names)g
+(whic)o(h)g(are)f(sym)o(b)q(olic)i(links)f(to)f(di-)555
+2067 y(rectories)h(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(\(sub)s(ject)
+e(to)f(the)i(v)m(alue)g(of)f Ft(mark-)555 2122 y(directories)p
+Fu(\).)18 b(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315
+2204 y Ft(match-hidden-files)555 2259 y Fu(This)c(v)m(ariable,)h(when)e
+(set)g(to)g(`)p Ft(on)p Fu(',)f(causes)h(Readline)i(to)d(matc)o(h)h
+(\014les)h(whose)555 2314 y(names)22 b(b)q(egin)h(with)g(a)e(`)p
+Ft(.)p Fu(')h(\(hidden)h(\014les\))g(when)f(p)q(erforming)h(\014lename)
+555 2369 y(completion,)g(unless)f(the)f(leading)h(`)p
+Ft(.)p Fu(')e(is)h(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555
+2423 y(\014lename)16 b(to)f(b)q(e)h(completed.)21 b(This)15
+b(v)m(ariable)i(is)f(`)p Ft(on)p Fu(')e(b)o(y)h(default.)315
+2506 y Ft(output-meta)555 2560 y Fu(If)j(set)f(to)g(`)p
+Ft(on)p Fu(',)g(Readline)i(will)h(displa)o(y)f(c)o(haracters)d(with)j
+(the)e(eigh)o(th)h(bit)555 2615 y(set)g(directly)i(rather)d(than)h(as)g
 (a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555
-1502 y(default)16 b(is)f(`)p Ft(off)p Fu('.)315 1585
-y Ft(print-completions-horizont)o(ally)555 1640 y Fu(If)d(set)g(to)f(`)
-p Ft(on)p Fu(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f
-(matc)o(hes)f(sorted)555 1694 y(horizon)o(tally)23 b(in)f(alphab)q
-(etical)i(order,)f(rather)e(than)g(do)o(wn)h(the)g(screen.)555
-1749 y(The)15 b(default)h(is)g(`)p Ft(off)p Fu('.)315
-1832 y Ft(show-all-if-ambiguous)555 1887 y Fu(This)g(alters)e(the)i
-(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h(functions.)21
-b(If)15 b(set)555 1942 y(to)e(`)p Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h
-(ha)o(v)o(e)g(more)f(than)g(one)h(p)q(ossible)i(completion)f(cause)555
-1997 y(the)20 b(matc)o(hes)f(to)f(b)q(e)j(listed)f(immediately)h
-(instead)f(of)f(ringing)i(the)e(b)q(ell.)555 2051 y(The)c(default)h(v)m
-(alue)h(is)e(`)p Ft(off)p Fu('.)315 2134 y Ft(visible-stats)555
-2189 y Fu(If)h(set)g(to)f(`)p Ft(on)p Fu(',)g(a)h(c)o(haracter)f
-(denoting)h(a)g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555
-2244 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c
-(default)g(is)f(`)p Ft(off)p Fu('.)75 2327 y(Key)h(Bindings)315
-2382 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h
-(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20
-b(y)o(ou)315 2437 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f
-(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19
-b(The)14 b(follo)o(wing)315 2491 y(sections)k(con)o(tain)h(tables)f(of)
-f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)
-l(,)315 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g
-(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f
-(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey)
-315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g
-(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)p
-eop
+2670 y(default)16 b(is)f(`)p Ft(off)p Fu('.)p eop
 %%Page: 7 9
 7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(7)315 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34
-b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g
-(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o
-(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316
-y Fm(k)o(eyname)s Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555
-371 y(k)o(eyname)i Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j
-(out)d(in)h(English.)21 b(F)l(or)13 b(example:)675 435
-y Ft(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g
-(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555
-605 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023
-603 y Fo(h)p 1035 577 57 2 v 1035 605 a Fn(C-u)p 1035
-613 V 1090 603 a Fo(i)1123 605 y Fu(is)h(b)q(ound)g(to)f(the)g
-(function)h Ft(universal-)555 660 y(argument)p Fu(,)g(and)872
-658 y Fo(h)p 884 632 55 2 v 884 660 a Fn(C-o)p 884 667
-V 937 658 a Fo(i)971 660 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g
-(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e
-(is,)h(to)f(insert)h(the)g(text)f(`)p Ft(>)h(output)p
-Fu(')f(in)o(to)g(the)h(line\).)315 793 y Ft(")p Fm(k)o(eyseq)q
-Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555
-848 y(k)o(eyseq)i Fu(di\013ers)e(from)g Fm(k)o(eyname)j
-Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555
-902 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q(eci\014ed,)i(b)o(y)
-e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 957 y(double)e(quotes.)j
-(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es)g(can)g(b)q
-(e)g(used,)g(as)555 1012 y(in)j(the)f(follo)o(wing)g(example,)h(but)f
-(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)f(not)555
-1067 y(recognized.)675 1130 y Ft("\\C-u":)23 b(universal-argument)675
-1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h
-("Function)f(Key)i(1")555 1301 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g
-(example,)1023 1299 y Fo(h)p 1035 1273 57 2 v 1035 1301
-a Fn(C-u)p 1035 1308 V 1090 1299 a Fo(i)1123 1301 y Fu(is)h(b)q(ound)g
-(to)f(the)g(function)h Ft(universal-)555 1355 y(argument)9
-b Fu(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`)
-1463 1353 y Fo(h)p 1475 1327 56 2 v 1475 1355 a Fn(C-x)p
-1475 1363 V 1529 1353 a Fo(i)k(h)p 1571 1327 51 2 v 1571
-1355 a Fn(C-r)p 1571 1363 V 1620 1353 a Fo(i)1635 1355
-y Fu(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i
-Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 1408 y Fo(h)p
-1363 1382 70 2 v 1363 1410 a Fn(ESC)p 1363 1418 V 1430
-1408 a Fo(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fn([)p
-1472 1419 V 1480 1408 a Fo(i)g(h)p 1522 1382 18 2 v 1522
-1410 a Fn(1)p 1522 1418 V 1538 1408 a Fo(i)g(h)p 1580
-1382 V 1580 1410 a Fn(1)p 1580 1418 V 1595 1408 a Fo(i)g(h)p
-1637 1382 24 2 v 1637 1410 a Ft(~)p 1637 1418 V 1659
-1408 a Fo(i)1674 1410 y Fu(')h(is)h(b)q(ound)555 1465
-y(to)e(insert)g(the)g(text)g(`)p Ft(Function)f(Key)h(1)p
-Fu('.)315 1543 y(The)g(follo)o(wing)h Fp(gnu)e Fu(Emacs)h(st)o(yle)g
-(escap)q(e)h(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)
-315 1598 y(k)o(ey)g(sequences:)315 1676 y Fk(\\C-)168
-b Fu(con)o(trol)15 b(pre\014x)315 1755 y Fk(\\M-)168
-b Fu(meta)15 b(pre\014x)315 1833 y Fk(\\e)192 b Fu(an)15
-b(escap)q(e)h(c)o(haracter)315 1911 y Fk(\\\\)192 b Fu(bac)o(kslash)315
-1989 y Fk(\\)p Ft(")555 1987 y Fo(h)p 567 1961 V 567
-1989 a Ft(")p 567 1997 V 589 1987 a Fo(i)604 1989 y Fu(,)15
-b(a)f(double)j(quotation)e(mark)315 2068 y Fk(\\')555
-2066 y Fo(h)p 567 2040 10 2 v 567 2068 a Fn(')p 567 2075
-V 575 2066 a Fo(i)590 2068 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q
-(ostrophe)315 2146 y(In)f(addition)h(to)f(the)f Fp(gnu)h
-Fu(Emacs)g(st)o(yle)f(escap)q(e)i(sequences,)g(a)e(second)i(set)e(of)h
-(bac)o(kslash)315 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315
-2279 y Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 2357
-y Ft(\\b)192 b Fu(bac)o(kspace)315 2435 y Ft(\\d)g Fu(delete)315
-2514 y Ft(\\f)g Fu(form)14 b(feed)315 2592 y Ft(\\n)192
-b Fu(newline)315 2670 y Ft(\\r)g Fu(carriage)15 b(return)p
-eop
+b(7)315 149 y Ft(page-completions)555 204 y Fu(If)17
+b(set)g(to)f(`)p Ft(on)p Fu(',)g(Readline)i(uses)g(an)e(in)o(ternal)i
+Ft(more)p Fu(-lik)o(e)g(pager)f(to)f(displa)o(y)555 259
+y(a)g(screenful)h(of)f(p)q(ossible)i(completions)f(at)f(a)g(time.)23
+b(This)17 b(v)m(ariable)g(is)g(`)p Ft(on)p Fu(')555 314
+y(b)o(y)e(default.)315 395 y Ft(print-completions-horizont)o(ally)555
+450 y Fu(If)d(set)g(to)f(`)p Ft(on)p Fu(',)h(Readline)h(will)g(displa)o
+(y)h(completions)f(with)f(matc)o(hes)f(sorted)555 505
+y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e(than)g
+(do)o(wn)h(the)g(screen.)555 560 y(The)15 b(default)h(is)g(`)p
+Ft(off)p Fu('.)315 641 y Ft(show-all-if-ambiguous)555
+696 y Fu(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h
+(completion)h(functions.)21 b(If)15 b(set)555 751 y(to)e(`)p
+Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h
+(p)q(ossible)i(completion)f(cause)555 806 y(the)20 b(matc)o(hes)f(to)f
+(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q
+(ell.)555 861 y(The)c(default)h(v)m(alue)h(is)e(`)p Ft(off)p
+Fu('.)315 942 y Ft(visible-stats)555 997 y Fu(If)h(set)g(to)f(`)p
+Ft(on)p Fu(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q
+(e)f(is)g(app)q(ended)i(to)d(the)555 1052 y(\014lename)h(when)g
+(listing)h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p
+Ft(off)p Fu('.)75 1133 y(Key)h(Bindings)315 1188 y(The)21
+b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f
+(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315
+1243 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f
+(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315
+1298 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g
+(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
+1353 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
+(es.)315 1421 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
+(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315
+1476 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
+(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315
+1530 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
+(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315
+1585 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)
+e(comfortable.)315 1653 y(In)19 b(addition)g(to)e(command)h(names,)g
+(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h
+(string)315 1708 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
+(pressed)g(\(a)e Fk(macro)r Fu(\).)315 1790 y Fk(k)o(eyname)s
+Fu(:)19 b Fk(function-name)g Fu(or)c Fk(macro)555 1845
+y(k)o(eyname)i Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out)
+d(in)h(English.)21 b(F)l(or)13 b(example:)675 1910 y
+Ft(Control-u:)22 b(universal-argument)675 1962 y(Meta-Rubout:)g
+(backward-kill-word)675 2014 y(Control-o:)g(">)i(output")555
+2082 y Fu(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fo(C-u)e
+Fu(is)h(b)q(ound)g(to)f(the)g(function)h Ft(universal-)555
+2137 y(argument)p Fu(,)e Fo(M-DEL)h Fu(is)g(b)q(ound)h(to)e(the)h
+(function)h Ft(backward-kill-word)p Fu(,)555 2191 y(and)g
+Fo(C-o)f Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g
+(the)f(righ)o(t)h(hand)555 2246 y(side)c(\(that)e(is,)i(to)e(insert)i
+(the)f(text)g(`)p Ft(>)f(output)p Fu(')g(in)o(to)i(the)f(line\).)555
+2314 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e
+(names)g(are)g(recognized)i(while)g(pro-)555 2369 y(cessing)13
+b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fk(DEL)p
+Fu(,)11 b Fk(ESC)p Fu(,)h Fk(ESCAPE)p Fu(,)f Fk(LFD)p
+Fu(,)g Fk(NEW-)555 2424 y(LINE)p Fu(,)16 b Fk(RET)p Fu(,)e
+Fk(RETURN)p Fu(,)f Fk(R)o(UBOUT)p Fu(,)i Fk(SP)l(A)o(CE)p
+Fu(,)g Fk(SPC)p Fu(,)f(and)i Fk(T)l(AB)p Fu(.)315 2506
+y Ft(")p Fk(k)o(eyseq)q Ft(")p Fu(:)k Fk(function-name)e
+Fu(or)d Fk(macro)555 2560 y(k)o(eyseq)i Fu(di\013ers)e(from)g
+Fk(k)o(eyname)j Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g
+(an)f(en-)555 2615 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
+(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555
+2670 y(double)e(quotes.)j(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey)
+g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)p eop
 %%Page: 8 10
-8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)315
-183 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 262
-y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 340 y Ft(\\)p
-Fm(nnn)141 b Fu(the)13 b(c)o(haracter)e(whose)i Ft(ASCII)e
-Fu(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Fm(nnn)f
-Fu(\(one)f(to)g(three)555 395 y(digits\))315 473 y Ft(\\x)p
-Fm(nnn)117 b Fu(the)15 b(c)o(haracter)e(whose)i Ft(ASCII)e
-Fu(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Fm(nnn)f
-Fu(\(one)555 528 y(to)g(three)g(digits\))315 607 y(When)k(en)o(tering)g
-(the)g(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o
-(ust)f(b)q(e)h(used)h(to)315 662 y(indicate)12 b(a)f(macro)f
-(de\014nition.)20 b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)
-f(function)i(name.)18 b(In)315 716 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i
-(the)f(bac)o(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)
-g(expanded.)20 b(Bac)o(kslash)315 771 y(will)i(quote)d(an)o(y)h(other)g
-(c)o(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p
+8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)h(Library)555
+149 y(in)i(the)f(follo)o(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o
+(haracter)d(names)h(are)f(not)555 204 y(recognized.)675
+270 y Ft("\\C-u":)23 b(universal-argument)675 322 y("\\C-x\\C-r":)f
+(re-read-init-file)675 373 y("\\e[11~":)h("Function)f(Key)i(1")555
+442 y Fu(In)33 b(the)f(ab)q(o)o(v)o(e)g(example,)37 b
+Fo(C-u)32 b Fu(is)h(again)f(b)q(ound)h(to)f(the)g(function)555
+497 y Ft(universal-argument)19 b Fu(\(just)j(as)f(it)h(w)o(as)f(in)i
+(the)f(\014rst)f(example\),)j(`)p Fo(C-x)555 551 y(C-r)p
+Fu(')c(is)h(b)q(ound)g(to)f(the)h(function)g Ft(re-read-init-file)p
+Fu(,)f(and)g(`)1731 549 y Fn(h)p 1743 523 70 2 v 1743
+551 a Fm(ESC)p 1743 559 V 1810 549 a Fn(i)15 b(h)p 1852
+523 10 2 v 1852 551 a Fm([)p 1852 560 V 1860 549 a Fn(i)555
+604 y(h)p 567 578 18 2 v 567 606 a Fm(1)p 567 614 V 583
+604 a Fn(i)g(h)p 625 578 V 625 606 a Fm(1)p 625 614 V
+640 604 a Fn(i)g(h)p 683 578 24 2 v 683 606 a Ft(~)p
+683 614 V 704 604 a Fn(i)719 606 y Fu(')g(is)h(b)q(ound)g(to)e(insert)i
+(the)f(text)g(`)p Ft(Function)f(Key)g(1)p Fu('.)315 688
+y(The)h(follo)o(wing)h Fp(gnu)e Fu(Emacs)h(st)o(yle)g(escap)q(e)h
+(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315
+743 y(k)o(ey)g(sequences:)315 825 y Fo(\\C-)168 b Fu(con)o(trol)15
+b(pre\014x)315 907 y Fo(\\M-)168 b Fu(meta)15 b(pre\014x)315
+989 y Fo(\\e)192 b Fu(an)15 b(escap)q(e)h(c)o(haracter)315
+1071 y Fo(\\\\)192 b Fu(bac)o(kslash)315 1152 y Fo(\\)p
+Ft(")555 1150 y Fn(h)p 567 1124 V 567 1152 a Ft(")p 567
+1160 V 589 1150 a Fn(i)604 1152 y Fu(,)15 b(a)f(double)j(quotation)e
+(mark)315 1234 y Fo(\\')555 1232 y Fn(h)p 567 1206 10
+2 v 567 1234 a Fm(')p 567 1242 V 575 1232 a Fn(i)590
+1234 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315
+1316 y(In)f(addition)h(to)f(the)f Fp(gnu)h Fu(Emacs)g(st)o(yle)f(escap)
+q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
+1371 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 1453 y
+Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 1535 y Ft(\\b)192
+b Fu(bac)o(kspace)315 1617 y Ft(\\d)g Fu(delete)315 1699
+y Ft(\\f)g Fu(form)14 b(feed)315 1781 y Ft(\\n)192 b
+Fu(newline)315 1862 y Ft(\\r)g Fu(carriage)15 b(return)315
+1944 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 2026
+y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 2108 y Ft(\\)p
+Fk(nnn)141 b Fu(the)17 b(eigh)o(t-bit)h(c)o(haracter)f(whose)g(v)m
+(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i Fk(nnn)f Fu(\(one)f(to)555
+2163 y(three)e(digits\))315 2245 y Ft(\\x)p Fk(HH)124
+b Fu(the)20 b(eigh)o(t-bit)g(c)o(haracter)f(whose)h(v)m(alue)h(is)f
+(the)g(hexadecimal)h(v)m(alue)g Fk(HH)555 2300 y Fu(\(one)15
+b(or)g(t)o(w)o(o)f(hex)h(digits\))315 2382 y(When)k(en)o(tering)g(the)g
+(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o(ust)f(b)q
+(e)h(used)h(to)315 2436 y(indicate)12 b(a)f(macro)f(de\014nition.)20
+b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i
+(name.)18 b(In)315 2491 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o
+(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.)
+20 b(Bac)o(kslash)315 2546 y(will)i(quote)d(an)o(y)h(other)g(c)o
+(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p
 Ft(")p Fu(')c(and)h(`)p Ft(')p Fu('.)34 b(F)l(or)315
-826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p
-Ft(C-x)i(\\)p Fu(')f(insert)g(a)g(single)h(`)p Ft(\\)p
-Fu(')e(in)o(to)h(the)g(line:)435 890 y Ft("\\C-x\\\\":)23
-b("\\\\")75 1000 y Fl(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137
-1096 y Fu(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g
-(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75
-1150 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g
-(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f
-(as)75 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)
-g(directiv)o(es)h(used.)75 1284 y Ft($if)168 b Fu(The)16
-b Ft($if)f Fu(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g
-(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 1338
-y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e
-(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393
-y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f
-(are)h(required)i(to)d(isolate)i(it.)315 1472 y Ft(mode)144
-b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h Ft($if)f
-Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555
-1527 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20
-b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
-1581 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f
-(set)h(bindings)h(in)g(the)f Ft(emacs-)555 1636 y(standard)d
-Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)h(is)f
-(starting)f(out)555 1691 y(in)k Ft(emacs)f Fu(mo)q(de.)315
-1769 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h
-(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
-1824 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
-(output)e(b)o(y)g(the)g(terminal's)555 1879 y(function)13
-b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
-(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 1934
-y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
-(ortion)h(of)e(the)h(terminal)555 1989 y(name)i(b)q(efore)g(the)g
-(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g
-Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555
-2043 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 2122 y
-Ft(application)555 2177 y Fu(The)d Fm(application)i Fu(construct)e(is)g
-(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555
-2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j
-(library)e(sets)f(the)g Fm(application)555 2286 y(name)p
-Fu(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18
-b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555
-2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i
-(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i
-(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren)
-o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675
-2514 y Ft($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h
-(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675
-2670 y($endif)p eop
+2601 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)
+p Fo(C-x)i Ft(\\)p Fu(')f(insert)g(a)g(single)h(`)p Ft(\\)p
+Fu(')e(in)o(to)h(the)g(line:)435 2666 y Ft("\\C-x\\\\":)23
+b("\\\\")p eop
 %%Page: 9 11
 9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(9)75 183 y Ft($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h(in)g
-(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f
-Fu(command.)75 263 y Ft($else)120 b Fu(Commands)15 b(in)h(this)f(branc)
-o(h)h(of)e(the)i Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f
-(test)g(fails.)75 343 y Ft($include)48 b Fu(This)14 b(directiv)o(e)i
-(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h
-(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435
-462 y Ft($include)23 b(/etc/inputrc)75 574 y Fl(1.3.3)30
-b(Sample)20 b(Init)h(File)137 670 y Fu(Here)16 b(is)g(an)f(example)h
-(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g
-(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 y(and)f(conditional)i
-(syn)o(tax.)p eop
+b(9)75 149 y Fj(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137
+246 y Fu(Readline)f(implemen)o(ts)g(a)f(facilit)o(y)g(similar)h(in)g
+(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75
+301 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g
+(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f
+(as)75 355 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g
+(directiv)o(es)h(used.)75 435 y Ft($if)168 b Fu(The)16
+b Ft($if)f Fu(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g
+(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 490
+y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e
+(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315 545
+y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f
+(are)h(required)i(to)d(isolate)i(it.)315 624 y Ft(mode)144
+b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h Ft($if)f
+Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555
+679 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20
+b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
+734 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f
+(set)h(bindings)h(in)g(the)f Ft(emacs-)555 789 y(standard)d
+Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)g(is)g
+(starting)f(out)555 844 y(in)k Ft(emacs)f Fu(mo)q(de.)315
+923 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h
+(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
+978 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
+(output)e(b)o(y)g(the)g(terminal's)555 1033 y(function)13
+b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
+(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 1088
+y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
+(ortion)h(of)e(the)h(terminal)555 1142 y(name)i(b)q(efore)g(the)g
+(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g
+Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555
+1197 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 1277 y
+Ft(application)555 1332 y Fu(The)d Fk(application)i Fu(construct)e(is)g
+(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555
+1386 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i
+(library)f(sets)f(the)g Fk(application)555 1441 y(name)p
+Fu(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20
+b(This)12 b(could)h(b)q(e)f(used)h(to)555 1496 y(bind)18
+b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)g(sp)q
+(eci\014c)i(program.)23 b(F)l(or)555 1551 y(instance,)17
+b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f
+(quotes)555 1606 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j
+(Bash:)675 1670 y Ft($if)23 b(Bash)675 1722 y(#)h(Quote)f(the)g
+(current)g(or)h(previous)f(word)675 1774 y("\\C-xq":)g
+("\\eb\\"\\ef\\"")675 1826 y($endif)75 1905 y($endif)96
+b Fu(This)16 b(command,)e(as)h(seen)h(in)g(the)f(previous)h(example,)g
+(terminates)f(an)g Ft($if)f Fu(command.)75 1985 y Ft($else)120
+b Fu(Commands)15 b(in)h(this)f(branc)o(h)h(of)e(the)i
+Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g(fails.)75
+2065 y Ft($include)48 b Fu(This)22 b(directiv)o(e)h(tak)o(es)e(a)h
+(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f(commands)
+315 2120 y(and)e(bindings)j(from)c(that)h(\014le.)33
+b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e
+(from)315 2174 y(`)p Ft(/etc/inputrc)p Fu(':)435 2239
+y Ft($include)k(/etc/inputrc)75 2351 y Fj(1.3.3)30 b(Sample)20
+b(Init)h(File)137 2447 y Fu(Here)16 b(is)g(an)f(example)h(of)f(an)g
+Fk(inputrc)k Fu(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i
+(v)m(ariable)f(assignmen)o(t,)75 2502 y(and)f(conditional)i(syn)o(tax.)
+p eop
 %%Page: 10 12
-10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)i(Library)195
-235 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f
-(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu)
-f(Readline)g(library.)47 b(Existing)22 b(programs)195
-339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391
-y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h
-(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h
-(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g
-(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195
-650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195
-806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)
-195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195
-1169 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the)
-f(function)g(name)g(is)h(ignored)p 1986 1179 21 38 v
-195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195
-1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195
-1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g
-(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195
-1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195
-1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195
-1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g
-(previous-history)195 1947 y("\\M-[B":)g(next-history)195
-1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode)
-195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195
-2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g
-(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195
-2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode)
-195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195
-2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g
-(previous-history)p eop
+10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)h(Library)195
+201 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f
+(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(GNU)
+f(Readline)g(library.)47 b(Existing)195 305 y(#)24 b(programs)e
+(include)h(FTP,)h(Bash,)f(and)g(GDB.)195 357 y(#)195
+409 y(#)h(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h(C-x)f
+(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h(comments.)
+195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g(systemwide)g
+(bindings)f(and)i(variable)195 616 y(#)g(assignments)e(from)h
+(/etc/Inputrc)195 668 y($include)g(/etc/Inputrc)195 772
+y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)195
+928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195
+1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the)
+f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v
+195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195
+1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195
+1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g
+(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195
+1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195
+1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195
+1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g
+(previous-history)195 1914 y("\\M-[B":)g(next-history)195
+1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode)
+195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195
+2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g
+(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195
+2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode)
+195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195
+2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g
+(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p
+eop
 %%Page: 11 13
 11 12 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(11)195 183 y Ft(#"\\M-\\C-[B":)165 b(next-history)195
-287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495
-y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the)
-f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are)
-h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195
-754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g
-("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g
-(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g
-(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g
-(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013
-y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i
-(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195
-1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195
-1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f
-(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195
-1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g
-(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f
-("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195
-1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195
-1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g
-(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740
-y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters)
-h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195
-1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off)
-195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h
-(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f
-(characters)195 2155 y(set)h(output-meta)g(on)195 2259
-y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f
-(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g
-(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e
-(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195
-2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p
-eop
+b(11)195 201 y Ft(C-q:)23 b(quoted-insert)195 305 y($endif)195
+409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h
+(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g
+(are)h(convenient)e(for)h(shell)h(interaction)195 616
+y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720
+y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195
+772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)195
+824 y(#)g(insert)f(open)g(and)h(close)f(double)g(quotes)195
+876 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g(quote)195
+928 y("\\C-x\\"":)g("\\"\\"\\C-b")195 980 y(#)h(insert)f(a)g(backslash)
+g(\(testing)g(backslash)g(escapes)195 1032 y(#)h(in)f(sequences)g(and)g
+(macros\))195 1083 y("\\C-x\\\\":)g("\\\\")195 1135 y(#)h(Quote)f(the)g
+(current)g(or)h(previous)f(word)195 1187 y("\\C-xq":)g
+("\\eb\\"\\ef\\"")195 1239 y(#)h(Add)f(a)h(binding)f(to)g(refresh)g
+(the)h(line,)f(which)g(is)h(unbound)195 1291 y("\\C-xr":)f
+(redraw-current-line)195 1343 y(#)h(Edit)f(variable)g(on)g(current)g
+(line.)195 1395 y("\\M-\\C-v":)f("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)
+o(")195 1447 y($endif)195 1550 y(#)i(use)f(a)h(visible)f(bell)g(if)h
+(one)f(is)h(available)195 1602 y(set)f(bell-style)g(visible)195
+1706 y(#)h(don't)f(strip)g(characters)g(to)g(7)h(bits)f(when)h(reading)
+195 1758 y(set)f(input-meta)g(on)195 1862 y(#)h(allow)f(iso-latin1)f
+(characters)h(to)g(be)h(inserted)f(rather)195 1914 y(#)h(than)f
+(converted)g(to)g(prefix-meta)g(sequences)195 1966 y(set)g
+(convert-meta)g(off)195 2069 y(#)h(display)f(characters)f(with)h(the)h
+(eighth)f(bit)g(set)h(directly)195 2121 y(#)g(rather)f(than)g(as)h
+(meta-prefixed)e(characters)195 2173 y(set)h(output-meta)g(on)195
+2277 y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g
+(completions)f(for)195 2329 y(#)i(a)f(word,)h(ask)f(the)h(user)f(if)g
+(he)h(wants)f(to)h(see)f(all)h(of)f(them)195 2381 y(set)g
+(completion-query-items)e(150)195 2484 y(#)j(For)f(FTP)195
+2536 y($if)g(Ftp)195 2588 y("\\C-xg":)g("get)g(\\M-?")195
+2640 y("\\C-xt":)g("put)g(\\M-?")p eop
 %%Page: 12 14
-12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)i(Library)195
-183 y Ft("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75
-359 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137
-453 y Fu(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that)
-g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137
-519 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g
-(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29
-b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g
-Fm(p)q(oin)o(t)h Fu(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q
-(osition,)i(and)g Fm(mark)h Fu(refers)e(to)f(a)75 628
-y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g
-Ft(set-mark)f Fu(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g
-(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g
-Fm(region)p Fu(.)75 790 y Fl(1.4.1)30 b(Commands)21 b(F)-5
-b(or)19 b(Mo)n(ving)75 895 y Ft(beginning-of-line)13
-b(\(C-a\))315 950 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g
-(curren)o(t)g(line.)75 1026 y Ft(end-of-line)f(\(C-e\))315
-1081 y Fu(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75
-1157 y Ft(forward-char)f(\(C-f\))315 1212 y Fu(Mo)o(v)o(e)g(forw)o(ard)
-g(a)h(c)o(haracter.)75 1288 y Ft(backward-char)e(\(C-b\))315
-1343 y Fu(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75
-1419 y Ft(forward-word)f(\(M-f\))315 1474 y Fu(Mo)o(v)o(e)g(forw)o(ard)
-g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q
-(osed)i(of)f(letters)g(and)315 1529 y(digits.)75 1605
-y Ft(backward-word)e(\(M-b\))315 1660 y Fu(Mo)o(v)o(e)j(bac)o(k)g(to)h
-(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24
-b(W)l(ords)16 b(are)h(comp)q(osed)315 1715 y(of)e(letters)g(and)g
-(digits.)75 1791 y Ft(clear-screen)f(\(C-l\))315 1846
-y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,)
-i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315
-1900 y(of)i(the)g(screen.)75 1977 y Ft(redraw-current-line)e(\(\))315
-2031 y Fu(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15
-b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fl(1.4.2)30
-b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75
-2244 y Ft(accept-line)14 b(\(Newline,)g(Return\))315
-2298 y Fu(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor)
-f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315
-2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o
-(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315
-2408 y(to)h(its)g(original)h(state.)75 2484 y Ft(previous-history)d
-(\(C-p\))315 2539 y Fu(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g
-(list.)75 2615 y Ft(next-history)f(\(C-n\))315 2670 y
-Fu(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)p
-eop
+12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Ft("\\M-.":)23 b(yank-last-arg)195 201 y($endif)75
+329 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137
+425 y Fu(This)17 b(section)f(describ)q(es)h(Readline)g(commands)f(that)
+e(ma)o(y)h(b)q(e)i(b)q(ound)f(to)f(k)o(ey)h(sequences.)22
+b(Com-)75 480 y(mand)15 b(names)g(without)h(an)f(accompan)o(ying)g(k)o
+(ey)g(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)f(default.)137
+547 y(In)f(the)f(follo)o(wing)h(descriptions,)h Fk(p)q(oin)o(t)f
+Fu(refers)f(to)g(the)g(curren)o(t)g(cursor)f(p)q(osition,)j(and)e
+Fk(mark)i Fu(refers)75 601 y(to)k(a)g(cursor)g(p)q(osition)h(sa)o(v)o
+(ed)f(b)o(y)h(the)f Ft(set-mark)g Fu(command.)32 b(The)20
+b(text)f(b)q(et)o(w)o(een)g(the)h(p)q(oin)o(t)g(and)75
+656 y(mark)15 b(is)g(referred)h(to)e(as)h(the)g Fk(region)p
+Fu(.)75 767 y Fj(1.4.1)30 b(Commands)21 b(F)-5 b(or)19
+b(Mo)n(ving)75 888 y Ft(beginning-of-line)13 b(\(C-a\))315
+942 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g(curren)o(t)g(line.)
+75 1034 y Ft(end-of-line)f(\(C-e\))315 1088 y Fu(Mo)o(v)o(e)g(to)h(the)
+g(end)h(of)f(the)g(line.)75 1179 y Ft(forward-char)f(\(C-f\))315
+1234 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)75
+1325 y Ft(backward-char)e(\(C-b\))315 1380 y Fu(Mo)o(v)o(e)h(bac)o(k)h
+(a)g(c)o(haracter.)75 1471 y Ft(forward-word)f(\(M-f\))315
+1526 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(to)g(the)i(end)g(of)e(the)h(next)h
+(w)o(ord.)j(W)l(ords)c(are)f(comp)q(osed)i(of)f(letters)g(and)315
+1581 y(digits.)75 1672 y Ft(backward-word)e(\(M-b\))315
+1727 y Fu(Mo)o(v)o(e)j(bac)o(k)g(to)h(the)f(start)g(of)g(the)h(curren)o
+(t)g(or)f(previous)i(w)o(ord.)24 b(W)l(ords)16 b(are)h(comp)q(osed)315
+1782 y(of)e(letters)g(and)g(digits.)75 1873 y Ft(clear-screen)f
+(\(C-l\))315 1928 y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g
+(curren)o(t)g(line,)i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g
+(top)315 1982 y(of)i(the)g(screen.)75 2074 y Ft(redraw-current-line)e
+(\(\))315 2128 y Fu(Refresh)i(the)g(curren)o(t)g(line.)22
+b(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2239
+y Fj(1.4.2)30 b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f
+(History)75 2360 y Ft(accept-line)14 b(\(Newline)g(or)h(Return\))315
+2414 y Fu(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor)
+f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315
+2469 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g
+(future)g(recall)h(with)f Ft(add_history\(\))p Fu(.)k(If)d(this)315
+2524 y(line)g(is)f(a)e(mo)q(di\014ed)j(history)e(line,)i(the)e(history)
+g(line)i(is)f(restored)e(to)h(its)g(original)i(state.)75
+2615 y Ft(previous-history)c(\(C-p\))315 2670 y Fu(Mo)o(v)o(e)h(`bac)o
+(k')h(through)f(the)i(history)f(list,)g(fetc)o(hing)h(the)f(previous)h
+(command.)p eop
 %%Page: 13 15
 13 14 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(13)75 183 y Ft(beginning-of-history)12 b(\(M-<\))315
-238 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l
-(.)75 314 y Ft(end-of-history)e(\(M->\))315 369 y Fu(Mo)o(v)o(e)h(to)h
-(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i
-(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 445 y Ft
-(reverse-search-history)c(\(C-r\))315 500 y Fu(Searc)o(h)k(bac)o(kw)o
-(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h
-(`up')f(through)g(the)h(his-)315 555 y(tory)e(as)h(necessary)l(.)20
-b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631
-y Ft(forward-search-history)c(\(C-s\))315 686 y Fu(Searc)o(h)j(forw)o
+b(13)75 149 y Ft(next-history)14 b(\(C-n\))315 204 y
+Fu(Mo)o(v)o(e)g(`forw)o(ard')f(through)i(the)h(history)f(list,)g(fetc)o
+(hing)h(the)f(next)h(command.)75 307 y Ft(beginning-of-history)c
+(\(M-<\))315 362 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f
+(the)f(history)l(.)75 465 y Ft(end-of-history)e(\(M->\))315
+520 y Fu(Mo)o(v)o(e)h(to)h(the)g(end)h(of)f(the)g(input)h(history)l(,)f
+(i.e.,)g(the)g(line)i(curren)o(tly)f(b)q(eing)g(en)o(tered.)75
+624 y Ft(reverse-search-history)c(\(C-r\))315 678 y Fu(Searc)o(h)k(bac)
+o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)
+h(`up')f(through)g(the)h(his-)315 733 y(tory)e(as)h(necessary)l(.)20
+b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 836
+y Ft(forward-search-history)c(\(C-s\))315 891 y Fu(Searc)o(h)j(forw)o
 (ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)
-o(wn')f(through)g(the)h(the)315 741 y(history)g(as)g(necessary)l(.)20
-b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817
+o(wn')f(through)g(the)h(the)315 946 y(history)g(as)g(necessary)l(.)20
+b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 1049
 y Ft(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315
-872 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)
-f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315
-926 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o
-(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 981
-y(user.)75 1057 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12
-b(\(M-n\))315 1112 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f
+1104 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o
+(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315
+1159 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o
+(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1214
+y(user.)75 1317 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12
+b(\(M-n\))315 1372 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f
 (curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the)
-315 1167 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i
+315 1426 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i
 (searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315
-1222 y(user.)75 1298 y Ft(history-search-forward)f(\(\))315
-1353 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f
+1481 y(user.)75 1584 y Ft(history-search-forward)f(\(\))315
+1639 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f
 (the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315
-1407 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o
+1694 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o
 (t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27
-b(By)315 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
-1538 y Ft(history-search-backward)c(\(\))315 1593 y Fu(Searc)o(h)18
+b(By)315 1749 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
+1852 y Ft(history-search-backward)c(\(\))315 1907 y Fu(Searc)o(h)18
 b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f
-(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1648 y(start)e(of)h(the)h
+(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1962 y(start)e(of)h(the)h
 (curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18
 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315
-1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
-1779 y Ft(yank-nth-arg)e(\(M-C-y\))315 1834 y Fu(Insert)f(the)g
+2016 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
+2120 y Ft(yank-nth-arg)e(\(M-C-y\))315 2174 y Fu(Insert)f(the)g
 (\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h
-(the)f(second)h(w)o(ord)e(on)315 1889 y(the)i(previous)i(line\).)21
-b(With)14 b(an)h(argumen)o(t)e Fm(n)p Fu(,)i(insert)f(the)h
-Fm(n)p Fu(th)f(w)o(ord)g(from)g(the)g(previous)315 1943
-y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q
-(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315
-1998 y(argumen)o(t)g(inserts)i(the)f Fm(n)p Fu(th)h(w)o(ord)e(from)h
-(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y
-Ft(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 y Fu(Insert)j(last)f
-(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f
-(of)g(the)g(previous)315 2184 y(history)e(en)o(try\).)20
-b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g
-Ft(yank-nth-arg)p Fu(.)j(Succes-)315 2239 y(siv)o(e)f(calls)g(to)f
-Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g
-(list,)i(inserting)f(the)315 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i
-(line)g(in)g(turn.)75 2400 y Fl(1.4.3)30 b(Commands)21
-b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Ft(delete-char)14
-b(\(C-d\))315 2560 y Fu(Delete)j(the)f(c)o(haracter)g(under)h(the)f
-(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of)
-e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g
-(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not)
-315 2670 y(b)q(ound)g(to)f Ft(delete-char)p Fu(,)e(then)j(return)f
-Ft(EOF)p Fu(.)p eop
+(the)f(second)h(w)o(ord)e(on)315 2229 y(the)j(previous)h(line\))g(at)e
+(p)q(oin)o(t.)21 b(With)15 b(an)g(argumen)o(t)f Fk(n)p
+Fu(,)h(insert)g(the)g Fk(n)p Fu(th)g(w)o(ord)g(from)f(the)315
+2284 y(previous)g(command)g(\(the)f(w)o(ords)f(in)j(the)e(previous)i
+(command)e(b)q(egin)i(with)e(w)o(ord)g(0\).)19 b(A)315
+2339 y(negativ)o(e)13 b(argumen)o(t)f(inserts)h(the)g
+Fk(n)p Fu(th)g(w)o(ord)f(from)g(the)h(end)h(of)e(the)h(previous)g
+(command.)75 2442 y Ft(yank-last-arg)g(\(M-.)i(or)g(M-_\))315
+2497 y Fu(Insert)j(last)f(argumen)o(t)g(to)g(the)g(previous)i(command)e
+(\(the)g(last)h(w)o(ord)f(of)g(the)g(previous)315 2552
+y(history)e(en)o(try\).)20 b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)
+o(e)g(exactly)h(lik)o(e)g Ft(yank-nth-arg)p Fu(.)j(Succes-)315
+2606 y(siv)o(e)f(calls)g(to)f Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o
+(k)g(through)g(the)g(history)g(list,)i(inserting)f(the)315
+2661 y(last)d(argumen)o(t)g(of)f(eac)o(h)i(line)g(in)g(turn.)p
+eop
 %%Page: 14 16
-14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Ft(backward-delete-char)12 b(\(Rubout\))315 238
-y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c(n)o
-(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 293
-y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
-378 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315
-432 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
+14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(1.4.3)30 b(Commands)21 b(F)-5 b(or)19 b(Changing)i(T)-5
+b(ext)75 286 y Ft(delete-char)14 b(\(C-d\))315 341 y
+Fu(Delete)20 b(the)g(c)o(haracter)e(at)h(p)q(oin)o(t.)33
+b(If)20 b(p)q(oin)o(t)g(is)g(at)e(the)i(b)q(eginning)i(of)d(the)g
+(line,)j(there)315 396 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j
+(and)e(the)f(last)h(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q
+(ound)i(to)315 450 y Ft(delete-char)p Fu(,)13 b(then)j(return)f
+Fp(eof)p Fu(.)75 552 y Ft(backward-delete-char)d(\(Rubout\))315
+607 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
+(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315
+661 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
+763 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315
+818 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
 (unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
-487 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
+872 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
 (the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
-542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627
-y Ft(quoted-insert)e(\(C-q,)i(C-v\))315 682 y Fu(Add)j(the)f(next)g(c)o
-(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
-b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 736
-y(sequences)f(lik)o(e)605 734 y Fo(h)p 617 708 56 2 v
-617 736 a Fn(C-q)p 617 744 V 671 734 a Fo(i)685 736 y
-Fu(,)f(for)g(example.)75 821 y Ft(tab-insert)f(\(M-TAB\))315
-876 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Ft(self-insert)f
-(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fu(Insert)g(y)o(ourself.)
-75 1100 y Ft(transpose-chars)e(\(C-t\))315 1155 y Fu(Drag)i(the)h(c)o
-(haracter)f(b)q(efore)h(the)h(cursor)e(forw)o(ard)g(o)o(v)o(er)g(the)h
-(c)o(haracter)f(at)h(the)g(cursor,)315 1210 y(mo)o(ving)i(the)f(cursor)
-h(forw)o(ard)e(as)i(w)o(ell.)28 b(If)18 b(the)g(insertion)h(p)q(oin)o
-(t)f(is)g(at)f(the)h(end)h(of)e(the)315 1265 y(line,)c(then)e(this)h
-(transp)q(oses)e(the)h(last)g(t)o(w)o(o)f(c)o(haracters)g(of)h(the)g
-(line.)20 b(Negativ)o(e)11 b(argumen)o(ts)315 1320 y(ha)o(v)o(e)k(no)g
-(e\013ect.)75 1404 y Ft(transpose-words)e(\(M-t\))315
-1459 y Fu(Drag)i(the)h(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g
-(w)o(ord)f(after)h(p)q(oin)o(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f
-(that)315 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Ft(upcase-word)g
-(\(M-u\))315 1654 y Fu(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o
-(wing\))h(w)o(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)
-q(er-)315 1708 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g
-(mo)o(v)o(e)f(the)i(cursor.)75 1793 y Ft(downcase-word)d(\(M-l\))315
-1848 y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h
-(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o
-(ercase)315 1903 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o
-(v)o(e)f(the)h(cursor.)75 1988 y Ft(capitalize-word)e(\(M-c\))315
-2042 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
+927 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 1029
+y Ft(quoted-insert)e(\(C-q)i(or)g(C-v\))315 1083 y Fu(Add)j(the)f(next)
+g(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
+b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 1138
+y(sequences)f(lik)o(e)h Fo(C-q)p Fu(,)d(for)h(example.)75
+1240 y Ft(tab-insert)f(\(M-)401 1238 y Fn(h)p 412 1212
+74 2 v 412 1240 a Fm(T)m(AB)p 412 1247 V 484 1238 a Fn(i)499
+1240 y Ft(\))315 1294 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75
+1396 y Ft(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
+1451 y Fu(Insert)g(y)o(ourself.)75 1552 y Ft(transpose-chars)e(\(C-t\))
+315 1607 y Fu(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
+(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315
+1662 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
+b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e
+(the)315 1716 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
+(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11
+b(argumen)o(ts)315 1771 y(ha)o(v)o(e)k(no)g(e\013ect.)75
+1873 y Ft(transpose-words)e(\(M-t\))315 1927 y Fu(Drag)i(the)h(w)o(ord)
+g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o
+(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1982
+y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e
+(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the)
+315 2037 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75
+2138 y Ft(upcase-word)f(\(M-u\))315 2193 y Fu(Upp)q(ercase)j(the)f
+(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16
+b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 2248
+y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the)
+i(cursor.)75 2349 y Ft(downcase-word)d(\(M-l\))315 2404
+y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
+(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase)
+315 2459 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2560 y Ft(capitalize-word)e(\(M-c\))315
+2615 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
 (ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
-2097 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
-(the)h(cursor.)75 2220 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5
-b(anking)75 2336 y Ft(kill-line)14 b(\(C-k\))315 2391
-y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
-(the)g(line.)75 2476 y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315
-2530 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
-(line.)75 2615 y Ft(unix-line-discard)e(\(C-u\))315 2670
-y Fu(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
-(eginning)j(of)c(the)i(curren)o(t)f(line.)p eop
+2670 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)p eop
 %%Page: 15 17
 15 16 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(15)75 183 y Ft(kill-whole-line)13 b(\(\))315 238 y
-Fu(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e
-(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315
-293 y(un)o(b)q(ound.)75 374 y Ft(kill-word)c(\(M-d\))315
-429 y Fu(Kill)j(from)d(p)q(oin)o(t)h(to)f(the)h(end)g(of)f(the)h
-(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o(een)g(w)o(ords,)e(to)i
-(the)f(end)315 483 y(of)h(the)g(next)g(w)o(ord.)20 b(W)l(ord)14
-b(b)q(oundaries)j(are)e(the)g(same)g(as)g Ft(forward-word)p
-Fu(.)75 564 y Ft(backward-kill-word)e(\(M-DEL\))315 619
-y Fu(Kill)k(the)d(w)o(ord)g(b)q(ehind)i(p)q(oin)o(t.)21
-b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h(same)f(as)g
-Ft(backward-word)p Fu(.)75 700 y Ft(unix-word-rubout)f(\(C-w\))315
-755 y Fu(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o(t,)e(using)h
-(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23
-b(The)16 b(killed)315 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h
-(kill-ring.)75 891 y Ft(delete-horizontal-space)c(\(\))315
-946 y Fu(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k
-(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1027
-y Ft(kill-region)e(\(\))315 1082 y Fu(Kill)j(the)f(text)e(in)i(the)g
-(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un)
-o(b)q(ound.)75 1163 y Ft(copy-region-as-kill)d(\(\))315
-1217 y Fu(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
+b(15)75 149 y Ft(overwrite-mode)13 b(\(\))315 204 y Fu(T)l(oggle)j(o)o
+(v)o(erwrite)g(mo)q(de.)24 b(With)17 b(an)f(explicit)j(p)q(ositiv)o(e)f
+(n)o(umeric)f(argumen)o(t,)f(switc)o(hes)315 259 y(to)10
+b(o)o(v)o(erwrite)g(mo)q(de.)19 b(With)11 b(an)g(explicit)i(non-p)q
+(ositiv)o(e)f(n)o(umeric)g(argumen)o(t,)e(switc)o(hes)i(to)315
+314 y(insert)k(mo)q(de.)k(This)c(command)f(a\013ects)g(only)h
+Ft(emacs)e Fu(mo)q(de;)h Ft(vi)g Fu(mo)q(de)h(do)q(es)g(o)o(v)o
+(erwrite)315 369 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15
+b(call)h(to)f Ft(readline\(\))f Fu(starts)f(in)k(insert)e(mo)q(de.)315
+436 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
+Ft(self-insert)f Fu(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315
+491 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
+b(Characters)20 b(b)q(ound)i(to)e Ft(backward-)315 546
+y(delete-char)14 b Fu(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q
+(oin)o(t)h(with)f(a)g(space.)315 614 y(By)g(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 729 y Fj(1.4.4)30 b(Killing)20
+b(And)h(Y)-5 b(anking)75 853 y Ft(kill-line)14 b(\(C-k\))315
+908 y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
+(the)g(line.)75 1002 y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315
+1057 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
+(line.)75 1151 y Ft(unix-line-discard)e(\(C-u\))315 1205
+y Fu(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
+(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1299 y Ft(kill-whole-line)
+e(\(\))315 1354 y Fu(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
+o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29
+b(By)19 b(default,)315 1409 y(this)d(is)f(un)o(b)q(ound.)75
+1503 y Ft(kill-word)f(\(M-d\))315 1558 y Fu(Kill)j(from)d(p)q(oin)o(t)h
+(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o
+(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1613 y(of)h(the)g(next)g(w)o
+(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g
+Ft(forward-word)p Fu(.)75 1707 y Ft(backward-kill-word)e(\(M-)592
+1705 y Fn(h)p 603 1679 73 2 v 603 1707 a Fm(DEL)p 603
+1714 V 674 1705 a Fn(i)689 1707 y Ft(\))315 1761 y Fu(Kill)k(the)d(w)o
+(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f
+(the)h(same)f(as)g Ft(backward-word)p Fu(.)75 1855 y
+Ft(unix-word-rubout)f(\(C-w\))315 1910 y Fu(Kill)18 b(the)e(w)o(ord)f
+(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g
+(b)q(oundary)l(.)23 b(The)16 b(killed)315 1965 y(text)f(is)g(sa)o(v)o
+(ed)g(on)g(the)h(kill-ring.)75 2059 y Ft(delete-horizontal-space)c
+(\(\))315 2114 y Fu(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q
+(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75
+2208 y Ft(kill-region)e(\(\))315 2263 y Fu(Kill)j(the)f(text)e(in)i
+(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 2357 y Ft(copy-region-as-kill)d(\(\))315
+2412 y Fu(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
 (bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o
-(a)o(y)l(.)315 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
-(ound.)75 1353 y Ft(copy-backward-word)d(\(\))315 1408
+(a)o(y)l(.)315 2466 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
+(ound.)75 2560 y Ft(copy-backward-word)d(\(\))315 2615
 y Fu(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i
 (kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
-1463 y(same)c(as)g Ft(backward-word)p Fu(.)j(By)d(default,)g(this)h
-(command)f(is)h(un)o(b)q(ound.)75 1544 y Ft(copy-forward-word)d(\(\))
-315 1599 y Fu(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
-(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e
-(the)315 1653 y(same)g(as)g Ft(forward-word)p Fu(.)j(By)d(default,)h
-(this)f(command)g(is)h(un)o(b)q(ound.)75 1734 y Ft(yank)f(\(C-y\))315
-1789 y Fu(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the)
-h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75
-1870 y Ft(yank-pop)f(\(M-y\))315 1925 y Fu(Rotate)j(the)g(kill-ring,)j
+2670 y(same)c(as)g Ft(backward-word)p Fu(.)j(By)d(default,)g(this)h
+(command)f(is)h(un)o(b)q(ound.)p eop
+%%Page: 16 18
+16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Ft(copy-forward-word)d(\(\))315 204 y Fu(Cop)o(y)i(the)h(w)o(ord)
+e(follo)o(wing)j(p)q(oin)o(t)f(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o
+(ord)f(b)q(oundaries)i(are)e(the)315 259 y(same)g(as)g
+Ft(forward-word)p Fu(.)j(By)d(default,)h(this)f(command)g(is)h(un)o(b)q
+(ound.)75 342 y Ft(yank)f(\(C-y\))315 397 y Fu(Y)l(ank)g(the)h(top)f
+(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.)
+75 481 y Ft(yank-pop)g(\(M-y\))315 535 y Fu(Rotate)i(the)h(kill-ring,)j
 (and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
-(this)h(if)f(the)h(prior)315 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o
-(ank-p)q(op.)75 2095 y Fl(1.4.5)30 b(Sp)r(ecifying)20
-b(Numeric)h(Argumen)n(ts)75 2205 y Ft(digit-argument)13
-b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 y Fu(Add)f(this)g(digit)g(to)f
-(the)h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)
-h(argumen)o(t.)315 2313 y Fo(h)p 327 2287 50 2 v 327
-2315 a Fn(M{)p 327 2323 V 375 2313 a Fo(i)405 2315 y
-Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y
-Ft(universal-argument)e(\(\))315 2451 y Fu(This)g(is)h(another)e(w)o(a)
-o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
+(this)h(if)f(the)h(prior)315 590 y(command)d(is)h Ft(yank)e
+Fu(or)h Ft(yank-pop)p Fu(.)75 693 y Fj(1.4.5)30 b(Sp)r(ecifying)20
+b(Numeric)h(Argumen)n(ts)75 806 y Ft(digit-argument)13
+b(\()p Fo(M-0)p Ft(,)i Fo(M-1)p Ft(,)f(...)h Fo(M--)p
+Ft(\))315 861 y Fu(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e
+(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315
+915 y Fo(M--)h Fu(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75
+999 y Ft(universal-argument)e(\(\))315 1054 y Fu(This)g(is)h(another)e
+(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
 b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
-2506 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o
+1108 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o
 (us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315
-2560 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
-(digits,)g(executing)g Ft(universal-argument)315 2615
+1163 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
+(digits,)g(executing)g Ft(universal-argument)315 1218
 y Fu(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h
 (otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
-2670 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
-f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)p
-eop
-%%Page: 16 18
-16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)315
-183 y(or)c(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the)
-g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
-238 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
+1273 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
+f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
+1328 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
+(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
+1382 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
 (executing)i(this)f(function)h(the)e(\014rst)h(time)315
-293 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
+1437 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
 (time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315
-348 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
-(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 472 y Fl(1.4.6)30
+1492 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
+(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1595 y Fj(1.4.6)30
 b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5
-b(ou)75 590 y Ft(complete)14 b(\(TAB\))315 644 y Fu(A)o(ttempt)j(to)g
-(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27
-b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,)
-15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y)
-o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are)
-g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;)
-h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e
-(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315
-864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g
-(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315
-918 y(so)g(on.)75 1004 y Ft(possible-completions)d(\(M-?\))315
-1059 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
-q(efore)h(the)f(cursor.)75 1145 y Ft(insert-completions)e(\(M-*\))315
-1199 y Fu(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
+b(ou)75 1708 y Ft(complete)14 b(\()305 1706 y Fn(h)p
+317 1680 74 2 v 317 1708 a Fm(T)m(AB)p 317 1715 V 389
+1706 a Fn(i)404 1708 y Ft(\))315 1762 y Fu(A)o(ttempt)c(to)h(p)q
+(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19
+b(The)11 b(actual)h(completion)315 1817 y(p)q(erformed)j(is)h
+(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename)
+g(completion.)75 1901 y Ft(possible-completions)c(\(M-?\))315
+1955 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
+q(efore)h(p)q(oin)o(t.)75 2039 y Ft(insert-completions)d(\(M-*\))315
+2093 y Fu(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
 q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315
-1254 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1340
-y Ft(menu-complete)e(\(\))315 1395 y Fu(Similar)g(to)f
+2148 y(b)o(y)f Ft(possible-completions)p Fu(.)75 2232
+y Ft(menu-complete)e(\(\))315 2286 y Fu(Similar)g(to)f
 Ft(complete)p Fu(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
-(completed)f(with)h(a)e(single)j(matc)o(h)315 1450 y(from)k(the)h(list)
-h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20
-b(execution)g(of)f Ft(menu-complete)315 1504 y Fu(steps)h(through)g
+(completed)f(with)h(a)e(single)j(matc)o(h)315 2341 y(from)k(the)h(list)
+h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19
+b(execution)h(of)f Ft(menu-complete)315 2396 y Fu(steps)h(through)g
 (the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f
-(matc)o(h)f(in)i(turn.)315 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g
-(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i
-(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g
-Fm(n)g Fu(mo)o(v)o(es)g Fm(n)g Fu(p)q(ositions)h(forw)o(ard)e(in)i(the)
-g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f
-(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g
-(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f
-(b)q(e)h(b)q(ound)g(to)f Ft(TAB)p Fu(,)f(but)h(is)h(un)o(b)q(ound)g(b)o
-(y)f(default.)75 1809 y Ft(delete-char-or-list)e(\(\))315
-1864 y Fu(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h
-(not)f(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315
-1919 y(\(lik)o(e)i Ft(delete-char)p Fu(\).)j(If)d(at)f(the)h(end)g(of)f
-(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d
-Ft(possible-)315 1974 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o
-(b)q(ound)g(b)o(y)f(default.)75 2098 y Fl(1.4.7)30 b(Keyb)r(oard)20
-b(Macros)75 2216 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315
-2270 y Fu(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o
-(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 2356
-y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 2411 y Fu(Stop)f(sa)o(ving)f(the)
-h(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q
-(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 2466 y(de\014nition.)75
-2552 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 2606
-y Fu(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i
-(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315
-2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o
-(eyb)q(oard.)p eop
+(matc)o(h)f(in)i(turn.)315 2451 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
+(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f
+(the)i(setting)315 2506 y(of)f Ft(bell-style)p Fu(\))e(and)i(the)g
+(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g
+Fk(n)i Fu(mo)o(v)o(es)e Fk(n)315 2560 y Fu(p)q(ositions)h(forw)o(ard)e
+(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g
+(ma)o(y)g(b)q(e)h(used)g(to)315 2615 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
+(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f
+(b)q(e)h(b)q(ound)g(to)315 2668 y Fn(h)p 327 2642 V 327
+2670 a Fm(T)m(AB)p 327 2678 V 399 2668 a Fn(i)414 2670
+y Fu(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)p
+eop
 %%Page: 17 19
 17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(17)75 183 y Fl(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75
-298 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 353
-y Fu(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Fm(inputrc)k
+b(17)75 149 y Ft(delete-char-or-list)13 b(\(\))315 204
+y Fu(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h(not)f
+(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315
+259 y(\(lik)o(e)i Ft(delete-char)p Fu(\).)j(If)d(at)f(the)h(end)g(of)f
+(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d
+Ft(possible-)315 314 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o
+(b)q(ound)g(b)o(y)f(default.)75 428 y Fj(1.4.7)30 b(Keyb)r(oard)20
+b(Macros)75 551 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315
+606 y Fu(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o
+(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 699
+y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 754 y Fu(Stop)f(sa)o(ving)f(the)h
+(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q
+(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 809 y(de\014nition.)75
+902 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 957 y
+Fu(Re-execute)k(the)g(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i(b)o
+(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 1012
+y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o(eyb)q
+(oard.)75 1126 y Fj(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75
+1249 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 1304
+y Fu(Read)d(in)g(the)g(con)o(ten)o(ts)g(of)f(the)h Fk(inputrc)k
 Fu(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m
-(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75
-491 y Ft(abort)e(\(C-g\))315 546 y Fu(Ab)q(ort)f(the)g(curren)o(t)h
+(ariable)315 1358 y(assignmen)o(ts)k(found)h(there.)75
+1452 y Ft(abort)e(\(C-g\))315 1507 y Fu(Ab)q(ort)f(the)g(curren)o(t)h
 (editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s
-(ject)e(to)g(the)315 600 y(setting)i(of)g Ft(bell-style)p
-Fu(\).)75 684 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p
-Fm(x)p Ft(,)h Fj(:)8 b(:)g(:)n Ft(\))315 739 y Fu(If)14
-b(the)g(meta\014ed)g(c)o(haracter)f Fm(x)k Fu(is)d(lo)o(w)o(ercase,)g
-(run)g(the)g(command)f(that)h(is)g(b)q(ound)h(to)e(the)315
-794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75
-877 y Ft(prefix-meta)e(\(ESC\))315 932 y Fu(Mak)o(e)j(the)i(next)f(c)o
-(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19
-b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.)
-20 b(T)o(yping)15 b(`)p Ft(ESC)g(f)p Fu(')f(is)i(equiv)m(alen)o(t)h(to)
-d(t)o(yping)i(`)p Ft(M-f)p Fu('.)75 1070 y Ft(undo)f(\(C-_,)f(C-x)h
-(C-u\))315 1125 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q
-(ered)g(for)e(eac)o(h)h(line.)75 1209 y Ft(revert-line)f(\(M-r\))315
-1263 y Fu(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26
+(ject)e(to)g(the)315 1561 y(setting)i(of)g Ft(bell-style)p
+Fu(\).)75 1655 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p
+Fk(x)p Ft(,)h(...\))315 1710 y Fu(If)f(the)g(meta\014ed)g(c)o(haracter)
+f Fk(x)k Fu(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g
+(b)q(ound)h(to)e(the)315 1764 y(corresp)q(onding)j(upp)q(ercase)g(c)o
+(haracter.)75 1858 y Ft(prefix-meta)e(\()377 1856 y Fn(h)p
+389 1830 70 2 v 389 1858 a Fm(ESC)p 389 1866 V 456 1856
+a Fn(i)471 1858 y Ft(\))315 1913 y Fu(Metafy)k(the)h(next)g(c)o
+(haracter)f(t)o(yp)q(ed.)30 b(This)20 b(is)f(for)f(k)o(eyb)q(oards)h
+(without)g(a)f(meta)g(k)o(ey)l(.)315 1968 y(T)o(yping)e(`)485
+1966 y Fn(h)p 496 1939 V 496 1968 a Fm(ESC)p 496 1975
+V 563 1966 a Fn(i)593 1968 y Ft(f)p Fu(')f(is)h(equiv)m(alen)o(t)h(to)d
+(t)o(yping)i Fo(M-f)p Fu(.)75 2061 y Ft(undo)f(\(C-_)f(or)h(C-x)g
+(C-u\))315 2116 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q
+(ered)g(for)e(eac)o(h)h(line.)75 2209 y Ft(revert-line)f(\(M-r\))315
+2264 y Fu(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26
 b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Ft(undo)f
-Fu(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g
-(b)q(eginning.)75 1402 y Ft(tilde-expand)f(\(M-~\))315
-1456 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o
-(ord.)75 1540 y Ft(set-mark)f(\(C-@\))315 1595 y Fu(Set)g(the)f(mark)g
-(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g
-(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f
-(that)h(p)q(osition.)75 1733 y Ft(exchange-point-and-mark)d(\(C-x)j
-(C-x\))315 1788 y Fu(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k
-(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o
-(v)o(ed)315 1843 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q
-(osition)h(is)g(sa)o(v)o(ed)f(as)g(the)g(mark.)75 1926
-y Ft(character-search)e(\(C-]\))315 1981 y Fu(A)f(c)o(haracter)g(is)h
-(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q
-(ccurrence)g(of)f(that)g(c)o(haracter.)315 2036 y(A)j(negativ)o(e)h
-(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75
-2119 y Ft(character-search-backward)c(\(M-C-]\))315 2174
-y Fu(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v)
-o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315
-2229 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f
-(subsequen)o(t)i(o)q(ccurrences.)75 2312 y Ft(insert-comment)d(\(M-#\))
-315 2367 y Fu(The)19 b(v)m(alue)i(of)e(the)g Ft(comment-begin)e
-Fu(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315
-2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if)
-i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506
-y Ft(dump-functions)d(\(\))315 2560 y Fu(Prin)o(t)g(all)h(of)f(the)g
-(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)h
-(output)e(stream.)315 2615 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i
-(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o
-(y)f(that)315 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g
-Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o
-(y)f(default.)p eop
+Fu(command)315 2319 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g
+(b)q(eginning.)75 2412 y Ft(tilde-expand)f(\(M-~\))315
+2467 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o
+(ord.)75 2560 y Ft(set-mark)f(\(C-@\))315 2615 y Fu(Set)i(the)h(mark)f
+(to)f(the)i(p)q(oin)o(t.)24 b(If)17 b(a)f(n)o(umeric)h(argumen)o(t)f
+(is)g(supplied,)j(the)e(mark)e(is)i(set)315 2670 y(to)e(that)f(p)q
+(osition.)p eop
 %%Page: 18 20
-18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Ft(dump-variables)c(\(\))315 238 y Fu(Prin)o(t)e(all)g(of)f(the)h
-(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e(the)h
-(Readline)i(output)d(stream.)315 293 y(If)16 b(a)g(n)o(umeric)g
-(argumen)o(t)f(is)i(supplied,)h(the)e(output)f(is)i(formatted)d(in)j
-(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 348 y(it)g(can)h(b)q(e)g(made)f
-(part)f(of)h(an)g Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h
-(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Ft(dump-macros)f(\(\))315
-482 y Fu(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b)
-q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315
-537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i
-(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315
-592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h
-Fm(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o
-(y)315 647 y(default.)75 775 y Fs(1.5)33 b(Readline)23
-b(vi)h(Mo)r(de)137 871 y Fu(While)13 b(the)f(Readline)j(library)d(do)q
-(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Ft(vi)g
-Fu(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75
-926 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h(of)d(the)i(line.)
-27 b(The)17 b(Readline)i Ft(vi)e Fu(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g
-(sp)q(eci\014ed)i(in)75 981 y(the)c Fp(POSIX)h Fu(1003.2)d(standard.)
-137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o
-(w)o(een)f Ft(emacs)e Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f
-(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21
-b(The)15 b(Readline)j(default)d(is)h Ft(emacs)f Fu(mo)q(de.)137
-1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Ft(vi)g
-Fu(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q
-(de,)g(as)g(if)g(y)o(ou)75 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p
-Ft(i)p Fu('.)18 b(Pressing)608 1223 y Fo(h)p 620 1197
-70 2 v 620 1225 a Fn(ESC)p 620 1233 V 687 1223 a Fo(i)715
-1225 y Fu(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i
-(where)f(y)o(ou)g(can)g(edit)h(the)75 1280 y(text)i(of)h(the)g(line)h
-(with)g(the)f(standard)f Ft(vi)h Fu(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o
-(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1335
-y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p
-Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop
+18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Ft(exchange-point-and-mark)c(\(C-x)j(C-x\))315
+204 y Fu(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k(The)c
+(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o(v)o(ed)
+315 259 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q(osition)h(is)g
+(sa)o(v)o(ed)f(as)g(the)g(mark.)75 347 y Ft(character-search)e(\(C-]\))
+315 402 y Fu(A)f(c)o(haracter)g(is)h(read)g(and)f(p)q(oin)o(t)h(is)g
+(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q(ccurrence)g(of)f(that)g(c)o
+(haracter.)315 456 y(A)j(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f
+(previous)i(o)q(ccurrences.)75 544 y Ft(character-search-backward)c
+(\(M-C-]\))315 599 y Fu(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q
+(oin)o(t)g(is)g(mo)o(v)o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)
+e(that)315 654 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o
+(hes)g(for)f(subsequen)o(t)i(o)q(ccurrences.)75 741 y
+Ft(insert-comment)d(\(M-#\))315 796 y Fu(Without)18 b(a)f(n)o(umeric)i
+(argumen)o(t,)e(the)h(v)m(alue)h(of)f(the)f Ft(comment-begin)f
+Fu(v)m(ariable)k(is)e(in-)315 851 y(serted)e(at)f(the)h(b)q(eginning)i
+(of)d(the)h(curren)o(t)g(line.)23 b(If)16 b(a)g(n)o(umeric)h(argumen)o
+(t)e(is)h(supplied,)315 906 y(this)j(command)f(acts)g(as)f(a)h(toggle:)
+26 b(if)19 b(the)f(c)o(haracters)g(at)f(the)i(b)q(eginning)h(of)e(the)g
+(line)315 960 y(do)d(not)g(matc)o(h)g(the)g(v)m(alue)i(of)e
+Ft(comment-begin)p Fu(,)e(the)i(v)m(alue)i(is)f(inserted,)f(otherwise)h
+(the)315 1015 y(c)o(haracters)j(in)i Ft(comment-begin)d
+Fu(are)i(deleted)i(from)d(the)h(b)q(eginning)i(of)e(the)g(line.)36
+b(In)315 1070 y(either)16 b(case,)f(the)g(line)i(is)f(accepted)f(as)g
+(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)75 1158
+y Ft(dump-functions)c(\(\))315 1213 y Fu(Prin)o(t)g(all)h(of)f(the)g
+(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)g
+(output)f(stream.)315 1267 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i
+(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o
+(y)f(that)315 1322 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g
+Fk(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o
+(y)f(default.)75 1410 y Ft(dump-variables)e(\(\))315
+1465 y Fu(Prin)o(t)e(all)g(of)f(the)h(settable)g(v)m(ariables)h(and)f
+(their)g(v)m(alues)h(to)e(the)h(Readline)h(output)e(stream.)315
+1519 y(If)16 b(a)g(n)o(umeric)g(argumen)o(t)f(is)i(supplied,)h(the)e
+(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o(y)f(that)315
+1574 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g Fk(inputrc)k
+Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.)
+75 1662 y Ft(dump-macros)f(\(\))315 1717 y Fu(Prin)o(t)j(all)h(of)e
+(the)h(Readline)h(k)o(ey)f(sequences)h(b)q(ound)g(to)e(macros)g(and)h
+(the)g(strings)g(they)315 1771 y(output.)26 b(If)18 b(a)f(n)o(umeric)h
+(argumen)o(t)f(is)h(supplied,)i(the)d(output)g(is)h(formatted)e(in)j
+(suc)o(h)e(a)315 1826 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g
+(part)g(of)f(an)h Fk(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h
+(un)o(b)q(ound)g(b)o(y)315 1881 y(default.)75 1969 y
+Ft(emacs-editing-mode)d(\(C-e\))315 2024 y Fu(When)j(in)g
+Ft(vi)e Fu(command)i(mo)q(de,)f(this)g(causes)h(a)f(switc)o(h)g(to)g
+Ft(emacs)f Fu(editing)j(mo)q(de.)75 2111 y Ft(vi-editing-mode)c
+(\(M-C-j\))315 2166 y Fu(When)j(in)g Ft(emacs)e Fu(editing)j(mo)q(de,)e
+(this)g(causes)h(a)f(switc)o(h)g(to)g Ft(vi)f Fu(editing)j(mo)q(de.)75
+2290 y Fs(1.5)33 b(Readline)23 b(vi)h(Mo)r(de)137 2385
+y Fu(While)13 b(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o(e)f
+(a)h(full)h(set)f(of)f Ft(vi)g Fu(editing)j(functions,)f(it)f(do)q(es)g
+(con)o(tain)75 2440 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h
+(of)d(the)i(line.)27 b(The)17 b(Readline)h Ft(vi)f Fu(mo)q(de)g(b)q
+(eha)o(v)o(es)g(as)g(sp)q(eci\014ed)i(in)75 2495 y(the)c
+Fp(posix)g Fu(1003.2)f(standard.)137 2560 y(In)h(order)g(to)f(switc)o
+(h)g(in)o(teractiv)o(ely)i(b)q(et)o(w)o(een)f Ft(emacs)e
+Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f(the)h(command)75
+2615 y Fo(M-C-j)j Fu(\(b)q(ound)i(to)e(emacs-editing-mo)q(de)j(when)e
+(in)h Ft(vi)f Fu(mo)q(de)g(and)g(to)f(vi-editing-mo)q(de)k(in)e
+Ft(emacs)75 2670 y Fu(mo)q(de\).)g(The)15 b(Readline)i(default)f(is)f
+Ft(emacs)g Fu(mo)q(de.)p eop
 %%Page: 19 21
-19 20 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(19)75 183 y Fq(2)41 b(Programming)28
-b(with)e(GNU)i(Readline)137 305 y Fu(This)16 b(c)o(hapter)f(describ)q
-(es)i(the)f(in)o(terface)g(b)q(et)o(w)o(een)f(the)h(GNU)f(Readline)j
-(Library)e(and)f(other)g(pro-)75 360 y(grams.)38 b(If)22
-b(y)o(ou)f(are)g(a)g(programmer,)h(and)f(y)o(ou)g(wish)i(to)d(include)k
-(the)e(features)f(found)h(in)g(GNU)75 414 y(Readline)16
-b(suc)o(h)e(as)f(completion,)h(line)h(editing,)g(and)f(in)o(teractiv)o
-(e)g(history)f(manipulation)i(in)g(y)o(our)d(o)o(wn)75
-469 y(programs,)i(this)h(section)h(is)g(for)e(y)o(ou.)75
-602 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 700 y Fu(Man)o(y)15
+19 20 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(19)137 149 y(When)16 b(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e
+Ft(vi)g Fu(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g
+(`insertion')f(mo)q(de,)g(as)g(if)g(y)o(ou)75 204 y(had)e(t)o(yp)q(ed)h
+(an)f(`)p Ft(i)p Fu('.)18 b(Pressing)608 202 y Fn(h)p
+620 176 70 2 v 620 204 a Fm(ESC)p 620 212 V 687 202 a
+Fn(i)715 204 y Fu(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q
+(de,)i(where)f(y)o(ou)g(can)g(edit)h(the)75 259 y(text)i(of)h(the)g
+(line)h(with)g(the)f(standard)f Ft(vi)h Fu(mo)o(v)o(emen)o(t)f(k)o
+(eys,)g(mo)o(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75
+314 y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p
+Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop
+%%Page: 20 22
+20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)h(Library)p
+eop
+%%Page: 21 23
+21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(21)75 149 y Fq(2)41 b(Programming)28
+b(with)e(GNU)i(Readline)137 267 y Fu(This)18 b(c)o(hapter)f(describ)q
+(es)h(the)f(in)o(terface)g(b)q(et)o(w)o(een)h(the)f Fp(gnu)g
+Fu(Readline)h(Library)f(and)g(other)g(pro-)75 322 y(grams.)h(If)11
+b(y)o(ou)g(are)g(a)g(programmer,)f(and)i(y)o(ou)f(wish)g(to)g(include)j
+(the)d(features)g(found)g(in)i Fp(gnu)e Fu(Readline)75
+377 y(suc)o(h)h(as)f(completion,)h(line)h(editing,)g(and)f(in)o
+(teractiv)o(e)g(history)f(manipulation)i(in)f(y)o(our)f(o)o(wn)g
+(programs,)75 432 y(this)16 b(section)f(is)h(for)f(y)o(ou.)75
+561 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 658 y Fu(Man)o(y)15
 b(programs)f(pro)o(vide)i(a)f(command)g(line)i(in)o(terface,)e(suc)o(h)
 h(as)f Ft(mail)p Fu(,)f Ft(ftp)p Fu(,)h(and)g Ft(sh)p
-Fu(.)20 b(F)l(or)15 b(suc)o(h)75 754 y(programs,)e(the)h(default)h(b)q
-(eha)o(viour)g(of)f(Readline)j(is)d(su\016cien)o(t.)21
+Fu(.)20 b(F)l(or)15 b(suc)o(h)75 713 y(programs,)e(the)h(default)h(b)q
+(eha)o(viour)g(of)f(Readline)i(is)e(su\016cien)o(t.)21
 b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75
-809 y(Readline)19 b(in)g(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p)
-q(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e
-Ft(gets\(\))g Fu(or)75 864 y Ft(fgets)e(\(\))p Fu(.)137
-933 y(The)j(function)h Ft(readline)c(\(\))j Fu(prin)o(ts)g(a)g(prompt)f
-(and)h(then)g(reads)g(and)g(returns)g(a)g(single)h(line)g(of)75
-988 y(text)12 b(from)f(the)i(user.)19 b(The)12 b(line)i
-Ft(readline)d Fu(returns)h(is)h(allo)q(cated)g(with)g
-Ft(malloc)h(\(\))p Fu(;)e(y)o(ou)g(should)i Ft(free)75
-1042 y(\(\))h Fu(the)g(line)i(when)f(y)o(ou)f(are)f(done)i(with)g(it.)k
+768 y(Readline)k(in)h(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p)q
+(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e
+Ft(gets\(\))g Fu(or)75 822 y Ft(fgets\(\))p Fu(.)137
+890 y(The)h(function)g Ft(readline\(\))e Fu(prin)o(ts)h(a)g(prompt)g
+Fk(prompt)h Fu(and)f(then)h(reads)f(and)h(returns)f(a)g(single)75
+945 y(line)i(of)e(text)g(from)f(the)i(user.)23 b(If)17
+b Fk(prompt)g Fu(is)g Ft(NULL)e Fu(or)h(the)h(empt)o(y)f(string,)g(no)g
+(prompt)g(is)h(displa)o(y)o(ed.)75 1000 y(The)i(line)h
+Ft(readline)d Fu(returns)i(is)g(allo)q(cated)g(with)g
+Ft(malloc\(\))p Fu(;)g(the)g(caller)g(should)h Ft(free\(\))e
+Fu(the)g(line)75 1054 y(when)e(it)f(has)g(\014nished)i(with)f(it.)k
 (The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)195
-1108 y Ft(char)23 b(*readline)g(\(char)g(*)p Fm(prompt)q
-Ft(\);)75 1177 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195
-1243 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)
-75 1312 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f
+1119 y Ft(char)23 b(*readline)g(\(const)g(char)g(*)p
+Fk(prompt)q Ft(\);)75 1187 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195
+1251 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)
+75 1319 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f
 (the)i(user.)19 b(The)11 b(line)j(returned)d(has)h(the)f(\014nal)h
-(newline)i(remo)o(v)o(ed,)75 1366 y(so)h(only)h(the)f(text)g(remains.)
-137 1435 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g
+(newline)i(remo)o(v)o(ed,)75 1374 y(so)h(only)h(the)f(text)g(remains.)
+137 1441 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g
 Ft(EOF)g Fu(while)i(reading)f(the)f(line,)j(and)d(the)h(line)g(is)g
-(empt)o(y)f(at)g(that)75 1490 y(p)q(oin)o(t,)15 b(then)g
+(empt)o(y)f(at)g(that)75 1496 y(p)q(oin)o(t,)15 b(then)g
 Ft(\(char)f(*\)NULL)g Fu(is)h(returned.)21 b(Otherwise,)15
 b(the)g(line)h(is)f(ended)h(just)e(as)h(if)g(a)f(newline)j(had)75
-1545 y(b)q(een)f(t)o(yp)q(ed.)137 1614 y(If)d(y)o(ou)g(w)o(an)o(t)f
+1551 y(b)q(een)f(t)o(yp)q(ed.)137 1618 y(If)d(y)o(ou)g(w)o(an)o(t)f
 (the)h(user)g(to)f(b)q(e)i(able)g(to)e(get)g(at)h(the)g(line)h(later,)f
-(\(with)1325 1612 y Fo(h)p 1338 1586 57 2 v 1338 1614
-a Fn(C-p)p 1338 1621 V 1392 1612 a Fo(i)1420 1614 y Fu(for)f
-(example\),)i(y)o(ou)f(m)o(ust)75 1668 y(call)j Ft(add_history)e(\(\))h
-Fu(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)f
-Fm(history)k Fu(list)d(of)e(suc)o(h)i(lines.)195 1734
-y Ft(add_history)22 b(\(line\);)75 1803 y Fu(F)l(or)15
+(\(with)1325 1616 y Fn(h)p 1338 1590 57 2 v 1338 1618
+a Fm(C-p)p 1338 1626 V 1392 1616 a Fn(i)1420 1618 y Fu(for)f
+(example\),)i(y)o(ou)f(m)o(ust)75 1673 y(call)j Ft(add_history\(\))e
+Fu(to)g(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)e
+Fk(history)19 b Fu(list)d(of)f(suc)o(h)h(lines.)195 1738
+y Ft(add_history)22 b(\(line\);)75 1805 y Fu(F)l(or)15
 b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f
-(asso)q(ciated)g(man)o(ual.)137 1872 y(It)h(is)g(preferable)h(to)e(a)o
+(asso)q(ciated)g(man)o(ual.)137 1873 y(It)h(is)g(preferable)h(to)e(a)o
 (v)o(oid)g(sa)o(ving)h(empt)o(y)f(lines)i(on)f(the)g(history)f(list,)i
-(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1927 y(burning)h(need)g(to)
+(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1928 y(burning)h(need)g(to)
 e(reuse)h(a)g(blank)g(line.)22 b(Here)15 b(is)g(a)g(function)g(whic)o
-(h)h(usefully)h(replaces)e(the)g(standard)75 1981 y Ft(gets)g(\(\))f
-Fu(library)i(function,)g(and)g(has)f(the)g(adv)m(an)o(tage)f(of)h(no)g
-(static)g(bu\013er)h(to)e(o)o(v)o(er\015o)o(w:)195 2047
+(h)h(usefully)h(replaces)e(the)g(standard)75 1983 y Ft(gets\(\))f
+Fu(library)i(function,)g(and)f(has)g(the)h(adv)m(an)o(tage)e(of)h(no)g
+(static)g(bu\013er)g(to)g(o)o(v)o(er\015o)o(w:)195 2047
 y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/)
 195 2099 y(static)g(char)g(*line_read)g(=)h(\(char)f(*\)NULL;)195
 2203 y(/*)h(Read)f(a)h(string,)f(and)g(return)g(a)h(pointer)f(to)g(it.)
-48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)195 2255 y(char)f(*)195
-2307 y(rl_gets)g(\(\))195 2359 y({)243 2411 y(/*)g(If)h(the)f(buffer)g
-(has)h(already)f(been)g(allocated,)g(return)g(the)g(memory)314
-2462 y(to)h(the)f(free)h(pool.)f(*/)243 2514 y(if)g(\(line_read\))290
-2566 y({)338 2618 y(free)g(\(line_read\);)338 2670 y(line_read)g(=)h
-(\(char)f(*\)NULL;)p eop
-%%Page: 20 22
-20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)i(Library)290
-183 y Ft(})243 287 y(/*)23 b(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)
-243 339 y(line_read)f(=)i(readline)f(\(""\);)243 443
-y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f
-(the)h(history.)f(*/)243 495 y(if)g(\(line_read)g(&&)g(*line_read\))290
-546 y(add_history)g(\(line_read\);)243 650 y(return)g(\(line_read\);)
-195 702 y(})137 770 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h
-(the)g(default)h(b)q(eha)o(viour)g(of)1169 768 y Fo(h)p
-1181 742 74 2 v 1181 770 a Fn(T)m(AB)p 1181 777 V 1253
-768 a Fo(i)1280 770 y Fu(completion:)19 b(completion)13
-b(on)f(\014le)75 824 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t)
-f(Readline)k(to)c(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o
-(hange)h(the)f(binding)75 879 y(of)g(the)205 877 y Fo(h)p
-217 851 V 217 879 a Fn(T)m(AB)p 217 887 V 289 877 a Fo(i)319
-879 y Fu(k)o(ey)g(with)h Ft(rl_bind_key)d(\(\))p Fu(.)195
-944 y Ft(int)23 b(rl_bind_key)g(\(int)g Fm(k)o(ey)p Ft(,)h(int)f(\(*)p
-Fm(function)p Ft(\)\(\)\);)137 1011 y(rl_bind_key)14
-b(\(\))h Fu(tak)o(es)g(t)o(w)o(o)g(argumen)o(ts:)20 b
-Fm(k)o(ey)f Fu(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)g
-(to)g(bind,)i(and)75 1066 y Fm(function)i Fu(is)f(the)g(address)g(of)g
-(the)g(function)g(to)g(call)h(when)f Fm(k)o(ey)k Fu(is)c(pressed.)29
-b(Binding)1628 1064 y Fo(h)p 1641 1038 V 1641 1066 a
-Fn(T)m(AB)p 1641 1074 V 1712 1064 a Fo(i)1745 1066 y
-Fu(to)17 b Ft(rl_)75 1121 y(insert)d(\(\))i Fu(mak)o(es)433
-1119 y Fo(h)p 446 1093 V 446 1121 a Fn(T)m(AB)p 446 1129
-V 517 1119 a Fo(i)548 1121 y Fu(insert)g(itself.)22 b
-Ft(rl_bind_key)13 b(\(\))i Fu(returns)h(non-zero)g(if)g
-Fm(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1176 y(ASCI)q(I)h(c)o
-(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137
-1243 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1241
-y Fo(h)p 716 1215 V 716 1243 a Fn(T)m(AB)p 716 1251 V
-787 1241 a Fo(i)817 1243 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h
-(su\016ces:)195 1308 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137
-1375 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e
-(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a)
-g(func-)75 1430 y(tion)i(called)h Ft(initialize_readline)d(\(\))h
-Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g
-(initializations,)75 1485 y(suc)o(h)h(as)e(installing)k(custom)c
-(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h
-(33\).)75 1614 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137
-1711 y Fu(Readline)15 b(pro)o(vides)e(man)o(y)e(functions)i(for)f
-(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q
-(ossi-)75 1765 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h
-(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h
-(functions)g(and)75 1820 y(v)m(ariables)g(de\014ned)h(within)f(the)f
-(Readline)j(library)d(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h
-(add)g(customized)75 1875 y(functionalit)o(y)j(to)f(Readline.)137
-1942 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g
-(Readline's)i(b)q(eha)o(vior,)g(or)d(using)i(an)o(y)f(func-)75
-1997 y(tionalit)o(y)23 b(Readline)i(pro)o(vides)f(in)f(other)g(co)q
-(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75
-2052 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e
-(uses)h(Readline's)h(features.)24 b(Since)19 b(some)d(of)g(the)h
-(de\014-)75 2107 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g
-Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft(<stdio.h>)f
-Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2162 y Ft(readline.h)p
-Fu(.)75 2274 y Fl(2.2.1)30 b(The)20 b(F)-5 b(unction)20
-b(T)n(yp)r(e)137 2371 y Fu(F)l(or)f(readabilt)o(y)l(,)h(w)o(e)f
-(declare)h(a)f(new)g(t)o(yp)q(e)g(of)g(ob)s(ject,)g(called)i
-Fm(F)l(unction)p Fu(.)32 b(A)19 b Ft(Function)f Fu(is)h(a)g(C)75
-2425 y(function)d(whic)o(h)g(returns)f(an)g Ft(int)p
-Fu(.)20 b(The)15 b(t)o(yp)q(e)g(declaration)h(for)f Ft(Function)f
-Fu(is:)75 2493 y Ft(typedef)g(int)h(Function)f(\(\);)137
-2560 y Fu(The)21 b(reason)g(for)f(declaring)i(this)g(new)f(t)o(yp)q(e)g
-(is)g(to)g(mak)o(e)f(it)h(easier)g(to)g(write)g(co)q(de)g(describing)75
-2615 y(p)q(oin)o(ters)16 b(to)f(C)g(functions.)21 b(Let)16
-b(us)f(sa)o(y)g(w)o(e)g(had)h(a)f(v)m(ariable)i(called)g
-Fm(func)i Fu(whic)o(h)d(w)o(as)e(a)i(p)q(oin)o(ter)f(to)g(a)75
-2670 y(function.)21 b(Instead)15 b(of)g(the)g(classic)i(C)e
-(declaration)p eop
-%%Page: 21 23
-21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(21)137 183 y Ft(int)15 b(\(*\)\(\)func;)75
-250 y Fu(w)o(e)g(ma)o(y)f(write)137 317 y Ft(Function)g(*func;)75
-384 y Fu(Similarly)l(,)j(there)e(are)195 449 y Ft(typedef)23
-b(void)g(VFunction)g(\(\);)195 501 y(typedef)g(char)g(*CPFunction)g
-(\(\);)g Fu(and)195 552 y Ft(typedef)g(char)g(**CPPFunction)f(\(\);)75
-620 y Fu(for)17 b(functions)h(returning)g(no)f(v)m(alue,)h
-Ft(pointer)d(to)g(char)p Fu(,)h(and)i Ft(pointer)c(to)h(pointer)f(to)h
-(char)p Fu(,)i(re-)75 674 y(sp)q(ectiv)o(ely)l(.)75 786
-y Fl(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 b(unction)137
-882 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g(for)e
-(Readline,)j(y)o(ou)e(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o(v)o
-(en)o(tions)75 937 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h
-(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d
-(describ)q(e)k(the)d(curren)o(t)75 992 y(state)c(of)h(the)g(line)i
-(read)e(so)g(far.)137 1059 y(The)h(calling)h(sequence)f(for)f(a)f
-(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 1123 y
-Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 1190 y Fu(where)18
-b Fm(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o(t)e(\(or)h(1)f(if)
-i(defaulted\))f(and)g Fm(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v)
-o(ok)o(ed)75 1245 y(this)f(function.)137 1312 y(It)c(is)g(completely)h
-(up)f(to)f(the)g(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g
-(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 1367 y(Some)20
-b(functions)h(use)f(it)g(as)g(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g
-(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)75
-1421 y(b)q(eha)o(vior)i(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d
-(opp)q(osed)h(to)f(refreshing)i(the)e(screen,)j(for)d(example\).)75
-1476 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18
-b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o(umeric)h(argumen)o(t)
-d(as)i(a)f(rep)q(eat)75 1531 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h
-(to)e(do)h(something)h(useful)g(with)f(b)q(oth)g(negativ)o(e)g(and)g(p)
-q(ositiv)o(e)h(argumen)o(ts.)75 1586 y(A)o(t)g(the)g(v)o(ery)g(least,)g
-(it)g(should)h(b)q(e)g(a)o(w)o(are)e(that)h(it)g(can)g(b)q(e)h(passed)g
-(a)f(negativ)o(e)g(argumen)o(t.)75 1714 y Fs(2.3)33 b(Readline)23
-b(V)-6 b(ariables)137 1810 y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m
-(ailable)i(to)e(function)h(writers.)1661 1902 y(V)l(ariable)-1749
-b Fi(char)20 b(*)f Fh(rl)p 286 1902 18 3 v 21 w(line)p
-395 1902 V 23 w(bu\013er)195 1957 y Fu(This)h(is)f(the)h(line)h
-(gathered)e(so)f(far.)31 b(Y)l(ou)20 b(are)f(w)o(elcome)g(to)g(mo)q
-(dify)h(the)f(con)o(ten)o(ts)f(of)195 2011 y(the)f(line,)h(but)f(see)g
-(Section)g(2.4.5)e([Allo)o(wing)j(Undoing],)f(page)f(26.)24
-b(The)17 b(function)g Ft(rl_)195 2066 y(extend_line_buffer)8
-b Fu(is)k(a)o(v)m(ailable)g(to)f(increase)h(the)f(memory)f(allo)q
-(cated)i(to)e Ft(rl_line_)195 2121 y(buffer)p Fu(.)1661
-2213 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2213
-V 21 w(p)r(oin)n(t)195 2267 y Fu(The)15 b(o\013set)g(of)f(the)i(curren)
-o(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d
-Fu(\(the)i Fm(p)q(oin)o(t)q Fu(\).)1661 2359 y(V)l(ariable)-1749
-b Fi(int)20 b Fh(rl)p 215 2359 V 21 w(end)195 2414 y
-Fu(The)e(n)o(um)o(b)q(er)g(of)f(c)o(haracters)g(presen)o(t)h(in)g
-Ft(rl_line_buffer)p Fu(.)26 b(When)18 b Ft(rl_point)e
-Fu(is)j(at)195 2469 y(the)c(end)h(of)f(the)g(line,)i
-Ft(rl_point)d Fu(and)h Ft(rl_end)f Fu(are)h(equal.)1661
-2560 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2560
-V 21 w(mark)195 2615 y Fu(The)14 b(mark)e(\(sa)o(v)o(ed)h(p)q
-(osition\))h(in)g(the)g(curren)o(t)f(line.)21 b(If)14
-b(set,)f(the)h(mark)e(and)i(p)q(oin)o(t)g(de\014ne)195
-2670 y(a)h Fm(region)p Fu(.)p eop
+267 2255 y(Returns)f(NULL)i(on)f(EOF.)h(*/)195 2307 y(char)f(*)195
+2359 y(rl_gets)g(\(\))195 2411 y({)243 2462 y(/*)g(If)h(the)f(buffer)g
+(has)h(already)f(been)g(allocated,)314 2514 y(return)g(the)h(memory)f
+(to)g(the)h(free)f(pool.)g(*/)243 2566 y(if)g(\(line_read\))290
+2618 y({)338 2670 y(free)g(\(line_read\);)p eop
 %%Page: 22 24
-22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)i(Library)1661
-183 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 183
-18 3 v 21 w(done)195 238 y Fu(Setting)j(this)g(to)f(a)h(non-zero)g(v)m
-(alue)h(causes)f(Readline)i(to)d(return)h(the)g(curren)o(t)f(line)195
-293 y(immediately)l(.)1661 384 y(V)l(ariable)-1749 b
-Fi(int)20 b Fh(rl)p 215 384 V 21 w(p)r(ending)p 436 384
-V 20 w(input)195 439 y Fu(Setting)15 b(this)h(to)f(a)f(v)m(alue)j(mak)o
-(es)d(it)i(the)f(next)g(k)o(eystrok)o(e)f(read.)20 b(This)c(is)f(a)g(w)
-o(a)o(y)f(to)h(stu\013)195 494 y(a)g(single)h(c)o(haracter)f(in)o(to)g
-(the)g(input)i(stream.)1661 586 y(V)l(ariable)-1749 b
-Fi(int)20 b Fh(rl)p 215 586 V 21 w(erase)p 363 586 V
-20 w(empt)n(y)p 540 586 V 20 w(line)195 640 y Fu(Setting)13
-b(this)h(to)e(a)h(non-zero)g(v)m(alue)h(causes)f(Readline)j(to)c
-(completely)i(erase)f(the)g(curren)o(t)195 695 y(line,)19
-b(including)g(an)o(y)e(prompt,)f(an)o(y)h(time)g(a)f(newline)j(is)f(t)o
-(yp)q(ed)f(as)f(the)h(only)h(c)o(haracter)195 750 y(on)13
-b(an)f(otherwise-empt)o(y)h(line.)20 b(The)13 b(cursor)g(is)g(mo)o(v)o
-(ed)f(to)g(the)g(b)q(eginning)j(of)d(the)h(newly-)195
-805 y(blank)j(line.)1661 896 y(V)l(ariable)-1749 b Fi(char)20
-b(*)f Fh(rl)p 286 896 V 21 w(prompt)195 951 y Fu(The)14
-b(prompt)f(Readline)j(uses.)k(This)14 b(is)g(set)g(from)f(the)g
-(argumen)o(t)g(to)g Ft(readline)h(\(\))p Fu(,)g(and)195
-1006 y(should)i(not)f(b)q(e)h(assigned)g(to)e(directly)l(.)1661
-1097 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1097
-V 21 w(already)p 419 1097 V 21 w(prompted)195 1152 y
-Fu(If)14 b(an)g(application)h(wishes)f(to)f(displa)o(y)i(the)f(prompt)f
-(itself,)i(rather)e(than)g(ha)o(v)o(e)h(Readline)195
-1207 y(do)j(it)h(the)f(\014rst)g(time)h Ft(readline\(\))e
-Fu(is)i(called,)h(it)f(should)g(set)f(this)h(v)m(ariable)h(to)e(a)g
-(non-)195 1262 y(zero)i(v)m(alue)i(after)e(displa)o(ying)i(the)f
-(prompt.)32 b(The)20 b(prompt)f(m)o(ust)g(also)g(b)q(e)i(passed)e(as)
-195 1317 y(the)c(argumen)o(t)e(to)h Ft(readline\(\))g
-Fu(so)g(the)g(redispla)o(y)i(functions)f(can)g(up)q(date)g(the)g
-(displa)o(y)195 1371 y(prop)q(erly)l(.)k(The)11 b(calling)h
-(application)f(is)g(resp)q(onsible)h(for)e(managing)g(the)g(v)m(alue;)j
-(Readline)195 1426 y(nev)o(er)i(sets)g(it.)1661 1518
-y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 1518
-V 21 w(library)p 475 1518 V 22 w(v)n(ersion)195 1573
-y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g(of)f
-(the)g(library)l(.)1661 1664 y(V)l(ariable)-1749 b Fi(char)20
-b(*)f Fh(rl)p 286 1664 V 21 w(terminal)p 518 1664 V 21
-w(name)195 1719 y Fu(The)c(terminal)h(t)o(yp)q(e,)f(used)h(for)f
-(initialization.)1661 1811 y(V)l(ariable)-1749 b Fi(char)20
-b(*)f Fh(rl)p 286 1811 V 21 w(readline)p 505 1811 V 22
-w(name)195 1865 y Fu(This)d(v)m(ariable)h(is)f(set)f(to)g(a)g(unique)i
-(name)f(b)o(y)f(eac)o(h)g(application)j(using)e(Readline.)23
-b(The)195 1920 y(v)m(alue)12 b(allo)o(ws)e(conditional)i(parsing)f(of)f
-(the)g(inputrc)h(\014le)h(\(see)e(Section)h(1.3.2)e([Conditional)195
-1975 y(Init)16 b(Constructs],)e(page)h(8\).)1661 2067
-y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286 2067
-V 21 w(instream)195 2121 y Fu(The)c(stdio)h(stream)e(from)h(whic)o(h)h
-(Readline)h(reads)e(input.)1661 2213 y(V)l(ariable)-1749
-b Fi(FILE)20 b(*)f Fh(rl)p 286 2213 V 21 w(outstream)195
-2268 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q
-(erforms)e(output.)1661 2359 y(V)l(ariable)-1749 b Fi(Function)20
-b(*)g Fh(rl)p 391 2359 V 21 w(startup)p 595 2359 V 20
-w(ho)r(ok)195 2414 y Fu(If)15 b(non-zero,)f(this)h(is)g(the)f(address)h
-(of)e(a)h(function)i(to)d(call)j(just)e(b)q(efore)h Ft(readline)e
-Fu(prin)o(ts)195 2469 y(the)i(\014rst)g(prompt.)1661
-2560 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
-391 2560 V 21 w(pre)p 494 2560 V 20 w(input)p 647 2560
-V 21 w(ho)r(ok)195 2615 y Fu(If)d(non-zero,)h(this)f(is)h(the)f
-(address)g(of)g(a)g(function)h(to)e(call)i(after)f(the)g(\014rst)f
-(prompt)h(has)195 2670 y(b)q(een)f(prin)o(ted)g(and)g(just)f(b)q(efore)
-g Ft(readline)f Fu(starts)g(reading)i(input)g(c)o(haracters.)p
-eop
+22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)h(Library)338
+149 y Ft(line_read)23 b(=)h(\(char)f(*\)NULL;)290 201
+y(})243 305 y(/*)g(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)243
+357 y(line_read)f(=)i(readline)f(\(""\);)243 461 y(/*)g(If)h(the)f
+(line)h(has)f(any)h(text)f(in)g(it,)314 513 y(save)h(it)f(on)h(the)f
+(history.)g(*/)243 565 y(if)g(\(line_read)g(&&)g(*line_read\))290
+616 y(add_history)g(\(line_read\);)243 720 y(return)g(\(line_read\);)
+195 772 y(})137 848 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h
+(the)g(default)h(b)q(eha)o(viour)g(of)1169 846 y Fn(h)p
+1181 820 74 2 v 1181 848 a Fm(T)m(AB)p 1181 856 V 1253
+846 a Fn(i)1280 848 y Fu(completion:)19 b(completion)13
+b(on)f(\014le)75 903 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t)
+f(Readline)j(to)d(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o
+(hange)h(the)f(binding)75 958 y(of)g(the)205 956 y Fn(h)p
+217 930 V 217 958 a Fm(T)m(AB)p 217 965 V 289 956 a Fn(i)319
+958 y Fu(k)o(ey)g(with)h Ft(rl_bind_key\(\))p Fu(.)195
+1031 y Ft(int)23 b(rl_bind_key)g(\(int)g Fk(k)o(ey)p
+Ft(,)h(rl_command_func_t)d(*)p Fk(function)p Ft(\);)137
+1107 y(rl_bind_key\(\))15 b Fu(tak)o(es)h(t)o(w)o(o)g(argumen)o(ts:)22
+b Fk(k)o(ey)e Fu(is)e(the)e(c)o(haracter)g(that)g(y)o(ou)h(w)o(an)o(t)f
+(to)g(bind,)i(and)75 1161 y Fk(function)h Fu(is)f(the)g(address)g(of)g
+(the)g(function)g(to)g(call)h(when)f Fk(k)o(ey)k Fu(is)c(pressed.)29
+b(Binding)1628 1159 y Fn(h)p 1641 1133 V 1641 1161 a
+Fm(T)m(AB)p 1641 1169 V 1712 1159 a Fn(i)1745 1161 y
+Fu(to)17 b Ft(rl_)75 1216 y(insert\(\))f Fu(mak)o(es)422
+1214 y Fn(h)p 434 1188 V 434 1216 a Fm(T)m(AB)p 434 1224
+V 506 1214 a Fn(i)539 1216 y Fu(insert)i(itself.)28 b
+Ft(rl_bind_key\(\))15 b Fu(returns)j(non-zero)g(if)g
+Fk(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1271 y(ASCI)q(I)f(c)o
+(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137
+1347 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1345
+y Fn(h)p 716 1319 V 716 1347 a Fm(T)m(AB)p 716 1354 V
+787 1345 a Fn(i)817 1347 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h
+(su\016ces:)195 1420 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137
+1496 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e
+(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a)
+g(func-)75 1551 y(tion)k(called)h Ft(initialize_readline\(\))13
+b Fu(whic)o(h)k(p)q(erforms)f(this)h(and)g(other)f(desired)h
+(initializations,)75 1605 y(suc)o(h)f(as)e(installing)k(custom)c
+(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h
+(41\).)75 1756 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137
+1861 y Fu(Readline)14 b(pro)o(vides)f(man)o(y)e(functions)i(for)f
+(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q
+(ossi-)75 1915 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h
+(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h
+(functions)g(and)75 1970 y(v)m(ariables)g(de\014ned)h(within)f(the)f
+(Readline)i(library)e(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h
+(add)g(customized)75 2025 y(functionalit)o(y)j(to)f(Readline.)137
+2101 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g
+(Readline's)h(b)q(eha)o(vior,)h(or)d(using)i(an)o(y)f(func-)75
+2156 y(tionalit)o(y)23 b(Readline)h(pro)o(vides)g(in)f(other)g(co)q
+(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75
+2211 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e
+(uses)h(Readline's)g(features.)24 b(Since)19 b(some)d(of)g(the)h
+(de\014-)75 2265 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g
+Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft(<stdio.h>)f
+Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2320 y Ft(readline.h)p
+Fu(.)137 2396 y Ft(readline.h)14 b Fu(de\014nes)i(a)f(C)h(prepro)q
+(cessor)f(v)m(ariable)i(that)d(should)i(b)q(e)g(treated)f(as)g(an)g(in)
+o(teger,)g Ft(RL_)75 2451 y(READLINE_VERSION)p Fu(,)9
+b(whic)o(h)j(ma)o(y)f(b)q(e)g(used)h(to)e(conditionally)k(compile)e
+(application)h(co)q(de)f(dep)q(ending)75 2506 y(on)17
+b(the)h(installed)h(Readline)g(v)o(ersion.)27 b(The)18
+b(v)m(alue)h(is)f(a)f(hexadecimal)i(enco)q(ding)g(of)e(the)h(ma)s(jor)e
+(and)75 2560 y(minor)h(v)o(ersion)h(n)o(um)o(b)q(ers)f(of)g(the)g
+(library)l(,)h(of)f(the)g(form)f(0x)p Fk(MMmm)p Fu(.)25
+b Fk(MM)c Fu(is)c(the)h(t)o(w)o(o-digit)e(ma)s(jor)75
+2615 y(v)o(ersion)f(n)o(um)o(b)q(er;)f Fk(mm)h Fu(is)g(the)f(t)o(w)o
+(o-digit)g(minor)h(v)o(ersion)g(n)o(um)o(b)q(er.)20 b(F)l(or)14
+b(Readline)h(4.2,)f(for)f(example,)75 2670 y(the)i(v)m(alue)i(of)d
+Ft(RL_READLINE_VERSION)f Fu(w)o(ould)j(b)q(e)f Ft(0x0402)p
+Fu(.)p eop
 %%Page: 23 25
 23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(23)1661 183 y(V)l(ariable)-1749 b Fi(Function)20
-b(*)g Fh(rl)p 391 183 18 3 v 21 w(ev)n(en)n(t)p 544 183
-V 22 w(ho)r(ok)195 238 y Fu(If)d(non-zero,)f(this)h(is)f(the)h(address)
-f(of)g(a)g(function)h(to)f(call)h(p)q(erio)q(dically)j(when)c(readline)
-195 293 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661
-409 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
-391 409 V 21 w(getc)p 514 409 V 21 w(function)195 463
-y Fu(If)13 b(non-zero,)g Ft(readline)e Fu(will)k(call)e(indirectly)i
-(through)d(this)h(p)q(oin)o(ter)g(to)f(get)g(a)h(c)o(haracter)195
-518 y(from)i(the)i(input)g(stream.)22 b(By)16 b(default,)h(it)f(is)h
-(set)f(to)f Ft(rl_getc)p Fu(,)g(the)h(default)h Ft(readline)195
-573 y Fu(c)o(haracter)d(input)j(function)f(\(see)f(Section)h(2.4.8)e
-([Utilit)o(y)h(F)l(unctions],)h(page)f(28\).)1661 689
-y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417
-689 V 21 w(redispla)n(y)p 661 689 V 22 w(function)195
-744 y Fu(If)g(non-zero,)h Ft(readline)d Fu(will)j(call)g(indirectly)h
-(through)d(this)h(p)q(oin)o(ter)h(to)e(up)q(date)h(the)195
-798 y(displa)o(y)h(with)f(the)g(curren)o(t)g(con)o(ten)o(ts)g(of)f(the)
-h(editing)i(bu\013er.)34 b(By)20 b(default,)h(it)g(is)f(set)195
-853 y(to)f Ft(rl_redisplay)p Fu(,)f(the)i(default)g Ft(readline)e
-Fu(redispla)o(y)j(function)f(\(see)f(Section)i(2.4.6)195
-908 y([Redispla)o(y],)16 b(page)f(27\).)1661 1024 y(V)l(ariable)-1749
-b Fi(Keymap)20 b Fh(rl)p 293 1024 V 21 w(executing)p
-551 1024 V 22 w(k)n(eymap)195 1079 y Fu(This)g(v)m(ariable)g(is)f(set)g
-(to)f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g
-(24\))f(in)195 1133 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g
-(readline)h(function)f(w)o(as)f(found.)1661 1249 y(V)l(ariable)-1749
-b Fi(Keymap)20 b Fh(rl)p 293 1249 V 21 w(binding)p 501
-1249 V 22 w(k)n(eymap)195 1304 y Fu(This)g(v)m(ariable)g(is)f(set)g(to)
-f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g(24\))
-f(in)195 1359 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q
-(ccurred.)75 1517 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6
-b(unctions)75 1682 y Fl(2.4.1)30 b(Naming)20 b(a)g(F)-5
-b(unction)137 1790 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e
-(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)36
-b(This)20 b(is)75 1845 y(done)f(b)o(y)f(represen)o(ting)h(the)g
-(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19
-b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 1900 y(descriptiv)o(e)e
-(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14
-b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195
-1976 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 2055
-y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 2053
-y Fo(h)p 671 2027 209 2 v 671 2055 a Fn(Meta-Rub)q(out)p
-671 2062 V 878 2053 a Fo(i)912 2055 y Fu(to)f(the)h(function)g
-Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75
-2110 y(kill-word)p Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f
-(should)i(bind)f(the)g(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o
-(e)75 2164 y(names)e(as)g(w)o(ell.)21 b(Readline)c(pro)o(vides)f(a)f
-(function)h(for)e(doing)i(that:)1650 2280 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 2280 18 3 v 21 w(add)p 328
-2280 V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g
-(*function,)g(int)h(key)p Fg(\))195 2335 y Fu(Add)i Fm(name)h
-Fu(to)e(the)g(list)h(of)e(named)i(functions.)23 b(Mak)o(e)15
-b Fm(function)i Fu(b)q(e)g(the)f(function)h(that)195
-2390 y(gets)e(called.)21 b(If)16 b Fm(k)o(ey)j Fu(is)c(not)g(-1,)g
-(then)g(bind)i(it)e(to)g Fm(function)h Fu(using)g Ft(rl_bind_key)d
-(\(\))p Fu(.)137 2506 y(Using)j(this)f(function)h(alone)g(is)f
-(su\016cien)o(t)h(for)f(most)f(applications.)21 b(It)15
-b(is)h(the)f(recommended)h(w)o(a)o(y)75 2560 y(to)d(add)h(a)f(few)g
-(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)j(has)d
-(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75
-2615 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e
-(Readline,)j(y)o(ou)e(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75
-2670 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)p eop
+(Readline)843 b(23)75 149 y Fj(2.2.1)30 b(Readline)20
+b(T)n(yp)r(edefs)137 251 y Fu(F)l(or)15 b(readabilt)o(y)l(,)g(w)o(e)g
+(declare)i(a)d(n)o(um)o(b)q(er)i(of)f(new)g(ob)s(ject)g(t)o(yp)q(es,)g
+(all)h(p)q(oin)o(ters)f(to)g(functions.)137 324 y(The)j(reason)g(for)f
+(declaring)i(these)f(new)g(t)o(yp)q(es)g(is)h(to)e(mak)o(e)g(it)h
+(easier)h(to)e(write)h(co)q(de)g(describing)75 379 y(p)q(oin)o(ters)e
+(to)e(C)h(functions)h(with)g(appropriately)f(protot)o(yp)q(ed)g
+(argumen)o(ts)g(and)g(return)g(v)m(alues.)137 452 y(F)l(or)j(instance,)
+i(sa)o(y)e(w)o(e)g(w)o(an)o(t)f(to)h(declare)h(a)f(v)m(ariable)i
+Fk(func)i Fu(as)c(a)g(p)q(oin)o(ter)h(to)f(a)g(function)h(whic)o(h)75
+507 y(tak)o(es)12 b(t)o(w)o(o)g Ft(int)g Fu(argumen)o(ts)g(and)h
+(returns)g(an)g Ft(int)f Fu(\(this)h(is)g(the)g(t)o(yp)q(e)g(of)g(all)g
+(of)g(the)g(Readline)h(bindable)75 561 y(functions\).)20
+b(Instead)c(of)f(the)g(classic)h(C)f(declaration)137
+634 y Ft(int)g(\(*func\)\(\);)75 707 y Fu(or)g(the)g(ANSI-C)h(st)o(yle)
+f(declaration)137 780 y Ft(int)g(\(*func\)\(int,)f(int\);)75
+853 y Fu(w)o(e)h(ma)o(y)f(write)137 926 y Ft(rl_command_func_t)f
+(*func;)137 999 y Fu(The)j(full)g(list)g(of)f(function)h(p)q(oin)o(ter)
+g(t)o(yp)q(es)f(a)o(v)m(ailable)i(is)75 1087 y Ft(typedef)d(int)h
+(rl_command_func_t)e(\(int,)h(int\);)75 1157 y(typedef)g(char)h
+(*rl_compentry_func_t)d(\(const)j(char)f(*,)h(int\);)75
+1227 y(typedef)f(char)h(**rl_completion_func_t)d(\(const)i(char)h(*,)g
+(int,)f(int\);)75 1297 y(typedef)g(char)h(*rl_quote_func_t)e(\(char)h
+(*,)h(int,)g(char)f(*\);)75 1367 y(typedef)g(char)h(*rl_dequote_func_t)
+d(\(char)j(*,)g(int\);)75 1437 y(typedef)f(int)h(rl_compignore_func_t)d
+(\(char)j(**\);)75 1507 y(typedef)f(void)h(rl_compdisp_func_t)d(\(char)
+j(**,)g(int,)f(int\);)75 1577 y(typedef)g(int)h(rl_hook_func_t)e
+(\(void\);)75 1647 y(typedef)h(int)h(rl_getc_func_t)e(\(FILE)i(*\);)75
+1717 y(typedef)f(int)h(rl_linebuf_func_t)e(\(char)h(*,)h(int\);)75
+1787 y(typedef)f(int)h(rl_intfunc_t)e(\(int\);)75 1857
+y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)75 1927 y(typedef)h(int)h
+(rl_icpfunc_t)e(\(char)i(*\);)75 1997 y(typedef)f(int)h(rl_icppfunc_t)e
+(\(char)i(**\);)75 2067 y(typedef)f(void)h(rl_voidfunc_t)e(\(void\);)75
+2137 y(typedef)h(void)h(rl_vintfunc_t)e(\(int\);)75 2208
+y(typedef)h(void)h(rl_vcpfunc_t)e(\(char)i(*\);)75 2278
+y(typedef)f(void)h(rl_vcppfunc_t)e(\(char)i(**\);)75
+2386 y Fj(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5
+b(unction)137 2488 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g
+(for)e(Readline,)i(y)o(ou)f(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o
+(v)o(en)o(tions)75 2542 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h
+(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d
+(describ)q(e)k(the)d(curren)o(t)75 2597 y(state)c(of)h(the)g(line)i
+(read)e(so)g(far.)137 2670 y(The)h(calling)h(sequence)f(for)f(a)f
+(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)p eop
 %%Page: 24 26
-24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 278
-y Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fm(k)o(eymap)p
-Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o
-(een)g(the)f(k)o(eys)75 333 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
-(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o
-(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 388 y(existing)i(k)o(eymaps,)f
-(and)g(tell)h(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1650
-476 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
-476 18 3 v 21 w(mak)n(e)p 445 476 V 20 w(bare)p 575 476
-V 20 w(k)n(eymap)j Fg(\(\))195 531 y Fu(Returns)d(a)f(new,)i(empt)o(y)e
-(k)o(eymap.)32 b(The)20 b(space)g(for)e(the)i(k)o(eymap)f(is)h(allo)q
-(cated)h(with)195 586 y Ft(malloc)14 b(\(\))p Fu(;)h(y)o(ou)g(should)h
-Ft(free)e(\(\))h Fu(it)h(when)g(y)o(ou)e(are)h(done.)1650
-674 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
-674 V 21 w(cop)n(y)p 428 674 V 21 w(k)n(eymap)j Fg(\()p
-Ft(Keymap)14 b(map)p Fg(\))195 729 y Fu(Return)i(a)f(new)g(k)o(eymap)g
-(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fm(map)p Fu(.)1650
-818 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
-818 V 21 w(mak)n(e)p 445 818 V 20 w(k)n(eymap)j Fg(\(\))195
-872 y Fu(Return)15 b(a)f(new)h(k)o(eymap)f(with)h(the)g(prin)o(ting)h
-(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1443 872 14 2 v
-17 w(insert,)g(the)h(lo)o(w-)195 927 y(ercase)21 b(Meta)f(c)o
-(haracters)g(b)q(ound)i(to)f(run)g(their)g(equiv)m(alen)o(ts,)j(and)d
-(the)g(Meta)f(digits)195 982 y(b)q(ound)c(to)f(pro)q(duce)h(n)o(umeric)
-g(argumen)o(ts.)1650 1070 y(F)l(unction)-1749 b Fi(void)20
-b Fh(rl)p 241 1070 18 3 v 21 w(discard)p 441 1070 V 21
-w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195
-1125 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f
-Fm(k)o(eymap)p Fu(.)137 1214 y(Readline)25 b(has)e(sev)o(eral)g(in)o
-(ternal)g(k)o(eymaps.)42 b(These)23 b(functions)g(allo)o(w)g(y)o(ou)f
-(to)g(c)o(hange)h(whic)o(h)75 1268 y(k)o(eymap)15 b(is)h(activ)o(e.)
-1650 1357 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p
-293 1357 V 21 w(get)p 391 1357 V 21 w(k)n(eymap)i Fg(\(\))195
-1412 y Fu(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650
-1500 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1500
-V 21 w(set)p 333 1500 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14
-b(keymap)p Fg(\))195 1555 y Fu(Mak)o(es)g Fm(k)o(eymap)j
-Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650 1643
-y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 1643
-V 21 w(get)p 391 1643 V 21 w(k)n(eymap)p 605 1643 V 20
-w(b)n(y)p 685 1643 V 21 w(name)i Fg(\()p Ft(char)14 b(*name)p
-Fg(\))195 1698 y Fu(Return)h(the)f(k)o(eymap)g(matc)o(hing)h
-Fm(name)p Fu(.)k Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h
-(supplied)i(in)e(a)195 1753 y Ft(set)g(keymap)f Fu(inputrc)i(line)h
-(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)1650
-1841 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(rl)p 286
-1841 V 21 w(get)p 384 1841 V 21 w(k)n(eymap)p 598 1841
-V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195
-1896 y Fu(Return)h(the)f(name)h(matc)o(hing)f Fm(k)o(eymap)p
-Fu(.)19 b Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h
-(supplied)i(in)e(a)195 1951 y Ft(set)g(keymap)f Fu(inputrc)i(line)h
-(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)75
-2059 y Fl(2.4.3)30 b(Binding)20 b(Keys)137 2154 y Fu(Y)l(ou)j(asso)q
-(ciate)f(k)o(eys)g(with)h(functions)g(through)f(the)g(k)o(eymap.)41
-b(Readline)25 b(has)d(sev)o(eral)h(in)o(ter-)75 2209
-y(nal)h(k)o(eymaps:)35 b Ft(emacs_standard_keymap)p Fu(,)22
-b Ft(emacs_meta_keymap)p Fu(,)g Ft(emacs_ctlx_keymap)p
-Fu(,)g Ft(vi_)75 2264 y(movement_keymap)p Fu(,)e(and)i
-Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18
-b Fu(is)k(the)f(default,)75 2319 y(and)15 b(the)h(examples)g(in)g(this)
-f(man)o(ual)h(assume)f(that.)137 2385 y(Since)k Ft(readline)c
-Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f
-(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 2440
-y(alw)o(a)o(ys)f(the)g(danger)g(that)g(a)g(custom)g(binding)i
-(installed)g(b)q(efore)f(the)f(\014rst)g(call)h(to)f
-Ft(readline)f Fu(will)j(b)q(e)75 2494 y(o)o(v)o(erridden.)28
-b(An)17 b(alternate)h(mec)o(hanism)g(is)g(to)f(install)i(custom)e(k)o
-(ey)h(bindings)h(in)f(an)g(initialization)75 2549 y(function)h
-(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e
-(Section)h(2.3)f([Readline)j(V)l(ariables],)75 2604 y(page)15
-b(21\).)137 2670 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)p
+24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Ft(int)23 b(foo)h(\(int)f(count,)g(int)h(key\))75
+221 y Fu(where)18 b Fk(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o
+(t)e(\(or)h(1)f(if)i(defaulted\))f(and)g Fk(k)o(ey)k
+Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v)o(ok)o(ed)75 276
+y(this)f(function.)137 348 y(It)c(is)g(completely)h(up)f(to)f(the)g
+(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g(with)g(the)g(n)o
+(umeric)g(argumen)o(t.)75 403 y(Some)20 b(functions)h(use)f(it)g(as)g
+(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g(a)f(\015ag,)i(and)f(others)g
+(to)f(c)o(ho)q(ose)h(alternate)75 457 y(b)q(eha)o(vior)i(\(refreshing)g
+(the)g(curren)o(t)f(line)j(as)d(opp)q(osed)h(to)f(refreshing)i(the)e
+(screen,)j(for)d(example\).)75 512 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)
+h(it.)24 b(In)18 b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o
+(umeric)h(argumen)o(t)d(as)i(a)f(rep)q(eat)75 567 y(coun)o(t,)e(it)g
+(should)h(b)q(e)f(able)h(to)e(do)h(something)h(useful)g(with)f(b)q(oth)
+g(negativ)o(e)g(and)g(p)q(ositiv)o(e)h(argumen)o(ts.)75
+622 y(A)o(t)g(the)g(v)o(ery)g(least,)g(it)g(should)h(b)q(e)g(a)o(w)o
+(are)e(that)h(it)g(can)g(b)q(e)h(passed)g(a)f(negativ)o(e)g(argumen)o
+(t.)137 693 y(A)f(command)g(function)h(should)g(return)e(0)h(if)g(its)g
+(action)h(completes)f(successfully)l(,)i(and)e(a)g(non-zero)75
+748 y(v)m(alue)i(if)g(some)f(error)f(o)q(ccurs.)75 888
+y Fs(2.3)33 b(Readline)23 b(V)-6 b(ariables)137 989 y
+Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h
+(writers.)1773 1120 y(V)l(ariable)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 1120 18 3 v 21 w(line)p 395 1120 V
+23 w(bu\013er)195 1174 y Fu(This)d(is)g(the)g(line)h(gathered)f(so)f
+(far.)20 b(Y)l(ou)c(are)f(w)o(elcome)h(to)f(mo)q(dify)h(the)g(con)o
+(ten)o(ts)f(of)g(the)h(line,)195 1229 y(but)i(see)g(Section)h(2.4.5)d
+([Allo)o(wing)i(Undoing],)h(page)e(32.)27 b(The)18 b(function)h
+Ft(rl_extend_line_)195 1284 y(buffer)14 b Fu(is)i(a)o(v)m(ailable)h(to)
+d(increase)j(the)e(memory)f(allo)q(cated)j(to)d Ft(rl_line_buffer)p
+Fu(.)1773 1414 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
+215 1414 V 21 w(p)r(oin)n(t)195 1469 y Fu(The)15 b(o\013set)g(of)f(the)
+i(curren)o(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d
+Fu(\(the)i Fl(p)n(oint)t Fu(\).)1773 1600 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1600 V 21 w(end)195 1655 y
+Fu(The)14 b(n)o(um)o(b)q(er)g(of)g(c)o(haracters)f(presen)o(t)h(in)h
+Ft(rl_line_buffer)p Fu(.)i(When)e Ft(rl_point)e Fu(is)h(at)f(the)h(end)
+195 1709 y(of)h(the)g(line,)i Ft(rl_point)d Fu(and)h
+Ft(rl_end)f Fu(are)h(equal.)1773 1840 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1840 V 21 w(mark)195 1895 y
+Fu(The)f Fk(mark)h Fu(\(sa)o(v)o(ed)e(p)q(osition\))h(in)g(the)g
+(curren)o(t)f(line.)31 b(If)19 b(set,)g(the)f(mark)g(and)h(p)q(oin)o(t)
+g(de\014ne)g(a)195 1950 y Fl(r)n(e)n(gion)p Fu(.)1773
+2080 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2080
+V 21 w(done)195 2135 y Fu(Setting)11 b(this)g(to)g(a)f(non-zero)h(v)m
+(alue)h(causes)f(Readline)h(to)f(return)f(the)h(curren)o(t)g(line)h
+(immediately)l(.)1773 2265 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 2265 V 21 w(n)n(um)p 347 2265 V 19 w(c)n(hars)p
+496 2265 V 20 w(to)p 567 2265 V 21 w(read)195 2320 y
+Fu(Setting)d(this)g(to)f(a)g(p)q(ositiv)o(e)h(v)m(alue)h(b)q(efore)f
+(calling)h Ft(readline\(\))d Fu(causes)h(Readline)i(to)e(return)195
+2375 y(after)h(accepting)i(that)e(man)o(y)g(c)o(haracters,)h(rather)f
+(than)h(reading)g(up)g(to)f(a)h(c)o(haracter)f(b)q(ound)195
+2430 y(to)e Ft(accept-line)p Fu(.)1773 2560 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 2560 V 21 w(p)r(ending)p 436
+2560 V 20 w(input)195 2615 y Fu(Setting)13 b(this)g(to)f(a)g(v)m(alue)i
+(mak)o(es)e(it)h(the)f(next)h(k)o(eystrok)o(e)f(read.)19
+b(This)13 b(is)g(a)f(w)o(a)o(y)g(to)f(stu\013)h(a)h(single)195
+2670 y(c)o(haracter)h(in)o(to)i(the)f(input)h(stream.)p
 eop
 %%Page: 25 27
 25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(25)1650 183 y(F)l(unction)-1749 b Fi(int)20
-b Fh(rl)p 215 183 18 3 v 21 w(bind)p 347 183 V 21 w(k)n(ey)k
-Fg(\()p Ft(int)14 b(key,)h(Function)f(*function)p Fg(\))195
-238 y Fu(Binds)i Fm(k)o(ey)j Fu(to)14 b Fm(function)h
-Fu(in)h(the)f(curren)o(tly)g(activ)o(e)g(k)o(eymap.)20
-b(Returns)15 b(non-zero)g(in)h(the)195 293 y(case)f(of)g(an)g(in)o(v)m
-(alid)j Fm(k)o(ey)p Fu(.)1650 374 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 374 V 21 w(bind)p 347 374 V
-21 w(k)n(ey)p 452 374 V 21 w(in)p 520 374 V 22 w(map)h
-Fg(\()p Ft(int)14 b(key,)h(Function)f(*function,)283
-429 y(Keymap)g(map)p Fg(\))195 484 y Fu(Bind)i Fm(k)o(ey)j
-Fu(to)c Fm(function)h Fu(in)g Fm(map)p Fu(.)k(Returns)15
-b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j
-Fm(k)o(ey)p Fu(.)1650 565 y(F)l(unction)-1749 b Fi(int)20
-b Fh(rl)p 215 565 V 21 w(un)n(bind)p 409 565 V 21 w(k)n(ey)k
-Fg(\()p Ft(int)14 b(key)p Fg(\))195 620 y Fu(Bind)g Fm(k)o(ey)j
-Fu(to)c(the)g(n)o(ull)i(function)f(in)g(the)f(curren)o(tly)h(activ)o(e)
-f(k)o(eymap.)19 b(Returns)14 b(non-zero)195 675 y(in)i(case)f(of)g
-(error.)1650 756 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
-215 756 V 21 w(un)n(bind)p 409 756 V 21 w(k)n(ey)p 514
-756 V 21 w(in)p 582 756 V 22 w(map)h Fg(\()p Ft(int)14
-b(key,)h(Keymap)f(map)p Fg(\))195 811 y Fu(Bind)i Fm(k)o(ey)j
-Fu(to)c(the)g(n)o(ull)i(function)f(in)g Fm(map)p Fu(.)k(Returns)15
-b(non-zero)h(in)g(case)f(of)g(error.)1650 892 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 892 V 21 w(un)n(bind)p 409
-892 V 21 w(function)p 635 892 V 21 w(in)p 703 892 V 21
-w(map)h Fg(\()p Ft(Function)14 b(*function,)283 947 y(Keymap)g(map)p
-Fg(\))195 1002 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i
-Fm(function)g Fu(in)g Fm(map)p Fu(.)1650 1083 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 1083 V 21 w(un)n(bind)p 409
-1083 V 21 w(command)p 674 1083 V 17 w(in)p 738 1083 V
-22 w(map)h Fg(\()p Ft(char)14 b(*command,)g(Keymap)283
-1138 y(map)p Fg(\))195 1193 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f
-(are)h(b)q(ound)h(to)f Fm(command)i Fu(in)f Fm(map)p
-Fu(.)1650 1274 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
-215 1274 V 21 w(generic)p 413 1274 V 21 w(bind)j Fg(\()p
-Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)283
-1329 y(Keymap)f(map)p Fg(\))195 1384 y Fu(Bind)g(the)f(k)o(ey)g
-(sequence)i(represen)o(ted)e(b)o(y)g(the)g(string)g Fm(k)o(eyseq)h
-Fu(to)f(the)g(arbitrary)f(p)q(oin)o(ter)195 1438 y Fm(data)p
-Fu(.)19 b Fm(t)o(yp)q(e)e Fu(sa)o(ys)c(what)h(kind)i(of)e(data)f(is)i
-(p)q(oin)o(ted)g(to)f(b)o(y)g Fm(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f
-(function)195 1493 y(\()p Ft(ISFUNC)p Fu(\),)f(a)h(macro)g(\()p
-Ft(ISMACR)p Fu(\),)f(or)i(a)f(k)o(eymap)h(\()p Ft(ISKMAP)p
-Fu(\).)j(This)d(mak)o(es)f(new)h(k)o(eymaps)195 1548
-y(as)g(necessary)l(.)20 b(The)c(initial)h(k)o(eymap)e(in)h(whic)o(h)g
-(to)e(do)i(bindings)h(is)e Fm(map)p Fu(.)1650 1629 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 1629 V 21 w(parse)p 369 1629
-V 19 w(and)p 480 1629 V 21 w(bind)j Fg(\()p Ft(char)14
-b(*line)p Fg(\))195 1684 y Fu(P)o(arse)k Fm(line)23 b
-Fu(as)c(if)g(it)g(had)g(b)q(een)h(read)e(from)h(the)f
-Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)g(an)o(y)f(k)o(ey)195
-1739 y(bindings)i(and)e(v)m(ariable)i(assignmen)o(ts)d(found)i(\(see)f
-(Section)h(1.3)e([Readline)j(Init)f(File],)195 1794 y(page)c(4\).)1650
-1875 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1875
-V 21 w(read)p 346 1875 V 20 w(init)p 450 1875 V 22 w(\014le)k
-Fg(\()p Ft(char)14 b(*filename)p Fg(\))195 1930 y Fu(Read)25
-b(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)e(from)g
-Fm(\014lename)29 b Fu(\(see)24 b(Section)i(1.3)195 1985
-y([Readline)17 b(Init)f(File],)g(page)f(4\).)75 2086
-y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20
-b(Names)h(and)f(Bindings)137 2179 y Fu(These)11 b(functions)h(allo)o(w)
-e(y)o(ou)h(to)f(\014nd)h(out)f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f
-(named)h(functions)h(and)e(the)h(functions)75 2233 y(in)o(v)o(ok)o(ed)k
-(b)o(y)h(a)e(particular)i(k)o(ey)f(sequence.)1650 2315
-y(F)l(unction)-1749 b Fi(Function)20 b(*)g Fh(rl)p 391
-2315 V 21 w(named)p 579 2315 V 19 w(function)j Fg(\()p
-Ft(char)14 b(*name)p Fg(\))195 2369 y Fu(Return)i(the)f(function)h
-(with)g(name)f Fm(name)p Fu(.)1650 2451 y(F)l(unction)-1749
-b Fi(Function)20 b(*)g Fh(rl)p 391 2451 V 21 w(function)p
-617 2451 V 21 w(of)p 685 2451 V 19 w(k)n(eyseq)k Fg(\()p
-Ft(char)15 b(*keyseq,)f(Keymap)283 2506 y(map,)g(int)h(*type)p
-Fg(\))195 2560 y Fu(Return)j(the)f(function)g(in)o(v)o(ok)o(ed)g(b)o(y)
-g Fm(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fm(map)p Fu(.)25
-b(If)17 b Fm(map)h Fu(is)f(NULL,)h(the)195 2615 y(curren)o(t)13
-b(k)o(eymap)g(is)h(used.)20 b(If)14 b Fm(t)o(yp)q(e)i
-Fu(is)e(not)f(NULL,)h(the)f(t)o(yp)q(e)g(of)g(the)h(ob)s(ject)f(is)h
-(returned)195 2670 y(in)i(it)f(\(one)g(of)g Ft(ISFUNC)p
-Fu(,)f Ft(ISKMAP)p Fu(,)g(or)h Ft(ISMACR)p Fu(\).)p eop
+(Readline)843 b(25)1773 149 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 149 18 3 v 21 w(dispatc)n(hing)195 204
+y Fu(Set)12 b(to)g(a)f(non-zero)i(v)m(alue)g(if)g(a)f(function)h(is)f
+(b)q(eing)i(called)f(from)f(a)f(k)o(ey)h(binding;)j(zero)d(otherwise.)
+195 259 y(Application)20 b(functions)e(can)g(test)g(this)g(to)f(disco)o
+(v)o(er)h(whether)g(they)g(w)o(ere)g(called)h(directly)g(or)195
+314 y(b)o(y)c(Readline's)h(dispatc)o(hing)h(mec)o(hanism.)1773
+423 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 423
+V 21 w(erase)p 363 423 V 20 w(empt)n(y)p 540 423 V 20
+w(line)195 478 y Fu(Setting)j(this)h(to)e(a)h(non-zero)g(v)m(alue)h
+(causes)f(Readline)i(to)d(completely)i(erase)f(the)g(curren)o(t)195
+533 y(line,)g(including)h(an)o(y)c(prompt,)h(an)o(y)g(time)g(a)f
+(newline)j(is)e(t)o(yp)q(ed)g(as)f(the)h(only)g(c)o(haracter)f(on)195
+588 y(an)e(otherwise-empt)o(y)g(line.)31 b(The)18 b(cursor)g(is)h(mo)o
+(v)o(ed)e(to)h(the)g(b)q(eginning)i(of)e(the)g(newly-blank)195
+643 y(line.)1773 752 y(V)l(ariable)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 752 V 21 w(prompt)195 807 y Fu(The)13
+b(prompt)g(Readline)h(uses.)20 b(This)13 b(is)h(set)f(from)f(the)h
+(argumen)o(t)g(to)f Ft(readline\(\))p Fu(,)g(and)h(should)195
+862 y(not)g(b)q(e)h(assigned)g(to)f(directly)l(.)21 b(The)14
+b Ft(rl_set_prompt\(\))d Fu(function)j(\(see)g(Section)g(2.4.6)e
+([Redis-)195 917 y(pla)o(y],)j(page)g(33\))f(ma)o(y)h(b)q(e)g(used)h
+(to)f(mo)q(dify)h(the)f(prompt)g(string)g(after)f(calling)j
+Ft(readline\(\))p Fu(.)1773 1026 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1026 V 21 w(already)p 419 1026
+V 21 w(prompted)195 1081 y Fu(If)e(an)g(application)i(wishes)f(to)f
+(displa)o(y)h(the)f(prompt)g(itself,)h(rather)f(than)g(ha)o(v)o(e)g
+(Readline)h(do)195 1136 y(it)e(the)f(\014rst)g(time)h
+Ft(readline\(\))e Fu(is)i(called,)h(it)e(should)i(set)e(this)h(v)m
+(ariable)g(to)f(a)g(non-zero)h(v)m(alue)195 1191 y(after)h(displa)o
+(ying)j(the)e(prompt.)31 b(The)19 b(prompt)g(m)o(ust)f(also)h(b)q(e)h
+(passed)f(as)f(the)h(argumen)o(t)g(to)195 1245 y Ft(readline\(\))c
+Fu(so)h(the)h(redispla)o(y)g(functions)h(can)e(up)q(date)h(the)g
+(displa)o(y)h(prop)q(erly)l(.)24 b(The)17 b(calling)195
+1300 y(application)g(is)f(resp)q(onsible)h(for)d(managing)h(the)h(v)m
+(alue;)g(Readline)g(nev)o(er)g(sets)e(it.)1773 1410 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 1410 V 21 w(library)p
+625 1410 V 21 w(v)n(ersion)195 1465 y Fu(The)c(v)o(ersion)h(n)o(um)o(b)
+q(er)f(of)g(this)h(revision)g(of)f(the)g(library)l(.)1773
+1574 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1574
+V 21 w(readline)p 434 1574 V 22 w(v)n(ersion)195 1629
+y Fu(An)d(in)o(teger)h(enco)q(ding)g(the)f(curren)o(t)g(v)o(ersion)g
+(of)g(the)g(library)l(.)27 b(The)17 b(enco)q(ding)h(is)g(of)f(the)g
+(form)195 1684 y(0x)p Fk(MMmm)p Fu(,)g(where)i Fk(MM)j
+Fu(is)d(the)f(t)o(w)o(o-digit)g(ma)s(jor)f(v)o(ersion)i(n)o(um)o(b)q
+(er,)g(and)f Fk(mm)g Fu(is)h(the)f(t)o(w)o(o-)195 1738
+y(digit)i(minor)e(v)o(ersion)h(n)o(um)o(b)q(er.)31 b(F)l(or)18
+b(example,)i(for)e(Readline-4.2,)i Ft(rl_readline_version)195
+1793 y Fu(w)o(ould)c(ha)o(v)o(e)e(the)i(v)m(alue)g(0x0402.)1773
+1903 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1903
+V 21 w(gn)n(u)p 327 1903 V 20 w(readline)p 545 1903 V
+22 w(p)195 1958 y Fu(Alw)o(a)o(ys)15 b(set)g(to)f(1,)h(denoting)h(that)
+e(this)i(is)g Fp(gnu)f Fu(readline)h(rather)f(than)g(some)g(em)o
+(ulation.)1773 2067 y(V)l(ariable)-1861 b Fi(const)20
+b(char)g(*)f Fh(rl)p 436 2067 V 21 w(terminal)p 668 2067
+V 21 w(name)195 2122 y Fu(The)14 b(terminal)h(t)o(yp)q(e,)f(used)h(for)
+e(initialization.)23 b(If)14 b(not)f(set)h(b)o(y)g(the)g(application,)i
+(Readline)f(sets)195 2177 y(this)h(to)e(the)h(v)m(alue)i(of)e(the)g
+Ft(TERM)g Fu(en)o(vironmen)o(t)g(v)m(ariable)i(the)e(\014rst)g(time)g
+(it)h(is)f(called.)1773 2286 y(V)l(ariable)-1861 b Fi(const)20
+b(char)g(*)f Fh(rl)p 436 2286 V 21 w(readline)p 655 2286
+V 22 w(name)195 2341 y Fu(This)d(v)m(ariable)h(is)f(set)g(to)f(a)g
+(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.)23
+b(The)16 b(v)m(alue)195 2396 y(allo)o(ws)e(conditional)i(parsing)e(of)g
+(the)g(inputrc)h(\014le)g(\(see)f(Section)h(1.3.2)d([Conditional)j
+(Init)g(Con-)195 2451 y(structs],)f(page)h(9\).)1773
+2560 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286
+2560 V 21 w(instream)195 2615 y Fu(The)i(stdio)f(stream)g(from)g(whic)o
+(h)h(Readline)h(reads)e(input.)37 b(If)21 b Ft(NULL)p
+Fu(,)g(Readline)h(defaults)f(to)195 2670 y Fk(stdin)p
+Fu(.)p eop
 %%Page: 26 28
-26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)1650
-183 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312
-183 18 3 v 21 w(in)n(v)n(oking)p 541 183 V 23 w(k)n(eyseqs)k
-Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 238 y
-Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o
-(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195
-293 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650
-387 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312
-387 V 21 w(in)n(v)n(oking)p 541 387 V 23 w(k)n(eyseqs)p
-750 387 V 21 w(in)p 818 387 V 22 w(map)i Fg(\()p Ft(Function)14
-b(*function,)283 442 y(Keymap)g(map)p Fg(\))195 497 y
-Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o
-(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195
-552 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650
-646 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 646
-V 21 w(function)p 467 646 V 21 w(dump)r(er)g Fg(\()p
-Ft(int)15 b(readable)p Fg(\))195 701 y Fu(Prin)o(t)k(the)h(readline)g
-(function)g(names)g(and)f(the)g(k)o(ey)g(sequences)i(curren)o(tly)e(b)q
-(ound)i(to)195 756 y(them)16 b(to)f Ft(rl_outstream)p
-Fu(.)k(If)d Fm(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)g
-(formatted)f(in)h(suc)o(h)g(a)195 810 y(w)o(a)o(y)e(that)h(it)g(can)g
-(b)q(e)h(made)g(part)e(of)h(an)g Ft(inputrc)f Fu(\014le)i(and)g
-(re-read.)1650 905 y(F)l(unction)-1749 b Fi(void)20 b
-Fh(rl)p 241 905 V 21 w(list)p 337 905 V 22 w(funmap)p
-550 905 V 18 w(names)h Fg(\(\))195 960 y Fu(Prin)o(t)15
-b(the)g(names)h(of)e(all)j(bindable)g(Readline)g(functions)f(to)f
-Ft(rl_outstream)p Fu(.)1650 1054 y(F)l(unction)-1749
-b Fi(char)20 b(**)f Fh(rl)p 312 1054 V 21 w(funmap)p
-524 1054 V 18 w(names)i Fg(\(\))195 1109 y Fu(Return)12
-b(a)e(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g(function)h(names.)
-18 b(The)11 b(arra)o(y)f(is)i(sorted.)195 1163 y(The)k(arra)o(y)f
-(itself)i(is)f(allo)q(cated,)h(but)f(not)f(the)h(strings)g(inside.)24
-b(Y)l(ou)16 b(should)h(free)f(\(\))f(the)195 1218 y(arra)o(y)f(when)i
-(y)o(ou)e(done,)i(but)f(not)g(the)g(p)q(oin)o(trs.)75
-1333 y Fl(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 1430
-y Fu(Supp)q(orting)14 b(the)g(undo)f(command)g(is)h(a)f(painless)h
-(thing,)g(and)f(mak)o(es)g(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75
-1485 y(useful.)28 b(It)17 b(is)h(certainly)h(easy)e(to)g(try)g
-(something)g(if)h(y)o(ou)f(kno)o(w)g(y)o(ou)h(can)f(undo)h(it.)27
-b(I)18 b(could)g(use)g(an)75 1540 y(undo)e(function)g(for)e(the)i(sto)q
-(c)o(k)e(mark)o(et.)137 1608 y(If)g(y)o(our)e(function)i(simply)h
-(inserts)f(text)e(once,)i(or)e(deletes)j(text)d(once,)i(and)f(uses)h
-Ft(rl_insert_text)75 1663 y(\(\))h Fu(or)g Ft(rl_delete_text)e(\(\))i
-Fu(to)f(do)h(it,)g(then)h(undoing)g(is)g(already)f(done)h(for)f(y)o(ou)
-f(automatically)l(.)137 1731 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i
-(insertions)f(or)f(m)o(ultiple)i(deletions,)g(or)e(an)o(y)g(com)o
-(bination)h(of)f(these)g(op)q(erations,)75 1786 y(y)o(ou)19
-b(should)h(group)e(them)h(together)g(in)o(to)g(one)g(op)q(eration.)31
-b(This)20 b(is)f(done)h(with)f Ft(rl_begin_undo_)75 1841
-y(group)14 b(\(\))h Fu(and)h Ft(rl_end_undo_group)d(\(\))p
-Fu(.)137 1909 y(The)j(t)o(yp)q(es)f(of)g(ev)o(en)o(ts)g(that)f(can)h(b)
-q(e)h(undone)g(are:)195 1975 y Ft(enum)23 b(undo_code)g({)h
-(UNDO_DELETE,)e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)137
-2043 y Fu(Notice)16 b(that)e Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g
-(some)g(text,)f(and)i Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75
-2098 y(some)d(text.)18 b(That)12 b(is,)h(the)f(undo)g(co)q(de)h(tells)g
-(undo)g(what)e(to)h(undo,)h(not)f(ho)o(w)f(to)h(undo)g(it.)19
-b Ft(UNDO_BEGIN)75 2152 y Fu(and)c Ft(UNDO_END)f Fu(are)h(tags)g(added)
-g(b)o(y)h Ft(rl_begin_undo_group)c(\(\))j Fu(and)g Ft
-(rl_end_undo_group)e(\(\))p Fu(.)1650 2247 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 2247 V 21 w(b)r(egin)p 372
-2247 V 20 w(undo)p 517 2247 V 20 w(group)h Fg(\(\))195
-2302 y Fu(Begins)e(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g
-(construct.)29 b(The)19 b(undo)g(information)195 2356
-y(usually)f(comes)f(from)f(calls)h(to)g Ft(rl_insert_text)c(\(\))j
-Fu(and)h Ft(rl_delete_text)c(\(\))p Fu(,)k(but)195 2411
-y(could)f(b)q(e)g(the)f(result)h(of)f(calls)h(to)f Ft(rl_add_undo)e
-(\(\))p Fu(.)1650 2506 y(F)l(unction)-1749 b Fi(int)20
-b Fh(rl)p 215 2506 V 21 w(end)p 326 2506 V 20 w(undo)p
-471 2506 V 20 w(group)h Fg(\(\))195 2560 y Fu(Closes)c(the)g(curren)o
-(t)g(undo)h(group)e(started)h(with)g Ft(rl_begin_undo_group)c(\(\))p
-Fu(.)25 b(There)195 2615 y(should)17 b(b)q(e)f(one)f(call)i(to)e
-Ft(rl_end_undo_group)e(\(\))i Fu(for)g(eac)o(h)g(call)i(to)e
-Ft(rl_begin_undo_)195 2670 y(group)f(\(\))p Fu(.)p eop
+26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)h(Library)1773
+149 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286
+149 18 3 v 21 w(outstream)195 204 y Fu(The)e(stdio)h(stream)e(to)h
+(whic)o(h)h(Readline)g(p)q(erforms)f(output.)26 b(If)18
+b Ft(NULL)p Fu(,)e(Readline)j(defaults)f(to)195 259 y
+Fk(stdout)p Fu(.)1773 381 y(V)l(ariable)-1861 b Fi(rl_command_func_t)22
+b(*)d Fh(rl)p 626 381 V 21 w(last)p 735 381 V 21 w(func)195
+436 y Fu(The)f(address)f(of)g(the)g(last)h(command)f(function)h
+(Readline)h(executed.)27 b(Ma)o(y)17 b(b)q(e)h(used)g(to)f(test)195
+490 y(whether)e(or)g(not)g(a)g(function)h(is)f(b)q(eing)i(executed)f(t)
+o(wice)g(in)g(succession,)g(for)e(example.)1773 612 y(V)l(ariable)-1861
+b Fi(rl_hook_func_t)21 b(*)e Fh(rl)p 547 612 V 22 w(startup)p
+752 612 V 19 w(ho)r(ok)195 667 y Fu(If)e(non-zero,)h(this)g(is)f(the)h
+(address)f(of)f(a)h(function)h(to)f(call)h(just)f(b)q(efore)g
+Ft(readline)f Fu(prin)o(ts)i(the)195 722 y(\014rst)d(prompt.)1773
+844 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
+Fh(rl)p 547 844 V 22 w(pre)p 651 844 V 20 w(input)p 804
+844 V 21 w(ho)r(ok)195 898 y Fu(If)f(non-zero,)g(this)g(is)h(the)f
+(address)f(of)h(a)f(function)i(to)e(call)i(after)e(the)h(\014rst)f
+(prompt)g(has)h(b)q(een)195 953 y(prin)o(ted)e(and)f(just)g(b)q(efore)h
+Ft(readline)e Fu(starts)g(reading)h(input)i(c)o(haracters.)1773
+1075 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
+Fh(rl)p 547 1075 V 22 w(ev)n(en)n(t)p 701 1075 V 22 w(ho)r(ok)195
+1130 y Fu(If)i(non-zero,)g(this)g(is)g(the)f(address)g(of)g(a)g
+(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(Readline)g(is)195
+1184 y(w)o(aiting)15 b(for)f(terminal)h(input.)21 b(By)14
+b(default,)h(this)g(will)i(b)q(e)e(called)h(at)e(most)g(ten)g(times)h
+(a)f(second)195 1239 y(if)i(there)f(is)h(no)f(k)o(eyb)q(oard)g(input.)
+1773 1361 y(V)l(ariable)-1861 b Fi(rl_getc_func_t)21
+b(*)e Fh(rl)p 547 1361 V 22 w(getc)p 671 1361 V 21 w(function)195
+1416 y Fu(If)c(non-zero,)h(Readline)g(will)h(call)f(indirectly)i
+(through)d(this)g(p)q(oin)o(ter)h(to)f(get)f(a)h(c)o(haracter)g(from)
+195 1471 y(the)k(input)i(stream.)31 b(By)19 b(default,)h(it)g(is)g(set)
+f(to)f Ft(rl_getc)p Fu(,)h(the)g(default)h(Readline)h(c)o(haracter)195
+1525 y(input)16 b(function)g(\(see)f(Section)h(2.4.8)e([Character)g
+(Input],)h(page)g(34\).)1773 1647 y(V)l(ariable)-1861
+b Fi(rl_voidfunc_t)21 b(*)e Fh(rl)p 521 1647 V 21 w(redispla)n(y)p
+765 1647 V 22 w(function)195 1702 y Fu(If)f(non-zero,)h(Readline)g
+(will)h(call)f(indirectly)h(through)e(this)g(p)q(oin)o(ter)h(to)e(up)q
+(date)i(the)f(displa)o(y)195 1757 y(with)c(the)f(curren)o(t)h(con)o
+(ten)o(ts)f(of)g(the)g(editing)i(bu\013er.)k(By)14 b(default,)g(it)g
+(is)g(set)f(to)g Ft(rl_redisplay)p Fu(,)195 1812 y(the)i(default)h
+(Readline)h(redispla)o(y)f(function)g(\(see)f(Section)h(2.4.6)e
+([Redispla)o(y],)h(page)g(33\).)1773 1933 y(V)l(ariable)-1861
+b Fi(rl_vintfunc_t)21 b(*)e Fh(rl)p 521 1933 V 21 w(prep)p
+656 1933 V 21 w(term)p 798 1933 V 19 w(function)195 1988
+y Fu(If)12 b(non-zero,)h(Readline)g(will)h(call)f(indirectly)h(through)
+e(this)g(p)q(oin)o(ter)h(to)e(initialize)k(the)e(terminal.)195
+2043 y(The)19 b(function)g(tak)o(es)f(a)g(single)i(argumen)o(t,)e(an)h
+Ft(int)f Fu(\015ag)g(that)g(sa)o(ys)g(whether)g(or)h(not)f(to)g(use)195
+2098 y(eigh)o(t-bit)g(c)o(haracters.)25 b(By)17 b(default,)h(this)f(is)
+h(set)e(to)h Ft(rl_prep_terminal)e Fu(\(see)i(Section)h(2.4.9)195
+2152 y([T)l(erminal)e(Managemen)o(t],)d(page)i(35\).)1773
+2274 y(V)l(ariable)-1861 b Fi(rl_voidfunc_t)21 b(*)e
+Fh(rl)p 521 2274 V 21 w(deprep)p 714 2274 V 21 w(term)p
+856 2274 V 19 w(function)195 2329 y Fu(If)g(non-zero,)g(Readline)g
+(will)h(call)g(indirectly)g(through)e(this)h(p)q(oin)o(ter)f(to)g
+(reset)g(the)h(terminal.)195 2384 y(This)f(function)g(should)h(undo)f
+(the)f(e\013ects)h(of)f Ft(rl_prep_term_function)p Fu(.)24
+b(By)17 b(default,)i(this)195 2439 y(is)d(set)f(to)f
+Ft(rl_deprep_terminal)f Fu(\(see)i(Section)h(2.4.9)e([T)l(erminal)i
+(Managemen)o(t],)d(page)i(35\).)1773 2560 y(V)l(ariable)-1861
+b Fi(Keymap)20 b Fh(rl)p 293 2560 V 21 w(executing)p
+551 2560 V 22 w(k)n(eymap)195 2615 y Fu(This)f(v)m(ariable)g(is)f(set)g
+(to)g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h
+(29\))f(in)i(whic)o(h)195 2670 y(the)c(curren)o(tly)h(executing)g
+(readline)h(function)f(w)o(as)f(found.)p eop
 %%Page: 27 29
 27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(27)1650 183 y(F)l(unction)-1749 b Fi(void)20
-b Fh(rl)p 241 183 18 3 v 21 w(add)p 354 183 V 20 w(undo)i
-Fg(\()p Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)283
-238 y(char)g(*text)p Fg(\))195 293 y Fu(Remem)o(b)q(er)j(ho)o(w)f(to)f
-(undo)i(an)f(ev)o(en)o(t)g(\(according)h(to)e Fm(what)q
-Fu(\).)23 b(The)16 b(a\013ected)g(text)g(runs)195 348
-y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h(encompasses)f
-Fm(text)p Fu(.)1650 445 y(F)l(unction)-1749 b Fi(void)20
-b Fh(free)p 296 445 V 20 w(undo)p 441 445 V 20 w(list)k
-Fg(\(\))195 500 y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1650
-597 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 597
-V 21 w(do)p 297 597 V 20 w(undo)i Fg(\(\))195 651 y Fu(Undo)16
-b(the)g(\014rst)f(thing)h(on)g(the)f(undo)h(list.)22
-b(Returns)17 b Ft(0)e Fu(if)h(there)g(w)o(as)f(nothing)h(to)f(undo,)195
-706 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137
-803 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i
-(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,)
-75 858 y(c)o(hange)i(its)h(case\),)g(call)g Ft(rl_modifying)14
-b(\(\))k Fu(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f
-(text.)29 b(Y)l(ou)19 b(m)o(ust)75 913 y(supply)d(the)g(indices)h(of)e
-(the)g(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)
-1650 1010 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
-1010 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p
-Fg(\))195 1065 y Fu(T)l(ell)i(Readline)i(to)c(sa)o(v)o(e)g(the)i(text)e
-(b)q(et)o(w)o(een)h Fm(start)g Fu(and)g Fm(end)j Fu(as)c(a)h(single)h
-(undo)g(unit.)23 b(It)195 1120 y(is)16 b(assumed)f(that)g(y)o(ou)f
-(will)j(subsequen)o(tly)g(mo)q(dify)e(that)g(text.)75
-1237 y Fl(2.4.6)30 b(Redispla)n(y)1650 1363 y Fu(F)l(unction)-1749
-b Fi(void)20 b Fh(rl)p 241 1363 V 21 w(redispla)n(y)k
-Fg(\(\))195 1417 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)f
-(screen)i(to)e(re\015ect)h(the)g(curren)o(t)g(con)o(ten)o(ts)f(of)g
-Ft(rl_)195 1472 y(line_buffer)p Fu(.)1650 1569 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 1569 V 21 w(forced)p 390 1569
-V 20 w(up)r(date)p 584 1569 V 20 w(displa)n(y)k Fg(\(\))195
-1624 y Fu(F)l(orce)17 b(the)f(line)j(to)d(b)q(e)i(up)q(dated)f(and)g
-(redispla)o(y)o(ed,)h(whether)f(or)g(not)f(Readline)j(thinks)195
-1679 y(the)c(screen)h(displa)o(y)g(is)g(correct.)1650
-1776 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1776
-V 21 w(on)p 297 1776 V 20 w(new)p 416 1776 V 21 w(line)k
-Fg(\(\))195 1831 y Fu(T)l(ell)15 b(the)f(up)q(date)h(functions)g(that)e
-(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h(new)g(\(empt)o(y\))f
-(line,)j(usually)195 1886 y(after)e(ouputting)i(a)f(newline.)1650
-1983 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1983
-V 21 w(on)p 297 1983 V 20 w(new)p 416 1983 V 21 w(line)p
-525 1983 V 22 w(with)p 657 1983 V 22 w(prompt)h Fg(\(\))195
-2037 y Fu(T)l(ell)c(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha)o
-(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f
-Fm(rl)p 1595 2037 14 2 v 16 w(prompt)195 2092 y Fu(already)f(displa)o
-(y)o(ed.)22 b(This)15 b(could)h(b)q(e)g(used)g(b)o(y)f(applications)i
-(that)d(w)o(an)o(t)g(to)h(output)g(the)195 2147 y(prompt)j(string)g
-(themselv)o(es,)h(but)g(still)h(need)f(Readline)h(to)e(kno)o(w)g(the)g
-(prompt)g(string)195 2202 y(length)e(for)e(redispla)o(y)l(.)22
-b(It)15 b(should)h(b)q(e)g(used)g(after)e(setting)h Fm(rl)p
-1258 2202 V 17 w(already)p 1420 2202 V 17 w(prompted)p
-Fu(.)1650 2299 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
-215 2299 18 3 v 21 w(reset)p 357 2299 V 20 w(line)p 465
-2299 V 23 w(state)j Fg(\(\))195 2354 y Fu(Reset)17 b(the)f(displa)o(y)h
-(state)f(to)f(a)h(clean)h(state)f(and)g(redispla)o(y)h(the)g(curren)o
-(t)f(line)i(starting)195 2409 y(on)d(a)g(new)g(line.)1650
-2506 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2506
-V 21 w(message)g Fg(\()p Ft(va_alist)p Fg(\))195 2560
-y Fu(The)h(argumen)o(ts)f(are)g(a)g(string)h(as)f(w)o(ould)h(b)q(e)g
-(supplied)i(to)d Ft(printf)p Fu(.)35 b(The)21 b(resulting)195
-2615 y(string)h(is)g(displa)o(y)o(ed)h(in)g(the)f Fm(ec)o(ho)g(area)p
-Fu(.)39 b(The)23 b(ec)o(ho)f(area)f(is)h(also)g(used)h(to)e(displa)o(y)
-195 2670 y(n)o(umeric)16 b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)p
-eop
+(Readline)843 b(27)1773 149 y(V)l(ariable)-1861 b Fi(Keymap)20
+b Fh(rl)p 293 149 18 3 v 21 w(binding)p 501 149 V 22
+w(k)n(eymap)195 204 y Fu(This)f(v)m(ariable)g(is)f(set)g(to)g(the)g(k)o
+(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h(29\))f(in)i
+(whic)o(h)195 259 y(the)c(last)g(k)o(ey)g(binding)j(o)q(ccurred.)1773
+383 y(V)l(ariable)-1861 b Fi(char)20 b(*)f Fh(rl)p 286
+383 V 21 w(executing)p 544 383 V 22 w(macro)195 438 y
+Fu(This)d(v)m(ariable)g(is)g(set)f(to)g(the)g(text)g(of)f(an)o(y)h
+(curren)o(tly-executing)i(macro.)1773 562 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 562 V 21 w(readline)p 434 562
+V 22 w(state)195 617 y Fu(A)d(v)m(ariable)i(with)e(bit)h(v)m(alues)h
+(that)d(encapsulate)i(the)g(curren)o(t)f(Readline)h(state.)25
+b(A)18 b(bit)f(is)h(set)195 671 y(with)h(the)g Ft(RL_SETSTATE)f
+Fu(macro,)h(and)g(unset)g(with)g(the)g Ft(RL_UNSETSTATE)e
+Fu(macro.)31 b(Use)19 b(the)195 726 y Ft(RL_ISSTATE)e
+Fu(macro)h(to)g(test)g(whether)h(a)f(particular)i(state)d(bit)j(is)f
+(set.)30 b(Curren)o(t)18 b(state)g(bits)195 781 y(include:)195
+864 y Ft(RL_STATE_NONE)435 919 y Fu(Readline)e(has)g(not)e(y)o(et)h(b)q
+(een)h(called,)h(nor)e(has)g(it)g(b)q(egun)h(to)f(in)o(tialize.)195
+1001 y Ft(RL_STATE_INITIALIZING)435 1056 y Fu(Readline)h(is)g
+(initializi)q(ng)i(its)d(in)o(ternal)h(data)f(structures.)195
+1138 y Ft(RL_STATE_INITIALIZED)435 1192 y Fu(Readline)h(has)g
+(completed)g(its)f(initialization.)195 1274 y Ft(RL_STATE_TERMPREPPED)
+435 1329 y Fu(Readline)h(has)e(mo)q(di\014ed)i(the)e(terminal)h(mo)q
+(des)g(to)e(do)i(its)f(o)o(wn)g(input)h(and)g(redis-)435
+1384 y(pla)o(y)l(.)195 1466 y Ft(RL_STATE_READCMD)435
+1521 y Fu(Readline)h(is)g(reading)g(a)f(command)g(from)f(the)i(k)o(eyb)
+q(oard.)195 1603 y Ft(RL_STATE_METANEXT)435 1658 y Fu(Readline)g(is)g
+(reading)g(more)f(input)h(after)e(reading)i(the)f(meta-pre\014x)h(c)o
+(haracter.)195 1740 y Ft(RL_STATE_DISPATCHING)435 1794
+y Fu(Readline)g(is)g(dispatc)o(hing)h(to)d(a)h(command.)195
+1876 y Ft(RL_STATE_MOREINPUT)435 1931 y Fu(Readline)h(is)g(reading)g
+(more)f(input)h(while)h(executing)f(an)f(editing)i(command.)195
+2013 y Ft(RL_STATE_ISEARCH)435 2068 y Fu(Readline)f(is)g(p)q(erforming)
+g(an)f(incremen)o(tal)h(history)f(searc)o(h.)195 2150
+y Ft(RL_STATE_NSEARCH)435 2205 y Fu(Readline)h(is)g(p)q(erforming)g(a)f
+(non-incremen)o(tal)h(history)g(searc)o(h.)195 2287 y
+Ft(RL_STATE_SEARCH)435 2342 y Fu(Readline)11 b(is)g(searc)o(hing)g(bac)
+o(kw)o(ard)e(or)h(forw)o(ard)f(through)h(the)g(history)g(for)f(a)h
+(string.)195 2424 y Ft(RL_STATE_NUMERICARG)435 2478 y
+Fu(Readline)16 b(is)g(reading)g(a)f(n)o(umeric)h(argumen)o(t.)195
+2560 y Ft(RL_STATE_MACROINPUT)435 2615 y Fu(Readline)d(is)g(curren)o
+(tly)g(getting)f(its)g(input)h(from)e(a)h(previously-de\014ned)j(k)o
+(eyb)q(oard)435 2670 y(macro.)p eop
 %%Page: 28 30
-28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)1650
-183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183
-18 3 v 21 w(clear)p 354 183 V 21 w(message)h Fg(\(\))195
-238 y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1650
-333 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 333
-V 21 w(sa)n(v)n(e)p 365 333 V 21 w(prompt)h Fg(\(\))195
-388 y Fu(Sa)o(v)o(e)e(the)h(lo)q(cal)h(Readline)h(prompt)d(displa)o(y)i
-(state)e(in)h(preparation)g(for)f(displa)o(ying)i(a)195
-443 y(new)15 b(message)g(in)h(the)f(message)g(area)g(with)g
-Ft(rl_message)p Fu(.)1650 538 y(F)l(unction)-1749 b Fi(void)20
-b Fh(rl)p 241 538 V 21 w(restore)p 436 538 V 20 w(prompt)g
-Fg(\(\))195 593 y Fu(Restore)c(the)h(lo)q(cal)h(Readline)g(prompt)e
-(displa)o(y)i(state)e(sa)o(v)o(ed)g(b)o(y)g(the)h(most)e(recen)o(t)i
-(call)195 648 y(to)e Ft(rl_save_prompt)p Fu(.)75 763
-y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650 887
-y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 887
-V 21 w(insert)p 378 887 V 21 w(text)k Fg(\()p Ft(char)14
-b(*text)p Fg(\))195 942 y Fu(Insert)h Fm(text)h Fu(in)o(to)f(the)h
-(line)g(at)f(the)g(curren)o(t)g(cursor)g(p)q(osition.)1650
-1037 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1037
-V 21 w(delete)p 383 1037 V 22 w(text)k Fg(\()p Ft(int)14
-b(start,)h(int)f(end)p Fg(\))195 1092 y Fu(Delete)i(the)f(text)g(b)q
-(et)o(w)o(een)g Fm(start)g Fu(and)h Fm(end)h Fu(in)f(the)g(curren)o(t)f
-(line.)1650 1187 y(F)l(unction)-1749 b Fi(char)20 b(*)f
-Fh(rl)p 286 1187 V 21 w(cop)n(y)p 421 1187 V 21 w(text)24
-b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195
-1242 y Fu(Return)h(a)f(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i
-Fm(start)f Fu(and)g Fm(end)j Fu(in)e(the)f(curren)o(t)g(line.)1650
-1337 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1337
-V 21 w(kill)p 311 1337 V 23 w(text)k Fg(\()p Ft(int)14
-b(start,)h(int)g(end)p Fg(\))195 1392 y Fu(Cop)o(y)j(the)h(text)f(b)q
-(et)o(w)o(een)h Fm(start)f Fu(and)h Fm(end)i Fu(in)e(the)g(curren)o(t)f
-(line)i(to)e(the)h(kill)h(ring,)g(ap-)195 1447 y(p)q(ending)15
-b(or)f(prep)q(ending)h(to)e(the)h(last)f(kill)j(if)e(the)g(last)f
-(command)h(w)o(as)f(a)g(kill)i(command.)195 1502 y(The)j(text)f(is)h
-(deleted.)28 b(If)18 b Fm(start)f Fu(is)h(less)g(than)f
-Fm(end)p Fu(,)i(the)e(text)g(is)h(app)q(ended,)i(otherwise)195
-1556 y(prep)q(ended.)i(If)15 b(the)g(last)h(command)f(w)o(as)f(not)h(a)
-g(kill,)h(a)f(new)h(kill)h(ring)e(slot)g(is)h(used.)75
-1672 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650
-1796 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
-1796 V 21 w(read)p 346 1796 V 20 w(k)n(ey)k Fg(\(\))195
-1851 y Fu(Return)14 b(the)g(next)g(c)o(haracter)e(a)o(v)m(ailable.)22
-b(This)14 b(handles)h(input)f(inserted)h(in)o(to)e(the)h(input)195
-1905 y(stream)k(via)g Fm(p)q(ending)j(input)f Fu(\(see)f(Section)g(2.3)
-f([Readline)i(V)l(ariables],)g(page)e(21\))g(and)195
-1960 y Ft(rl_stuff_char)13 b(\(\))p Fu(,)i(macros,)f(and)h(c)o
-(haracters)g(read)g(from)f(the)i(k)o(eyb)q(oard.)1650
-2056 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2056
-V 21 w(getc)j Fg(\()p Ft(FILE)14 b(*)p Fg(\))195 2110
-y Fu(Return)i(the)f(next)g(c)o(haracter)g(a)o(v)m(ailable)i(from)d(the)
-h(k)o(eyb)q(oard.)1650 2206 y(F)l(unction)-1749 b Fi(int)20
-b Fh(rl)p 215 2206 V 21 w(stu\013)p 346 2206 V 20 w(c)n(har)j
-Fg(\()p Ft(int)15 b(c)p Fg(\))195 2260 y Fu(Insert)22
-b Fm(c)i Fu(in)o(to)e(the)g(Readline)i(input)f(stream.)38
-b(It)22 b(will)h(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)g
-(Readline)195 2315 y(attempts)14 b(to)h(read)g(c)o(haracters)f(from)h
-(the)g(terminal)h(with)f Ft(rl_read_key)f(\(\))p Fu(.)1650
-2410 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2410
-V 21 w(extend)p 404 2410 V 21 w(line)p 513 2410 V 22
-w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195 2465
-y Fu(Ensure)f(that)e Ft(rl_line_buffer)g Fu(has)h(enough)h(space)f(to)g
-(hold)h Fm(len)h Fu(c)o(haracters,)d(p)q(ossibly)195
-2520 y(reallo)q(cating)k(it)g(if)f(necessary)l(.)1650
-2615 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2615
-V 21 w(initiali)q(z)q(e)26 b Fg(\(\))195 2670 y Fu(Initialize)18
-b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)p
-eop
+28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Ft(RL_STATE_MACRODEF)435 204 y Fu(Readline)g(is)g(curren)o(tly)g
+(reading)g(c)o(haracters)e(de\014ning)j(a)e(k)o(eyb)q(oard)g(macro.)195
+286 y Ft(RL_STATE_OVERWRITE)435 341 y Fu(Readline)h(is)g(in)g(o)o(v)o
+(erwrite)f(mo)q(de.)195 423 y Ft(RL_STATE_COMPLETING)435
+478 y Fu(Readline)h(is)g(p)q(erforming)g(w)o(ord)e(completion.)195
+560 y Ft(RL_STATE_SIGHANDLER)435 615 y Fu(Readline)i(is)g(curren)o(tly)
+g(executing)g(the)f(readline)i(signal)f(handler.)195
+697 y Ft(RL_STATE_UNDOING)435 752 y Fu(Readline)g(is)g(p)q(erforming)g
+(an)f(undo.)195 834 y Ft(RL_STATE_DONE)435 889 y Fu(Readline)g(has)f
+(read)g(a)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e Ft(accept-line)f
+Fu(and)i(is)h(ab)q(out)f(to)435 944 y(return)h(the)g(line)i(to)e(the)g
+(caller.)1773 1068 y(V)l(ariable)-1861 b Fi(int)20 b
+Fh(rl)p 215 1068 18 3 v 21 w(explicit)p 417 1068 V 24
+w(arg)195 1123 y Fu(Set)f(to)g(a)g(non-zero)h(v)m(alue)h(if)e(an)h
+(explicit)h(n)o(umeric)g(argumen)o(t)d(w)o(as)h(sp)q(eci\014ed)i(b)o(y)
+f(the)f(user.)195 1178 y(Only)d(v)m(alid)h(in)f(a)f(bindable)i(command)
+f(function.)1773 1302 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 1302 V 21 w(n)n(umeric)p 437 1302 V 20
+w(arg)195 1357 y Fu(Set)j(to)f(the)g(v)m(alue)i(of)f(an)o(y)f(n)o
+(umeric)h(argumen)o(t)f(explicitly)k(sp)q(eci\014ed)f(b)o(y)d(the)h
+(user)g(b)q(efore)195 1412 y(executing)14 b(the)f(curren)o(t)g
+(Readline)h(function.)20 b(Only)14 b(v)m(alid)h(in)f(a)f(bindable)i
+(command)d(function.)1773 1536 y(V)l(ariable)-1861 b
+Fi(int)20 b Fh(rl)p 215 1536 V 21 w(editing)p 407 1536
+V 22 w(mo)r(de)195 1591 y Fu(Set)13 b(to)f(a)g(v)m(alue)i(denoting)f
+(Readline's)g(curren)o(t)g(editing)h(mo)q(de.)19 b(A)12
+b(v)m(alue)i(of)e Fk(1)k Fu(means)d(Readline)195 1646
+y(is)j(curren)o(tly)f(in)h(emacs)g(mo)q(de;)f Fk(0)j
+Fu(means)d(that)g(vi)h(mo)q(de)f(is)h(activ)o(e.)75 1781
+y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6
+b(unctions)75 1927 y Fj(2.4.1)30 b(Naming)20 b(a)g(F)-5
+b(unction)137 2025 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e
+(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)35
+b(This)20 b(is)75 2080 y(done)f(b)o(y)f(represen)o(ting)h(the)g
+(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19
+b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 2135 y(descriptiv)o(e)e
+(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14
+b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195
+2202 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 2272
+y Fu(This)21 b(binds)g(the)f(k)o(eystrok)o(e)661 2270
+y Fn(h)p 673 2244 209 2 v 673 2272 a Fm(Meta-Rub)q(out)p
+673 2279 V 879 2270 a Fn(i)914 2272 y Fu(to)g(the)g(function)g
+Fl(descriptively)k Fu(named)c Ft(backward-)75 2326 y(kill-word)p
+Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f(should)i(bind)f(the)g
+(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o(e)75
+2381 y(names)e(as)g(w)o(ell.)21 b(Readline)16 b(pro)o(vides)g(a)f
+(function)h(for)e(doing)i(that:)1762 2506 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2506 18 3 v 21 w(add)p 328
+2506 V 20 w(defun)i Fg(\()p Ft(const)14 b(char)h(*name,)f
+(rl_command_func_t)283 2560 y(*function,)f(int)i(key)p
+Fg(\))195 2615 y Fu(Add)j Fk(name)i Fu(to)d(the)h(list)h(of)e(named)h
+(functions.)28 b(Mak)o(e)17 b Fk(function)h Fu(b)q(e)g(the)g(function)h
+(that)d(gets)195 2670 y(called.)21 b(If)16 b Fk(k)o(ey)j
+Fu(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fk(function)i
+Fu(using)g Ft(rl_bind_key\(\))p Fu(.)p eop
 %%Page: 29 31
 29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(29)1650 183 y(F)l(unction)-1749 b Fi(int)20
-b Fh(rl)p 215 183 18 3 v 21 w(reset)p 357 183 V 20 w(terminal)j
-Fg(\()p Ft(char)15 b(*terminal_name)p Fg(\))195 238 y
-Fu(Reinitializ)q(e)h(Readline's)g(idea)e(of)f(the)h(terminal)g
-(settings)g(using)g Fm(terminal)p 1501 238 14 2 v 17
-w(name)j Fu(as)c(the)195 293 y(terminal)k(t)o(yp)q(e)g(\(e.g.,)e
-Ft(vt100)p Fu(\).)24 b(If)16 b Fm(terminal)p 987 293
-V 18 w(name)j Fu(is)e(NULL,)g(the)g(v)m(alue)h(of)e(the)h
-Ft(TERM)195 348 y Fu(en)o(vironmen)o(t)e(v)m(ariable)i(is)f(used.)1650
-431 y(F)l(unction)-1749 b Fi(int)20 b Fh(alphab)r(etic)k
-Fg(\()p Ft(int)14 b(c)p Fg(\))195 486 y Fu(Return)i(1)f(if)g
-Fm(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1650
-570 y(F)l(unction)-1749 b Fi(int)20 b Fh(n)n(umeric)i
-Fg(\()p Ft(int)15 b(c)p Fg(\))195 624 y Fu(Return)h(1)f(if)g
-Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 708
-y(F)l(unction)-1749 b Fi(int)20 b Fh(ding)i Fg(\(\))195
-763 y Fu(Ring)16 b(the)f(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g
-(setting)f(of)g Ft(bell-style)p Fu(.)1650 847 y(F)l(unction)-1749
-b Fi(void)20 b Fh(rl)p 241 847 18 3 v 21 w(displa)n(y)p
-435 847 V 22 w(matc)n(h)p 611 847 V 20 w(list)25 b Fg(\()p
-Ft(char)14 b(**matches,)g(int)g(len,)h(int)283 901 y(max)p
-Fg(\))195 956 y Fu(A)j(con)o(v)o(enience)i(function)g(for)d(displa)o
-(ying)j(a)e(list)i(of)e(strings)g(in)h(columnar)g(format)e(on)195
-1011 y(Readline's)e(output)e(stream.)18 b Ft(matches)12
-b Fu(is)h(the)g(list)h(of)f(strings,)f(in)i(argv)e(format,)g(suc)o(h)h
-(as)195 1066 y(a)h(list)h(of)e(completion)j(matc)o(hes.)j
-Ft(len)13 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h
-Ft(matches)p Fu(,)e(and)h Ft(max)195 1120 y Fu(is)k(the)g(length)h(of)e
-(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)27 b(This)18
-b(function)h(uses)f(the)g(setting)195 1175 y(of)13 b
-Ft(print-completions-horizontally)d Fu(to)k(select)g(ho)o(w)g(the)g
-(matc)o(hes)f(are)h(displa)o(y)o(ed)195 1230 y(\(see)h(Section)h(1.3.1)
-e([Readline)j(Init)f(File)g(Syn)o(tax],)e(page)h(4\).)137
-1314 y(The)h(follo)o(wing)g(are)f(implemen)o(ted)h(as)f(macros,)f
-(de\014ned)j(in)f Ft(chartypes.h)p Fu(.)1650 1397 y(F)l(unction)-1749
-b Fi(int)20 b Fh(upp)r(ercase)p 426 1397 V 19 w(p)j Fg(\()p
-Ft(int)14 b(c)p Fg(\))195 1452 y Fu(Return)i(1)f(if)g
-Fm(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)f(c)o(haracter.)1650
-1536 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p
-409 1536 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195
-1591 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g
-(alphab)q(etic)i(c)o(haracter.)1650 1674 y(F)l(unction)-1749
-b Fi(int)20 b Fh(digit)p 289 1674 V 22 w(p)i Fg(\()p
-Ft(int)15 b(c)p Fg(\))195 1729 y Fu(Return)h(1)f(if)g
-Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 1813
-y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 1813 V
-20 w(upp)r(er)i Fg(\()p Ft(int)14 b(c)p Fg(\))195 1867
-y Fu(If)21 b Fm(c)i Fu(is)e(a)g(lo)o(w)o(ercase)f(alphab)q(etic)i(c)o
-(haracter,)f(return)g(the)f(corresp)q(onding)i(upp)q(ercase)195
-1922 y(c)o(haracter.)1650 2006 y(F)l(unction)-1749 b
-Fi(int)20 b Fh(to)p 227 2006 V 20 w(lo)n(w)n(er)k Fg(\()p
-Ft(int)15 b(c)p Fg(\))195 2061 y Fu(If)j Fm(c)j Fu(is)e(an)f(upp)q
-(ercase)h(alphab)q(etic)h(c)o(haracter,)e(return)g(the)g(corresp)q
-(onding)h(lo)o(w)o(ercase)195 2115 y(c)o(haracter.)1650
-2199 y(F)l(unction)-1749 b Fi(int)20 b Fh(digit)p 289
-2199 V 22 w(v)m(alue)j Fg(\()p Ft(int)15 b(c)p Fg(\))195
-2254 y Fu(If)g Fm(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g(the)h(v)m
-(alue)g(it)g(represen)o(ts.)75 2357 y Fl(2.4.9)30 b(Alternate)20
-b(In)n(terface)137 2451 y Fu(An)j(alternate)f(in)o(terface)h(is)g(a)o
-(v)m(ailable)h(to)d(plain)j Ft(readline\(\))p Fu(.)40
-b(Some)22 b(applications)i(need)g(to)75 2506 y(in)o(terlea)o(v)o(e)15
-b(k)o(eyb)q(oard)f(I/O)h(with)g(\014le,)h(device,)f(or)f(windo)o(w)h
-(system)f(I/O,)h(t)o(ypically)h(b)o(y)e(using)h(a)g(main)75
-2560 y(lo)q(op)f(to)g Ft(select\(\))e Fu(on)i(v)m(arious)g(\014le)h
-(descriptors.)20 b(T)l(o)14 b(accomo)q(date)f(this)h(need,)h(readline)g
-(can)f(also)g(b)q(e)75 2615 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o
-(k')h(function)h(from)d(an)i(ev)o(en)o(t)f(lo)q(op.)22
-b(There)16 b(are)f(functions)h(a)o(v)m(ailable)i(to)c(mak)o(e)75
-2670 y(this)i(easy)l(.)p eop
+(Readline)843 b(29)137 149 y(Using)16 b(this)f(function)h(alone)g(is)f
+(su\016cien)o(t)h(for)f(most)f(applications.)21 b(It)15
+b(is)h(the)f(recommended)h(w)o(a)o(y)75 204 y(to)d(add)h(a)f(few)g
+(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)i(has)e
+(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75
+259 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e
+(Readline,)i(y)o(ou)f(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75
+314 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 442
+y Fj(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 546 y Fu(Key)16
+b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fk(k)o(eymap)p
+Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o
+(een)g(the)f(k)o(eys)75 601 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
+(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o
+(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 656 y(existing)i(k)o(eymaps,)f
+(and)g(tell)h(Readline)h(whic)o(h)f(k)o(eymap)f(to)f(use.)1762
+797 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+797 18 3 v 21 w(mak)n(e)p 445 797 V 20 w(bare)p 575 797
+V 20 w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 851 y
+Fu(Returns)12 b(a)f(new,)i(empt)o(y)f(k)o(eymap.)18 b(The)13
+b(space)f(for)f(the)i(k)o(eymap)e(is)i(allo)q(cated)g(with)f
+Ft(malloc\(\))p Fu(;)195 906 y(the)j(caller)i(should)f(free)f(it)h(b)o
+(y)f(calling)i Ft(rl_discard_keymap\(\))12 b Fu(when)k(done.)1762
+1047 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+1047 V 21 w(cop)n(y)p 428 1047 V 21 w(k)n(eymap)j Fg(\()p
+Ft(Keymap)14 b(map)p Fg(\))195 1102 y Fu(Return)h(a)g(new)g(k)o(eymap)g
+(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fk(map)p Fu(.)1762
+1243 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+1243 V 21 w(mak)n(e)p 445 1243 V 20 w(k)n(eymap)j Fg(\()p
+Ft(void)p Fg(\))195 1298 y Fu(Return)16 b(a)f(new)i(k)o(eymap)e(with)i
+(the)f(prin)o(ting)h(c)o(haracters)e(b)q(ound)i(to)e(rl)p
+1457 1298 14 2 v 17 w(insert,)h(the)g(lo)o(w)o(ercase)195
+1353 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)f(equiv)m
+(alen)o(ts,)j(and)d(the)h(Meta)e(digits)i(b)q(ound)g(to)f(pro)q(duce)
+195 1407 y(n)o(umeric)16 b(argumen)o(ts.)1762 1548 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 1548 18 3 v 21 w(discard)p
+441 1548 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p
+Fg(\))195 1603 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f
+Fk(k)o(eymap)p Fu(.)137 1711 y(Readline)24 b(has)f(sev)o(eral)g(in)o
+(ternal)g(k)o(eymaps.)42 b(These)23 b(functions)g(allo)o(w)g(y)o(ou)f
+(to)g(c)o(hange)h(whic)o(h)75 1766 y(k)o(eymap)15 b(is)h(activ)o(e.)
+1762 1907 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p
+293 1907 V 21 w(get)p 391 1907 V 21 w(k)n(eymap)i Fg(\()p
+Ft(void)p Fg(\))195 1962 y Fu(Returns)15 b(the)g(curren)o(tly)h(activ)o
+(e)f(k)o(eymap.)1762 2103 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 2103 V 21 w(set)p 333 2103 V 21 w(k)n(eymap)i
+Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 2158 y Fu(Mak)o(es)g
+Fk(k)o(eymap)j Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762
+2298 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+2298 V 21 w(get)p 391 2298 V 21 w(k)n(eymap)p 605 2298
+V 20 w(b)n(y)p 685 2298 V 21 w(name)i Fg(\()p Ft(const)14
+b(char)g(*name)p Fg(\))195 2353 y Fu(Return)i(the)h(k)o(eymap)f(matc)o
+(hing)h Fk(name)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o
+(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 2408 y(keymap)e
+Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g
+(page)f(4\).)1762 2549 y(F)l(unction)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 2549 V 21 w(get)p 384 2549 V 21 w(k)n(eymap)p
+598 2549 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p
+Fg(\))195 2604 y Fu(Return)i(the)h(name)g(matc)o(hing)f
+Fk(k)o(eymap)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o
+(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 2659 y(keymap)e
+Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g
+(page)f(4\).)p eop
 %%Page: 30 32
-30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)1650
-183 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 183
-18 3 v 21 w(callbac)n(k)p 458 183 V 23 w(handler)p 670
-183 V 21 w(install)25 b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283
-238 y(*lhandler)p Fg(\))195 293 y Fu(Set)i(up)h(the)g(terminal)g(for)f
-(readline)i(I/O)e(and)h(displa)o(y)g(the)g(initial)h(expanded)g(v)m
-(alue)f(of)195 348 y Fm(prompt)p Fu(.)24 b(Sa)o(v)o(e)17
-b(the)g(v)m(alue)h(of)e Fm(lhandler)22 b Fu(to)17 b(use)g(as)f(a)h
-(callbac)o(k)h(when)f(a)g(complete)g(line)195 402 y(of)e(input)h(has)f
-(b)q(een)h(en)o(tered.)1650 498 y(F)l(unction)-1749 b
-Fi(void)20 b Fh(rl)p 241 498 V 21 w(callbac)n(k)p 458
-498 V 23 w(read)p 591 498 V 20 w(c)n(har)j Fg(\(\))195
-553 y Fu(Whenev)o(er)14 b(an)f(application)i(determines)f(that)f(k)o
-(eyb)q(oard)g(input)h(is)g(a)o(v)m(ailable,)h(it)f(should)195
-608 y(call)20 b Ft(rl_callback_read_char\(\))p Fu(,)c(whic)o(h)k(will)g
-(read)f(the)g(next)g(c)o(haracter)f(from)g(the)195 663
-y(curren)o(t)25 b(input)h(source.)48 b(If)25 b(that)g(c)o(haracter)f
-(completes)h(the)g(line,)k Ft(rl_callback_)195 717 y(read_char)14
-b Fu(will)k(in)o(v)o(ok)o(e)e(the)f Fm(lhandler)21 b
-Fu(function)c(sa)o(v)o(ed)e(b)o(y)h Ft(rl_callback_handler_)195
-772 y(install)g Fu(to)h(pro)q(cess)g(the)g(line.)27 b
-Ft(EOF)17 b Fu(is)h(indicated)g(b)o(y)f(calling)i Fm(lhandler)j
-Fu(with)c(a)f Ft(NULL)195 827 y Fu(line.)1650 923 y(F)l(unction)-1749
-b Fi(void)20 b Fh(rl)p 241 923 V 21 w(callbac)n(k)p 458
-923 V 23 w(handler)p 670 923 V 21 w(remo)n(v)n(e)i Fg(\(\))195
-977 y Fu(Restore)15 b(the)g(terminal)g(to)g(its)g(initial)i(state)d
-(and)h(remo)o(v)o(e)f(the)h(line)h(handler.)21 b(This)16
-b(ma)o(y)195 1032 y(b)q(e)g(called)h(from)d(within)j(a)d(callbac)o(k)j
-(as)d(w)o(ell)j(as)d(indep)q(enden)o(tly)m(.)75 1148
-y Fl(2.4.10)29 b(An)21 b(Example)137 1246 y Fu(Here)f(is)g(a)f
-(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o(ercase)h(c)o(haracters)e
-(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o(ts,)75 1301
-y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o(ercase.)31
-b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p
-Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 1356 y(`)p Ft(M-c)p
-Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g
-(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p
-Fu(')d(w)o(ould)i(c)o(hange)75 1410 y(the)h(case)g(of)g(the)h(follo)o
-(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h
-(last)f(c)o(haracter)f(c)o(hanged.)195 1477 y Ft(/*)24
-b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h
-(*/)195 1528 y(int)195 1580 y(invert_case_line)f(\(count,)h(key\))314
-1632 y(int)h(count,)f(key;)195 1684 y({)243 1736 y(register)f(int)i
-(start,)f(end,)g(i;)243 1840 y(start)g(=)h(rl_point;)243
-1944 y(if)f(\(rl_point)g(>=)h(rl_end\))290 1995 y(return)f(\(0\);)243
-2099 y(if)g(\(count)g(<)h(0\))290 2151 y({)338 2203 y(direction)f(=)h
-(-1;)338 2255 y(count)f(=)h(-count;)290 2307 y(})243
-2359 y(else)290 2411 y(direction)f(=)h(1;)243 2514 y(/*)f(Find)h(the)f
-(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)243 2566
-y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)243
-2670 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)p
-eop
+30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(2.4.3)30 b(Binding)20 b(Keys)137 244 y Fu(Key)13
+b(sequences)g(are)e(asso)q(ciate)h(with)h(functions)f(through)g(the)g
+(k)o(eymap.)19 b(Readline)13 b(has)f(sev)o(eral)g(in-)75
+299 y(ternal)j(k)o(eymaps:)k Ft(emacs_standard_keymap)p
+Fu(,)11 b Ft(emacs_meta_keymap)p Fu(,)h Ft(emacs_ctlx_keymap)p
+Fu(,)g Ft(vi_)75 354 y(movement_keymap)p Fu(,)20 b(and)i
+Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18
+b Fu(is)k(the)f(default,)75 408 y(and)15 b(the)h(examples)g(in)g(this)f
+(man)o(ual)h(assume)f(that.)137 474 y(Since)h Ft(readline\(\))c
+Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f
+(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 529
+y(alw)o(a)o(ys)j(the)g(danger)g(that)g(a)g(custom)g(binding)i
+(installed)g(b)q(efore)f(the)f(\014rst)g(call)i(to)d
+Ft(readline\(\))g Fu(will)75 584 y(b)q(e)f(o)o(v)o(erridden.)19
+b(An)13 b(alternate)g(mec)o(hanism)h(is)f(to)f(install)i(custom)f(k)o
+(ey)g(bindings)h(in)g(an)f(initialization)75 638 y(function)19
+b(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e
+(Section)h(2.3)f([Readline)i(V)l(ariables],)75 693 y(page)15
+b(24\).)137 759 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1762
+868 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 868
+18 3 v 21 w(bind)p 347 868 V 21 w(k)n(ey)k Fg(\()p Ft(int)14
+b(key,)h(rl_command_func_t)d(*function)p Fg(\))195 922
+y Fu(Binds)18 b Fk(k)o(ey)i Fu(to)c Fk(function)h Fu(in)h(the)e(curren)
+o(tly)h(activ)o(e)g(k)o(eymap.)23 b(Returns)16 b(non-zero)h(in)g(the)g
+(case)195 977 y(of)e(an)g(in)o(v)m(alid)i Fk(k)o(ey)p
+Fu(.)1762 1086 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1086 V 21 w(bind)p 347 1086 V 21 w(k)n(ey)p 452 1086
+V 21 w(in)p 520 1086 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h
+(rl_command_func_t)e(*function,)283 1141 y(Keymap)h(map)p
+Fg(\))195 1196 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c Fk(function)h
+Fu(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(the)f(case)g(of)g
+(an)g(in)o(v)m(alid)j Fk(k)o(ey)p Fu(.)1762 1304 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1304 V 21 w(un)n(bind)p 409
+1304 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 b(key)p Fg(\))195
+1359 y Fu(Bind)19 b Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i(function)f(in)g
+(the)f(curren)o(tly)g(activ)o(e)h(k)o(eymap.)28 b(Returns)18
+b(non-zero)g(in)195 1414 y(case)d(of)g(error.)1762 1523
+y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1523 V
+21 w(un)n(bind)p 409 1523 V 21 w(k)n(ey)p 514 1523 V
+21 w(in)p 582 1523 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f
+(map)p Fg(\))195 1577 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i
+(function)f(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(case)f
+(of)g(error.)1762 1686 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 1686 V 21 w(un)n(bind)p 409 1686 V 21 w(function)p
+635 1686 V 21 w(in)p 703 1686 V 21 w(map)h Fg(\()p Ft
+(rl_command_func_t)13 b(*function,)283 1741 y(Keymap)h(map)p
+Fg(\))195 1796 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i
+Fk(function)g Fu(in)g Fk(map)p Fu(.)1762 1905 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1905 V 21 w(un)n(bind)p 409
+1905 V 21 w(command)p 674 1905 V 17 w(in)p 738 1905 V
+22 w(map)h Fg(\()p Ft(const)14 b(char)h(*command,)f(Keymap)283
+1959 y(map)p Fg(\))195 2014 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f
+(are)h(b)q(ound)h(to)f Fk(command)i Fu(in)f Fk(map)p
+Fu(.)1762 2123 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2123 V 21 w(set)p 307 2123 V 20 w(k)n(ey)k Fg(\()p
+Ft(const)14 b(char)h(*keyseq,)f(rl_command_func_t)f(*function,)283
+2178 y(Keymap)h(map)p Fg(\))195 2232 y Fu(Bind)g(the)e(k)o(ey)h
+(sequence)h(represen)o(ted)f(b)o(y)f(the)h(string)f Fk(k)o(eyseq)i
+Fu(to)e(the)g(function)i Fk(function)p Fu(.)19 b(This)195
+2287 y(mak)o(es)13 b(new)g(k)o(eymaps)g(as)f(necessary)l(.)20
+b(The)13 b(initial)j(k)o(eymap)c(in)i(whic)o(h)g(to)f(do)g(bindings)i
+(is)f Fk(map)p Fu(.)1762 2396 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 2396 V 21 w(generic)p 413 2396 V 21 w(bind)j
+Fg(\()p Ft(int)15 b(type,)f(const)h(char)f(*keyseq,)g(char)h(*data,)283
+2451 y(Keymap)f(map)p Fg(\))195 2506 y Fu(Bind)h(the)e(k)o(ey)h
+(sequence)h(represen)o(ted)e(b)o(y)h(the)g(string)f Fk(k)o(eyseq)i
+Fu(to)d(the)i(arbitrary)f(p)q(oin)o(ter)h Fk(data)p Fu(.)195
+2560 y Fk(t)o(yp)q(e)j Fu(sa)o(ys)c(what)h(kind)h(of)f(data)g(is)g(p)q
+(oin)o(ted)i(to)d(b)o(y)h Fk(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f
+(function)h(\()p Ft(ISFUNC)p Fu(\),)d(a)195 2615 y(macro)i(\()p
+Ft(ISMACR)p Fu(\),)f(or)h(a)h(k)o(eymap)f(\()p Ft(ISKMAP)p
+Fu(\).)k(This)e(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.)20
+b(The)195 2670 y(initial)d(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g
+(bindings)i(is)f Fk(map)p Fu(.)p eop
 %%Page: 31 33
 31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(31)243 183 y Ft(if)23 b(\(end)h(>)f(rl_end\))290
-235 y(end)h(=)g(rl_end;)243 287 y(else)f(if)h(\(end)f(<)h(0\))290
-339 y(end)g(=)g(0;)243 443 y(if)f(\(start)g(==)h(end\))290
-495 y(return)f(\(0\);)243 598 y(if)g(\(start)g(>)h(end\))290
-650 y({)338 702 y(int)g(temp)f(=)h(start;)338 754 y(start)f(=)h(end;)
-338 806 y(end)g(=)f(temp;)290 858 y(})243 962 y(/*)g(Tell)h(readline)e
-(that)i(we)f(are)h(modifying)e(the)i(line,)f(so)h(it)f(will)h(save)314
-1013 y(the)g(undo)f(information.)f(*/)243 1065 y(rl_modifying)g
-(\(start,)h(end\);)243 1169 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f
-(i++\))290 1221 y({)338 1273 y(if)h(\(uppercase_p)e
-(\(rl_line_buffer[i]\)\))386 1325 y(rl_line_buffer[i])f(=)j(to_lower)f
-(\(rl_line_buffer[i]\);)338 1377 y(else)g(if)h(\(lowercase_p)e
-(\(rl_line_buffer[i]\)\))386 1429 y(rl_line_buffer[i])f(=)j(to_upper)f
-(\(rl_line_buffer[i]\);)290 1480 y(})243 1532 y(/*)g(Move)h(point)f(to)
-g(on)h(top)f(of)h(the)f(last)h(character)e(changed.)h(*/)243
-1584 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f
-(start;)243 1636 y(return)g(\(0\);)195 1688 y(})75 1835
-y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 1938
-y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f(to)h(a)
-f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f(on)75
-1993 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34 b(They)20
-b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o(ts,)f
-(lik)o(e)h(a)f(user)75 2048 y(pressing)c(the)f(in)o(terrupt)g(k)o(ey)g
-(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q(eing)
-g(brok)o(en.)k(There)15 b(is)75 2102 y(a)e(class)g(of)g(signals)h(that)
-f(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h
-(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 2157
-y(Since)i(Readline)g(c)o(hanges)f(the)f(terminal)h(attributes)f(when)h
-(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75
-2212 y(pro)q(cessing)22 b(when)f(a)g(signal)h(is)g(receiv)o(ed)g(to)e
-(restore)g(the)i(terminal)f(to)g(a)g(sane)g(state,)g(or)f(pro)o(vide)75
-2267 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o
-(ually)l(.)137 2341 y(Readline)23 b(con)o(tains)d(an)g(in)o(ternal)h
-(signal)g(handler)g(that)f(is)h(installed)h(for)d(a)h(n)o(um)o(b)q(er)g
-(of)g(signals)75 2396 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p
-Fu(,)g Ft(SIGTERM)p Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p
-Fu(,)g Ft(SIGTTIN)p Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36
-b(When)21 b(one)g(of)75 2451 y(these)16 b(signals)h(is)f(receiv)o(ed,)h
-(the)f(signal)h(handler)f(will)i(reset)e(the)g(terminal)g(attributes)g
-(to)f(those)h(that)75 2506 y(w)o(ere)22 b(in)h(e\013ect)f(b)q(efore)g
-Ft(readline)14 b(\(\))22 b Fu(w)o(as)f(called,)k(reset)d(the)g(signal)h
-(handling)h(to)d(what)g(it)i(w)o(as)75 2560 y(b)q(efore)e
-Ft(readline)14 b(\(\))20 b Fu(w)o(as)f(called,)k(and)e(resend)g(the)f
-(signal)i(to)d(the)i(calling)h(application.)37 b(If)21
-b(and)75 2615 y(when)15 b(the)f(calling)i(application's)g(signal)f
-(handler)g(returns,)f(Readline)j(will)e(reinitialize)j(the)c(terminal)
-75 2670 y(and)21 b(con)o(tin)o(ue)h(to)e(accept)h(input.)39
-b(When)21 b(a)g Ft(SIGINT)f Fu(is)h(receiv)o(ed,)j(the)d(Readline)i
-(signal)f(handler)p eop
+(Readline)843 b(31)1762 149 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 149 18 3 v 21 w(parse)p 369 149 V 19 w(and)p
+480 149 V 21 w(bind)j Fg(\()p Ft(char)14 b(*line)p Fg(\))195
+204 y Fu(P)o(arse)g Fk(line)19 b Fu(as)14 b(if)h(it)g(had)g(b)q(een)h
+(read)f(from)f(the)g Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)f(an)o
+(y)h(k)o(ey)f(bindings)195 259 y(and)h(v)m(ariable)i(assignmen)o(ts)e
+(found)h(\(see)f(Section)h(1.3)e([Readline)i(Init)g(File],)g(page)f
+(4\).)1762 359 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 359 V 21 w(read)p 346 359 V 20 w(init)p 450 359 V
+22 w(\014le)k Fg(\()p Ft(const)14 b(char)h(*filename)p
+Fg(\))195 414 y Fu(Read)g(k)o(eybindings)j(and)e(v)m(ariable)h
+(assignmen)o(ts)f(from)f Fk(\014lename)k Fu(\(see)d(Section)g(1.3)f
+([Readline)195 469 y(Init)h(File],)g(page)f(4\).)75 571
+y Fj(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20
+b(Names)h(and)f(Bindings)137 664 y Fu(These)11 b(functions)h(allo)o(w)e
+(y)o(ou)h(to)f(\014nd)h(out)f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f(named)
+h(functions)h(and)e(the)h(functions)75 718 y(in)o(v)o(ok)o(ed)j(b)o(y)g
+(a)f(particular)h(k)o(ey)g(sequence.)21 b(Y)l(ou)14 b(ma)o(y)f(also)g
+(asso)q(ciate)h(a)g(new)g(function)g(name)g(with)g(an)75
+773 y(arbitrary)h(function.)1762 873 y(F)l(unction)-1861
+b Fi(rl_command_func_t)22 b(*)d Fh(rl)p 626 873 V 21
+w(named)p 814 873 V 19 w(function)k Fg(\()p Ft(const)14
+b(char)h(*name)p Fg(\))195 928 y Fu(Return)g(the)g(function)h(with)g
+(name)f Fk(name)p Fu(.)1762 1028 y(F)l(unction)-1861
+b Fi(rl_command_func_t)22 b(*)d Fh(rl)p 626 1028 V 21
+w(function)p 852 1028 V 21 w(of)p 920 1028 V 20 w(k)n(eyseq)24
+b Fg(\()p Ft(const)14 b(char)283 1083 y(*keyseq,)g(Keymap)g(map,)h(int)
+f(*type)p Fg(\))195 1138 y Fu(Return)i(the)g(function)h(in)o(v)o(ok)o
+(ed)g(b)o(y)f Fk(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fk(map)p
+Fu(.)23 b(If)17 b Fk(map)g Fu(is)g Ft(NULL)p Fu(,)f(the)g(curren)o(t)
+195 1193 y(k)o(eymap)i(is)h(used.)31 b(If)18 b Fk(t)o(yp)q(e)j
+Fu(is)e(not)g Ft(NULL)p Fu(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject)
+f(is)h(returned)g(in)g(the)f Ft(int)195 1247 y Fu(v)m(ariable)f(it)e(p)
+q(oin)o(ts)h(to)e(\(one)h(of)g Ft(ISFUNC)p Fu(,)f Ft(ISKMAP)p
+Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1762 1347 y(F)l(unction)-1861
+b Fi(char)20 b(**)f Fh(rl)p 312 1347 V 21 w(in)n(v)n(oking)p
+541 1347 V 23 w(k)n(eyseqs)k Fg(\()p Ft(rl_command_func_t)13
+b(*function)p Fg(\))195 1402 y Fu(Return)i(an)h(arra)o(y)e(of)h
+(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in)
+o(v)o(ok)o(e)h Fk(function)g Fu(in)195 1457 y(the)f(curren)o(t)g(k)o
+(eymap.)1762 1557 y(F)l(unction)-1861 b Fi(char)20 b(**)f
+Fh(rl)p 312 1557 V 21 w(in)n(v)n(oking)p 541 1557 V 23
+w(k)n(eyseqs)p 750 1557 V 21 w(in)p 818 1557 V 22 w(map)i
+Fg(\()p Ft(rl_command_func_t)283 1612 y(*function,)13
+b(Keymap)i(map)p Fg(\))195 1667 y Fu(Return)g(an)h(arra)o(y)e(of)h
+(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in)
+o(v)o(ok)o(e)h Fk(function)g Fu(in)195 1722 y(the)f(k)o(eymap)g
+Fk(map)p Fu(.)1762 1822 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 1822 V 21 w(function)p 467 1822 V 21 w(dump)r(er)g
+Fg(\()p Ft(int)15 b(readable)p Fg(\))195 1876 y Fu(Prin)o(t)g(the)f
+(readline)j(function)e(names)g(and)f(the)h(k)o(ey)g(sequences)g(curren)
+o(tly)g(b)q(ound)h(to)e(them)h(to)195 1931 y Ft(rl_outstream)p
+Fu(.)j(If)c Fk(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)h
+(formatted)d(in)j(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)195
+1986 y(b)q(e)i(made)f(part)g(of)f(an)i Ft(inputrc)e Fu(\014le)i(and)f
+(re-read.)1762 2086 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 2086 V 21 w(list)p 337 2086 V 22 w(funmap)p
+550 2086 V 18 w(names)h Fg(\()p Ft(void)p Fg(\))195 2141
+y Fu(Prin)o(t)15 b(the)g(names)h(of)e(all)j(bindable)g(Readline)f
+(functions)g(to)f Ft(rl_outstream)p Fu(.)1762 2241 y(F)l(unction)-1861
+b Fi(const)20 b(char)g(**)f Fh(rl)p 462 2241 V 21 w(funmap)p
+674 2241 V 18 w(names)i Fg(\()p Ft(void)p Fg(\))195 2296
+y Fu(Return)13 b(a)f(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g
+(function)g(names.)20 b(The)13 b(arra)o(y)f(is)h(sorted.)19
+b(The)195 2351 y(arra)o(y)11 b(itself)j(is)f(allo)q(cated,)h(but)f(not)
+f(the)h(strings)f(inside.)21 b(Y)l(ou)13 b(should)h Ft(free\(\))d
+Fu(the)i(arra)o(y)e(when)195 2405 y(y)o(ou)k(are)g(done,)g(but)g(not)g
+(the)g(p)q(oin)o(ters.)1762 2506 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(add)p 328 2506
+V 20 w(funmap)p 539 2506 V 18 w(en)n(try)j Fg(\()p Ft(const)14
+b(char)h(*name,)f(rl_command_func_t)283 2560 y(*function)p
+Fg(\))195 2615 y Fu(Add)j Fk(name)i Fu(to)d(the)g(list)h(of)f(bindable)
+j(Readline)f(command)e(names,)g(and)h(mak)o(e)f Fk(function)h
+Fu(the)195 2670 y(function)f(to)f(b)q(e)g(called)i(when)f
+Fk(name)i Fu(is)d(in)o(v)o(ok)o(ed.)p eop
 %%Page: 32 34
-32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)75
-183 y(p)q(erforms)h(some)f(additional)j(w)o(ork,)d(whic)o(h)i(will)h
-(cause)e(an)o(y)g(partially-en)o(tered)h(line)h(to)d(b)q(e)i(ab)q
-(orted)75 238 y(\(see)c(the)g(description)i(of)e Ft(rl_free_line_state)
-e(\(\))p Fu(\).)137 307 y(There)i(is)h(an)f(additional)h(Readline)h
-(signal)f(handler,)g(for)e Ft(SIGWINCH)p Fu(,)g(whic)o(h)h(the)g(k)o
-(ernel)h(sends)g(to)75 362 y(a)i(pro)q(cess)h(whenev)o(er)h(the)e
-(terminal's)h(size)h(c)o(hanges)f(\(for)f(example,)i(if)f(a)f(user)h
-(resizes)h(an)e Ft(xterm)p Fu(\).)75 417 y(The)k(Readline)h
-Ft(SIGWINCH)d Fu(handler)j(up)q(dates)e(Readline's)i(in)o(ternal)g
-(screen)e(size)i(state,)e(and)h(then)75 472 y(calls)c(an)o(y)f
-Ft(SIGWINCH)e Fu(signal)j(handler)g(the)f(calling)i(application)f(has)f
-(installed.)27 b(Readline)19 b(calls)f(the)75 527 y(application's)h
-Ft(SIGWINCH)d Fu(signal)j(handler)f(without)g(resetting)g(the)f
-(terminal)i(to)e(its)g(original)i(state.)75 581 y(If)d(the)g
-(application's)h(signal)g(handler)g(do)q(es)g(more)e(than)h(up)q(date)h
-(its)f(idea)h(of)e(the)h(terminal)h(size)g(and)75 636
-y(return)e(\(for)f(example,)h(a)g Ft(longjmp)f Fu(bac)o(k)g(to)h(a)f
-(main)h(pro)q(cessing)h(lo)q(op\),)f(it)g Fm(m)o(ust)g
-Fu(call)i Ft(rl_cleanup_)75 691 y(after_signal)d(\(\))g
-Fu(\(describ)q(ed)j(b)q(elo)o(w\),)e(to)g(restore)f(the)i(terminal)g
-(state.)137 760 y(Readline)h(pro)o(vides)e(t)o(w)o(o)e(v)m(ariables)i
-(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g(whether)h
-(or)e(not)75 815 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f
-(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25
-b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 870 y(applications)j(c)o
-(hange)e(the)g(v)m(alues)i(of)d(these)i(v)m(ariables)g(only)g(when)g
-(calling)g Ft(readline)d(\(\))p Fu(,)h(not)h(in)h(a)75
-925 y(signal)e(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g
-(state)e(is)i(not)f(corrupted.)1661 1021 y(V)l(ariable)-1749
-b Fi(int)20 b Fh(rl)p 215 1021 18 3 v 21 w(catc)n(h)p
-366 1021 V 22 w(signals)195 1076 y Fu(If)h(this)h(v)m(ariable)g(is)g
-(non-zero,)g(Readline)i(will)e(install)h(signal)f(handlers)g(for)e
-Ft(SIGINT)p Fu(,)195 1131 y Ft(SIGQUIT)p Fu(,)14 b Ft(SIGTERM)p
-Fu(,)g Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)h Ft(SIGTTIN)p
-Fu(,)g(and)h Ft(SIGTTOU)p Fu(.)195 1200 y(The)g(default)h(v)m(alue)h
-(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1661 1297 y(V)l(ariable)-1749
-b Fi(int)20 b Fh(rl)p 215 1297 V 21 w(catc)n(h)p 366
-1297 V 22 w(sigwinc)n(h)195 1351 y Fu(If)15 b(this)h(v)m(ariable)g(is)g
-(non-zero,)f(Readline)i(will)g(install)f(a)f(signal)h(handler)g(for)e
-Ft(SIGWINCH)p Fu(.)195 1421 y(The)h(default)h(v)m(alue)h(of)d
-Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1517 y(If)g(an)f(application)j
-(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)j(catc)o(h)e(an)o(y)
-f(signals,)h(or)f(to)f(handle)j(signals)75 1572 y(other)i(than)g(those)
-g(Readline)j(catc)o(hes)d(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h
-(Readline)i(pro)o(vides)d(con)o(v)o(enience)75 1627 y(functions)d(to)f
-(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o
-(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1650 1723
-y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1723 V
-21 w(clean)n(up)p 450 1723 V 22 w(after)p 590 1723 V
-20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 1778 y Fu(This)12
-b(function)h(will)g(reset)f(the)g(state)f(of)g(the)h(terminal)h(to)e
-(what)g(it)h(w)o(as)f(b)q(efore)h Ft(readline)195 1833
-y(\(\))f Fu(w)o(as)f(called,)j(and)e(remo)o(v)o(e)g(the)g(Readline)i
-(signal)f(handlers)g(for)e(all)i(signals,)h(dep)q(ending)195
-1888 y(on)i(the)g(v)m(alues)i(of)e Ft(rl_catch_signals)d
-Fu(and)k Ft(rl_catch_sigwinch)p Fu(.)1650 1984 y(F)l(unction)-1749
-b Fi(void)20 b Fh(rl)p 241 1984 V 21 w(free)p 356 1984
-V 20 w(line)p 464 1984 V 23 w(state)j Fg(\()p Ft(void)p
-Fg(\))195 2039 y Fu(This)e(will)h(free)e(an)o(y)g(partial)g(state)g
-(asso)q(ciated)g(with)g(the)h(curren)o(t)f(input)h(line)h(\(undo)195
-2094 y(information,)d(an)o(y)f(partial)h(history)f(en)o(try)l(,)h(an)o
-(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)195
-2148 y(and)c(an)o(y)f(partially-en)o(tered)i(n)o(umeric)f(argumen)o
-(t\).)k(This)c(should)h(b)q(e)f(called)h(b)q(efore)e
-Ft(rl_)195 2203 y(cleanup_after_signal)f(\(\))p Fu(.)23
-b(The)16 b(Readline)j(signal)e(handler)g(for)f Ft(SIGINT)f
-Fu(calls)j(this)195 2258 y(to)d(ab)q(ort)f(the)h(curren)o(t)h(input)g
-(line.)1650 2354 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p
-241 2354 V 21 w(reset)p 383 2354 V 20 w(after)p 521 2354
-V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 2409 y Fu(This)d(will)h
-(reinitialize)i(the)c(terminal)i(and)e(reinstall)i(an)o(y)e(Readline)j
-(signal)e(handlers,)195 2464 y(dep)q(ending)d(on)f(the)f(v)m(alues)h
-(of)f Ft(rl_catch_signals)e Fu(and)i Ft(rl_catch_sigwinch)p
-Fu(.)137 2560 y(If)20 b(an)g(application)h(do)q(es)f(not)g(wish)g
-(Readline)i(to)d(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f(call)h
-Ft(rl_resize_)75 2615 y(terminal)14 b(\(\))i Fu(to)g(force)g(Readline)j
-(to)d(up)q(date)h(its)g(idea)g(of)f(the)g(terminal)i(size)f(when)g(a)f
-Ft(SIGWINCH)f Fu(is)75 2670 y(receiv)o(ed.)p eop
+32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 251
+y Fu(Supp)q(orting)14 b(the)g(undo)f(command)g(is)h(a)f(painless)h
+(thing,)g(and)f(mak)o(es)g(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75
+306 y(useful.)21 b(It)15 b(is)h(certainly)g(easy)f(to)g(try)f
+(something)i(if)f(y)o(ou)g(kno)o(w)g(y)o(ou)g(can)g(undo)h(it.)137
+378 y(If)21 b(y)o(our)f(function)h(simply)h(inserts)f(text)e(once,)j
+(or)e(deletes)h(text)f(once,)i(and)f(uses)f Ft(rl_insert_)75
+433 y(text\(\))13 b Fu(or)h Ft(rl_delete_text\(\))d Fu(to)j(do)f(it,)h
+(then)h(undoing)g(is)f(already)g(done)h(for)e(y)o(ou)h(automatically)l
+(.)137 506 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o
+(ultiple)i(deletions,)g(or)e(an)o(y)g(com)o(bination)h(of)f(these)g(op)
+q(erations,)75 560 y(y)o(ou)19 b(should)h(group)e(them)h(together)g(in)
+o(to)g(one)g(op)q(eration.)31 b(This)20 b(is)f(done)h(with)f
+Ft(rl_begin_undo_)75 615 y(group\(\))14 b Fu(and)i Ft
+(rl_end_undo_group\(\))p Fu(.)137 688 y(The)g(t)o(yp)q(es)f(of)g(ev)o
+(en)o(ts)g(that)f(can)h(b)q(e)h(undone)g(are:)195 757
+y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)e(UNDO_INSERT,)g
+(UNDO_BEGIN,)g(UNDO_END)h(};)137 830 y Fu(Notice)16 b(that)e
+Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g(some)g(text,)f(and)i
+Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75 885 y(some)e(text.)19
+b(That)14 b(is,)g(the)g(undo)g(co)q(de)g(tells)h(what)e(to)h(undo,)g
+(not)f(ho)o(w)g(to)g(undo)i(it.)k Ft(UNDO_BEGIN)13 b
+Fu(and)75 939 y Ft(UNDO_END)h Fu(are)h(tags)f(added)i(b)o(y)f
+Ft(rl_begin_undo_group\(\))d Fu(and)k Ft(rl_end_undo_group\(\))p
+Fu(.)1762 1072 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1072 18 3 v 21 w(b)r(egin)p 372 1072 V 20 w(undo)p
+517 1072 V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 1127
+y Fu(Begins)16 b(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g
+(construct.)20 b(The)c(undo)g(information)g(usually)195
+1182 y(comes)21 b(from)f(calls)i(to)e Ft(rl_insert_text\(\))e
+Fu(and)j Ft(rl_delete_text\(\))p Fu(,)f(but)h(could)g(b)q(e)h(the)195
+1237 y(result)16 b(of)e(calls)j(to)d Ft(rl_add_undo\(\))p
+Fu(.)1762 1370 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1370 V 21 w(end)p 326 1370 V 20 w(undo)p 471 1370
+V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 1424 y Fu(Closes)15
+b(the)f(curren)o(t)h(undo)g(group)f(started)g(with)g
+Ft(rl_begin_undo_group)f(\(\))p Fu(.)19 b(There)c(should)195
+1479 y(b)q(e)h(one)f(call)i(to)d Ft(rl_end_undo_group\(\))f
+Fu(for)h(eac)o(h)h(call)i(to)d Ft(rl_begin_undo_group\(\))p
+Fu(.)1762 1612 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
+241 1612 V 21 w(add)p 354 1612 V 20 w(undo)i Fg(\()p
+Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)h(char)283
+1667 y(*text)p Fg(\))195 1722 y Fu(Remem)o(b)q(er)i(ho)o(w)f(to)h(undo)
+g(an)g(ev)o(en)o(t)g(\(according)g(to)g Fk(what)q Fu(\).)24
+b(The)17 b(a\013ected)g(text)f(runs)i(from)195 1776 y
+Fk(start)d Fu(to)g Fk(end)p Fu(,)g(and)g(encompasses)h
+Fk(text)p Fu(.)1762 1909 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 1909 V 21 w(free)p 356 1909 V 20 w(undo)p
+501 1909 V 20 w(list)k Fg(\()p Ft(void)p Fg(\))195 1964
+y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1762
+2097 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2097
+V 21 w(do)p 297 2097 V 20 w(undo)i Fg(\()p Ft(void)p
+Fg(\))195 2152 y Fu(Undo)12 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h
+(list.)19 b(Returns)11 b Ft(0)h Fu(if)g(there)f(w)o(as)g(nothing)h(to)e
+(undo,)j(non-zero)195 2206 y(if)j(something)f(w)o(as)f(undone.)137
+2309 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i
+(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,)
+75 2364 y(c)o(hange)j(its)h(case\),)g(call)g Ft(rl_modifying\(\))e
+Fu(once,)i(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f(text.)32
+b(Y)l(ou)20 b(m)o(ust)75 2419 y(supply)c(the)g(indices)h(of)e(the)g
+(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)1762
+2552 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2552
+V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p
+Fg(\))195 2606 y Fu(T)l(ell)22 b(Readline)f(to)e(sa)o(v)o(e)h(the)g
+(text)g(b)q(et)o(w)o(een)g Fk(start)g Fu(and)g Fk(end)j
+Fu(as)c(a)h(single)h(undo)g(unit.)35 b(It)20 b(is)195
+2661 y(assumed)15 b(that)g(y)o(ou)g(will)i(subsequen)o(tly)f(mo)q(dify)
+g(that)e(text.)p eop
 %%Page: 33 35
 33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(33)1650 183 y(F)l(unction)-1749 b Fi(void)20
-b Fh(rl)p 241 183 18 3 v 21 w(resize)p 401 183 V 22 w(terminal)j
-Fg(\()p Ft(void)p Fg(\))195 238 y Fu(Up)q(date)16 b(Readline's)h(in)o
-(ternal)f(screen)f(size.)137 319 y(The)h(follo)o(wing)g(functions)g
-(install)g(and)g(remo)o(v)o(e)e(Readline's)j(signal)f(handlers.)1650
-399 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 399
-V 21 w(set)p 307 399 V 20 w(signals)j Fg(\()p Ft(void)p
-Fg(\))195 454 y Fu(Install)28 b(Readline's)g(signal)f(handler)h(for)e
-Ft(SIGINT)p Fu(,)i Ft(SIGQUIT)p Fu(,)f Ft(SIGTERM)p Fu(,)h
-Ft(SIGALRM)p Fu(,)195 509 y Ft(SIGTSTP)p Fu(,)19 b Ft(SIGTTIN)p
-Fu(,)h Ft(SIGTTOU)p Fu(,)f(and)h Ft(SIGWINCH)p Fu(,)g(dep)q(ending)i
-(on)d(the)h(v)m(alues)h(of)e Ft(rl_)195 564 y(catch_signals)13
-b Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)1650 644 y(F)l(unction)-1749
-b Fi(int)20 b Fh(rl)p 215 644 V 21 w(clear)p 354 644
-V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 699 y Fu(Remo)o(v)o(e)15
-b(all)h(of)f(the)g(Readline)j(signal)e(handlers)g(installed)h(b)o(y)e
-Ft(rl_set_signals)e(\(\))p Fu(.)75 816 y Fs(2.6)33 b(Custom)21
-b(Completers)137 908 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h
-(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g
-(disam)o(biguating)75 963 y(commands)i(and)f(data.)27
-b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can)
-f(pro)o(vide)i(completion)g(for)75 1018 y(commands,)14
-b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g
-(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75
-1073 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75
-1173 y Fl(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137
-1266 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i
-(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m
-(ailable.)75 1321 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f
-(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g
-(all)h(of)f(the)75 1375 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f
-(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)i(library)e
-(pro)o(vides)g(the)g(user)75 1430 y(in)o(terface)f(to)f(completion,)i
-(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:)
-23 b(\014lename)18 b(and)75 1485 y(username.)h(F)l(or)10
-b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f
-(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75
-1540 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g
-(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137
-1603 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q
-(erform)g(completion:)100 1667 y(1.)29 b(The)21 b(user-in)o(terface)g
-(function)g Ft(rl_complete)14 b(\(\))p Fu(.)35 b(This)21
-b(function)g(is)g(called)h(with)f(the)f(same)165 1721
-y(argumen)o(ts)c(as)g(other)h(Readline)i(functions)f(in)o(tended)g(for)
-e(in)o(teractiv)o(e)i(use:)23 b Fm(coun)o(t)18 b Fu(and)f
-Fm(in)o(v)o(ok-)165 1776 y(ing)p 228 1776 14 2 v 17 w(k)o(ey)p
-Fu(.)34 b(It)20 b(isolates)g(the)g(w)o(ord)f(to)h(b)q(e)g(completed)h
-(and)f(calls)h Ft(completion_matches)13 b(\(\))20 b Fu(to)165
-1831 y(generate)f(a)f(list)i(of)e(p)q(ossible)j(completions.)32
-b(It)18 b(then)i(either)f(lists)h(the)f(p)q(ossible)h(completions,)165
-1886 y(inserts)g(the)f(p)q(ossible)j(completions,)f(or)e(actually)h(p)q
-(erforms)f(the)h(completion,)h(dep)q(ending)h(on)165
-1940 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)100
-2004 y(2.)29 b(The)11 b(in)o(ternal)g(function)g Ft(completion_matches)
-i(\(\))d Fu(uses)h(y)o(our)e Fm(generator)k Fu(function)e(to)f
-(generate)165 2059 y(the)16 b(list)h(of)f(p)q(ossible)i(matc)o(hes,)d
-(and)h(then)h(returns)f(the)g(arra)o(y)f(of)g(these)i(matc)o(hes.)22
-b(Y)l(ou)16 b(should)165 2113 y(place)g(the)f(address)h(of)e(y)o(our)h
-(generator)f(function)i(in)g Ft(rl_completion_entry_function)p
-Fu(.)100 2177 y(3.)29 b(The)19 b(generator)e(function)j(is)f(called)h
-(rep)q(eatedly)f(from)f Ft(completion_matches)13 b(\(\))p
-Fu(,)18 b(returning)165 2232 y(a)e(string)g(eac)o(h)h(time.)24
-b(The)17 b(argumen)o(ts)e(to)h(the)g(generator)g(function)h(are)f
-Fm(text)h Fu(and)g Fm(state)p Fu(.)22 b Fm(text)165 2286
-y Fu(is)17 b(the)f(partial)g(w)o(ord)f(to)h(b)q(e)h(completed.)23
-b Fm(state)18 b Fu(is)e(zero)g(the)g(\014rst)g(time)g(the)g(function)h
-(is)g(called,)165 2341 y(allo)o(wing)f(the)e(generator)g(to)g(p)q
-(erform)h(an)o(y)f(necessary)h(initialization,)j(and)d(a)f(p)q(ositiv)o
-(e)i(non-zero)165 2396 y(in)o(teger)i(for)f(eac)o(h)g(subsequen)o(t)h
-(call.)28 b(When)18 b(the)g(generator)f(function)h(returns)f
-Ft(\(char)e(*\)NULL)165 2451 y Fu(this)h(signals)h Ft
-(completion_matches)c(\(\))i Fu(that)g(there)h(are)g(no)g(more)f(p)q
-(ossibilitie)q(s)j(left.)23 b(Usually)165 2506 y(the)c(generator)g
-(function)h(computes)g(the)f(list)h(of)f(p)q(ossible)i(completions)g
-(when)e Fm(state)j Fu(is)d(zero,)165 2560 y(and)13 b(returns)g(them)f
-(one)h(at)f(a)h(time)g(on)g(subsequen)o(t)g(calls.)20
-b(Eac)o(h)13 b(string)f(the)h(generator)f(function)165
-2615 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h(b)q(e)g(allo)q(cated)h
-(with)g Ft(malloc\(\))p Fu(;)d(Readline)19 b(frees)d(the)g(strings)f
-(when)165 2670 y(it)g(has)h(\014nished)g(with)g(them.)p
-eop
+(Readline)843 b(33)75 149 y Fj(2.4.6)30 b(Redispla)n(y)1762
+302 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241
+302 18 3 v 21 w(redispla)n(y)k Fg(\()p Ft(void)p Fg(\))195
+356 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)g(screen)g(to)
+f(re\015ect)i(the)f(curren)o(t)f(con)o(ten)o(ts)h(of)f
+Ft(rl_line_)195 411 y(buffer)p Fu(.)1762 534 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 534 V 21 w(forced)p 390 534
+V 20 w(up)r(date)p 584 534 V 20 w(displa)n(y)k Fg(\()p
+Ft(void)p Fg(\))195 589 y Fu(F)l(orce)c(the)g(line)h(to)e(b)q(e)i(up)q
+(dated)f(and)g(redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)i
+(thinks)g(the)195 644 y(screen)16 b(displa)o(y)g(is)g(correct.)1762
+767 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 767
+V 21 w(on)p 297 767 V 20 w(new)p 416 767 V 21 w(line)k
+Fg(\()p Ft(void)p Fg(\))195 822 y Fu(T)l(ell)16 b(the)f(up)q(date)h
+(functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h
+(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 877
+y(ouputting)f(a)e(newline.)1762 1000 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1000 V 21 w(on)p 297 1000 V
+20 w(new)p 416 1000 V 21 w(line)p 525 1000 V 22 w(with)p
+657 1000 V 22 w(prompt)h Fg(\()p Ft(void)p Fg(\))195
+1055 y Fu(T)l(ell)14 b(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha)
+o(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f
+Fk(rl)p 1556 1055 14 2 v 17 w(prompt)g Fu(already)195
+1109 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f
+(applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g
+(string)195 1164 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)
+e(kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21
+b(It)195 1219 y(should)16 b(b)q(e)g(used)g(after)e(setting)i
+Fk(rl)p 795 1219 V 16 w(already)p 956 1219 V 17 w(prompted)p
+Fu(.)1762 1342 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1342 18 3 v 21 w(reset)p 357 1342 V 20 w(line)p 465
+1342 V 23 w(state)j Fg(\()p Ft(void)p Fg(\))195 1397
+y Fu(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f
+(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195
+1452 y(new)e(line.)1762 1575 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 1575 V 21 w(crlf)j Fg(\()p Ft(void)p Fg(\))195
+1630 y Fu(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g
+(next)g(screen)h(line.)1762 1753 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1753 V 21 w(sho)n(w)p 359 1753
+V 20 w(c)n(har)j Fg(\()p Ft(int)14 b(c)p Fg(\))195 1807
+y Fu(Displa)o(y)j(c)o(haracter)e Fk(c)20 b Fu(on)c Ft(rl_outstream)p
+Fu(.)21 b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j
+(meta)195 1862 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o
+(v)o(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g
+(sequence.)195 1917 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g
+(applications)i(whic)o(h)f(wish)g(to)f(do)g(their)g(o)o(wn)g(redispla)o
+(y)l(.)1762 2040 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2040 V 21 w(message)g Fg(\()p Ft(const)14 b(char)h(*,)g(...)p
+Fg(\))195 2095 y Fu(The)c(argumen)o(ts)e(are)h(a)g(format)f(string)h
+(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)c Ft(printf)p
+Fu(,)h(p)q(ossibly)i(con)o(taining)195 2150 y(con)o(v)o(ersion)22
+b(sp)q(eci\014cations)i(suc)o(h)f(as)e(`)p Ft(\045d)p
+Fu(',)i(and)f(an)o(y)g(additional)h(argumen)o(ts)e(necessary)i(to)195
+2205 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q(eci\014cations.)38
+b(The)21 b(resulting)h(string)e(is)i(displa)o(y)o(ed)g(in)f(the)g
+Fk(ec)o(ho)195 2259 y(area)p Fu(.)e(The)d(ec)o(ho)f(area)g(is)g(also)g
+(used)h(to)f(displa)o(y)h(n)o(umeric)g(argumen)o(ts)f(and)g(searc)o(h)g
+(strings.)1762 2382 y(F)l(unction)-1861 b Fi(int)20 b
+Fh(rl)p 215 2382 V 21 w(clear)p 354 2382 V 21 w(message)h
+Fg(\()p Ft(void)p Fg(\))195 2437 y Fu(Clear)15 b(the)h(message)e(in)i
+(the)g(ec)o(ho)f(area.)1762 2560 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2560 V 21 w(sa)n(v)n(e)p 365
+2560 V 21 w(prompt)h Fg(\()p Ft(void)p Fg(\))195 2615
+y Fu(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h(prompt)e(displa)o(y)i
+(state)e(in)h(preparation)f(for)g(displa)o(ying)j(a)d(new)195
+2670 y(message)15 b(in)h(the)f(message)g(area)f(with)i
+Ft(rl_message\(\))p Fu(.)p eop
 %%Page: 34 36
-34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)i(Library)1650
-183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183
-18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
-(invoking_key)p Fg(\))195 238 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g
-(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j
-(the)e(function)h(that)195 293 y(do)q(es)15 b(the)g(initial)h(simple)h
-(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches)
-195 348 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g(\014lename)
-h(completion.)1661 448 y(V)l(ariable)-1749 b Fi(Function)20
-b(*)g Fh(rl)p 391 448 V 21 w(completion)p 686 448 V 21
-w(en)n(try)p 839 448 V 21 w(function)195 503 y Fu(This)c(is)f(a)g(p)q
-(oin)o(ter)g(to)g(the)g(generator)f(function)i(for)e
-Ft(completion_matches)f(\(\))p Fu(.)20 b(If)15 b(the)195
-558 y(v)m(alue)21 b(of)e Ft(rl_completion_entry_functio)o(n)e
-Fu(is)j Ft(\(Function)14 b(*\)NULL)19 b Fu(then)h(the)f(de-)195
-613 y(fault)11 b(\014lename)h(generator)d(function,)j
-Ft(filename_completion_function)g(\(\))p Fu(,)f(is)g(used.)75
-734 y Fl(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137
-834 y Fu(Here)16 b(is)f(the)h(complete)g(list)g(of)e(callable)k
-(completion)e(functions)g(presen)o(t)f(in)h(Readline.)1650
-935 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 935
-V 21 w(complete)p 460 935 V 21 w(in)n(ternal)k Fg(\()p
-Ft(int)15 b(what_to_do)p Fg(\))195 990 y Fu(Complete)k(the)f(w)o(ord)g
-(at)g(or)g(b)q(efore)g(p)q(oin)o(t.)30 b Fm(what)p 1105
-990 14 2 v 16 w(to)p 1162 990 V 16 w(do)21 b Fu(sa)o(ys)c(what)h(to)g
-(do)g(with)h(the)195 1045 y(completion.)33 b(A)19 b(v)m(alue)h(of)f(`)p
-Ft(?)p Fu(')f(means)h(list)h(the)f(p)q(ossible)i(completions.)33
-b(`)p Ft(TAB)p Fu(')18 b(means)195 1099 y(do)g(standard)g(completion.)
-30 b(`)p Ft(*)p Fu(')18 b(means)g(insert)g(all)i(of)d(the)i(p)q
-(ossible)h(completions.)30 b(`)p Ft(!)p Fu(')195 1154
-y(means)17 b(to)f(displa)o(y)i(all)g(of)e(the)h(p)q(ossible)i
-(completions,)f(if)f(there)g(is)g(more)g(than)f(one,)h(as)195
-1209 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f(completion.)1650
-1310 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1310
-18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
-(invoking_key)p Fg(\))195 1365 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g
-(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j
-(the)e(function)h(that)195 1419 y(do)q(es)15 b(the)g(initial)h(simple)h
-(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches)
-195 1474 y(\(\))h Fu(and)h Ft(rl_completion_entry_functi)o(on)p
-Fu(\).)i(The)e(default)g(is)g(to)f(do)g(\014lename)i(com-)195
-1529 y(pletion.)k(This)15 b(calls)g Ft(rl_complete_internal)e(\(\))h
-Fu(with)h(an)f(argumen)o(t)f(dep)q(ending)k(on)195 1584
-y Fm(in)o(v)o(oking)p 364 1584 14 2 v 17 w(k)o(ey)p Fu(.)1650
-1685 y(F)l(unction)-1749 b Fi(int)19 b Fh(rl)p 214 1685
-18 3 v 21 w(p)r(ossible)p 432 1685 V 20 w(completions)k
-Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))195
-1739 y Fu(List)k(the)f(p)q(ossible)i(completions.)29
-b(See)19 b(description)h(of)d Ft(rl_complete)d(\(\))p
-Fu(.)28 b(This)19 b(calls)195 1794 y Ft(rl_complete_internal)12
-b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p
-Fu('.)1650 1895 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
-215 1895 V 21 w(insert)p 378 1895 V 21 w(completions)j
-Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195
-1950 y Fu(Insert)24 b(the)h(list)f(of)g(p)q(ossible)i(completions)f(in)
-o(to)f(the)g(line,)k(deleting)e(the)e(partially-)195
-2004 y(completed)16 b(w)o(ord.)j(See)c(description)i(of)d
-Ft(rl_complete)g(\(\))p Fu(.)19 b(This)d(calls)g Ft(rl_complete_)195
-2059 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p
-Ft(*)p Fu('.)1650 2160 y(F)l(unction)-1749 b Fi(char)20
-b(**)f Fh(completion)p 547 2160 V 21 w(matc)n(hes)j Fg(\()p
-Ft(char)15 b(*text,)f(CPFunction)283 2215 y(*entry_func)p
-Fg(\))195 2270 y Fu(Returns)f(an)f(arra)o(y)f(of)h Ft(\(char)j(*\))d
-Fu(whic)o(h)h(is)g(a)f(list)h(of)f(completions)i(for)e
-Fm(text)p Fu(.)18 b(If)13 b(there)f(are)195 2324 y(no)17
-b(completions,)g(returns)g Ft(\(char)d(**\)NULL)p Fu(.)23
-b(The)17 b(\014rst)f(en)o(try)g(in)i(the)e(returned)h(arra)o(y)195
-2379 y(is)c(the)h(substitution)f(for)g Fm(text)p Fu(.)18
-b(The)13 b(remaining)i(en)o(tries)e(are)f(the)i(p)q(ossible)g
-(completions.)195 2434 y(The)h(arra)o(y)f(is)i(terminated)g(with)f(a)g
-Ft(NULL)g Fu(p)q(oin)o(ter.)195 2506 y Fm(en)o(try)p
-302 2506 14 2 v 16 w(func)g Fu(is)d(a)f(function)h(of)g(t)o(w)o(o)e
-(args,)h(and)g(returns)h(a)f Ft(\(char)k(*\))p Fu(.)j(The)12
-b(\014rst)f(argumen)o(t)195 2560 y(is)j Fm(text)p Fu(.)19
-b(The)14 b(second)g(is)g(a)f(state)f(argumen)o(t;)h(it)h(is)g(zero)f
-(on)h(the)f(\014rst)g(call,)i(and)f(non-zero)195 2615
-y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714
-2615 V 16 w(func)c Fu(returns)d(a)f Ft(NULL)h Fu(p)q(oin)o(ter)g(to)f
-(the)h(caller)h(when)g(there)195 2670 y(are)g(no)g(more)g(matc)o(hes.)p
-eop
+34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)h(Library)1762
+149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149
+18 3 v 21 w(restore)p 436 149 V 20 w(prompt)g Fg(\()p
+Ft(void)p Fg(\))195 204 y Fu(Restore)g(the)i(lo)q(cal)g(Readline)h
+(prompt)e(displa)o(y)h(state)f(sa)o(v)o(ed)g(b)o(y)g(the)g(most)g
+(recen)o(t)g(call)i(to)195 259 y Ft(rl_save_prompt)p
+Fu(.)1762 369 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 369 V 21 w(expand)p 416 369 V 20 w(prompt)h Fg(\()p
+Ft(char)14 b(*prompt)p Fg(\))195 423 y Fu(Expand)22 b(an)o(y)f(sp)q
+(ecial)i(c)o(haracter)e(sequences)h(in)g Fk(prompt)g
+Fu(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195 478
+y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18
+b(function)h(is)f(called)i(b)o(y)e Ft(readline\(\))p
+Fu(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 533 y(called)12
+b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Ft
+(rl_on_new_line_with_prompt\(\))d Fu(function)195 588
+y(or)12 b Ft(rl_already_prompted)e Fu(v)m(ariable)k(is)g(used.)19
+b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o
+(haracters)195 643 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q(ossibly)
+i(m)o(ulti-line\))g(prompt.)1762 752 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 752 V 21 w(set)p 307 752 V
+20 w(prompt)h Fg(\()p Ft(const)14 b(char)h(*prompt)p
+Fg(\))195 807 y Fu(Mak)o(e)e(Readline)i(use)e Fk(prompt)h
+Fu(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 b(This)14
+b(calls)g Ft(rl_expand_prompt\(\))195 862 y Fu(to)h(expand)g(the)h
+(prompt)e(and)i(sets)f Ft(rl_prompt)f Fu(to)g(the)h(result.)75
+970 y Fj(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1762
+1108 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
+1108 V 21 w(insert)p 378 1108 V 21 w(text)k Fg(\()p Ft(const)14
+b(char)g(*text)p Fg(\))195 1163 y Fu(Insert)i Fk(text)g
+Fu(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f(cursor)h(p)q
+(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f(c)o(har-)195
+1218 y(acters)g(inserted.)1762 1328 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1328 V 21 w(delete)p 383 1328
+V 22 w(text)k Fg(\()p Ft(int)14 b(start,)h(int)f(end)p
+Fg(\))195 1382 y Fu(Delete)19 b(the)g(text)g(b)q(et)o(w)o(een)g
+Fk(start)g Fu(and)g Fk(end)i Fu(in)f(the)f(curren)o(t)f(line.)33
+b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 1437 y(c)o(haracters)14
+b(deleted.)1762 1547 y(F)l(unction)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 1547 V 21 w(cop)n(y)p 421 1547 V 21
+w(text)24 b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p
+Fg(\))195 1602 y Fu(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o
+(w)o(een)i Fk(start)f Fu(and)g Fk(end)j Fu(in)e(the)f(curren)o(t)g
+(line.)1762 1711 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1711 V 21 w(kill)p 311 1711 V 23 w(text)k Fg(\()p
+Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 1766 y Fu(Cop)o(y)i(the)g
+(text)f(b)q(et)o(w)o(een)i Fk(start)f Fu(and)g Fk(end)i
+Fu(in)f(the)f(curren)o(t)g(line)i(to)e(the)g(kill)i(ring,)e(app)q
+(ending)195 1821 y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e
+(the)g(last)g(command)g(w)o(as)f(a)h(kill)i(command.)25
+b(The)17 b(text)f(is)195 1876 y(deleted.)26 b(If)17 b
+Fk(start)g Fu(is)g(less)g(than)g Fk(end)p Fu(,)g(the)g(text)g(is)g(app)
+q(ended,)h(otherwise)f(prep)q(ended.)27 b(If)17 b(the)195
+1930 y(last)e(command)g(w)o(as)g(not)f(a)h(kill,)i(a)e(new)g(kill)i
+(ring)f(slot)f(is)h(used.)1762 2040 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2040 V 21 w(push)p 355 2040
+V 19 w(macro)p 529 2040 V 19 w(input)k Fg(\()p Ft(char)14
+b(*macro)p Fg(\))195 2095 y Fu(Cause)g Fk(macro)i Fu(to)d(b)q(e)i
+(inserted)g(in)o(to)f(the)g(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o
+(v)o(ok)o(ed)g(b)o(y)f(a)g(k)o(ey)g(b)q(ound)h(to)195
+2150 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g
+Ft(rl_insert_text\(\))d Fu(instead.)75 2257 y Fj(2.4.8)30
+b(Character)21 b(Input)1762 2396 y Fu(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2396 V 21 w(read)p 346 2396
+V 20 w(k)n(ey)k Fg(\()p Ft(void)p Fg(\))195 2451 y Fu(Return)14
+b(the)h(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e(Readline's)i
+(curren)o(t)f(input)g(stream.)k(This)d(han-)195 2506
+y(dles)f(input)g(inserted)f(in)o(to)g(the)g(input)h(stream)e(via)h
+Fk(rl)p 1117 2506 14 2 v 17 w(p)q(ending)p 1290 2506
+V 18 w(input)i Fu(\(see)e(Section)h(2.3)e([Read-)195
+2560 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h
+Ft(rl_stuff_char\(\))p Fu(,)e(macros,)h(and)h(c)o(haracters)f(read)h
+(from)195 2615 y(the)d(k)o(eyb)q(oard.)25 b(While)19
+b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)f(an)o(y)e
+(function)i(assigned)195 2670 y(to)d(the)g Ft(rl_event_hook)e
+Fu(v)m(ariable.)p eop
 %%Page: 35 37
 35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(35)1650 183 y(F)l(unction)-1749 b Fi(char)20
-b(*)f Fh(\014lename)p 455 183 18 3 v 20 w(completion)p
-749 183 V 21 w(function)k Fg(\()p Ft(char)15 b(*text,)f(int)283
-238 y(state)p Fg(\))195 293 y Fu(A)19 b(generator)g(function)h(for)f
-(\014lename)h(completion)h(in)f(the)f(general)h(case.)33
-b(Note)19 b(that)195 348 y(completion)e(in)f(Bash)f(is)h(a)f(little)i
-(di\013eren)o(t)f(b)q(ecause)g(of)f(all)h(the)g(pathnames)f(that)g(m)o
-(ust)195 402 y(b)q(e)i(follo)o(w)o(ed)g(when)g(lo)q(oking)h(up)f
-(completions)h(for)e(a)g(command.)24 b(The)17 b(Bash)g(source)f(is)195
-457 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h
-(functions.)1650 539 y(F)l(unction)-1749 b Fi(char)20
-b(*)f Fh(username)p 487 539 V 19 w(completion)p 780 539
-V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283
-594 y(state)p Fg(\))195 649 y Fu(A)k(completion)g(generator)f(for)g
-(usernames.)28 b Fm(text)18 b Fu(con)o(tains)f(a)h(partial)g(username)g
-(pre-)195 704 y(ceded)f(b)o(y)f(a)g(random)f(c)o(haracter)h(\(usually)h
-(`)p Ft(~)p Fu('\).)k(As)16 b(with)g(all)h(completion)g(generators,)195
-759 y Fm(state)g Fu(is)f(zero)f(on)g(the)g(\014rst)g(call)h(and)g
-(non-zero)f(for)g(subsequen)o(t)h(calls.)75 861 y Fl(2.6.3)30
-b(Completion)20 b(V)-5 b(ariables)1661 972 y Fu(V)l(ariable)-1749
-b Fi(Function)20 b(*)g Fh(rl)p 391 972 V 21 w(completion)p
-686 972 V 21 w(en)n(try)p 839 972 V 21 w(function)195
-1026 y Fu(A)c(p)q(oin)o(ter)h(to)e(the)i(generator)e(function)i(for)e
-Ft(completion_matches)e(\(\))p Fu(.)22 b Ft(NULL)16 b
-Fu(means)195 1081 y(to)f(use)g Ft(filename_completion_functio)o(n)d
-(\(\))p Fu(,)j(the)g(default)h(\014lename)g(completer.)1661
-1163 y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p
-469 1163 V 21 w(attempted)p 749 1163 V 20 w(completion)p
-1043 1163 V 21 w(function)195 1218 y Fu(A)d(p)q(oin)o(ter)h(to)f(an)g
-(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)23
-b(The)16 b(function)i(is)e(called)195 1273 y(with)f Fm(text)p
-Fu(,)g Fm(start)p Fu(,)e(and)i Fm(end)p Fu(.)21 b Fm(start)15
-b Fu(and)g Fm(end)i Fu(are)e(indices)i(in)f Ft(rl_line_buffer)d
-Fu(sa)o(ying)195 1328 y(what)22 b(the)h(b)q(oundaries)h(of)e
-Fm(text)h Fu(are.)42 b(If)23 b(this)g(function)h(exists)f(and)f
-(returns)h Ft(NULL)p Fu(,)195 1383 y(or)c(if)h(this)g(v)m(ariable)h(is)
-f(set)g(to)e Ft(NULL)p Fu(,)i(then)g Ft(rl_complete)14
-b(\(\))19 b Fu(will)i(call)g(the)f(v)m(alue)g(of)195
-1437 y Ft(rl_completion_entry_functi)o(on)14 b Fu(to)j(generate)g(matc)
-o(hes,)g(otherwise)g(the)g(arra)o(y)f(of)195 1492 y(strings)f(returned)
-h(will)h(b)q(e)e(used.)1661 1574 y(V)l(ariable)-1749
-b Fi(CPFunction)21 b(*)e Fh(rl)p 443 1574 V 21 w(\014lename)p
-672 1574 V 20 w(quoting)p 881 1574 V 21 w(function)195
-1629 y Fu(A)g(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(quote)f
-(a)f(\014lename)i(in)g(an)e(application-)j(sp)q(eci\014c)195
-1684 y(fashion.)33 b(This)20 b(is)g(called)h(if)f(\014lename)g
-(completion)h(is)f(b)q(eing)g(attempted)f(and)h(one)f(of)195
-1739 y(the)13 b(c)o(haracters)f(in)h Ft(rl_filename_quote_characte)o
-(rs)d Fu(app)q(ears)i(in)i(a)e(completed)i(\014le-)195
-1793 y(name.)29 b(The)18 b(function)h(is)g(called)h(with)e
-Fm(text)p Fu(,)g Fm(matc)o(h)p 1144 1793 14 2 v 16 w(t)o(yp)q(e)p
-Fu(,)h(and)f Fm(quote)p 1480 1793 V 16 w(p)q(oin)o(ter)p
-Fu(.)30 b(The)195 1848 y Fm(text)17 b Fu(is)h(the)f(\014lename)h(to)e
-(b)q(e)h(quoted.)25 b(The)17 b Fm(matc)o(h)p 1115 1848
-V 16 w(t)o(yp)q(e)i Fu(is)f(either)f Ft(SINGLE_MATCH)p
-Fu(,)e(if)195 1903 y(there)j(is)g(only)h(one)f(completion)h(matc)o(h,)f
-(or)f Ft(MULT_MATCH)p Fu(.)27 b(Some)18 b(functions)g(use)h(this)195
-1958 y(to)13 b(decide)i(whether)f(or)g(not)f(to)g(insert)h(a)f(closing)
-i(quote)f(c)o(haracter.)k(The)c Fm(quote)p 1600 1958
-V 16 w(p)q(oin)o(ter)195 2013 y Fu(is)20 b(a)g(p)q(oin)o(ter)g(to)f(an)
-o(y)g(op)q(ening)i(quote)e(c)o(haracter)g(the)h(user)g(t)o(yp)q(ed.)34
-b(Some)19 b(functions)195 2067 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o
-(haracter.)1661 2150 y(V)l(ariable)-1749 b Fi(CPFunction)21
-b(*)e Fh(rl)p 443 2150 18 3 v 21 w(\014lename)p 672 2150
-V 20 w(dequoting)p 939 2150 V 21 w(function)195 2204
-y Fu(A)14 b(p)q(oin)o(ter)g(to)e(a)i(function)g(that)f(will)i(remo)o(v)
-o(e)e(application-sp)q(eci\014c)k(quoting)d(c)o(haracters)195
-2259 y(from)21 b(a)g(\014lename)h(b)q(efore)f(completion)i(is)f
-(attempted,)g(so)f(those)g(c)o(haracters)f(do)h(not)195
-2314 y(in)o(terfere)e(with)f(matc)o(hing)h(the)f(text)g(against)g
-(names)g(in)h(the)f(\014lesystem.)30 b(It)19 b(is)f(called)195
-2369 y(with)g Fm(text)p Fu(,)g(the)g(text)g(of)g(the)g(w)o(ord)f(to)g
-(b)q(e)i(dequoted,)g(and)f Fm(quote)p 1381 2369 14 2
-v 16 w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 2424
-y(quoting)e(c)o(haracter)f(that)g(delimits)i(the)f(\014lename)h
-(\(usually)f(`)p Ft(')p Fu(')f(or)g(`)p Ft(")p Fu('\).)23
-b(If)17 b Fm(quote)p 1657 2424 V 16 w(c)o(har)195 2478
-y Fu(is)f(zero,)e(the)i(\014lename)g(w)o(as)e(not)h(in)h(an)f(em)o(b)q
-(edded)i(string.)1661 2560 y(V)l(ariable)-1749 b Fi(Function)20
-b(*)g Fh(rl)p 391 2560 18 3 v 21 w(c)n(har)p 519 2560
-V 20 w(is)p 577 2560 V 22 w(quoted)p 770 2560 V 20 w(p)195
-2615 y Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(to)g(call)g(that)g
-(determines)g(whether)g(or)g(not)f(a)g(sp)q(eci\014c)j(c)o(har-)195
-2670 y(acter)12 b(in)i(the)f(line)i(bu\013er)e(is)g(quoted,)g
-(according)h(to)e(whatev)o(er)g(quoting)h(mec)o(hanism)h(the)p
+(Readline)843 b(35)1762 149 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 149 18 3 v 21 w(getc)j Fg(\()p Ft(FILE)14
+b(*stream)p Fg(\))195 204 y Fu(Return)c(the)h(next)g(c)o(haracter)f(a)o
+(v)m(ailable)i(from)e Fk(stream)p Fu(,)g(whic)o(h)i(is)f(assumed)f(to)g
+(b)q(e)i(the)e(k)o(eyb)q(oard.)1762 342 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 342 V 21 w(stu\013)p 346 342
+V 20 w(c)n(har)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 397
+y Fu(Insert)i Fk(c)i Fu(in)o(to)d(the)h(Readline)h(input)f(stream.)23
+b(It)16 b(will)i(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)f
+(Readline)i(attempts)195 452 y(to)13 b(read)g(c)o(haracters)g(from)f
+(the)i(terminal)g(with)g Ft(rl_read_key\(\))p Fu(.)j(Up)d(to)f(512)f(c)
+o(haracters)h(ma)o(y)195 507 y(b)q(e)j(pushed)g(bac)o(k.)k
+Ft(rl_stuff_char)14 b Fu(returns)h(1)g(if)h(the)f(c)o(haracter)g(w)o
+(as)f(successfully)j(inserted;)195 562 y(0)e(otherwise.)1762
+700 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 700
+V 21 w(execute)p 423 700 V 22 w(next)j Fg(\()p Ft(int)15
+b(c)p Fg(\))195 754 y Fu(Mak)o(e)i Fk(c)k Fu(b)q(e)d(the)g(next)g
+(command)g(to)f(b)q(e)i(executed)f(when)h Ft(rl_read_key\(\))d
+Fu(is)i(called.)29 b(This)195 809 y(sets)15 b Fk(rl)p
+317 809 14 2 v 17 w(p)q(ending)p 490 809 V 18 w(input)p
+Fu(.)1762 947 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 947 18 3 v 21 w(clear)p 354 947 V 21 w(p)r(ending)p
+575 947 V 21 w(input)j Fg(\()p Ft(void)p Fg(\))195 1002
+y Fu(Unset)f Fk(rl)p 365 1002 14 2 v 16 w(p)q(ending)p
+537 1002 V 19 w(input)p Fu(,)h(e\013ectiv)o(ely)g(negating)e(the)h
+(e\013ect)f(of)g(an)o(y)h(previous)g(call)h(to)d Ft(rl_)195
+1057 y(execute_next\(\))p Fu(.)29 b(This)19 b(w)o(orks)f(only)h(if)h
+(the)e(p)q(ending)j(input)f(has)f(not)f(already)h(b)q(een)h(read)195
+1112 y(with)c Ft(rl_read_key\(\))p Fu(.)1762 1250 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1250 18 3 v 21 w(set)p 307
+1250 V 20 w(k)n(eyb)r(oard)p 558 1250 V 21 w(input)p
+712 1250 V 21 w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195
+1305 y Fu(While)21 b(w)o(aiting)g(for)e(k)o(eyb)q(oard)h(input)h(in)g
+Ft(rl_read_key\(\))p Fu(,)e(Readline)i(will)h(w)o(ait)e(for)f
+Fk(u)h Fu(mi-)195 1360 y(croseconds)h(for)e(input)j(b)q(efore)f
+(calling)h(an)o(y)e(function)h(assigned)g(to)f Ft(rl_event_hook)p
+Fu(.)34 b(The)195 1414 y(default)16 b(w)o(aiting)f(p)q(erio)q(d)i(is)e
+(one-ten)o(th)h(of)e(a)h(second.)21 b(Returns)14 b(the)i(old)f(timeout)
+h(v)m(alue.)75 1540 y Fj(2.4.9)30 b(T)-5 b(erminal)20
+b(Managemen)n(t)1762 1708 y Fu(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 1708 V 21 w(prep)p 376 1708 V 20 w(terminal)j
+Fg(\()p Ft(int)14 b(meta_flag)p Fg(\))195 1762 y Fu(Mo)q(dify)22
+b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d
+Ft(readline\(\))g Fu(can)i(read)f(a)g(single)195 1817
+y(c)o(haracter)15 b(at)g(a)g(time)i(from)d(the)i(k)o(eyb)q(oard.)22
+b(The)16 b Fk(meta)p 1192 1817 14 2 v 15 w(\015ag)k Fu(argumen)o(t)15
+b(should)h(b)q(e)h(non-zero)195 1872 y(if)f(Readline)g(should)g(read)f
+(eigh)o(t-bit)i(input.)1762 2010 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2010 18 3 v 21 w(deprep)p
+434 2010 V 20 w(terminal)j Fg(\()p Ft(void)p Fg(\))195
+2065 y Fu(Undo)16 b(the)g(e\013ects)f(of)h Ft(rl_prep_terminal\(\))p
+Fu(,)d(lea)o(ving)k(the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h)
+195 2120 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i
+(to)d Ft(rl_prep_terminal\(\))p Fu(.)1762 2258 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2258 V 21 w(tt)n(y)p 334 2258
+V 22 w(set)p 427 2258 V 20 w(default)p 620 2258 V 21
+w(bindings)k Fg(\()p Ft(Keymap)14 b(kmap)p Fg(\))195
+2313 y Fu(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h
+(c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195
+2367 y Ft(stty)p Fu(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.)
+22 b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h Fk(kmap)p
+Fu(.)1762 2506 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2506 V 21 w(reset)p 357 2506 V 20 w(terminal)j Fg(\()p
+Ft(const)15 b(char)f(*terminal_name)p Fg(\))195 2560
+y Fu(Reinitialize)h(Readline's)e(idea)g(of)f(the)g(terminal)h(settings)
+g(using)g Fk(terminal)p 1491 2560 14 2 v 17 w(name)h
+Fu(as)e(the)h(termi-)195 2615 y(nal)k(t)o(yp)q(e)f(\(e.g.,)f
+Ft(vt100)p Fu(\).)21 b(If)c Fk(terminal)p 878 2615 V
+17 w(name)i Fu(is)d Ft(NULL)p Fu(,)g(the)g(v)m(alue)h(of)f(the)g
+Ft(TERM)g Fu(en)o(vironmen)o(t)195 2670 y(v)m(ariable)h(is)e(used.)p
 eop
 %%Page: 36 38
-36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)195
-183 y(program)12 b(calling)j(readline)g(uses.)20 b(The)13
-b(function)h(is)g(called)h(with)f(t)o(w)o(o)e(argumen)o(ts:)18
-b Fm(text)p Fu(,)195 238 y(the)11 b(text)g(of)g(the)g(line,)i(and)f
-Fm(index)p Fu(,)g(the)g(index)g(of)f(the)g(c)o(haracter)g(in)h(the)f
-(line.)20 b(It)11 b(is)h(used)g(to)195 293 y(decide)20
-b(whether)e(a)g(c)o(haracter)g(found)h(in)g Ft
-(rl_completer_word_break_)o(charact)o(ers)195 348 y Fu(should)d(b)q(e)g
-(used)g(to)e(break)i(w)o(ords)e(for)h(the)g(completer.)1661
-447 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 447
-18 3 v 21 w(completion)p 510 447 V 21 w(query)p 673 447
-V 21 w(items)195 502 y Fu(Up)d(to)e(this)i(man)o(y)f(items)h(will)h(b)q
-(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)f(a)g(p)q
-(ossible-completions)195 557 y(call.)26 b(After)16 b(that,)g(w)o(e)h
-(ask)f(the)h(user)g(if)g(she)g(is)h(sure)e(she)i(w)o(an)o(ts)d(to)h
-(see)h(them)g(all.)26 b(The)195 612 y(default)16 b(v)m(alue)g(is)g
-(100.)1661 712 y(V)l(ariable)-1749 b Fi(char)20 b(*)f
-Fh(rl)p 286 712 V 21 w(basic)p 430 712 V 21 w(w)n(ord)p
-575 712 V 21 w(break)p 736 712 V 20 w(c)n(haracters)195
-766 y Fu(The)13 b(basic)h(list)f(of)g(c)o(haracters)f(that)g(signal)i
-(a)e(break)h(b)q(et)o(w)o(een)g(w)o(ords)f(for)g(the)h(completer)195
-821 y(routine.)20 b(The)c(default)g(v)m(alue)g(of)f(this)g(v)m(ariable)
-i(is)f(the)f(c)o(haracters)g(whic)o(h)h(break)f(w)o(ords)195
-876 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g Ft(")g
-(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 976 y(V)l(ariable)-1749
-b Fi(char)20 b(*)f Fh(rl)p 286 976 V 21 w(basic)p 430
-976 V 21 w(quote)p 590 976 V 21 w(c)n(haracters)195 1030
-y Fu(List)d(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)f(cause)h(a)f
-(w)o(ord)f(break.)1661 1130 y(V)l(ariable)-1749 b Fi(char)20
-b(*)f Fh(rl)p 286 1130 V 21 w(completer)p 555 1130 V
-21 w(w)n(ord)p 700 1130 V 20 w(break)p 860 1130 V 20
-w(c)n(haracters)195 1185 y Fu(The)j(list)g(of)f(c)o(haracters)g(that)g
-(signal)h(a)g(break)f(b)q(et)o(w)o(een)h(w)o(ords)f(for)g
-Ft(rl_complete_)195 1240 y(internal)14 b(\(\))p Fu(.)k(The)10
-b(default)h(list)g(is)g(the)f(v)m(alue)h(of)f Ft
-(rl_basic_word_break_charac)o(ters)p Fu(.)p 1909 1244
-21 36 v 1661 1340 a(V)l(ariable)-1749 b Fi(char)20 b(*)f
-Fh(rl)p 286 1340 18 3 v 21 w(completer)p 555 1340 V 21
-w(quote)p 715 1340 V 21 w(c)n(haracters)195 1394 y Fu(List)11
-b(of)g(c)o(haracters)f(whic)o(h)h(can)g(b)q(e)h(used)f(to)g(quote)f(a)h
-(substring)g(of)f(the)h(line.)20 b(Completion)195 1449
-y(o)q(ccurs)c(on)g(the)g(en)o(tire)g(substring,)g(and)g(within)h(the)e
-(substring)h Ft(rl_completer_word_)195 1504 y(break_characters)d
-Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they)
-f(also)g(app)q(ear)195 1559 y(within)h(this)g(list.)1661
-1658 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286
-1658 V 21 w(\014lename)p 515 1658 V 20 w(quote)p 674
-1658 V 21 w(c)n(haracters)195 1713 y Fu(A)d(list)g(of)g(c)o(haracters)e
-(that)h(cause)h(a)g(\014lename)h(to)e(b)q(e)h(quoted)g(b)o(y)f(the)h
-(completer)g(when)195 1768 y(they)f(app)q(ear)h(in)g(a)f(completed)h
-(\014lename.)21 b(The)15 b(default)h(is)g(the)f(n)o(ull)i(string.)1661
-1868 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286
-1868 V 21 w(sp)r(ecial)p 473 1868 V 22 w(pre\014xes)195
-1923 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)g(w)o(ord)g
-(break)h(c)o(haracters,)f(but)h(should)g(b)q(e)h(left)f(in)g
-Fm(text)195 1977 y Fu(when)19 b(it)g(is)g(passed)f(to)g(the)h
-(completion)g(function.)31 b(Programs)17 b(can)h(use)h(this)g(to)f
-(help)195 2032 y(determine)e(what)e(kind)i(of)e(completing)i(to)e(do.)
-19 b(F)l(or)14 b(instance,)h(Bash)g(sets)f(this)i(v)m(ariable)195
-2087 y(to)f Ft(")p Fu($)p Ft(@")f Fu(so)h(that)f(it)i(can)f(complete)h
-(shell)h(v)m(ariables)f(and)g(hostnames.)1661 2187 y(V)l(ariable)-1749
-b Fi(int)20 b Fh(rl)p 215 2187 V 21 w(completion)p 510
-2187 V 21 w(app)r(end)p 715 2187 V 19 w(c)n(haracter)195
-2241 y Fu(When)15 b(a)e(single)j(completion)f(alternativ)o(e)f(matc)o
-(hes)g(at)g(the)g(end)h(of)e(the)i(command)f(line,)195
-2296 y(this)20 b(c)o(haracter)e(is)i(app)q(ended)h(to)d(the)i(inserted)
-g(completion)g(text.)31 b(The)20 b(default)g(is)f(a)195
-2351 y(space)14 b(c)o(haracter)f(\(`)i('\).)j(Setting)c(this)h(to)e
-(the)h(n)o(ull)h(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))f(prev)o(en)o(ts)
-i(an)o(ything)195 2406 y(b)q(eing)24 b(app)q(ended)g(automatically)l(.)
-42 b(This)23 b(can)g(b)q(e)g(c)o(hanged)f(in)i(custom)e(completion)195
-2461 y(functions)15 b(to)e(pro)o(vide)i(the)f(\\most)f(sensible)j(w)o
-(ord)d(separator)g(c)o(haracter")g(according)i(to)195
-2515 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d
-(sp)q(eci\014cation.)1661 2615 y(V)l(ariable)-1749 b
-Fi(int)20 b Fh(rl)p 215 2615 V 21 w(ignore)p 391 2615
-V 20 w(completion)p 685 2615 V 21 w(duplicates)195 2670
-y Fu(If)15 b(non-zero,)h(then)f(disallo)o(w)h(duplicates)h(in)f(the)g
-(matc)o(hes.)j(Default)c(is)h(1.)p eop
+36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1762
+287 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241
+287 18 3 v 21 w(replace)p 438 287 V 22 w(line)k Fg(\()p
+Ft(const)14 b(char)h(*text,)f(int)h(clear_undo)p Fg(\))195
+342 y Fu(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g Ft(rl_line_buffer)f
+Fu(with)i Fk(text)p Fu(.)33 b(The)20 b(p)q(oin)o(t)g(and)g(mark)f(are)h
+(pre-)195 397 y(serv)o(ed,)13 b(if)h(p)q(ossible.)21
+b(If)13 b Fk(clear)p 712 397 14 2 v 17 w(undo)j Fu(is)d(non-zero,)h
+(the)f(undo)g(list)h(asso)q(ciated)g(with)f(the)g(curren)o(t)195
+452 y(line)k(is)f(cleared.)1762 561 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 561 18 3 v 21 w(extend)p 404
+561 V 21 w(line)p 513 561 V 22 w(bu\013er)j Fg(\()p Ft(int)15
+b(len)p Fg(\))195 616 y Fu(Ensure)g(that)g Ft(rl_line_buffer)e
+Fu(has)i(enough)g(space)h(to)e(hold)i Fk(len)g Fu(c)o(haracters,)e(p)q
+(ossibly)i(real-)195 670 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1762
+779 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 779
+V 21 w(initiali)q(z)q(e)26 b Fg(\()p Ft(void)p Fg(\))195
+834 y Fu(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o(ternal)
+h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)195
+889 y(this;)d Ft(readline\(\))f Fu(calls)i(it)g(b)q(efore)f(reading)h
+(an)o(y)f(input.)1762 998 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 998 V 21 w(ding)j Fg(\()p Ft(void)p Fg(\))195
+1053 y Fu(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g
+(setting)f(of)g Ft(bell-style)p Fu(.)1762 1162 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1162 V 21 w(alphab)r(etic)k
+Fg(\()p Ft(int)14 b(c)p Fg(\))195 1217 y Fu(Return)h(1)g(if)g
+Fk(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1762
+1325 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1325
+V 21 w(displa)n(y)p 435 1325 V 22 w(matc)n(h)p 611 1325
+V 20 w(list)25 b Fg(\()p Ft(char)14 b(**matches,)g(int)g(len,)h(int)g
+(max)p Fg(\))195 1380 y Fu(A)i(con)o(v)o(enience)i(function)f(for)f
+(displa)o(ying)i(a)e(list)h(of)e(strings)h(in)i(columnar)e(format)f(on)
+h(Read-)195 1435 y(line's)h(output)f(stream.)23 b Ft(matches)16
+b Fu(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h
+(as)f(a)h(list)g(of)195 1490 y(completion)c(matc)o(hes.)19
+b Ft(len)11 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h
+Ft(matches)p Fu(,)f(and)g Ft(max)g Fu(is)g(the)h(length)f(of)195
+1545 y(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)19
+b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Ft
+(print-completions-)195 1599 y(horizontally)k Fu(to)i(select)h(ho)o(w)e
+(the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d
+([Readline)195 1654 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137
+1742 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f
+(de\014ned)i(in)g Ft(chardefs.h)p Fu(.)k(Applications)d(should)75
+1796 y(refrain)d(from)g(using)h(them.)1762 1905 y(F)l(unction)-1861
+b Fi(int)p 176 1905 V 40 w Fh(rl)p 235 1905 V 21 w(upp)r(ercase)p
+506 1905 V 20 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195
+1960 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q
+(etic)f(c)o(haracter.)1762 2069 y(F)l(unction)-1861 b
+Fi(int)p 176 2069 V 40 w Fh(rl)p 235 2069 V 21 w(lo)n(w)n(ercase)p
+489 2069 V 23 w(p)22 b Fg(\()p Ft(int)15 b(c)p Fg(\))195
+2124 y Fu(Return)g(1)g(if)g Fk(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g
+(alphab)q(etic)i(c)o(haracter.)1762 2233 y(F)l(unction)-1861
+b Fi(int)p 176 2233 V 40 w Fh(rl)p 235 2233 V 21 w(digit)p
+369 2233 V 22 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195
+2288 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(a)f(n)o(umeric)h(c)o
+(haracter.)1762 2397 y(F)l(unction)-1861 b Fi(int)p 176
+2397 V 40 w Fh(rl)p 235 2397 V 21 w(to)p 307 2397 V 21
+w(upp)r(er)21 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 2451
+y Fu(If)d Fk(c)j Fu(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o
+(haracter,)d(return)h(the)g(corresp)q(onding)h(upp)q(ercase)g(c)o
+(haracter.)1762 2560 y(F)l(unction)-1861 b Fi(int)p 176
+2560 V 40 w Fh(rl)p 235 2560 V 21 w(to)p 307 2560 V 21
+w(lo)n(w)n(er)24 b Fg(\()p Ft(int)15 b(c)p Fg(\))195
+2615 y Fu(If)g Fk(c)i Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o
+(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o(ercase)f(c)o
+(harac-)195 2670 y(ter.)p eop
 %%Page: 37 39
 37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(37)1661 183 y(V)l(ariable)-1749 b Fi(int)20
-b Fh(rl)p 215 183 18 3 v 21 w(\014lename)p 444 183 V
-20 w(completion)p 738 183 V 21 w(desired)195 238 y Fu(Non-zero)15
-b(means)g(that)g(the)g(results)h(of)f(the)g(matc)o(hes)g(are)f(to)h(b)q
-(e)h(treated)f(as)f(\014lenames.)195 293 y(This)e(is)h
-Fm(alw)o(a)o(ys)f Fu(zero)g(on)g(en)o(try)l(,)g(and)g(can)f(only)i(b)q
-(e)f(c)o(hanged)g(within)h(a)e(completion)i(en)o(try)195
-348 y(generator)f(function.)20 b(If)14 b(it)f(is)h(set)f(to)g(a)g
-(non-zero)g(v)m(alue,)i(directory)e(names)h(ha)o(v)o(e)f(a)g(slash)195
-402 y(app)q(ended)k(and)f(Readline)h(attempts)e(to)f(quote)i(completed)
-g(\014lenames)g(if)g(they)g(con)o(tain)195 457 y(an)o(y)f(em)o(b)q
-(edded)i(w)o(ord)d(break)h(c)o(haracters.)1661 541 y(V)l(ariable)-1749
-b Fi(int)20 b Fh(rl)p 215 541 V 21 w(\014lename)p 444
-541 V 20 w(quoting)p 653 541 V 21 w(desired)195 596 y
-Fu(Non-zero)c(means)f(that)g(the)h(results)g(of)g(the)f(matc)o(hes)h
-(are)f(to)g(b)q(e)h(quoted)g(using)h(double)195 650 y(quotes)12
-b(\(or)f(an)g(application-sp)q(eci)q(\014c)k(quoting)d(mec)o(hanism\))g
-(if)g(the)g(completed)h(\014lename)195 705 y(con)o(tains)f(an)o(y)g(c)o
-(haracters)g(in)h Ft(rl_filename_quote_chars)p Fu(.)j(This)c(is)h
-Fm(alw)o(a)o(ys)h Fu(non-zero)195 760 y(on)d(en)o(try)l(,)g(and)h(can)f
-(only)h(b)q(e)g(c)o(hanged)f(within)h(a)f(completion)i(en)o(try)d
-(generator)g(function.)195 815 y(The)16 b(quoting)h(is)g(e\013ected)f
-(via)h(a)e(call)j(to)d(the)i(function)g(p)q(oin)o(ted)g(to)e(b)o(y)i
-Ft(rl_filename_)195 870 y(quoting_function)p Fu(.)1661
-953 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 953
-V 21 w(inhibit)p 399 953 V 23 w(completion)195 1008 y
-Fu(If)15 b(this)f(v)m(ariable)i(is)f(non-zero,)f(completion)i(is)f
-(inhibit)p Ft(<)p Fu(ed.)22 b(The)14 b(completion)i(c)o(haracter)195
-1063 y(will)h(b)q(e)f(inserted)g(as)f(an)o(y)f(other)h(b)q(ound)h(to)f
-Ft(self-insert)p Fu(.)1661 1146 y(V)l(ariable)-1749 b
-Fi(Function)20 b(*)g Fh(rl)p 391 1146 V 21 w(ignore)p
-567 1146 V 20 w(some)p 714 1146 V 19 w(completions)p
-1030 1146 V 21 w(function)195 1201 y Fu(This)15 b(function,)g(if)f
-(de\014ned,)i(is)e(called)i(b)o(y)e(the)h(completer)f(when)h(real)g
-(\014lename)g(comple-)195 1256 y(tion)k(is)g(done,)g(after)f(all)i(the)
-f(matc)o(hing)f(names)h(ha)o(v)o(e)f(b)q(een)i(generated.)30
-b(It)19 b(is)g(passed)195 1311 y(a)h Ft(NULL)f Fu(terminated)h(arra)o
-(y)f(of)g(matc)o(hes.)34 b(The)20 b(\014rst)g(elemen)o(t)h(\()p
-Ft(matches[0])p Fu(\))c(is)k(the)195 1366 y(maximal)e(substring)f
-(common)g(to)g(all)h(matc)o(hes.)29 b(This)19 b(function)g(can)f
-(re-arrange)g(the)195 1420 y(list)h(of)e(matc)o(hes)h(as)f(required,)i
-(but)f(eac)o(h)g(elemen)o(t)h(deleted)g(from)e(the)h(arra)o(y)f(m)o
-(ust)g(b)q(e)195 1475 y(freed.)1661 1559 y(V)l(ariable)-1749
-b Fi(Function)20 b(*)g Fh(rl)p 391 1559 V 21 w(directory)p
-639 1559 V 21 w(completion)p 934 1559 V 21 w(ho)r(ok)195
-1613 y Fu(This)13 b(function,)h(if)g(de\014ned,)g(is)f(allo)o(w)o(ed)h
-(to)e(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)g(\014lenames)195
-1668 y(Readline)k(completes.)j(It)15 b(is)g(called)h(with)f(the)g
-(address)g(of)f(a)g(string)h(\(the)f(curren)o(t)h(direc-)195
-1723 y(tory)f(name\))g(as)h(an)f(argumen)o(t.)19 b(It)c(could)h(b)q(e)f
-(used)h(to)e(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)195
-1778 y(v)m(ariables)j(in)f(pathnames.)1661 1861 y(V)l(ariable)-1749
-b Fi(VFunction)20 b(*)g Fh(rl)p 417 1861 V 21 w(completion)p
-712 1861 V 21 w(displa)n(y)p 906 1861 V 22 w(matc)n(hes)p
-1131 1861 V 20 w(ho)r(ok)195 1916 y Fu(If)g(non-zero,)g(then)f(this)h
-(is)g(the)f(address)h(of)f(a)g(function)h(to)f(call)h(when)g
-(completing)g(a)195 1971 y(w)o(ord)h(w)o(ould)h(normally)h(displa)o(y)g
-(the)f(list)h(of)e(p)q(ossible)j(matc)o(hes.)39 b(This)23
-b(function)f(is)195 2026 y(called)d(in)f(lieu)h(of)e(Readline)j(displa)
-o(ying)f(the)e(list.)27 b(It)18 b(tak)o(es)e(three)i(argumen)o(ts:)23
-b(\()p Ft(char)195 2081 y(**)p Fm(matc)o(hes)p Fu(,)g
-Ft(int)e Fm(n)o(um)p 623 2081 14 2 v 17 w(matc)o(hes)p
-Fu(,)h Ft(int)g Fm(max)p 1015 2081 V 16 w(length)p Fu(\))g(where)g
-Fm(matc)o(hes)i Fu(is)e(the)g(arra)o(y)195 2135 y(of)17
-b(matc)o(hing)h(strings,)f Fm(n)o(um)p 702 2135 V 17
-w(matc)o(hes)h Fu(is)g(the)g(n)o(um)o(b)q(er)g(of)f(strings)g(in)h
-(that)f(arra)o(y)l(,)g(and)195 2190 y Fm(max)p 283 2190
-V 16 w(length)f Fu(is)h(the)e(length)i(of)e(the)h(longest)g(string)f
-(in)i(that)e(arra)o(y)l(.)20 b(Readline)e(pro)o(vides)195
-2245 y(a)d(con)o(v)o(enience)i(function,)g Ft(rl_display_match_list)p
-Fu(,)12 b(that)j(tak)o(es)g(care)g(of)h(doing)g(the)195
-2300 y(displa)o(y)k(to)f(Readline's)i(output)f(stream.)31
-b(That)19 b(function)h(ma)o(y)f(b)q(e)h(called)h(from)e(this)195
-2355 y(ho)q(ok.)75 2458 y Fl(2.6.4)30 b(A)21 b(Short)f(Completion)g
-(Example)137 2552 y Fu(Here)11 b(is)f(a)g(small)h(application)h
-(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)i(library)l(.)19
-b(It)11 b(is)f(called)75 2606 y Ft(fileman)p Fu(,)17
-b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p Ft
-(examples/fileman.c)p Fu('.)25 b(This)18 b(sample)g(application)75
-2661 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i
-(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p
-eop
+(Readline)843 b(37)1762 149 y(F)l(unction)-1861 b Fi(int)p
+176 149 18 3 v 40 w Fh(rl)p 235 149 V 21 w(digit)p 369
+149 V 22 w(v)m(alue)24 b Fg(\()p Ft(int)15 b(c)p Fg(\))195
+204 y Fu(If)g Fk(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g(the)h(v)m
+(alue)g(it)g(represen)o(ts.)75 325 y Fj(2.4.11)29 b(Miscellaneous)22
+b(F)-5 b(unctions)1762 484 y Fu(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 484 V 21 w(macro)p 391 484 V 19 w(bind)j
+Fg(\()p Ft(const)14 b(char)g(*keyseq,)h(const)f(char)h(*macro,)283
+539 y(Keymap)f(map)p Fg(\))195 593 y Fu(Bind)f(the)f(k)o(ey)f(sequence)
+i Fk(k)o(eyseq)g Fu(to)e(in)o(v)o(ok)o(e)g(the)h(macro)f
+Fk(macro)p Fu(.)18 b(The)12 b(binding)h(is)f(p)q(erformed)g(in)195
+648 y Fk(map)p Fu(.)19 b(When)14 b Fk(k)o(eyseq)h Fu(is)f(in)o(v)o(ok)o
+(ed,)g(the)g Fk(macro)i Fu(will)f(b)q(e)f(inserted)h(in)o(to)f(the)g
+(line.)21 b(This)14 b(function)195 703 y(is)i(deprecated;)f(use)h
+Ft(rl_generic_bind\(\))d Fu(instead.)1762 833 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 833 V 21 w(macro)p 417 833
+V 19 w(dump)r(er)g Fg(\()p Ft(int)15 b(readable)p Fg(\))195
+888 y Fu(Prin)o(t)f(the)f(k)o(ey)h(sequences)g(b)q(ound)h(to)e(macros)g
+(and)g(their)h(v)m(alues,)h(using)f(the)g(curren)o(t)g(k)o(eymap,)195
+943 y(to)h Ft(rl_outstream)p Fu(.)k(If)d Fk(readable)j
+Fu(is)d(non-zero,)g(the)g(list)g(is)g(formatted)f(in)h(suc)o(h)g(a)f(w)
+o(a)o(y)g(that)g(it)195 997 y(can)g(b)q(e)h(made)f(part)g(of)g(an)g
+Ft(inputrc)f Fu(\014le)i(and)g(re-read.)1762 1127 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1127 V 21 w(v)m(ariable)p 431
+1127 V 22 w(bind)j Fg(\()p Ft(const)14 b(char)g(*variable,)g(const)h
+(char)f(*value)p Fg(\))195 1182 y Fu(Mak)o(e)22 b(the)g(Readline)i(v)m
+(ariable)g Fk(v)m(ariable)j Fu(ha)o(v)o(e)22 b Fk(v)m(alue)p
+Fu(.)43 b(This)23 b(b)q(eha)o(v)o(es)g(as)f(if)h(the)f(readline)195
+1237 y(command)12 b(`)p Ft(set)j Fk(v)m(ariable)k(v)m(alue)s
+Fu(')12 b(had)h(b)q(een)g(executed)h(in)f(an)f Ft(inputrc)g
+Fu(\014le)h(\(see)f(Section)i(1.3.1)195 1292 y([Readline)i(Init)g(File)
+h(Syn)o(tax],)d(page)h(4\).)1762 1422 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 1422 V 21 w(v)m(ariable)p
+457 1422 V 22 w(dump)r(er)g Fg(\()p Ft(int)14 b(readable)p
+Fg(\))195 1476 y Fu(Prin)o(t)g(the)h(readline)h(v)m(ariable)f(names)g
+(and)f(their)h(curren)o(t)f(v)m(alues)i(to)d Ft(rl_outstream)p
+Fu(.)18 b(If)d Fk(read-)195 1531 y(able)20 b Fu(is)e(non-zero,)f(the)g
+(list)h(is)g(formatted)e(in)h(suc)o(h)h(a)e(w)o(a)o(y)g(that)h(it)g
+(can)g(b)q(e)h(made)f(part)f(of)h(an)195 1586 y Ft(inputrc)d
+Fu(\014le)i(and)g(re-read.)1762 1716 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1716 V 21 w(set)p 307 1716
+V 20 w(paren)p 469 1716 V 20 w(blink)p 613 1716 V 23
+w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195 1771 y
+Fu(Set)e(the)f(time)h(in)o(terv)m(al)h(\(in)f(microseconds\))g(that)f
+(Readline)i(w)o(aits)e(when)h(sho)o(wing)f(a)h(balancing)195
+1826 y(c)o(haracter)h(when)i Ft(blink-matching-paren)d
+Fu(has)i(b)q(een)h(enabled.)1762 1956 y(F)l(unction)-1861
+b Fi(char)20 b(*)f Fh(rl)p 286 1956 V 21 w(get)p 384
+1956 V 21 w(termcap)j Fg(\()p Ft(const)14 b(char)g(*cap)p
+Fg(\))195 2010 y Fu(Retriev)o(e)f(the)h(string)f(v)m(alue)i(of)e(the)h
+(termcap)f(capabilit)o(y)i Fk(cap)p Fu(.)k(Readline)c(fetc)o(hes)f(the)
+f(termcap)195 2065 y(en)o(try)j(for)h(the)f(curren)o(t)h(terminal)h
+(name)e(and)h(uses)g(those)g(capabilities)i(to)d(mo)o(v)o(e)g(around)h
+(the)195 2120 y(screen)11 b(line)h(and)f(p)q(erform)f(other)g
+(terminal-sp)q(eci\014c)k(op)q(erations,)d(lik)o(e)h(erasing)e(a)h
+(line.)20 b(Readline)195 2175 y(do)q(es)e(not)f(use)h(all)g(of)f(a)g
+(terminal's)h(capabilities,)i(and)e(this)g(function)g(will)h(return)f
+(v)m(alues)h(for)195 2230 y(only)d(those)f(capabilities)i(Readline)g
+(uses.)75 2350 y Fj(2.4.12)29 b(Alternate)21 b(In)n(terface)137
+2451 y Fu(An)i(alternate)f(in)o(terface)h(is)g(a)o(v)m(ailable)h(to)d
+(plain)j Ft(readline\(\))p Fu(.)40 b(Some)22 b(applications)i(need)g
+(to)75 2506 y(in)o(terlea)o(v)o(e)15 b(k)o(eyb)q(oard)f(I/O)h(with)g
+(\014le,)h(device,)f(or)f(windo)o(w)h(system)f(I/O,)h(t)o(ypically)h(b)
+o(y)e(using)h(a)g(main)75 2560 y(lo)q(op)f(to)g Ft(select\(\))e
+Fu(on)i(v)m(arious)g(\014le)h(descriptors.)20 b(T)l(o)14
+b(accomo)q(date)f(this)h(need,)h(readline)g(can)f(also)g(b)q(e)75
+2615 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o(k')h(function)h(from)d
+(an)i(ev)o(en)o(t)f(lo)q(op.)22 b(There)16 b(are)f(functions)h(a)o(v)m
+(ailable)i(to)c(mak)o(e)75 2670 y(this)i(easy)l(.)p eop
 %%Page: 38 40
-38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)195
-183 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h
-(demonstrates)g(how)g(to)h(use)f(the)267 235 y(GNU)g(Readline)g
-(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users)
-267 287 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195
-391 y(#include)f(<stdio.h>)195 443 y(#include)g(<sys/types.h>)195
-495 y(#include)g(<sys/file.h>)195 546 y(#include)g(<sys/stat.h>)195
-598 y(#include)g(<sys/errno.h>)195 702 y(#include)g
-(<readline/readline.h>)195 754 y(#include)g(<readline/history.h>)195
-858 y(extern)g(char)g(*getwd)g(\(\);)195 910 y(extern)g(char)g
-(*xmalloc)g(\(\);)195 1013 y(/*)h(The)f(names)g(of)h(functions)e(that)i
-(actually)f(do)g(the)h(manipulation.)e(*/)195 1065 y(int)h(com_list)g
-(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i(com_stat)f(\(\),)g
-(com_pwd)g(\(\);)195 1117 y(int)g(com_delete)g(\(\),)g(com_help)g
-(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)195 1221 y(/*)h(A)f
-(structure)g(which)g(contains)g(information)f(on)i(the)f(commands)g
-(this)g(program)267 1273 y(can)g(understand.)f(*/)195
-1377 y(typedef)h(struct)g({)243 1429 y(char)g(*name;)g(/*)h(User)f
-(printable)g(name)g(of)h(the)f(function.)g(*/)243 1480
-y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.)
-h(*/)243 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h
-(function.)46 b(*/)195 1584 y(})24 b(COMMAND;)195 1688
-y(COMMAND)f(commands[])f(=)i({)243 1740 y({)f("cd",)h(com_cd,)f
-("Change)f(to)i(directory)f(DIR")g(},)243 1792 y({)g("delete",)g
-(com_delete,)f("Delete)h(FILE")h(},)243 1844 y({)f("help",)g(com_help,)
-g("Display)g(this)g(text")g(},)243 1896 y({)g("?",)h(com_help,)e
-("Synonym)h(for)h(`help'")f(},)243 1947 y({)g("list",)g(com_list,)g
-("List)g(files)g(in)h(DIR")f(},)243 1999 y({)g("ls",)h(com_list,)e
-("Synonym)h(for)g(`list'")g(},)243 2051 y({)g("pwd",)g(com_pwd,)g
-("Print)g(the)h(current)f(working)g(directory")f(},)243
-2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243
-2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g
-(},)243 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g
-(on)h(FILE")f(},)243 2259 y({)g("view",)g(com_view,)g("View)g(the)h
-(contents)e(of)i(FILE")f(},)243 2311 y({)g(\(char)h(*\)NULL,)f
-(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 2363
-y(};)195 2466 y(/*)h(Forward)e(declarations.)h(*/)195
-2518 y(char)g(*stripwhite)g(\(\);)195 2570 y(COMMAND)g(*find_command)f
-(\(\);)p eop
+38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)h(Library)1762
+149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149
+18 3 v 21 w(callbac)n(k)p 458 149 V 23 w(handler)p 670
+149 V 21 w(install)25 b Fg(\()p Ft(const)14 b(char)h(*prompt,)283
+204 y(rl_vcpfunc_t)e(*lhandler)p Fg(\))195 259 y Fu(Set)f(up)h(the)g
+(terminal)g(for)f(readline)i(I/O)f(and)f(displa)o(y)i(the)e(initial)j
+(expanded)e(v)m(alue)h(of)e Fk(prompt)p Fu(.)195 314
+y(Sa)o(v)o(e)j(the)h(v)m(alue)h(of)f Fk(lhandler)21 b
+Fu(to)15 b(use)h(as)f(a)h(function)h(to)e(call)i(when)f(a)g(complete)g
+(line)i(of)d(input)195 369 y(has)g(b)q(een)h(en)o(tered.)21
+b(The)15 b(function)h(tak)o(es)e(the)i(text)e(of)h(the)g(line)i(as)e
+(an)g(argumen)o(t.)1762 480 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 480 V 21 w(callbac)n(k)p 458 480 V 23 w(read)p
+591 480 V 20 w(c)n(har)j Fg(\()p Ft(void)p Fg(\))195
+535 y Fu(Whenev)o(er)17 b(an)g(application)h(determines)g(that)e(k)o
+(eyb)q(oard)h(input)h(is)f(a)o(v)m(ailable,)i(it)e(should)h(call)195
+590 y Ft(rl_callback_read_char\(\))p Fu(,)8 b(whic)o(h)k(will)g(read)f
+(the)g(next)g(c)o(haracter)f(from)g(the)h(curren)o(t)g(input)195
+645 y(source.)38 b(If)21 b(that)g(c)o(haracter)f(completes)i(the)f
+(line,)j Ft(rl_callback_read_char)18 b Fu(will)23 b(in)o(v)o(ok)o(e)195
+699 y(the)18 b Fk(lhandler)k Fu(function)d(sa)o(v)o(ed)e(b)o(y)h
+Ft(rl_callback_handler_insta)o(ll)d Fu(to)i(pro)q(cess)h(the)g(line.)
+195 754 y(Before)13 b(calling)i(the)f Fk(lhandler)k Fu(function,)c(the)
+g(terminal)g(settings)f(are)g(reset)g(to)g(the)g(v)m(alues)i(they)195
+809 y(had)g(b)q(efore)g(calling)i Ft(rl_callback_handler_insta)o(ll)p
+Fu(.)g(If)e(the)g Fk(lhandler)20 b Fu(function)15 b(returns,)195
+864 y(the)d(terminal)i(settings)e(are)g(mo)q(di\014ed)i(for)d
+(Readline's)i(use)g(again.)19 b Ft(EOF)12 b Fu(is)h(indicated)h(b)o(y)e
+(calling)195 919 y Fk(lhandler)20 b Fu(with)c(a)f Ft(NULL)f
+Fu(line.)1762 1030 y(F)l(unction)-1861 b Fi(void)20 b
+Fh(rl)p 241 1030 V 21 w(callbac)n(k)p 458 1030 V 23 w(handler)p
+670 1030 V 21 w(remo)n(v)n(e)i Fg(\()p Ft(void)p Fg(\))195
+1085 y Fu(Restore)c(the)g(terminal)i(to)d(its)i(initial)i(state)d(and)g
+(remo)o(v)o(e)g(the)h(line)h(handler.)31 b(This)19 b(ma)o(y)f(b)q(e)195
+1140 y(called)i(from)d(within)j(a)d(callbac)o(k)j(as)d(w)o(ell)i(as)f
+(indep)q(enden)o(tly)m(.)31 b(If)19 b(the)f Fk(lhandler)23
+b Fu(installed)d(b)o(y)195 1195 y Ft(rl_callback_handler_instal)o(l)d
+Fu(do)q(es)i(not)g(exit)h(the)g(program,)e(either)i(this)g(function)g
+(or)195 1249 y(the)c(function)g(referred)g(to)f(b)o(y)h(the)g(v)m(alue)
+h(of)e Ft(rl_deprep_term_function)d Fu(should)17 b(b)q(e)f(called)195
+1304 y(b)q(efore)f(the)h(program)e(exits)h(to)g(reset)g(the)g(terminal)
+h(settings.)75 1413 y Fj(2.4.13)29 b(A)21 b(Readline)g(Example)137
+1508 y Fu(Here)f(is)g(a)f(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o
+(ercase)h(c)o(haracters)e(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o
+(ts,)75 1563 y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o
+(ercase.)31 b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p
+Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 1618 y(`)p Ft(M-c)p
+Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g
+(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p
+Fu(')d(w)o(ould)i(c)o(hange)75 1673 y(the)h(case)g(of)g(the)h(follo)o
+(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h
+(last)f(c)o(haracter)f(c)o(hanged.)195 1736 y Ft(/*)24
+b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h
+(*/)195 1788 y(int)195 1840 y(invert_case_line)f(\(count,)h(key\))314
+1892 y(int)h(count,)f(key;)195 1944 y({)243 1995 y(register)f(int)i
+(start,)f(end,)g(i;)243 2099 y(start)g(=)h(rl_point;)243
+2203 y(if)f(\(rl_point)g(>=)h(rl_end\))290 2255 y(return)f(\(0\);)243
+2359 y(if)g(\(count)g(<)h(0\))290 2411 y({)338 2462 y(direction)f(=)h
+(-1;)338 2514 y(count)f(=)h(-count;)290 2566 y(})243
+2618 y(else)290 2670 y(direction)f(=)h(1;)p eop
 %%Page: 39 41
 39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(39)195 183 y Ft(/*)24 b(The)f(name)g(of)h(this)f
-(program,)g(as)h(taken)f(from)g(argv[0].)g(*/)195 235
-y(char)g(*progname;)195 339 y(/*)h(When)f(non-zero,)g(this)g(global)g
-(means)g(the)h(user)f(is)g(done)h(using)f(this)g(program.)g(*/)p
-1985 349 21 42 v 195 391 a(int)g(done;)195 495 y(char)g(*)195
-546 y(dupstr)g(\(s\))314 598 y(int)h(s;)195 650 y({)243
-702 y(char)f(*r;)243 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h
-(1\);)243 858 y(strcpy)f(\(r,)g(s\);)243 910 y(return)g(\(r\);)195
-962 y(})195 1065 y(main)g(\(argc,)g(argv\))314 1117 y(int)h(argc;)314
-1169 y(char)g(**argv;)195 1221 y({)243 1273 y(char)f(*line,)g(*s;)243
-1377 y(progname)f(=)i(argv[0];)243 1480 y(initialize_readline)d(\(\);)i
-(/*)h(Bind)f(our)h(completer.)e(*/)243 1584 y(/*)h(Loop)h(reading)f
-(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)243
-1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290 1688 y({)338
-1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338 1844
-y(if)i(\(!line\))386 1896 y(break;)338 1999 y(/*)g(Remove)f(leading)g
-(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410
-2051 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h
-(the)f(history)g(list)410 2103 y(and)g(execute)g(it.)h(*/)338
-2155 y(s)g(=)g(stripwhite)e(\(line\);)338 2259 y(if)i(\(*s\))386
-2311 y({)434 2363 y(add_history)e(\(s\);)434 2414 y(execute_line)g
-(\(s\);)386 2466 y(})338 2570 y(free)h(\(line\);)290
-2622 y(})p eop
+(Readline)843 b(39)243 201 y Ft(/*)23 b(Find)h(the)f(end)h(of)f(the)h
+(range)f(to)g(modify.)g(*/)243 253 y(end)g(=)h(start)f(+)h(\(count)f(*)
+h(direction\);)243 357 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g
+(*/)243 409 y(if)g(\(end)h(>)f(rl_end\))290 461 y(end)h(=)g(rl_end;)243
+513 y(else)f(if)h(\(end)f(<)h(0\))290 565 y(end)g(=)g(0;)243
+668 y(if)f(\(start)g(==)h(end\))290 720 y(return)f(\(0\);)243
+824 y(if)g(\(start)g(>)h(end\))290 876 y({)338 928 y(int)g(temp)f(=)h
+(start;)338 980 y(start)f(=)h(end;)338 1032 y(end)g(=)f(temp;)290
+1083 y(})243 1187 y(/*)g(Tell)h(readline)e(that)i(we)f(are)h(modifying)
+e(the)i(line,)314 1239 y(so)g(it)f(will)h(save)f(the)h(undo)f
+(information.)f(*/)243 1291 y(rl_modifying)g(\(start,)h(end\);)243
+1395 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290
+1447 y({)338 1499 y(if)h(\(_rl_uppercase_p)d(\(rl_line_buffer[i]\)\))
+386 1550 y(rl_line_buffer[i])g(=)j(_rl_to_lower)e
+(\(rl_line_buffer[i]\);)338 1602 y(else)h(if)h(\(_rl_lowercase_p)e
+(\(rl_line_buffer[i]\)\))386 1654 y(rl_line_buffer[i])f(=)j
+(_rl_to_upper)e(\(rl_line_buffer[i]\);)290 1706 y(})243
+1758 y(/*)h(Move)h(point)f(to)g(on)h(top)f(of)h(the)f(last)h(character)
+e(changed.)h(*/)243 1810 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g
+(end)f(-)h(1)g(:)f(start;)243 1862 y(return)g(\(0\);)195
+1914 y(})75 2057 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137
+2159 y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f
+(to)h(a)f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f
+(on)75 2213 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34
+b(They)20 b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o
+(ts,)f(lik)o(e)h(a)f(user)75 2268 y(pressing)c(the)f(in)o(terrupt)g(k)o
+(ey)g(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q
+(eing)g(brok)o(en.)k(There)15 b(is)75 2323 y(a)e(class)g(of)g(signals)h
+(that)f(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h
+(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 2378
+y(Since)i(Readline)f(c)o(hanges)g(the)f(terminal)h(attributes)f(when)h
+(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75
+2433 y(pro)q(cessing)i(when)f(suc)o(h)g(a)g(signal)g(is)g(receiv)o(ed)h
+(in)g(order)f(to)f(restore)g(the)h(terminal)g(to)f(a)h(sane)g(state,)e
+(or)75 2487 y(pro)o(vide)k(application)h(writers)e(with)g(functions)h
+(to)f(do)g(so)g(man)o(ually)l(.)137 2560 y(Readline)22
+b(con)o(tains)e(an)g(in)o(ternal)h(signal)g(handler)g(that)f(is)h
+(installed)h(for)d(a)h(n)o(um)o(b)q(er)g(of)g(signals)75
+2615 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p
+Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)g Ft(SIGTTIN)p
+Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36 b(When)21 b(one)g(of)75
+2670 y(these)16 b(signals)h(is)f(receiv)o(ed,)h(the)f(signal)h(handler)
+f(will)i(reset)e(the)g(terminal)g(attributes)g(to)f(those)h(that)p
+eop
 %%Page: 40 42
-40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)243
-183 y Ft(exit)23 b(\(0\);)195 235 y(})195 339 y(/*)h(Execute)e(a)i
-(command)f(line.)g(*/)195 391 y(int)195 443 y(execute_line)f(\(line\))
-314 495 y(char)i(*line;)195 546 y({)243 598 y(register)e(int)i(i;)243
-650 y(COMMAND)f(*command;)243 702 y(char)g(*word;)243
-806 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 858
-y(i)g(=)h(0;)243 910 y(while)f(\(line[i])g(&&)g(whitespace)g
-(\(line[i]\)\))290 962 y(i++;)243 1013 y(word)g(=)h(line)f(+)h(i;)243
-1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290
-1169 y(i++;)243 1273 y(if)g(\(line[i]\))290 1325 y(line[i++])g(=)h
-('\\0';)243 1429 y(command)f(=)g(find_command)g(\(word\);)243
-1532 y(if)g(\(!command\))290 1584 y({)338 1636 y(fprintf)g(\(stderr,)g
-("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338
-1688 y(return)g(\(-1\);)290 1740 y(})243 1844 y(/*)g(Get)h(argument)f
-(to)g(command,)g(if)g(any.)h(*/)243 1896 y(while)f(\(whitespace)f
-(\(line[i]\)\))290 1947 y(i++;)243 2051 y(word)h(=)h(line)f(+)h(i;)243
-2155 y(/*)f(Call)h(the)f(function.)g(*/)243 2207 y(return)g
-(\(\(*\(command->func\)\))e(\(word\)\);)195 2259 y(})195
-2363 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g
-(and)h(return)f(a)g(pointer)g(to)h(that)267 2414 y(command.)46
-b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f
-(name.)g(*/)195 2466 y(COMMAND)g(*)195 2518 y(find_command)f(\(name\))
-314 2570 y(char)i(*name;)195 2622 y({)p eop
+40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)h(Library)75
+149 y(w)o(ere)d(in)i(e\013ect)e(b)q(efore)h Ft(readline\(\))e
+Fu(w)o(as)h(called,)i(reset)f(the)f(signal)i(handling)g(to)e(what)g(it)
+h(w)o(as)f(b)q(efore)75 204 y Ft(readline\(\))21 b Fu(w)o(as)h(called,)
+j(and)e(resend)g(the)g(signal)g(to)f(the)h(calling)h(application.)44
+b(If)23 b(and)f(when)75 259 y(the)17 b(calling)i(application's)f
+(signal)g(handler)g(returns,)f(Readline)h(will)h(reinitialize)h(the)d
+(terminal)h(and)75 314 y(con)o(tin)o(ue)d(to)e(accept)i(input.)20
+b(When)15 b(a)e Ft(SIGINT)h Fu(is)g(receiv)o(ed,)h(the)g(Readline)g
+(signal)g(handler)g(p)q(erforms)75 369 y(some)k(additional)i(w)o(ork,)e
+(whic)o(h)h(will)h(cause)f(an)o(y)f(partially-en)o(tered)i(line)g(to)d
+(b)q(e)i(ab)q(orted)g(\(see)f(the)75 423 y(description)e(of)d
+Ft(rl_free_line_state\(\))f Fu(b)q(elo)o(w\).)137 488
+y(There)g(is)f(an)g(additional)i(Readline)g(signal)f(handler,)g(for)f
+Ft(SIGWINCH)p Fu(,)f(whic)o(h)i(the)f(k)o(ernel)h(sends)g(to)e(a)75
+543 y(pro)q(cess)k(whenev)o(er)g(the)f(terminal's)h(size)g(c)o(hanges)f
+(\(for)g(example,)h(if)g(a)f(user)h(resizes)g(an)f Ft(xterm)p
+Fu(\).)19 b(The)75 598 y(Readline)g Ft(SIGWINCH)e Fu(handler)i(up)q
+(dates)f(Readline's)h(in)o(ternal)f(screen)h(size)f(information,)h(and)
+f(then)75 653 y(calls)g(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g
+(the)f(calling)i(application)f(has)f(installed.)27 b(Readline)18
+b(calls)g(the)75 708 y(application's)h Ft(SIGWINCH)d
+Fu(signal)j(handler)f(without)g(resetting)g(the)f(terminal)i(to)e(its)g
+(original)i(state.)75 762 y(If)d(the)g(application's)h(signal)g
+(handler)g(do)q(es)g(more)e(than)h(up)q(date)h(its)f(idea)h(of)e(the)h
+(terminal)h(size)g(and)75 817 y(return)e(\(for)f(example,)h(a)f
+Ft(longjmp)g Fu(bac)o(k)h(to)f(a)h(main)g(pro)q(cessing)g(lo)q(op\),)g
+(it)g Fl(must)20 b Fu(call)c Ft(rl_cleanup_)75 872 y(after_signal\(\))d
+Fu(\(describ)q(ed)k(b)q(elo)o(w\),)e(to)g(restore)f(the)h(terminal)h
+(state.)137 937 y(Readline)g(pro)o(vides)f(t)o(w)o(o)e(v)m(ariables)i
+(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g(whether)h
+(or)e(not)75 992 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f
+(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25
+b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 1047 y(applications)k(c)o
+(hange)e(the)h(v)m(alues)g(of)f(these)h(v)m(ariables)g(only)g(when)g
+(calling)h Ft(readline\(\))p Fu(,)d(not)h(in)h(a)75 1101
+y(signal)d(handler,)g(so)f(Readline's)h(in)o(ternal)g(signal)g(state)e
+(is)i(not)f(corrupted.)1773 1208 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1208 18 3 v 21 w(catc)n(h)p
+366 1208 V 22 w(signals)195 1262 y Fu(If)15 b(this)g(v)m(ariable)g(is)g
+(non-zero,)g(Readline)h(will)g(install)f(signal)h(handlers)f(for)f
+Ft(SIGINT)p Fu(,)f Ft(SIGQUIT)p Fu(,)195 1317 y Ft(SIGTERM)p
+Fu(,)h Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)f Ft(SIGTTIN)p
+Fu(,)h(and)i Ft(SIGTTOU)p Fu(.)195 1382 y(The)f(default)h(v)m(alue)h
+(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1773 1488 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1488 V 21 w(catc)n(h)p 366
+1488 V 22 w(sigwinc)n(h)195 1543 y Fu(If)15 b(this)h(v)m(ariable)h(is)e
+(non-zero,)g(Readline)i(will)g(install)f(a)f(signal)h(handler)h(for)d
+Ft(SIGWINCH)p Fu(.)195 1608 y(The)h(default)h(v)m(alue)h(of)d
+Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1694 y(If)g(an)f(application)j
+(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)i(catc)o(h)f(an)o(y)
+f(signals,)h(or)f(to)f(handle)j(signals)75 1749 y(other)i(than)g(those)
+g(Readline)i(catc)o(hes)e(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h
+(Readline)h(pro)o(vides)e(con)o(v)o(enience)75 1804 y(functions)d(to)f
+(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o
+(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1762 1910
+y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1910 V
+21 w(clean)n(up)p 450 1910 V 22 w(after)p 590 1910 V
+20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 1965 y Fu(This)18
+b(function)f(will)i(reset)e(the)g(state)f(of)g(the)h(terminal)h(to)e
+(what)h(it)g(w)o(as)f(b)q(efore)h Ft(readline\(\))195
+2019 y Fu(w)o(as)d(called,)i(and)f(remo)o(v)o(e)f(the)g(Readline)i
+(signal)g(handlers)g(for)e(all)h(signals,)g(dep)q(ending)i(on)e(the)195
+2074 y(v)m(alues)h(of)f Ft(rl_catch_signals)e Fu(and)i
+Ft(rl_catch_sigwinch)p Fu(.)1762 2180 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2180 V 21 w(free)p 356 2180
+V 20 w(line)p 464 2180 V 23 w(state)j Fg(\()p Ft(void)p
+Fg(\))195 2235 y Fu(This)d(will)h(free)f(an)o(y)f(partial)h(state)f
+(asso)q(ciated)h(with)g(the)g(curren)o(t)f(input)i(line)g(\(undo)f
+(infor-)195 2290 y(mation,)i(an)o(y)f(partial)h(history)f(en)o(try)l(,)
+h(an)o(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)h(and)f(an)o
+(y)195 2345 y(partially-en)o(tered)k(n)o(umeric)g(argumen)o(t\).)45
+b(This)24 b(should)h(b)q(e)g(called)g(b)q(efore)g Ft(rl_cleanup_)195
+2399 y(after_signal\(\))p Fu(.)36 b(The)22 b(Readline)h(signal)f
+(handler)g(for)f Ft(SIGINT)f Fu(calls)j(this)e(to)g(ab)q(ort)g(the)195
+2454 y(curren)o(t)15 b(input)h(line.)1762 2560 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2560 V 21 w(reset)p 383 2560
+V 20 w(after)p 521 2560 V 21 w(signal)j Fg(\()p Ft(void)p
+Fg(\))195 2615 y Fu(This)15 b(will)h(reinitialize)h(the)d(terminal)h
+(and)g(reinstall)h(an)o(y)d(Readline)j(signal)f(handlers,)g(dep)q(end-)
+195 2670 y(ing)h(on)f(the)g(v)m(alues)i(of)d Ft(rl_catch_signals)f
+Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)p eop
 %%Page: 41 43
 41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(41)243 183 y Ft(register)22 b(int)i(i;)243
-287 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
-339 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338
-391 y(return)g(\(&commands[i]\);)243 495 y(return)g(\(\(COMMAND)f
-(*\)NULL\);)195 546 y(})195 650 y(/*)i(Strip)f(whitespace)f(from)i(the)
-f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267
-702 y(into)g(STRING.)g(*/)195 754 y(char)g(*)195 806
-y(stripwhite)f(\(string\))314 858 y(char)i(*string;)195
-910 y({)243 962 y(register)e(char)i(*s,)f(*t;)243 1065
-y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290
-1117 y(;)243 1221 y(if)g(\(*s)h(==)f(0\))290 1273 y(return)g(\(s\);)243
-1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1429
-y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290
-1480 y(t--;)243 1532 y(*++t)h(=)h('\\0';)243 1636 y(return)f(s;)195
-1688 y(})195 1792 y(/*)h(***********************)o(*******)o(********)o
-(*******)o(*******)o(********)o(****)d(*/)195 1844 y(/*)1575
-b(*/)195 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381
-b(*/)195 1947 y(/*)1575 b(*/)195 1999 y(/*)24 b
-(***********************)o(*******)o(********)o(*******)o(*******)o
-(********)o(****)d(*/)195 2103 y(char)i(*command_generator)f(\(\);)195
-2155 y(char)h(**fileman_completion)e(\(\);)195 2259 y(/*)j(Tell)f(the)g
-(GNU)h(Readline)f(library)f(how)i(to)g(complete.)46 b(We)24
-b(want)f(to)h(try)f(to)h(complete)p 2034 2269 21 42 v
-267 2311 a(on)f(command)g(names)g(if)h(this)f(is)h(the)f(first)g(word)h
-(in)f(the)h(line,)f(or)h(on)f(filenames)p 1962 2317 21
-35 v 267 2363 a(if)g(not.)g(*/)195 2414 y(initialize_readline)e(\(\))
-195 2466 y({)243 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h
-(~/.inputrc)e(file.)h(*/)243 2570 y(rl_readline_name)e(=)j("FileMan";)p
-eop
+(Readline)843 b(41)137 149 y(If)20 b(an)g(application)h(do)q(es)f(not)g
+(wish)g(Readline)h(to)e(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f
+(call)h Ft(rl_resize_)75 204 y(terminal\(\))12 b Fu(or)h
+Ft(rl_set_screen_size\(\))e Fu(to)i(force)g(Readline)i(to)e(up)q(date)h
+(its)g(idea)g(of)g(the)f(terminal)75 259 y(size)j(when)g(a)f
+Ft(SIGWINCH)f Fu(is)h(receiv)o(ed.)1762 360 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 360 18 3 v 21 w(resize)p 401
+360 V 22 w(terminal)j Fg(\()p Ft(void)p Fg(\))195 415
+y Fu(Up)q(date)16 b(Readline's)g(in)o(ternal)g(screen)f(size)i(b)o(y)e
+(reading)g(v)m(alues)i(from)d(the)i(k)o(ernel.)1762 516
+y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 516 V
+21 w(set)p 333 516 V 21 w(screen)p 510 516 V 20 w(size)k
+Fg(\()p Ft(int)15 b(rows,)f(int)h(cols)p Fg(\))195 571
+y Fu(Set)g(Readline's)h(idea)g(of)f(the)g(terminal)h(size)g(to)f
+Fk(ro)o(ws)h Fu(ro)o(ws)e(and)i Fk(cols)h Fu(columns.)137
+653 y(If)g(an)g(application)h(do)q(es)f(not)f(w)o(an)o(t)g(to)g
+(install)i(a)f Ft(SIGWINCH)e Fu(handler,)j(but)f(is)g(still)h(in)o
+(terested)f(in)75 708 y(the)e(screen)h(dimensions,)g(Readline's)h(idea)
+e(of)g(the)h(screen)f(size)h(ma)o(y)f(b)q(e)h(queried.)1762
+809 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 809
+V 21 w(get)p 339 809 V 21 w(screen)p 516 809 V 20 w(size)k
+Fg(\()p Ft(int)15 b(*rows,)f(int)h(*cols)p Fg(\))195
+864 y Fu(Return)g(Readline's)h(idea)f(of)g(the)g(terminal's)g(size)h
+(in)g(the)f(v)m(ariables)i(p)q(oin)o(ted)f(to)e(b)o(y)h(the)g(argu-)195
+918 y(men)o(ts.)137 1001 y(The)h(follo)o(wing)g(functions)g(install)g
+(and)g(remo)o(v)o(e)e(Readline's)i(signal)g(handlers.)1762
+1102 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1102
+V 21 w(set)p 307 1102 V 20 w(signals)j Fg(\()p Ft(void)p
+Fg(\))195 1157 y Fu(Install)c(Readline's)f(signal)h(handler)f(for)f
+Ft(SIGINT)p Fu(,)g Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p Fu(,)g
+Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)195 1211 y Ft(SIGTTIN)p
+Fu(,)11 b Ft(SIGTTOU)p Fu(,)g(and)h Ft(SIGWINCH)p Fu(,)e(dep)q(ending)k
+(on)e(the)f(v)m(alues)i(of)e Ft(rl_catch_signals)f Fu(and)195
+1266 y Ft(rl_catch_sigwinch)p Fu(.)1762 1367 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1367 V 21 w(clear)p 354 1367
+V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1422 y Fu(Remo)o(v)o(e)14
+b(all)i(of)f(the)g(Readline)i(signal)f(handlers)g(installed)h(b)o(y)e
+Ft(rl_set_signals\(\))p Fu(.)75 1541 y Fs(2.6)33 b(Custom)21
+b(Completers)137 1634 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h
+(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g
+(disam)o(biguating)75 1689 y(commands)i(and)f(data.)27
+b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can)
+f(pro)o(vide)i(completion)g(for)75 1744 y(commands,)14
+b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g
+(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75
+1798 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75
+1901 y Fj(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137
+1994 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i
+(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m
+(ailable.)75 2049 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f
+(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g
+(all)h(of)f(the)75 2104 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f
+(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)h(library)f
+(pro)o(vides)g(the)g(user)75 2158 y(in)o(terface)f(to)f(completion,)i
+(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:)
+23 b(\014lename)18 b(and)75 2213 y(username.)h(F)l(or)10
+b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f
+(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75
+2268 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g
+(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137
+2332 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q
+(erform)g(completion:)100 2396 y(1.)29 b(The)22 b(user-in)o(terface)g
+(function)h Ft(rl_complete\(\))p Fu(.)37 b(This)22 b(function)h(is)f
+(called)h(with)f(the)g(same)165 2451 y(argumen)o(ts)17
+b(as)h(other)g(bindable)i(Readline)f(functions:)27 b
+Fk(coun)o(t)19 b Fu(and)f Fk(in)o(v)o(oking)p 1556 2451
+14 2 v 17 w(k)o(ey)p Fu(.)28 b(It)19 b(isolates)165 2506
+y(the)g(w)o(ord)f(to)g(b)q(e)i(completed)f(and)g(calls)h
+Ft(rl_completion_matches\(\))c Fu(to)i(generate)g(a)h(list)g(of)165
+2560 y(p)q(ossible)e(completions.)22 b(It)16 b(then)g(either)g(lists)g
+(the)g(p)q(ossible)h(completions,)g(inserts)f(the)f(p)q(ossible)165
+2615 y(completions,)25 b(or)d(actually)i(p)q(erforms)e(the)g
+(completion,)k(dep)q(ending)e(on)f(whic)o(h)g(b)q(eha)o(vior)g(is)165
+2670 y(desired.)p eop
 %%Page: 42 44
-42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)243
-183 y Ft(/*)23 b(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)
-f(first.)g(*/)243 235 y(rl_attempted_completion_)o(functio)o(n)e(=)j
-(\(CPPFunction)e(*\)fileman_completion;)195 287 y(})195
-391 y(/*)i(Attempt)e(to)i(complete)f(on)g(the)h(contents)f(of)g(TEXT.)
-47 b(START)23 b(and)h(END)f(bound)h(the)267 443 y(region)f(of)g
-(rl_line_buffer)f(that)h(contains)g(the)h(word)f(to)h(complete.)46
-b(TEXT)23 b(is)267 495 y(the)g(word)g(to)h(complete.)46
-b(We)24 b(can)f(use)h(the)f(entire)g(contents)g(of)h(rl_line_buffer)p
-1963 505 21 38 v 267 546 a(in)f(case)g(we)h(want)f(to)h(do)g(some)f
-(simple)g(parsing.)47 b(Return)23 b(the)g(array)g(of)h(matches,)p
-1986 557 V 267 598 a(or)f(NULL)g(if)h(there)f(aren't)g(any.)h(*/)195
-650 y(char)f(**)195 702 y(fileman_completion)e(\(text,)i(start,)g
-(end\))314 754 y(char)h(*text;)314 806 y(int)g(start,)f(end;)195
-858 y({)243 910 y(char)g(**matches;)243 1013 y(matches)g(=)g(\(char)h
-(**\)NULL;)243 1117 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g
-(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314
-1169 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h
-(a)f(file)h(in)f(the)h(current)314 1221 y(directory.)f(*/)243
-1273 y(if)g(\(start)g(==)h(0\))290 1325 y(matches)f(=)h
-(completion_matches)d(\(text,)j(command_generator\);)243
-1429 y(return)f(\(matches\);)195 1480 y(})195 1584 y(/*)h(Generator)e
-(function)h(for)g(command)g(completion.)47 b(STATE)23
-b(lets)g(us)h(know)f(whether)p 1938 1594 21 42 v 267
-1636 a(to)g(start)g(from)h(scratch;)e(without)h(any)h(state)f(\(i.e.)g
-(STATE)g(==)h(0\),)f(then)h(we)267 1688 y(start)f(at)g(the)h(top)f(of)h
-(the)f(list.)g(*/)195 1740 y(char)g(*)195 1792 y(command_generator)f
-(\(text,)h(state\))314 1844 y(char)h(*text;)314 1896
-y(int)g(state;)195 1947 y({)243 1999 y(static)f(int)g(list_index,)g
-(len;)243 2051 y(char)g(*name;)243 2155 y(/*)g(If)h(this)f(is)h(a)g
-(new)f(word)g(to)h(complete,)f(initialize)f(now.)47 b(This)24
-b(includes)314 2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f
-(efficiency,)g(and)g(initializing)f(the)i(index)p 1938
-2217 21 38 v 314 2259 a(variable)f(to)h(0.)f(*/)243 2311
-y(if)g(\(!state\))290 2363 y({)338 2414 y(list_index)g(=)g(0;)338
-2466 y(len)h(=)f(strlen)g(\(text\);)290 2518 y(})243
-2622 y(/*)g(Return)g(the)h(next)f(name)g(which)h(partially)e(matches)h
-(from)g(the)h(command)f(list.)g(*/)p 1985 2632 21 42
-v eop
+42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)h(Library)100
+149 y(2.)29 b(The)17 b(in)o(ternal)h(function)f Ft
+(rl_completion_matches\(\))d Fu(uses)j(an)g(application-supplie)q(d)j
+Fk(gener-)165 204 y(ator)h Fu(function)e(to)f(generate)g(the)h(list)g
+(of)f(p)q(ossible)i(matc)o(hes,)f(and)f(then)h(returns)g(the)f(arra)o
+(y)f(of)165 259 y(these)j(matc)o(hes.)32 b(The)20 b(caller)g(should)h
+(place)f(the)g(address)f(of)h(its)f(generator)g(function)h(in)g
+Ft(rl_)165 314 y(completion_entry_function)p Fu(.)100
+383 y(3.)29 b(The)12 b(generator)e(function)i(is)g(called)h(rep)q
+(eatedly)g(from)e Ft(rl_completion_matches\(\))p Fu(,)d(returning)165
+438 y(a)16 b(string)g(eac)o(h)h(time.)24 b(The)17 b(argumen)o(ts)e(to)h
+(the)g(generator)g(function)h(are)f Fk(text)h Fu(and)g
+Fk(state)p Fu(.)22 b Fk(text)165 493 y Fu(is)17 b(the)f(partial)g(w)o
+(ord)f(to)h(b)q(e)h(completed.)23 b Fk(state)18 b Fu(is)e(zero)g(the)g
+(\014rst)g(time)g(the)g(function)h(is)g(called,)165 547
+y(allo)o(wing)23 b(the)f(generator)f(to)g(p)q(erform)h(an)o(y)g
+(necessary)g(initialization,)k(and)c(a)g(p)q(ositiv)o(e)h(non-)165
+602 y(zero)14 b(in)o(teger)h(for)f(eac)o(h)h(subsequen)o(t)g(call.)21
+b(The)15 b(generator)e(function)j(returns)e Ft(\(char)h(*\)NULL)f
+Fu(to)165 657 y(inform)19 b Ft(rl_completion_matches\(\))d
+Fu(that)i(there)h(are)g(no)g(more)g(p)q(ossibilities)j(left.)32
+b(Usually)165 712 y(the)19 b(generator)g(function)h(computes)g(the)f
+(list)h(of)f(p)q(ossible)i(completions)g(when)e Fk(state)j
+Fu(is)d(zero,)165 767 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)g
+(on)g(subsequen)o(t)g(calls.)20 b(Eac)o(h)13 b(string)f(the)h
+(generator)f(function)165 821 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h
+(b)q(e)g(allo)q(cated)h(with)g Ft(malloc\(\))p Fu(;)d(Readline)k(frees)
+e(the)g(strings)f(when)165 876 y(it)g(has)h(\014nished)g(with)g(them.)
+1762 1005 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
+1005 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
+(invoking_key)p Fg(\))195 1059 y Fu(Complete)h(the)f(w)o(ord)g(at)f(or)
+h(b)q(efore)h(p)q(oin)o(t.)21 b(Y)l(ou)15 b(ha)o(v)o(e)g(supplied)j
+(the)d(function)i(that)d(do)q(es)i(the)195 1114 y(initial)23
+b(simple)f(matc)o(hing)e(selection)i(algorithm)f(\(see)f
+Ft(rl_completion_matches\(\))p Fu(\).)33 b(The)195 1169
+y(default)16 b(is)f(to)g(do)g(\014lename)h(completion.)1773
+1298 y(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22
+b(*)d Fh(rl)p 678 1298 V 21 w(completion)p 973 1298 V
+21 w(en)n(try)p 1126 1298 V 22 w(function)195 1352 y
+Fu(This)i(is)f(a)g(p)q(oin)o(ter)g(to)f(the)h(generator)g(function)g
+(for)g Ft(rl_completion_matches\(\))p Fu(.)31 b(If)20
+b(the)195 1407 y(v)m(alue)13 b(of)f Ft(rl_completion_entry_fun)o(ction)
+d Fu(is)j Ft(NULL)f Fu(then)h(the)g(default)h(\014lename)g(generator)
+195 1462 y(function,)j Ft(rl_filename_completion_f)o(unction)o(\(\))p
+Fu(,)c(is)k(used.)75 1582 y Fj(2.6.2)30 b(Completion)20
+b(F)-5 b(unctions)137 1682 y Fu(Here)16 b(is)f(the)h(complete)g(list)g
+(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.)
+1762 1810 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
+1810 V 21 w(complete)p 460 1810 V 21 w(in)n(ternal)k
+Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 1865 y Fu(Complete)k(the)g
+(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)31 b Fk(what)p
+1108 1865 14 2 v 16 w(to)p 1165 1865 V 16 w(do)21 b Fu(sa)o(ys)d(what)g
+(to)g(do)h(with)g(the)g(com-)195 1920 y(pletion.)j(A)16
+b(v)m(alue)h(of)e(`)p Ft(?)p Fu(')g(means)g(list)i(the)e(p)q(ossible)j
+(completions.)k(`)p Ft(TAB)p Fu(')14 b(means)i(do)f(standard)195
+1975 y(completion.)22 b(`)p Ft(*)p Fu(')15 b(means)g(insert)h(all)h(of)
+e(the)h(p)q(ossible)h(completions.)22 b(`)p Ft(!)p Fu(')15
+b(means)g(to)g(displa)o(y)i(all)195 2029 y(of)g(the)g(p)q(ossible)i
+(completions,)f(if)g(there)f(is)h(more)f(than)g(one,)g(as)g(w)o(ell)h
+(as)f(p)q(erforming)h(partial)195 2084 y(completion.)1762
+2213 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2213
+18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
+(invoking_key)p Fg(\))195 2268 y Fu(Complete)21 b(the)g(w)o(ord)e(at)h
+(or)g(b)q(efore)h(p)q(oin)o(t.)37 b(Y)l(ou)21 b(ha)o(v)o(e)f(supplied)j
+(the)d(function)i(that)e(do)q(es)195 2322 y(the)d(initial)h(simple)g
+(matc)o(hing)f(selection)h(algorithm)e(\(see)g Ft
+(rl_completion_matches\(\))e Fu(and)195 2377 y Ft
+(rl_completion_entry_functi)o(on)p Fu(\).)25 b(The)18
+b(default)h(is)f(to)f(do)h(\014lename)h(completion.)29
+b(This)195 2432 y(calls)16 b Ft(rl_complete_internal\(\))c
+Fu(with)k(an)f(argumen)o(t)f(dep)q(ending)k(on)d Fk(in)o(v)o(oking)p
+1657 2432 14 2 v 17 w(k)o(ey)p Fu(.)1762 2560 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2560 18 3 v 21 w(p)r(ossible)p
+433 2560 V 20 w(completions)j Fg(\()p Ft(int)15 b(count,)f(int)h
+(invoking_key)p Fg(\))195 2615 y Fu(List)21 b(the)f(p)q(ossible)i
+(completions.)36 b(See)21 b(description)h(of)e Ft(rl_complete)13
+b(\(\))p Fu(.)35 b(This)21 b(calls)g Ft(rl_)195 2670
+y(complete_internal\(\))13 b Fu(with)i(an)g(argumen)o(t)g(of)f(`)p
+Ft(?)p Fu('.)p eop
 %%Page: 43 45
 43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(43)243 183 y Ft(while)23 b(\(name)g(=)h
-(commands[list_index].name)o(\))290 235 y({)338 287 y(list_index++;)338
-391 y(if)g(\(strncmp)f(\(name,)g(text,)g(len\))g(==)h(0\))386
-443 y(return)f(\(dupstr\(name\)\);)290 495 y(})243 598
-y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f(NULL.)g(*/)243
-650 y(return)g(\(\(char)g(*\)NULL\);)195 702 y(})195
-806 y(/*)h(***********************)o(*******)o(********)o(*******)o
-(*******)o(********)o(****)d(*/)195 858 y(/*)1575 b(*/)195
-910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 962
-y(/*)1575 b(*/)195 1013 y(/*)24 b(***********************)o(*******)o
-(********)o(*******)o(*******)o(********)o(****)d(*/)195
-1117 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47
-b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267
-1169 y(commands.)f(*/)195 1221 y(static)h(char)g(syscom[1024];)195
-1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195
-1377 y(com_list)g(\(arg\))314 1429 y(char)h(*arg;)195
-1480 y({)243 1532 y(if)f(\(!arg\))290 1584 y(arg)h(=)g("";)243
-1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243
-1740 y(return)g(\(system)g(\(syscom\)\);)195 1792 y(})195
-1896 y(com_view)g(\(arg\))314 1947 y(char)h(*arg;)195
-1999 y({)243 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290
-2103 y(return)g(1;)243 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f
-(arg\);)243 2259 y(return)g(\(system)g(\(syscom\)\);)195
-2311 y(})195 2414 y(com_rename)f(\(arg\))314 2466 y(char)i(*arg;)195
-2518 y({)243 2570 y(too_dangerous)e(\("rename"\);)243
-2622 y(return)h(\(1\);)p eop
+(Readline)843 b(43)1762 149 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 149 18 3 v 21 w(insert)p 378 149 V 21 w(completions)j
+Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\))195
+204 y Fu(Insert)i(the)g(list)h(of)e(p)q(ossible)j(completions)e(in)o
+(to)g(the)g(line,)i(deleting)f(the)f(partially-completed)195
+259 y(w)o(ord.)k(See)c(description)g(of)e Ft(rl_complete\(\))p
+Fu(.)20 b(This)d(calls)g Ft(rl_complete_internal\(\))c
+Fu(with)195 314 y(an)i(argumen)o(t)g(of)f(`)p Ft(*)p
+Fu('.)1762 434 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 434 V 21 w(completion)p 510 434 V 21 w(mo)r(de)h
+Fg(\()p Ft(rl_command_func_t)12 b(*cfunc)p Fg(\))195
+489 y Fu(Returns)25 b(the)g(apppriate)h(v)m(alue)g(to)f(pass)g(to)f
+Ft(rl_complete_internal\(\))f Fu(dep)q(ending)k(on)195
+543 y(whether)22 b Fk(cfunc)j Fu(w)o(as)d(called)h(t)o(wice)f(in)h
+(succession)g(and)f(the)g(v)m(alue)h(of)f(the)g Ft(show-all-if-)195
+598 y(ambiguous)14 b Fu(v)m(ariable.)21 b(Application-sp)q(ec)q(i\014c)
+e(completion)d(functions)g(ma)o(y)f(use)g(this)h(function)195
+653 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g(as)g
+Ft(rl_complete\(\))p Fu(.)1762 773 y(F)l(unction)-1861
+b Fi(char)20 b(**)f Fh(rl)p 312 773 V 21 w(completion)p
+607 773 V 21 w(matc)n(hes)j Fg(\()p Ft(const)15 b(char)f(*text,)283
+828 y(rl_compentry_func_t)e(*entry_func)p Fg(\))195 883
+y Fu(Returns)18 b(an)h(arra)o(y)f(of)g(strings)h(whic)o(h)h(is)g(a)e
+(list)i(of)e(completions)i(for)f Fk(text)p Fu(.)30 b(If)19
+b(there)g(are)g(no)195 937 y(completions,)f(returns)g
+Ft(NULL)p Fu(.)25 b(The)17 b(\014rst)g(en)o(try)g(in)h(the)f(returned)h
+(arra)o(y)e(is)i(the)f(substitution)195 992 y(for)c Fk(text)p
+Fu(.)18 b(The)c(remaining)g(en)o(tries)f(are)g(the)h(p)q(ossible)g
+(completions.)21 b(The)13 b(arra)o(y)f(is)i(terminated)195
+1047 y(with)i(a)e Ft(NULL)h Fu(p)q(oin)o(ter.)195 1115
+y Fk(en)o(try)p 302 1115 14 2 v 16 w(func)h Fu(is)e(a)f(function)h(of)e
+(t)o(w)o(o)g(args,)g(and)i(returns)f(a)f Ft(char)j(*)p
+Fu(.)k(The)13 b(\014rst)g(argumen)o(t)f(is)i Fk(text)p
+Fu(.)195 1170 y(The)f(second)g(is)f(a)h(state)e(argumen)o(t;)h(it)h(is)
+g(zero)f(on)g(the)h(\014rst)f(call,)i(and)e(non-zero)h(on)f(subsequen)o
+(t)195 1225 y(calls.)20 b Fk(en)o(try)p 420 1225 V 16
+w(func)15 b Fu(returns)e(a)e Ft(NULL)h Fu(p)q(oin)o(ter)h(to)e(the)i
+(caller)g(when)g(there)f(are)g(no)g(more)g(matc)o(hes.)1762
+1345 y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286
+1345 18 3 v 21 w(\014lename)p 515 1345 V 20 w(completion)p
+809 1345 V 21 w(function)k Fg(\()p Ft(const)15 b(char)f(*text,)h(int)
+283 1400 y(state)p Fg(\))195 1454 y Fu(A)e(generator)f(function)h(for)g
+(\014lename)h(completion)f(in)h(the)f(general)g(case.)19
+b Fk(text)14 b Fu(is)f(a)g(partial)g(\014le-)195 1509
+y(name.)20 b(The)15 b(Bash)f(source)h(is)g(a)g(useful)g(reference)h
+(for)e(writing)h(custom)f(completion)i(functions)195
+1564 y(\(the)f(Bash)g(completion)i(functions)e(call)i(this)e(and)h
+(other)f(Readline)h(functions\).)1762 1684 y(F)l(unction)-1861
+b Fi(char)20 b(*)f Fh(rl)p 286 1684 V 21 w(username)p
+547 1684 V 19 w(completion)p 840 1684 V 21 w(function)k
+Fg(\()p Ft(const)14 b(char)g(*text,)283 1739 y(int)g(state)p
+Fg(\))195 1794 y Fu(A)g(completion)i(generator)d(for)h(usernames.)19
+b Fk(text)c Fu(con)o(tains)f(a)g(partial)h(username)f(preceded)i(b)o(y)
+195 1848 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p
+Ft(~)p Fu('\).)i(As)c(with)g(all)i(completion)f(generators,)e
+Fk(state)j Fu(is)f(zero)f(on)195 1903 y(the)g(\014rst)g(call)h(and)g
+(non-zero)f(for)g(subsequen)o(t)h(calls.)75 2017 y Fj(2.6.3)30
+b(Completion)20 b(V)-5 b(ariables)1773 2166 y Fu(V)l(ariable)-1861
+b Fi(rl_compentry_func_t)22 b(*)d Fh(rl)p 678 2166 V
+21 w(completion)p 973 2166 V 21 w(en)n(try)p 1126 2166
+V 22 w(function)195 2221 y Fu(A)e(p)q(oin)o(ter)g(to)f(the)h(generator)
+f(function)h(for)f Ft(rl_completion_matches\(\))p Fu(.)22
+b Ft(NULL)16 b Fu(means)h(to)195 2276 y(use)f Ft
+(rl_filename_completion_)o(functio)o(n\(\))p Fu(,)c(the)j(default)h
+(\014lename)g(completer.)1773 2396 y(V)l(ariable)-1861
+b Fi(rl_completion_func_t)22 b(*)d Fh(rl)p 704 2396 V
+22 w(attempted)p 985 2396 V 20 w(completion)p 1279 2396
+V 21 w(function)195 2451 y Fu(A)e(p)q(oin)o(ter)h(to)f(an)g(alternativ)
+o(e)h(function)g(to)f(create)g(matc)o(hes.)26 b(The)18
+b(function)g(is)g(called)h(with)195 2506 y Fk(text)p
+Fu(,)11 b Fk(start)p Fu(,)g(and)h Fk(end)p Fu(.)19 b
+Fk(start)11 b Fu(and)h Fk(end)i Fu(are)d(indices)i(in)g
+Ft(rl_line_buffer)c Fu(de\014ning)k(the)f(b)q(ound-)195
+2560 y(aries)h(of)g Fk(text)p Fu(,)f(whic)o(h)i(is)g(a)e(c)o(haracter)h
+(string.)19 b(If)13 b(this)g(function)h(exists)g(and)f(returns)g
+Ft(NULL)p Fu(,)f(or)g(if)195 2615 y(this)f(v)m(ariable)i(is)e(set)g(to)
+f Ft(NULL)p Fu(,)h(then)g Ft(rl_complete\(\))e Fu(will)k(call)f(the)f
+(v)m(alue)h(of)f Ft(rl_completion_)195 2670 y(entry_function)h
+Fu(to)i(generate)g(matc)o(hes,)f(otherwise)i(the)f(arra)o(y)f(of)h
+(strings)g(returned)g(will)i(b)q(e)p eop
 %%Page: 44 46
-44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)195
-183 y Ft(})195 287 y(com_stat)23 b(\(arg\))314 339 y(char)h(*arg;)195
-391 y({)243 443 y(struct)f(stat)g(finfo;)243 546 y(if)g
-(\(!valid_argument)f(\("stat",)h(arg\)\))290 598 y(return)g(\(1\);)243
-702 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290
-754 y({)338 806 y(perror)g(\(arg\);)338 858 y(return)g(\(1\);)290
-910 y(})243 1013 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g
-(arg\);)243 1117 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g
-(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434
-1169 y(finfo.st_nlink,)434 1221 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("")
-h(:)g("s",)434 1273 y(finfo.st_size,)434 1325 y(\(finfo.st_size)e(==)h
-(1\))h(?)f("")h(:)g("s"\);)243 1377 y(printf)f(\("Inode)g(Last)g
-(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243
-1429 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f
-(\(&finfo.st_atime\)\);)243 1480 y(printf)g(\(")95 b(Last)23
-b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243
-1532 y(return)g(\(0\);)195 1584 y(})195 1688 y(com_delete)f(\(arg\))314
-1740 y(char)i(*arg;)195 1792 y({)243 1844 y(too_dangerous)e
-(\("delete"\);)243 1896 y(return)h(\(1\);)195 1947 y(})195
-2051 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f
-(the)h(commands)f(if)g(ARG)h(is)267 2103 y(not)f(present.)g(*/)195
-2155 y(com_help)g(\(arg\))314 2207 y(char)h(*arg;)195
-2259 y({)243 2311 y(register)e(int)i(i;)243 2363 y(int)f(printed)g(=)h
-(0;)243 2466 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
-2518 y({)338 2570 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g
-(commands[i].name\))f(==)i(0\)\))386 2622 y({)p eop
+44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)h(Library)195
+149 y(used.)j(If)12 b(this)f(function)h(sets)f(the)g
+Ft(rl_attempted_completion_over)d Fu(v)m(ariable)k(to)f(a)g(non-zero)
+195 204 y(v)m(alue,)18 b(Readline)h(will)f(not)f(p)q(erform)f(its)i
+(default)f(completion)h(ev)o(en)f(if)h(this)f(function)h(returns)195
+259 y(no)d(matc)o(hes.)1773 380 y(V)l(ariable)-1861 b
+Fi(rl_quote_func_t)21 b(*)f Fh(rl)p 574 380 18 3 v 21
+w(\014lename)p 803 380 V 20 w(quoting)p 1012 380 V 21
+w(function)195 434 y Fu(A)c(p)q(oin)o(ter)h(to)f(a)g(function)h(that)e
+(will)j(quote)e(a)g(\014lename)i(in)f(an)f(application-sp)q(eci\014)q
+(c)j(fashion.)195 489 y(This)h(is)g(called)i(if)e(\014lename)g
+(completion)h(is)f(b)q(eing)h(attempted)e(and)h(one)g(of)f(the)h(c)o
+(haracters)195 544 y(in)d Ft(rl_filename_quote_characters)c
+Fu(app)q(ears)k(in)g(a)g(completed)g(\014lename.)25 b(The)17
+b(function)195 599 y(is)i(called)i(with)e Fk(text)p Fu(,)g
+Fk(matc)o(h)p 722 599 14 2 v 16 w(t)o(yp)q(e)p Fu(,)g(and)g
+Fk(quote)p 1059 599 V 17 w(p)q(oin)o(ter)p Fu(.)31 b(The)19
+b Fk(text)h Fu(is)f(the)g(\014lename)h(to)e(b)q(e)195
+654 y(quoted.)39 b(The)21 b Fk(matc)o(h)p 607 654 V 16
+w(t)o(yp)q(e)j Fu(is)e(either)g Ft(SINGLE_MATCH)p Fu(,)f(if)h(there)f
+(is)h(only)g(one)g(completion)195 708 y(matc)o(h,)15
+b(or)g Ft(MULT_MATCH)p Fu(.)20 b(Some)c(functions)g(use)g(this)g(to)f
+(decide)j(whether)e(or)f(not)g(to)g(insert)h(a)195 763
+y(closing)c(quote)e(c)o(haracter.)18 b(The)11 b Fk(quote)p
+877 763 V 16 w(p)q(oin)o(ter)k Fu(is)c(a)f(p)q(oin)o(ter)i(to)e(an)o(y)
+g(op)q(ening)i(quote)f(c)o(haracter)195 818 y(the)k(user)h(t)o(yp)q
+(ed.)k(Some)15 b(functions)h(c)o(ho)q(ose)f(to)g(reset)g(this)g(c)o
+(haracter.)1773 938 y(V)l(ariable)-1861 b Fi(rl_dequote_func_t)22
+b(*)d Fh(rl)p 626 938 18 3 v 21 w(\014lename)p 855 938
+V 20 w(dequoting)p 1122 938 V 21 w(function)195 993 y
+Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(remo)o(v)o(e)e
+(application-sp)q(eci\014)q(c)k(quoting)d(c)o(haracters)f(from)195
+1048 y(a)i(\014lename)h(b)q(efore)g(completion)g(is)g(attempted,)f(so)f
+(those)h(c)o(haracters)g(do)g(not)g(in)o(terfere)h(with)195
+1103 y(matc)o(hing)i(the)g(text)g(against)f(names)h(in)h(the)f
+(\014lesystem.)33 b(It)19 b(is)g(called)i(with)e Fk(text)p
+Fu(,)g(the)g(text)195 1158 y(of)i(the)g(w)o(ord)g(to)g(b)q(e)h
+(dequoted,)h(and)e Fk(quote)p 1009 1158 14 2 v 17 w(c)o(har)p
+Fu(,)h(whic)o(h)g(is)g(the)f(quoting)h(c)o(haracter)f(that)195
+1212 y(delimits)d(the)e(\014lename)i(\(usually)f(`)p
+Ft(')p Fu(')f(or)f(`)p Ft(")p Fu('\).)22 b(If)17 b Fk(quote)p
+1187 1212 V 16 w(c)o(har)i Fu(is)e(zero,)f(the)g(\014lename)i(w)o(as)d
+(not)195 1267 y(in)h(an)f(em)o(b)q(edded)i(string.)1773
+1388 y(V)l(ariable)-1861 b Fi(rl_linebuf_func_t)22 b(*)d
+Fh(rl)p 626 1388 18 3 v 21 w(c)n(har)p 754 1388 V 21
+w(is)p 813 1388 V 21 w(quoted)p 1005 1388 V 21 w(p)195
+1443 y Fu(A)f(p)q(oin)o(ter)h(to)f(a)g(function)h(to)f(call)i(that)d
+(determines)j(whether)e(or)g(not)g(a)g(sp)q(eci\014c)j(c)o(haracter)195
+1497 y(in)d(the)f(line)i(bu\013er)e(is)h(quoted,)g(according)f(to)g
+(whatev)o(er)f(quoting)i(mec)o(hanism)g(the)f(program)195
+1552 y(calling)d(Readline)g(uses.)19 b(The)13 b(function)g(is)g(called)
+h(with)f(t)o(w)o(o)e(argumen)o(ts:)17 b Fk(text)p Fu(,)12
+b(the)h(text)f(of)g(the)195 1607 y(line,)17 b(and)e Fk(index)p
+Fu(,)i(the)e(index)i(of)e(the)g(c)o(haracter)g(in)h(the)g(line.)22
+b(It)15 b(is)h(used)g(to)f(decide)i(whether)e(a)195 1662
+y(c)o(haracter)f(found)i(in)g Ft(rl_completer_word_break_)o(charact)o
+(ers)c Fu(should)k(b)q(e)g(used)g(to)e(break)195 1717
+y(w)o(ords)g(for)h(the)g(completer.)1773 1837 y(V)l(ariable)-1861
+b Fi(rl_compignore_func_t)22 b(*)d Fh(rl)p 704 1837 V
+22 w(ignore)p 881 1837 V 20 w(some)p 1028 1837 V 19 w(completions)p
+1344 1837 V 21 w(function)195 1892 y Fu(This)g(function,)i(if)e
+(de\014ned,)i(is)e(called)h(b)o(y)f(the)g(completer)g(when)h(real)f
+(\014lename)h(completion)195 1947 y(is)e(done,)f(after)f(all)i(the)f
+(matc)o(hing)g(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)25
+b(It)17 b(is)h(passed)f(a)g Ft(NULL)f Fu(ter-)195 2001
+y(minated)g(arra)o(y)e(of)h(matc)o(hes.)20 b(The)c(\014rst)f(elemen)o
+(t)h(\()p Ft(matches[0])p Fu(\))d(is)j(the)g(maximal)g(substring)195
+2056 y(common)e(to)g(all)h(matc)o(hes.)k(This)c(function)g(can)g
+(re-arrange)f(the)g(list)h(of)f(matc)o(hes)g(as)g(required,)195
+2111 y(but)h(eac)o(h)h(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f
+(m)o(ust)g(b)q(e)i(freed.)1773 2232 y(V)l(ariable)-1861
+b Fi(rl_icppfunc_t)21 b(*)e Fh(rl)p 521 2232 V 21 w(directory)p
+769 2232 V 22 w(completion)p 1065 2232 V 21 w(ho)r(ok)195
+2286 y Fu(This)k(function,)i(if)e(de\014ned,)j(is)d(allo)o(w)o(ed)g(to)
+f(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)f(\014lenames)195
+2341 y(Readline)e(completes.)29 b(It)19 b(is)f(called)i(with)f(the)f
+(address)h(of)e(a)h(string)h(\(the)f(curren)o(t)g(directory)195
+2396 y(name\))g(as)g(an)h(argumen)o(t,)f(and)h(ma)o(y)f(mo)q(dify)h
+(that)f(string.)30 b(If)19 b(the)f(string)h(is)g(replaced)h(with)195
+2451 y(a)g(new)g(string,)h(the)f(old)g(v)m(alue)h(should)g(b)q(e)g
+(freed.)34 b(An)o(y)20 b(mo)q(di\014ed)i(directory)e(name)g(should)195
+2506 y(ha)o(v)o(e)14 b(a)g(trailing)i(slash.)k(The)15
+b(mo)q(di\014ed)h(v)m(alue)g(will)g(b)q(e)f(displa)o(y)o(ed)h(as)e
+(part)g(of)h(the)f(completion,)195 2560 y(replacing)h(the)g(directory)f
+(p)q(ortion)g(of)g(the)g(pathname)g(the)h(user)f(t)o(yp)q(ed.)20
+b(It)14 b(returns)g(an)g(in)o(teger)195 2615 y(that)i(should)h(b)q(e)g
+(non-zero)g(if)g(the)g(function)g(mo)q(di\014es)h(its)e(directory)h
+(argumen)o(t.)23 b(It)17 b(could)g(b)q(e)195 2670 y(used)f(to)e(expand)
+i(sym)o(b)q(olic)h(links)f(or)f(shell)i(v)m(ariables)f(in)g(pathnames.)
+p eop
 %%Page: 45 47
 45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)844 b(45)434 183 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e
-(commands[i].name,)h(commands[i].doc\);)434 235 y(printed++;)386
-287 y(})290 339 y(})243 443 y(if)h(\(!printed\))290 495
-y({)338 546 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48
-b(Possibilties)22 b(are:\\n",)h(arg\);)338 650 y(for)h(\(i)f(=)h(0;)g
-(commands[i].name;)d(i++\))386 702 y({)434 754 y(/*)i(Print)g(in)h(six)
-f(columns.)g(*/)434 806 y(if)g(\(printed)g(==)h(6\))481
-858 y({)529 910 y(printed)f(=)h(0;)529 962 y(printf)f(\("\\n"\);)481
-1013 y(})434 1117 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434
-1169 y(printed++;)386 1221 y(})338 1325 y(if)i(\(printed\))386
-1377 y(printf)f(\("\\n"\);)290 1429 y(})243 1480 y(return)g(\(0\);)195
-1532 y(})195 1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195
-1688 y(com_cd)f(\(arg\))314 1740 y(char)h(*arg;)195 1792
-y({)243 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290
-1896 y({)338 1947 y(perror)g(\(arg\);)338 1999 y(return)g(1;)290
-2051 y(})243 2155 y(com_pwd)g(\(""\);)243 2207 y(return)g(\(0\);)195
-2259 y(})195 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f
-(directory.)h(*/)195 2414 y(com_pwd)g(\(ignore\))314
-2466 y(char)h(*ignore;)195 2518 y({)243 2570 y(char)f(dir[1024],)g(*s;)
-p eop
+(Readline)843 b(45)1773 149 y(V)l(ariable)-1861 b Fi
+(rl_compdisp_func_t)22 b(*)d Fh(rl)p 652 149 18 3 v 21
+w(completion)p 947 149 V 21 w(displa)n(y)p 1141 149 V
+22 w(matc)n(hes)p 1366 149 V 21 w(ho)r(ok)195 204 y Fu(If)11
+b(non-zero,)h(then)f(this)h(is)f(the)g(address)g(of)g(a)g(function)g
+(to)g(call)h(when)f(completing)i(a)d(w)o(ord)h(w)o(ould)195
+259 y(normally)h(displa)o(y)g(the)f(list)h(of)f(p)q(ossible)h(matc)o
+(hes.)18 b(This)12 b(function)g(is)g(called)g(in)g(lieu)h(of)e
+(Readline)195 314 y(displa)o(ying)21 b(the)d(list.)32
+b(It)19 b(tak)o(es)f(three)h(argumen)o(ts:)26 b(\()p
+Ft(char)14 b(**)p Fk(matc)o(hes)p Fu(,)19 b Ft(int)f
+Fk(n)o(um)p 1688 314 14 2 v 17 w(matc)o(hes)p Fu(,)195
+369 y Ft(int)13 b Fk(max)p 368 369 V 16 w(length)p Fu(\))i(where)f
+Fk(matc)o(hes)h Fu(is)f(the)g(arra)o(y)f(of)g(matc)o(hing)h(strings,)g
+Fk(n)o(um)p 1578 369 V 16 w(matc)o(hes)i Fu(is)e(the)195
+423 y(n)o(um)o(b)q(er)h(of)f(strings)h(in)h(that)e(arra)o(y)l(,)f(and)i
+Fk(max)p 1012 423 V 16 w(length)h Fu(is)f(the)g(length)g(of)g(the)f
+(longest)h(string)g(in)195 478 y(that)e(arra)o(y)l(.)19
+b(Readline)c(pro)o(vides)g(a)e(con)o(v)o(enience)j(function,)f
+Ft(rl_display_match_list)p Fu(,)c(that)195 533 y(tak)o(es)17
+b(care)g(of)g(doing)h(the)f(displa)o(y)i(to)d(Readline's)j(output)e
+(stream.)26 b(That)16 b(function)j(ma)o(y)d(b)q(e)195
+588 y(called)h(from)d(this)i(ho)q(ok.)1773 704 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 704 18 3 v 21
+w(basic)p 580 704 V 21 w(w)n(ord)p 725 704 V 21 w(break)p
+886 704 V 20 w(c)n(haracters)195 759 y Fu(The)j(basic)h(list)g(of)f(c)o
+(haracters)f(that)g(signal)i(a)f(break)g(b)q(et)o(w)o(een)g(w)o(ords)g
+(for)f(the)h(completer)195 814 y(routine.)30 b(The)19
+b(default)g(v)m(alue)h(of)e(this)h(v)m(ariable)h(is)f(the)g(c)o
+(haracters)f(whic)o(h)h(break)g(w)o(ords)f(for)195 869
+y(completion)e(in)g(Bash:)k Ft(")15 b(\\t\\n\\"\\\\'`@$><=;|&{\(")p
+Fu(.)1773 985 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f
+Fh(rl)p 436 985 V 21 w(basic)p 580 985 V 21 w(quote)p
+740 985 V 21 w(c)n(haracters)195 1040 y Fu(A)c(list)h(of)f(quote)g(c)o
+(haracters)f(whic)o(h)i(can)g(cause)f(a)g(w)o(ord)g(break.)1773
+1156 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
+436 1156 V 21 w(completer)p 705 1156 V 21 w(w)n(ord)p
+850 1156 V 20 w(break)p 1010 1156 V 20 w(c)n(haracters)195
+1211 y Fu(The)33 b(list)g(of)f(c)o(haracters)g(that)f(signal)j(a)e
+(break)g(b)q(et)o(w)o(een)h(w)o(ords)f(for)g Ft(rl_complete_)195
+1266 y(internal\(\))p Fu(.)18 b(The)e(default)g(list)g(is)f(the)h(v)m
+(alue)g(of)f Ft(rl_basic_word_break_chara)o(cters)p Fu(.)1773
+1382 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
+436 1382 V 21 w(completer)p 705 1382 V 21 w(quote)p 865
+1382 V 20 w(c)n(haracters)195 1437 y Fu(A)e(list)h(of)e(c)o(haracters)g
+(whic)o(h)i(can)f(b)q(e)g(used)h(to)e(quote)h(a)f(substring)h(of)g(the)
+g(line.)26 b(Completion)195 1492 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)
+g(substring,)h(and)f(within)i(the)e(substring)g Ft
+(rl_completer_word_break_)195 1547 y(characters)j Fu(are)h(treated)g
+(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they)e(also)h(app)q
+(ear)g(within)h(this)195 1601 y(list.)1773 1718 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 1718 V 21 w(\014lename)p
+665 1718 V 20 w(quote)p 824 1718 V 21 w(c)n(haracters)195
+1773 y Fu(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g
+(\014lename)h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f
+(they)195 1828 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21
+b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1773
+1944 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
+436 1944 V 21 w(sp)r(ecial)p 623 1944 V 22 w(pre\014xes)195
+1999 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f
+(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h
+Fk(text)f Fu(when)195 2054 y(it)f(is)f(passed)h(to)f(the)g(completion)h
+(function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine)
+h(what)195 2108 y(kind)i(of)e(completing)i(to)e(do.)19
+b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e
+Ft(")p Fu($)p Ft(@")g Fu(so)g(that)g(it)h(can)195 2163
+y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1773
+2280 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2280
+V 21 w(completion)p 510 2280 V 21 w(query)p 673 2280
+V 21 w(items)195 2334 y Fu(Up)e(to)g(this)g(man)o(y)g(items)g(will)i(b)
+q(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)e(a)h(p)q
+(ossible-completions)j(call.)195 2389 y(After)14 b(that,)f(w)o(e)h(ask)
+g(the)h(user)f(if)h(she)f(is)h(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h
+(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 2444
+y(is)h(100.)1773 2560 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 2560 V 21 w(completion)p 510 2560 V 21
+w(app)r(end)p 715 2560 V 19 w(c)n(haracter)195 2615 y
+Fu(When)d(a)f(single)i(completion)g(alternativ)o(e)f(matc)o(hes)f(at)g
+(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 2670
+y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g(inserted)i
+(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g(c)o
+(haracter)p eop
 %%Page: 46 48
-46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)243
-183 y Ft(s)23 b(=)h(getwd)f(\(dir\);)243 235 y(if)g(\(s)h(==)f(0\))290
-287 y({)338 339 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g
-(dir\);)338 391 y(return)g(1;)290 443 y(})243 546 y(printf)g
-(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243
-598 y(return)g(0;)195 650 y(})195 754 y(/*)h(The)f(user)g(wishes)g(to)h
-(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)h(non-zero.)e
-(*/)p 1961 764 21 42 v 195 806 a(com_quit)h(\(arg\))314
-858 y(char)h(*arg;)195 910 y({)243 962 y(done)f(=)h(1;)243
-1013 y(return)f(\(0\);)195 1065 y(})195 1169 y(/*)h(Function)e(which)i
-(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195
-1221 y(too_dangerous)f(\(caller\))314 1273 y(char)i(*caller;)195
-1325 y({)243 1377 y(fprintf)f(\(stderr,)457 1429 y("\045s:)h(Too)f
-(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23
-b(it)h(yourself.\\n",)p 1987 1439 V 457 1480 a(caller\);)195
-1532 y(})195 1636 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid)
-f(argument)g(for)g(CALLER,)g(else)g(print)267 1688 y(an)g(error)g
-(message)g(and)h(return)f(zero.)g(*/)195 1740 y(int)195
-1792 y(valid_argument)f(\(caller,)h(arg\))314 1844 y(char)h(*caller,)e
-(*arg;)195 1896 y({)243 1947 y(if)h(\(!arg)g(||)h(!*arg\))290
-1999 y({)338 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g
-(required.\\n",)f(caller\);)338 2103 y(return)h(\(0\);)290
-2155 y(})243 2259 y(return)g(\(1\);)195 2311 y(})p eop
+46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)h(Library)195
+149 y(\(`)e('\).)19 b(Setting)14 b(this)f(to)g(the)g(n)o(ull)i(c)o
+(haracter)e(\(`)p Ft(\\0)p Fu('\))e(prev)o(en)o(ts)i(an)o(ything)h(b)q
+(eing)h(app)q(ended)f(auto-)195 204 y(matically)l(.)21
+b(This)15 b(can)f(b)q(e)h(c)o(hanged)g(in)g(custom)f(completion)i
+(functions)f(to)f(pro)o(vide)h(the)f(\\most)195 259 y(sensible)i(w)o
+(ord)c(separator)h(c)o(haracter")f(according)i(to)f(an)h
+(application-sp)q(eci\014c)j(command)c(line)195 314 y(syn)o(tax)h(sp)q
+(eci\014cation.)1773 423 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 423 18 3 v 21 w(completion)p 510 423 V
+21 w(suppress)p 746 423 V 19 w(app)r(end)195 478 y Fu(If)e(non-zero,)g
+Fk(rl)p 476 478 14 2 v 17 w(completion)p 709 478 V 18
+w(app)q(end)p 871 478 V 17 w(c)o(haracter)i Fu(is)f(not)e(app)q(ended)i
+(to)e(matc)o(hes)g(at)h(the)f(end)195 533 y(of)c(the)h(command)g(line,)
+h(as)f(describ)q(ed)h(ab)q(o)o(v)o(e.)k(It)14 b(is)h(set)e(to)g(0)h(b)q
+(efore)g(an)o(y)f(application-sp)q(eci)q(\014c)195 588
+y(completion)j(function)g(is)g(called.)1773 697 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 697 18 3 v 21 w(completion)p
+510 697 V 21 w(mark)p 662 697 V 19 w(symlink)p 875 697
+V 21 w(dirs)195 752 y Fu(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e
+(app)q(ended)i(to)d(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q
+(olic)j(links)195 807 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f
+(the)i(v)m(alue)g(of)f(the)g(user-settable)g Fk(mark-directories)j
+Fu(v)m(ariable.)195 862 y(This)i(v)m(ariable)h(exists)f(so)g(that)e
+(application)k(completion)f(functions)f(can)g(o)o(v)o(erride)g(the)f
+(user's)195 917 y(global)f(preference)g(\(set)e(via)h(the)g
+Fk(mark-symlink)o(ed-directories)k Fu(Readline)e(v)m(ariable\))f(if)f
+(appro-)195 971 y(priate.)20 b(This)15 b(v)m(ariable)g(is)g(set)f(to)f
+(the)i(user's)e(preference)j(b)q(efore)e(an)o(y)g(application)i
+(completion)195 1026 y(function)j(is)g(called,)h(so)e(unless)h(that)f
+(function)h(mo)q(di\014es)g(the)f(v)m(alue,)i(the)e(user's)g
+(preferences)195 1081 y(are)d(honored.)1773 1191 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1191 V 21 w(ignore)p 391 1191
+V 20 w(completion)p 685 1191 V 21 w(duplicates)195 1245
+y Fu(If)15 b(non-zero,)h(then)f(duplicates)i(in)f(the)f(matc)o(hes)g
+(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f(1.)1773
+1355 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1355
+V 21 w(\014lename)p 444 1355 V 20 w(completion)p 738
+1355 V 21 w(desired)195 1410 y Fu(Non-zero)c(means)g(that)f(the)h
+(results)g(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g
+(\014lenames.)23 b(This)195 1465 y(is)14 b Fl(always)j
+Fu(zero)c(on)g(en)o(try)l(,)g(and)h(can)f(only)h(b)q(e)g(c)o(hanged)f
+(within)i(a)e(completion)h(en)o(try)f(generator)195 1519
+y(function.)38 b(If)21 b(it)g(is)g(set)g(to)f(a)g(non-zero)h(v)m(alue,)
+i(directory)e(names)g(ha)o(v)o(e)g(a)f(slash)h(app)q(ended)195
+1574 y(and)d(Readline)h(attempts)d(to)h(quote)g(completed)i
+(\014lenames)f(if)g(they)g(con)o(tain)g(an)o(y)f(c)o(haracters)195
+1629 y(in)f Ft(rl_filename_quote_character)o(s)d Fu(and)i
+Ft(rl_filename_quoting_desired)d Fu(is)k(set)f(to)f(a)195
+1684 y(non-zero)h(v)m(alue.)1773 1793 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1793 V 21 w(\014lename)p 444
+1793 V 20 w(quoting)p 653 1793 V 21 w(desired)195 1848
+y Fu(Non-zero)14 b(means)g(that)f(the)i(results)f(of)g(the)g(matc)o
+(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g(quotes)195
+1903 y(\(or)c(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o
+(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y)
+195 1958 y(c)o(haracters)i(in)i Ft(rl_filename_quote_chars)p
+Fu(.)h(This)f(is)f Fl(always)k Fu(non-zero)d(on)f(en)o(try)l(,)f(and)i
+(can)195 2012 y(only)c(b)q(e)g(c)o(hanged)g(within)h(a)f(completion)g
+(en)o(try)g(generator)e(function.)20 b(The)12 b(quoting)g(is)g
+(e\013ected)195 2067 y(via)j(a)g(call)i(to)d(the)i(function)g(p)q(oin)o
+(ted)g(to)e(b)o(y)h Ft(rl_filename_quoting_function)p
+Fu(.)1773 2177 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
+215 2177 V 21 w(attempted)p 495 2177 V 20 w(completion)p
+789 2177 V 21 w(o)n(v)n(er)195 2232 y Fu(If)47 b(an)g(application-sp)q
+(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g
+Ft(rl_attempted_)195 2286 y(completion_function)24 b
+Fu(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j
+(Readline)e(will)g(not)195 2341 y(p)q(erform)15 b(its)g(default)g
+(\014lename)h(completion)g(ev)o(en)f(if)g(the)g(application's)h
+(completion)g(function)195 2396 y(returns)f(no)g(matc)o(hes.)20
+b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h
+(completion)h(function.)1773 2506 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(completion)p 510
+2506 V 21 w(t)n(yp)r(e)195 2560 y Fu(Set)e(to)e(a)i(c)o(haracter)f
+(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)g(is)f
+(curren)o(tly)g(attempt-)195 2615 y(ing;)g(see)f(the)f(description)i
+(of)f Ft(rl_complete_internal\(\))c Fu(\(see)k(Section)h(2.6.2)d
+([Completion)195 2670 y(F)l(unctions],)g(page)g(42\))g(for)f(the)h
+(list)h(of)f(c)o(haracters.)p eop
 %%Page: 47 49
-47 48 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(47)75
-183 y Fq(Concept)27 b(Index)75 359 y Fs(C)75 417 y Ff(command)14
-b(editing)9 b Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(1)75 517 y Fs(E)75 575 y Ff(editing)15 b(command)f(lines)8
-b Fe(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(1)75 675
-y Fs(I)75 733 y Ff(initiali)q(zati)q(on)c(\014le,)e(readline)8
-b Fe(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(4)75 782 y(in)o(teraction,)15
-b(readline)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
-b Ff(1)75 882 y Fs(K)75 940 y Ff(kill)15 b(ring)e Fe(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)24 b Ff(3)1012 359 y(killin)q(g)16 b(text)11
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)24 b Ff(2)1012 495 y Fs(N)1012 553 y Ff(notation,)15
-b(readline)5 b Fe(.)k(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-19 b Ff(1)1012 688 y Fs(R)1012 747 y Ff(readline,)c(function)6
-b Fe(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Ff(19)1012 882 y Fs(Y)1012 940 y Ff(y)o(anking)c(text)6
-b Fe(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)19 b Ff(2)p eop
+47 48 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(47)1773 149 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 149 18 3 v 21 w(inhibit)p 399 149 V 23
+w(completion)195 204 y Fu(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f
+(completion)i(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e
+(will)j(b)q(e)195 259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)
+e Ft(self-insert)p Fu(.)75 371 y Fj(2.6.4)30 b(A)21 b(Short)f
+(Completion)g(Example)137 467 y Fu(Here)11 b(is)f(a)g(small)h
+(application)h(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)h
+(library)l(.)19 b(It)11 b(is)f(called)75 522 y Ft(fileman)p
+Fu(,)17 b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p
+Ft(examples/fileman.c)p Fu('.)25 b(This)18 b(sample)g(application)75
+577 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i
+(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p
+eop
 %%Page: 48 50
-48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)p
-eop
+48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h
+(demonstrates)g(how)g(to)h(use)f(the)267 201 y(GNU)g(Readline)g
+(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users)
+267 253 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195
+357 y(#include)f(<stdio.h>)195 409 y(#include)g(<sys/types.h>)195
+461 y(#include)g(<sys/file.h>)195 513 y(#include)g(<sys/stat.h>)195
+565 y(#include)g(<sys/errno.h>)195 668 y(#include)g
+(<readline/readline.h>)195 720 y(#include)g(<readline/history.h>)195
+824 y(extern)g(char)g(*xmalloc)g(\(\);)195 928 y(/*)h(The)f(names)g(of)
+h(functions)e(that)i(actually)f(do)g(the)h(manipulation.)e(*/)195
+980 y(int)h(com_list)g(__P\(\(char)g(*\)\);)195 1032
+y(int)g(com_view)g(__P\(\(char)g(*\)\);)195 1083 y(int)g(com_rename)g
+(__P\(\(char)g(*\)\);)195 1135 y(int)g(com_stat)g(__P\(\(char)g(*\)\);)
+195 1187 y(int)g(com_pwd)g(__P\(\(char)g(*\)\);)195 1239
+y(int)g(com_delete)g(__P\(\(char)g(*\)\);)195 1291 y(int)g(com_help)g
+(__P\(\(char)g(*\)\);)195 1343 y(int)g(com_cd)g(__P\(\(char)g(*\)\);)
+195 1395 y(int)g(com_quit)g(__P\(\(char)g(*\)\);)195
+1499 y(/*)h(A)f(structure)g(which)g(contains)g(information)f(on)i(the)f
+(commands)g(this)g(program)267 1550 y(can)g(understand.)f(*/)195
+1654 y(typedef)h(struct)g({)243 1706 y(char)g(*name;)g(/*)h(User)f
+(printable)g(name)g(of)h(the)f(function.)g(*/)243 1758
+y(rl_icpfunc_t)f(*func;)h(/*)h(Function)e(to)i(call)f(to)h(do)f(the)h
+(job.)f(*/)243 1810 y(char)g(*doc;)g(/*)h(Documentation)e(for)h(this)h
+(function.)46 b(*/)195 1862 y(})24 b(COMMAND;)195 1966
+y(COMMAND)f(commands[])f(=)i({)243 2017 y({)f("cd",)h(com_cd,)f
+("Change)f(to)i(directory)f(DIR")g(},)243 2069 y({)g("delete",)g
+(com_delete,)f("Delete)h(FILE")h(},)243 2121 y({)f("help",)g(com_help,)
+g("Display)g(this)g(text")g(},)243 2173 y({)g("?",)h(com_help,)e
+("Synonym)h(for)h(`help'")f(},)243 2225 y({)g("list",)g(com_list,)g
+("List)g(files)g(in)h(DIR")f(},)243 2277 y({)g("ls",)h(com_list,)e
+("Synonym)h(for)g(`list'")g(},)243 2329 y({)g("pwd",)g(com_pwd,)g
+("Print)g(the)h(current)f(working)g(directory")f(},)243
+2381 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243
+2433 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g
+(},)243 2484 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g
+(on)h(FILE")f(},)243 2536 y({)g("view",)g(com_view,)g("View)g(the)h
+(contents)e(of)i(FILE")f(},)243 2588 y({)g(\(char)h(*\)NULL,)f
+(\(rl_icpfunc_t)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195
+2640 y(};)p eop
 %%Page: 49 51
-49 50 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(49)75 183 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
-b(Index)75 345 y Fs(A)75 403 y Fd(abort)11 b(\(C-g\))6
-b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)18 b Ff(17)75 453 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\))
-s Fe(.)s(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
-b Ff(12)75 503 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(29)75
-652 y Fs(B)75 711 y Fd(backward-c)o(ha)o(r)10 b(\(C-b\))t
-Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75 760
-y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))f
-Fe(.)s(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Ff(14)75 810 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10
-b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-22 b Ff(14)75 860 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10
-b(\(M-DEL\))t Fe(.)s(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)16 b Ff(15)75 910 y Fd(backward-w)o(or)o(d)10
-b(\(M-b\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75
-960 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 b(\(M-<\))t
-Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)16 b Ff(13)75 1009 y Fd(beginning-)o(of)o(-li)o(ne)9
-b(\(C-a\))e Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12)75 1059 y(b)q(ell-st)o(yle)13
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)23 b Ff(4)75 1209 y Fs(C)75 1267
-y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))6
-b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-18 b Ff(16)75 1317 y Fd(capitalize)o(-w)o(ord)9 b(\(M-c\))f
-Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(14)75 1366 y Fd(character-)o(se)o(arc)o
-(h)10 b(\(C-]\))f Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)75 1416
-y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))s
-Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(17)75
-1466 y Fd(clear-scre)o(en)9 b(\(C-l\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)18 b Ff(12)75 1516 y(commen)o(t-b)q(egin)9 b
-Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21
-b Ff(4)75 1566 y Fd(complete)10 b(\(TAB\))e Fe(.)e(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(16)75 1616 y(completion-query-i)q
-(tems)9 b Fe(.)f(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(5)75
-1665 y Fd(completion)p 276 1665 12 2 v 10 w(matches)5
-b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(34)75
-1715 y(con)o(v)o(ert-meta)11 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)75 1765 y Fd(copy-backw)o(ar)
-o(d-w)o(or)o(d)10 b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
-b Ff(15)75 1815 y Fd(copy-forwa)o(rd)o(-wo)o(rd)9 b(\(\))i
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)75 1865 y Fd(copy-regio)o(n-)o
-(as-)o(ki)o(ll)9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(15)75
-2014 y Fs(D)75 2072 y Fd(delete-cha)o(r)10 b(\(C-d\))c
-Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(13)75
-2122 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))g
-Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)21 b Ff(16)75 2172 y Fd(delete-hor)o(iz)o(ont)o(al)o
-(-sp)o(ace)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)16 b Ff(15)75 2222 y Fd(digit-argu)o(me)o(nt)9
-b(\(M-0,)i(M-1,)h(...)f(M--\))t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)16 b Ff(15)75 2271 y Fd(digit)p 177 2271 V 12 w(p)10
-b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)23 b Ff(29)75 2321 y Fd(digit)p 177
-2321 V 12 w(value)5 b Fe(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(29)75 2371 y Fd(ding)10
-b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(29)75 2421 y(disable-comple)q
-(tion)7 b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Ff(5)75 2471 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9
-b(\(M-a,)i(M-b,)g(M-)p Fe(x)p Fd(,)h Fc(:)6 b(:)g(:)p
-Fd(\))j Fe(.)d(.)23 b Ff(17)75 2521 y Fd(downcase-w)o(or)o(d)10
-b(\(M-l\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(14)75
-2570 y Fd(dump-funct)o(io)o(ns)9 b(\(\))d Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)19 b Ff(17)75 2620 y Fd(dump-macro)o(s)10
-b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
-b Ff(18)75 2670 y Fd(dump-varia)o(bl)o(es)9 b(\(\))d
-Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(18)1012
-345 y Fs(E)1012 403 y Ff(editing-mo)q(de)13 b Fe(.)6
-b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23
-b Ff(5)1012 453 y(enable-k)o(eypad)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(5)1012
-503 y Fd(end-kbd-mac)o(ro)9 b(\(C-x)i(\)\))5 b Fe(.)h(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)18 b Ff(16)1012 553 y Fd(end-of-hist)o(or)o(y)10
-b(\(M->\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012
-603 y Fd(end-of-line)9 b(\(C-e\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)20 b Ff(12)1012 652 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o
-(rk)9 b(\(C-x)j(C-x\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(17)1012 702 y(expand-tilde)8 b Fe(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(5)1012
-811 y Fs(F)1012 869 y Fd(filename)p 1174 869 V 11 w(completion)p
-1385 869 V 11 w(function)s Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(35)1012 919 y Fd(forward-bac)o(kw)o(ard)
-o(-d)o(ele)o(te)o(-ch)o(ar)9 b(\(\))d Fe(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)19 b Ff(14)1012 969 y Fd(forward-cha)o(r)10
-b(\(C-f\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18
-b Ff(12)1012 1019 y Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10
-b(\(C-s\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)23 b Ff(13)1012 1069 y Fd(forward-wor)o(d)10 b(\(M-f\))5
-b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(12)1012
-1118 y Fd(free)p 1094 1118 V 13 w(undo)p 1187 1118 V
-13 w(list)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)17 b Ff(27)1012 1228 y Fs(H)1012 1286 y Fd(history-sea)o(rc)o(h-b)o
-(ac)o(kwa)o(rd)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(13)1012 1336 y Fd(history-sea)o(rc)
-o(h-f)o(or)o(war)o(d)10 b(\(\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(13)1012
-1385 y(horizon)o(tal-scrol)q(l-mo)r(de)c Fe(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)24 b Ff(5)1012 1495 y Fs(I)1012 1553 y Ff(input-meta)12
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)23 b Ff(5)1012 1602 y Fd(insert-comm)o(en)o(t)10
-b(\(M-#\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(17)1012
-1652 y Fd(insert-comp)o(le)o(tio)o(ns)9 b(\(M-*\))d Fe(.)t(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19
-b Ff(16)1012 1702 y(isearc)o(h-terminators)13 b Fe(.)6
-b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(6)1012
-1811 y Fs(K)1012 1869 y Ff(k)o(eymap)t Fe(.)7 b(.)g(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Ff(6)1012 1919 y Fd(kill-line)10 b(\(C-k\))f Fe(.)t(.)d(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(14)1012 1969 y Fd(kill-region)9
-b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
-b Ff(15)1012 2019 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))c
-Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(15)1012
-2069 y Fd(kill-word)10 b(\(M-d\))f Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)22 b Ff(15)1012 2178 y Fs(L)1012 2236
-y Fd(lowercase)p 1194 2236 V 11 w(p)5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(29)1012
-2345 y Fs(M)1012 2403 y Ff(mark-mo)q(di\014ed-li)q(nes)6
-b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b
-Ff(6)1012 2453 y Fd(menu-comple)o(te)9 b(\(\))f Fe(.)d(.)h(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(16)1012 2503 y(meta-\015ag)8
-b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)21 b Ff(5)1012 2612 y Fs(N)1012 2670
-y Fd(next-histor)o(y)10 b(\(C-n\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)18 b Ff(12)p eop
-%%Page: 50 52
-50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Fd(non-increm)o(en)o(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o
-(st)o(ory)9 b(\(M-n\))155 233 y Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16
-b Ff(13)75 283 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)o(ear)o
-(ch)o(-hi)o(st)o(ory)9 b(\(M-p\))155 333 y Fe(.)d(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)16 b Ff(13)75 382 y Fd(numeric)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(29)75 485 y Fs(O)75 543 y Ff(output-meta)7 b Fe(.)g(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19
-b Ff(6)75 646 y Fs(P)75 704 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9
-b(\(M-?\))t Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)16 b Ff(16)75 754 y Fd(prefix-met)o(a)10
-b(\(ESC\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Ff(17)75 804 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))f
-Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 907 y Fs(Q)75 965 y
-Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))d Fe(.)e(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Ff(14)75 1068 y Fs(R)75 1126 y Fd(re-read-in)o(it)o(-fi)o(le)9
-b(\(C-x)i(C-r\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)18 b Ff(17)75 1176 y Fd(readline)6
-b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)19 b Ff(19)75 1225 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)
-9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 1275 y Fd(reverse-se)o(ar)
-o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))f Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(13)75 1325 y Fd(revert-lin)o(e)10
-b(\(M-r\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Ff(17)75 1375 y Fd(rl)p 117 1375 12 2 v 13 w(add)p
-190 1375 V 13 w(defun)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(23)75 1425 y Fd(rl)p 117
-1425 V 13 w(add)p 190 1425 V 13 w(undo)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(27)75
-1474 y Fd(rl)p 117 1474 V 13 w(already)p 270 1474 V 12
-w(prompted)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(22)75
-1524 y Fd(rl)p 117 1524 V 13 w(attempted)p 310 1524 V
-11 w(completion)p 520 1524 V 10 w(function)g Fe(.)6 b(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)24 b Ff(35)75 1574 y Fd(rl)p 117 1574
-V 13 w(basic)p 230 1574 V 13 w(quote)p 343 1574 V 12
-w(character)o(s)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 1624 y Fd(rl)p
-117 1624 V 13 w(basic)p 230 1624 V 13 w(word)p 323 1624
-V 12 w(break)p 435 1624 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(36)75 1674 y Fd(rl)p
-117 1674 V 13 w(begin)p 230 1674 V 13 w(undo)p 323 1674
-V 12 w(group)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
-b Ff(26)75 1724 y Fd(rl)p 117 1724 V 13 w(bind)p 210
-1724 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)20 b Ff(25)75 1773 y Fd(rl)p 117
-1773 V 13 w(bind)p 210 1773 V 13 w(key)p 283 1773 V 13
-w(in)p 336 1773 V 13 w(map)t Fe(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)17 b Ff(25)75 1823 y Fd(rl)p 117 1823 V 13 w(binding)p
-270 1823 V 12 w(keymap)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23
-b Ff(23)75 1873 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7
-b Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(30)75 1923 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)9
-b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-21 b Ff(30)75 1973 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)6
-b Fe(.)s(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(30)75 2022 y Fd(rl)p
-117 2022 V 13 w(catch)p 230 2022 V 13 w(signals)13 b
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b
-Ff(32)75 2072 y Fd(rl)p 117 2072 V 13 w(catch)p 230 2072
-V 13 w(sigwinch)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23
-b Ff(32)75 2122 y Fd(rl)p 117 2122 V 13 w(char)p 210
-2122 V 13 w(is)p 263 2122 V 13 w(quoted)p 396 2122 V
-12 w(p)18 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b
-Ff(35)75 2172 y Fd(rl)p 117 2172 V 13 w(cleanup)p 270
-2172 V 12 w(after)p 382 2172 V 12 w(signal)t Fe(.)s(.)6
-b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)16 b Ff(32)75 2222 y Fd(rl)p 117 2222 V 13
-w(clear)p 230 2222 V 13 w(message)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)22 b Ff(28)75 2271 y Fd(rl)p 117 2271
-V 13 w(clear)p 230 2271 V 13 w(signals)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)22 b Ff(33)75 2321 y Fd(rl)p 117
-2321 V 13 w(complete)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(34)75 2371 y Fd(rl)p
-117 2371 V 13 w(complete)p 290 2371 V 11 w(internal)5
-b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(34)75 2421 y
-Fd(rl)p 117 2421 V 13 w(completer)p 310 2421 V 11 w(quote)p
-421 2421 V 12 w(characters)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)19 b Ff(36)75 2471 y Fd(rl)p 117 2471
-V 13 w(completer)p 310 2471 V 11 w(word)p 401 2471 V
-13 w(break)p 514 2471 V 12 w(character)o(s)13 b Fe(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 2521 y
-Fd(rl)p 117 2521 V 13 w(completion)p 329 2521 V 11 w(append)p
-461 2521 V 11 w(character)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)18 b Ff(36)75 2570 y Fd(rl)p 117 2570 V 13
-w(completion)p 329 2570 V 11 w(display)p 481 2570 V 11
-w(matches)p 632 2570 V 11 w(hook)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)16 b Ff(37)75 2620 y Fd(rl)p 117 2620 V 13 w(completion)p
-329 2620 V 11 w(entry)p 441 2620 V 12 w(function)21 b
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(34,)13
-b(35)75 2670 y Fd(rl)p 117 2670 V 13 w(completion)p 329
-2670 V 11 w(query)p 441 2670 V 12 w(items)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
-b Ff(36)1012 183 y Fd(rl)p 1054 183 V 14 w(copy)p 1148
-183 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)17 b Ff(24)1012 233 y Fd(rl)p 1054 233 V 14
-w(copy)p 1148 233 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012 283 y
-Fd(rl)p 1054 283 V 14 w(delete)p 1188 283 V 12 w(text)t
-Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17
-b Ff(28)1012 333 y Fd(rl)p 1054 333 V 14 w(directory)p
-1247 333 V 10 w(completion)p 1458 333 V 11 w(hook)i Fe(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(37)1012 382 y Fd(rl)p 1054 382 V 14 w(discard)p
-1208 382 V 11 w(keymap)9 b Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-22 b Ff(24)1012 432 y Fd(rl)p 1054 432 V 14 w(display)p
-1208 432 V 11 w(match)p 1319 432 V 12 w(list)6 b Fe(.)f(.)h(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)19 b Ff(29)1012 482 y Fd(rl)p 1054 482 V 14 w(do)p
-1108 482 V 13 w(undo)9 b Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(27)1012 532 y Fd(rl)p
-1054 532 V 14 w(done)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)1012
-582 y Fd(rl)p 1054 582 V 14 w(end)f Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18
-b Ff(21)1012 632 y Fd(rl)p 1054 632 V 14 w(end)p 1128
-632 V 13 w(undo)p 1221 632 V 12 w(group)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)25 b Ff(26)1012 681 y Fd(rl)p 1054 681
-V 14 w(erase)p 1168 681 V 12 w(empty)p 1280 681 V 12
-w(line)d Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)24 b Ff(22)1012
-731 y Fd(rl)p 1054 731 V 14 w(event)p 1168 731 V 12 w(hook)18
-b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Ff(23)1012 781 y Fd(rl)p 1054 781 V 14 w(executing)p
-1247 781 V 10 w(keymap)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
-b Ff(23)1012 831 y Fd(rl)p 1054 831 V 14 w(extend)p 1188
-831 V 12 w(line)p 1280 831 V 12 w(buffer)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-19 b Ff(28)1012 881 y Fd(rl)p 1054 881 V 14 w(filename)p
-1228 881 V 11 w(completio)o(n)p 1438 881 V 11 w(desired)d
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Ff(37)1012 930 y Fd(rl)p 1054 930 V 14 w(filename)p
-1228 930 V 11 w(dequoting)p 1418 930 V 10 w(function)d
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Ff(35)1012 980 y Fd(rl)p 1054 980 V 14 w(filename)p
-1228 980 V 11 w(quote)p 1339 980 V 12 w(character)o(s)f
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(36)1012 1030 y Fd(rl)p 1054 1030 V 14 w(filename)p
-1228 1030 V 11 w(quoting)p 1379 1030 V 11 w(desired)f
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
-b Ff(37)1012 1080 y Fd(rl)p 1054 1080 V 14 w(filename)p
-1228 1080 V 11 w(quoting)p 1379 1080 V 11 w(function)18
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(35)1012 1130 y Fd(rl)p 1054 1130 V 14 w(forced)p
-1188 1130 V 12 w(update)p 1320 1130 V 11 w(display)9
-b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)24 b Ff(27)1012 1180 y Fd(rl)p 1054 1180
-V 14 w(free)p 1148 1180 V 12 w(line)p 1240 1180 V 13
-w(state)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Ff(32)1012 1229 y Fd(rl)p 1054 1229 V 14 w(function)p
-1228 1229 V 11 w(dumper)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Ff(26)1012 1279 y Fd(rl)p 1054 1279 V 14 w(function)p
-1228 1279 V 11 w(of)p 1279 1279 V 13 w(keyseq)6 b Fe(.)t(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)19 b Ff(25)1012 1329 y Fd(rl)p 1054 1329 V 14
-w(funmap)p 1188 1329 V 12 w(names)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 1379 y Fd(rl)p 1054
-1379 V 14 w(generic)p 1208 1379 V 11 w(bind)10 b Fe(.)c(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(25)1012 1429 y Fd(rl)p
-1054 1429 V 14 w(get)p 1128 1429 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(24)1012
-1478 y Fd(rl)p 1054 1478 V 14 w(get)p 1128 1478 V 13
-w(keymap)p 1261 1478 V 11 w(by)p 1312 1478 V 14 w(name)9
-b Fe(.)t(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(24)1012 1528 y Fd(rl)p
-1054 1528 V 14 w(get)p 1128 1528 V 13 w(keymap)p 1261
-1528 V 11 w(name)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Ff(24)1012 1578 y Fd(rl)p 1054 1578 V 14 w(getc)8 b
-Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)23 b Ff(28)1012 1628 y Fd(rl)p 1054 1628
-V 14 w(getc)p 1148 1628 V 12 w(function)13 b Fe(.)7 b(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(23)1012 1678 y Fd(rl)p
-1054 1678 V 14 w(ignore)p 1188 1678 V 12 w(completi)o(on)p
-1399 1678 V 11 w(duplicate)o(s)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)17 b Ff(36)1012 1727 y Fd(rl)p 1054 1727
-V 14 w(ignore)p 1188 1727 V 12 w(some)p 1280 1727 V 12
-w(completion)o(s)p 1511 1727 V 11 w(function)j Fe(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(37)1012 1777 y Fd(rl)p
-1054 1777 V 14 w(inhibit)p 1208 1777 V 11 w(completion)15
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(37)1012 1827 y Fd(rl)p
-1054 1827 V 14 w(initializ)o(e)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(28)1012 1877 y Fd(rl)p
-1054 1877 V 14 w(insert)p 1188 1877 V 12 w(completi)o(ons)r
-Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(34)1012 1927 y Fd(rl)p
-1054 1927 V 14 w(insert)p 1188 1927 V 12 w(text)t Fe(.)t(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17
-b Ff(28)1012 1977 y Fd(rl)p 1054 1977 V 14 w(instream)g
-Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20
-b Ff(22)1012 2026 y Fd(rl)p 1054 2026 V 14 w(invoking)p
-1228 2026 V 11 w(keyseqs)6 b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Ff(26)1012 2076 y Fd(rl)p 1054 2076 V 14 w(invoking)p
-1228 2076 V 11 w(keyseqs)p 1379 2076 V 11 w(in)p 1430
-2076 V 14 w(map)9 b Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 2126 y Fd(rl)p
-1054 2126 V 14 w(kill)p 1148 2126 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012
-2176 y Fd(rl)p 1054 2176 V 14 w(library)p 1208 2176 V
-11 w(version)g Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
-b Ff(22)1012 2226 y Fd(rl)p 1054 2226 V 14 w(line)p 1148
-2226 V 12 w(buffer)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)19 b Ff(21)1012 2275 y Fd(rl)p 1054 2275 V
-14 w(list)p 1148 2275 V 12 w(funmap)p 1280 2275 V 12
-w(names)7 b Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(26)1012
-2325 y Fd(rl)p 1054 2325 V 14 w(make)p 1148 2325 V 12
-w(bare)p 1240 2325 V 13 w(keymap)9 b Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-22 b Ff(24)1012 2375 y Fd(rl)p 1054 2375 V 14 w(make)p
-1148 2375 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)17 b Ff(24)1012 2425 y Fd(rl)p 1054 2425
-V 14 w(mark)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(21)1012 2475
-y Fd(rl)p 1054 2475 V 14 w(message)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(27)1012
-2524 y Fd(rl)p 1054 2524 V 14 w(modifying)s Fe(.)s(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Ff(27)1012 2574 y Fd(rl)p 1054 2574 V 14 w(named)p
-1168 2574 V 12 w(function)8 b Fe(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)22 b Ff(25)1012 2624 y Fd(rl)p 1054 2624 V 14 w(on)p
-1108 2624 V 13 w(new)p 1181 2624 V 13 w(line)7 b Fe(.)t(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)p eop
-%%Page: 51 53
-51 52 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(51)75 183 y Fd(rl)p 117 183 12 2 v 13 w(on)p 170 183
-V 14 w(new)p 244 183 V 13 w(line)p 337 183 V 12 w(with)p
-429 183 V 13 w(prompt)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(27)75 233 y Fd(rl)p
-117 233 V 13 w(outstream)d Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)h(.)18 b Ff(22)75 283 y Fd(rl)p 117 283
-V 13 w(parse)p 230 283 V 13 w(and)p 303 283 V 13 w(bind)9
-b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(25)75
-333 y Fd(rl)p 117 333 V 13 w(pending)p 270 333 V 12 w(input)14
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16
-b Ff(22)75 382 y Fd(rl)p 117 382 V 13 w(point)22 b Fe(.)6
-b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)24 b Ff(21)75 432 y Fd(rl)p 117 432 V 13 w(possible)p
-290 432 V 11 w(completions)6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(34)75
-482 y Fd(rl)p 117 482 V 13 w(pre)p 190 482 V 13 w(input)p
-303 482 V 13 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-18 b Ff(22)75 532 y Fd(rl)p 117 532 V 13 w(prompt)i Fe(.)7
-b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-22 b Ff(22)75 582 y Fd(rl)p 117 582 V 13 w(read)p 210
-582 V 13 w(init)p 303 582 V 13 w(file)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)24 b Ff(25)75 632 y Fd(rl)p 117 632 V
-13 w(read)p 210 632 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(28)75 681
-y Fd(rl)p 117 681 V 13 w(readline)p 290 681 V 11 w(name)15
-b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16
-b Ff(22)75 731 y Fd(rl)p 117 731 V 13 w(redisplay)t Fe(.)s(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16
-b Ff(27)75 781 y Fd(rl)p 117 781 V 13 w(redisplay)p 310
-781 V 11 w(function)f Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75
-831 y Fd(rl)p 117 831 V 13 w(reset)p 230 831 V 13 w(after)p
-343 831 V 12 w(signal)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
-b Ff(32)75 881 y Fd(rl)p 117 881 V 13 w(reset)p 230 881
-V 13 w(line)p 323 881 V 12 w(state)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
-f(.)21 b Ff(27)75 930 y Fd(rl)p 117 930 V 13 w(reset)p
-230 930 V 13 w(terminal)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-21 b Ff(29)75 980 y Fd(rl)p 117 980 V 13 w(resize)p 250
-980 V 12 w(terminal)7 b Fe(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(33)75 1030 y Fd(rl)p 117 1030 V 13 w(restore)p 270
-1030 V 12 w(prompt)9 b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(28)75 1080 y Fd(rl)p 117 1080 V 13 w(save)p 210
-1080 V 13 w(prompt)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)17 b Ff(28)75 1130 y Fd(rl)p 117 1130 V 13
-w(set)p 190 1130 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(24)75 1180 y Fd(rl)p
-117 1180 V 13 w(set)p 190 1180 V 13 w(signals)t Fe(.)t(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Ff(33)75 1229 y Fd(rl)p 117 1229 V 13 w(special)p 270
-1229 V 12 w(prefixes)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Ff(36)75 1279 y Fd(rl)p 117 1279 V 13 w(startup)p 270
-1279 V 12 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)17 b Ff(22)75 1329 y Fd(rl)p 117 1329 V 13 w(stuff)p
-230 1329 V 13 w(char)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)18 b Ff(28)75 1379 y Fd(rl)p 117 1379
-V 13 w(terminal)p 290 1379 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)16 b Ff(22)75 1429 y Fd(rl)p 117
-1429 V 13 w(unbind)p 250 1429 V 12 w(command)p 402 1429
-V 12 w(in)p 454 1429 V 13 w(map)5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
-b Ff(25)75 1478 y Fd(rl)p 117 1478 V 13 w(unbind)p 250
-1478 V 12 w(function)p 422 1478 V 11 w(in)p 473 1478
-V 14 w(map)t Fe(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(25)75 1528 y Fd(rl)p
-117 1528 V 13 w(unbind)p 250 1528 V 12 w(key)5 b Fe(.)g(.)h(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(25)75
-1578 y Fd(rl)p 117 1578 V 13 w(unbind)p 250 1578 V 12
-w(key)p 322 1578 V 13 w(in)p 375 1578 V 13 w(map)10 b
-Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(25)1012 183 y
-Fs(S)1012 241 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...\))t
-Fe(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
-b Ff(14)1012 291 y Fd(set-mark)10 b(\(C-@\))e Fe(.)f(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(17)1012 341 y(sho)o(w-all-if-am)
-o(bigu)q(ous)8 b Fe(.)g(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(6)1012 391 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))e
-Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)24 b Ff(16)1012 490 y Fs(T)1012 549 y
-Fd(tab-insert)9 b(\(M-TAB\))c Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18
-b Ff(14)1012 598 y Fd(tilde-expan)o(d)10 b(\(M-~\))5
-b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(17)1012
-648 y Fd(to)p 1054 648 V 14 w(lower)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)22
-b Ff(29)1012 698 y Fd(to)p 1054 698 V 14 w(upper)9 b
-Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)g(.)22 b Ff(29)1012 748 y Fd(transpose-c)o(ha)o(rs)9
-b(\(C-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(14)1012 798
-y Fd(transpose-w)o(or)o(ds)9 b(\(M-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23
-b Ff(14)1012 897 y Fs(U)1012 955 y Fd(undo)12 b(\(C-)p
-1166 955 V 13 w(,)g(C-x)g(C-u\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)18 b Ff(17)1012 1005 y Fd(universal-a)o(rg)o(ume)o(nt)9
-b(\(\))g Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(15)1012 1055 y
-Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
-b Ff(14)1012 1105 y Fd(unix-word-r)o(ub)o(out)9 b(\(C-w\))g
-Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)22 b Ff(15)1012 1155 y Fd(upcase-word)9
-b(\(M-u\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
-b Ff(14)1012 1204 y Fd(uppercase)p 1194 1204 V 11 w(p)5
-b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)18 b Ff(29)1012 1254 y Fd(username)p 1174 1254 V 11
-w(completion)p 1385 1254 V 11 w(function)s Fe(.)s(.)6
-b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16
-b Ff(35)1012 1354 y Fs(V)1012 1412 y Ff(visible-stats)t
-Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)17 b Ff(6)1012 1512 y Fs(Y)1012 1570 y Fd(yank)12
-b(\(C-y\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)20 b Ff(15)1012 1620 y Fd(yank-last-a)o(rg)9
-b(\(M-.,)i(M-)p 1433 1620 V 13 w(\))t Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17
-b Ff(13)1012 1669 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))e
-Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012 1719 y Fd(yank-pop)10
-b(\(M-y\))e Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
-b Ff(15)p eop
-%%Page: 52 54
-52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)i(Library)p
+49 50 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(49)195 201 y Ft(/*)24 b(Forward)e(declarations.)h(*/)
+195 253 y(char)g(*stripwhite)g(\(\);)195 305 y(COMMAND)g(*find_command)
+f(\(\);)195 409 y(/*)i(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f
+(from)g(argv[0].)g(*/)195 461 y(char)g(*progname;)195
+565 y(/*)h(When)f(non-zero,)g(this)g(means)g(the)g(user)h(is)f(done)h
+(using)f(this)g(program.)g(*/)195 616 y(int)g(done;)195
+720 y(char)g(*)195 772 y(dupstr)g(\(s\))314 824 y(int)h(s;)195
+876 y({)243 928 y(char)f(*r;)243 1032 y(r)g(=)h(xmalloc)f(\(strlen)g
+(\(s\))g(+)h(1\);)243 1083 y(strcpy)f(\(r,)g(s\);)243
+1135 y(return)g(\(r\);)195 1187 y(})195 1291 y(main)g(\(argc,)g(argv\))
+314 1343 y(int)h(argc;)314 1395 y(char)g(**argv;)195
+1447 y({)243 1499 y(char)f(*line,)g(*s;)243 1602 y(progname)f(=)i
+(argv[0];)243 1706 y(initialize_readline)d(\(\);)i(/*)h(Bind)f(our)h
+(completer.)e(*/)243 1810 y(/*)h(Loop)h(reading)f(and)g(executing)g
+(lines)g(until)g(the)g(user)h(quits.)f(*/)243 1862 y(for)g(\()h(;)g
+(done)f(==)h(0;)f(\))290 1914 y({)338 1966 y(line)g(=)h(readline)f
+(\("FileMan:)f("\);)338 2069 y(if)i(\(!line\))386 2121
+y(break;)338 2225 y(/*)g(Remove)f(leading)g(and)g(trailing)g
+(whitespace)f(from)i(the)f(line.)410 2277 y(Then,)g(if)h(there)f(is)g
+(anything)g(left,)g(add)h(it)f(to)h(the)f(history)g(list)410
+2329 y(and)g(execute)g(it.)h(*/)338 2381 y(s)g(=)g(stripwhite)e
+(\(line\);)338 2484 y(if)i(\(*s\))386 2536 y({)434 2588
+y(add_history)e(\(s\);)434 2640 y(execute_line)g(\(s\);)p
 eop
-%%Page: -1 55
--1 54 bop 1862 -58 a Fu(i)75 183 y Fq(T)-7 b(able)27
-b(of)f(Con)n(ten)n(ts)75 354 y Fs(1)67 b(Command)22 b(Line)i(Editing)d
-Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
-(.)f(.)g(.)g(.)42 b Fs(1)224 423 y Fu(1.1)j(In)o(tro)q(duction)16
-b(to)f(Line)h(Editing)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+%%Page: 50 52
+50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)h(Library)386
+149 y Ft(})338 253 y(free)23 b(\(line\);)290 305 y(})243
+357 y(exit)g(\(0\);)195 409 y(})195 513 y(/*)h(Execute)e(a)i(command)f
+(line.)g(*/)195 565 y(int)195 616 y(execute_line)f(\(line\))314
+668 y(char)i(*line;)195 720 y({)243 772 y(register)e(int)i(i;)243
+824 y(COMMAND)f(*command;)243 876 y(char)g(*word;)243
+980 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 1032
+y(i)g(=)h(0;)243 1083 y(while)f(\(line[i])g(&&)g(whitespace)g
+(\(line[i]\)\))290 1135 y(i++;)243 1187 y(word)g(=)h(line)f(+)h(i;)243
+1291 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290
+1343 y(i++;)243 1447 y(if)g(\(line[i]\))290 1499 y(line[i++])g(=)h
+('\\0';)243 1602 y(command)f(=)g(find_command)g(\(word\);)243
+1706 y(if)g(\(!command\))290 1758 y({)338 1810 y(fprintf)g(\(stderr,)g
+("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338
+1862 y(return)g(\(-1\);)290 1914 y(})243 2017 y(/*)g(Get)h(argument)f
+(to)g(command,)g(if)g(any.)h(*/)243 2069 y(while)f(\(whitespace)f
+(\(line[i]\)\))290 2121 y(i++;)243 2225 y(word)h(=)h(line)f(+)h(i;)243
+2329 y(/*)f(Call)h(the)f(function.)g(*/)243 2381 y(return)g
+(\(\(*\(command->func\)\))e(\(word\)\);)195 2433 y(})195
+2536 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g
+(and)h(return)f(a)g(pointer)g(to)h(that)267 2588 y(command.)46
+b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f
+(name.)g(*/)195 2640 y(COMMAND)g(*)p eop
+%%Page: 51 53
+51 52 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(51)195 149 y Ft(find_command)22 b(\(name\))314
+201 y(char)i(*name;)195 253 y({)243 305 y(register)e(int)i(i;)243
+409 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
+461 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338
+513 y(return)g(\(&commands[i]\);)243 616 y(return)g(\(\(COMMAND)f
+(*\)NULL\);)195 668 y(})195 772 y(/*)i(Strip)f(whitespace)f(from)i(the)
+f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267
+824 y(into)g(STRING.)g(*/)195 876 y(char)g(*)195 928
+y(stripwhite)f(\(string\))314 980 y(char)i(*string;)195
+1032 y({)243 1083 y(register)e(char)i(*s,)f(*t;)243 1187
+y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290
+1239 y(;)243 1343 y(if)g(\(*s)h(==)f(0\))290 1395 y(return)g(\(s\);)243
+1499 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1550
+y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290
+1602 y(t--;)243 1654 y(*++t)h(=)h('\\0';)243 1758 y(return)f(s;)195
+1810 y(})195 1914 y(/*)h(***********************)o(*******)o(********)o
+(*******)o(*******)o(********)o(****)d(*/)195 1966 y(/*)1575
+b(*/)195 2017 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381
+b(*/)195 2069 y(/*)1575 b(*/)195 2121 y(/*)24 b
+(***********************)o(*******)o(********)o(*******)o(*******)o
+(********)o(****)d(*/)195 2225 y(char)i(*command_generator)f
+(__P\(\(const)g(char)i(*,)f(int\)\);)195 2277 y(char)g
+(**fileman_completion)e(__P\(\(const)i(char)g(*,)h(int,)f(int\)\);)195
+2381 y(/*)h(Tell)f(the)g(GNU)h(Readline)f(library)f(how)i(to)g
+(complete.)46 b(We)24 b(want)f(to)h(try)f(to)267 2433
+y(complete)f(on)i(command)f(names)g(if)h(this)f(is)h(the)f(first)g
+(word)g(in)h(the)g(line,)f(or)267 2484 y(on)g(filenames)g(if)g(not.)h
+(*/)195 2536 y(initialize_readline)d(\(\))195 2588 y({)243
+2640 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h(~/.inputrc)e
+(file.)h(*/)p eop
+%%Page: 52 54
+52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)h(Library)243
+149 y Ft(rl_readline_name)21 b(=)j("FileMan";)243 253
+y(/*)f(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)f(first.)g
+(*/)243 305 y(rl_attempted_completion_)o(functio)o(n)e(=)j
+(fileman_completion;)195 357 y(})195 461 y(/*)g(Attempt)e(to)i
+(complete)f(on)g(the)h(contents)f(of)g(TEXT.)47 b(START)23
+b(and)h(END)267 513 y(bound)f(the)g(region)g(of)h(rl_line_buffer)e
+(that)h(contains)g(the)g(word)h(to)267 565 y(complete.)46
+b(TEXT)23 b(is)h(the)f(word)h(to)f(complete.)47 b(We)23
+b(can)h(use)f(the)h(entire)267 616 y(contents)e(of)i(rl_line_buffer)e
+(in)h(case)h(we)f(want)h(to)f(do)h(some)f(simple)267
+668 y(parsing.)46 b(Returnthe)23 b(array)g(of)h(matches,)e(or)i(NULL)f
+(if)h(there)f(aren't)g(any.)g(*/)195 720 y(char)g(**)195
+772 y(fileman_completion)e(\(text,)i(start,)g(end\))314
+824 y(const)g(char)h(*text;)314 876 y(int)g(start,)f(end;)195
+928 y({)243 980 y(char)g(**matches;)243 1083 y(matches)g(=)g(\(char)h
+(**\)NULL;)243 1187 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g
+(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314
+1239 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h
+(a)f(file)h(in)f(the)h(current)314 1291 y(directory.)f(*/)243
+1343 y(if)g(\(start)g(==)h(0\))290 1395 y(matches)f(=)h
+(rl_completion_matches)d(\(text,)i(command_generator\);)243
+1499 y(return)g(\(matches\);)195 1550 y(})195 1654 y(/*)h(Generator)e
+(function)h(for)g(command)g(completion.)47 b(STATE)23
+b(lets)g(us)267 1706 y(know)g(whether)g(to)g(start)h(from)f(scratch;)g
+(without)g(any)g(state)267 1758 y(\(i.e.)g(STATE)g(==)h(0\),)f(then)g
+(we)h(start)f(at)h(the)f(top)h(of)f(the)h(list.)f(*/)195
+1810 y(char)g(*)195 1862 y(command_generator)f(\(text,)h(state\))314
+1914 y(const)g(char)h(*text;)314 1966 y(int)g(state;)195
+2017 y({)243 2069 y(static)f(int)g(list_index,)g(len;)243
+2121 y(char)g(*name;)243 2225 y(/*)g(If)h(this)f(is)h(a)g(new)f(word)g
+(to)h(complete,)f(initialize)f(now.)47 b(This)314 2277
+y(includes)23 b(saving)g(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)f
+(and)314 2329 y(initializing)h(the)g(index)g(variable)g(to)h(0.)f(*/)
+243 2381 y(if)g(\(!state\))290 2433 y({)338 2484 y(list_index)g(=)g(0;)
+338 2536 y(len)h(=)f(strlen)g(\(text\);)290 2588 y(})p
+eop
+%%Page: 53 55
+53 54 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(53)243 149 y Ft(/*)23 b(Return)g(the)h(next)f(name)g
+(which)h(partially)e(matches)h(from)g(the)314 201 y(command)g(list.)g
+(*/)243 253 y(while)g(\(name)g(=)h(commands[list_index].name)o(\))290
+305 y({)338 357 y(list_index++;)338 461 y(if)g(\(strncmp)f(\(name,)g
+(text,)g(len\))g(==)h(0\))386 513 y(return)f(\(dupstr\(name\)\);)290
+565 y(})243 668 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f
+(NULL.)g(*/)243 720 y(return)g(\(\(char)g(*\)NULL\);)195
+772 y(})195 876 y(/*)h(***********************)o(*******)o(********)o
+(*******)o(*******)o(********)o(****)d(*/)195 928 y(/*)1575
+b(*/)195 980 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195
+1032 y(/*)1575 b(*/)195 1083 y(/*)24 b(***********************)o
+(*******)o(********)o(*******)o(*******)o(********)o(****)d(*/)195
+1187 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47
+b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267
+1239 y(commands.)f(*/)195 1291 y(static)h(char)g(syscom[1024];)195
+1395 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195
+1447 y(com_list)g(\(arg\))314 1499 y(char)h(*arg;)195
+1550 y({)243 1602 y(if)f(\(!arg\))290 1654 y(arg)h(=)g("";)243
+1758 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243
+1810 y(return)g(\(system)g(\(syscom\)\);)195 1862 y(})195
+1966 y(com_view)g(\(arg\))314 2017 y(char)h(*arg;)195
+2069 y({)243 2121 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290
+2173 y(return)g(1;)243 2277 y(sprintf)g(\(syscom,)f("more)i(\045s",)f
+(arg\);)243 2329 y(return)g(\(system)g(\(syscom\)\);)195
+2381 y(})195 2484 y(com_rename)f(\(arg\))314 2536 y(char)i(*arg;)195
+2588 y({)243 2640 y(too_dangerous)e(\("rename"\);)p eop
+%%Page: 54 56
+54 55 bop 75 -58 a Fu(54)1299 b(GNU)15 b(Readline)h(Library)243
+149 y Ft(return)23 b(\(1\);)195 201 y(})195 305 y(com_stat)g(\(arg\))
+314 357 y(char)h(*arg;)195 409 y({)243 461 y(struct)f(stat)g(finfo;)243
+565 y(if)g(\(!valid_argument)f(\("stat",)h(arg\)\))290
+616 y(return)g(\(1\);)243 720 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g
+(-1\))290 772 y({)338 824 y(perror)g(\(arg\);)338 876
+y(return)g(\(1\);)290 928 y(})243 1032 y(printf)g(\("Statistics)f(for)h
+(`\045s':\\n",)g(arg\);)243 1135 y(printf)g(\("\045s)g(has)h(\045d)f
+(link\045s,)g(and)g(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)
+434 1187 y(finfo.st_nlink,)434 1239 y(\(finfo.st_nlink)e(==)j(1\))g(?)f
+("")h(:)g("s",)434 1291 y(finfo.st_size,)434 1343 y(\(finfo.st_size)e
+(==)h(1\))h(?)f("")h(:)g("s"\);)243 1395 y(printf)f(\("Inode)g(Last)g
+(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243
+1447 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f
+(\(&finfo.st_atime\)\);)243 1499 y(printf)g(\(")95 b(Last)23
+b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243
+1550 y(return)g(\(0\);)195 1602 y(})195 1706 y(com_delete)f(\(arg\))314
+1758 y(char)i(*arg;)195 1810 y({)243 1862 y(too_dangerous)e
+(\("delete"\);)243 1914 y(return)h(\(1\);)195 1966 y(})195
+2069 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f
+(the)h(commands)f(if)g(ARG)h(is)267 2121 y(not)f(present.)g(*/)195
+2173 y(com_help)g(\(arg\))314 2225 y(char)h(*arg;)195
+2277 y({)243 2329 y(register)e(int)i(i;)243 2381 y(int)f(printed)g(=)h
+(0;)243 2484 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
+2536 y({)338 2588 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g
+(commands[i].name\))f(==)i(0\)\))386 2640 y({)p eop
+%%Page: 55 57
+55 56 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(55)434 149 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e
+(commands[i].name,)h(commands[i].doc\);)434 201 y(printed++;)386
+253 y(})290 305 y(})243 409 y(if)h(\(!printed\))290 461
+y({)338 513 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48
+b(Possibilties)22 b(are:\\n",)h(arg\);)338 616 y(for)h(\(i)f(=)h(0;)g
+(commands[i].name;)d(i++\))386 668 y({)434 720 y(/*)i(Print)g(in)h(six)
+f(columns.)g(*/)434 772 y(if)g(\(printed)g(==)h(6\))481
+824 y({)529 876 y(printed)f(=)h(0;)529 928 y(printf)f(\("\\n"\);)481
+980 y(})434 1083 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434
+1135 y(printed++;)386 1187 y(})338 1291 y(if)i(\(printed\))386
+1343 y(printf)f(\("\\n"\);)290 1395 y(})243 1447 y(return)g(\(0\);)195
+1499 y(})195 1602 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195
+1654 y(com_cd)f(\(arg\))314 1706 y(char)h(*arg;)195 1758
+y({)243 1810 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290
+1862 y({)338 1914 y(perror)g(\(arg\);)338 1966 y(return)g(1;)290
+2017 y(})243 2121 y(com_pwd)g(\(""\);)243 2173 y(return)g(\(0\);)195
+2225 y(})195 2329 y(/*)h(Print)f(out)g(the)h(current)f(working)f
+(directory.)h(*/)195 2381 y(com_pwd)g(\(ignore\))314
+2433 y(char)h(*ignore;)195 2484 y({)243 2536 y(char)f(dir[1024],)g(*s;)
+243 2640 y(s)g(=)h(getcwd)f(\(dir,)g(sizeof\(dir\))g(-)g(1\);)p
+eop
+%%Page: 56 58
+56 57 bop 75 -58 a Fu(56)1299 b(GNU)15 b(Readline)h(Library)243
+149 y Ft(if)23 b(\(s)h(==)f(0\))290 201 y({)338 253 y(printf)g
+(\("Error)g(getting)g(pwd:)g(\045s\\n",)g(dir\);)338
+305 y(return)g(1;)290 357 y(})243 461 y(printf)g(\("Current)f
+(directory)h(is)h(\045s\\n",)f(dir\);)243 513 y(return)g(0;)195
+565 y(})195 668 y(/*)h(The)f(user)g(wishes)g(to)h(quit)f(using)g(this)h
+(program.)46 b(Just)24 b(set)f(DONE)267 720 y(non-zero.)f(*/)195
+772 y(com_quit)h(\(arg\))314 824 y(char)h(*arg;)195 876
+y({)243 928 y(done)f(=)h(1;)243 980 y(return)f(\(0\);)195
+1032 y(})195 1135 y(/*)h(Function)e(which)i(tells)f(you)g(that)g(you)h
+(can't)f(do)h(this.)f(*/)195 1187 y(too_dangerous)f(\(caller\))314
+1239 y(char)i(*caller;)195 1291 y({)243 1343 y(fprintf)f(\(stderr,)457
+1395 y("\045s:)h(Too)f(dangerous)g(for)g(me)h(to)g(distribute.\\n")457
+1447 y(caller\);)243 1499 y(fprintf)f(\(stderr,)f("Write)h(it)h
+(yourself.\\n"\);)195 1550 y(})195 1654 y(/*)g(Return)f(non-zero)f(if)i
+(ARG)f(is)h(a)g(valid)f(argument)g(for)g(CALLER,)267
+1706 y(else)g(print)g(an)h(error)f(message)g(and)g(return)g(zero.)g(*/)
+195 1758 y(int)195 1810 y(valid_argument)f(\(caller,)h(arg\))314
+1862 y(char)h(*caller,)e(*arg;)195 1914 y({)243 1966
+y(if)h(\(!arg)g(||)h(!*arg\))290 2017 y({)338 2069 y(fprintf)f
+(\(stderr,)g("\045s:)g(Argument)g(required.\\n",)f(caller\);)338
+2121 y(return)h(\(0\);)290 2173 y(})243 2277 y(return)g(\(1\);)195
+2329 y(})p eop
+%%Page: 57 59
+57 58 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(57)75
+149 y Fq(Concept)27 b(Index)75 321 y Fs(C)75 382 y Ff(command)14
+b(editing)e Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
+b Ff(1)75 511 y Fs(E)75 572 y Ff(editing)15 b(command)f(lines)f
+Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Ff(1)75 702 y Fs(I)75
+763 y Ff(initiali)q(zati)q(on)16 b(\014le,)e(readline)t
+Fe(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)17 b Ff(4)75 808 y(in)o(teraction,)e(readline)5
+b Fe(.)j(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(1)75
+938 y Fs(K)75 999 y Ff(kill)d(ring)8 b Fe(.)f(.)f(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20
+b Ff(3)75 1044 y(killing)c(text)9 b Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(2)1012 321
+y Fs(N)1012 390 y Ff(notation,)15 b(readline)7 b Fe(.)h(.)e(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(1)1012 539 y Fs(R)1012
+608 y Ff(readline,)15 b(function)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)21 b Ff(21)1012 757 y Fs(V)1012 826 y Ff(v)n(ariables,)15
+b(readline)t Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)17
+b Ff(4)1012 976 y Fs(Y)1012 1044 y Ff(y)o(anking)e(text)t
+Fe(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17
+b Ff(2)p eop
+%%Page: 58 60
+58 59 bop 75 -58 a Fu(58)1299 b(GNU)15 b(Readline)h(Library)p
+eop
+%%Page: 59 61
+59 60 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(59)75 149 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
+b(Index)p 79 307 21 3 v 75 369 a Fd(_rl_digit_)o(p)7
+b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(36)75 415 y Fd(_rl_digit_)o(va)o(lue)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)20 b Ff(37)75 462 y Fd(_rl_lowerc)o(as)o(e_p)6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(36)75
+508 y Fd(_rl_to_low)o(er)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)22 b Ff(36)75 554 y Fd(_rl_to_upp)o(er)6
+b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Ff(36)75 600 y Fd(_rl_upperc)o(as)o(e_p)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)20 b Ff(36)75 733 y Fs(A)75 794 y
+Fd(abort)11 b(\(C-g\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)17 b Ff(17)75 841 y Fd(accept-lin)o(e)10
+b(\(Newline)f(or)j(Return\))6 b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)19 b Ff(12)75 973 y Fs(B)75 1035 y Fd(backward-c)o(ha)o(r)10
+b(\(C-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(12)75
+1081 y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))e
+Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
+b Ff(14)75 1127 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10
+b(\(C-x)h(Rubout\))e Fe(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24
+b Ff(15)75 1174 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10
+b(\(M-)501 1172 y Fn(h)p 512 1146 73 2 v 512 1174 a Fm(DEL)p
+512 1181 V 583 1172 a Fn(i)598 1174 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Ff(15)75 1220 y
+Fd(backward-w)o(or)o(d)10 b(\(M-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21
+b Ff(12)75 1266 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9
+b(\(M-<\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)25 b Ff(13)75 1312 y Fd(beginning-)o(of)o(-li)o(ne)9
+b(\(C-a\))c Fe(.)t(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(12)75 1359 y(b)q(ell-st)o(yle)7
+b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)20 b Ff(5)75 1490 y Fs(C)75 1552 y Fd(call-last-)o(kb)o(d-m)
+o(ac)o(ro)9 b(\(C-x)j(e\))5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(17)75 1598 y Fd(capitalize)o(-w)o(ord)9
+b(\(M-c\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(14)75 1644 y Fd(character-)o(se)
+o(arc)o(h)10 b(\(C-]\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(18)75
+1691 y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9
+b(\(M-C-]\))e Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)20
+b Ff(18)75 1737 y Fd(clear-scre)o(en)9 b(\(C-l\))g Fe(.)t(.)d(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)21 b Ff(12)75 1783 y(commen)o(t-b)q(egin)9
+b Fe(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)21
+b Ff(5)75 1829 y Fd(complete)10 b(\()265 1827 y Fn(h)p
+276 1801 74 2 v 276 1829 a Fm(T)m(AB)p 276 1837 V 348
+1827 a Fn(i)363 1829 y Fd(\))f Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+22 b Ff(16)75 1875 y(completion-query-i)q(tems)t Fe(.)9
+b(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(5)75 1922 y(con)o(v)o(ert-meta)10
+b Fe(.)c(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22
+b Ff(5)75 1968 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10
+b(\(\))c Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)75 2014 y Fd(copy-forwa)o(rd)o
+(-wo)o(rd)9 b(\(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(16)75
+2060 y Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)9 b(\(\))d
+Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)18 b Ff(15)75 2193 y Fs(D)75 2255 y Fd(delete-cha)o(r)10
+b(\(C-d\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(14)75
+2301 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))d
+Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)18 b Ff(17)75 2347 y Fd(delete-hor)o(iz)o(ont)o(al)o
+(-sp)o(ace)9 b(\(\))i Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)25 b Ff(15)75 2393 y Fd(digit-argu)o(me)o(nt)9
+b(\()p Fc(M-0)p Fd(,)i Fc(M-1)p Fd(,)h(...)f Fc(M--)p
+Fd(\))c Fe(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(16)75
+2439 y(disable-comple)q(tion)9 b Fe(.)g(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)21 b Ff(5)75 2486 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9
+b(\(M-a,)i(M-b,)g(M-)p Fb(x)p Fd(,)h(...)o(\))159 2531
+y Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(17)75 2578 y Fd(downcase-w)o(or)o(d)10
+b(\(M-l\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(14)75
+2624 y Fd(dump-funct)o(io)o(ns)9 b(\(\))g Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)22 b Ff(18)75 2670 y Fd(dump-macro)o(s)10 b(\(\))g
+Fe(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(18)1012
+307 y Fd(dump-variab)o(le)o(s)10 b(\(\))e Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)23 b Ff(18)1012 449 y Fs(E)1012 514 y Ff(editing-mo)q(de)12
+b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
+b Ff(5)1012 562 y Fd(emacs-editi)o(ng)o(-mo)o(de)9 b(\(C-e\))t
+Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)18 b Ff(18)1012 610 y(enable-k)o(eypad)9 b Fe(.)g(.)d(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(5)1012
+658 y Fd(end-kbd-mac)o(ro)9 b(\(C-x)i(\)\))e Fe(.)e(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23
+b Ff(17)1012 706 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))d
+Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 754 y Fd(end-of-line)9
+b(\(C-e\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(12)1012
+802 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o(rk)9 b(\(C-x)j(C-x\))c
+Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(18)1012
+850 y(expand-tilde)6 b Fe(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)19 b Ff(5)1012 991 y Fs(F)1012 1056
+y Fd(forward-bac)o(kw)o(ard)o(-d)o(ele)o(te)o(-ch)o(ar)9
+b(\(\))f Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
+b Ff(14)1012 1104 y Fd(forward-cha)o(r)10 b(\(C-f\))f
+Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1152 y
+Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))e
+Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
+b Ff(13)1012 1200 y Fd(forward-wor)o(d)10 b(\(M-f\))f
+Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1334 y
+Fs(H)1012 1400 y Ff(history-preserv)o(e-p)q(oi)q(n)o(t)8
+b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Ff(5)1012 1448 y
+Fd(history-sea)o(rc)o(h-b)o(ac)o(kwa)o(rd)9 b(\(\))i
+Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)25
+b Ff(13)1012 1496 y Fd(history-sea)o(rc)o(h-f)o(or)o(war)o(d)10
+b(\(\))s Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)17 b Ff(13)1012 1543 y(horizon)o(tal-scrol)q(l-mo)r(de)6
+b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(6)1012 1678 y
+Fs(I)1012 1743 y Ff(input-meta)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 1791
+y Fd(insert-comm)o(en)o(t)10 b(\(M-#\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20
+b Ff(18)1012 1839 y Fd(insert-comp)o(le)o(tio)o(ns)9
+b(\(M-*\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)18 b Ff(16)1012 1887 y(isearc)o(h-terminators)t
+Fe(.)8 b(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)16 b Ff(6)1012
+2021 y Fs(K)1012 2087 y Ff(k)o(eymap)9 b Fe(.)e(.)f(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
+b Ff(6)1012 2135 y Fd(kill-line)10 b(\(C-k\))f Fe(.)d(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)24 b Ff(15)1012 2183 y Fd(kill-region)9
+b(\(\))i Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Ff(15)1012 2231 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))g
+Fe(.)c(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(15)1012 2278 y
+Fd(kill-word)10 b(\(M-d\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+24 b Ff(15)1012 2413 y Fs(M)1012 2478 y Ff(mark-mo)q(di\014ed-li)q(nes)
+8 b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012
+2526 y(mark-symlink)o(ed-di)q(rectori)q(es)14 b Fe(.)6
+b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)23 b Ff(6)1012 2574 y(matc)o(h-hidden-\014l)q(es)14
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)24 b Ff(6)1012
+2622 y Fd(menu-comple)o(te)9 b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)23 b Ff(16)1012 2670 y(meta-\015ag)t Fe(.)8 b(.)e(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18
+b Ff(6)p eop
+%%Page: 60 62
+60 61 bop 75 -58 a Fu(60)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fs(N)75 210 y Fd(next-histo)o(ry)9 b(\(C-n\))g
+Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(13)75 256 y Fd(non-increm)o(en)o
+(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o(st)o(ory)9
+b(\(M-n\))159 302 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(13)75
+347 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)o(ear)o(ch)o(-hi)o
+(st)o(ory)9 b(\(M-p\))159 393 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
+b Ff(13)75 515 y Fs(O)75 576 y Ff(output-meta)5 b Fe(.)i(.)f(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(6)75
+622 y Fd(overwrite-)o(mo)o(de)9 b(\(\))g Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)22 b Ff(15)75 744 y Fs(P)75 805 y Ff(page-completions)14
+b Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23
+b Ff(7)75 851 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9
+b(\(M-?\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)25 b Ff(16)75 897 y Fd(prefix-met)o(a)10 b(\()324
+895 y Fn(h)p 335 868 70 2 v 335 897 a Fm(ESC)p 335 904
+V 402 895 a Fn(i)417 897 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
+b Ff(17)75 942 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))c
+Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)18 b Ff(12)75 1072 y Fs(Q)75 1133 y Fd(quoted-ins)o(er)o
+(t)10 b(\(C-q)h(or)h(C-v\))c Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(14)75 1263 y Fs(R)75
+1323 y Fd(re-read-in)o(it)o(-fi)o(le)9 b(\(C-x)i(C-r\))5
+b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18
+b Ff(17)75 1369 y Fd(readline)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(21)75
+1415 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)9 b(\(\))d
+Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)18 b Ff(12)75 1461 y Fd(reverse-se)o(ar)o(ch-)o(hi)o
+(sto)o(ry)9 b(\(C-r\))g Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)23 b Ff(13)75 1506 y Fd(revert-lin)o(e)10
+b(\(M-r\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(17)75
+1552 y Fd(rl_add_def)o(un)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)22 b Ff(28)75 1598 y Fd(rl_add_fun)o(ma)o(p_e)o(nt)o(ry)
+t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(31)75 1643 y Fd(rl_add_und)o(o)7
+b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(32)75 1689 y Fd(rl_alphabe)o(ti)o(c)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(36)75 1735 y Fd(rl_already)o(_p)o(rom)o
+(pt)o(ed)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(25)75
+1781 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_f)o(unc)o(ti)o(on)t
+Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(43)75
+1826 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_o)o(ver)6
+b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
+b Ff(46)75 1872 y Fd(rl_basic_q)o(uo)o(te_)o(ch)o(ara)o(cte)o(rs)8
+b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+22 b Ff(45)75 1918 y Fd(rl_basic_w)o(or)o(d_b)o(re)o(ak_)o(cha)o(ra)o
+(cte)o(rs)5 b Fe(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18
+b Ff(45)75 1964 y Fd(rl_begin_u)o(nd)o(o_g)o(ro)o(up)t
+Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(32)75 2009 y Fd(rl_bind_ke)o(y)7
+b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(30)75 2055 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5
+b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(30)75 2101 y
+Fd(rl_binding)o(_k)o(eym)o(ap)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
+b Ff(27)75 2146 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7
+b Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20
+b Ff(38)75 2192 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)8
+b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
+b Ff(38)75 2238 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)9
+b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Ff(38)75 2284 y Fd(rl_catch_s)o(ig)o(nal)o(s)6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(40)75
+2329 y Fd(rl_catch_s)o(ig)o(win)o(ch)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)19 b Ff(40)75 2375 y Fd(rl_char_is)o(_q)o(uot)o(ed)o(_p)t
+Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(44)75 2421 y Fd(rl_cleanup)o(_a)o
+(fte)o(r_)o(sig)o(nal)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(40)75 2467 y
+Fd(rl_clear_m)o(es)o(sag)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+19 b Ff(33)75 2512 y Fd(rl_clear_p)o(en)o(din)o(g_)o(inp)o(ut)8
+b Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)24 b Ff(35)1012 149 y Fd(rl_clear_si)o(gn)o(als)6
+b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(41)1012
+196 y Fd(rl_complete)6 b Fe(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)24 b Ff(42)1012 242 y Fd(rl_complete)o(_i)o(nte)o(rn)o(al)s
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(42)1012 288 y Fd(rl_complete)o(r_)o
+(quo)o(te)o(_ch)o(ar)o(act)o(ers)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)20 b Ff(45)1012 335 y Fd(rl_complete)o(r_)o(wor)o
+(d_)o(bre)o(ak)o(_ch)o(ara)o(ct)o(ers)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)
+25 b Ff(45)1012 381 y Fd(rl_completi)o(on)o(_ap)o(pe)o(nd_)o(ch)o(ara)o
+(cte)o(r)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(45)1012 427 y Fd(rl_completi)o(on)o(_di)o(sp)o(lay)o(_m)o(atc)o
+(hes)o(_h)o(ook)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)25 b
+Ff(45)1012 474 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s
+Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(42,)c(43)1012
+520 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o(_di)o(rs)t
+Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Ff(46)1012
+566 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fe(.)f(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
+b Ff(43)1012 613 y Fd(rl_completi)o(on)o(_mo)o(de)t Fe(.)t(.)6
+b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(43)1012 659 y Fd(rl_completi)o(on)o(_qu)
+o(er)o(y_i)o(te)o(ms)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(45)1012 705 y Fd(rl_completi)o(on)o(_su)
+o(pp)o(res)o(s_)o(app)o(end)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)20 b Ff(46)1012 752 y Fd(rl_completi)o(on)o(_ty)o(pe)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(46)1012 798 y
+Fd(rl_copy_key)o(ma)o(p)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)21 b Ff(29)1012 844 y Fd(rl_copy_tex)o(t)6 b Fe(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(34)1012 891 y
+Fd(rl_crlf)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(33)1012 937 y Fd(rl_delete_t)o(ex)o(t)8
+b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
+Ff(34)1012 983 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7
+b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)24 b Ff(26)1012 1030 y Fd(rl_deprep_t)o(er)o(min)o(al)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(35)1012 1076
+y Fd(rl_ding)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(36)1012 1122 y Fd(rl_director)o(y_)o
+(com)o(pl)o(eti)o(on)o(_ho)o(ok)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(44)1012 1169 y Fd(rl_discard_)o(ke)o
+(yma)o(p)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(29)1012
+1215 y Fd(rl_dispatch)o(in)o(g)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)21 b Ff(25)1012 1261 y Fd(rl_display_)o(ma)o(tch)o(_l)o
+(ist)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)25 b Ff(36)1012 1308 y Fd(rl_do_undo)8
+b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24
+b Ff(32)1012 1354 y Fd(rl_done)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(24)1012
+1400 y Fd(rl_editing_)o(mo)o(de)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)21 b Ff(28)1012 1447 y Fd(rl_end)5 b Fe(.)t(.)h(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
+b Ff(24)1012 1493 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b
+Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(32)1012 1539
+y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18
+b Ff(25)1012 1586 y Fd(rl_event_ho)o(ok)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(26)1012 1632 y Fd(rl_execute_)o(ne)o
+(xt)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(35)1012 1678 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(26)1012 1725 y Fd(rl_executin)o(g_)
+o(mac)o(ro)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(27)1012
+1771 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)20 b Ff(34)1012 1817 y Fd(rl_explicit)o(_a)o(rg)7
+b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(28)1012
+1864 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fe(.)f(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
+b Ff(36)1012 1910 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o
+(ire)o(d)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(46)1012 1956 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o
+(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
+b Ff(43)1012 2003 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o
+(tio)o(n)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(44)1012 2049 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o
+(rs)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
+b Ff(45)1012 2095 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o
+(d)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
+b Ff(46)1012 2142 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o
+(on)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
+b Ff(44)1012 2188 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7
+b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)23 b Ff(33)1012 2234 y Fd(rl_free_lin)o(e_)o(sta)o(te)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(40)1012 2281
+y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+19 b Ff(32)1012 2327 y Fd(rl_function)o(_d)o(ump)o(er)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(31)1012 2373
+y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
+b Ff(31)1012 2420 y Fd(rl_funmap_n)o(am)o(es)7 b Fe(.)s(.)f(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)21 b Ff(31)1012 2466 y Fd(rl_generic_)o(bi)o(nd)7
+b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(30)1012
+2512 y Fd(rl_get_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)22 b Ff(29)p eop
+%%Page: 61 63
+61 62 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(61)75 149 y Fd(rl_get_key)o(ma)o(p_b)o(y_)o(nam)o(e)9
+b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Ff(29)75 196 y Fd(rl_get_key)o(ma)o(p_n)o(am)o(e)5
+b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(29)75 242 y Fd(rl_get_scr)o(ee)
+o(n_s)o(iz)o(e)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18
+b Ff(41)75 288 y Fd(rl_get_ter)o(mc)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)21 b Ff(37)75 335 y Fd(rl_getc)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)17 b Ff(35)75 381 y Fd(rl_getc_fu)o(nc)o(tio)o(n)6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(26)75
+427 y Fd(rl_gnu_rea)o(dl)o(ine)o(_p)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)19 b Ff(25)75 474 y Fd(rl_ignore_)o(co)o(mpl)o(et)o(ion)o(_du)o(pl)
+o(ica)o(te)o(s)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18
+b Ff(46)75 520 y Fd(rl_ignore_)o(so)o(me_)o(co)o(mpl)o(eti)o(on)o(s_f)o
+(un)o(cti)o(on)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)24 b Ff(44)75
+566 y Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Ff(47)75 613 y Fd(rl_initial)o(iz)o(e)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(36)75 659 y Fd(rl_insert_)o(co)o(mpl)o
+(et)o(ion)o(s)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(43)75 705 y Fd(rl_insert_)o(te)
+o(xt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(34)75 752 y Fd(rl_instrea)o(m)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(25)75 798 y Fd(rl_invokin)o(g_)o
+(key)o(se)o(qs)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(31)75
+844 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8
+b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
+b Ff(31)75 891 y Fd(rl_kill_te)o(xt)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(34)75 937 y Fd(rl_last_fu)o(nc)6
+b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Ff(26)75 983 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5
+b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(25)75 1030 y
+Fd(rl_line_bu)o(ff)o(er)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)21 b Ff(24)75 1076 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s
+Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(31)75 1122 y Fd(rl_macro_b)o(in)o(d)9
+b Fe(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
+b Ff(37)75 1169 y Fd(rl_macro_d)o(um)o(per)6 b Fe(.)t(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)20 b Ff(37)75 1215 y Fd(rl_make_ba)o(re)o(_ke)o(ym)
+o(ap)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75 1261
+y Fd(rl_make_ke)o(ym)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)21 b Ff(29)75 1308 y Fd(rl_mark)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17
+b Ff(24)75 1354 y Fd(rl_message)7 b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(33)75 1400 y Fd(rl_modifyi)o(ng)6
+b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Ff(32)75 1447 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fe(.)s(.)i(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)19 b Ff(31)75 1493 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
+(ead)s Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(24)75 1539 y Fd(rl_numeric)o(_a)
+o(rg)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(28)75 1586 y Fd(rl_on_new_)o(li)o(ne)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(33)75 1632 y Fd(rl_on_new_)o(li)o(ne_)o
+(wi)o(th_)o(pro)o(mp)o(t)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(33)75 1678 y Fd(rl_outstre)o(am)6
+b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Ff(26)75 1725 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fe(.)s(.)i(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)19 b Ff(31)75 1771 y Fd(rl_pending)o(_i)o(npu)o(t)6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(24)75
+1817 y Fd(rl_point)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(24)75 1864 y Fd(rl_possibl)o(e_)o
+(com)o(pl)o(eti)o(ons)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(42)75 1910 y
+Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
+b Ff(26)75 1956 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
+b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Ff(26)75 2003 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(35)75
+2049 y Fd(rl_prompt)8 b Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)24 b Ff(25)75 2095 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
+o(ut)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(34)75 2142
+y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+19 b Ff(31)75 2188 y Fd(rl_read_ke)o(y)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(34)75 2234 y
+Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+19 b Ff(25)75 2281 y Fd(rl_readlin)o(e_)o(sta)o(te)5
+b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(27)75 2327
+y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17
+b Ff(25)75 2373 y Fd(rl_redispl)o(ay)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(33)75 2420 y Fd(rl_redispl)o(ay)o(_fu)o
+(nc)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(26)75 2466 y
+Fd(rl_replace)o(_l)o(ine)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+20 b Ff(36)75 2512 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9
+b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)25 b Ff(40)1012 149 y Fd(rl_reset_li)o(ne)o(_st)o(at)o
+(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(33)1012 195
+y Fd(rl_reset_te)o(rm)o(ina)o(l)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+19 b Ff(35)1012 241 y Fd(rl_resize_t)o(er)o(min)o(al)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(41)1012 287 y
+Fd(rl_restore_)o(pr)o(omp)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19
+b Ff(34)1012 333 y Fd(rl_save_pro)o(mp)o(t)8 b Fe(.)s(.)e(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)21 b Ff(33)1012 379 y Fd(rl_set_key)8
+b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24
+b Ff(30)1012 424 y Fd(rl_set_keyb)o(oa)o(rd_)o(in)o(put)o(_t)o(ime)o
+(out)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20
+b Ff(35)1012 470 y Fd(rl_set_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(29)1012 516 y Fd(rl_set_pare)o(n_)o
+(bli)o(nk)o(_ti)o(me)o(out)7 b Fe(.)t(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(37)1012 562 y Fd(rl_set_prom)o(pt)8
+b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
+b Ff(34)1012 608 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fe(.)t(.)6
+b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(41)1012 654 y Fd(rl_set_sign)o(al)o(s)8
+b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
+Ff(41)1012 700 y Fd(rl_show_cha)o(r)6 b Fe(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(33)1012 745 y Fd(rl_special_)o(pr)o
+(efi)o(xe)o(s)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(45)1012
+791 y Fd(rl_startup_)o(ho)o(ok)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)21 b Ff(26)1012 837 y Fd(rl_stuff_ch)o(ar)8 b
+Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
+b Ff(35)1012 883 y Fd(rl_terminal)o(_n)o(ame)6 b Fe(.)s(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)20 b Ff(25)1012 929 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
+(_bi)o(nd)o(ing)o(s)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)21 b Ff(35)1012 975 y Fd(rl_unbind_c)o(om)o(man)o(d_)o
+(in_)o(ma)o(p)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)23 b Ff(30)1012 1020 y Fd(rl_unbind_f)o(un)o(cti)o
+(on)o(_in)o(_m)o(ap)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(30)1012 1066 y Fd(rl_unbind_k)o(ey)8
+b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
+b Ff(30)1012 1112 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(30)1012 1158 y Fd(rl_username)o(_c)o
+(omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)18 b Ff(43)1012 1204 y Fd(rl_variable)o(_b)o(ind)6
+b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(37)1012
+1250 y Fd(rl_variable)o(_d)o(ump)o(er)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)19 b Ff(37)1012 1380 y Fs(S)1012 1441 y Fd(self-insert)9
+b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1487 y Fd(set-mark)10
+b(\(C-@\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Ff(17)1012 1533 y(sho)o(w-all-if-am)o(bigu)q(ous)14
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(7)1012 1579
+y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c Fe(.)d(.)i(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22
+b Ff(17)1012 1701 y Fs(T)1012 1763 y Fd(tab-insert)9
+b(\(M-)1281 1761 y Fn(h)p 1292 1735 74 2 v 1292 1763
+a Fm(T)m(AB)p 1292 1770 V 1364 1761 a Fn(i)1379 1763
+y Fd(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(14)1012 1808
+y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
+b Ff(17)1012 1854 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
+Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1900 y Fd(transpose-w)o(or)o(ds)9
+b(\(M-t\))d Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 2030 y
+Fs(U)1012 2092 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
+Fe(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)1012 2137 y Fd(universal-a)o(rg)o
+(ume)o(nt)9 b(\(\))d Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(16)1012
+2183 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b
+Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)18 b Ff(15)1012 2229 y Fd(unix-word-r)o(ub)o(out)9
+b(\(C-w\))d Fe(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)1012 2275 y Fd(upcase-word)9
+b(\(M-u\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(14)1012
+2405 y Fs(V)1012 2466 y Fd(vi-editing-)o(mo)o(de)9 b(\(M-C-j\))c
+Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)18 b Ff(18)1012 2512 y(visible-stats)c Fe(.)6
+b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
+b Ff(7)p eop
+%%Page: 62 64
+62 63 bop 75 -58 a Fu(62)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fs(Y)75 242 y Fd(yank)11 b(\(C-y\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Ff(16)1012
+149 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c Fe(.)f(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(13)1012 196 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
+Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 242 y Fd(yank-pop)10
+b(\(M-y\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Ff(16)p eop
+%%Page: -1 65
+-1 64 bop 1862 -58 a Fu(i)75 149 y Fq(T)-7 b(able)27
+b(of)f(Con)n(ten)n(ts)75 320 y Fs(1)67 b(Command)22 b(Line)i(Editing)d
+Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)g(.)42 b Fs(1)224 389 y Fu(1.1)j(In)o(tro)q(duction)16
+b(to)f(Line)h(Editing)e Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)27 b Fu(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8
-b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+(.)27 b Fu(1)224 444 y(1.2)45 b(Readline)16 b(In)o(teraction)8
+b Fl(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
 h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)23 b Fu(1)374 532 y(1.2.1)44 b(Readline)17
-b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)h(.)f(.)23 b Fu(1)374 499 y(1.2.1)44 b(Readline)16
+b(Bare)f(Essen)o(tials)f Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
 (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
-b Fu(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands)
-7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)21 b Fu(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands)
-11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 697 y(1.2.4)44 b(Readline)17
-b(Argumen)o(ts)12 b Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
-b Fu(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h
-(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
-b Fu(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+b Fu(1)374 553 y(1.2.2)44 b(Readline)16 b(Mo)o(v)o(emen)o(t)e(Commands)
+7 b Fl(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
+(.)h(.)21 b Fu(2)374 608 y(1.2.3)44 b(Readline)16 b(Killing)i(Commands)
+11 b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 663 y(1.2.4)44 b(Readline)16
+b(Argumen)o(ts)c Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
+b Fu(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h
+(the)f(History)e Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
+b Fu(3)224 773 y(1.3)45 b(Readline)16 b(Init)h(File)e
+Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
 h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)29 b Fu(4)374 861 y(1.3.1)44 b(Readline)17
-b(Init)f(File)h(Syn)o(tax)7 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+(.)h(.)f(.)h(.)f(.)29 b Fu(4)374 827 y(1.3.1)44 b(Readline)16
+b(Init)g(File)h(Syn)o(tax)7 b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fu(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5
-b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)19 b Fu(8)374 971 y(1.3.3)44 b(Sample)16
-b(Init)g(File)11 b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
+b Fu(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5
+b Fl(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)g(.)f(.)19 b Fu(9)374 937 y(1.3.3)44 b(Sample)16
+b(Init)g(File)11 b Fl(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)26 b Fu(9)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h
-(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fu(12)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1135 y(1.4.2)44
+h(.)f(.)26 b Fu(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)g(Commands)
+6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fu(12)374
+1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e
+Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1101 y(1.4.2)44
 b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9
-b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1190 y(1.4.3)44
-b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8
+b Fl(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1156 y(1.4.3)44
+b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fl(.)8
 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30
-b Fu(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9
-b Fa(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(14)374
-1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c
-Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27
-b Fu(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l
-(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)25 b Fu(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15
-b(Macros)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+b Fu(14)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9
+b Fl(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(15)374
+1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c
+Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27
+b Fu(16)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)i(T)o(yp)q(e)e(F)l
+(or)g(Y)l(ou)10 b Fl(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)25 b Fu(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15
+b(Macros)6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21
-b Fu(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7
-b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-22 b Fu(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+b Fu(17)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7
+b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+22 b Fu(17)224 1485 y(1.5)45 b(Readline)16 b(vi)g(Mo)q(de)e
+Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)28 b Fu(18)75 1640 y Fs(2)67 b(Programming)23
-b(with)g(GNU)f(Readline)12 b Fb(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35
-b Fs(19)224 1708 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8
-b Fa(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+(.)h(.)f(.)h(.)28 b Fu(18)75 1606 y Fs(2)67 b(Programming)23
+b(with)g(GNU)f(Readline)12 b Fa(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35
+b Fs(21)224 1675 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8
+b Fl(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(19)224 1763 y(2.2)45
-b(Custom)14 b(F)l(unctions)7 b Fa(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(21)224 1729 y(2.2)45
+b(Custom)14 b(F)l(unctions)7 b Fl(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(20)374
-1818 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)11
-b Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 b Fu(20)374
-1873 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l(unction)6
-b Fa(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 b Fu(21)224 1928 y(2.3)45
-b(Readline)17 b(V)l(ariables)f Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(22)374
+1784 y(2.2.1)44 b(Readline)16 b(T)o(yp)q(edefs)9 b Fl(.)g(.)e(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)g(.)f(.)h(.)24 b Fu(23)374 1839 y(2.2.2)44
+b(W)l(riting)16 b(a)e(New)i(F)l(unction)6 b Fl(.)i(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+21 b Fu(23)224 1894 y(2.3)45 b(Readline)16 b(V)l(ariables)g
+Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g
+(.)f(.)h(.)29 b Fu(24)224 1949 y(2.4)45 b(Readline)16
+b(Con)o(v)o(enience)h(F)l(unctions)7 b Fl(.)i(.)e(.)h(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)29 b Fu(21)224
-1982 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7
-b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(23)374 2037 y(2.4.1)44
-b(Naming)15 b(a)g(F)l(unction)e Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)27 b Fu(23)374 2092 y(2.4.2)44 b(Selecting)17
-b(a)e(Keymap)6 b Fa(.)h(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fu(24)374 2147 y(2.4.3)44 b(Binding)17 b(Keys)5 b Fa(.)j(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)20 b
-Fu(24)374 2202 y(2.4.4)44 b(Asso)q(ciating)16 b(F)l(unction)g(Names)f
-(and)g(Bindings)8 b Fa(.)h(.)f(.)f(.)h(.)f(.)h(.)23 b
-Fu(25)374 2256 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f
-Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
+23 b Fu(28)374 2003 y(2.4.1)44 b(Naming)15 b(a)g(F)l(unction)e
+Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Fu(28)374
+2058 y(2.4.2)44 b(Selecting)17 b(a)e(Keymap)6 b Fl(.)h(.)h(.)g(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)21 b Fu(29)374 2113 y(2.4.3)44 b(Binding)17
+b(Keys)5 b Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
+h(.)f(.)20 b Fu(30)374 2168 y(2.4.4)44 b(Asso)q(ciating)16
+b(F)l(unction)g(Names)f(and)g(Bindings)8 b Fl(.)h(.)f(.)f(.)h(.)f(.)h
+(.)23 b Fu(31)374 2222 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f
+Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b
-Fu(26)374 2311 y(2.4.6)44 b(Redispla)o(y)10 b Fa(.)f(.)f(.)g(.)f(.)h(.)
+Fu(32)374 2277 y(2.4.6)44 b(Redispla)o(y)10 b Fl(.)e(.)g(.)g(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26
-b Fu(27)374 2366 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7
-b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+b Fu(33)374 2332 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7
+b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
-b Fu(28)374 2421 y(2.4.8)44 b(Utilit)o(y)16 b(F)l(unctions)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28
-b Fu(28)374 2475 y(2.4.9)44 b(Alternate)15 b(In)o(terface)5
-b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b
-Fu(29)374 2530 y(2.4.10)43 b(An)16 b(Example)f Fa(.)8
-b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30
-b Fu(30)224 2585 y(2.5)45 b(Readline)17 b(Signal)g(Handling)12
-b Fa(.)c(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
-b Fu(31)224 2640 y(2.6)45 b(Custom)14 b(Completers)f
-Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)28 b Fu(33)p eop
-%%Page: -2 56
--2 55 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)374
-42 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10
-b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(33)374 96 y(2.6.2)44
-b(Completion)16 b(F)l(unctions)6 b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h
+b Fu(34)374 2387 y(2.4.8)44 b(Character)14 b(Input)c
+Fl(.)f(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25
+b Fu(34)374 2442 y(2.4.9)44 b(T)l(erminal)16 b(Managemen)o(t)11
+b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(35)374 2496 y(2.4.10)43
+b(Utilit)o(y)17 b(F)l(unctions)c Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)28 b Fu(36)374 2551 y(2.4.11)43 b(Miscellaneous)18
+b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fu(37)374
+2606 y(2.4.12)43 b(Alternate)16 b(In)o(terface)f Fl(.)7
+b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 b Fu(37)374 2661
+y(2.4.13)43 b(A)16 b(Readline)g(Example)9 b Fl(.)f(.)f(.)h(.)f(.)h(.)g
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)24 b Fu(38)p eop
+%%Page: -2 66
+-2 65 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)h(Library)224
+42 y(2.5)45 b(Readline)16 b(Signal)h(Handling)12 b Fl(.)c(.)g(.)f(.)h
+(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(39)224 96
+y(2.6)45 b(Custom)14 b(Completers)f Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fu(41)374
+151 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10
+b Fl(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(41)374 206 y(2.6.2)44
+b(Completion)16 b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-21 b Fu(34)374 151 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c
-Fa(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(35)374 206
+21 b Fu(42)374 261 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c
+Fl(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(43)374 315
 y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b
-Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)20 b Fu(37)75 327 y Fs(Concept)i(Index)10 b Fb(.)i(.)e(.)g(.)g
+Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)20 b Fu(47)75 437 y Fs(Concept)i(Index)10 b Fa(.)i(.)e(.)g(.)g
 (.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(47)75 462
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(57)75 572
 y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9
-b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)32 b Fs(49)p eop
+b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)32 b Fs(59)p eop
 %%Trailer
 end
 userdict /end-hook known{end-hook}if
diff --git a/readline/doc/readline_3.ps b/readline/doc/readline_3.ps
new file mode 100644
index 0000000..7d20e17
--- /dev/null
+++ b/readline/doc/readline_3.ps
@@ -0,0 +1,1294 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.17.2
+%%CreationDate: Thu Jun 27 13:54:44 2002
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.17 2
+%%Pages: 14
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.17 2
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE
+/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1
+10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0
+(readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS)
+72 112.8 Q/F2 10/Times-Bold@0 SF(#include <stdio.h>)108 124.8 Q
+(#include <r)108 136.8 Q(eadline/r)-.18 E(eadline.h>)-.18 E(#include <r)
+108 148.8 Q(eadline/history)-.18 E(.h>)-.7 E/F3 10/Times-Italic@0 SF
+-.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0
+(\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT)
+72 194.4 Q F0(Readline is Cop)108 206.4 Q
+(yright \251 1989\2552002 by the Free Softw)-.1 E(are F)-.1 E
+(oundation, Inc.)-.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S
+(adline).18 E F0 .088
+(will read a line from the terminal and return it, using)2.588 F F2(pr)
+2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr)2.587
+E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42
+(the empty string, no prompt is issued.)108 247.2 R .421
+(The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421
+(\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q
+(The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15
+G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108
+276 S(adline).18 E F0(of)3.79 E 1.29
+(fers editing capabilities while the user is entering the line.)-.25 F
+1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F
+(mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G
+(i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G
+(ilable.).25 E .272
+(This manual page describes only the most basic use of)108 304.8 R F2
+-.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272
+(uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25
+F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3
+(The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.)
+2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.478 E F2 -.18(re)108 345.6 S
+(adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.)
+-.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589
+F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283
+(while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2
+(NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF)
+2.783 E F0 .283(is read with a non\255empty line, it)2.783 F
+(is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.986(TA)
+-.438 G(TION)-.054 E F0 .181
+(An emacs-style notation is used to denote k)108 398.4 R -.15(ey)-.1 G
+(strok).15 E 2.681(es. Control)-.1 F -.1(ke)2.681 G .18
+(ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.68(,e)C .18
+(.g., C\255n means)-2.68 F 2.625(Control\255N. Similarly)108 410.4 R(,)
+-.65 E F3(meta)2.625 E F0 -.1(ke)2.625 G .125(ys are denoted by M\255)
+-.05 F F3 -.1(ke)C(y)-.2 E F0 2.625(,s)C 2.625(oM)-2.625 G .125
+(\255x means Meta\255X.)-2.625 F .126(\(On k)5.126 F -.15(ey)-.1 G .126
+(boards without a).15 F F3(meta)108 422.4 Q F0 -.1(ke)3.309 G 2.109 -.65
+(y, M)-.05 H<ad>.65 E F3(x)A F0 .809(means ESC)3.309 F F3(x)3.309 E F0
+3.309(,i)C .809(.e., press the Escape k)-3.309 F 1.108 -.15(ey t)-.1 H
+.808(hen the).15 F F3(x)3.308 E F0 -.1(ke)3.308 G 4.608 -.65(y. T)-.05 H
+.808(his mak).65 F .808(es ESC the)-.1 F F3 .808(meta pr)3.308 F(e\214x)
+-.37 E F0(.)A .48(The combination M\255C\255)108 434.4 R F3(x)A F0 .48
+(means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o)C 2.98(rp)-2.98 G .48
+(ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48
+(hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E
+(pressing the)108 446.4 Q F3(x)2.5 E F0 -.1(ke)2.5 G -.65(y.)-.05 G(\))
+.65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G 3.119
+(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w).27 G
+.619(hich normally act as a repeat count.)-3.119 F(Sometimes,)5.619 E
+(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti)
+.4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619
+(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne)
+.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619
+(ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018
+(ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C
+1.018(auses that command to act in a backw)-3.518 F 1.018
+(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q
+(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted.)-.25 E
+.811(When a command is described as)108 516 R F3(killing)3.311 E F0(te)
+3.311 E .811(xt, the te)-.15 F .811(xt deleted is sa)-.15 F -.15(ve)-.2
+G 3.311(df).15 G .812(or possible future retrie)-3.311 F -.25(va)-.25 G
+3.312(l\().25 G F3(yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029
+(killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G
+2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E
+.329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029
+(xt to be accumulated into one unit,)-.15 F .567(which can be yank)108
+540 R .567(ed all at once.)-.1 F .567(Commands which do not kill te)
+5.567 F .567(xt separate the chunks of te)-.15 F .567(xt on the kill)
+-.15 F(ring.)108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-1.04 E F0
+.091(Readline is customized by putting commands in an initialization \
+\214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591
+(\214le\). The)2.591 F .091(name of this \214le)2.591 F 1.442(is tak)108
+592.8 R 1.443(en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC)
+3.943 E F0(en)3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F
+1.443(that v)3.943 F 1.443(ariable is unset, the def)-.25 F 1.443
+(ault is)-.1 F F3(~/.inputr)108 604.8 Q(c)-.37 E F0 5.359(.W).31 G .359
+(hen a program which uses the readline library starts up, the init \214\
+le is read, and the k)-5.359 F .658 -.15(ey b)-.1 H(ind-).15 E 1.083
+(ings and v)108 616.8 R 1.083(ariables are set.)-.25 F 1.083
+(There are only a fe)6.083 F 3.583(wb)-.25 G 1.083(asic constructs allo)
+-3.583 F 1.084(wed in the readline init \214le.)-.25 F(Blank)6.084 E
+.737(lines are ignored.)108 628.8 R .737(Lines be)5.737 F .737
+(ginning with a)-.15 F F2(#)3.237 E F0 .737(are comments.)3.237 F .737
+(Lines be)5.737 F .737(ginning with a)-.15 F F2($)3.237 E F0 .736
+(indicate conditional)3.236 F 2.614(constructs. Other)108 640.8 R .114
+(lines denote k)2.614 F .414 -.15(ey b)-.1 H .115(indings and v).15 F
+.115(ariable settings.)-.25 F .115
+(Each program using this library may add)5.115 F(its o)108 652.8 Q
+(wn commands and bindings.)-.25 E -.15(Fo)108 669.6 S 2.5(re).15 G
+(xample, placing)-2.65 E(M\255Control\255u: uni)144 686.4 Q -.15(ve)-.25
+G(rsal\255ar).15 E(gument)-.18 E(or)108 698.4 Q(C\255Meta\255u: uni)144
+710.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(GNU Readline 4.3)
+72 768 Q(2002 January 22)126.24 E(1)195.95 E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R
+(into the)108 84 Q/F1 10/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0 -.1
+(wo)2.5 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G
+(cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument)
+-.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795
+(wing symbolic character names are recognized while processing k)-.25 F
+3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC)
+5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,)
+.28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5
+E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC)
+-.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5
+(TA)2.5 G(B).5 E F0(.).27 E .209
+(In addition to command names, readline allo)108 129.6 R .209(ws k)-.25
+F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209
+(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i)
+-.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2
+10/Times-Bold@0 SF -.25(Ke)87 163.2 S 2.5(yB).25 G(indings)-2.5 E F0
+.382(The syntax for controlling k)108 175.2 R .682 -.15(ey b)-.1 H .382
+(indings in the).15 F F1(inputr)2.882 E(c)-.37 E F0 .382
+(\214le is simple.)2.882 F .382(All that is required is the name of the)
+5.382 F .382(command or the te)108 187.2 R .383(xt of a macro and a k)
+-.15 F .683 -.15(ey s)-.1 H .383
+(equence to which it should be bound. The name may be speci-).15 F .853
+(\214ed in one of tw)108 199.2 R 3.353(ow)-.1 G .853
+(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853
+(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr)
+3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15
+(ey)-.1 G(sequence.)108 211.2 Q 1.766(When using the form)108 228 R F2
+-.1(ke)4.266 G(yname).1 E F0(:)A F1(function-name).833 E F0(or)4.266 E
+F1(macr)4.267 E(o)-.45 E F0(,)A F1 -.1(ke)4.267 G(yname)-.2 E F0 1.767
+(is the name of a k)4.267 F 2.067 -.15(ey s)-.1 H 1.767(pelled out in)
+.15 F 2.5(English. F)108 240 R(or e)-.15 E(xample:)-.15 E
+(Control\255u: uni)144 264 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18
+E(Meta\255Rubout: backw)144 276 Q(ard\255kill\255w)-.1 E(ord)-.1 E
+(Control\255o: "> output")144 288 Q .229(In the abo)108 304.8 R .529
+-.15(ve ex)-.15 H(ample,).15 E F1(C\255u)2.729 E F0 .229
+(is bound to the function)2.729 F F2(uni)2.729 E -.1(ve)-.1 G
+(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)2.729 E F0 .228
+(is bound to the function)2.729 F F2(backward\255kill\255w)108 316.8 Q
+(ord)-.1 E F0 3.837(,a)C(nd)-3.837 E F1(C\255o)3.837 E F0 1.337
+(is bound to run the macro e)3.837 F 1.337
+(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108
+328.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0
+(into the line\).)2.5 E .056(In the second form,)108 345.6 R F2("k)2.556
+E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr)
+2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055
+(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15
+(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284
+(denoting an entire k)108 357.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\
+ay be speci\214ed by placing the sequence within double quotes.).15 F
+(Some)6.284 E .386(GNU Emacs style k)108 369.6 R .686 -.15(ey e)-.1 H
+.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385
+(xample, b)-.15 F .385(ut the symbolic character names)-.2 F
+(are not recognized.)108 381.6 Q("\\C\255u": uni)144 405.6 Q -.15(ve)
+-.25 G(rsal\255ar).15 E(gument)-.18 E
+("\\C\255x\\C\255r": re\255read\255init\255\214le)144 417.6 Q
+("\\e[11~": "Function K)144 429.6 Q .3 -.15(ey 1)-.25 H(").15 E .237
+(In this e)108 446.4 R(xample,)-.15 E F1(C-u)2.737 E F0 .237(is ag)2.737
+F .238(ain bound to the function)-.05 F F2(uni)2.738 E -.1(ve)-.1 G
+(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .238(C-x C-r)5.238 F F0 .238
+(is bound to the function)2.738 F F2 -.18(re)108 458.4 S<ad72>.18 E
+(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)2.5 E
+F0(is bound to insert the te)2.5 E(xt)-.15 E F3(Function Key 1)2.5 E F0
+(.)A(The full set of GNU Emacs style escape sequences a)108 475.2 Q -.25
+(va)-.2 G(ilable when specifying k).25 E .3 -.15(ey s)-.1 H(equences is)
+.15 E F2<5c43ad>144 487.2 Q F0(control pre\214x)20.3 E F2<5c4dad>144
+499.2 Q F0(meta pre\214x)18.08 E F2(\\e)144 511.2 Q F0
+(an escape character)28.78 E F2(\\\\)144 523.2 Q F0(backslash)30.44 E F2
+(\\")144 535.2 Q F0(literal ", a double quote)27.67 E F2(\\')144 547.2 Q
+F0(literal ', a single quote)29.89 E(In addition to the GNU Emacs style\
+ escape sequences, a second set of backslash escapes is a)108 564 Q -.25
+(va)-.2 G(ilable:).25 E F2(\\a)144 576 Q F0(alert \(bell\))28.22 E F2
+(\\b)144 588 Q F0(backspace)27.66 E F2(\\d)144 600 Q F0(delete)27.66 E
+F2(\\f)144 612 Q F0(form feed)29.89 E F2(\\n)144 624 Q F0(ne)27.66 E
+(wline)-.25 E F2(\\r)144 636 Q F0(carriage return)28.78 E F2(\\t)144 648
+Q F0(horizontal tab)29.89 E F2(\\v)144 660 Q F0 -.15(ve)28.22 G
+(rtical tab).15 E F2(\\)144 672 Q F1(nnn)A F0
+(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E
+(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144
+684 Q F1(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he)
+-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E
+2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74(When entering the te)
+108 700.8 R .74(xt of a macro, single or double quotes should be used t\
+o indicate a macro de\214nition.)-.15 F .089(Unquoted te)108 712.8 R
+.089(xt is assumed to be a function name.)-.15 F .09(In the macro body)
+5.089 F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F
+-.15(ve)-.15 G(are e)108 724.8 Q 2.5(xpanded. Backslash)-.15 F
+(will quote an)2.5 E 2.5(yo)-.15 G(ther character in the macro te)-2.5 E
+(xt, including " and '.)-.15 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(2)195.95 E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(Bash)108 84 Q F0(allo)2.93 E .43
+(ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429
+(indings to be displayed or modi\214ed with the).15 F F1(bind)2.929 E F0
+-.2(bu)2.929 G .429(iltin command.).2 F 1.095
+(The editing mode may be switched during interacti)108 96 R 1.395 -.15
+(ve u)-.25 H 1.095(se by using the).15 F F1<ad6f>3.595 E F0 1.095
+(option to the)3.595 F F1(set)3.595 E F0 -.2(bu)3.595 G 1.095
+(iltin com-).2 F 3.097(mand. Other)108 108 R .597
+(programs using this library pro)3.097 F .597(vide similar mechanisms.)
+-.15 F(The)5.597 E/F2 10/Times-Italic@0 SF(inputr)3.097 E(c)-.37 E F0
+.596(\214le may be edited and)3.096 F(re-read if a program does not pro)
+108 120 Q(vide an)-.15 E 2.5(yo)-.15 G(ther means to incorporate ne)-2.5
+E 2.5(wb)-.25 G(indings.)-2.5 E F1 -.92(Va)87 136.8 S(riables).92 E F0
+.043(Readline has v)108 148.8 R .044
+(ariables that can be used to further customize its beha)-.25 F(vior)-.2
+E 5.044(.A)-.55 G -.25(va)-2.5 G .044(riable may be set in the).25 F F2
+(inpu-)2.544 E(tr)108 160.8 Q(c)-.37 E F0
+(\214le with a statement of the form)2.5 E F1(set)144 177.6 Q F2
+(variable\255name value)2.5 E F0 .807(Except where noted, readline v)108
+194.4 R .807(ariables can tak)-.25 F 3.307(et)-.1 G .807(he v)-3.307 F
+(alues)-.25 E F1(On)3.307 E F0(or)3.307 E F1(Off)3.307 E F0 .807
+(\(without re)3.307 F -.05(ga)-.15 G .807(rd to case\).).05 F .807
+(The v)5.807 F(ari-)-.25 E(ables and their def)108 206.4 Q(ault v)-.1 E
+(alues are:)-.25 E F1(bell\255style \(audible\))108 223.2 Q F0 .01
+(Controls what happens when readline w)144 235.2 R .011
+(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none)
+2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E
+.94(rings the bell.)144 247.2 R .94(If set to)5.94 F F1(visible)3.44 E
+F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25
+(va)-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0
+(,)A(readline attempts to ring the terminal')144 259.2 Q 2.5(sb)-.55 G
+(ell.)-2.5 E F1(comment\255begin \(`)108 271.2 Q(`#')-.63 E('\))-.63 E
+F0 .062(The string that is inserted in)144 283.2 R F1(vi)2.562 E F0 .062
+(mode when the)2.562 F F1(insert\255comment)2.562 E F0 .062
+(command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562
+E(mand is bound to)144 295.2 Q F1(M\255#)2.5 E F0(in emacs mode and to)
+2.5 E F1(#)2.5 E F0(in vi command mode.)2.5 E F1(completion\255ignor)108
+307.2 Q(e\255case \(Off\))-.18 E F0(If set to)144 319.2 Q F1(On)2.5 E F0
+2.5(,r)C(eadline performs \214lename matching and completion in a case\
+\255insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1
+(completion\255query\255items \(100\))108 331.2 Q F0 .53
+(This determines when the user is queried about vie)144 343.2 R .529
+(wing the number of possible completions gen-)-.25 F .56(erated by the)
+144 355.2 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F
+.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v)
+-.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 367.2 R
+.783(If the number of possible completions is greater than or equal to \
+the v)5.783 F .782(alue of this)-.25 F -.25(va)144 379.2 S .237
+(riable, the user is ask).25 F .237(ed whether or not he wishes to vie)
+-.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G
+.237(re simply listed)-2.737 F(on the terminal.)144 391.2 Q F1(con)108
+403.2 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to)144 415.2
+R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F -.15(ve)-.4
+G .613(rt characters with the eighth bit set to an ASCII k).15 F .912
+-.15(ey s)-.1 H .612(equence by).15 F 1.315(stripping the eighth bit an\
+d pre\214xing it with an escape character \(in ef)144 427.2 R 1.316
+(fect, using escape as the)-.25 F F2(meta pr)144 439.2 Q(e\214x)-.37 E
+F0(\).)A F1(disable\255completion \(Off\))108 451.2 Q F0 .038(If set to)
+144 463.2 R F1(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)
+-2.538 F .038(ord completion.)-.1 F .038
+(Completion characters will be inserted into the)5.038 F(line as if the)
+144 475.2 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E
+F0(.)A F1(editing\255mode \(emacs\))108 487.2 Q F0 .215
+(Controls whether readline be)144 499.2 R .215(gins with a set of k)-.15
+F .515 -.15(ey b)-.1 H .216(indings similar to emacs or vi.).15 F F1
+(editing\255mode)5.216 E F0(can be set to either)144 511.2 Q F1(emacs)
+2.5 E F0(or)2.5 E F1(vi)2.5 E F0(.)A F1(enable\255k)108 523.2 Q
+(eypad \(Off\))-.1 E F0 .893(When set to)144 535.2 R F1(On)3.393 E F0
+3.393(,r)C .893(eadline will try to enable the application k)-3.393 F
+-.15(ey)-.1 G .893(pad when it is called.).15 F .892(Some sys-)5.893 F
+(tems need this to enable the arro)144 547.2 Q 2.5(wk)-.25 G -.15(ey)
+-2.6 G(s.).15 E F1(expand\255tilde \(Off\))108 559.2 Q F0(If set to)144
+571.2 Q F1(on)2.5 E F0 2.5(,t)C(ilde e)-2.5 E
+(xpansion is performed when readline attempts w)-.15 E(ord completion.)
+-.1 E F1(history-pr)108 583.2 Q(eser)-.18 E -.1(ve)-.1 G(-point).1 E F0
+1.492(If set to)144 595.2 R F1(on)3.992 E F0 3.992(,t)C 1.493(he histor\
+y code attempts to place point at the same location on each history lin\
+e)-3.992 F(retri)144 607.2 Q -.15(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1
+(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E F0(or)2.5 E F1(next-history)
+2.5 E F0(.)A F1(horizontal\255scr)108 619.2 Q(oll\255mode \(Off\))-.18 E
+F0 .449(When set to)144 631.2 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E
+.448(es readline use a single line for display)-.1 F 2.948(,s)-.65 G
+.448(crolling the input horizontally on a)-2.948 F 1.194(single screen \
+line when it becomes longer than the screen width rather than wrapping \
+to a ne)144 643.2 R(w)-.25 E(line.)144 655.2 Q F1(input\255meta \(Off\))
+108 667.2 Q F0 .367(If set to)144 679.2 R F1(On)2.867 E F0 2.867(,r)C
+.367(eadline will enable eight-bit input \(that is, it will not clear t\
+he eighth bit in the char)-2.867 F(-)-.2 E .956(acters it reads\), re)
+144 691.2 R -.05(ga)-.15 G .956
+(rdless of what the terminal claims it can support.).05 F .957(The name)
+5.956 F F1(meta\255\215ag)3.457 E F0 .957(is a)3.457 F(synon)144 703.2 Q
+(ym for this v)-.15 E(ariable.)-.25 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(3)195.95 E EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(isear)108 84 Q(ch\255terminators \(`)-.18 E
+(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439(The string of characters tha\
+t should terminate an incremental search without subsequently e)144 96 R
+-.15(xe)-.15 G(cut-).15 E .934(ing the character as a command.)144 108 R
+.935(If this v)5.935 F .935(ariable has not been gi)-.25 F -.15(ve)-.25
+G 3.435(nav).15 G .935(alue, the characters)-3.685 F/F2 10
+/Times-Italic@0 SF(ESC)3.435 E F0(and)144 120 Q F2(C\255J)2.5 E F0
+(will terminate an incremental search.)2.5 E F1 -.1(ke)108 132 S
+(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 144 R -.15
+(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05(ga)-.15 G
+4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F2 2.323
+(emacs, emacs-standar)4.823 F(d,)-.37 E .808
+(emacs-meta, emacs-ctlx, vi, vi-mo)144 156 R(ve)-.1 E 3.308(,v)-.1 G
+(i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.)
+.68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .809(lent to)
+.25 F F2(vi-command)3.309 E F0(;)A F2(emacs)144 168 Q F0 .697(is equi)
+3.197 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d)
+-.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697
+(alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F
+.697(alue of)-.25 F F1(editing\255mode)3.196 E F0(also af)144 180 Q
+(fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1
+(mark\255dir)108 192 Q(ectories \(On\))-.18 E F0(If set to)144 204 Q F1
+(On)2.5 E F0 2.5(,c)C(ompleted directory names ha)-2.5 E .3 -.15(ve a s)
+-.2 H(lash appended.).15 E F1(mark\255modi\214ed\255lines \(Off\))108
+216 Q F0(If set to)144 228 Q F1(On)2.5 E F0 2.5(,h)C
+(istory lines that ha)-2.5 E .3 -.15(ve b)-.2 H
+(een modi\214ed are displayed with a preceding asterisk \().15 E F1(*)A
+F0(\).)A F1(mark\255symlink)108 240 Q(ed\255dir)-.1 E(ectories \(Off\))
+-.18 E F0 .175(If set to)144 252 R F1(On)2.675 E F0 2.675(,c)C .175
+(ompleted names which are symbolic links to directories ha)-2.675 F .475
+-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 264
+Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1
+(match\255hidden\255\214les \(On\))108 276 Q F0 .193(This v)144 288 R
+.193(ariable, when set to)-.25 F F1(On)2.693 E F0 2.693(,c)C .192
+(auses readline to match \214les whose names be)-2.693 F .192
+(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E 1.023
+(\214les\) when performing \214lename completion, unless the leading `.)
+144 300 R 3.523('i)-.7 G 3.523(ss)-3.523 G 1.024
+(upplied by the user in the)-3.523 F(\214lename to be completed.)144 312
+Q F1(output\255meta \(Off\))108 324 Q F0 .507(If set to)144 336 R F1(On)
+3.007 E F0 3.007(,r)C .507(eadline will display characters with the eig\
+hth bit set directly rather than as a meta-)-3.007 F(pre\214x)144 348 Q
+(ed escape sequence.)-.15 E F1(page\255completions \(On\))108 360 Q F0
+.808(If set to)144 372 R F1(On)3.308 E F0 3.308(,r)C .808
+(eadline uses an internal)-3.308 F F2(mor)3.308 E(e)-.37 E F0(-lik)A
+3.308(ep)-.1 G .808(ager to display a screenful of possible comple-)
+-3.308 F(tions at a time.)144 384 Q F1
+(print\255completions\255horizontally \(Off\))108 396 Q F0 1.319
+(If set to)144 408 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline will dis\
+play completions with matches sorted horizontally in alphabetical)-3.819
+F(order)144 420 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25
+E F1(sho)108 432 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .477
+(This alters the def)144 444 R .477(ault beha)-.1 F .477
+(vior of the completion functions.)-.2 F .478(If set to)5.478 F F1(on)
+2.978 E F0 2.978(,w)C .478(ords which ha)-3.078 F .778 -.15(ve m)-.2 H
+(ore).15 E 1.264(than one possible completion cause the matches to be l\
+isted immediately instead of ringing the)144 456 R(bell.)144 468 Q F1
+(visible\255stats \(Off\))108 480 Q F0 .846(If set to)144 492 R F1(On)
+3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346
+(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846
+(\(2\) is appended to the \214lename)B
+(when listing possible completions.)144 504 Q F1(Conditional Constructs)
+87 520.8 Q F0 .05(Readline implements a f)108 532.8 R .05(acility simil\
+ar in spirit to the conditional compilation features of the C preproces\
+sor)-.1 F .096(which allo)108 544.8 R .096(ws k)-.25 F .396 -.15(ey b)
+-.1 H .096(indings and v).15 F .096
+(ariable settings to be performed as the result of tests.)-.25 F .097
+(There are four parser)5.096 F(directi)108 556.8 Q -.15(ve)-.25 G 2.5
+(su).15 G(sed.)-2.5 E F1($if)108 573.6 Q F0(The)24.89 E F1($if)2.963 E
+F0 .463(construct allo)2.963 F .462(ws bindings to be made based on the\
+ editing mode, the terminal being used,)-.25 F .477
+(or the application using readline.)144 585.6 R .477(The te)5.477 F .477
+(xt of the test e)-.15 F .477
+(xtends to the end of the line; no characters)-.15 F
+(are required to isolate it.)144 597.6 Q F1(mode)144 614.4 Q F0(The)
+12.67 E F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0
+(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211
+(sed to test whether readline is in emacs or vi)-3.711 F 3.065
+(mode. This)180 626.4 R .565(may be used in conjunction with the)3.065 F
+F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to)
+3.065 F .03(set bindings in the)180 638.4 R F2(emacs-standar)2.529 E(d)
+-.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029
+(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 650.4
+Q F1(term)144 667.2 Q F0(The)15.46 E F1(term=)3.196 E F0 .696
+(form may be used to include terminal-speci\214c k)3.196 F .996 -.15
+(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 679.2 R
+.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154
+(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1
+(wo)3.154 G .654(rd on the right side of).1 F(the)180 691.2 Q F1(=)3.003
+E F0 .503(is tested ag)3.003 F .504(ainst the full name of the terminal\
+ and the portion of the terminal name)-.05 F(before the \214rst)180
+703.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.5 E F0
+(to match both)2.5 E F2(sun)2.5 E F0(and)2.5 E F2(sun\255cmd)2.5 E F0
+2.5(,f).77 G(or instance.)-2.5 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(4)195.95 E EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(application)144 84 Q F0(The)180 96 Q F1(application)
+3.003 E F0 .503
+(construct is used to include application-speci\214c settings.)3.003 F
+.503(Each program)5.503 F .114(using the readline library sets the)180
+108 R/F2 10/Times-Italic@0 SF .114(application name)2.614 F F0 2.614(,a)
+C .114(nd an initialization \214le can test for a)-2.614 F .501
+(particular v)180 120 R 3.001(alue. This)-.25 F .501
+(could be used to bind k)3.001 F .801 -.15(ey s)-.1 H .5
+(equences to functions useful for a spe-).15 F .396(ci\214c program.)180
+132 R -.15(Fo)5.396 G 2.896(ri).15 G .396(nstance, the follo)-2.896 F
+.396(wing command adds a k)-.25 F .696 -.15(ey s)-.1 H .397
+(equence that quotes the).15 F(current or pre)180 144 Q(vious w)-.25 E
+(ord in Bash:)-.1 E F1($if)180 168 Q F0(Bash)2.5 E 2.5(#Q)180 180 S
+(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E
+("\\C-xq": "\\eb\\"\\ef\\"")180 192 Q F1($endif)180 204 Q($endif)108
+220.8 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E
+(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1($else)
+108 237.6 Q F0(Commands in this branch of the)15.45 E F1($if)2.5 E F0
+(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G
+(cuted if the test f).15 E(ails.)-.1 E F1($include)108 254.4 Q F0 .357
+(This directi)144 266.4 R .657 -.15(ve t)-.25 H(ak).15 E .357
+(es a single \214lename as an ar)-.1 F .356
+(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F)
+144 278.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3
+-.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1
+($include)144 302.4 Q F2(/etc/inputr)5.833 E(c)-.37 E/F3 10.95
+/Times-Bold@0 SF(SEARCHING)72 319.2 Q F0 1.003(Readline pro)108 331.2 R
+1.003(vides commands for searching through the command history for line\
+s containing a speci\214ed)-.15 F 2.5(string. There)108 343.2 R(are tw)
+2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.5 E(emental)-.37 E F0
+(and)2.5 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 E .698
+(Incremental searches be)108 360 R .698
+(gin before the user has \214nished typing the search string.)-.15 F
+.697(As each character of the)5.697 F .112
+(search string is typed, readline displays the ne)108 372 R .112
+(xt entry from the history matching the string typed so f)-.15 F(ar)-.1
+E 5.113(.A)-.55 G(n)-5.113 E .545
+(incremental search requires only as man)108 384 R 3.045(yc)-.15 G .544
+(haracters as needed to \214nd the desired history entry)-3.045 F 5.544
+(.T)-.65 G 3.044(os)-6.344 G(earch)-3.044 E(backw)108 396 Q .18
+(ard in the history for a particular string, type)-.1 F F1(C\255r)2.681
+E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.681 E F0 .181(searches forw)
+2.681 F .181(ard through the history)-.1 F(.)-.65 E .354
+(The characters present in the v)108 408 R .354(alue of the)-.25 F F1
+(isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354
+(riable are used to terminate an incremen-).25 F .6(tal search.)108 420
+R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F .6
+(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6
+(characters will terminate an)3.1 F .123(incremental search.)108 432 R
+F1(C\255G)5.123 E F0 .123
+(will abort an incremental search and restore the original line.)2.623 F
+.122(When the search is)5.122 F(terminated, the history entry containin\
+g the search string becomes the current line.)108 444 Q 2.406 -.8
+(To \214)108 460.8 T .806
+(nd other matching entries in the history list, type).8 F F1(C\255s)
+3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F
+.807(This will search back-)5.806 F -.1(wa)108 472.8 S 1.309(rd or forw)
+.1 F 1.309(ard in the history for the ne)-.1 F 1.309
+(xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A)
+-.55 G 1.609 -.15(ny o)-6.309 H 1.308(ther k).15 F -.15(ey)-.1 G .317
+(sequence bound to a readline command will terminate the search and e)
+108 484.8 R -.15(xe)-.15 G .318(cute that command.).15 F -.15(Fo)5.318 G
+2.818(ri).15 G(nstance,)-2.818 E 3.481(an)108 496.8 S -.25(ew)-3.481 G
+.981(line will terminate the search and accept the line, thereby e).25 F
+-.15(xe)-.15 G .98(cuting the command from the history).15 F 3.061
+(list. A)108 508.8 R(mo)3.061 E -.15(ve)-.15 G .562
+(ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562
+(he last line found the current line, and be)-3.062 F(gin)-.15 E
+(editing.)108 520.8 Q .567(Non-incremental searches read the entire sea\
+rch string before starting to search for matching history lines.)108
+537.6 R(The search string may be typed by the user or be part of the co\
+ntents of the current line.)108 549.6 Q F3(EDITING COMMANDS)72 566.4 Q
+F0 1.391(The follo)108 578.4 R 1.391
+(wing is a list of the names of the commands and the def)-.25 F 1.391
+(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F
+3.892(ya)-.15 G(re)-3.892 E 2.5(bound. Command)108 590.4 R
+(names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H
+(equence are unbound by def).15 E(ault.)-.1 E .055(In the follo)108
+607.2 R .055(wing descriptions,)-.25 F F2(point)2.555 E F0 .055
+(refers to the current cursor position, and)2.555 F F2(mark)2.555 E F0
+.054(refers to a cursor position)2.554 F(sa)108 619.2 Q -.15(ve)-.2 G
+2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5
+(command. The)2.5 F(te)2.5 E
+(xt between the point and mark is referred to as the)-.15 E F2 -.37(re)
+2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 636 Q(or Mo)-.25 E(ving)-.1 E
+(beginning\255of\255line \(C\255a\))108 648 Q F0(Mo)144 660 Q .3 -.15
+(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1
+(end\255of\255line \(C\255e\))108 672 Q F0(Mo)144 684 Q .3 -.15(ve t)
+-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 696 S
+(rward\255char \(C\255f\)).25 E F0(Mo)144 708 Q .3 -.15(ve f)-.15 H(orw)
+.15 E(ard a character)-.1 E(.)-.55 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(5)195.95 E EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(backward\255char \(C\255b\))108 84 Q F0(Mo)144 96 Q .3
+-.15(ve b)-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 108 S
+(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 120 Q .822 -.15(ve f)
+-.15 H(orw).15 E .522(ard to the end of the ne)-.1 F .523(xt w)-.15 F
+3.023(ord. W)-.1 F .523
+(ords are composed of alphanumeric characters \(let-)-.8 F
+(ters and digits\).)144 132 Q F1(backward\255w)108 144 Q(ord \(M\255b\))
+-.1 E F0(Mo)144 156 Q 1.71 -.15(ve b)-.15 H 1.41
+(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91
+(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F
+(characters \(letters and digits\).)144 168 Q F1(clear\255scr)108 180 Q
+(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 192 R .993
+(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G
+.993(th an ar).4 F .993(gument, refresh the)-.18 F
+(current line without clearing the screen.)144 204 Q F1 -.18(re)108 216
+S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144
+228 Q F1(Commands f)87 244.8 Q(or Manipulating the History)-.25 E
+(accept\255line \(Newline, Retur)108 256.8 Q(n\))-.15 E F0 .365
+(Accept the line re)144 268.8 R -.05(ga)-.15 G .364
+(rdless of where the cursor is.).05 F .364(If this line is non-empty)
+5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .364(ay be added to the)-2.864
+F .74(history list for future recall with)144 280.8 R F1
+(add_history\(\))3.24 E F0 5.741(.I)C 3.241(ft)-5.741 G .741
+(he line is a modi\214ed history line, the history)-3.241 F
+(line is restored to its original state.)144 292.8 Q F1(pr)108 304.8 Q
+-.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144
+316.8 Q(vious command from the history list, mo)-.25 E
+(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 328.8 Q
+F0(Fetch the ne)144 340.8 Q(xt command from the history list, mo)-.15 E
+(ving forw)-.15 E(ard in the list.)-.1 E F1
+(beginning\255of\255history \(M\255<\))108 352.8 Q F0(Mo)144 364.8 Q .3
+-.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.)
+-.65 E F1(end\255of\255history \(M\255>\))108 376.8 Q F0(Mo)144 388.8 Q
+.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5
+(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18
+(re v)108 400.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0
+1.471(Search backw)144 412.8 R 1.471
+(ard starting at the current line and mo)-.1 F 1.47
+(ving `up' through the history as necessary)-.15 F(.)-.65 E
+(This is an incremental search.)144 424.8 Q F1 -.25(fo)108 436.8 S
+(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131
+(Search forw)144 448.8 R 1.131(ard starting at the current line and mo)
+-.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary)
+-.25 F(.)-.65 E(This is an incremental search.)144 460.8 Q F1
+(non\255incr)108 472.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H
+(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw)
+144 484.8 R .164(ard through the history starting at the current line u\
+sing a non-incremental search for)-.1 F 2.5(as)144 496.8 S
+(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 508.8 Q
+(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18
+E F0 1.353(Search forw)144 520.8 R 1.354(ard through the history using \
+a non-incremental search for a string supplied by the)-.1 F(user)144
+532.8 Q(.)-.55 E F1(history\255sear)108 544.8 Q(ch\255f)-.18 E(orward)
+-.25 E F0 .249(Search forw)144 556.8 R .249(ard through the history for\
+ the string of characters between the start of the current line)-.1 F
+(and the current cursor position \(the)144 568.8 Q/F2 10/Times-Italic@0
+SF(point)2.5 E F0 2.5(\). This)B(is a non-incremental search.)2.5 E F1
+(history\255sear)108 580.8 Q(ch\255backward)-.18 E F0 .95(Search backw)
+144 592.8 R .951(ard through the history for the string of characters b\
+etween the start of the current)-.1 F(line and the point.)144 604.8 Q
+(This is a non-incremental search.)5 E F1(yank\255nth\255ar)108 616.8 Q
+2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144
+628.8 R .622(gument to the pre)-.18 F .622
+(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F
+.622(vious line\))-.25 F .794(at point.)144 640.8 R -.4(Wi)5.794 G .794
+(th an ar).4 F(gument)-.18 E F2(n)3.294 E F0 3.294(,i).24 G .794
+(nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794(ord from the pre)
+-.1 F .794(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144
+652.8 Q .292(vious command be)-.25 F .292(gin with w)-.15 F .291
+(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591
+-.15(ve a)-.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E
+F0 .291(th w)B .291(ord from the end of)-.1 F(the pre)144 664.8 Q
+(vious command.)-.25 E F1(yank\255last\255ar)108 676.8 Q 2.5(g\()-.1 G
+-1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307
+(Insert the last ar)144 688.8 R 1.307(gument to the pre)-.18 F 1.307
+(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308
+(vious history entry\).)-.25 F -.4(Wi)144 700.8 S .736(th an ar).4 F
+.736(gument, beha)-.18 F 1.036 -.15(ve ex)-.2 H .736(actly lik).15 F(e)
+-.1 E F1(yank\255nth\255ar)3.235 E(g)-.1 E F0 5.735(.S)C(uccessi)-5.735
+E 1.035 -.15(ve c)-.25 H .735(alls to).15 F F1(yank\255last\255ar)3.235
+E(g)-.1 E F0(mo)3.235 E -.15(ve)-.15 G
+(back through the history list, inserting the last ar)144 712.8 Q
+(gument of each line in turn.)-.18 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(6)195.95 E EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(Commands f)87 84 Q(or Changing T)-.25 E(ext)-.92 E
+(delete\255char \(C\255d\))108 96 Q F0 .357
+(Delete the character at point.)144 108 R .358(If point is at the be)
+5.358 F .358(ginning of the line, there are no characters in the)-.15 F
+(line, and the last character typed w)144 120 Q(as not bound to)-.1 E F1
+(delete\255char)2.5 E F0 2.5(,t)C(hen return)-2.5 E/F2 9/Times-Bold@0 SF
+(EOF)2.5 E/F3 9/Times-Roman@0 SF(.)A F1
+(backward\255delete\255char \(Rubout\))108 132 Q F0 .553
+(Delete the character behind the cursor)144 144 R 5.553(.W)-.55 G .553
+(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F
+.552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552(he deleted te).15 F
+.552(xt on)-.15 F(the kill ring.)144 156 Q F1 -.25(fo)108 168 S
+(rward\255backward\255delete\255char).25 E F0 .473
+(Delete the character under the cursor)144 180 R 2.973(,u)-.4 G .474
+(nless the cursor is at the end of the line, in which case the)-2.973 F
+(character behind the cursor is deleted.)144 192 Q F1
+(quoted\255insert \(C\255q, C\255v\))108 204 Q F0 1.229(Add the ne)144
+216 R 1.228(xt character that you type to the line v)-.15 F 3.728
+(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.728(wt)-.25 G 3.728(oi)
+-3.728 G 1.228(nsert characters lik)-3.728 F(e)-.1 E F1(C\255q)144 228 Q
+F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 240 Q
+(AB\))-.9 E F0(Insert a tab character)144 252 Q(.)-.55 E F1
+(self\255insert \(a, b, A, 1, !, ...\))108 264 Q F0
+(Insert the character typed.)144 276 Q F1(transpose\255chars \(C\255t\))
+108 288 Q F0 .321(Drag the character before point forw)144 300 R .321
+(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321
+(he character at point, mo)-2.821 F .322(ving point forw)-.15 F .322
+(ard as well.)-.1 F 1.182
+(If point is at the end of the line, then this transposes the tw)144 312
+R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E -.05
+(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 324 Q(guments ha)-.18 E .3
+-.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1
+(transpose\255w)108 336 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144
+348 R .023(ord before point past the w)-.1 F .023(ord after point, mo)
+-.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w)
+-2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F
+(is at the end of the line, this transposes the last tw)144 360 Q 2.5
+(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 372 Q
+(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 384
+R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)
+-.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698
+(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 396 S(rd, b).1 E
+(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 408 Q
+(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 420 Q 1.647
+(wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147
+(ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15
+(ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre)
+-.25 F(vious)-.25 E -.1(wo)144 432 S(rd, b).1 E(ut do not mo)-.2 E .3
+-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 444 Q
+(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 456
+R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga)
+-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974
+(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 468 S(rd, b).1
+E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 480
+S(rwrite\255mode).1 E F0 -.8(To)144 492 S .437(ggle o).8 F -.15(ve)-.15
+G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437
+(xplicit positi)-.15 F .738 -.15(ve n)-.25 H .438(umeric ar).15 F .438
+(gument, switches to o)-.18 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4
+(Wi)144 504 S .781(th an e).4 F .781(xplicit non-positi)-.15 F 1.081
+-.15(ve n)-.25 H .781(umeric ar).15 F .781
+(gument, switches to insert mode.)-.18 F .78(This command af)5.781 F
+(fects)-.25 E(only)144 516 Q F1(emacs)4.394 E F0(mode;)4.394 E F1(vi)
+4.394 E F0 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15
+F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F4 10
+/Times-Italic@0 SF -.37(re)4.395 G(adline\(\)).37 E F0 1.895
+(starts in insert)4.395 F 3.969(mode. In)144 528 R -.15(ove)3.969 G
+1.469(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E
+F0 1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F
+.957(pushing the te)144 540 R .957(xt to the right.)-.15 F .958
+(Characters bound to)5.957 F F1(backward\255delete\255char)3.458 E F0
+.958(replace the character)3.458 F(before point with a space.)144 552 Q
+(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87
+568.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 580.8 Q F0
+(Kill the te)144 592.8 Q(xt from point to the end of the line.)-.15 E F1
+(backward\255kill\255line \(C\255x Rubout\))108 604.8 Q F0(Kill backw)
+144 616.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
+(unix\255line\255discard \(C\255u\))108 628.8 Q F0(Kill backw)144 640.8
+Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E
+(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)
+-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 652.8 Q F0
+(Kill all characters on the current line, no matter where point is.)144
+664.8 Q F1(kill\255w)108 676.8 Q(ord \(M\255d\))-.1 E F0 1.308
+(Kill from point the end of the current w)144 688.8 R 1.308
+(ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.307
+(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 700.8 S
+(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G
+(rward\255w).25 E(ord)-.1 E F0(.)A(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(7)195.95 E EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(backward\255kill\255w)108 84 Q(ord \(M\255Rubout\))-.1
+E F0(Kill the w)144 96 Q(ord behind point.)-.1 E -.8(Wo)5 G
+(rd boundaries are the same as those used by).8 E F1(backward\255w)2.5 E
+(ord)-.1 E F0(.)A F1(unix\255w)108 108 Q(ord\255rubout \(C\255w\))-.1 E
+F0 .364(Kill the w)144 120 R .364
+(ord behind point, using white space as a w)-.1 F .365(ord boundary)-.1
+F 5.365(.T)-.65 G .365(he killed te)-5.365 F .365(xt is sa)-.15 F -.15
+(ve)-.2 G 2.865(do).15 G 2.865(nt)-2.865 G(he)-2.865 E(kill-ring.)144
+132 Q F1(delete\255horizontal\255space \(M\255\\\))108 144 Q F0
+(Delete all spaces and tabs around point.)144 156 Q F1(kill\255r)108 168
+Q(egion)-.18 E F0 1.13(Kill the te)144 180 R 1.13
+(xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0
+(\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F
+1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144
+192 S(gion)-.03 E F0(.)A F1(copy\255r)108 204 Q(egion\255as\255kill)-.18
+E F0(Cop)144 216 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E
+(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1
+(copy\255backward\255w)108 228 Q(ord)-.1 E F0(Cop)144 240 Q 4.8(yt)-.1 G
+2.3(he w)-4.8 F 2.3(ord before point to the kill b)-.1 F(uf)-.2 E(fer)
+-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.301
+(ord boundaries are the same as)-.1 F F1(back-)4.801 E(ward\255w)144 252
+Q(ord)-.1 E F0(.)A F1(copy\255f)108 264 Q(orward\255w)-.25 E(ord)-.1 E
+F0(Cop)144 276 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1
+F 2.008(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.007(.T)
+-.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F1
+-.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 288 Q(ord)-.1 E F0(.)A F1
+(yank \(C\255y\))108 300 Q F0 -1(Ya)144 312 S
+(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25
+E F1(yank\255pop \(M\255y\))108 324 Q F0
+(Rotate the kill ring, and yank the ne)144 336 Q 2.5(wt)-.25 G 2.5
+(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E
+F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 352.8 Q
+(guments)-.1 E(digit\255ar)108 364.8 Q
+(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .641
+(Add this digit to the ar)144 376.8 R .641
+(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18
+(rg)-3.141 G 3.142(ument. M\255\255).18 F .642(starts a ne)3.142 F(g-)
+-.15 E(ati)144 388.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1
+(uni)108 400.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .779
+(This is another w)144 412.8 R .779(ay to specify an ar)-.1 F 3.279
+(gument. If)-.18 F .779(this command is follo)3.279 F .778
+(wed by one or more digits,)-.25 F 1.376
+(optionally with a leading minus sign, those digits de\214ne the ar)144
+424.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
+436.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni)
+3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17
+(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other)
+-.2 F(-)-.2 E .898(wise ignored.)144 448.8 R .898
+(As a special case, if this command is immediately follo)5.898 F .898
+(wed by a character that is)-.25 F .243
+(neither a digit or minus sign, the ar)144 460.8 R .243
+(gument count for the ne)-.18 F .243(xt command is multiplied by four)
+-.15 F 5.242(.T)-.55 G(he)-5.242 E(ar)144 472.8 Q .378
+(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378
+(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F
+.378(gument count)-.18 F(four)144 484.8 Q 2.5(,as)-.4 G(econd time mak)
+-2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1
+(Completing)87 501.6 Q(complete \(T)108 513.6 Q(AB\))-.9 E F0 1.909
+(Attempt to perform completion on the te)144 525.6 R 1.908
+(xt before point.)-.15 F 1.908(The actual completion performed is)6.908
+F(application-speci\214c.)144 537.6 Q F1(Bash)5.517 E F0 3.017(,f)C .518
+(or instance, attempts completion treating the te)-3.017 F .518
+(xt as a v)-.15 F .518(ariable \(if the)-.25 F(te)144 549.6 Q .657
+(xt be)-.15 F .657(gins with)-.15 F F1($)3.156 E F0 .656
+(\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1
+(~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656
+(gins with)-.15 F F1(@)3.156 E F0 .656(\), or)B .929
+(command \(including aliases and functions\) in turn.)144 561.6 R .93
+(If none of these produces a match, \214lename)5.929 F 1.274
+(completion is attempted.)144 573.6 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773
+(nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273
+(ws completion of program functions and)-.25 F -.25(va)144 585.6 S(riab\
+les, and only attempts \214lename completion under certain circumstance\
+s.).25 E F1(possible\255completions \(M\255?\))108 597.6 Q F0
+(List the possible completions of the te)144 609.6 Q(xt before point.)
+-.15 E F1(insert\255completions \(M\255*\))108 621.6 Q F0 .783
+(Insert all completions of the te)144 633.6 R .783
+(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H
+.783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144
+645.6 Q F0(.)A F1(menu\255complete)108 657.6 Q F0 .929(Similar to)144
+669.6 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629
+F .929(ord to be completed with a single match from the list of)-.1 F
+1.193(possible completions.)144 681.6 R 1.193(Repeated e)6.193 F -.15
+(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194
+(steps through the list of possible)3.694 F .829
+(completions, inserting each match in turn.)144 693.6 R .828
+(At the end of the list of completions, the bell is rung)5.828 F .965
+(\(subject to the setting of)144 705.6 R F1 .965
+(0and the original text is r)3.465 F(estor)-.18 E 3.465(ed. An)-.18 F
+(ar)3.465 E .966(gument of)-.1 F F2(n)3.466 E F1(mo)3.466 E -.1(ve)-.1 G
+(s).1 E F2(n)3.466 E F1(posi-)3.466 E 1.249(tions f)144 717.6 R 1.249
+(orward in the list of matches; a negati)-.25 F 1.449 -.1(ve a)-.1 H -.1
+(rg).1 G 1.248(ument may be used to mo).1 F 1.448 -.1(ve b)-.1 H
+(ackward).1 E(thr)144 729.6 Q(ough the list.)-.18 E
+(This command is intended to be bound to T)5 E(AB, b)-.9 E
+(ut is unbound by default.)-.2 E F0(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(8)195.95 E EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(delete\255char\255or\255list)108 84 Q F0 .373
+(Deletes the character under the cursor if not at the be)144 96 R .374
+(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char)2.874 E
+F0(\).)A(If at the end of the line, beha)144 108 Q -.15(ve)-.2 G 2.5(si)
+.15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A F1 -.25
+(Ke)87 124.8 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)108
+136.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 148.8 Q
+(gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15
+(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 160.8 Q 2.5(o\()
+-.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 172.8 Q
+(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G
+(board macro and store the de\214nition.).15 E F1
+(call\255last\255kbd\255macr)108 184.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5
+E F0(Re-e)144 196.8 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1
+G .999(board macro de\214ned, by making the characters in the macro app\
+ear as if).15 F(typed at the k)144 208.8 Q -.15(ey)-.1 G(board.).15 E F1
+(Miscellaneous)87 225.6 Q -.18(re)108 237.6 S<ad72>.18 E
+(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776
+(Read in the contents of the)144 249.6 R/F2 10/Times-Italic@0 SF(inputr)
+4.276 E(c)-.37 E F0 1.777(\214le, and incorporate an)4.276 F 4.277(yb)
+-.15 G 1.777(indings or v)-4.277 F 1.777(ariable assignments)-.25 F
+(found there.)144 261.6 Q F1(abort \(C\255g\))108 273.6 Q F0 3.249
+(Abort the current editing command and ring the terminal')144 285.6 R
+5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1
+(bell\255style)144 297.6 Q F0(\).)A F1(do\255upper)108 309.6 Q
+(case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.)
+C(..\))-2.5 E F0 1.755(If the meta\214ed character)144 321.6 R F2(x)
+4.255 E F0 1.755(is lo)4.255 F 1.756
+(wercase, run the command that is bound to the corresponding)-.25 F
+(uppercase character)144 333.6 Q(.)-.55 E F1(pr)108 345.6 Q
+(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 357.6 Q
+(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0
+(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1
+(undo \(C\255_, C\255x C\255u\))108 369.6 Q F0
+(Incremental undo, separately remembered for each line.)144 381.6 Q F1
+-2.29 -.18(re v)108 393.6 T(ert\255line \(M\255r\)).08 E F0 1.095
+(Undo all changes made to this line.)144 405.6 R 1.095(This is lik)6.095
+F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E
+F0 1.095(command enough times to)3.595 F
+(return the line to its initial state.)144 417.6 Q F1
+(tilde\255expand \(M\255&\))108 429.6 Q F0(Perform tilde e)144 441.6 Q
+(xpansion on the current w)-.15 E(ord.)-.1 E F1
+(set\255mark \(C\255@, M\255<space>\))108 453.6 Q F0
+(Set the mark to the point.)144 465.6 Q(If a numeric ar)5 E
+(gument is supplied, the mark is set to that position.)-.18 E F1
+(exchange\255point\255and\255mark \(C\255x C\255x\))108 477.6 Q F0(Sw)
+144 489.6 Q .282(ap the point with the mark.)-.1 F .283
+(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G
+2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa)
+144 501.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1
+(character\255sear)108 513.6 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144
+525.6 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G
+3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535
+(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05
+(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre)
+144 537.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 549.6 Q
+(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 561.6 S 1.043
+(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G
+3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044
+(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E
+-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G
+(count searches for subsequent occurrences.)144 573.6 Q F1
+(insert\255comment \(M\255#\))108 585.6 Q F0 -.4(Wi)144 597.6 S .481
+(thout a numeric ar).4 F .481(gument, the v)-.18 F .481
+(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 -.25(va)
+2.981 G .48(riable is inserted at the).25 F(be)144 609.6 Q .097
+(ginning of the current line.)-.15 F .098(If a numeric ar)5.097 F .098
+(gument is supplied, this command acts as a toggle:)-.18 F(if)5.098 E
+.322(the characters at the be)144 621.6 R .321
+(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1
+(comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is)
+-.25 F 1.013(inserted, otherwise the characters in)144 633.6 R F1
+(comment-begin)3.514 E F0 1.014(are deleted from the be)3.514 F 1.014
+(ginning of the line.)-.15 F 1.469
+(In either case, the line is accepted as if a ne)144 645.6 R 1.468
+(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F
+1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 657.6 Q F0(mak)
+2.982 E .483(es the current line a shell comment.)-.1 F .483
+(If a numeric ar)5.483 F .483(gument causes the comment)-.18 F
+(character to be remo)144 669.6 Q -.15(ve)-.15 G(d, the line will be e)
+.15 E -.15(xe)-.15 G(cuted by the shell.).15 E F1(dump\255functions)108
+681.6 Q F0 .627(Print all of the functions and their k)144 693.6 R .927
+-.15(ey b)-.1 H .626(indings to the readline output stream.).15 F .626
+(If a numeric ar)5.626 F(gu-)-.18 E
+(ment is supplied, the output is formatted in such a w)144 705.6 Q
+(ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0
+(\214le.)2.5 E(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(9)
+195.95 E EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(dump\255v)108 84 Q(ariables)-.1 E F0 .283
+(Print all of the settable v)144 96 R .283(ariables and their v)-.25 F
+.283(alues to the readline output stream.)-.25 F .283(If a numeric ar)
+5.283 F(gu-)-.18 E
+(ment is supplied, the output is formatted in such a w)144 108 Q
+(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr)
+2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 120 Q(os)-.18 E F0
+.756(Print all of the readline k)144 132 R 1.056 -.15(ey s)-.1 H .756
+(equences bound to macros and the strings the).15 F 3.256(yo)-.15 G
+3.256(uput. If)-3.256 F 3.255(an)3.255 G(umeric)-3.255 E(ar)144 144 Q
+.528(gument is supplied, the output is formatted in such a w)-.18 F .528
+(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0
+(\214le.)144 156 Q F1(emacs\255editing\255mode \(C\255e\))108 168 Q F0
+(When in)144 180 Q F1(vi)2.5 E F0(command mode, this causes a switch to)
+2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1
+(vi\255editing\255mode \(M\255C\255j\))108 192 Q F0(When in)144 204 Q F1
+(emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E
+F0(editing mode.)2.5 E/F3 10.95/Times-Bold@0 SF(DEF)72 220.8 Q -.548(AU)
+-.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .065(The follo)
+108 232.8 R .065(wing is a list of the def)-.25 F .065
+(ault emacs and vi bindings.)-.1 F .064
+(Characters with the eighth bit set are written as)5.064 F .615
+(M\255<character>, and are referred to as)108 244.8 R F2(meta\214ed)
+3.115 E F0 3.115(characters. The)3.115 F .616
+(printable ASCII characters not mentioned)3.116 F 1.116
+(in the list of emacs standard bindings are bound to the)108 256.8 R F1
+(self\255insert)3.615 E F0 1.115(function, which just inserts the gi)
+3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108
+268.8 R .945(In vi insertion mode, all characters not speci\214cally me\
+ntioned are bound to)5.945 F F1(self\255insert)108 280.8 Q F0 5.359(.C)C
+.359(haracters assigned to signal generation by)-5.359 F F2(stty)2.859 E
+F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s)
+.15 H .358(uch as C-Z or C-C,).4 F .187(retain that function.)108 292.8
+R .187(Upper and lo)5.187 F .188(wer case meta\214ed characters are bou\
+nd to the same function in the emacs)-.25 F .305(mode meta k)108 304.8 R
+-.15(ey)-.1 G 2.805(map. The).15 F .305(remaining characters are unboun\
+d, which causes readline to ring the bell \(subject)2.805 F
+(to the setting of the)108 316.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5
+G(riable\).).25 E F1(Emacs Mode)87 333.6 Q F0(Emacs Standard bindings)
+151.2 345.6 Q 2.5("C-@" set-mark)151.2 369.6 R 2.5("C-A" be)151.2 381.6
+R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 393.6 R(ard-char)-.1 E
+2.5("C-D" delete-char)151.2 405.6 R 2.5("C-E" end-of-line)151.2 417.6 R
+2.5("C-F" forw)151.2 429.6 R(ard-char)-.1 E 2.5("C-G" abort)151.2 441.6
+R 2.5("C-H" backw)151.2 453.6 R(ard-delete-char)-.1 E 2.5
+("C-I" complete)151.2 465.6 R 2.5("C-J" accept-line)151.2 477.6 R 2.5
+("C-K" kill-line)151.2 489.6 R 2.5("C-L" clear)151.2 501.6 R(-screen)-.2
+E 2.5("C-M" accept-line)151.2 513.6 R 2.5("C-N" ne)151.2 525.6 R
+(xt-history)-.15 E 2.5("C-P" pre)151.2 537.6 R(vious-history)-.25 E 2.5
+("C-Q" quoted-insert)151.2 549.6 R 2.5("C-R" re)151.2 561.6 R -.15(ve)
+-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 573.6 R
+(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 585.6 R 2.5
+("C-U" unix-line-discard)151.2 597.6 R 2.5("C-V" quoted-insert)151.2
+609.6 R 2.5("C-W" unix-w)151.2 621.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)
+151.2 633.6 R 2.5("C-]" character)151.2 645.6 R(-search)-.2 E 2.5
+("C-_" undo)151.2 657.6 R 3.333("")151.2 669.6 S(to "/")-.833 E
+(self-insert)5 E 2.5("0" to)151.2 681.6 R 2.5("9" self-insert)2.5 F 2.5
+(":" to)151.2 693.6 R 2.5("~" self-insert)2.5 F 2.5("C-?" backw)151.2
+705.6 R(ard-delete-char)-.1 E(Emacs Meta bindings)151.2 722.4 Q
+(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(10)190.95 E EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
+("M-C-G" abort)151.2 84 R 2.5("M-C-H" backw)151.2 96 R(ard-kill-w)-.1 E
+(ord)-.1 E 2.5("M-C-I" tab-insert)151.2 108 R 2.5
+("M-C-J" vi-editing-mode)151.2 120 R 2.5("M-C-M" vi-editing-mode)151.2
+132 R 2.5("M-C-R" re)151.2 144 R -.15(ve)-.25 G(rt-line).15 E 2.5
+("M-C-Y" yank-nth-ar)151.2 156 R(g)-.18 E 2.5("M-C-[" complete)151.2 168
+R 2.5("M-C-]" character)151.2 180 R(-search-backw)-.2 E(ard)-.1 E 2.5
+("M-space" set-mark)151.2 192 R 2.5("M-#" insert-comment)151.2 204 R 2.5
+("M-&" tilde-e)151.2 216 R(xpand)-.15 E 2.5("M-*" insert-completions)
+151.2 228 R 2.5("M--" digit-ar)151.2 240 R(gument)-.18 E 2.5
+("M-." yank-last-ar)151.2 252 R(g)-.18 E 2.5("M-0" digit-ar)151.2 264 R
+(gument)-.18 E 2.5("M-1" digit-ar)151.2 276 R(gument)-.18 E 2.5
+("M-2" digit-ar)151.2 288 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 300 R
+(gument)-.18 E 2.5("M-4" digit-ar)151.2 312 R(gument)-.18 E 2.5
+("M-5" digit-ar)151.2 324 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 336 R
+(gument)-.18 E 2.5("M-7" digit-ar)151.2 348 R(gument)-.18 E 2.5
+("M-8" digit-ar)151.2 360 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 372 R
+(gument)-.18 E 2.5("M-<" be)151.2 384 R(ginning-of-history)-.15 E 2.5
+("M-=" possible-completions)151.2 396 R 2.5("M->" end-of-history)151.2
+408 R 2.5("M-?" possible-completions)151.2 420 R 2.5("M-B" backw)151.2
+432 R(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 444 R(ord)-.1 E
+2.5("M-D" kill-w)151.2 456 R(ord)-.1 E 2.5("M-F" forw)151.2 468 R(ard-w)
+-.1 E(ord)-.1 E 2.5("M-L" do)151.2 480 R(wncase-w)-.25 E(ord)-.1 E 2.5
+("M-N" non-incremental-forw)151.2 492 R(ard-search-history)-.1 E 2.5
+("M-P" non-incremental-re)151.2 504 R -.15(ve)-.25 G(rse-search-history)
+.15 E 2.5("M-R" re)151.2 516 R -.15(ve)-.25 G(rt-line).15 E 2.5
+("M-T" transpose-w)151.2 528 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 540 R
+(ord)-.1 E 2.5("M-Y" yank-pop)151.2 552 R 2.5
+("M-\\" delete-horizontal-space)151.2 564 R 2.5("M-~" tilde-e)151.2 576
+R(xpand)-.15 E 2.5("M-C-?" backw)151.2 588 R(ard-kill-w)-.1 E(ord)-.1 E
+2.5("M-_" yank-last-ar)151.2 600 R(g)-.18 E(Emacs Control-X bindings)
+151.2 616.8 Q 2.5("C-XC-G" abort)151.2 640.8 R 2.5
+("C-XC-R" re-read-init-\214le)151.2 652.8 R 2.5("C-XC-U" undo)151.2
+664.8 R 2.5("C-XC-X" e)151.2 676.8 R(xchange-point-and-mark)-.15 E 2.5
+("C-X\(" start-kbd-macro)151.2 688.8 R 2.5("C-X\)" end-kbd-macro)151.2
+700.8 R 2.5("C-XE" call-last-kbd-macro)151.2 712.8 R 2.5("C-XC-?" backw)
+151.2 724.8 R(ard-kill-line)-.1 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(11)190.95 E EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
+/Times-Bold@0 SF(VI Mode bindings)87 84 Q F0(VI Insert Mode functions)
+151.2 96 Q 2.5("C-D" vi-eof-maybe)151.2 120 R 2.5("C-H" backw)151.2 132
+R(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 144 R 2.5
+("C-J" accept-line)151.2 156 R 2.5("C-M" accept-line)151.2 168 R 2.5
+("C-R" re)151.2 180 R -.15(ve)-.25 G(rse-search-history).15 E 2.5
+("C-S" forw)151.2 192 R(ard-search-history)-.1 E 2.5
+("C-T" transpose-chars)151.2 204 R 2.5("C-U" unix-line-discard)151.2 216
+R 2.5("C-V" quoted-insert)151.2 228 R 2.5("C-W" unix-w)151.2 240 R
+(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 252 R 2.5("C-[" vi-mo)151.2 264 R
+-.15(ve)-.15 G(ment-mode).15 E 2.5("C-_" undo)151.2 276 R 3.333("")151.2
+288 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw)151.2 300 R
+(ard-delete-char)-.1 E(VI Command Mode functions)151.2 316.8 Q 2.5
+("C-D" vi-eof-maybe)151.2 340.8 R 2.5("C-E" emacs-editing-mode)151.2
+352.8 R 2.5("C-G" abort)151.2 364.8 R 2.5("C-H" backw)151.2 376.8 R
+(ard-char)-.1 E 2.5("C-J" accept-line)151.2 388.8 R 2.5("C-K" kill-line)
+151.2 400.8 R 2.5("C-L" clear)151.2 412.8 R(-screen)-.2 E 2.5
+("C-M" accept-line)151.2 424.8 R 2.5("C-N" ne)151.2 436.8 R(xt-history)
+-.15 E 2.5("C-P" pre)151.2 448.8 R(vious-history)-.25 E 2.5
+("C-Q" quoted-insert)151.2 460.8 R 2.5("C-R" re)151.2 472.8 R -.15(ve)
+-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 484.8 R
+(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 496.8 R 2.5
+("C-U" unix-line-discard)151.2 508.8 R 2.5("C-V" quoted-insert)151.2
+520.8 R 2.5("C-W" unix-w)151.2 532.8 R(ord-rubout)-.1 E 2.5("C-Y" yank)
+151.2 544.8 R 2.5("C-_" vi-undo)151.2 556.8 R -4.166 3.333("" f)151.2
+568.8 T(orw)-3.333 E(ard-char)-.1 E 2.5("#" insert-comment)151.2 580.8 R
+2.5("$" end-of-line)151.2 592.8 R 2.5("%" vi-match)151.2 604.8 R 2.5
+("&" vi-tilde-e)151.2 616.8 R(xpand)-.15 E 2.5("*" vi-complete)151.2
+628.8 R 2.5("+" ne)151.2 640.8 R(xt-history)-.15 E 2.5("," vi-char)151.2
+652.8 R(-search)-.2 E 2.5("-" pre)151.2 664.8 R(vious-history)-.25 E 2.5
+("." vi-redo)151.2 676.8 R 2.5("/" vi-search)151.2 688.8 R 2.5("0" be)
+151.2 700.8 R(ginning-of-line)-.15 E("1" to "9")151.2 712.8 Q(vi-ar)5 E
+(g-digit)-.18 E 2.5(";" vi-char)151.2 724.8 R(-search)-.2 E
+(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(12)190.95 E EP
+%%Page: 13 13
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
+("=" vi-complete)151.2 84 R 2.5("?" vi-search)151.2 96 R 2.5
+("A" vi-append-eol)151.2 108 R 2.5("B" vi-pre)151.2 120 R(v-w)-.25 E
+(ord)-.1 E 2.5("C" vi-change-to)151.2 132 R 2.5("D" vi-delete-to)151.2
+144 R 2.5("E" vi-end-w)151.2 156 R(ord)-.1 E 2.5("F" vi-char)151.2 168 R
+(-search)-.2 E 2.5("G" vi-fetch-history)151.2 180 R 2.5
+("I" vi-insert-be)151.2 192 R(g)-.15 E 2.5("N" vi-search-ag)151.2 204 R
+(ain)-.05 E 2.5("P" vi-put)151.2 216 R 2.5("R" vi-replace)151.2 228 R
+2.5("S" vi-subst)151.2 240 R 2.5("T" vi-char)151.2 252 R(-search)-.2 E
+2.5("U" re)151.2 264 R -.15(ve)-.25 G(rt-line).15 E 2.5("W" vi-ne)151.2
+276 R(xt-w)-.15 E(ord)-.1 E 2.5("X" backw)151.2 288 R(ard-delete-char)
+-.1 E 2.5("Y" vi-yank-to)151.2 300 R 2.5("\\" vi-complete)151.2 312 R
+2.5("^" vi-\214rst-print)151.2 324 R 2.5("_" vi-yank-ar)151.2 336 R(g)
+-.18 E 2.5("`" vi-goto-mark)151.2 348 R 2.5("a" vi-append-mode)151.2 360
+R 2.5("b" vi-pre)151.2 372 R(v-w)-.25 E(ord)-.1 E 2.5("c" vi-change-to)
+151.2 384 R 2.5("d" vi-delete-to)151.2 396 R 2.5("e" vi-end-w)151.2 408
+R(ord)-.1 E 2.5("f" vi-char)151.2 420 R(-search)-.2 E 2.5("h" backw)
+151.2 432 R(ard-char)-.1 E 2.5("i" vi-insertion-mode)151.2 444 R 2.5
+("j" ne)151.2 456 R(xt-history)-.15 E 2.5("k" pre)151.2 468 R(v-history)
+-.25 E 2.5("l" forw)151.2 480 R(ard-char)-.1 E 2.5("m" vi-set-mark)151.2
+492 R 2.5("n" vi-search-ag)151.2 504 R(ain)-.05 E 2.5("p" vi-put)151.2
+516 R 2.5("r" vi-change-char)151.2 528 R 2.5("s" vi-subst)151.2 540 R
+2.5("t" vi-char)151.2 552 R(-search)-.2 E 2.5("u" vi-undo)151.2 564 R
+2.5("w" vi-ne)151.2 576 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2
+588 R 2.5("y" vi-yank-to)151.2 600 R 2.5("|" vi-column)151.2 612 R 2.5
+("~" vi-change-case)151.2 624 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72
+640.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 652.8 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 664.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
+(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 676.8 Q F0(\(1\))A F1
+(FILES)72 693.6 Q F2(~/.inputr)109.666 705.6 Q(c)-.37 E F0(Indi)144
+717.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E
+F0(initialization \214le)2.5 E(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(13)190.95 E EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1
+10.95/Times-Bold@0 SF -.548(AU)72 84 S(THORS).548 E F0(Brian F)108 96 Q
+(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 108
+Q(g)-.18 E(Chet Rame)108 124.8 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@ins.CWR)108 136.8 Q(U.Edu)-.4 E F1 -.11(BU)72 153.6 S 2.738(GR).11
+G(EPOR)-2.738 E(TS)-.438 E F0 .69(If you \214nd a b)108 165.6 R .69
+(ug in)-.2 F/F2 10/Times-Bold@0 SF -.18(re)3.19 G(adline,).18 E F0 .69
+(you should report it.)3.19 F .691(But \214rst, you should mak)5.69 F
+3.191(es)-.1 G .691(ure that it really is a b)-3.191 F(ug,)-.2 E
+(and that it appears in the latest v)108 177.6 Q(ersion of the)-.15 E F2
+-.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.)
+.15 E .705(Once you ha)108 194.4 R 1.005 -.15(ve d)-.2 H .705
+(etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b)
+-.15 F .704(ug report to)-.2 F/F3 10/Times-Italic@0 SF -.2(bu)3.204 G
+(g\255r).2 E(eadline)-.37 E F0(@)A F3(gnu.or)A(g)-.37 E F0 5.704(.I)C
+3.204(fy)-5.704 G(ou)-3.204 E(ha)108 206.4 Q 1.809 -.15(ve a \214)-.2 H
+1.509(x, you are welcome to mail that as well!).15 F 1.51
+(Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F
+(mailed to)108 218.4 Q F3 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F3
+(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2
+(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 235.2 Q
+(ug reports concerning this manual page should be directed to)-.2 E F3
+-.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E F1
+-.11(BU)72 252 S(GS).11 E F0(It')108 264 Q 2.5(st)-.55 G
+(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 4.3)72 768 Q
+(2002 January 22)126.24 E(14)190.95 E EP
+%%Trailer
+end
+%%EOF
diff --git a/readline/doc/rlman.texinfo b/readline/doc/rlman.texinfo
index 759f0eb..1ffebad 100644
--- a/readline/doc/rlman.texinfo
+++ b/readline/doc/rlman.texinfo
@@ -18,7 +18,7 @@
 in the consistency of user interface across discrete programs that need
 to provide a command line interface.
 
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -73,7 +73,7 @@
 by the Free Software Foundation.
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1988-1999 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2002 Free Software Foundation, Inc.
 @end titlepage
 
 @ifinfo
diff --git a/readline/doc/rltech.texinfo b/readline/doc/rltech.texinfo
index 51c340a..037e824 100644
--- a/readline/doc/rltech.texinfo
+++ b/readline/doc/rltech.texinfo
@@ -8,7 +8,7 @@
 in the consitency of user interface across discrete programs that need
 to provide a command line interface.
 
-Copyright (C) 1988, 1994, 1996, 1998, 1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -35,9 +35,9 @@
 @node Programming with GNU Readline
 @chapter Programming with GNU Readline
 
-This chapter describes the interface between the GNU Readline Library and
+This chapter describes the interface between the @sc{gnu} Readline Library and
 other programs.  If you are a programmer, and you wish to include the
-features found in GNU Readline
+features found in @sc{gnu} Readline
 such as completion, line editing, and interactive history manipulation
 in your own programs, this section is for you.
 
@@ -61,18 +61,20 @@
 @code{ftp}, and @code{sh}.  For such programs, the default behaviour of
 Readline is sufficient.  This section describes how to use Readline in
 the simplest way possible, perhaps to replace calls in your code to
-@code{gets()} or @code{fgets ()}.
+@code{gets()} or @code{fgets()}.
 
 @findex readline
 @cindex readline, function
-The function @code{readline ()} prints a prompt and then reads and returns
-a single line of text from the user.  The line @code{readline}
-returns is allocated with @code{malloc ()}; you should @code{free ()}
-the line when you are done with it.  The declaration for @code{readline}
-in ANSI C is
+
+The function @code{readline()} prints a prompt @var{prompt}
+and then reads and returns a single line of text from the user.
+If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed.
+The line @code{readline} returns is allocated with @code{malloc()};
+the caller should @code{free()} the line when it has finished with it.
+The declaration for @code{readline} in ANSI C is
 
 @example
-@code{char *readline (char *@var{prompt});}
+@code{char *readline (const char *@var{prompt});}
 @end example
 
 @noindent
@@ -90,7 +92,7 @@
 Otherwise, the line is ended just as if a newline had been typed.
 
 If you want the user to be able to get at the line later, (with
-@key{C-p} for example), you must call @code{add_history ()} to save the
+@key{C-p} for example), you must call @code{add_history()} to save the
 line away in a @dfn{history} list of such lines.
 
 @example
@@ -102,19 +104,20 @@
 
 It is preferable to avoid saving empty lines on the history list, since
 users rarely have a burning need to reuse a blank line.  Here is
-a function which usefully replaces the standard @code{gets ()} library
+a function which usefully replaces the standard @code{gets()} library
 function, and has the advantage of no static buffer to overflow:
 
 @example
 /* A static variable for holding the line. */
 static char *line_read = (char *)NULL;
 
-/* Read a string, and return a pointer to it.  Returns NULL on EOF. */
+/* Read a string, and return a pointer to it.
+   Returns NULL on EOF. */
 char *
 rl_gets ()
 @{
-  /* If the buffer has already been allocated, return the memory
-     to the free pool. */
+  /* If the buffer has already been allocated,
+     return the memory to the free pool. */
   if (line_read)
     @{
       free (line_read);
@@ -124,7 +127,8 @@
   /* Get a line from the user. */
   line_read = readline ("");
 
-  /* If the line has any text in it, save it on the history. */
+  /* If the line has any text in it,
+     save it on the history. */
   if (line_read && *line_read)
     add_history (line_read);
 
@@ -135,17 +139,17 @@
 This function gives the user the default behaviour of @key{TAB}
 completion: completion on file names.  If you do not want Readline to
 complete on filenames, you can change the binding of the @key{TAB} key
-with @code{rl_bind_key ()}.
+with @code{rl_bind_key()}.
 
 @example
-@code{int rl_bind_key (int @var{key}, int (*@var{function})());}
+@code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});}
 @end example
 
-@code{rl_bind_key ()} takes two arguments: @var{key} is the character that
+@code{rl_bind_key()} takes two arguments: @var{key} is the character that
 you want to bind, and @var{function} is the address of the function to
-call when @var{key} is pressed.  Binding @key{TAB} to @code{rl_insert ()}
+call when @var{key} is pressed.  Binding @key{TAB} to @code{rl_insert()}
 makes @key{TAB} insert itself.
-@code{rl_bind_key ()} returns non-zero if @var{key} is not a valid
+@code{rl_bind_key()} returns non-zero if @var{key} is not a valid
 ASCII character code (between 0 and 255).
 
 Thus, to disable the default @key{TAB} behavior, the following suffices:
@@ -154,7 +158,7 @@
 @end example
 
 This code should be executed once at the start of your program; you
-might write a function called @code{initialize_readline ()} which
+might write a function called @code{initialize_readline()} which
 performs this and other desired initializations, such as installing
 custom completers (@pxref{Custom Completers}).
 
@@ -174,45 +178,82 @@
 in @code{readline.h} use the @code{stdio} library, the file
 @code{<stdio.h>} should be included before @code{readline.h}.
 
+@code{readline.h} defines a C preprocessor variable that should
+be treated as an integer, @code{RL_READLINE_VERSION}, which may
+be used to conditionally compile application code depending on
+the installed Readline version.  The value is a hexadecimal
+encoding of the major and minor version numbers of the library,
+of the form 0x@var{MMmm}.  @var{MM} is the two-digit major
+version number; @var{mm} is the two-digit minor version number. 
+For Readline 4.2, for example, the value of
+@code{RL_READLINE_VERSION} would be @code{0x0402}. 
+
 @menu
-* The Function Type::	C declarations to make code readable.
+* Readline Typedefs::	C declarations to make code readable.
 * Function Writing::	Variables and calling conventions.
 @end menu
 
-@node The Function Type
-@subsection The Function Type
+@node Readline Typedefs
+@subsection Readline Typedefs
 
-For readabilty, we declare a new type of object, called
-@dfn{Function}.  A @code{Function} is a C function which
-returns an @code{int}.  The type declaration for @code{Function} is:
+For readabilty, we declare a number of new object types, all pointers
+to functions.
+
+The reason for declaring these new types is to make it easier to write
+code describing pointers to C functions with appropriately prototyped
+arguments and return values.
+
+For instance, say we want to declare a variable @var{func} as a pointer
+to a function which takes two @code{int} arguments and returns an
+@code{int} (this is the type of all of the Readline bindable functions).
+Instead of the classic C declaration
+
+@code{int (*func)();}
 
 @noindent
-@code{typedef int Function ();}
+or the ANSI-C style declaration
 
-The reason for declaring this new type is to make it easier to write
-code describing pointers to C functions.  Let us say we had a variable
-called @var{func} which was a pointer to a function.  Instead of the
-classic C declaration
-
-@code{int (*)()func;}
+@code{int (*func)(int, int);}
 
 @noindent
 we may write
 
-@code{Function *func;}
+@code{rl_command_func_t *func;}
 
-@noindent
-Similarly, there are
+The full list of function pointer types available is
 
-@example
-typedef void VFunction ();
-typedef char *CPFunction (); @r{and}
-typedef char **CPPFunction ();
-@end example
+@table @code
+@item typedef int rl_command_func_t (int, int);
 
-@noindent
-for functions returning no value, @code{pointer to char}, and
-@code{pointer to pointer to char}, respectively.
+@item typedef char *rl_compentry_func_t (const char *, int);
+
+@item typedef char **rl_completion_func_t (const char *, int, int);
+
+@item typedef char *rl_quote_func_t (char *, int, char *);
+
+@item typedef char *rl_dequote_func_t (char *, int);
+
+@item typedef int rl_compignore_func_t (char **);
+
+@item typedef void rl_compdisp_func_t (char **, int, int);
+
+@item typedef int rl_hook_func_t (void);
+
+@item typedef int rl_getc_func_t (FILE *);
+
+@item typedef int rl_linebuf_func_t (char *, int);
+
+@item typedef int rl_intfunc_t (int);
+@item #define rl_ivoidfunc_t rl_hook_func_t
+@item typedef int rl_icpfunc_t (char *);
+@item typedef int rl_icppfunc_t (char **);
+
+@item typedef void rl_voidfunc_t (void);
+@item typedef void rl_vintfunc_t (int);
+@item typedef void rl_vcpfunc_t (char *);
+@item typedef void rl_vcppfunc_t (char **);
+
+@end table
 
 @node Function Writing
 @subsection Writing a New Function
@@ -224,7 +265,7 @@
 The calling sequence for a command @code{foo} looks like
 
 @example
-@code{foo (int count, int key)}
+@code{int foo (int count, int key)}
 @end example
 
 @noindent
@@ -241,6 +282,9 @@
 At the very least, it should be aware that it can be passed a
 negative argument.
 
+A command function should return 0 if its action completes successfully,
+and a non-zero value if some error occurs.
+
 @node Readline Variables
 @section Readline Variables
 
@@ -265,7 +309,7 @@
 @end deftypevar
 
 @deftypevar int rl_mark
-The mark (saved position) in the current line.  If set, the mark
+The @var{mark} (saved position) in the current line.  If set, the mark
 and point define a @emph{region}.
 @end deftypevar
 
@@ -274,11 +318,23 @@
 line immediately.
 @end deftypevar
 
+@deftypevar int rl_num_chars_to_read
+Setting this to a positive value before calling @code{readline()} causes
+Readline to return after accepting that many characters, rather
+than reading up to a character bound to @code{accept-line}.
+@end deftypevar
+
 @deftypevar int rl_pending_input
 Setting this to a value makes it the next keystroke read.  This is a
 way to stuff a single character into the input stream.
 @end deftypevar
 
+@deftypevar int rl_dispatching
+Set to a non-zero value if a function is being called from a key binding;
+zero otherwise.  Application functions can test this to discover whether
+they were called directly or by Readline's dispatching mechanism.
+@end deftypevar
+
 @deftypevar int rl_erase_empty_line
 Setting this to a non-zero value causes Readline to completely erase
 the current line, including any prompt, any time a newline is typed as
@@ -288,7 +344,9 @@
 
 @deftypevar {char *} rl_prompt
 The prompt Readline uses.  This is set from the argument to
-@code{readline ()}, and should not be assigned to directly.
+@code{readline()}, and should not be assigned to directly.
+The @code{rl_set_prompt()} function (@pxref{Redisplay}) may
+be used to modify the prompt string after calling @code{readline()}.
 @end deftypevar
 
 @deftypevar int rl_already_prompted
@@ -301,15 +359,30 @@
 never sets it.
 @end deftypevar
 
-@deftypevar {char *} rl_library_version
+@deftypevar {const char *} rl_library_version
 The version number of this revision of the library.
 @end deftypevar
 
-@deftypevar {char *} rl_terminal_name
-The terminal type, used for initialization.
+@deftypevar int rl_readline_version
+An integer encoding the current version of the library.  The encoding is
+of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version
+number, and @var{mm} is the two-digit minor version number.
+For example, for Readline-4.2, @code{rl_readline_version} would have the
+value 0x0402.
 @end deftypevar
 
-@deftypevar {char *} rl_readline_name
+@deftypevar {int} rl_gnu_readline_p
+Always set to 1, denoting that this is @sc{gnu} readline rather than some
+emulation.
+@end deftypevar
+
+@deftypevar {const char *} rl_terminal_name
+The terminal type, used for initialization.  If not set by the application,
+Readline sets this to the value of the @env{TERM} environment variable
+the first time it is called.
+@end deftypevar
+
+@deftypevar {const char *} rl_readline_name
 This variable is set to a unique name by each application using Readline.
 The value allows conditional parsing of the inputrc file
 (@pxref{Conditional Init Constructs}).
@@ -317,42 +390,68 @@
 
 @deftypevar {FILE *} rl_instream
 The stdio stream from which Readline reads input.
+If @code{NULL}, Readline defaults to @var{stdin}.
 @end deftypevar
 
 @deftypevar {FILE *} rl_outstream
 The stdio stream to which Readline performs output.
+If @code{NULL}, Readline defaults to @var{stdout}.
 @end deftypevar
 
-@deftypevar {Function *} rl_startup_hook
+@deftypevar {rl_command_func_t *} rl_last_func
+The address of the last command function Readline executed.  May be used to
+test whether or not a function is being executed twice in succession, for
+example.
+@end deftypevar
+
+@deftypevar {rl_hook_func_t *} rl_startup_hook
 If non-zero, this is the address of a function to call just
 before @code{readline} prints the first prompt.
 @end deftypevar
 
-@deftypevar {Function *} rl_pre_input_hook
+@deftypevar {rl_hook_func_t *} rl_pre_input_hook
 If non-zero, this is the address of a function to call after
 the first prompt has been printed and just before @code{readline}
 starts reading input characters.
 @end deftypevar
 
-@deftypevar {Function *} rl_event_hook
+@deftypevar {rl_hook_func_t *} rl_event_hook
 If non-zero, this is the address of a function to call periodically
-when readline is waiting for terminal input.
+when Readline is waiting for terminal input.
+By default, this will be called at most ten times a second if there
+is no keyboard input.
 @end deftypevar
 
-@deftypevar {Function *} rl_getc_function
-If non-zero, @code{readline} will call indirectly through this pointer
+@deftypevar {rl_getc_func_t *} rl_getc_function
+If non-zero, Readline will call indirectly through this pointer
 to get a character from the input stream.  By default, it is set to
-@code{rl_getc}, the default @code{readline} character input function
-(@pxref{Utility Functions}).
+@code{rl_getc}, the default Readline character input function
+(@pxref{Character Input}).
 @end deftypevar
 
-@deftypevar {VFunction *} rl_redisplay_function
-If non-zero, @code{readline} will call indirectly through this pointer
+@deftypevar {rl_voidfunc_t *} rl_redisplay_function
+If non-zero, Readline will call indirectly through this pointer
 to update the display with the current contents of the editing buffer.
-By default, it is set to @code{rl_redisplay}, the default @code{readline}
+By default, it is set to @code{rl_redisplay}, the default Readline
 redisplay function (@pxref{Redisplay}).
 @end deftypevar
 
+@deftypevar {rl_vintfunc_t *} rl_prep_term_function
+If non-zero, Readline will call indirectly through this pointer
+to initialize the terminal.  The function takes a single argument, an
+@code{int} flag that says whether or not to use eight-bit characters.
+By default, this is set to @code{rl_prep_terminal}
+(@pxref{Terminal Management}).
+@end deftypevar
+
+@deftypevar {rl_voidfunc_t *} rl_deprep_term_function
+If non-zero, Readline will call indirectly through this pointer
+to reset the terminal.  This function should undo the effects of
+@code{rl_prep_term_function}.
+By default, this is set to @code{rl_deprep_terminal}
+(@pxref{Terminal Management}).
+@end deftypevar
+
 @deftypevar {Keymap} rl_executing_keymap
 This variable is set to the keymap (@pxref{Keymaps}) in which the
 currently executing readline function was found.
@@ -363,6 +462,79 @@
 last key binding occurred.
 @end deftypevar 
 
+@deftypevar {char *} rl_executing_macro
+This variable is set to the text of any currently-executing macro.
+@end deftypevar
+
+@deftypevar {int} rl_readline_state
+A variable with bit values that encapsulate the current Readline state.
+A bit is set with the @code{RL_SETSTATE} macro, and unset with the
+@code{RL_UNSETSTATE} macro.  Use the @code{RL_ISSTATE} macro to test
+whether a particular state bit is set.  Current state bits include:
+
+@table @code
+@item RL_STATE_NONE
+Readline has not yet been called, nor has it begun to intialize.
+@item RL_STATE_INITIALIZING
+Readline is initializing its internal data structures.
+@item RL_STATE_INITIALIZED
+Readline has completed its initialization.
+@item RL_STATE_TERMPREPPED
+Readline has modified the terminal modes to do its own input and redisplay.
+@item RL_STATE_READCMD
+Readline is reading a command from the keyboard.
+@item RL_STATE_METANEXT
+Readline is reading more input after reading the meta-prefix character.
+@item RL_STATE_DISPATCHING
+Readline is dispatching to a command.
+@item RL_STATE_MOREINPUT
+Readline is reading more input while executing an editing command.
+@item RL_STATE_ISEARCH
+Readline is performing an incremental history search.
+@item RL_STATE_NSEARCH
+Readline is performing a non-incremental history search.
+@item RL_STATE_SEARCH
+Readline is searching backward or forward through the history for a string.
+@item RL_STATE_NUMERICARG
+Readline is reading a numeric argument.
+@item RL_STATE_MACROINPUT
+Readline is currently getting its input from a previously-defined keyboard
+macro.
+@item RL_STATE_MACRODEF
+Readline is currently reading characters defining a keyboard macro.
+@item RL_STATE_OVERWRITE
+Readline is in overwrite mode.
+@item RL_STATE_COMPLETING
+Readline is performing word completion.
+@item RL_STATE_SIGHANDLER
+Readline is currently executing the readline signal handler.
+@item RL_STATE_UNDOING
+Readline is performing an undo.
+@item RL_STATE_DONE
+Readline has read a key sequence bound to @code{accept-line}
+and is about to return the line to the caller.
+@end table
+
+@end deftypevar
+
+@deftypevar {int} rl_explicit_arg
+Set to a non-zero value if an explicit numeric argument was specified by
+the user.  Only valid in a bindable command function.
+@end deftypevar
+
+@deftypevar {int} rl_numeric_arg
+Set to the value of any numeric argument explicitly specified by the user
+before executing the current Readline function.  Only valid in a bindable
+command function.
+@end deftypevar
+
+@deftypevar {int} rl_editing_mode
+Set to a value denoting Readline's current editing mode.  A value of
+@var{1} means Readline is currently in emacs mode; @var{0}
+means that vi mode is active.
+@end deftypevar
+
+
 @node Readline Convenience Functions
 @section Readline Convenience Functions
 
@@ -375,8 +547,12 @@
 * Allowing Undoing::	How to make your functions undoable.
 * Redisplay::		Functions to control line display.
 * Modifying Text::	Functions to modify @code{rl_line_buffer}.
+* Character Input::	Functions to read keyboard input.
+* Terminal Management::	Functions to manage terminal settings.
 * Utility Functions::	Generally useful functions and hooks.
+* Miscellaneous Functions::	Functions that don't fall into any category.
 * Alternate Interface::	Using Readline in a `callback' fashion.
+* A Readline Example::		An example Readline function.
 @end menu
 
 @node Function Naming
@@ -396,10 +572,10 @@
 programmer, should bind the functions you write to descriptive names as
 well.  Readline provides a function for doing that:
 
-@deftypefun int rl_add_defun (char *name, Function *function, int key)
+@deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key)
 Add @var{name} to the list of named functions.  Make @var{function} be
 the function that gets called.  If @var{key} is not -1, then bind it to
-@var{function} using @code{rl_bind_key ()}.
+@var{function} using @code{rl_bind_key()}.
 @end deftypefun
 
 Using this function alone is sufficient for most applications.  It is
@@ -416,16 +592,17 @@
 get run.  You can make your own keymaps, copy existing keymaps, and tell
 Readline which keymap to use.
 
-@deftypefun Keymap rl_make_bare_keymap ()
+@deftypefun Keymap rl_make_bare_keymap (void)
 Returns a new, empty keymap.  The space for the keymap is allocated with
-@code{malloc ()}; you should @code{free ()} it when you are done.
+@code{malloc()}; the caller should free it by calling
+@code{rl_discard_keymap()} when done.
 @end deftypefun
 
 @deftypefun Keymap rl_copy_keymap (Keymap map)
 Return a new keymap which is a copy of @var{map}.
 @end deftypefun
 
-@deftypefun Keymap rl_make_keymap ()
+@deftypefun Keymap rl_make_keymap (void)
 Return a new keymap with the printing characters bound to rl_insert,
 the lowercase Meta characters bound to run their equivalents, and
 the Meta digits bound to produce numeric arguments.
@@ -438,7 +615,7 @@
 Readline has several internal keymaps.  These functions allow you to
 change which keymap is active.
 
-@deftypefun Keymap rl_get_keymap ()
+@deftypefun Keymap rl_get_keymap (void)
 Returns the currently active keymap.
 @end deftypefun
 
@@ -446,7 +623,7 @@
 Makes @var{keymap} the currently active keymap.
 @end deftypefun
 
-@deftypefun Keymap rl_get_keymap_by_name (char *name)
+@deftypefun Keymap rl_get_keymap_by_name (const char *name)
 Return the keymap matching @var{name}.  @var{name} is one which would
 be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
 @end deftypefun
@@ -459,28 +636,28 @@
 @node Binding Keys
 @subsection Binding Keys
 
-You associate keys with functions through the keymap.  Readline has
-several internal keymaps: @code{emacs_standard_keymap},
+Key sequences are associate with functions through the keymap.
+Readline has several internal keymaps: @code{emacs_standard_keymap},
 @code{emacs_meta_keymap}, @code{emacs_ctlx_keymap},
 @code{vi_movement_keymap}, and @code{vi_insertion_keymap}.
 @code{emacs_standard_keymap} is the default, and the examples in
 this manual assume that.
 
-Since @code{readline} installs a set of default key bindings the first
+Since @code{readline()} installs a set of default key bindings the first
 time it is called, there is always the danger that a custom binding
-installed before the first call to @code{readline} will be overridden.
+installed before the first call to @code{readline()} will be overridden.
 An alternate mechanism is to install custom key bindings in an
 initialization function assigned to the @code{rl_startup_hook} variable
 (@pxref{Readline Variables}).
 
 These functions manage key bindings.
 
-@deftypefun int rl_bind_key (int key, Function *function)
+@deftypefun int rl_bind_key (int key, rl_command_func_t *function)
 Binds @var{key} to @var{function} in the currently active keymap.
 Returns non-zero in the case of an invalid @var{key}.
 @end deftypefun
 
-@deftypefun int rl_bind_key_in_map (int key, Function *function, Keymap map)
+@deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)
 Bind @var{key} to @var{function} in @var{map}.  Returns non-zero in the case
 of an invalid @var{key}.
 @end deftypefun
@@ -495,15 +672,21 @@
 Returns non-zero in case of error.
 @end deftypefun
 
-@deftypefun int rl_unbind_function_in_map (Function *function, Keymap map)
+@deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map)
 Unbind all keys that execute @var{function} in @var{map}.
 @end deftypefun
 
-@deftypefun int rl_unbind_command_in_map (char *command, Keymap map)
+@deftypefun int rl_unbind_command_in_map (const char *command, Keymap map)
 Unbind all keys that are bound to @var{command} in @var{map}.
 @end deftypefun
 
-@deftypefun int rl_generic_bind (int type, char *keyseq, char *data, Keymap map)
+@deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
+Bind the key sequence represented by the string @var{keyseq} to the function
+@var{function}.  This makes new keymaps as
+necessary.  The initial keymap in which to do bindings is @var{map}.
+@end deftypefun
+
+@deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
 Bind the key sequence represented by the string @var{keyseq} to the arbitrary
 pointer @var{data}.  @var{type} says what kind of data is pointed to by
 @var{data}; this can be a function (@code{ISFUNC}), a macro
@@ -517,7 +700,7 @@
 (@pxref{Readline Init File}).
 @end deftypefun
 
-@deftypefun int rl_read_init_file (char *filename)
+@deftypefun int rl_read_init_file (const char *filename)
 Read keybindings and variable assignments from @var{filename}
 (@pxref{Readline Init File}).
 @end deftypefun
@@ -526,25 +709,26 @@
 @subsection Associating Function Names and Bindings
 
 These functions allow you to find out what keys invoke named functions
-and the functions invoked by a particular key sequence.
+and the functions invoked by a particular key sequence.  You may also
+associate a new function name with an arbitrary function.
 
-@deftypefun {Function *} rl_named_function (char *name)
+@deftypefun {rl_command_func_t *} rl_named_function (const char *name)
 Return the function with name @var{name}.
 @end deftypefun
 
-@deftypefun {Function *} rl_function_of_keyseq (char *keyseq, Keymap map, int *type)
+@deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)
 Return the function invoked by @var{keyseq} in keymap @var{map}.
-If @var{map} is NULL, the current keymap is used.  If @var{type} is
-not NULL, the type of the object is returned in it (one of @code{ISFUNC},
-@code{ISKMAP}, or @code{ISMACR}).
+If @var{map} is @code{NULL}, the current keymap is used.  If @var{type} is
+not @code{NULL}, the type of the object is returned in the @code{int} variable
+it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}).
 @end deftypefun
 
-@deftypefun {char **} rl_invoking_keyseqs (Function *function)
+@deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function)
 Return an array of strings representing the key sequences used to
 invoke @var{function} in the current keymap.
 @end deftypefun
 
-@deftypefun {char **} rl_invoking_keyseqs_in_map (Function *function, Keymap map)
+@deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
 Return an array of strings representing the key sequences used to
 invoke @var{function} in the keymap @var{map}.
 @end deftypefun
@@ -556,14 +740,19 @@
 @code{inputrc} file and re-read.
 @end deftypefun
 
-@deftypefun void rl_list_funmap_names ()
+@deftypefun void rl_list_funmap_names (void)
 Print the names of all bindable Readline functions to @code{rl_outstream}.
 @end deftypefun
 
-@deftypefun {char **} rl_funmap_names ()
+@deftypefun {const char **} rl_funmap_names (void)
 Return a NULL terminated array of known function names.  The array is
 sorted.  The array itself is allocated, but not the strings inside.  You
-should free () the array when you done, but not the pointrs.
+should @code{free()} the array when you are done, but not the pointers.
+@end deftypefun
+
+@deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
+Add @var{name} to the list of bindable Readline command names, and make
+@var{function} the function to be called when @var{name} is invoked.
 @end deftypefun
 
 @node Allowing Undoing
@@ -571,41 +760,40 @@
 
 Supporting the undo command is a painless thing, and makes your
 functions much more useful.  It is certainly easy to try
-something if you know you can undo it.  I could use an undo function for
-the stock market.
+something if you know you can undo it.
 
 If your function simply inserts text once, or deletes text once, and
-uses @code{rl_insert_text ()} or @code{rl_delete_text ()} to do it, then
+uses @code{rl_insert_text()} or @code{rl_delete_text()} to do it, then
 undoing is already done for you automatically.
 
 If you do multiple insertions or multiple deletions, or any combination
 of these operations, you should group them together into one operation.
-This is done with @code{rl_begin_undo_group ()} and
-@code{rl_end_undo_group ()}.
+This is done with @code{rl_begin_undo_group()} and
+@code{rl_end_undo_group()}.
 
 The types of events that can be undone are:
 
-@example
+@smallexample
 enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; 
-@end example
+@end smallexample
 
 Notice that @code{UNDO_DELETE} means to insert some text, and
 @code{UNDO_INSERT} means to delete some text.  That is, the undo code
-tells undo what to undo, not how to undo it.  @code{UNDO_BEGIN} and
-@code{UNDO_END} are tags added by @code{rl_begin_undo_group ()} and
-@code{rl_end_undo_group ()}.
+tells what to undo, not how to undo it.  @code{UNDO_BEGIN} and
+@code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and
+@code{rl_end_undo_group()}.
 
-@deftypefun int rl_begin_undo_group ()
+@deftypefun int rl_begin_undo_group (void)
 Begins saving undo information in a group construct.  The undo
-information usually comes from calls to @code{rl_insert_text ()} and
-@code{rl_delete_text ()}, but could be the result of calls to
-@code{rl_add_undo ()}.
+information usually comes from calls to @code{rl_insert_text()} and
+@code{rl_delete_text()}, but could be the result of calls to
+@code{rl_add_undo()}.
 @end deftypefun
 
-@deftypefun int rl_end_undo_group ()
+@deftypefun int rl_end_undo_group (void)
 Closes the current undo group started with @code{rl_begin_undo_group
-()}.  There should be one call to @code{rl_end_undo_group ()}
-for each call to @code{rl_begin_undo_group ()}.
+()}.  There should be one call to @code{rl_end_undo_group()}
+for each call to @code{rl_begin_undo_group()}.
 @end deftypefun
 
 @deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text)
@@ -613,17 +801,17 @@
 text runs from @var{start} to @var{end}, and encompasses @var{text}.
 @end deftypefun
 
-@deftypefun void free_undo_list ()
+@deftypefun void rl_free_undo_list (void)
 Free the existing undo list.
 @end deftypefun
 
-@deftypefun int rl_do_undo ()
+@deftypefun int rl_do_undo (void)
 Undo the first thing on the undo list.  Returns @code{0} if there was
 nothing to undo, non-zero if something was undone.
 @end deftypefun
 
 Finally, if you neither insert nor delete text, but directly modify the
-existing text (e.g., change its case), call @code{rl_modifying ()}
+existing text (e.g., change its case), call @code{rl_modifying()}
 once, just before you modify the text.  You must supply the indices of
 the text range that you are going to modify.
 
@@ -636,22 +824,22 @@
 @node Redisplay
 @subsection Redisplay
 
-@deftypefun void rl_redisplay ()
+@deftypefun void rl_redisplay (void)
 Change what's displayed on the screen to reflect the current contents
 of @code{rl_line_buffer}.
 @end deftypefun
 
-@deftypefun int rl_forced_update_display ()
+@deftypefun int rl_forced_update_display (void)
 Force the line to be updated and redisplayed, whether or not
 Readline thinks the screen display is correct.
 @end deftypefun
 
-@deftypefun int rl_on_new_line ()
+@deftypefun int rl_on_new_line (void)
 Tell the update functions that we have moved onto a new (empty) line,
 usually after ouputting a newline.
 @end deftypefun
 
-@deftypefun int rl_on_new_line_with_prompt ()
+@deftypefun int rl_on_new_line_with_prompt (void)
 Tell the update functions that we have moved onto a new line, with
 @var{rl_prompt} already displayed.
 This could be used by applications that want to output the prompt string
@@ -660,40 +848,72 @@
 It should be used after setting @var{rl_already_prompted}.
 @end deftypefun
 
-@deftypefun int rl_reset_line_state ()
+@deftypefun int rl_reset_line_state (void)
 Reset the display state to a clean state and redisplay the current line
 starting on a new line.
 @end deftypefun
 
-@deftypefun int rl_message (va_alist)
-The arguments are a string as would be supplied to @code{printf}.  The
-resulting string is displayed in the @dfn{echo area}.  The echo area
+@deftypefun int rl_crlf (void)
+Move the cursor to the start of the next screen line.
+@end deftypefun
+
+@deftypefun int rl_show_char (int c)
+Display character @var{c} on @code{rl_outstream}.
+If Readline has not been set to display meta characters directly, this
+will convert meta characters to a meta-prefixed key sequence.
+This is intended for use by applications which wish to do their own
+redisplay.
+@end deftypefun
+
+@deftypefun int rl_message (const char *, @dots{})
+The arguments are a format string as would be supplied to @code{printf},
+possibly containing conversion specifications such as @samp{%d}, and
+any additional arguments necessary to satisfy the conversion specifications.
+The resulting string is displayed in the @dfn{echo area}.  The echo area
 is also used to display numeric arguments and search strings.
 @end deftypefun
 
-@deftypefun int rl_clear_message ()
+@deftypefun int rl_clear_message (void)
 Clear the message in the echo area.
 @end deftypefun
 
-@deftypefun void rl_save_prompt ()
+@deftypefun void rl_save_prompt (void)
 Save the local Readline prompt display state in preparation for
-displaying a new message in the message area with @code{rl_message}.
+displaying a new message in the message area with @code{rl_message()}.
 @end deftypefun
 
-@deftypefun void rl_restore_prompt ()
+@deftypefun void rl_restore_prompt (void)
 Restore the local Readline prompt display state saved by the most
 recent call to @code{rl_save_prompt}.
 @end deftypefun
 
+@deftypefun int rl_expand_prompt (char *prompt)
+Expand any special character sequences in @var{prompt} and set up the
+local Readline prompt redisplay variables.
+This function is called by @code{readline()}.  It may also be called to
+expand the primary prompt if the @code{rl_on_new_line_with_prompt()}
+function or @code{rl_already_prompted} variable is used.
+It returns the number of visible characters on the last line of the
+(possibly multi-line) prompt.
+@end deftypefun
+
+@deftypefun int rl_set_prompt (const char *prompt)
+Make Readline use @var{prompt} for subsequent redisplay.  This calls
+@code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt}
+to the result.
+@end deftypefun
+
 @node Modifying Text
 @subsection Modifying Text
 
-@deftypefun int rl_insert_text (char *text)
+@deftypefun int rl_insert_text (const char *text)
 Insert @var{text} into the line at the current cursor position.
+Returns the number of characters inserted.
 @end deftypefun
 
 @deftypefun int rl_delete_text (int start, int end)
 Delete the text between @var{start} and @var{end} in the current line.
+Returns the number of characters deleted.
 @end deftypefun
 
 @deftypefun {char *} rl_copy_text (int start, int end)
@@ -710,23 +930,92 @@
 not a kill, a new kill ring slot is used.
 @end deftypefun
 
-@node Utility Functions
-@subsection Utility Functions
-
-@deftypefun int rl_read_key ()
-Return the next character available.  This handles input inserted into
-the input stream via @var{pending input} (@pxref{Readline Variables})
-and @code{rl_stuff_char ()}, macros, and characters read from the keyboard.
+@deftypefun int rl_push_macro_input (char *macro)
+Cause @var{macro} to be inserted into the line, as if it had been invoked
+by a key bound to a macro.  Not especially useful; use
+@code{rl_insert_text()} instead.
 @end deftypefun
 
-@deftypefun int rl_getc (FILE *)
-Return the next character available from the keyboard.
+@node Character Input
+@subsection Character Input
+
+@deftypefun int rl_read_key (void)
+Return the next character available from Readline's current input stream.
+This handles input inserted into
+the input stream via @var{rl_pending_input} (@pxref{Readline Variables})
+and @code{rl_stuff_char()}, macros, and characters read from the keyboard.
+While waiting for input, this function will call any function assigned to
+the @code{rl_event_hook} variable.
+@end deftypefun
+
+@deftypefun int rl_getc (FILE *stream)
+Return the next character available from @var{stream}, which is assumed to
+be the keyboard.
 @end deftypefun
 
 @deftypefun int rl_stuff_char (int c)
 Insert @var{c} into the Readline input stream.  It will be "read"
 before Readline attempts to read characters from the terminal with
-@code{rl_read_key ()}.
+@code{rl_read_key()}.  Up to 512 characters may be pushed back.
+@code{rl_stuff_char} returns 1 if the character was successfully inserted;
+0 otherwise.
+@end deftypefun
+
+@deftypefun int rl_execute_next (int c)
+Make @var{c} be the next command to be executed when @code{rl_read_key()}
+is called.  This sets @var{rl_pending_input}.
+@end deftypefun
+
+@deftypefun int rl_clear_pending_input (void)
+Unset @var{rl_pending_input}, effectively negating the effect of any
+previous call to @code{rl_execute_next()}.  This works only if the
+pending input has not already been read with @code{rl_read_key()}.
+@end deftypefun
+
+@deftypefun int rl_set_keyboard_input_timeout (int u)
+While waiting for keyboard input in @code{rl_read_key()}, Readline will
+wait for @var{u} microseconds for input before calling any function
+assigned to @code{rl_event_hook}.  The default waiting period is
+one-tenth of a second.  Returns the old timeout value.
+@end deftypefun
+
+@node Terminal Management
+@subsection Terminal Management
+
+@deftypefun void rl_prep_terminal (int meta_flag)
+Modify the terminal settings for Readline's use, so @code{readline()}
+can read a single character at a time from the keyboard.
+The @var{meta_flag} argument should be non-zero if Readline should
+read eight-bit input.
+@end deftypefun
+
+@deftypefun void rl_deprep_terminal (void)
+Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in
+the state in which it was before the most recent call to
+@code{rl_prep_terminal()}.
+@end deftypefun
+
+@deftypefun void rl_tty_set_default_bindings (Keymap kmap)
+Read the operating system's terminal editing characters (as would be displayed
+by @code{stty}) to their Readline equivalents.  The bindings are performed
+in @var{kmap}.
+@end deftypefun
+
+@deftypefun int rl_reset_terminal (const char *terminal_name)
+Reinitialize Readline's idea of the terminal settings using
+@var{terminal_name} as the terminal type (e.g., @code{vt100}).
+If @var{terminal_name} is @code{NULL}, the value of the @code{TERM}
+environment variable is used.
+@end deftypefun
+
+@node Utility Functions
+@subsection Utility Functions
+
+@deftypefun void rl_replace_line (const char *text, int clear_undo)
+Replace the contents of @code{rl_line_buffer} with @var{text}.
+The point and mark are preserved, if possible.
+If @var{clear_undo} is non-zero, the undo list associated with the
+current line is cleared.
 @end deftypefun
 
 @deftypefun int rl_extend_line_buffer (int len)
@@ -734,29 +1023,20 @@
 characters, possibly reallocating it if necessary.
 @end deftypefun
 
-@deftypefun int rl_initialize ()
+@deftypefun int rl_initialize (void)
 Initialize or re-initialize Readline's internal state.
+It's not strictly necessary to call this; @code{readline()} calls it before
+reading any input.
 @end deftypefun
 
-@deftypefun int rl_reset_terminal (char *terminal_name)
-Reinitialize Readline's idea of the terminal settings using
-@var{terminal_name} as the terminal type (e.g., @code{vt100}).
-If @var{terminal_name} is NULL, the value of the @code{TERM}
-environment variable is used.
-@end deftypefun
-
-@deftypefun int alphabetic (int c)
-Return 1 if @var{c} is an alphabetic character.
-@end deftypefun
-
-@deftypefun int numeric (int c)
-Return 1 if @var{c} is a numeric character.
-@end deftypefun
-
-@deftypefun int ding ()
+@deftypefun int rl_ding (void)
 Ring the terminal bell, obeying the setting of @code{bell-style}.
 @end deftypefun
 
+@deftypefun int rl_alphabetic (int c)
+Return 1 if @var{c} is an alphabetic character.
+@end deftypefun
+
 @deftypefun void rl_display_match_list (char **matches, int len, int max)
 A convenience function for displaying a list of strings in
 columnar format on Readline's output stream.  @code{matches} is the list
@@ -767,34 +1047,80 @@
 matches are displayed (@pxref{Readline Init File Syntax}).
 @end deftypefun
 
-The following are implemented as macros, defined in @code{chartypes.h}.
+The following are implemented as macros, defined in @code{chardefs.h}.
+Applications should refrain from using them.
 
-@deftypefun int uppercase_p (int c)
+@deftypefun int _rl_uppercase_p (int c)
 Return 1 if @var{c} is an uppercase alphabetic character.
 @end deftypefun
 
-@deftypefun int lowercase_p (int c)
+@deftypefun int _rl_lowercase_p (int c)
 Return 1 if @var{c} is a lowercase alphabetic character.
 @end deftypefun
 
-@deftypefun int digit_p (int c)
+@deftypefun int _rl_digit_p (int c)
 Return 1 if @var{c} is a numeric character.
 @end deftypefun
 
-@deftypefun int to_upper (int c)
+@deftypefun int _rl_to_upper (int c)
 If @var{c} is a lowercase alphabetic character, return the corresponding
 uppercase character.
 @end deftypefun
 
-@deftypefun int to_lower (int c)
+@deftypefun int _rl_to_lower (int c)
 If @var{c} is an uppercase alphabetic character, return the corresponding
 lowercase character.
 @end deftypefun
 
-@deftypefun int digit_value (int c)
+@deftypefun int _rl_digit_value (int c)
 If @var{c} is a number, return the value it represents.
 @end deftypefun
 
+@node Miscellaneous Functions
+@subsection Miscellaneous Functions
+
+@deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
+Bind the key sequence @var{keyseq} to invoke the macro @var{macro}.
+The binding is performed in @var{map}.  When @var{keyseq} is invoked, the
+@var{macro} will be inserted into the line.  This function is deprecated;
+use @code{rl_generic_bind()} instead.
+@end deftypefun
+
+@deftypefun void rl_macro_dumper (int readable)
+Print the key sequences bound to macros and their values, using
+the current keymap, to @code{rl_outstream}.
+If @var{readable} is non-zero, the list is formatted in such a way
+that it can be made part of an @code{inputrc} file and re-read.
+@end deftypefun
+
+@deftypefun int rl_variable_bind (const char *variable, const char *value)
+Make the Readline variable @var{variable} have @var{value}.
+This behaves as if the readline command
+@samp{set @var{variable} @var{value}} had been executed in an @code{inputrc}
+file (@pxref{Readline Init File Syntax}).
+@end deftypefun
+
+@deftypefun void rl_variable_dumper (int readable)
+Print the readline variable names and their current values
+to @code{rl_outstream}.
+If @var{readable} is non-zero, the list is formatted in such a way
+that it can be made part of an @code{inputrc} file and re-read.
+@end deftypefun
+
+@deftypefun int rl_set_paren_blink_timeout (int u)
+Set the time interval (in microseconds) that Readline waits when showing
+a balancing character when @code{blink-matching-paren} has been enabled.
+@end deftypefun
+
+@deftypefun {char *} rl_get_termcap (const char *cap)
+Retrieve the string value of the termcap capability @var{cap}.
+Readline fetches the termcap entry for the current terminal name and
+uses those capabilities to move around the screen line and perform other
+terminal-specific operations, like erasing a line.  Readline does not
+use all of a terminal's capabilities, and this function will return
+values for only those capabilities Readline uses.
+@end deftypefun
+
 @node Alternate Interface
 @subsection Alternate Interface
 
@@ -805,28 +1131,40 @@
 also be invoked as a `callback' function from an event loop.  There
 are functions available to make this easy.
 
-@deftypefun void rl_callback_handler_install (char *prompt, Vfunction *lhandler)
+@deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
 Set up the terminal for readline I/O and display the initial
 expanded value of @var{prompt}.  Save the value of @var{lhandler} to
-use as a callback when a complete line of input has been entered.
+use as a function to call when a complete line of input has been entered.
+The function takes the text of the line as an argument.
 @end deftypefun
 
-@deftypefun void rl_callback_read_char ()
+@deftypefun void rl_callback_read_char (void)
 Whenever an application determines that keyboard input is available, it
 should call @code{rl_callback_read_char()}, which will read the next
-character from the current input source.  If that character completes the
-line, @code{rl_callback_read_char} will invoke the @var{lhandler}
-function saved by @code{rl_callback_handler_install} to process the
-line.  @code{EOF} is  indicated by calling @var{lhandler} with a
+character from the current input source.
+If that character completes the line, @code{rl_callback_read_char} will
+invoke the @var{lhandler} function saved by @code{rl_callback_handler_install}
+to process the line.
+Before calling the @var{lhandler} function, the terminal settings are
+reset to the values they had before calling
+@code{rl_callback_handler_install}.
+If the @var{lhandler} function returns,
+the terminal settings are modified for Readline's use again.
+@code{EOF} is  indicated by calling @var{lhandler} with a
 @code{NULL} line.
 @end deftypefun
 
-@deftypefun void rl_callback_handler_remove ()
+@deftypefun void rl_callback_handler_remove (void)
 Restore the terminal to its initial state and remove the line handler.
 This may be called from within a callback as well as independently.
+If the @var{lhandler} installed by @code{rl_callback_handler_install}
+does not exit the program, either this function or the function referred
+to by the value of @code{rl_deprep_term_function} should be called before
+the program exits to reset the terminal settings.
 @end deftypefun
 
-@subsection An Example
+@node A Readline Example
+@subsection A Readline Example
 
 Here is a function which changes lowercase characters to their uppercase
 equivalents, and uppercase characters to lowercase.  If
@@ -875,16 +1213,16 @@
       end = temp;
     @}
 
-  /* Tell readline that we are modifying the line, so it will save
-     the undo information. */
+  /* Tell readline that we are modifying the line,
+     so it will save the undo information. */
   rl_modifying (start, end);
 
   for (i = start; i != end; i++)
     @{
-      if (uppercase_p (rl_line_buffer[i]))
-        rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
-      else if (lowercase_p (rl_line_buffer[i]))
-        rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
+      if (_rl_uppercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
+      else if (_rl_lowercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
     @}
   /* Move point to on top of the last character changed. */
   rl_point = (direction == 1) ? end - 1 : start;
@@ -897,44 +1235,44 @@
 
 Signals are asynchronous events sent to a process by the Unix kernel,
 sometimes on behalf of another process.  They are intended to indicate
-exceptional events, like a user pressing the interrupt key on his
-terminal, or a network connection being broken.  There is a class of
-signals that can be sent to the process currently reading input from
-the keyboard.  Since Readline changes the terminal attributes when it
-is called, it needs to perform special processing when a signal is
-received to restore the terminal to a sane state, or provide application
-writers with functions to do so manually.
+exceptional events, like a user pressing the interrupt key on his terminal,
+or a network connection being broken.  There is a class of signals that can
+be sent to the process currently reading input from the keyboard.  Since
+Readline changes the terminal attributes when it is called, it needs to
+perform special processing when such a signal is received in order to
+restore the terminal to a sane state, or provide application writers with
+functions to do so manually. 
 
 Readline contains an internal signal handler that is installed for a
 number of signals (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM},
 @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}).
 When one of these signals is received, the signal handler
 will reset the terminal attributes to those that were in effect before
-@code{readline ()} was called, reset the signal handling to what it was
-before @code{readline ()} was called, and resend the signal to the calling
+@code{readline()} was called, reset the signal handling to what it was
+before @code{readline()} was called, and resend the signal to the calling
 application.
 If and when the calling application's signal handler returns, Readline
 will reinitialize the terminal and continue to accept input.
 When a @code{SIGINT} is received, the Readline signal handler performs
 some additional work, which will cause any partially-entered line to be
-aborted (see the description of @code{rl_free_line_state ()}).
+aborted (see the description of @code{rl_free_line_state()} below).
 
 There is an additional Readline signal handler, for @code{SIGWINCH}, which
 the kernel sends to a process whenever the terminal's size changes (for
 example, if a user resizes an @code{xterm}).  The Readline @code{SIGWINCH}
-handler updates Readline's internal screen size state, and then calls any
-@code{SIGWINCH} signal handler the calling application has installed. 
+handler updates Readline's internal screen size information, and then calls
+any @code{SIGWINCH} signal handler the calling application has installed. 
 Readline calls the application's @code{SIGWINCH} signal handler without
 resetting the terminal to its original state.  If the application's signal
 handler does more than update its idea of the terminal size and return (for
 example, a @code{longjmp} back to a main processing loop), it @emph{must}
-call @code{rl_cleanup_after_signal ()} (described below), to restore the
+call @code{rl_cleanup_after_signal()} (described below), to restore the
 terminal state. 
 
 Readline provides two variables that allow application writers to
 control whether or not it will catch certain signals and act on them
 when they are received.  It is important that applications change the
-values of these variables only when calling @code{readline ()}, not in
+values of these variables only when calling @code{readline()}, not in
 a signal handler, so Readline's internal signal state is not corrupted.
 
 @deftypevar int rl_catch_signals
@@ -960,7 +1298,7 @@
 
 @deftypefun void rl_cleanup_after_signal (void)
 This function will reset the state of the terminal to what it was before
-@code{readline ()} was called, and remove the Readline signal handlers for
+@code{readline()} was called, and remove the Readline signal handlers for
 all signals, depending on the values of @code{rl_catch_signals} and
 @code{rl_catch_sigwinch}.
 @end deftypefun
@@ -969,7 +1307,7 @@
 This will free any partial state associated with the current input line
 (undo information, any partial history entry, any partially-entered
 keyboard macro, and any partially-entered numeric argument).  This
-should be called before @code{rl_cleanup_after_signal ()}.  The
+should be called before @code{rl_cleanup_after_signal()}.  The
 Readline signal handler for @code{SIGINT} calls this to abort the
 current input line.
 @end deftypefun
@@ -981,11 +1319,26 @@
 @end deftypefun
 
 If an application does not wish Readline to catch @code{SIGWINCH}, it may
-call @code{rl_resize_terminal ()} to force Readline to update its idea of
-the terminal size when a @code{SIGWINCH} is received.
+call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force
+Readline to update its idea of the terminal size when a @code{SIGWINCH}
+is received.
 
 @deftypefun void rl_resize_terminal (void)
-Update Readline's internal screen size.
+Update Readline's internal screen size by reading values from the kernel.
+@end deftypefun
+
+@deftypefun void rl_set_screen_size (int rows, int cols)
+Set Readline's idea of the terminal size to @var{rows} rows and
+@var{cols} columns.
+@end deftypefun
+
+If an application does not want to install a @code{SIGWINCH} handler, but
+is still interested in the screen dimensions, Readline's idea of the screen
+size may be queried.
+
+@deftypefun void rl_get_screen_size (int *rows, int *cols)
+Return Readline's idea of the terminal's size in the
+variables pointed to by the arguments.
 @end deftypefun
 
 The following functions install and remove Readline's signal handlers.
@@ -999,7 +1352,7 @@
 
 @deftypefun int rl_clear_signals (void)
 Remove all of the Readline signal handlers installed by
-@code{rl_set_signals ()}.
+@code{rl_set_signals()}.
 @end deftypefun
 
 @node Custom Completers
@@ -1034,30 +1387,31 @@
 
 @enumerate
 @item
-The user-interface function @code{rl_complete ()}.  This function is
-called with the same arguments as other Readline
-functions intended for interactive use:  @var{count} and
-@var{invoking_key}.  It isolates the word to be completed and calls
-@code{completion_matches ()} to generate a list of possible completions.
+The user-interface function @code{rl_complete()}.  This function is
+called with the same arguments as other bindable Readline functions:
+@var{count} and @var{invoking_key}.
+It isolates the word to be completed and calls
+@code{rl_completion_matches()} to generate a list of possible completions.
 It then either lists the possible completions, inserts the possible
 completions, or actually performs the
 completion, depending on which behavior is desired.
 
 @item
-The internal function @code{completion_matches ()} uses your
-@dfn{generator} function to generate the list of possible matches, and
-then returns the array of these matches.  You should place the address
-of your generator function in @code{rl_completion_entry_function}.
+The internal function @code{rl_completion_matches()} uses an
+application-supplied @dfn{generator} function to generate the list of
+possible matches, and then returns the array of these matches.
+The caller should place the address of its generator function in
+@code{rl_completion_entry_function}.
 
 @item
 The generator function is called repeatedly from
-@code{completion_matches ()}, returning a string each time.  The
+@code{rl_completion_matches()}, returning a string each time.  The
 arguments to the generator function are @var{text} and @var{state}.
 @var{text} is the partial word to be completed.  @var{state} is zero the
 first time the function is called, allowing the generator to perform
 any necessary initialization, and a positive non-zero integer for
-each subsequent call.  When the generator function returns
-@code{(char *)NULL} this signals @code{completion_matches ()} that there are
+each subsequent call.  The generator function returns
+@code{(char *)NULL} to inform @code{rl_completion_matches()} that there are
 no more possibilities left.  Usually the generator function computes the
 list of possible completions when @var{state} is zero, and returns them
 one at a time on subsequent calls.  Each string the generator function
@@ -1069,14 +1423,15 @@
 @deftypefun int rl_complete (int ignore, int invoking_key)
 Complete the word at or before point.  You have supplied the function
 that does the initial simple matching selection algorithm (see
-@code{completion_matches ()}).  The default is to do filename completion.
+@code{rl_completion_matches()}).  The default is to do filename completion.
 @end deftypefun
 
-@deftypevar {Function *} rl_completion_entry_function
-This is a pointer to the generator function for @code{completion_matches
-()}.  If the value of @code{rl_completion_entry_function} is
-@code{(Function *)NULL} then the default filename generator function,
-@code{filename_completion_function ()}, is used.
+@deftypevar {rl_compentry_func_t *} rl_completion_entry_function
+This is a pointer to the generator function for
+@code{rl_completion_matches()}.
+If the value of @code{rl_completion_entry_function} is
+@code{NULL} then the default filename generator
+function, @code{rl_filename_completion_function()}, is used.
 @end deftypevar
 
 @node Completion Functions
@@ -1097,47 +1452,55 @@
 @deftypefun int rl_complete (int ignore, int invoking_key)
 Complete the word at or before point.  You have supplied the function
 that does the initial simple matching selection algorithm (see
-@code{completion_matches ()} and @code{rl_completion_entry_function}).
+@code{rl_completion_matches()} and @code{rl_completion_entry_function}).
 The default is to do filename
-completion.  This calls @code{rl_complete_internal ()} with an
+completion.  This calls @code{rl_complete_internal()} with an
 argument depending on @var{invoking_key}.
 @end deftypefun
 
-@deftypefun int rl_possible_completions (int count, int invoking_key))
+@deftypefun int rl_possible_completions (int count, int invoking_key)
 List the possible completions.  See description of @code{rl_complete
-()}.  This calls @code{rl_complete_internal ()} with an argument of
+()}.  This calls @code{rl_complete_internal()} with an argument of
 @samp{?}.
 @end deftypefun
 
-@deftypefun int rl_insert_completions (int count, int invoking_key))
+@deftypefun int rl_insert_completions (int count, int invoking_key)
 Insert the list of possible completions into the line, deleting the
-partially-completed word.  See description of @code{rl_complete ()}.
-This calls @code{rl_complete_internal ()} with an argument of @samp{*}.
+partially-completed word.  See description of @code{rl_complete()}.
+This calls @code{rl_complete_internal()} with an argument of @samp{*}.
 @end deftypefun
 
-@deftypefun {char **} completion_matches (char *text, CPFunction *entry_func)
-Returns an array of @code{(char *)} which is a list of completions for
-@var{text}.  If there are no completions, returns @code{(char **)NULL}.
+@deftypefun int rl_completion_mode (rl_command_func_t *cfunc)
+Returns the apppriate value to pass to @code{rl_complete_internal()}
+depending on whether @var{cfunc} was called twice in succession and
+the value of the @code{show-all-if-ambiguous} variable.
+Application-specific completion functions may use this function to present
+the same interface as @code{rl_complete()}.
+@end deftypefun
+
+@deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
+Returns an array of strings which is a list of completions for
+@var{text}.  If there are no completions, returns @code{NULL}.
 The first entry in the returned array is the substitution for @var{text}.
 The remaining entries are the possible completions.  The array is
 terminated with a @code{NULL} pointer.
 
 @var{entry_func} is a function of two args, and returns a
-@code{(char *)}.  The first argument is @var{text}.  The second is a
+@code{char *}.  The first argument is @var{text}.  The second is a
 state argument; it is zero on the first call, and non-zero on subsequent
 calls.  @var{entry_func} returns a @code{NULL}  pointer to the caller
 when there are no more matches.
 @end deftypefun
 
-@deftypefun {char *} filename_completion_function (char *text, int state)
-A generator function for filename completion in the general case.  Note
-that completion in Bash is a little different because of all
-the pathnames that must be followed when looking up completions for a
-command.  The Bash source is a useful reference for writing custom
-completion functions.
+@deftypefun {char *} rl_filename_completion_function (const char *text, int state)
+A generator function for filename completion in the general case.
+@var{text} is a partial filename.
+The Bash source is a useful reference for writing custom
+completion functions (the Bash completion functions call this and other
+Readline functions).
 @end deftypefun
 
-@deftypefun {char *} username_completion_function (char *text, int state)
+@deftypefun {char *} rl_username_completion_function (const char *text, int state)
 A completion generator for usernames.  @var{text} contains a partial
 username preceded by a random character (usually @samp{~}).  As with all
 completion generators, @var{state} is zero on the first call and non-zero
@@ -1147,26 +1510,29 @@
 @node Completion Variables
 @subsection Completion Variables
 
-@deftypevar {Function *} rl_completion_entry_function
-A pointer to the generator function for @code{completion_matches ()}.
-@code{NULL} means to use @code{filename_completion_function ()}, the default
+@deftypevar {rl_compentry_func_t *} rl_completion_entry_function
+A pointer to the generator function for @code{rl_completion_matches()}.
+@code{NULL} means to use @code{rl_filename_completion_function()}, the default
 filename completer.
 @end deftypevar
 
-@deftypevar {CPPFunction *} rl_attempted_completion_function
+@deftypevar {rl_completion_func_t *} rl_attempted_completion_function
 A pointer to an alternative function to create matches.
 The function is called with @var{text}, @var{start}, and @var{end}.
-@var{start} and @var{end} are indices in @code{rl_line_buffer} saying
-what the boundaries of @var{text} are.  If this function exists and
-returns @code{NULL}, or if this variable is set to @code{NULL}, then
-@code{rl_complete ()} will call the value of
+@var{start} and @var{end} are indices in @code{rl_line_buffer} defining
+the boundaries of @var{text}, which is a character string.
+If this function exists and returns @code{NULL}, or if this variable is
+set to @code{NULL}, then @code{rl_complete()} will call the value of
 @code{rl_completion_entry_function} to generate matches, otherwise the
 array of strings returned will be used.
+If this function sets the @code{rl_attempted_completion_over}
+variable to a non-zero value, Readline will not perform its default
+completion even if this function returns no matches.
 @end deftypevar
 
-@deftypevar {CPFunction *} rl_filename_quoting_function
-A pointer to a function that will quote a filename in an application-
-specific fashion.  This is called if filename completion is being
+@deftypevar {rl_quote_func_t *} rl_filename_quoting_function
+A pointer to a function that will quote a filename in an
+application-specific fashion.  This is called if filename completion is being
 attempted and one of the characters in @code{rl_filename_quote_characters}
 appears in a completed filename.  The function is called with
 @var{text}, @var{match_type}, and @var{quote_pointer}.  The @var{text}
@@ -1178,7 +1544,7 @@
 to reset this character.
 @end deftypevar
 
-@deftypevar {CPFunction *} rl_filename_dequoting_function
+@deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function
 A pointer to a function that will remove application-specific quoting
 characters from a filename before completion is attempted, so those
 characters do not interfere with matching the text against names in
@@ -1188,52 +1554,83 @@
 @var{quote_char} is zero, the filename was not in an embedded string.
 @end deftypevar
 
-@deftypevar {Function *} rl_char_is_quoted_p
+@deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p
 A pointer to a function to call that determines whether or not a specific
 character in the line buffer is quoted, according to whatever quoting
-mechanism the program calling readline uses.  The function is called with
+mechanism the program calling Readline uses.  The function is called with
 two arguments: @var{text}, the text of the line, and @var{index}, the
 index of the character in the line.  It is used to decide whether a
 character found in @code{rl_completer_word_break_characters} should be
 used to break words for the completer.
 @end deftypevar
 
-@deftypevar int rl_completion_query_items
-Up to this many items will be displayed in response to a
-possible-completions call.  After that, we ask the user if she is sure
-she wants to see them all.  The default value is 100.
+@deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function
+This function, if defined, is called by the completer when real filename
+completion is done, after all the matching names have been generated.
+It is passed a @code{NULL} terminated array of matches.
+The first element (@code{matches[0]}) is the
+maximal substring common to all matches. This function can
+re-arrange the list of matches as required, but each element deleted
+from the array must be freed.
 @end deftypevar
 
-@deftypevar {char *} rl_basic_word_break_characters
+@deftypevar {rl_icppfunc_t *} rl_directory_completion_hook
+This function, if defined, is allowed to modify the directory portion
+of filenames Readline completes.  It is called with the address of a
+string (the current directory name) as an argument, and may modify that string.
+If the string is replaced with a new string, the old value should be freed.
+Any modified directory name should have a trailing slash.
+The modified value will be displayed as part of the completion, replacing
+the directory portion of the pathname the user typed.
+It returns an integer that should be non-zero if the function modifies
+its directory argument.
+It could be used to expand symbolic links or shell variables in pathnames.
+@end deftypevar
+
+@deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook
+If non-zero, then this is the address of a function to call when
+completing a word would normally display the list of possible matches.
+This function is called in lieu of Readline displaying the list.
+It takes three arguments:
+(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length})
+where @var{matches} is the array of matching strings,
+@var{num_matches} is the number of strings in that array, and
+@var{max_length} is the length of the longest string in that array.
+Readline provides a convenience function, @code{rl_display_match_list},
+that takes care of doing the display to Readline's output stream.  That
+function may be called from this hook.
+@end deftypevar
+
+@deftypevar {const char *} rl_basic_word_break_characters
 The basic list of characters that signal a break between words for the
 completer routine.  The default value of this variable is the characters
-which break words for completion in Bash, i.e.,
+which break words for completion in Bash:
 @code{" \t\n\"\\'`@@$><=;|&@{("}.
 @end deftypevar
 
-@deftypevar {char *} rl_basic_quote_characters
-List of quote characters which can cause a word break.
+@deftypevar {const char *} rl_basic_quote_characters
+A list of quote characters which can cause a word break.
 @end deftypevar
 
-@deftypevar {char *} rl_completer_word_break_characters
+@deftypevar {const char *} rl_completer_word_break_characters
 The list of characters that signal a break between words for
-@code{rl_complete_internal ()}.  The default list is the value of
+@code{rl_complete_internal()}.  The default list is the value of
 @code{rl_basic_word_break_characters}.
 @end deftypevar
 
-@deftypevar {char *} rl_completer_quote_characters
-List of characters which can be used to quote a substring of the line.
+@deftypevar {const char *} rl_completer_quote_characters
+A list of characters which can be used to quote a substring of the line.
 Completion occurs on the entire substring, and within the substring
 @code{rl_completer_word_break_characters} are treated as any other character,
 unless they also appear within this list.
 @end deftypevar
 
-@deftypevar {char *} rl_filename_quote_characters
+@deftypevar {const char *} rl_filename_quote_characters
 A list of characters that cause a filename to be quoted by the completer
 when they appear in a completed filename.  The default is the null string.
 @end deftypevar
 
-@deftypevar {char *} rl_special_prefixes
+@deftypevar {const char *} rl_special_prefixes
 The list of characters that are word break characters, but should be
 left in @var{text} when it is passed to the completion function.
 Programs can use this to help determine what kind of completing to do.
@@ -1241,6 +1638,12 @@
 shell variables and hostnames.
 @end deftypevar
 
+@deftypevar int rl_completion_query_items
+Up to this many items will be displayed in response to a
+possible-completions call.  After that, we ask the user if she is sure
+she wants to see them all.  The default value is 100.
+@end deftypevar
+
 @deftypevar {int} rl_completion_append_character
 When a single completion alternative matches at the end of the command
 line, this character is appended to the inserted completion text.  The
@@ -1251,8 +1654,27 @@
 an application-specific command line syntax specification.
 @end deftypevar
 
+@deftypevar int rl_completion_suppress_append
+If non-zero, @var{rl_completion_append_character} is not appended to
+matches at the end of the command line, as described above.  It is
+set to 0 before any application-specific completion function is called.
+@end deftypevar
+
+@deftypevar int rl_completion_mark_symlink_dirs
+If non-zero, a slash will be appended to completed filenames that are
+symbolic links to directory names, subject to the value of the
+user-settable @var{mark-directories} variable.
+This variable exists so that application completion functions can
+override the user's global preference (set via the
+@var{mark-symlinked-directories} Readline variable) if appropriate.
+This variable is set to the user's preference before any
+application completion function is called, so unless that function
+modifies the value, the user's preferences are honored.
+@end deftypevar
+
 @deftypevar int rl_ignore_completion_duplicates
-If non-zero, then disallow duplicates in the matches.  Default is 1.
+If non-zero, then duplicates in the matches are removed.
+The default is 1.
 @end deftypevar
 
 @deftypevar int rl_filename_completion_desired
@@ -1260,8 +1682,9 @@
 filenames.  This is @emph{always} zero on entry, and can only be changed
 within a completion entry generator function.  If it is set to a non-zero
 value, directory names have a slash appended and Readline attempts to
-quote completed filenames if they contain any embedded word break
-characters.
+quote completed filenames if they contain any characters in
+@code{rl_filename_quote_characters} and @code{rl_filename_quoting_desired}
+is set to a non-zero value.
 @end deftypevar
 
 @deftypevar int rl_filename_quoting_desired
@@ -1274,42 +1697,25 @@
 by @code{rl_filename_quoting_function}.
 @end deftypevar
 
+@deftypevar int rl_attempted_completion_over
+If an application-specific completion function assigned to
+@code{rl_attempted_completion_function} sets this variable to a non-zero
+value, Readline will not perform its default filename completion even
+if the application's completion function returns no matches.
+It should be set only by an application's completion function.
+@end deftypevar
+
+@deftypevar int rl_completion_type
+Set to a character describing the type of completion Readline is currently
+attempting; see the description of @code{rl_complete_internal()}
+(@pxref{Completion Functions}) for the list of characters.
+@end deftypevar
+
 @deftypevar int rl_inhibit_completion
-If this variable is non-zero, completion is inhibit<ed.  The completion
+If this variable is non-zero, completion is inhibited.  The completion
 character will be inserted as any other bound to @code{self-insert}.
 @end deftypevar
 
-@deftypevar {Function *} rl_ignore_some_completions_function
-This function, if defined, is called by the completer when real filename
-completion is done, after all the matching names have been generated.
-It is passed a @code{NULL} terminated array of matches.
-The first element (@code{matches[0]}) is the
-maximal substring common to all matches. This function can
-re-arrange the list of matches as required, but each element deleted
-from the array must be freed.
-@end deftypevar
-
-@deftypevar {Function *} rl_directory_completion_hook
-This function, if defined, is allowed to modify the directory portion
-of filenames Readline completes.  It is called with the address of a
-string (the current directory name) as an argument.  It could be used
-to expand symbolic links or shell variables in pathnames.
-@end deftypevar
-
-@deftypevar {VFunction *} rl_completion_display_matches_hook
-If non-zero, then this is the address of a function to call when
-completing a word would normally display the list of possible matches.
-This function is called in lieu of Readline displaying the list.
-It takes three arguments:
-(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length})
-where @var{matches} is the array of matching strings,
-@var{num_matches} is the number of strings in that array, and
-@var{max_length} is the length of the longest string in that array.
-Readline provides a convenience function, @code{rl_display_match_list},
-that takes care of doing the display to Readline's output stream.  That
-function may be called from this hook.
-@end deftypevar
-
 @node A Short Completion Example
 @subsection A Short Completion Example
 
@@ -1334,19 +1740,25 @@
 #include <readline/readline.h>
 #include <readline/history.h>
 
-extern char *getwd ();
 extern char *xmalloc ();
 
 /* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
+int com_list __P((char *));
+int com_view __P((char *));
+int com_rename __P((char *));
+int com_stat __P((char *));
+int com_pwd __P((char *));
+int com_delete __P((char *));
+int com_help __P((char *));
+int com_cd __P((char *));
+int com_quit __P((char *));
 
 /* A structure which contains information on the commands this program
    can understand. */
 
 typedef struct @{
   char *name;			/* User printable name of the function. */
-  Function *func;		/* Function to call to do the job. */
+  rl_icpfunc_t *func;		/* Function to call to do the job. */
   char *doc;			/* Documentation for this function.  */
 @} COMMAND;
 
@@ -1362,7 +1774,7 @@
   @{ "rename", com_rename, "Rename FILE to NEWNAME" @},
   @{ "stat", com_stat, "Print out statistics on FILE" @},
   @{ "view", com_view, "View the contents of FILE" @},
-  @{ (char *)NULL, (Function *)NULL, (char *)NULL @}
+  @{ (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL @}
 @};
 
 /* Forward declarations. */
@@ -1372,7 +1784,7 @@
 /* The name of this program, as taken from argv[0]. */
 char *progname;
 
-/* When non-zero, this global means the user is done using this program. */
+/* When non-zero, this means the user is done using this program. */
 int done;
 
 char *
@@ -1502,29 +1914,29 @@
 /*                                                                  */
 /* **************************************************************** */
 
-char *command_generator ();
-char **fileman_completion ();
+char *command_generator __P((const char *, int));
+char **fileman_completion __P((const char *, int, int));
 
-/* Tell the GNU Readline library how to complete.  We want to try to complete
-   on command names if this is the first word in the line, or on filenames
-   if not. */
+/* Tell the GNU Readline library how to complete.  We want to try to
+   complete on command names if this is the first word in the line, or
+   on filenames if not. */
 initialize_readline ()
 @{
   /* Allow conditional parsing of the ~/.inputrc file. */
   rl_readline_name = "FileMan";
 
   /* Tell the completer that we want a crack first. */
-  rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+  rl_attempted_completion_function = fileman_completion;
 @}
 
-/* Attempt to complete on the contents of TEXT.  START and END bound the
-   region of rl_line_buffer that contains the word to complete.  TEXT is
-   the word to complete.  We can use the entire contents of rl_line_buffer
-   in case we want to do some simple parsing.  Return the array of matches,
-   or NULL if there aren't any. */
+/* Attempt to complete on the contents of TEXT.  START and END
+   bound the region of rl_line_buffer that contains the word to
+   complete.  TEXT is the word to complete.  We can use the entire
+   contents of rl_line_buffer in case we want to do some simple
+   parsing.  Returnthe array of matches, or NULL if there aren't any. */
 char **
 fileman_completion (text, start, end)
-     char *text;
+     const char *text;
      int start, end;
 @{
   char **matches;
@@ -1535,32 +1947,33 @@
      to complete.  Otherwise it is the name of a file in the current
      directory. */
   if (start == 0)
-    matches = completion_matches (text, command_generator);
+    matches = rl_completion_matches (text, command_generator);
 
   return (matches);
 @}
 
-/* Generator function for command completion.  STATE lets us know whether
-   to start from scratch; without any state (i.e. STATE == 0), then we
-   start at the top of the list. */
+/* Generator function for command completion.  STATE lets us
+   know whether to start from scratch; without any state
+   (i.e. STATE == 0), then we start at the top of the list. */
 char *
 command_generator (text, state)
-     char *text;
+     const char *text;
      int state;
 @{
   static int list_index, len;
   char *name;
 
-  /* If this is a new word to complete, initialize now.  This includes
-     saving the length of TEXT for efficiency, and initializing the index
-     variable to 0. */
+  /* If this is a new word to complete, initialize now.  This
+     includes saving the length of TEXT for efficiency, and
+     initializing the index variable to 0. */
   if (!state)
     @{
       list_index = 0;
       len = strlen (text);
     @}
 
-  /* Return the next name which partially matches from the command list. */
+  /* Return the next name which partially matches from the
+     command list. */
   while (name = commands[list_index].name)
     @{
       list_index++;
@@ -1705,7 +2118,7 @@
 @{
   char dir[1024], *s;
 
-  s = getwd (dir);
+  s = getcwd (dir, sizeof(dir) - 1);
   if (s == 0)
     @{
       printf ("Error getting pwd: %s\n", dir);
@@ -1716,7 +2129,8 @@
   return 0;
 @}
 
-/* The user wishes to quit using this program.  Just set DONE non-zero. */
+/* The user wishes to quit using this program.  Just set DONE
+   non-zero. */
 com_quit (arg)
      char *arg;
 @{
@@ -1729,12 +2143,13 @@
      char *caller;
 @{
   fprintf (stderr,
-           "%s: Too dangerous for me to distribute.  Write it yourself.\n",
+           "%s: Too dangerous for me to distribute.\n"
            caller);
+  fprintf (stderr, "Write it yourself.\n");
 @}
 
-/* Return non-zero if ARG is a valid argument for CALLER, else print
-   an error message and return zero. */
+/* Return non-zero if ARG is a valid argument for CALLER,
+   else print an error message and return zero. */
 int
 valid_argument (caller, arg)
      char *caller, *arg;
diff --git a/readline/doc/rluser.texinfo b/readline/doc/rluser.texinfo
index 9f088ff..94f851e 100644
--- a/readline/doc/rluser.texinfo
+++ b/readline/doc/rluser.texinfo
@@ -10,7 +10,7 @@
 which contains both end-user and programmer documentation for the
 GNU Readline Library.
 
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
 Authored by Brian Fox and Chet Ramey.
 
@@ -72,11 +72,11 @@
 The following paragraphs describe the notation used to represent
 keystrokes.
 
-The text @key{C-k} is read as `Control-K' and describes the character
+The text @kbd{C-k} is read as `Control-K' and describes the character
 produced when the @key{k} key is pressed while the Control key
 is depressed.
 
-The text @key{M-k} is read as `Meta-K' and describes the character
+The text @kbd{M-k} is read as `Meta-K' and describes the character
 produced when the Meta key (if you have one) is depressed, and the @key{k}
 key is pressed.
 The Meta key is labeled @key{ALT} on many keyboards.
@@ -89,11 +89,11 @@
 
 If you do not have a Meta or @key{ALT} key, or another key working as
 a Meta key, the identical keystroke can be generated by typing @key{ESC}
-@i{first}, and then typing @key{k}.
+@emph{first}, and then typing @key{k}.
 Either process is known as @dfn{metafying} the @key{k} key.
 
-The text @key{M-C-k} is read as `Meta-Control-k' and describes the
-character produced by @dfn{metafying} @key{C-k}.
+The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the
+character produced by @dfn{metafying} @kbd{C-k}.
 
 In addition, several keys have their own names.  Specifically,
 @key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
@@ -115,8 +115,8 @@
 you to retype the majority of the line.  Using these editing commands,
 you move the cursor to the place that needs correction, and delete or
 insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press @key{RETURN}.  You do not have to be at the
-end of the line to press @key{RETURN}; the entire line is accepted
+the line, you simply press @key{RET}.  You do not have to be at the
+end of the line to press @key{RET}; the entire line is accepted
 regardless of the location of the cursor within the line.
 
 @menu
@@ -140,9 +140,9 @@
 
 Sometimes you may mistype a character, and
 not notice the error until you have typed several other characters.  In
-that case, you can type @key{C-b} to move the cursor to the left, and then
+that case, you can type @kbd{C-b} to move the cursor to the left, and then
 correct your mistake.  Afterwards, you can move the cursor to the right
-with @key{C-f}.
+with @kbd{C-f}.
 
 When you add text in the middle of a line, you will notice that characters
 to the right of the cursor are `pushed over' to make room for the text
@@ -152,17 +152,17 @@
 essentials for editing the text of an input line follows.
 
 @table @asis
-@item @key{C-b}
+@item @kbd{C-b}
 Move back one character.
-@item @key{C-f}
+@item @kbd{C-f}
 Move forward one character.
 @item @key{DEL} or @key{Backspace}
 Delete the character to the left of the cursor.
-@item @key{C-d}
+@item @kbd{C-d}
 Delete the character underneath the cursor.
 @item @w{Printing characters}
 Insert the character into the line at the cursor.
-@item @key{C-_} or @key{C-x C-u}
+@item @kbd{C-_} or @kbd{C-x C-u}
 Undo the last editing command.  You can undo all the way back to an
 empty line.
 @end table
@@ -170,7 +170,7 @@
 @noindent
 (Depending on your configuration, the @key{Backspace} key be set to
 delete the character to the left of the cursor and the @key{DEL} key set
-to delete the character underneath the cursor, like @key{C-d}, rather
+to delete the character underneath the cursor, like @kbd{C-d}, rather
 than the character to the left of the cursor.)
 
 @node Readline Movement Commands
@@ -179,11 +179,11 @@
 
 The above table describes the most basic keystrokes that you need
 in order to do editing of the input line.  For your convenience, many
-other commands have been added in addition to @key{C-b}, @key{C-f},
-@key{C-d}, and @key{DEL}.  Here are some commands for moving more rapidly
+other commands have been added in addition to @kbd{C-b}, @kbd{C-f},
+@kbd{C-d}, and @key{DEL}.  Here are some commands for moving more rapidly
 about the line.
 
-@table @key
+@table @kbd
 @item C-a
 Move to the start of the line.
 @item C-e
@@ -196,7 +196,7 @@
 Clear the screen, reprinting the current line at the top.
 @end table
 
-Notice how @key{C-f} moves forward a character, while @key{M-f} moves
+Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves
 forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
 
@@ -225,36 +225,36 @@
 
 Here is the list of commands for killing text.
 
-@table @key
+@table @kbd
 @item C-k
 Kill the text from the current cursor position to the end of the line.
 
 @item M-d
 Kill from the cursor to the end of the current word, or, if between
 words, to the end of the next word.
-Word boundaries are the same as those used by @key{M-f}.
+Word boundaries are the same as those used by @kbd{M-f}.
 
-@item M-DEL
-Kill from the cursor the start of the previous word, or, if between
+@item M-@key{DEL}
+Kill from the cursor the start of the current word, or, if between
 words, to the start of the previous word.
-Word boundaries are the same as those used by @key{M-b}.
+Word boundaries are the same as those used by @kbd{M-b}.
 
 @item C-w
 Kill from the cursor to the previous whitespace.  This is different than
-@key{M-DEL} because the word boundaries differ.
+@kbd{M-@key{DEL}} because the word boundaries differ.
 
 @end table
 
 Here is how to @dfn{yank} the text back into the line.  Yanking
 means to copy the most-recently-killed text from the kill buffer.
 
-@table @key
+@table @kbd
 @item C-y
 Yank the most recently killed text back into the buffer at the cursor.
 
 @item M-y
 Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is @key{C-y} or @key{M-y}.
+the prior command is @kbd{C-y} or @kbd{M-y}.
 @end table
 
 @node Readline Arguments
@@ -272,7 +272,8 @@
 sign (@samp{-}), then the sign of the argument will be negative.  Once
 you have typed one meta digit to get the argument started, you can type
 the remainder of the digits, and then the command.  For example, to give
-the @key{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}.
+the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d},
+which will delete the next ten characters on the input line.
 
 @node Searching
 @subsection Searching for Commands in the History
@@ -282,7 +283,7 @@
 (@pxref{Bash History Facilities})
 @end ifset
 for lines containing a specified string.
-There are two search modes:  @var{incremental} and @var{non-incremental}.
+There are two search modes:  @dfn{incremental} and @dfn{non-incremental}.
 
 Incremental searches begin before the user has finished typing the
 search string.
@@ -291,23 +292,29 @@
 An incremental search requires only as many characters as needed to
 find the desired history entry.
 To search backward in the history for a particular string, type
-@key{C-r}.  Typing @key{C-s} searches forward through the history.
+@kbd{C-r}.  Typing @kbd{C-s} searches forward through the history.
 The characters present in the value of the @code{isearch-terminators} variable
 are used to terminate an incremental search.
 If that variable has not been assigned a value, the @key{ESC} and
-@key{C-J} characters will terminate an incremental search.
-@key{C-g} will abort an incremental search and restore the original line.
+@kbd{C-J} characters will terminate an incremental search.
+@kbd{C-g} will abort an incremental search and restore the original line.
 When the search is terminated, the history entry containing the
 search string becomes the current line.
 
-To find other matching entries in the history list, type @key{C-r} or
-@key{C-s} as appropriate.
+To find other matching entries in the history list, type @kbd{C-r} or
+@kbd{C-s} as appropriate.
 This will search backward or forward in the history for the next
 entry matching the search string typed so far.
 Any other key sequence bound to a Readline command will terminate
 the search and execute that command.
 For instance, a @key{RET} will terminate the search and accept
 the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+
+Readline remembers the last incremental search string.  If two
+@kbd{C-r}s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
 
 Non-incremental searches read the entire search string before starting
 to search for matching history lines.  The search string may be
@@ -324,10 +331,10 @@
 commands in an @dfn{inputrc} file, conventionally in his home directory.
 The name of this
 @ifset BashFeatures
-file is taken from the value of the shell variable @code{INPUTRC}.  If
+file is taken from the value of the shell variable @env{INPUTRC}.  If
 @end ifset
 @ifclear BashFeatures
-file is taken from the value of the environment variable @code{INPUTRC}.  If
+file is taken from the value of the environment variable @env{INPUTRC}.  If
 @end ifclear
 that variable is unset, the default is @file{~/.inputrc}.
 
@@ -359,7 +366,15 @@
 @item Variable Settings
 You can modify the run-time behavior of Readline by
 altering the values of variables in Readline
-using the @code{set} command within the init file.  Here is how to
+using the @code{set} command within the init file.
+The syntax is simple:
+
+@example
+set @var{variable} @var{value}
+@end example
+
+@noindent
+Here, for example, is how to
 change from the default Emacs-like key binding to use
 @code{vi} line editing commands:
 
@@ -367,6 +382,9 @@
 set editing-mode vi
 @end example
 
+Variable names and values, where appropriate, are recognized without regard
+to case. 
+
 @ifset BashFeatures
 The @w{@code{bind -V}} command lists the current Readline variable names
 and values.  @xref{Bash Builtins}.
@@ -375,6 +393,7 @@
 A great deal of run-time behavior is changeable with the following
 variables.
 
+@cindex variables, readline
 @table @code
 
 @item bell-style
@@ -402,13 +421,14 @@
 asked whether he wants to see the list of possibilities.  If the
 number of possible completions is greater than this value,
 Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed.  The default limit is
-@code{100}.
+them; otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to 0.
+The default limit is @code{100}.
 
 @item convert-meta
 @vindex convert-meta
 If set to @samp{on}, Readline will convert characters with the
-eighth bit set to an ASCII key sequence by stripping the eighth
+eighth bit set to an @sc{ascii} key sequence by stripping the eighth
 bit and prefixing an @key{ESC} character, converting them to a
 meta-prefixed key sequence.  The default value is @samp{on}.
 
@@ -436,6 +456,11 @@
 If set to @samp{on}, tilde expansion is performed when Readline
 attempts word completion.  The default is @samp{off}.
 
+@vindex history-preserve-point
+If set to @samp{on}, the history code attempts to place point at the
+same location on each history line retrived with @code{previous-history}
+or @code{next-history}.
+
 @item horizontal-scroll-mode
 @vindex horizontal-scroll-mode
 This variable can be set to either @samp{on} or @samp{off}.  Setting it
@@ -448,7 +473,7 @@
 @vindex input-meta
 @vindex meta-flag
 If set to @samp{on}, Readline will enable eight-bit input (it
-will not strip the eighth bit from the characters it reads),
+will not clear the eighth bit in the characters it reads),
 regardless of what the terminal claims it can support.  The
 default value is @samp{off}.  The name @code{meta-flag} is a
 synonym for this variable.
@@ -458,7 +483,7 @@
 The string of characters that should terminate an incremental search without
 subsequently executing the character as a command (@pxref{Searching}).
 If this variable has not been given a value, the characters @key{ESC} and
-@key{C-J} will terminate an incremental search.
+@kbd{C-J} will terminate an incremental search.
 
 @item keymap
 @vindex keymap
@@ -469,6 +494,7 @@
 @code{emacs-meta},
 @code{emacs-ctlx},
 @code{vi},
+@code{vi-move},
 @code{vi-command}, and
 @code{vi-insert}.
 @code{vi} is equivalent to @code{vi-command}; @code{emacs} is
@@ -486,12 +512,33 @@
 asterisk (@samp{*}) at the start of history lines which have been modified.
 This variable is @samp{off} by default.
 
+@item mark-symlinked-directories
+@vindex mark-symlinked-directories
+If set to @samp{on}, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+@code{mark-directories}).
+The default is @samp{off}.
+
+@item match-hidden-files
+@vindex match-hidden-files
+This variable, when set to @samp{on}, causes Readline to match files whose
+names begin with a @samp{.} (hidden files) when performing filename
+completion, unless the leading @samp{.} is
+supplied by the user in the filename to be completed.
+This variable is @samp{on} by default.
+
 @item output-meta
 @vindex output-meta
 If set to @samp{on}, Readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
 sequence.  The default is @samp{off}.
 
+@item page-completions
+@vindex page-completions
+If set to @samp{on}, Readline uses an internal @code{more}-like pager
+to display a screenful of possible completions at a time.
+This variable is @samp{on} by default.
+
 @item print-completions-horizontally
 If set to @samp{on}, Readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
@@ -520,11 +567,15 @@
 name, the default keybinding, if any, and a short description of what
 the command does.
 
-Once you know the name of the command, simply place the name of the key
+Once you know the name of the command, simply place on a line
+in the init file the name of the key
 you wish to bind the command to, a colon, and then the name of the
-command on a line in the init file.  The name of the key
-can be expressed in different ways, depending on which is most
-comfortable for you.
+command.  The name of the key
+can be expressed in different ways, depending on what you find most
+comfortable.
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a @var{macro}).
 
 @ifset BashFeatures
 The @w{@code{bind -p}} command displays Readline function names and
@@ -541,11 +592,28 @@
 Control-o: "> output"
 @end example
 
-In the above example, @key{C-u} is bound to the function
-@code{universal-argument}, and @key{C-o} is bound to run the macro
+In the above example, @kbd{C-u} is bound to the function
+@code{universal-argument},
+@kbd{M-DEL} is bound to the function @code{backward-kill-word}, and
+@kbd{C-o} is bound to run the macro
 expressed on the right hand side (that is, to insert the text
 @samp{> output} into the line).
 
+A number of symbolic character names are recognized while
+processing this key binding syntax:
+@var{DEL},
+@var{ESC},
+@var{ESCAPE},
+@var{LFD},
+@var{NEWLINE},
+@var{RET},
+@var{RETURN},
+@var{RUBOUT},
+@var{SPACE},
+@var{SPC},
+and
+@var{TAB}.
+
 @item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
 @var{keyseq} differs from @var{keyname} above in that strings
 denoting an entire key sequence can be specified, by placing
@@ -559,9 +627,9 @@
 "\e[11~": "Function Key 1"
 @end example
 
-In the above example, @key{C-u} is bound to the function
+In the above example, @kbd{C-u} is again bound to the function
 @code{universal-argument} (just as it was in the first example),
-@samp{@key{C-x} @key{C-r}} is bound to the function @code{re-read-init-file},
+@samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file},
 and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert
 the text @samp{Function Key 1}.
 
@@ -606,11 +674,11 @@
 @item \v
 vertical tab
 @item \@var{nnn}
-the character whose @code{ASCII} code is the octal value @var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
 (one to three digits)
-@item \x@var{nnn}
-the character whose @code{ASCII} code is the hexadecimal value @var{nnn}
-(one to three digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
 @end table
 
 When entering the text of a macro, single or double quotes must
@@ -619,7 +687,7 @@
 In the macro body, the backslash escapes described above are expanded.
 Backslash will quote any other character in the macro text,
 including @samp{"} and @samp{'}.
-For example, the following binding will make @samp{C-x \}
+For example, the following binding will make @samp{@kbd{C-x} \}
 insert a single @samp{\} into the line:
 @example
 "\C-x\\": "\\"
@@ -663,7 +731,8 @@
 @item application
 The @var{application} construct is used to include
 application-specific settings.  Each program using the Readline
-library sets the @var{application name}, and you can test for it. 
+library sets the @var{application name}, and you can test for
+a particular value. 
 This could be used to bind key sequences to functions useful for
 a specific program.  For instance, the following command adds a
 key sequence that quotes the current or previous word in Bash:
@@ -686,6 +755,7 @@
 @item $include
 This directive takes a single filename as an argument and reads commands
 and bindings from that file.
+For example, the following directive reads from @file{/etc/inputrc}:
 @example
 $include /etc/inputrc
 @end example
@@ -694,20 +764,20 @@
 @node Sample Init File
 @subsection Sample Init File
 
-Here is an example of an inputrc file.  This illustrates key
+Here is an example of an @var{inputrc} file.  This illustrates key
 binding, variable assignment, and conditional syntax.
 
 @example
 @page
 # This file controls the behaviour of line input editing for
-# programs that use the Gnu Readline library.  Existing programs
-# include FTP, Bash, and Gdb.
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
 #
 # You can re-read the inputrc file with C-x C-r.
 # Lines beginning with '#' are comments.
 #
-# First, include any systemwide bindings and variable assignments from
-# /etc/Inputrc
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
 $include /etc/Inputrc
 
 #
@@ -759,10 +829,12 @@
 $if Bash
 # edit the path
 "\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word -- insert open and close double quotes
+# prepare to type a quoted word --
+# insert open and close double quotes
 # and move to just after the open quote
 "\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes in sequences and macros)
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
 "\C-x\\": "\\"
 # Quote the current or previous word
 "\C-xq": "\eb\"\ef\""
@@ -778,16 +850,16 @@
 # don't strip characters to 7 bits when reading
 set input-meta on
 
-# allow iso-latin1 characters to be inserted rather than converted to
-# prefix-meta sequences
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
 set convert-meta off
 
-# display characters with the eighth bit set directly rather than
-# as meta-prefixed characters
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
 set output-meta on
 
-# if there are more than 150 possible completions for a word, ask the
-# user if he wants to see all of them
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
 set completion-query-items 150
 
 # For FTP
@@ -819,12 +891,12 @@
 @w{@code{bind -P}} or, for a more terse format, suitable for an
 @var{inputrc} file, @w{@code{bind -p}}.  (@xref{Bash Builtins}.)
 @end ifset
-
 Command names without an accompanying key sequence are unbound by default.
-In the following descriptions, @var{point} refers to the current cursor
-position, and @var{mark} refers to a cursor position saved by the
+
+In the following descriptions, @dfn{point} refers to the current cursor
+position, and @dfn{mark} refers to a cursor position saved by the
 @code{set-mark} command.
-The text between the point and mark is referred to as the @var{region}.
+The text between the point and mark is referred to as the @dfn{region}.
 
 @node Commands For Moving
 @subsection Commands For Moving
@@ -862,25 +934,29 @@
 @subsection Commands For Manipulating The History
 
 @ftable @code
-@item accept-line (Newline, Return)
+@item accept-line (Newline or Return)
 @ifset BashFeatures
-Accept the line regardless of where the cursor is.  If this line is
+Accept the line regardless of where the cursor is.
+If this line is
 non-empty, add it to the history list according to the setting of
-the @code{HISTCONTROL} and @code{HISTIGNORE} variables.
-If this line was a history line, then restore the history line to its
-original state.
+the @env{HISTCONTROL} and @env{HISTIGNORE} variables.
+If this line is a modified history line, then restore the history line
+to its original state.
 @end ifset
 @ifclear BashFeatures
-Accept the line regardless of where the cursor is.  If this line is
-non-empty, add it to the history list.  If this line was a history
-line, then restore the history line to its original state.
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+@code{add_history()}.
+If this line is a modified history line, the history line is restored
+to its original state.
 @end ifclear
 
 @item previous-history (C-p)
-Move `up' through the history list.
+Move `back' through the history list, fetching the previous command.
 
 @item next-history (C-n)
-Move `down' through the history list.
+Move `forward' through the history list, fetching the next command.
 
 @item beginning-of-history (M-<)
 Move to the first line in the history.
@@ -920,12 +996,13 @@
 
 @item yank-nth-arg (M-C-y)
 Insert the first argument to the previous command (usually
-the second word on the previous line).  With an argument @var{n},
+the second word on the previous line) at point.
+With an argument @var{n},
 insert the @var{n}th word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
 inserts the @var{n}th word from the end of the previous command.
 
-@item yank-last-arg (M-., M-_)
+@item yank-last-arg (M-. or M-_)
 Insert last argument to the previous command (the last word of the
 previous history entry).  With an
 argument, behave exactly like @code{yank-nth-arg}.
@@ -939,10 +1016,10 @@
 
 @ftable @code
 @item delete-char (C-d)
-Delete the character under the cursor.  If the cursor is at the
+Delete the character at point.  If point is at the
 beginning of the line, there are no characters in the line, and
 the last character typed was not bound to @code{delete-char}, then
-return @code{EOF}.
+return @sc{eof}.
 
 @item backward-delete-char (Rubout)
 Delete the character behind the cursor.  A numeric argument means
@@ -953,16 +1030,16 @@
 end of the line, in which case the character behind the cursor is
 deleted.  By default, this is not bound to a key.
 
-@item quoted-insert (C-q, C-v)
+@item quoted-insert (C-q or C-v)
 Add the next character typed to the line verbatim.  This is
-how to insert key sequences like @key{C-q}, for example.
+how to insert key sequences like @kbd{C-q}, for example.
 
 @ifclear BashFeatures
-@item tab-insert (M-TAB)
+@item tab-insert (M-@key{TAB})
 Insert a tab character.
 @end ifclear
 
-@item self-insert (a, b, A, 1, !, ...)
+@item self-insert (a, b, A, 1, !, @dots{})
 Insert yourself.
 
 @item transpose-chars (C-t)
@@ -976,6 +1053,8 @@
 @item transpose-words (M-t)
 Drag the word before point past the word after point,
 moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
 
 @item upcase-word (M-u)
 Uppercase the current (or following) word.  With a negative argument,
@@ -989,6 +1068,20 @@
 Capitalize the current (or following) word.  With a negative argument,
 capitalize the previous word, but do not move the cursor.
 
+@item overwrite-mode ()
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+@code{emacs} mode; @code{vi} mode does overwrite differently.
+Each call to @code{readline()} starts in insert mode.
+
+In overwrite mode, characters bound to @code{self-insert} replace
+the text at point rather than pushing the text to the right.
+Characters bound to @code{backward-delete-char} replace the character
+before point with a space.
+
+By default, this command is unbound.
+
 @end ftable
 
 @node Commands For Killing
@@ -1006,7 +1099,7 @@
 Kill backward from the cursor to the beginning of the current line.
 
 @item kill-whole-line ()
-Kill all characters on the current line, no matter point is.
+Kill all characters on the current line, no matter where point is.
 By default, this is unbound.
 
 @item kill-word (M-d)
@@ -1014,7 +1107,7 @@
 words, to the end of the next word.
 Word boundaries are the same as @code{forward-word}.
 
-@item backward-kill-word (M-DEL)
+@item backward-kill-word (M-@key{DEL})
 Kill the word behind point.
 Word boundaries are the same as @code{backward-word}.
 
@@ -1044,21 +1137,20 @@
 By default, this command is unbound.
 
 @item yank (C-y)
-Yank the top of the kill ring into the buffer at the current
-cursor position.
+Yank the top of the kill ring into the buffer at point.
 
 @item yank-pop (M-y)
 Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is yank or yank-pop.
+the prior command is @code{yank} or @code{yank-pop}.
 @end ftable
 
 @node Numeric Arguments
 @subsection Specifying Numeric Arguments
 @ftable @code
 
-@item digit-argument (M-0, M-1, ... M--)
+@item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--})
 Add this digit to the argument already accumulating, or start a new
-argument.  @key{M--} starts a negative argument.
+argument.  @kbd{M--} starts a negative argument.
 
 @item universal-argument ()
 This is another way to specify an argument.
@@ -1079,13 +1171,9 @@
 @subsection Letting Readline Type For You
 
 @ftable @code
-@item complete (TAB)
-Attempt to do completion on the text before the cursor.  This is
-application-specific.  Generally, if you are typing a filename
-argument, you can do filename completion; if you are typing a command,
-you can do command completion; if you are typing in a symbol to GDB, you
-can do symbol name completion; if you are typing in a variable to Bash,
-you can do variable name completion, and so on.
+@item complete (@key{TAB})
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
 @ifset BashFeatures
 Bash attempts completion treating the text as a variable (if the
 text begins with @samp{$}), username (if the text begins with
@@ -1093,9 +1181,12 @@
 command (including aliases and functions) in turn.  If none 
 of these produces a match, filename completion is attempted.
 @end ifset
+@ifclear BashFeatures
+The default is filename completion.
+@end ifclear
 
 @item possible-completions (M-?)
-List the possible completions of the text before the cursor.
+List the possible completions of the text before point.
 
 @item insert-completions (M-*)
 Insert all completions of the text before point that would have
@@ -1106,12 +1197,13 @@
 with a single match from the list of possible completions.
 Repeated execution of @code{menu-complete} steps through the list
 of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
+At the end of the list of completions, the bell is rung
+(subject to the setting of @code{bell-style})
+and the original text is restored.
 An argument of @var{n} moves @var{n} positions forward in the list
 of matches; a negative argument may be used to move backward
 through the list.
-This command is intended to be bound to @code{TAB}, but is unbound
+This command is intended to be bound to @key{TAB}, but is unbound
 by default.
 
 @item delete-char-or-list ()
@@ -1164,7 +1256,7 @@
 List the possible completions of the text before point,
 treating it as a command name.
 
-@item dynamic-complete-history (M-TAB)
+@item dynamic-complete-history (M-@key{TAB})
 Attempt completion on the text before point, comparing
 the text against lines from the history list for possible
 completion matches.
@@ -1211,12 +1303,12 @@
 If the metafied character @var{x} is lowercase, run the command
 that is bound to the corresponding uppercase character.
 
-@item prefix-meta (ESC)
-Make the next character typed be metafied.  This is for keyboards
-without a meta key.  Typing @samp{ESC f} is equivalent to typing
-@samp{M-f}.
+@item prefix-meta (@key{ESC})
+Metafy the next character typed.  This is for keyboards
+without a meta key.  Typing @samp{@key{ESC} f} is equivalent to typing
+@kbd{M-f}.
 
-@item undo (C-_, C-x C-u)
+@item undo (C-_ or C-x C-u)
 Incremental undo, separately remembered for each line.
 
 @item revert-line (M-r)
@@ -1232,7 +1324,7 @@
 Perform tilde expansion on the current word.
 
 @item set-mark (C-@@)
-Set the mark to the current point.  If a
+Set the mark to the point.  If a
 numeric argument is supplied, the mark is set to that position.
 
 @item exchange-point-and-mark (C-x C-x)
@@ -1249,12 +1341,19 @@
 occurrences.
 
 @item insert-comment (M-#)
-The value of the @code{comment-begin}
-variable is inserted at the beginning of the current line,
-and the line is accepted as if a newline had been typed.
+Without a numeric argument, the value of the @code{comment-begin}
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value
+of @code{comment-begin}, the value is inserted, otherwise
+the characters in @code{comment-begin} are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
 @ifset BashFeatures
 The default value of @code{comment-begin} causes this command
 to make the current line a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
 @end ifset
 
 @item dump-functions ()
@@ -1271,18 +1370,27 @@
 
 @item dump-macros ()
 Print all of the Readline key sequences bound to macros and the
-strings they ouput.  If a numeric argument is supplied,
+strings they output.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an @var{inputrc} file.  This command is unbound by default.
 
 @ifset BashFeatures
+@item glob-complete-word (M-g)
+The word before point is treated as a pattern for pathname expansion,
+with an asterisk implicitly appended.  This pattern is used to
+generate a list of matching file names for possible completions.
+
 @item glob-expand-word (C-x *)
 The word before point is treated as a pattern for pathname expansion,
 and the list of matching file names is inserted, replacing the word.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
 
 @item glob-list-expansions (C-x g)
 The list of expansions that would have been generated by
 @code{glob-expand-word} is displayed, and the line is redrawn.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
 
 @item display-shell-version (C-x C-v)
 Display version information about the current instance of Bash.
@@ -1305,7 +1413,7 @@
 @item history-and-alias-expand-line ()
 Perform history and alias expansion on the current line.
 
-@item insert-last-argument (M-., M-_)
+@item insert-last-argument (M-. or M-_)
 A synonym for @code{yank-last-arg}.
 
 @item operate-and-get-next (C-o)
@@ -1313,13 +1421,26 @@
 relative to the current line from the history for editing.  Any
 argument is ignored.
 
-@item emacs-editing-mode (C-e)
-When in @code{vi} editing mode, this causes a switch back to
-@code{emacs} editing mode, as if the command @samp{set -o emacs} had
-been executed.
+@item edit-and-execute-command (C-xC-e)
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+Bash attempts to invoke
+@code{$FCEDIT}, @code{$EDITOR}, and @code{emacs}
+as the editor, in that order.
 
 @end ifset
 
+@ifclear BashFeatures
+@item emacs-editing-mode (C-e)
+When in @code{vi} command mode, this causes a switch to @code{emacs}
+editing mode.
+
+@item vi-editing-mode (M-C-j)
+When in @code{emacs} editing mode, this causes a switch to @code{vi}
+editing mode.
+
+@end ifclear
+
 @end ftable
 
 @node Readline vi Mode
@@ -1328,7 +1449,7 @@
 While the Readline library does not have a full set of @code{vi}
 editing functions, it does contain enough to allow simple editing
 of the line.  The Readline @code{vi} mode behaves as specified in
-the @sc{POSIX} 1003.2 standard.
+the @sc{posix} 1003.2 standard.
 
 @ifset BashFeatures
 In order to switch interactively between @code{emacs} and @code{vi}
@@ -1337,7 +1458,8 @@
 @end ifset
 @ifclear BashFeatures
 In order to switch interactively between @code{emacs} and @code{vi}
-editing modes, use the command M-C-j (toggle-editing-mode).
+editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode
+when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode).
 @end ifclear
 The Readline default is @code{emacs} mode.
 
@@ -1374,20 +1496,20 @@
 First, the actions specified by the compspec are used.
 Only matches which are prefixed by the word being completed are
 returned.
-When the @samp{-f} or @samp{-d} option is used for filename or
-directory name completion, the shell variable @code{FIGNORE} is
+When the @option{-f} or @option{-d} option is used for filename or
+directory name completion, the shell variable @env{FIGNORE} is
 used to filter the matches.
-@xref{Bash Variables}, for a description of @code{FIGNORE}.
+@xref{Bash Variables}, for a description of @env{FIGNORE}.
 
 Any completions specified by a filename expansion pattern to the
-@samp{-G} option are generated next.
+@option{-G} option are generated next.
 The words generated by the pattern need not match the word being completed.
-The @code{GLOBIGNORE} shell variable is not used to filter the matches,
-but the @code{FIGNORE} shell variable is used.
+The @env{GLOBIGNORE} shell variable is not used to filter the matches,
+but the @env{FIGNORE} shell variable is used.
 
-Next, the string specified as the argument to the @samp{-W} option
+Next, the string specified as the argument to the @option{-W} option
 is considered.
-The string is first split using the characters in the @code{IFS}
+The string is first split using the characters in the @env{IFS}
 special variable as delimiters.
 Shell quoting is honored.
 Each word is then expanded using
@@ -1400,12 +1522,12 @@
 completed, and the matching words become the possible completions.
 
 After these matches have been generated, any shell function or command
-specified with the @samp{-F} and @samp{-C} options is invoked.
-When the command or function is invoked, the @code{COMP_LINE} and
-@code{COMP_POINT} variables are assigned values as described above
+specified with the @option{-F} and @option{-C} options is invoked.
+When the command or function is invoked, the @env{COMP_LINE} and
+@env{COMP_POINT} variables are assigned values as described above
 (@pxref{Bash Variables}).
-If a shell function is being invoked, the @code{COMP_WORDS} and
-@code{COMP_CWORD} variables are also set.
+If a shell function is being invoked, the @env{COMP_WORDS} and
+@env{COMP_CWORD} variables are also set.
 When the function or command is invoked, the first argument is the
 name of the command whose arguments are being completed, the
 second argument is the word being completed, and the third argument
@@ -1414,21 +1536,21 @@
 is performed; the function or command has complete freedom in generating
 the matches.
 
-Any function specified with @samp{-F} is invoked first.
+Any function specified with @option{-F} is invoked first.
 The function may use any of the shell facilities, including the
 @code{compgen} builtin described below
 (@pxref{Programmable Completion Builtins}), to generate the matches.
-It must put the possible completions in the @code{COMPREPLY} array
+It must put the possible completions in the @env{COMPREPLY} array
 variable.
 
-Next, any command specified with the @samp{-C} option is invoked
+Next, any command specified with the @option{-C} option is invoked
 in an environment equivalent to command substitution.
 It should print a list of completions, one per line, to
 the standard output.
 Backslash may be used to escape a newline, if necessary.
 
 After all of the possible completions are generated, any filter
-specified with the @samp{-X} option is applied to the list.
+specified with the @option{-X} option is applied to the list.
 The filter is a pattern as used for pathname expansion; a @samp{&}
 in the pattern is replaced with the text of the word being completed.
 A literal @samp{&} may be escaped with a backslash; the backslash
@@ -1437,15 +1559,28 @@
 A leading @samp{!} negates the pattern; in this case any completion
 not matching the pattern will be removed.
 
-Finally, any prefix and suffix specified with the @samp{-P} and @samp{-S}
+Finally, any prefix and suffix specified with the @option{-P} and @option{-S}
 options are added to each member of the completion list, and the result is
 returned to the Readline completion code as the list of possible
 completions.
 
-If a compspec is found, whatever it generates is returned to the completion
-code as the full set of possible completions.
-The default Bash completions are not attempted, and the Readline
-default of filename completion is disabled.
+If the previously-applied actions do not generate any matches, and the
+@option{-o dirnames} option was supplied to @code{complete} when the
+compspec was defined, directory name completion is attempted. 
+
+By default, if a compspec is found, whatever it generates is returned to
+the completion code as the full set of possible completions.
+The default Bash completions are not attempted, and the Readline default
+of filename completion is disabled.
+If the @option{-o default} option was supplied to @code{complete} when the
+compspec was defined, Readline's default completion will be performed
+if the compspec generates no matches.
+
+When a compspec indicates that directory name completion is desired,
+the programmable completion functions force Readline to append a slash
+to completed names which are symbolic links to directories, subject to
+the value of the @var{mark-directories} Readline variable, regardless
+of the setting of the @var{mark-symlinked-directories} Readline variable.
 
 @node Programmable Completion Builtins
 @section Programmable Completion Builtins
@@ -1464,9 +1599,9 @@
 Generate possible completion matches for @var{word} according to
 the @var{option}s, which may be any option accepted by the
 @code{complete}
-builtin with the exception of @samp{-p} and @samp{-r}, and write
+builtin with the exception of @option{-p} and @option{-r}, and write
 the matches to the standard output.
-When using the @samp{-F} or @samp{-C} options, the various shell variables
+When using the @option{-F} or @option{-C} options, the various shell variables
 set by the programmable completion facilities, while available, will not
 have useful values.
 
@@ -1482,17 +1617,17 @@
 @item complete
 @btindex complete
 @example
-@code{complete [-abcdefjkvu] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
+@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
 [-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}]
 [-C @var{command}] @var{name} [@var{name} @dots{}]}
 @code{complete -pr [@var{name} @dots{}]}
 @end example
 
 Specify how arguments to each @var{name} should be completed.
-If the @samp{-p} option is supplied, or if no options are supplied, existing
+If the @option{-p} option is supplied, or if no options are supplied, existing
 completion specifications are printed in a way that allows them to be
 reused as input.
-The @samp{-r} option removes a completion specification for
+The @option{-r} option removes a completion specification for
 each @var{name}, or, if no @var{name}s are supplied, all
 completion specifications.
 
@@ -1500,19 +1635,45 @@
 is attempted is described above (@pxref{Programmable Completion}).
 
 Other options, if specified, have the following meanings.
-The arguments to the @samp{-G}, @samp{-W}, and @samp{-X} options
-(and, if necessary, the @samp{-P} and @samp{-S} options)
+The arguments to the @option{-G}, @option{-W}, and @option{-X} options
+(and, if necessary, the @option{-P} and @option{-S} options)
 should be quoted to protect them from expansion before the
 @code{complete} builtin is invoked.
 
+
 @table @code
+@item -o @var{comp-option}
+The @var{comp-option} controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+@var{comp-option} may be one of: 
+
+@table @code
+
+@item default
+Use Readline's default filename completion if the compspec generates
+no matches.
+
+@item dirnames
+Perform directory name completion if the compspec generates no matches.
+
+@item filenames
+Tell Readline that the compspec generates filenames, so it can perform any
+filename\-specific processing (like adding a slash to directory names or
+suppressing trailing spaces).  This option is intended to be used with
+shell functions specified with @option{-F}.
+
+@item nospace
+Tell Readline not to append a space (the default) to words completed at
+the end of the line.
+@end table
+
 @item -A @var{action}
 The @var{action} may be one of the following to generate a list of possible
 completions:
 
 @table @code
 @item alias
-Alias names.  May also be specified as @samp{-a}.
+Alias names.  May also be specified as @option{-a}.
 
 @item arrayvar
 Array variable names.
@@ -1521,13 +1682,13 @@
 Readline key binding names (@pxref{Bindable Readline Commands}).
 
 @item builtin
-Names of shell builtin commands.  May also be specified as @samp{-b}.
+Names of shell builtin commands.  May also be specified as @option{-b}.
 
 @item command
-Command names.  May also be specified as @samp{-c}.
+Command names.  May also be specified as @option{-c}.
 
 @item directory
-Directory names.  May also be specified as @samp{-d}.
+Directory names.  May also be specified as @option{-d}.
 
 @item disabled
 Names of disabled shell builtins.
@@ -1536,32 +1697,38 @@
 Names of enabled shell builtins.
 
 @item export
-Names of exported shell variables.  May also be specified as @samp{-e}.
+Names of exported shell variables.  May also be specified as @option{-e}.
 
 @item file
-File names.  May also be specified as @samp{-f}.
+File names.  May also be specified as @option{-f}.
 
 @item function
 Names of shell functions.
 
+@item group
+Group names.  May also be specified as @option{-g}.
+
 @item helptopic
 Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
 
 @item hostname
 Hostnames, as taken from the file specified by the
-@code{HOSTFILE} shell variable (@pxref{Bash Variables}).
+@env{HOSTFILE} shell variable (@pxref{Bash Variables}).
 
 @item job
-Job names, if job control is active.  May also be specified as @samp{-j}.
+Job names, if job control is active.  May also be specified as @option{-j}.
 
 @item keyword
-Shell reserved words.  May also be specified as @samp{-k}.
+Shell reserved words.  May also be specified as @option{-k}.
 
 @item running
 Names of running jobs, if job control is active.
 
+@item service
+Service names.  May also be specified as @option{-s}.
+
 @item setopt
-Valid arguments for the @samp{-o} option to the @code{set} builtin
+Valid arguments for the @option{-o} option to the @code{set} builtin
 (@pxref{The Set Builtin}).
 
 @item shopt
@@ -1575,10 +1742,10 @@
 Names of stopped jobs, if job control is active.
 
 @item user
-User names.  May also be specified as @samp{-u}.
+User names.  May also be specified as @option{-u}.
 
 @item variable
-Names of all shell variables.  May also be specified as @samp{-v}.
+Names of all shell variables.  May also be specified as @option{-v}.
 @end table
 
 @item -G @var{globpat}
@@ -1587,7 +1754,7 @@
 
 @item -W @var{wordlist}
 The @var{wordlist} is split using the characters in the
-@code{IFS} special variable as delimiters, and each resultant word
+@env{IFS} special variable as delimiters, and each resultant word
 is expanded.
 The possible completions are the members of the resultant list which
 match the word being completed.
@@ -1600,7 +1767,7 @@
 The shell function @var{function} is executed in the current shell
 environment.
 When it finishes, the possible completions are retrieved from the value
-of the @code{COMPREPLY} array variable.
+of the @env{COMPREPLY} array variable.
 
 @item -X @var{filterpat}
 @var{filterpat} is a pattern as used for filename expansion.
@@ -1620,7 +1787,7 @@
 @end table
 
 The return value is true unless an invalid option is supplied, an option
-other than @samp{-p} or @samp{-r} is supplied without a @var{name}
+other than @option{-p} or @option{-r} is supplied without a @var{name}
 argument, an attempt is made to remove a completion specification for
 a @var{name} for which no specification exists, or
 an error occurs adding a completion specification.
diff --git a/readline/doc/rluserman.dvi b/readline/doc/rluserman.dvi
index 0d2bf71..a2339aa 100644
--- a/readline/doc/rluserman.dvi
+++ b/readline/doc/rluserman.dvi
Binary files differ
diff --git a/readline/doc/rluserman.html b/readline/doc/rluserman.html
index b813dda..ac8bfbd 100644
--- a/readline/doc/rluserman.html
+++ b/readline/doc/rluserman.html
@@ -1,126 +1,107 @@
 <HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on June, 27  2002 by texi2html 1.64 -->
+<!-- 
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+            Karl Berry  <karl@freefriends.org>
+            Olaf Bachmann <obachman@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+ 
+-->
 <HEAD>
-<!-- This HTML file has been created by texi2html 1.52
-     from /usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo on 1 March 2000 -->
+<TITLE>GNU Readline Library: </TITLE>
 
-<TITLE>GNU Readline Library</TITLE>
+<META NAME="description" CONTENT="GNU Readline Library: ">
+<META NAME="keywords" CONTENT="GNU Readline Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
 </HEAD>
-<BODY>
-<H1>GNU Readline Library User Interface</H1>
-<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2>
-<H2>January 2000</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="rluserman.html#SEC1">Command Line Editing</A>
-<UL>
-<LI><A NAME="TOC2" HREF="rluserman.html#SEC2">Introduction to Line Editing</A>
-<LI><A NAME="TOC3" HREF="rluserman.html#SEC3">Readline Interaction</A>
-<UL>
-<LI><A NAME="TOC4" HREF="rluserman.html#SEC4">Readline Bare Essentials</A>
-<LI><A NAME="TOC5" HREF="rluserman.html#SEC5">Readline Movement Commands</A>
-<LI><A NAME="TOC6" HREF="rluserman.html#SEC6">Readline Killing Commands</A>
-<LI><A NAME="TOC7" HREF="rluserman.html#SEC7">Readline Arguments</A>
-<LI><A NAME="TOC8" HREF="rluserman.html#SEC8">Searching for Commands in the History</A>
-</UL>
-<LI><A NAME="TOC9" HREF="rluserman.html#SEC9">Readline Init File</A>
-<UL>
-<LI><A NAME="TOC10" HREF="rluserman.html#SEC10">Readline Init File Syntax</A>
-<LI><A NAME="TOC11" HREF="rluserman.html#SEC11">Conditional Init Constructs</A>
-<LI><A NAME="TOC12" HREF="rluserman.html#SEC12">Sample Init File</A>
-</UL>
-<LI><A NAME="TOC13" HREF="rluserman.html#SEC13">Bindable Readline Commands</A>
-<UL>
-<LI><A NAME="TOC14" HREF="rluserman.html#SEC14">Commands For Moving</A>
-<LI><A NAME="TOC15" HREF="rluserman.html#SEC15">Commands For Manipulating The History</A>
-<LI><A NAME="TOC16" HREF="rluserman.html#SEC16">Commands For Changing Text</A>
-<LI><A NAME="TOC17" HREF="rluserman.html#SEC17">Killing And Yanking</A>
-<LI><A NAME="TOC18" HREF="rluserman.html#SEC18">Specifying Numeric Arguments</A>
-<LI><A NAME="TOC19" HREF="rluserman.html#SEC19">Letting Readline Type For You</A>
-<LI><A NAME="TOC20" HREF="rluserman.html#SEC20">Keyboard Macros</A>
-<LI><A NAME="TOC21" HREF="rluserman.html#SEC21">Some Miscellaneous Commands</A>
-</UL>
-<LI><A NAME="TOC22" HREF="rluserman.html#SEC22">Readline vi Mode</A>
-</UL>
-</UL>
-<P><HR><P>
 
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU Readline Library</H1></P><P>
+
 This document describes the end user interface of the GNU Readline Library,
 a utility which aids in the consistency of user interface across discrete
 programs that need to provide a command line interface.
+</P><P>
 
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC1">1. Command Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
 
-</P>
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Command Line Editing"></A>
+<H1> 1. Command Line Editing </H1>
+<!--docid::SEC1::-->
 <P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
 
-</P>
-<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-</P>
-<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-
-</P>
-<P>
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
-
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="rluserman.html#TOC1">Command Line Editing</A></H1>
-
-<P>
 This chapter describes the basic features of the GNU
 command line editing interface.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="rluserman.html#SEC2">Introduction and Notation</A>: Notation used in this text.
-<LI><A HREF="rluserman.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line.
-<LI><A HREF="rluserman.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view.
-<LI><A HREF="rluserman.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands
-				available for binding
-<LI><A HREF="rluserman.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline
-				behave like the vi editor.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="rluserman.html#TOC2">Introduction to Line Editing</A></H2>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC3">1.2 Readline Interaction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC9">1.3 Readline Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands
+				available for binding</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline
+				behave like the vi editor.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Introduction and Notation"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Introduction to Line Editing </H2>
+<!--docid::SEC2::-->
+<P>
+
 The following paragraphs describe the notation used to represent
 keystrokes.
+</P><P>
 
-</P>
-<P>
 The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
 produced when the <KBD>k</KBD> key is pressed while the Control key
 is depressed.
+</P><P>
 
-</P>
-<P>
 The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
 produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD>
 key is pressed.
@@ -131,39 +112,46 @@
 The <KBD>ALT</KBD> key on the right may also be configured to work as a
 Meta key or may be configured as some other modifier, such as a
 Compose key for typing accented characters.
+</P><P>
 
-</P>
-<P>
 If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as
 a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD>
-<I>first</I>, and then typing <KBD>k</KBD>.
+<EM>first</EM>, and then typing <KBD>k</KBD>.
 Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+</P><P>
 
-</P>
-<P>
 The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
 character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+</P><P>
 
-</P>
-<P>
 In addition, several keys have their own names.  Specifically,
 <KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
 stand for themselves when seen in this text, or in an init file
-(see section <A HREF="rluserman.html#SEC9">Readline Init File</A>).
+(see section <A HREF="rluserman.html#SEC9">1.3 Readline Init File</A>).
 If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will
 produce the desired character.
 The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on
 some keyboards.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC3" HREF="rluserman.html#TOC3">Readline Interaction</A></H2>
+<A NAME="Readline Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 Readline Interaction </H2>
+<!--docid::SEC3::-->
 <P>
-<A NAME="IDX1"></A>
 
-</P>
-<P>
 Often during an interactive session you type in a long line of text,
 only to notice that the first word on the line is misspelled.  The
 Readline library gives you a set of commands for manipulating the text
@@ -171,231 +159,269 @@
 you to retype the majority of the line.  Using these editing commands,
 you move the cursor to the place that needs correction, and delete or
 insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press <KBD>RETURN</KBD>.  You do not have to be at the
-end of the line to press <KBD>RETURN</KBD>; the entire line is accepted
+the line, you simply press <KBD>RET</KBD>.  You do not have to be at the
+end of the line to press <KBD>RET</KBD>; the entire line is accepted
 regardless of the location of the cursor within the line.
+</P><P>
 
-</P>
-
-<UL>
-<LI><A HREF="rluserman.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline.
-<LI><A HREF="rluserman.html#SEC5">Readline Movement Commands</A>: Moving about the input line.
-<LI><A HREF="rluserman.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back!
-<LI><A HREF="rluserman.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands.
-<LI><A HREF="rluserman.html#SEC8">Searching</A>: Searching through previous lines.
-</UL>
-
-
-
-<H3><A NAME="SEC4" HREF="rluserman.html#TOC4">Readline Bare Essentials</A></H3>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
-<A NAME="IDX2"></A>
-<A NAME="IDX3"></A>
-<A NAME="IDX4"></A>
 
-</P>
+<A NAME="Readline Bare Essentials"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.1 Readline Bare Essentials </H3>
+<!--docid::SEC4::-->
 <P>
+
 In order to enter characters into the line, simply type them.  The typed
 character appears where the cursor was, and then the cursor moves one
 space to the right.  If you mistype a character, you can use your
 erase character to back up and delete the mistyped character.
+</P><P>
 
-</P>
-<P>
 Sometimes you may mistype a character, and
 not notice the error until you have typed several other characters.  In
 that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
 correct your mistake.  Afterwards, you can move the cursor to the right
 with <KBD>C-f</KBD>.
+</P><P>
 
-</P>
-<P>
 When you add text in the middle of a line, you will notice that characters
 to the right of the cursor are `pushed over' to make room for the text
 that you have inserted.  Likewise, when you delete text behind the cursor,
 characters to the right of the cursor are `pulled back' to fill in the
 blank space created by the removal of the text.  A list of the bare
 essentials for editing the text of an input line follows.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-b</KBD>
-<DD>
-Move back one character.
+<DD>Move back one character.
 <DT><KBD>C-f</KBD>
-<DD>
-Move forward one character.
+<DD>Move forward one character.
 <DT><KBD>DEL</KBD> or <KBD>Backspace</KBD>
-<DD>
-Delete the character to the left of the cursor.
+<DD>Delete the character to the left of the cursor.
 <DT><KBD>C-d</KBD>
-<DD>
-Delete the character underneath the cursor.
+<DD>Delete the character underneath the cursor.
 <DT>Printing characters
-<DD>
-Insert the character into the line at the cursor.
+<DD>Insert the character into the line at the cursor.
 <DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD>
-<DD>
-Undo the last editing command.  You can undo all the way back to an
+<DD>Undo the last editing command.  You can undo all the way back to an
 empty line.
 </DL>
-
 <P>
+
 (Depending on your configuration, the <KBD>Backspace</KBD> key be set to
 delete the character to the left of the cursor and the <KBD>DEL</KBD> key set
 to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather
 than the character to the left of the cursor.)
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC5" HREF="rluserman.html#TOC5">Readline Movement Commands</A></H3>
-
+<A NAME="Readline Movement Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.2 Readline Movement Commands </H3>
+<!--docid::SEC5::-->
 <P>
+
 The above table describes the most basic keystrokes that you need
 in order to do editing of the input line.  For your convenience, many
 other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
 <KBD>C-d</KBD>, and <KBD>DEL</KBD>.  Here are some commands for moving more rapidly
 about the line.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-a</KBD>
-<DD>
-Move to the start of the line.
+<DD>Move to the start of the line.
 <DT><KBD>C-e</KBD>
-<DD>
-Move to the end of the line.
+<DD>Move to the end of the line.
 <DT><KBD>M-f</KBD>
-<DD>
-Move forward a word, where a word is composed of letters and digits.
+<DD>Move forward a word, where a word is composed of letters and digits.
 <DT><KBD>M-b</KBD>
-<DD>
-Move backward a word.
+<DD>Move backward a word.
 <DT><KBD>C-l</KBD>
-<DD>
-Clear the screen, reprinting the current line at the top.
+<DD>Clear the screen, reprinting the current line at the top.
 </DL>
-
 <P>
+
 Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
 forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC6" HREF="rluserman.html#TOC6">Readline Killing Commands</A></H3>
-
+<A NAME="Readline Killing Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.3 Readline Killing Commands </H3>
+<!--docid::SEC6::-->
 <P>
-<A NAME="IDX5"></A>
-<A NAME="IDX6"></A>
 
-</P>
-<P>
+<A NAME="IDX1"></A>
+<A NAME="IDX2"></A>
+</P><P>
+
 <EM>Killing</EM> text means to delete the text from the line, but to save
 it away for later use, usually by <EM>yanking</EM> (re-inserting)
 it back into the line.
 (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+</P><P>
 
-</P>
-<P>
 If the description for a command says that it `kills' text, then you can
 be sure that you can get the text back in a different (or the same)
 place later.
+</P><P>
 
-</P>
-<P>
 When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
 Any number of consecutive kills save all of the killed text together, so
 that when you yank it back, you get it all.  The kill
 ring is not line specific; the text that you killed on a previously
 typed line is available to be yanked back later, when you are typing
 another line.
-<A NAME="IDX7"></A>
+<A NAME="IDX3"></A>
+</P><P>
 
-</P>
-<P>
 Here is the list of commands for killing text.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-k</KBD>
-<DD>
-Kill the text from the current cursor position to the end of the line.
+<DD>Kill the text from the current cursor position to the end of the line.
+<P>
 
 <DT><KBD>M-d</KBD>
-<DD>
-Kill from the cursor to the end of the current word, or, if between
+<DD>Kill from the cursor to the end of the current word, or, if between
 words, to the end of the next word.
 Word boundaries are the same as those used by <KBD>M-f</KBD>.
+<P>
 
-<DT><KBD>M-DEL</KBD>
-<DD>
-Kill from the cursor the start of the previous word, or, if between
+<DT><KBD>M-<KBD>DEL</KBD></KBD>
+<DD>Kill from the cursor the start of the current word, or, if between
 words, to the start of the previous word.
 Word boundaries are the same as those used by <KBD>M-b</KBD>.
+<P>
 
 <DT><KBD>C-w</KBD>
-<DD>
-Kill from the cursor to the previous whitespace.  This is different than
-<KBD>M-DEL</KBD> because the word boundaries differ.
+<DD>Kill from the cursor to the previous whitespace.  This is different than
+<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ.
+<P>
 
 </DL>
-
 <P>
+
 Here is how to <EM>yank</EM> the text back into the line.  Yanking
 means to copy the most-recently-killed text from the kill buffer.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><KBD>C-y</KBD>
-<DD>
-Yank the most recently killed text back into the buffer at the cursor.
+<DD>Yank the most recently killed text back into the buffer at the cursor.
+<P>
 
 <DT><KBD>M-y</KBD>
-<DD>
-Rotate the kill-ring, and yank the new top.  You can only do this if
+<DD>Rotate the kill-ring, and yank the new top.  You can only do this if
 the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
 </DL>
-
-
-
-<H3><A NAME="SEC7" HREF="rluserman.html#TOC7">Readline Arguments</A></H3>
-
 <P>
+
+<A NAME="Readline Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.4 Readline Arguments </H3>
+<!--docid::SEC7::-->
+<P>
+
 You can pass numeric arguments to Readline commands.  Sometimes the
 argument acts as a repeat count, other times it is the <I>sign</I> of the
 argument that is significant.  If you pass a negative argument to a
 command which normally acts in a forward direction, that command will
 act in a backward direction.  For example, to kill text back to the
 start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+</P><P>
 
-</P>
-<P>
 The general way to pass numeric arguments to a command is to type meta
 digits before the command.  If the first `digit' typed is a minus
 sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative.  Once
 you have typed one meta digit to get the argument started, you can type
 the remainder of the digits, and then the command.  For example, to give
-the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>.
+the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>,
+which will delete the next ten characters on the input line.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC8" HREF="rluserman.html#TOC8">Searching for Commands in the History</A></H3>
-
+<A NAME="Searching"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.5 Searching for Commands in the History </H3>
+<!--docid::SEC8::-->
 <P>
+
 Readline provides commands for searching through the command history
 for lines containing a specified string.
-There are two search modes:  <VAR>incremental</VAR> and <VAR>non-incremental</VAR>.
+There are two search modes:  <EM>incremental</EM> and <EM>non-incremental</EM>.
+</P><P>
 
-</P>
-<P>
 Incremental searches begin before the user has finished typing the
 search string.
 As each character of the search string is typed, Readline displays
@@ -411,9 +437,8 @@
 <KBD>C-g</KBD> will abort an incremental search and restore the original line.
 When the search is terminated, the history entry containing the
 search string becomes the current line.
+</P><P>
 
-</P>
-<P>
 To find other matching entries in the history list, type <KBD>C-r</KBD> or
 <KBD>C-s</KBD> as appropriate.
 This will search backward or forward in the history for the next
@@ -422,22 +447,38 @@
 the search and execute that command.
 For instance, a <KBD>RET</KBD> will terminate the search and accept
 the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+</P><P>
 
-</P>
-<P>
+Readline remembers the last incremental search string.  If two
+<KBD>C-r</KBD>s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+</P><P>
+
 Non-incremental searches read the entire search string before starting
 to search for matching history lines.  The search string may be
 typed by the user or be part of the contents of the current line.
+</P><P>
 
-</P>
-
-
-<H2><A NAME="SEC9" HREF="rluserman.html#TOC9">Readline Init File</A></H2>
+<A NAME="Readline Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Readline Init File </H2>
+<!--docid::SEC9::-->
 <P>
-<A NAME="IDX8"></A>
 
-</P>
-<P>
 Although the Readline library comes with a set of Emacs-like
 keybindings installed by default, it is possible to use a different set
 of keybindings.
@@ -446,158 +487,191 @@
 The name of this
 file is taken from the value of the environment variable <CODE>INPUTRC</CODE>.  If
 that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+</P><P>
 
-</P>
-<P>
 When a program which uses the Readline library starts up, the
 init file is read, and the key bindings are set.
+</P><P>
 
-</P>
-<P>
 In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
 incorporating any changes that you might have made to it.
+</P><P>
 
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR>
+</TABLE>
 
-<UL>
-<LI><A HREF="rluserman.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file.
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR>
+</TABLE>
 
-<LI><A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file.
-
-<LI><A HREF="rluserman.html#SEC12">Sample Init File</A>: An example inputrc file.
-</UL>
-
-
-
-<H3><A NAME="SEC10" HREF="rluserman.html#TOC10">Readline Init File Syntax</A></H3>
-
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR>
+</TABLE></BLOCKQUOTE>
 <P>
+
+<A NAME="Readline Init File Syntax"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.1 Readline Init File Syntax </H3>
+<!--docid::SEC10::-->
+<P>
+
 There are only a few basic constructs allowed in the
 Readline init file.  Blank lines are ignored.
 Lines beginning with a <SAMP>`#'</SAMP> are comments.
 Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
-constructs (see section <A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>).  Other lines
+constructs (see section <A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>).  Other lines
 denote variable settings and key bindings.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT>Variable Settings
-<DD>
-You can modify the run-time behavior of Readline by
+<DD>You can modify the run-time behavior of Readline by
 altering the values of variables in Readline
-using the <CODE>set</CODE> command within the init file.  Here is how to
+using the <CODE>set</CODE> command within the init file.
+The syntax is simple:
+<P>
+
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR>
+</pre></td></tr></table></P><P>
+
+Here, for example, is how to
 change from the default Emacs-like key binding to use
 <CODE>vi</CODE> line editing commands:
+</P><P>
 
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set editing-mode vi
+</pre></td></tr></table></P><P>
 
-<PRE>
-set editing-mode vi
-</PRE>
+Variable names and values, where appropriate, are recognized without regard
+to case. 
+</P><P>
 
 A great deal of run-time behavior is changeable with the following
 variables.
+</P><P>
 
+<A NAME="IDX4"></A>
 <DL COMPACT>
 
 <DT><CODE>bell-style</CODE>
-<DD>
-<A NAME="IDX9"></A>
+<DD><A NAME="IDX5"></A>
 Controls what happens when Readline wants to ring the terminal bell.
 If set to <SAMP>`none'</SAMP>, Readline never rings the bell.  If set to
 <SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
 If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
 the terminal's bell.
+<P>
 
 <DT><CODE>comment-begin</CODE>
-<DD>
-<A NAME="IDX10"></A>
+<DD><A NAME="IDX6"></A>
 The string to insert at the beginning of the line when the
 <CODE>insert-comment</CODE> command is executed.  The default value
 is <CODE>"#"</CODE>.
+<P>
 
 <DT><CODE>completion-ignore-case</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
 in a case-insensitive fashion.
 The default value is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>completion-query-items</CODE>
-<DD>
-<A NAME="IDX11"></A>
+<DD><A NAME="IDX7"></A>
 The number of possible completions that determines when the user is
 asked whether he wants to see the list of possibilities.  If the
 number of possible completions is greater than this value,
 Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed.  The default limit is
-<CODE>100</CODE>.
+them; otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to 0.
+The default limit is <CODE>100</CODE>.
+<P>
 
 <DT><CODE>convert-meta</CODE>
-<DD>
-<A NAME="IDX12"></A>
+<DD><A NAME="IDX8"></A>
 If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
 eighth bit set to an ASCII key sequence by stripping the eighth
 bit and prefixing an <KBD>ESC</KBD> character, converting them to a
 meta-prefixed key sequence.  The default value is <SAMP>`on'</SAMP>.
+<P>
 
 <DT><CODE>disable-completion</CODE>
-<DD>
-<A NAME="IDX13"></A>
+<DD><A NAME="IDX9"></A>
 If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
 Completion  characters will be inserted into the line as if they had
 been mapped to <CODE>self-insert</CODE>.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>editing-mode</CODE>
-<DD>
-<A NAME="IDX14"></A>
+<DD><A NAME="IDX10"></A>
 The <CODE>editing-mode</CODE> variable controls which default set of
 key bindings is used.  By default, Readline starts up in Emacs editing
 mode, where the keystrokes are most similar to Emacs.  This variable can be
 set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+<P>
 
 <DT><CODE>enable-keypad</CODE>
-<DD>
-<A NAME="IDX15"></A>
+<DD><A NAME="IDX11"></A>
 When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
 keypad when it is called.  Some systems need this to enable the
 arrow keys.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>expand-tilde</CODE>
-<DD>
-<A NAME="IDX16"></A>
+<DD><A NAME="IDX12"></A>
 If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
 attempts word completion.  The default is <SAMP>`off'</SAMP>.
+<P>
+
+<A NAME="IDX13"></A>
+If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the
+same location on each history line retrived with <CODE>previous-history</CODE>
+or <CODE>next-history</CODE>.
+</P><P>
 
 <DT><CODE>horizontal-scroll-mode</CODE>
-<DD>
-<A NAME="IDX17"></A>
+<DD><A NAME="IDX14"></A>
 This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>.  Setting it
 to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
 horizontally on a single screen line when they are longer than the width
 of the screen, instead of wrapping onto a new screen line.  By default,
 this variable is set to <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>input-meta</CODE>
-<DD>
-<A NAME="IDX18"></A>
-<A NAME="IDX19"></A>
+<DD><A NAME="IDX15"></A>
+<A NAME="IDX16"></A>
 If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
-will not strip the eighth bit from the characters it reads),
+will not clear the eighth bit in the characters it reads),
 regardless of what the terminal claims it can support.  The
 default value is <SAMP>`off'</SAMP>.  The name <CODE>meta-flag</CODE> is a
 synonym for this variable.
+<P>
 
 <DT><CODE>isearch-terminators</CODE>
-<DD>
-<A NAME="IDX20"></A>
+<DD><A NAME="IDX17"></A>
 The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">Searching for Commands in the History</A>).
+subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A>).
 If this variable has not been given a value, the characters <KBD>ESC</KBD> and
 <KBD>C-J</KBD> will terminate an incremental search.
+<P>
 
 <DT><CODE>keymap</CODE>
-<DD>
-<A NAME="IDX21"></A>
+<DD><A NAME="IDX18"></A>
 Sets Readline's idea of the current keymap for key binding commands.
 Acceptable <CODE>keymap</CODE> names are
 <CODE>emacs</CODE>,
@@ -605,173 +679,207 @@
 <CODE>emacs-meta</CODE>,
 <CODE>emacs-ctlx</CODE>,
 <CODE>vi</CODE>,
+<CODE>vi-move</CODE>,
 <CODE>vi-command</CODE>, and
 <CODE>vi-insert</CODE>.
 <CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is
 equivalent to <CODE>emacs-standard</CODE>.  The default value is <CODE>emacs</CODE>.
 The value of the <CODE>editing-mode</CODE> variable also affects the
 default keymap.
+<P>
 
 <DT><CODE>mark-directories</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash
 appended.  The default is <SAMP>`on'</SAMP>.
+<P>
 
 <DT><CODE>mark-modified-lines</CODE>
-<DD>
-<A NAME="IDX22"></A>
+<DD><A NAME="IDX19"></A>
 This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
 asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
 This variable is <SAMP>`off'</SAMP> by default.
+<P>
+
+<DT><CODE>mark-symlinked-directories</CODE>
+<DD><A NAME="IDX20"></A>
+If set to <SAMP>`on'</SAMP>, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+<CODE>mark-directories</CODE>).
+The default is <SAMP>`off'</SAMP>.
+<P>
+
+<DT><CODE>match-hidden-files</CODE>
+<DD><A NAME="IDX21"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose
+names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename
+completion, unless the leading <SAMP>`.'</SAMP> is
+supplied by the user in the filename to be completed.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
 
 <DT><CODE>output-meta</CODE>
-<DD>
-<A NAME="IDX23"></A>
+<DD><A NAME="IDX22"></A>
 If set to <SAMP>`on'</SAMP>, Readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
 sequence.  The default is <SAMP>`off'</SAMP>.
+<P>
+
+<DT><CODE>page-completions</CODE>
+<DD><A NAME="IDX23"></A>
+If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager
+to display a screenful of possible completions at a time.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
 
 <DT><CODE>print-completions-horizontally</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
 The default is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>show-all-if-ambiguous</CODE>
-<DD>
-<A NAME="IDX24"></A>
+<DD><A NAME="IDX24"></A>
 This alters the default behavior of the completion functions.  If
 set to <SAMP>`on'</SAMP>, 
 words which have more than one possible completion cause the
 matches to be listed immediately instead of ringing the bell.
 The default value is <SAMP>`off'</SAMP>.
+<P>
 
 <DT><CODE>visible-stats</CODE>
-<DD>
-<A NAME="IDX25"></A>
+<DD><A NAME="IDX25"></A>
 If set to <SAMP>`on'</SAMP>, a character denoting a file's type
 is appended to the filename when listing possible
 completions.  The default is <SAMP>`off'</SAMP>.
+<P>
 
 </DL>
+<P>
 
 <DT>Key Bindings
-<DD>
-The syntax for controlling key bindings in the init file is
+<DD>The syntax for controlling key bindings in the init file is
 simple.  First you need to find the name of the command that you
 want to change.  The following sections contain tables of the command
 name, the default keybinding, if any, and a short description of what
 the command does.
+<P>
 
-Once you know the name of the command, simply place the name of the key
+Once you know the name of the command, simply place on a line
+in the init file the name of the key
 you wish to bind the command to, a colon, and then the name of the
-command on a line in the init file.  The name of the key
-can be expressed in different ways, depending on which is most
-comfortable for you.
+command.  The name of the key
+can be expressed in different ways, depending on what you find most
+comfortable.
+</P><P>
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a <VAR>macro</VAR>).
+</P><P>
 
 <DL COMPACT>
-
 <DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
-
-<PRE>
-Control-u: universal-argument
+<DD><VAR>keyname</VAR> is the name of a key spelled out in English.  For example:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Control-u: universal-argument
 Meta-Rubout: backward-kill-word
 Control-o: "&#62; output"
-</PRE>
+</pre></td></tr></table><P>
 
 In the above example, <KBD>C-u</KBD> is bound to the function
-<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro
+<CODE>universal-argument</CODE>,
+<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</CODE>, and
+<KBD>C-o</KBD> is bound to run the macro
 expressed on the right hand side (that is, to insert the text
 <SAMP>`&#62; output'</SAMP> into the line).
+</P><P>
+
+A number of symbolic character names are recognized while
+processing this key binding syntax:
+<VAR>DEL</VAR>,
+<VAR>ESC</VAR>,
+<VAR>ESCAPE</VAR>,
+<VAR>LFD</VAR>,
+<VAR>NEWLINE</VAR>,
+<VAR>RET</VAR>,
+<VAR>RETURN</VAR>,
+<VAR>RUBOUT</VAR>,
+<VAR>SPACE</VAR>,
+<VAR>SPC</VAR>,
+and
+<VAR>TAB</VAR>.
+</P><P>
 
 <DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
 denoting an entire key sequence can be specified, by placing
 the key sequence in double quotes.  Some GNU Emacs style key
 escapes can be used, as in the following example, but the
 special character names are not recognized.
+<P>
 
-
-<PRE>
-"\C-u": universal-argument
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-u": universal-argument
 "\C-x\C-r": re-read-init-file
 "\e[11~": "Function Key 1"
-</PRE>
+</pre></td></tr></table></P><P>
 
-In the above example, <KBD>C-u</KBD> is bound to the function
+In the above example, <KBD>C-u</KBD> is again bound to the function
 <CODE>universal-argument</CODE> (just as it was in the first example),
 <SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
 and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
 the text <SAMP>`Function Key 1'</SAMP>.
+</P><P>
 
 </DL>
+<P>
 
 The following GNU Emacs style escape sequences are available when
 specifying key sequences:
+</P><P>
 
 <DL COMPACT>
-
 <DT><CODE><KBD>\C-</KBD></CODE>
-<DD>
-control prefix
+<DD>control prefix
 <DT><CODE><KBD>\M-</KBD></CODE>
-<DD>
-meta prefix
+<DD>meta prefix
 <DT><CODE><KBD>\e</KBD></CODE>
-<DD>
-an escape character
+<DD>an escape character
 <DT><CODE><KBD>\\</KBD></CODE>
-<DD>
-backslash
+<DD>backslash
 <DT><CODE><KBD>\"</KBD></CODE>
-<DD>
-<KBD>"</KBD>, a double quotation mark
+<DD><KBD>"</KBD>, a double quotation mark
 <DT><CODE><KBD>\'</KBD></CODE>
-<DD>
-<KBD>'</KBD>, a single quote or apostrophe
+<DD><KBD>'</KBD>, a single quote or apostrophe
 </DL>
+<P>
 
 In addition to the GNU Emacs style escape sequences, a second
 set of backslash escapes is available:
+</P><P>
 
 <DL COMPACT>
-
 <DT><CODE>\a</CODE>
-<DD>
-alert (bell)
+<DD>alert (bell)
 <DT><CODE>\b</CODE>
-<DD>
-backspace
+<DD>backspace
 <DT><CODE>\d</CODE>
-<DD>
-delete
+<DD>delete
 <DT><CODE>\f</CODE>
-<DD>
-form feed
+<DD>form feed
 <DT><CODE>\n</CODE>
-<DD>
-newline
+<DD>newline
 <DT><CODE>\r</CODE>
-<DD>
-carriage return
+<DD>carriage return
 <DT><CODE>\t</CODE>
-<DD>
-horizontal tab
+<DD>horizontal tab
 <DT><CODE>\v</CODE>
-<DD>
-vertical tab
+<DD>vertical tab
 <DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>
-the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR>
+<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
 (one to three digits)
-<DT><CODE>\x<VAR>nnn</VAR></CODE>
-<DD>
-the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR>
-(one to three digits)
+<DT><CODE>\x<VAR>HH</VAR></CODE>
+<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
+(one or two hex digits)
 </DL>
+<P>
 
 When entering the text of a macro, single or double quotes must
 be used to indicate a macro definition.
@@ -779,115 +887,130 @@
 In the macro body, the backslash escapes described above are expanded.
 Backslash will quote any other character in the macro text,
 including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
-For example, the following binding will make <SAMP>`C-x \'</SAMP>
+For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP>
 insert a single <SAMP>`\'</SAMP> into the line:
-
-<PRE>
-"\C-x\\": "\\"
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-x\\": "\\"
+</pre></td></tr></table></P><P>
 
 </DL>
-
-
-
-<H3><A NAME="SEC11" HREF="rluserman.html#TOC11">Conditional Init Constructs</A></H3>
-
 <P>
+
+<A NAME="Conditional Init Constructs"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.2 Conditional Init Constructs </H3>
+<!--docid::SEC11::-->
+<P>
+
 Readline implements a facility similar in spirit to the conditional
 compilation features of the C preprocessor which allows key
 bindings and variable settings to be performed as the result
 of tests.  There are four parser directives used.
+</P><P>
 
-</P>
 <DL COMPACT>
-
 <DT><CODE>$if</CODE>
-<DD>
-The <CODE>$if</CODE> construct allows bindings to be made based on the
+<DD>The <CODE>$if</CODE> construct allows bindings to be made based on the
 editing mode, the terminal being used, or the application using
 Readline.  The text of the test extends to the end of the line;
 no characters are required to isolate it.
+<P>
 
 <DL COMPACT>
-
 <DT><CODE>mode</CODE>
-<DD>
-The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
 whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
 This may be used in conjunction
 with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
 the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
 Readline is starting out in <CODE>emacs</CODE> mode.
+<P>
 
 <DT><CODE>term</CODE>
-<DD>
-The <CODE>term=</CODE> form may be used to include terminal-specific
+<DD>The <CODE>term=</CODE> form may be used to include terminal-specific
 key bindings, perhaps to bind the key sequences output by the
 terminal's function keys.  The word on the right side of the
 <SAMP>`='</SAMP> is tested against both the full name of the terminal and
 the portion of the terminal name before the first <SAMP>`-'</SAMP>.  This
 allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
 for instance.
+<P>
 
 <DT><CODE>application</CODE>
-<DD>
-The <VAR>application</VAR> construct is used to include
+<DD>The <VAR>application</VAR> construct is used to include
 application-specific settings.  Each program using the Readline
-library sets the <VAR>application name</VAR>, and you can test for it. 
+library sets the <VAR>application name</VAR>, and you can test for
+a particular value. 
 This could be used to bind key sequences to functions useful for
 a specific program.  For instance, the following command adds a
 key sequence that quotes the current or previous word in Bash:
-
-<PRE>
-$if Bash
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$if Bash
 # Quote the current or previous word
 "\C-xq": "\eb\"\ef\""
 $endif
-</PRE>
-
-</DL>
+</pre></td></tr></table></DL>
+<P>
 
 <DT><CODE>$endif</CODE>
-<DD>
-This command, as seen in the previous example, terminates an
+<DD>This command, as seen in the previous example, terminates an
 <CODE>$if</CODE> command.
+<P>
 
 <DT><CODE>$else</CODE>
-<DD>
-Commands in this branch of the <CODE>$if</CODE> directive are executed if
+<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if
 the test fails.
+<P>
 
 <DT><CODE>$include</CODE>
-<DD>
-This directive takes a single filename as an argument and reads commands
+<DD>This directive takes a single filename as an argument and reads commands
 and bindings from that file.
-
-<PRE>
-$include /etc/inputrc
-</PRE>
-
-</DL>
-
-
-
-<H3><A NAME="SEC12" HREF="rluserman.html#TOC12">Sample Init File</A></H3>
-
+For example, the following directive reads from <TT>`/etc/inputrc'</TT>:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$include /etc/inputrc
+</pre></td></tr></table></DL>
 <P>
-Here is an example of an inputrc file.  This illustrates key
+
+<A NAME="Sample Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.3 Sample Init File </H3>
+<!--docid::SEC12::-->
+<P>
+
+Here is an example of an <VAR>inputrc</VAR> file.  This illustrates key
 binding, variable assignment, and conditional syntax.
+</P><P>
 
-</P>
-
-<PRE>
-# This file controls the behaviour of line input editing for
-# programs that use the Gnu Readline library.  Existing programs
-# include FTP, Bash, and Gdb.
+<TABLE><tr><td>&nbsp;</td><td class=example><pre># This file controls the behaviour of line input editing for
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
 #
 # You can re-read the inputrc file with C-x C-r.
 # Lines beginning with '#' are comments.
 #
-# First, include any systemwide bindings and variable assignments from
-# /etc/Inputrc
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
 $include /etc/Inputrc
 
 #
@@ -939,10 +1062,12 @@
 $if Bash
 # edit the path
 "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word -- insert open and close double quotes
+# prepare to type a quoted word --
+# insert open and close double quotes
 # and move to just after the open quote
 "\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes in sequences and macros)
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
 "\C-x\\": "\\"
 # Quote the current or previous word
 "\C-xq": "\eb\"\ef\""
@@ -958,16 +1083,16 @@
 # don't strip characters to 7 bits when reading
 set input-meta on
 
-# allow iso-latin1 characters to be inserted rather than converted to
-# prefix-meta sequences
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
 set convert-meta off
 
-# display characters with the eighth bit set directly rather than
-# as meta-prefixed characters
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
 set output-meta on
 
-# if there are more than 150 possible completions for a word, ask the
-# user if he wants to see all of them
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
 set completion-query-items 150
 
 # For FTP
@@ -976,365 +1101,516 @@
 "\C-xt": "put \M-?"
 "\M-.": yank-last-arg
 $endif
-</PRE>
+</pre></td></tr></table></P><P>
 
-
-
-<H2><A NAME="SEC13" HREF="rluserman.html#TOC13">Bindable Readline Commands</A></H2>
-
-
-<UL>
-<LI><A HREF="rluserman.html#SEC14">Commands For Moving</A>: Moving about the line.
-<LI><A HREF="rluserman.html#SEC15">Commands For History</A>: Getting at previous lines.
-<LI><A HREF="rluserman.html#SEC16">Commands For Text</A>: Commands for changing text.
-<LI><A HREF="rluserman.html#SEC17">Commands For Killing</A>: Commands for killing and yanking.
-<LI><A HREF="rluserman.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts.
-<LI><A HREF="rluserman.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you.
-<LI><A HREF="rluserman.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters
-<LI><A HREF="rluserman.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands.
-</UL>
-
+<A NAME="Bindable Readline Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.4 Bindable Readline Commands </H2>
+<!--docid::SEC13::-->
 <P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
 This section describes Readline commands that may be bound to key
 sequences.
-
-</P>
-<P>
 Command names without an accompanying key sequence are unbound by default.
-In the following descriptions, <VAR>point</VAR> refers to the current cursor
-position, and <VAR>mark</VAR> refers to a cursor position saved by the
+</P><P>
+
+In the following descriptions, <EM>point</EM> refers to the current cursor
+position, and <EM>mark</EM> refers to a cursor position saved by the
 <CODE>set-mark</CODE> command.
-The text between the point and mark is referred to as the <VAR>region</VAR>.
+The text between the point and mark is referred to as the <EM>region</EM>.
+</P><P>
 
-</P>
-
-
-<H3><A NAME="SEC14" HREF="rluserman.html#TOC14">Commands For Moving</A></H3>
+<A NAME="Commands For Moving"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.1 Commands For Moving </H3>
+<!--docid::SEC14::-->
 <DL COMPACT>
-
-<DT><CODE>beginning-of-line (C-a)</CODE>
-<DD>
 <A NAME="IDX26"></A>
+<DT><CODE>beginning-of-line (C-a)</CODE>
+<DD><A NAME="IDX27"></A>
 Move to the start of the current line.
+<P>
 
-<DT><CODE>end-of-line (C-e)</CODE>
-<DD>
-<A NAME="IDX27"></A>
-Move to the end of the line.
-
-<DT><CODE>forward-char (C-f)</CODE>
-<DD>
 <A NAME="IDX28"></A>
-Move forward a character.
+<DT><CODE>end-of-line (C-e)</CODE>
+<DD><A NAME="IDX29"></A>
+Move to the end of the line.
+<P>
 
-<DT><CODE>backward-char (C-b)</CODE>
-<DD>
-<A NAME="IDX29"></A>
-Move back a character.
-
-<DT><CODE>forward-word (M-f)</CODE>
-<DD>
 <A NAME="IDX30"></A>
+<DT><CODE>forward-char (C-f)</CODE>
+<DD><A NAME="IDX31"></A>
+Move forward a character.
+<P>
+
+<A NAME="IDX32"></A>
+<DT><CODE>backward-char (C-b)</CODE>
+<DD><A NAME="IDX33"></A>
+Move back a character.
+<P>
+
+<A NAME="IDX34"></A>
+<DT><CODE>forward-word (M-f)</CODE>
+<DD><A NAME="IDX35"></A>
 Move forward to the end of the next word.  Words are composed of
 letters and digits.
+<P>
 
+<A NAME="IDX36"></A>
 <DT><CODE>backward-word (M-b)</CODE>
-<DD>
-<A NAME="IDX31"></A>
+<DD><A NAME="IDX37"></A>
 Move back to the start of the current or previous word.  Words are
 composed of letters and digits.
+<P>
 
+<A NAME="IDX38"></A>
 <DT><CODE>clear-screen (C-l)</CODE>
-<DD>
-<A NAME="IDX32"></A>
+<DD><A NAME="IDX39"></A>
 Clear the screen and redraw the current line,
 leaving the current line at the top of the screen.
+<P>
 
+<A NAME="IDX40"></A>
 <DT><CODE>redraw-current-line ()</CODE>
-<DD>
-<A NAME="IDX33"></A>
+<DD><A NAME="IDX41"></A>
 Refresh the current line.  By default, this is unbound.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC15" HREF="rluserman.html#TOC15">Commands For Manipulating The History</A></H3>
+<A NAME="Commands For History"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.2 Commands For Manipulating The History </H3>
+<!--docid::SEC15::-->
+<P>
 
 <DL COMPACT>
+<A NAME="IDX42"></A>
+<DT><CODE>accept-line (Newline or Return)</CODE>
+<DD><A NAME="IDX43"></A>
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+<CODE>add_history()</CODE>.
+If this line is a modified history line, the history line is restored
+to its original state.
+<P>
 
-<DT><CODE>accept-line (Newline, Return)</CODE>
-<DD>
-<A NAME="IDX34"></A>
-Accept the line regardless of where the cursor is.  If this line is
-non-empty, add it to the history list.  If this line was a history
-line, then restore the history line to its original state.
-
+<A NAME="IDX44"></A>
 <DT><CODE>previous-history (C-p)</CODE>
-<DD>
-<A NAME="IDX35"></A>
-Move `up' through the history list.
+<DD><A NAME="IDX45"></A>
+Move `back' through the history list, fetching the previous command.
+<P>
 
+<A NAME="IDX46"></A>
 <DT><CODE>next-history (C-n)</CODE>
-<DD>
-<A NAME="IDX36"></A>
-Move `down' through the history list.
+<DD><A NAME="IDX47"></A>
+Move `forward' through the history list, fetching the next command.
+<P>
 
+<A NAME="IDX48"></A>
 <DT><CODE>beginning-of-history (M-&#60;)</CODE>
-<DD>
-<A NAME="IDX37"></A>
+<DD><A NAME="IDX49"></A>
 Move to the first line in the history.
+<P>
 
+<A NAME="IDX50"></A>
 <DT><CODE>end-of-history (M-&#62;)</CODE>
-<DD>
-<A NAME="IDX38"></A>
+<DD><A NAME="IDX51"></A>
 Move to the end of the input history, i.e., the line currently
 being entered.
+<P>
 
+<A NAME="IDX52"></A>
 <DT><CODE>reverse-search-history (C-r)</CODE>
-<DD>
-<A NAME="IDX39"></A>
+<DD><A NAME="IDX53"></A>
 Search backward starting at the current line and moving `up' through
 the history as necessary.  This is an incremental search.
+<P>
 
+<A NAME="IDX54"></A>
 <DT><CODE>forward-search-history (C-s)</CODE>
-<DD>
-<A NAME="IDX40"></A>
+<DD><A NAME="IDX55"></A>
 Search forward starting at the current line and moving `down' through
 the the history as necessary.  This is an incremental search.
+<P>
 
+<A NAME="IDX56"></A>
 <DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
-<DD>
-<A NAME="IDX41"></A>
+<DD><A NAME="IDX57"></A>
 Search backward starting at the current line and moving `up'
 through the history as necessary using a non-incremental search
 for a string supplied by the user.
+<P>
 
+<A NAME="IDX58"></A>
 <DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
-<DD>
-<A NAME="IDX42"></A>
+<DD><A NAME="IDX59"></A>
 Search forward starting at the current line and moving `down'
 through the the history as necessary using a non-incremental search
 for a string supplied by the user.
+<P>
 
+<A NAME="IDX60"></A>
 <DT><CODE>history-search-forward ()</CODE>
-<DD>
-<A NAME="IDX43"></A>
+<DD><A NAME="IDX61"></A>
 Search forward through the history for the string of characters
 between the start of the current line and the point.
 This is a non-incremental search.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX62"></A>
 <DT><CODE>history-search-backward ()</CODE>
-<DD>
-<A NAME="IDX44"></A>
+<DD><A NAME="IDX63"></A>
 Search backward through the history for the string of characters
 between the start of the current line and the point.  This
 is a non-incremental search.  By default, this command is unbound.
+<P>
 
+<A NAME="IDX64"></A>
 <DT><CODE>yank-nth-arg (M-C-y)</CODE>
-<DD>
-<A NAME="IDX45"></A>
+<DD><A NAME="IDX65"></A>
 Insert the first argument to the previous command (usually
-the second word on the previous line).  With an argument <VAR>n</VAR>,
+the second word on the previous line) at point.
+With an argument <VAR>n</VAR>,
 insert the <VAR>n</VAR>th word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
 inserts the <VAR>n</VAR>th word from the end of the previous command.
+<P>
 
-<DT><CODE>yank-last-arg (M-., M-_)</CODE>
-<DD>
-<A NAME="IDX46"></A>
+<A NAME="IDX66"></A>
+<DT><CODE>yank-last-arg (M-. or M-_)</CODE>
+<DD><A NAME="IDX67"></A>
 Insert last argument to the previous command (the last word of the
 previous history entry).  With an
 argument, behave exactly like <CODE>yank-nth-arg</CODE>.
 Successive calls to <CODE>yank-last-arg</CODE> move back through the history
 list, inserting the last argument of each line in turn.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC16" HREF="rluserman.html#TOC16">Commands For Changing Text</A></H3>
+<A NAME="Commands For Text"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.3 Commands For Changing Text </H3>
+<!--docid::SEC16::-->
+<P>
 
 <DL COMPACT>
-
+<A NAME="IDX68"></A>
 <DT><CODE>delete-char (C-d)</CODE>
-<DD>
-<A NAME="IDX47"></A>
-Delete the character under the cursor.  If the cursor is at the
+<DD><A NAME="IDX69"></A>
+Delete the character at point.  If point is at the
 beginning of the line, there are no characters in the line, and
 the last character typed was not bound to <CODE>delete-char</CODE>, then
-return <CODE>EOF</CODE>.
+return EOF.
+<P>
 
+<A NAME="IDX70"></A>
 <DT><CODE>backward-delete-char (Rubout)</CODE>
-<DD>
-<A NAME="IDX48"></A>
+<DD><A NAME="IDX71"></A>
 Delete the character behind the cursor.  A numeric argument means
 to kill the characters instead of deleting them.
+<P>
 
+<A NAME="IDX72"></A>
 <DT><CODE>forward-backward-delete-char ()</CODE>
-<DD>
-<A NAME="IDX49"></A>
+<DD><A NAME="IDX73"></A>
 Delete the character under the cursor, unless the cursor is at the
 end of the line, in which case the character behind the cursor is
 deleted.  By default, this is not bound to a key.
+<P>
 
-<DT><CODE>quoted-insert (C-q, C-v)</CODE>
-<DD>
-<A NAME="IDX50"></A>
+<A NAME="IDX74"></A>
+<DT><CODE>quoted-insert (C-q or C-v)</CODE>
+<DD><A NAME="IDX75"></A>
 Add the next character typed to the line verbatim.  This is
 how to insert key sequences like <KBD>C-q</KBD>, for example.
+<P>
 
-<DT><CODE>tab-insert (M-TAB)</CODE>
-<DD>
-<A NAME="IDX51"></A>
+<A NAME="IDX76"></A>
+<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE>
+<DD><A NAME="IDX77"></A>
 Insert a tab character.
+<P>
 
-<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
-<DD>
-<A NAME="IDX52"></A>
+<A NAME="IDX78"></A>
+<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE>
+<DD><A NAME="IDX79"></A>
 Insert yourself.
+<P>
 
+<A NAME="IDX80"></A>
 <DT><CODE>transpose-chars (C-t)</CODE>
-<DD>
-<A NAME="IDX53"></A>
+<DD><A NAME="IDX81"></A>
 Drag the character before the cursor forward over
 the character at the cursor, moving the
 cursor forward as well.  If the insertion point
 is at the end of the line, then this
 transposes the last two characters of the line.
 Negative arguments have no effect.
+<P>
 
+<A NAME="IDX82"></A>
 <DT><CODE>transpose-words (M-t)</CODE>
-<DD>
-<A NAME="IDX54"></A>
+<DD><A NAME="IDX83"></A>
 Drag the word before point past the word after point,
 moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+<P>
 
+<A NAME="IDX84"></A>
 <DT><CODE>upcase-word (M-u)</CODE>
-<DD>
-<A NAME="IDX55"></A>
+<DD><A NAME="IDX85"></A>
 Uppercase the current (or following) word.  With a negative argument,
 uppercase the previous word, but do not move the cursor.
+<P>
 
+<A NAME="IDX86"></A>
 <DT><CODE>downcase-word (M-l)</CODE>
-<DD>
-<A NAME="IDX56"></A>
+<DD><A NAME="IDX87"></A>
 Lowercase the current (or following) word.  With a negative argument,
 lowercase the previous word, but do not move the cursor.
+<P>
 
+<A NAME="IDX88"></A>
 <DT><CODE>capitalize-word (M-c)</CODE>
-<DD>
-<A NAME="IDX57"></A>
+<DD><A NAME="IDX89"></A>
 Capitalize the current (or following) word.  With a negative argument,
 capitalize the previous word, but do not move the cursor.
+<P>
+
+<A NAME="IDX90"></A>
+<DT><CODE>overwrite-mode ()</CODE>
+<DD><A NAME="IDX91"></A>
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently.
+Each call to <CODE>readline()</CODE> starts in insert mode.
+<P>
+
+In overwrite mode, characters bound to <CODE>self-insert</CODE> replace
+the text at point rather than pushing the text to the right.
+Characters bound to <CODE>backward-delete-char</CODE> replace the character
+before point with a space.
+</P><P>
+
+By default, this command is unbound.
+</P><P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC17" HREF="rluserman.html#TOC17">Killing And Yanking</A></H3>
+<A NAME="Commands For Killing"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.4 Killing And Yanking </H3>
+<!--docid::SEC17::-->
+<P>
 
 <DL COMPACT>
 
+<A NAME="IDX92"></A>
 <DT><CODE>kill-line (C-k)</CODE>
-<DD>
-<A NAME="IDX58"></A>
+<DD><A NAME="IDX93"></A>
 Kill the text from point to the end of the line.
+<P>
 
+<A NAME="IDX94"></A>
 <DT><CODE>backward-kill-line (C-x Rubout)</CODE>
-<DD>
-<A NAME="IDX59"></A>
+<DD><A NAME="IDX95"></A>
 Kill backward to the beginning of the line.
+<P>
 
+<A NAME="IDX96"></A>
 <DT><CODE>unix-line-discard (C-u)</CODE>
-<DD>
-<A NAME="IDX60"></A>
+<DD><A NAME="IDX97"></A>
 Kill backward from the cursor to the beginning of the current line.
+<P>
 
+<A NAME="IDX98"></A>
 <DT><CODE>kill-whole-line ()</CODE>
-<DD>
-<A NAME="IDX61"></A>
-Kill all characters on the current line, no matter point is.
+<DD><A NAME="IDX99"></A>
+Kill all characters on the current line, no matter where point is.
 By default, this is unbound.
+<P>
 
+<A NAME="IDX100"></A>
 <DT><CODE>kill-word (M-d)</CODE>
-<DD>
-<A NAME="IDX62"></A>
+<DD><A NAME="IDX101"></A>
 Kill from point to the end of the current word, or if between
 words, to the end of the next word.
 Word boundaries are the same as <CODE>forward-word</CODE>.
+<P>
 
-<DT><CODE>backward-kill-word (M-DEL)</CODE>
-<DD>
-<A NAME="IDX63"></A>
+<A NAME="IDX102"></A>
+<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE>
+<DD><A NAME="IDX103"></A>
 Kill the word behind point.
 Word boundaries are the same as <CODE>backward-word</CODE>.
+<P>
 
+<A NAME="IDX104"></A>
 <DT><CODE>unix-word-rubout (C-w)</CODE>
-<DD>
-<A NAME="IDX64"></A>
+<DD><A NAME="IDX105"></A>
 Kill the word behind point, using white space as a word boundary.
 The killed text is saved on the kill-ring.
+<P>
 
+<A NAME="IDX106"></A>
 <DT><CODE>delete-horizontal-space ()</CODE>
-<DD>
-<A NAME="IDX65"></A>
+<DD><A NAME="IDX107"></A>
 Delete all spaces and tabs around point.  By default, this is unbound.
+<P>
 
+<A NAME="IDX108"></A>
 <DT><CODE>kill-region ()</CODE>
-<DD>
-<A NAME="IDX66"></A>
+<DD><A NAME="IDX109"></A>
 Kill the text in the current region.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX110"></A>
 <DT><CODE>copy-region-as-kill ()</CODE>
-<DD>
-<A NAME="IDX67"></A>
+<DD><A NAME="IDX111"></A>
 Copy the text in the region to the kill buffer, so it can be yanked
 right away.  By default, this command is unbound.
+<P>
 
+<A NAME="IDX112"></A>
 <DT><CODE>copy-backward-word ()</CODE>
-<DD>
-<A NAME="IDX68"></A>
+<DD><A NAME="IDX113"></A>
 Copy the word before point to the kill buffer.
 The word boundaries are the same as <CODE>backward-word</CODE>.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX114"></A>
 <DT><CODE>copy-forward-word ()</CODE>
-<DD>
-<A NAME="IDX69"></A>
+<DD><A NAME="IDX115"></A>
 Copy the word following point to the kill buffer.
 The word boundaries are the same as <CODE>forward-word</CODE>.
 By default, this command is unbound.
+<P>
 
+<A NAME="IDX116"></A>
 <DT><CODE>yank (C-y)</CODE>
-<DD>
-<A NAME="IDX70"></A>
-Yank the top of the kill ring into the buffer at the current
-cursor position.
+<DD><A NAME="IDX117"></A>
+Yank the top of the kill ring into the buffer at point.
+<P>
 
+<A NAME="IDX118"></A>
 <DT><CODE>yank-pop (M-y)</CODE>
-<DD>
-<A NAME="IDX71"></A>
+<DD><A NAME="IDX119"></A>
 Rotate the kill-ring, and yank the new top.  You can only do this if
-the prior command is yank or yank-pop.
+the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC18" HREF="rluserman.html#TOC18">Specifying Numeric Arguments</A></H3>
+<A NAME="Numeric Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.5 Specifying Numeric Arguments </H3>
+<!--docid::SEC18::-->
 <DL COMPACT>
 
-<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE>
-<DD>
-<A NAME="IDX72"></A>
+<A NAME="IDX120"></A>
+<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
+<DD><A NAME="IDX121"></A>
 Add this digit to the argument already accumulating, or start a new
 argument.  <KBD>M--</KBD> starts a negative argument.
+<P>
 
+<A NAME="IDX122"></A>
 <DT><CODE>universal-argument ()</CODE>
-<DD>
-<A NAME="IDX73"></A>
+<DD><A NAME="IDX123"></A>
 This is another way to specify an argument.
 If this command is followed by one or more digits, optionally with a
 leading minus sign, those digits define the argument.
@@ -1348,219 +1624,561 @@
 argument count sixteen, and so on.
 By default, this is not bound to a key.
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC19" HREF="rluserman.html#TOC19">Letting Readline Type For You</A></H3>
+<A NAME="Commands For Completion"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.6 Letting Readline Type For You </H3>
+<!--docid::SEC19::-->
+<P>
 
 <DL COMPACT>
+<A NAME="IDX124"></A>
+<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
+<DD><A NAME="IDX125"></A>
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
+The default is filename completion.
+<P>
 
-<DT><CODE>complete (TAB)</CODE>
-<DD>
-<A NAME="IDX74"></A>
-Attempt to do completion on the text before the cursor.  This is
-application-specific.  Generally, if you are typing a filename
-argument, you can do filename completion; if you are typing a command,
-you can do command completion; if you are typing in a symbol to GDB, you
-can do symbol name completion; if you are typing in a variable to Bash,
-you can do variable name completion, and so on.
-
+<A NAME="IDX126"></A>
 <DT><CODE>possible-completions (M-?)</CODE>
-<DD>
-<A NAME="IDX75"></A>
-List the possible completions of the text before the cursor.
+<DD><A NAME="IDX127"></A>
+List the possible completions of the text before point.
+<P>
 
+<A NAME="IDX128"></A>
 <DT><CODE>insert-completions (M-*)</CODE>
-<DD>
-<A NAME="IDX76"></A>
+<DD><A NAME="IDX129"></A>
 Insert all completions of the text before point that would have
 been generated by <CODE>possible-completions</CODE>.
+<P>
 
+<A NAME="IDX130"></A>
 <DT><CODE>menu-complete ()</CODE>
-<DD>
-<A NAME="IDX77"></A>
+<DD><A NAME="IDX131"></A>
 Similar to <CODE>complete</CODE>, but replaces the word to be completed
 with a single match from the list of possible completions.
 Repeated execution of <CODE>menu-complete</CODE> steps through the list
 of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
+At the end of the list of completions, the bell is rung
+(subject to the setting of <CODE>bell-style</CODE>)
+and the original text is restored.
 An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list
 of matches; a negative argument may be used to move backward
 through the list.
-This command is intended to be bound to <CODE>TAB</CODE>, but is unbound
+This command is intended to be bound to <KBD>TAB</KBD>, but is unbound
 by default.
+<P>
 
+<A NAME="IDX132"></A>
 <DT><CODE>delete-char-or-list ()</CODE>
-<DD>
-<A NAME="IDX78"></A>
+<DD><A NAME="IDX133"></A>
 Deletes the character under the cursor if not at the beginning or
 end of the line (like <CODE>delete-char</CODE>).
 If at the end of the line, behaves identically to
 <CODE>possible-completions</CODE>.
 This command is unbound by default.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC20" HREF="rluserman.html#TOC20">Keyboard Macros</A></H3>
+<A NAME="Keyboard Macros"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.7 Keyboard Macros </H3>
+<!--docid::SEC20::-->
 <DL COMPACT>
 
+<A NAME="IDX134"></A>
 <DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD>
-<A NAME="IDX79"></A>
+<DD><A NAME="IDX135"></A>
 Begin saving the characters typed into the current keyboard macro.
+<P>
 
+<A NAME="IDX136"></A>
 <DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD>
-<A NAME="IDX80"></A>
+<DD><A NAME="IDX137"></A>
 Stop saving the characters typed into the current keyboard macro
 and save the definition.
+<P>
 
+<A NAME="IDX138"></A>
 <DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD>
-<A NAME="IDX81"></A>
+<DD><A NAME="IDX139"></A>
 Re-execute the last keyboard macro defined, by making the characters
 in the macro appear as if typed at the keyboard.
+<P>
 
 </DL>
+<P>
 
-
-
-<H3><A NAME="SEC21" HREF="rluserman.html#TOC21">Some Miscellaneous Commands</A></H3>
+<A NAME="Miscellaneous Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.8 Some Miscellaneous Commands </H3>
+<!--docid::SEC21::-->
 <DL COMPACT>
 
+<A NAME="IDX140"></A>
 <DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD>
-<A NAME="IDX82"></A>
+<DD><A NAME="IDX141"></A>
 Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
 any bindings or variable assignments found there.
+<P>
 
+<A NAME="IDX142"></A>
 <DT><CODE>abort (C-g)</CODE>
-<DD>
-<A NAME="IDX83"></A>
+<DD><A NAME="IDX143"></A>
 Abort the current editing command and
 ring the terminal's bell (subject to the setting of
 <CODE>bell-style</CODE>).
+<P>
 
-<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
-<DD>
-<A NAME="IDX84"></A>
+<A NAME="IDX144"></A>
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
+<DD><A NAME="IDX145"></A>
 If the metafied character <VAR>x</VAR> is lowercase, run the command
 that is bound to the corresponding uppercase character.
+<P>
 
-<DT><CODE>prefix-meta (ESC)</CODE>
-<DD>
-<A NAME="IDX85"></A>
-Make the next character typed be metafied.  This is for keyboards
-without a meta key.  Typing <SAMP>`ESC f'</SAMP> is equivalent to typing
-<SAMP>`M-f'</SAMP>.
+<A NAME="IDX146"></A>
+<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
+<DD><A NAME="IDX147"></A>
+Metafy the next character typed.  This is for keyboards
+without a meta key.  Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
+<KBD>M-f</KBD>.
+<P>
 
-<DT><CODE>undo (C-_, C-x C-u)</CODE>
-<DD>
-<A NAME="IDX86"></A>
+<A NAME="IDX148"></A>
+<DT><CODE>undo (C-_ or C-x C-u)</CODE>
+<DD><A NAME="IDX149"></A>
 Incremental undo, separately remembered for each line.
+<P>
 
+<A NAME="IDX150"></A>
 <DT><CODE>revert-line (M-r)</CODE>
-<DD>
-<A NAME="IDX87"></A>
+<DD><A NAME="IDX151"></A>
 Undo all changes made to this line.  This is like executing the <CODE>undo</CODE>
 command enough times to get back to the beginning.
+<P>
 
+<A NAME="IDX152"></A>
 <DT><CODE>tilde-expand (M-~)</CODE>
-<DD>
-<A NAME="IDX88"></A>
+<DD><A NAME="IDX153"></A>
 Perform tilde expansion on the current word.
+<P>
 
+<A NAME="IDX154"></A>
 <DT><CODE>set-mark (C-@)</CODE>
-<DD>
-<A NAME="IDX89"></A>
-Set the mark to the current point.  If a
+<DD><A NAME="IDX155"></A>
+Set the mark to the point.  If a
 numeric argument is supplied, the mark is set to that position.
+<P>
 
+<A NAME="IDX156"></A>
 <DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD>
-<A NAME="IDX90"></A>
+<DD><A NAME="IDX157"></A>
 Swap the point with the mark.  The current cursor position is set to
 the saved position, and the old cursor position is saved as the mark.
+<P>
 
+<A NAME="IDX158"></A>
 <DT><CODE>character-search (C-])</CODE>
-<DD>
-<A NAME="IDX91"></A>
+<DD><A NAME="IDX159"></A>
 A character is read and point is moved to the next occurrence of that
 character.  A negative count searches for previous occurrences.
+<P>
 
+<A NAME="IDX160"></A>
 <DT><CODE>character-search-backward (M-C-])</CODE>
-<DD>
-<A NAME="IDX92"></A>
+<DD><A NAME="IDX161"></A>
 A character is read and point is moved to the previous occurrence
 of that character.  A negative count searches for subsequent
 occurrences.
+<P>
 
+<A NAME="IDX162"></A>
 <DT><CODE>insert-comment (M-#)</CODE>
-<DD>
-<A NAME="IDX93"></A>
-The value of the <CODE>comment-begin</CODE>
-variable is inserted at the beginning of the current line,
-and the line is accepted as if a newline had been typed.
+<DD><A NAME="IDX163"></A>
+Without a numeric argument, the value of the <CODE>comment-begin</CODE>
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value
+of <CODE>comment-begin</CODE>, the value is inserted, otherwise
+the characters in <CODE>comment-begin</CODE> are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+<P>
 
+<A NAME="IDX164"></A>
 <DT><CODE>dump-functions ()</CODE>
-<DD>
-<A NAME="IDX94"></A>
+<DD><A NAME="IDX165"></A>
 Print all of the functions and their key bindings to the
 Readline output stream.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
 
+<A NAME="IDX166"></A>
 <DT><CODE>dump-variables ()</CODE>
-<DD>
-<A NAME="IDX95"></A>
+<DD><A NAME="IDX167"></A>
 Print all of the settable variables and their values to the
 Readline output stream.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
 
+<A NAME="IDX168"></A>
 <DT><CODE>dump-macros ()</CODE>
-<DD>
-<A NAME="IDX96"></A>
+<DD><A NAME="IDX169"></A>
 Print all of the Readline key sequences bound to macros and the
-strings they ouput.  If a numeric argument is supplied,
+strings they output.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an <VAR>inputrc</VAR> file.  This command is unbound by default.
+<P>
+
+<A NAME="IDX170"></A>
+<DT><CODE>emacs-editing-mode (C-e)</CODE>
+<DD><A NAME="IDX171"></A>
+When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE>
+editing mode.
+<P>
+
+<A NAME="IDX172"></A>
+<DT><CODE>vi-editing-mode (M-C-j)</CODE>
+<DD><A NAME="IDX173"></A>
+When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE>
+editing mode.
+<P>
 
 </DL>
-
-
-
-<H2><A NAME="SEC22" HREF="rluserman.html#TOC22">Readline vi Mode</A></H2>
-
 <P>
+
+<A NAME="Readline vi Mode"></A>
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.5 Readline vi Mode </H2>
+<!--docid::SEC22::-->
+<P>
+
 While the Readline library does not have a full set of <CODE>vi</CODE>
 editing functions, it does contain enough to allow simple editing
 of the line.  The Readline <CODE>vi</CODE> mode behaves as specified in
 the POSIX 1003.2 standard.
+</P><P>
 
-</P>
-<P>
 In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
-editing modes, use the command M-C-j (toggle-editing-mode).
+editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode
+when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode).
 The Readline default is <CODE>emacs</CODE> mode.
+</P><P>
 
-</P>
-<P>
 When you enter a line in <CODE>vi</CODE> mode, you are already placed in
 `insertion' mode, as if you had typed an <SAMP>`i'</SAMP>.  Pressing <KBD>ESC</KBD>
 switches you into `command' mode, where you can edit the text of the
 line with the standard <CODE>vi</CODE> movement keys, move to previous
 history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
 so forth.
+</P><P>
 
-</P>
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A>
+<BR>
+<A NAME="TOC3" HREF="rluserman.html#SEC3">1.2 Readline Interaction</A>
+<BR>
+<UL>
+<A NAME="TOC4" HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A>
+<BR>
+<A NAME="TOC5" HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A>
+<BR>
+<A NAME="TOC6" HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A>
+<BR>
+<A NAME="TOC7" HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A>
+<BR>
+<A NAME="TOC8" HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A>
+<BR>
+</UL>
+<A NAME="TOC9" HREF="rluserman.html#SEC9">1.3 Readline Init File</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A>
+<BR>
+<A NAME="TOC11" HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>
+<BR>
+<A NAME="TOC12" HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A>
+<BR>
+</UL>
+<A NAME="TOC13" HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A>
+<BR>
+<UL>
+<A NAME="TOC14" HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A>
+<BR>
+<A NAME="TOC15" HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A>
+<BR>
+<A NAME="TOC16" HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A>
+<BR>
+<A NAME="TOC17" HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A>
+<BR>
+<A NAME="TOC18" HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A>
+<BR>
+<A NAME="TOC19" HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A>
+<BR>
+<A NAME="TOC20" HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A>
+<BR>
+<A NAME="TOC21" HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A>
+<BR>
+</UL>
+<A NAME="TOC22" HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A>
+<BR>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A>
+<BR>
 
-<P><HR><P>
-This document was generated on 1 March 2000 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Chet Ramey</I> on <I>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>  
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section 
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp; 
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position 
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
+the following structure:
+<UL>
+<LI> 1. Section One  </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>June, 27  2002</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
 </BODY>
 </HTML>
diff --git a/readline/doc/rluserman.info b/readline/doc/rluserman.info
index b714421..3fccbd4 100644
--- a/readline/doc/rluserman.info
+++ b/readline/doc/rluserman.info
@@ -1,17 +1,16 @@
-This is Info file rluserman.info, produced by Makeinfo version 1.68
-from the input file
+This is rluserman.info, produced by makeinfo version 4.1 from
 /usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo.
 
 INFO-DIR-SECTION Libraries
 START-INFO-DIR-ENTRY
-* Readline: (readline).       The GNU readline library API
+* RLuserman: (rluserman).       The GNU readline library User's Manual.
 END-INFO-DIR-ENTRY
 
    This document describes the end user interface of the GNU Readline
 Library, a utility which aids in the consistency of user interface
 across discrete programs that need to provide a command line interface.
 
-   Copyright (C) 1988-1999 Free Software Foundation, Inc.
+   Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice pare
@@ -69,10 +68,10 @@
    The following paragraphs describe the notation used to represent
 keystrokes.
 
-   The text <C-k> is read as `Control-K' and describes the character
+   The text `C-k' is read as `Control-K' and describes the character
 produced when the <k> key is pressed while the Control key is depressed.
 
-   The text <M-k> is read as `Meta-K' and describes the character
+   The text `M-k' is read as `Meta-K' and describes the character
 produced when the Meta key (if you have one) is depressed, and the <k>
 key is pressed.  The Meta key is labeled <ALT> on many keyboards.  On
 keyboards with two keys labeled <ALT> (usually to either side of the
@@ -83,18 +82,18 @@
 
    If you do not have a Meta or <ALT> key, or another key working as a
 Meta key, the identical keystroke can be generated by typing <ESC>
-first, and then typing <k>.  Either process is known as "metafying" the
-<k> key.
+_first_, and then typing <k>.  Either process is known as "metafying"
+the <k> key.
 
-   The text <M-C-k> is read as `Meta-Control-k' and describes the
-character produced by "metafying" <C-k>.
+   The text `M-C-k' is read as `Meta-Control-k' and describes the
+character produced by "metafying" `C-k'.
 
    In addition, several keys have their own names.  Specifically,
 <DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
-when seen in this text, or in an init file (*note Readline Init
-File::.).  If your keyboard lacks a <LFD> key, typing <C-j> will
-produce the desired character.  The <RET> key may be labeled <Return>
-or <Enter> on some keyboards.
+when seen in this text, or in an init file (*note Readline Init File::).
+If your keyboard lacks a <LFD> key, typing <C-j> will produce the
+desired character.  The <RET> key may be labeled <Return> or <Enter> on
+some keyboards.
 
 
 File: rluserman.info,  Node: Readline Interaction,  Next: Readline Init File,  Prev: Introduction and Notation,  Up: Command Line Editing
@@ -109,9 +108,9 @@
 you to retype the majority of the line.  Using these editing commands,
 you move the cursor to the place that needs correction, and delete or
 insert the text of the corrections.  Then, when you are satisfied with
-the line, you simply press <RETURN>.  You do not have to be at the end
-of the line to press <RETURN>; the entire line is accepted regardless
-of the location of the cursor within the line.
+the line, you simply press <RET>.  You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
 
 * Menu:
 
@@ -134,8 +133,8 @@
 
    Sometimes you may mistype a character, and not notice the error
 until you have typed several other characters.  In that case, you can
-type <C-b> to move the cursor to the left, and then correct your
-mistake.  Afterwards, you can move the cursor to the right with <C-f>.
+type `C-b' to move the cursor to the left, and then correct your
+mistake.  Afterwards, you can move the cursor to the right with `C-f'.
 
    When you add text in the middle of a line, you will notice that
 characters to the right of the cursor are `pushed over' to make room
@@ -145,28 +144,28 @@
 list of the bare essentials for editing the text of an input line
 follows.
 
-<C-b>
+`C-b'
      Move back one character.
 
-<C-f>
+`C-f'
      Move forward one character.
 
 <DEL> or <Backspace>
      Delete the character to the left of the cursor.
 
-<C-d>
+`C-d'
      Delete the character underneath the cursor.
 
 Printing characters
      Insert the character into the line at the cursor.
 
-<C-_> or <C-x C-u>
+`C-_' or `C-x C-u'
      Undo the last editing command.  You can undo all the way back to an
      empty line.
 
 (Depending on your configuration, the <Backspace> key be set to delete
 the character to the left of the cursor and the <DEL> key set to delete
-the character underneath the cursor, like <C-d>, rather than the
+the character underneath the cursor, like `C-d', rather than the
 character to the left of the cursor.)
 
 
@@ -177,26 +176,26 @@
 
    The above table describes the most basic keystrokes that you need in
 order to do editing of the input line.  For your convenience, many
-other commands have been added in addition to <C-b>, <C-f>, <C-d>, and
+other commands have been added in addition to `C-b', `C-f', `C-d', and
 <DEL>.  Here are some commands for moving more rapidly about the line.
 
-<C-a>
+`C-a'
      Move to the start of the line.
 
-<C-e>
+`C-e'
      Move to the end of the line.
 
-<M-f>
+`M-f'
      Move forward a word, where a word is composed of letters and
      digits.
 
-<M-b>
+`M-b'
      Move backward a word.
 
-<C-l>
+`C-l'
      Clear the screen, reprinting the current line at the top.
 
-   Notice how <C-f> moves forward a character, while <M-f> moves
+   Notice how `C-f' moves forward a character, while `M-f' moves
 forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
 
@@ -223,34 +222,34 @@
 
    Here is the list of commands for killing text.
 
-<C-k>
+`C-k'
      Kill the text from the current cursor position to the end of the
      line.
 
-<M-d>
+`M-d'
      Kill from the cursor to the end of the current word, or, if between
      words, to the end of the next word.  Word boundaries are the same
-     as those used by <M-f>.
+     as those used by `M-f'.
 
-<M-DEL>
-     Kill from the cursor the start of the previous word, or, if between
+`M-<DEL>'
+     Kill from the cursor the start of the current word, or, if between
      words, to the start of the previous word.  Word boundaries are the
-     same as those used by <M-b>.
+     same as those used by `M-b'.
 
-<C-w>
+`C-w'
      Kill from the cursor to the previous whitespace.  This is
-     different than <M-DEL> because the word boundaries differ.
+     different than `M-<DEL>' because the word boundaries differ.
 
    Here is how to "yank" the text back into the line.  Yanking means to
 copy the most-recently-killed text from the kill buffer.
 
-<C-y>
+`C-y'
      Yank the most recently killed text back into the buffer at the
      cursor.
 
-<M-y>
+`M-y'
      Rotate the kill-ring, and yank the new top.  You can only do this
-     if the prior command is <C-y> or <M-y>.
+     if the prior command is `C-y' or `M-y'.
 
 
 File: rluserman.info,  Node: Readline Arguments,  Next: Searching,  Prev: Readline Killing Commands,  Up: Readline Interaction
@@ -270,7 +269,8 @@
 sign (`-'), then the sign of the argument will be negative.  Once you
 have typed one meta digit to get the argument started, you can type the
 remainder of the digits, and then the command.  For example, to give
-the <C-d> command an argument of 10, you could type `M-1 0 C-d'.
+the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
+will delete the next ten characters on the input line.
 
 
 File: rluserman.info,  Node: Searching,  Prev: Readline Arguments,  Up: Readline Interaction
@@ -280,29 +280,34 @@
 
    Readline provides commands for searching through the command history
 for lines containing a specified string.  There are two search modes:
-INCREMENTAL and NON-INCREMENTAL.
+"incremental" and "non-incremental".
 
    Incremental searches begin before the user has finished typing the
 search string.  As each character of the search string is typed,
 Readline displays the next entry from the history matching the string
 typed so far.  An incremental search requires only as many characters
 as needed to find the desired history entry.  To search backward in the
-history for a particular string, type <C-r>.  Typing <C-s> searches
+history for a particular string, type `C-r'.  Typing `C-s' searches
 forward through the history.  The characters present in the value of
 the `isearch-terminators' variable are used to terminate an incremental
 search.  If that variable has not been assigned a value, the <ESC> and
-<C-J> characters will terminate an incremental search.  <C-g> will
+`C-J' characters will terminate an incremental search.  `C-g' will
 abort an incremental search and restore the original line.  When the
 search is terminated, the history entry containing the search string
 becomes the current line.
 
-   To find other matching entries in the history list, type <C-r> or
-<C-s> as appropriate.  This will search backward or forward in the
+   To find other matching entries in the history list, type `C-r' or
+`C-s' as appropriate.  This will search backward or forward in the
 history for the next entry matching the search string typed so far.
 Any other key sequence bound to a Readline command will terminate the
 search and execute that command.  For instance, a <RET> will terminate
 the search and accept the line, thereby executing the command from the
-history list.
+history list.  A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+   Readline remembers the last incremental search string.  If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
 
    Non-incremental searches read the entire search string before
 starting to search for matching history lines.  The search string may be
@@ -345,17 +350,24 @@
    There are only a few basic constructs allowed in the Readline init
 file.  Blank lines are ignored.  Lines beginning with a `#' are
 comments.  Lines beginning with a `$' indicate conditional constructs
-(*note Conditional Init Constructs::.).  Other lines denote variable
+(*note Conditional Init Constructs::).  Other lines denote variable
 settings and key bindings.
 
 Variable Settings
      You can modify the run-time behavior of Readline by altering the
      values of variables in Readline using the `set' command within the
-     init file.  Here is how to change from the default Emacs-like key
-     binding to use `vi' line editing commands:
+     init file.  The syntax is simple:
+
+          set VARIABLE VALUE
+
+     Here, for example, is how to change from the default Emacs-like
+     key binding to use `vi' line editing commands:
 
           set editing-mode vi
 
+     Variable names and values, where appropriate, are recognized
+     without regard to case.
+
      A great deal of run-time behavior is changeable with the following
      variables.
 
@@ -382,7 +394,8 @@
           possibilities.  If the number of possible completions is
           greater than this value, Readline will ask the user whether
           or not he wishes to view them; otherwise, they are simply
-          listed.  The default limit is `100'.
+          listed.  This variable must be set to an integer value
+          greater than or equal to 0.  The default limit is `100'.
 
     `convert-meta'
           If set to `on', Readline will convert characters with the
@@ -410,6 +423,10 @@
           If set to `on', tilde expansion is performed when Readline
           attempts word completion.  The default is `off'.
 
+          If set to `on', the history code attempts to place point at
+          the same location on each history line retrived with
+          `previous-history' or `next-history'.
+
     `horizontal-scroll-mode'
           This variable can be set to either `on' or `off'.  Setting it
           to `on' means that the text of the lines being edited will
@@ -419,7 +436,7 @@
 
     `input-meta'
           If set to `on', Readline will enable eight-bit input (it will
-          not strip the eighth bit from the characters it reads),
+          not clear the eighth bit in the characters it reads),
           regardless of what the terminal claims it can support.  The
           default value is `off'.  The name `meta-flag' is a synonym
           for this variable.
@@ -427,14 +444,14 @@
     `isearch-terminators'
           The string of characters that should terminate an incremental
           search without subsequently executing the character as a
-          command (*note Searching::.).  If this variable has not been
-          given a value, the characters <ESC> and <C-J> will terminate
+          command (*note Searching::).  If this variable has not been
+          given a value, the characters <ESC> and `C-J' will terminate
           an incremental search.
 
     `keymap'
           Sets Readline's idea of the current keymap for key binding
           commands.  Acceptable `keymap' names are `emacs',
-          `emacs-standard', `emacs-meta', `emacs-ctlx', `vi',
+          `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
           `vi-command', and `vi-insert'.  `vi' is equivalent to
           `vi-command'; `emacs' is equivalent to `emacs-standard'.  The
           default value is `emacs'.  The value of the `editing-mode'
@@ -449,11 +466,28 @@
           asterisk (`*') at the start of history lines which have been
           modified.  This variable is `off' by default.
 
+    `mark-symlinked-directories'
+          If set to `on', completed names which are symbolic links to
+          directories have a slash appended (subject to the value of
+          `mark-directories').  The default is `off'.
+
+    `match-hidden-files'
+          This variable, when set to `on', causes Readline to match
+          files whose names begin with a `.' (hidden files) when
+          performing filename completion, unless the leading `.' is
+          supplied by the user in the filename to be completed.  This
+          variable is `on' by default.
+
     `output-meta'
           If set to `on', Readline will display characters with the
           eighth bit set directly rather than as a meta-prefixed escape
           sequence.  The default is `off'.
 
+    `page-completions'
+          If set to `on', Readline uses an internal `more'-like pager
+          to display a screenful of possible completions at a time.
+          This variable is `on' by default.
+
     `print-completions-horizontally'
           If set to `on', Readline will display completions with matches
           sorted horizontally in alphabetical order, rather than down
@@ -477,11 +511,14 @@
      command name, the default keybinding, if any, and a short
      description of what the command does.
 
-     Once you know the name of the command, simply place the name of
-     the key you wish to bind the command to, a colon, and then the
-     name of the command on a line in the init file.  The name of the
-     key can be expressed in different ways, depending on which is most
-     comfortable for you.
+     Once you know the name of the command, simply place on a line in
+     the init file the name of the key you wish to bind the command to,
+     a colon, and then the name of the command.  The name of the key
+     can be expressed in different ways, depending on what you find most
+     comfortable.
+
+     In addition to command names, readline allows keys to be bound to
+     a string that is inserted when the key is pressed (a MACRO).
 
     KEYNAME: FUNCTION-NAME or MACRO
           KEYNAME is the name of a key spelled out in English.  For
@@ -490,11 +527,16 @@
                Meta-Rubout: backward-kill-word
                Control-o: "> output"
 
-          In the above example, <C-u> is bound to the function
-          `universal-argument', and <C-o> is bound to run the macro
+          In the above example, `C-u' is bound to the function
+          `universal-argument', `M-DEL' is bound to the function
+          `backward-kill-word', and `C-o' is bound to run the macro
           expressed on the right hand side (that is, to insert the text
           `> output' into the line).
 
+          A number of symbolic character names are recognized while
+          processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+          NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
     "KEYSEQ": FUNCTION-NAME or MACRO
           KEYSEQ differs from KEYNAME above in that strings denoting an
           entire key sequence can be specified, by placing the key
@@ -506,11 +548,11 @@
                "\C-x\C-r": re-read-init-file
                "\e[11~": "Function Key 1"
 
-          In the above example, <C-u> is bound to the function
+          In the above example, `C-u' is again bound to the function
           `universal-argument' (just as it was in the first example),
-          `<C-x> <C-r>' is bound to the function `re-read-init-file',
-          and `<ESC> <[> <1> <1> <~>' is bound to insert the text
-          `Function Key 1'.
+          `C-x C-r' is bound to the function `re-read-init-file', and
+          `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
+          Key 1'.
 
      The following GNU Emacs style escape sequences are available when
      specifying key sequences:
@@ -561,13 +603,13 @@
           vertical tab
 
     `\NNN'
-          the character whose `ASCII' code is the octal value NNN (one
-          to three digits)
-
-    `\xNNN'
-          the character whose `ASCII' code is the hexadecimal value NNN
+          the eight-bit character whose value is the octal value NNN
           (one to three digits)
 
+    `\xHH'
+          the eight-bit character whose value is the hexadecimal value
+          HH (one or two hex digits)
+
      When entering the text of a macro, single or double quotes must be
      used to indicate a macro definition.  Unquoted text is assumed to
      be a function name.  In the macro body, the backslash escapes
@@ -614,10 +656,10 @@
           The APPLICATION construct is used to include
           application-specific settings.  Each program using the
           Readline library sets the APPLICATION NAME, and you can test
-          for it.  This could be used to bind key sequences to
-          functions useful for a specific program.  For instance, the
-          following command adds a key sequence that quotes the current
-          or previous word in Bash:
+          for a particular value.  This could be used to bind key
+          sequences to functions useful for a specific program.  For
+          instance, the following command adds a key sequence that
+          quotes the current or previous word in Bash:
                $if Bash
                # Quote the current or previous word
                "\C-xq": "\eb\"\ef\""
@@ -633,7 +675,8 @@
 
 `$include'
      This directive takes a single filename as an argument and reads
-     commands and bindings from that file.
+     commands and bindings from that file.  For example, the following
+     directive reads from `/etc/inputrc':
           $include /etc/inputrc
 
 
@@ -642,19 +685,19 @@
 Sample Init File
 ----------------
 
-   Here is an example of an inputrc file.  This illustrates key
+   Here is an example of an INPUTRC file.  This illustrates key
 binding, variable assignment, and conditional syntax.
 
 
      # This file controls the behaviour of line input editing for
-     # programs that use the Gnu Readline library.  Existing programs
-     # include FTP, Bash, and Gdb.
+     # programs that use the GNU Readline library.  Existing
+     # programs include FTP, Bash, and GDB.
      #
      # You can re-read the inputrc file with C-x C-r.
      # Lines beginning with '#' are comments.
      #
-     # First, include any systemwide bindings and variable assignments from
-     # /etc/Inputrc
+     # First, include any systemwide bindings and variable
+     # assignments from /etc/Inputrc
      $include /etc/Inputrc
      
      #
@@ -706,10 +749,12 @@
      $if Bash
      # edit the path
      "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-     # prepare to type a quoted word -- insert open and close double quotes
+     # prepare to type a quoted word --
+     # insert open and close double quotes
      # and move to just after the open quote
      "\C-x\"": "\"\"\C-b"
-     # insert a backslash (testing backslash escapes in sequences and macros)
+     # insert a backslash (testing backslash escapes
+     # in sequences and macros)
      "\C-x\\": "\\"
      # Quote the current or previous word
      "\C-xq": "\eb\"\ef\""
@@ -725,16 +770,16 @@
      # don't strip characters to 7 bits when reading
      set input-meta on
      
-     # allow iso-latin1 characters to be inserted rather than converted to
-     # prefix-meta sequences
+     # allow iso-latin1 characters to be inserted rather
+     # than converted to prefix-meta sequences
      set convert-meta off
      
-     # display characters with the eighth bit set directly rather than
-     # as meta-prefixed characters
+     # display characters with the eighth bit set directly
+     # rather than as meta-prefixed characters
      set output-meta on
      
-     # if there are more than 150 possible completions for a word, ask the
-     # user if he wants to see all of them
+     # if there are more than 150 possible completions for
+     # a word, ask the user if he wants to see all of them
      set completion-query-items 150
      
      # For FTP
@@ -762,13 +807,13 @@
 * Miscellaneous Commands::	Other miscellaneous commands.
 
    This section describes Readline commands that may be bound to key
-sequences.
+sequences.  Command names without an accompanying key sequence are
+unbound by default.
 
-   Command names without an accompanying key sequence are unbound by
-default.  In the following descriptions, POINT refers to the current
-cursor position, and MARK refers to a cursor position saved by the
+   In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the
 `set-mark' command.  The text between the point and mark is referred to
-as the REGION.
+as the "region".
 
 
 File: rluserman.info,  Node: Commands For Moving,  Next: Commands For History,  Up: Bindable Readline Commands
@@ -809,16 +854,18 @@
 Commands For Manipulating The History
 -------------------------------------
 
-`accept-line (Newline, Return)'
+`accept-line (Newline or Return)'
      Accept the line regardless of where the cursor is.  If this line is
-     non-empty, add it to the history list.  If this line was a history
-     line, then restore the history line to its original state.
+     non-empty, it may be added to the history list for future recall
+     with `add_history()'.  If this line is a modified history line,
+     the history line is restored to its original state.
 
 `previous-history (C-p)'
-     Move `up' through the history list.
+     Move `back' through the history list, fetching the previous
+     command.
 
 `next-history (C-n)'
-     Move `down' through the history list.
+     Move `forward' through the history list, fetching the next command.
 
 `beginning-of-history (M-<)'
      Move to the first line in the history.
@@ -858,12 +905,12 @@
 
 `yank-nth-arg (M-C-y)'
      Insert the first argument to the previous command (usually the
-     second word on the previous line).  With an argument N, insert the
-     Nth word from the previous command (the words in the previous
-     command begin with word 0).  A negative argument inserts the Nth
-     word from the end of the previous command.
+     second word on the previous line) at point.  With an argument N,
+     insert the Nth word from the previous command (the words in the
+     previous command begin with word 0).  A negative argument inserts
+     the Nth word from the end of the previous command.
 
-`yank-last-arg (M-., M-_)'
+`yank-last-arg (M-. or M-_)'
      Insert last argument to the previous command (the last word of the
      previous history entry).  With an argument, behave exactly like
      `yank-nth-arg'.  Successive calls to `yank-last-arg' move back
@@ -877,10 +924,9 @@
 --------------------------
 
 `delete-char (C-d)'
-     Delete the character under the cursor.  If the cursor is at the
-     beginning of the line, there are no characters in the line, and
-     the last character typed was not bound to `delete-char', then
-     return `EOF'.
+     Delete the character at point.  If point is at the beginning of
+     the line, there are no characters in the line, and the last
+     character typed was not bound to `delete-char', then return EOF.
 
 `backward-delete-char (Rubout)'
      Delete the character behind the cursor.  A numeric argument means
@@ -891,11 +937,11 @@
      end of the line, in which case the character behind the cursor is
      deleted.  By default, this is not bound to a key.
 
-`quoted-insert (C-q, C-v)'
+`quoted-insert (C-q or C-v)'
      Add the next character typed to the line verbatim.  This is how to
-     insert key sequences like <C-q>, for example.
+     insert key sequences like `C-q', for example.
 
-`tab-insert (M-TAB)'
+`tab-insert (M-<TAB>)'
      Insert a tab character.
 
 `self-insert (a, b, A, 1, !, ...)'
@@ -909,7 +955,8 @@
 
 `transpose-words (M-t)'
      Drag the word before point past the word after point, moving point
-     past that word as well.
+     past that word as well.  If the insertion point is at the end of
+     the line, this transposes the last two words on the line.
 
 `upcase-word (M-u)'
      Uppercase the current (or following) word.  With a negative
@@ -923,6 +970,20 @@
      Capitalize the current (or following) word.  With a negative
      argument, capitalize the previous word, but do not move the cursor.
 
+`overwrite-mode ()'
+     Toggle overwrite mode.  With an explicit positive numeric argument,
+     switches to overwrite mode.  With an explicit non-positive numeric
+     argument, switches to insert mode.  This command affects only
+     `emacs' mode; `vi' mode does overwrite differently.  Each call to
+     `readline()' starts in insert mode.
+
+     In overwrite mode, characters bound to `self-insert' replace the
+     text at point rather than pushing the text to the right.
+     Characters bound to `backward-delete-char' replace the character
+     before point with a space.
+
+     By default, this command is unbound.
+
 
 File: rluserman.info,  Node: Commands For Killing,  Next: Numeric Arguments,  Prev: Commands For Text,  Up: Bindable Readline Commands
 
@@ -939,15 +1000,15 @@
      Kill backward from the cursor to the beginning of the current line.
 
 `kill-whole-line ()'
-     Kill all characters on the current line, no matter point is.  By
-     default, this is unbound.
+     Kill all characters on the current line, no matter where point is.
+     By default, this is unbound.
 
 `kill-word (M-d)'
      Kill from point to the end of the current word, or if between
      words, to the end of the next word.  Word boundaries are the same
      as `forward-word'.
 
-`backward-kill-word (M-DEL)'
+`backward-kill-word (M-<DEL>)'
      Kill the word behind point.  Word boundaries are the same as
      `backward-word'.
 
@@ -978,12 +1039,11 @@
      command is unbound.
 
 `yank (C-y)'
-     Yank the top of the kill ring into the buffer at the current
-     cursor position.
+     Yank the top of the kill ring into the buffer at point.
 
 `yank-pop (M-y)'
      Rotate the kill-ring, and yank the new top.  You can only do this
-     if the prior command is yank or yank-pop.
+     if the prior command is `yank' or `yank-pop'.
 
 
 File: rluserman.info,  Node: Numeric Arguments,  Next: Commands For Completion,  Prev: Commands For Killing,  Up: Bindable Readline Commands
@@ -993,7 +1053,7 @@
 
 `digit-argument (M-0, M-1, ... M--)'
      Add this digit to the argument already accumulating, or start a new
-     argument.  <M-> starts a negative argument.
+     argument.  `M--' starts a negative argument.
 
 `universal-argument ()'
      This is another way to specify an argument.  If this command is
@@ -1014,17 +1074,13 @@
 Letting Readline Type For You
 -----------------------------
 
-`complete (TAB)'
-     Attempt to do completion on the text before the cursor.  This is
-     application-specific.  Generally, if you are typing a filename
-     argument, you can do filename completion; if you are typing a
-     command, you can do command completion; if you are typing in a
-     symbol to GDB, you can do symbol name completion; if you are
-     typing in a variable to Bash, you can do variable name completion,
-     and so on.
+`complete (<TAB>)'
+     Attempt to perform completion on the text before point.  The
+     actual completion performed is application-specific.  The default
+     is filename completion.
 
 `possible-completions (M-?)'
-     List the possible completions of the text before the cursor.
+     List the possible completions of the text before point.
 
 `insert-completions (M-*)'
      Insert all completions of the text before point that would have
@@ -1035,10 +1091,11 @@
      a single match from the list of possible completions.  Repeated
      execution of `menu-complete' steps through the list of possible
      completions, inserting each match in turn.  At the end of the list
-     of completions, the bell is rung and the original text is restored.
-     An argument of N moves N positions forward in the list of matches;
-     a negative argument may be used to move backward through the list.
-     This command is intended to be bound to `TAB', but is unbound by
+     of completions, the bell is rung (subject to the setting of
+     `bell-style') and the original text is restored.  An argument of N
+     moves N positions forward in the list of matches; a negative
+     argument may be used to move backward through the list.  This
+     command is intended to be bound to <TAB>, but is unbound by
      default.
 
 `delete-char-or-list ()'
@@ -1082,11 +1139,11 @@
      If the metafied character X is lowercase, run the command that is
      bound to the corresponding uppercase character.
 
-`prefix-meta (ESC)'
-     Make the next character typed be metafied.  This is for keyboards
-     without a meta key.  Typing `ESC f' is equivalent to typing `M-f'.
+`prefix-meta (<ESC>)'
+     Metafy the next character typed.  This is for keyboards without a
+     meta key.  Typing `<ESC> f' is equivalent to typing `M-f'.
 
-`undo (C-_, C-x C-u)'
+`undo (C-_ or C-x C-u)'
      Incremental undo, separately remembered for each line.
 
 `revert-line (M-r)'
@@ -1097,8 +1154,8 @@
      Perform tilde expansion on the current word.
 
 `set-mark (C-@)'
-     Set the mark to the current point.  If a numeric argument is
-     supplied, the mark is set to that position.
+     Set the mark to the point.  If a numeric argument is supplied, the
+     mark is set to that position.
 
 `exchange-point-and-mark (C-x C-x)'
      Swap the point with the mark.  The current cursor position is set
@@ -1116,9 +1173,14 @@
      occurrences.
 
 `insert-comment (M-#)'
-     The value of the `comment-begin' variable is inserted at the
-     beginning of the current line, and the line is accepted as if a
-     newline had been typed.
+     Without a numeric argument, the value of the `comment-begin'
+     variable is inserted at the beginning of the current line.  If a
+     numeric argument is supplied, this command acts as a toggle:  if
+     the characters at the beginning of the line do not match the value
+     of `comment-begin', the value is inserted, otherwise the
+     characters in `comment-begin' are deleted from the beginning of
+     the line.  In either case, the line is accepted as if a newline
+     had been typed.
 
 `dump-functions ()'
      Print all of the functions and their key bindings to the Readline
@@ -1134,9 +1196,17 @@
 
 `dump-macros ()'
      Print all of the Readline key sequences bound to macros and the
-     strings they ouput.  If a numeric argument is supplied, the output
-     is formatted in such a way that it can be made part of an INPUTRC
-     file.  This command is unbound by default.
+     strings they output.  If a numeric argument is supplied, the
+     output is formatted in such a way that it can be made part of an
+     INPUTRC file.  This command is unbound by default.
+
+`emacs-editing-mode (C-e)'
+     When in `vi' command mode, this causes a switch to `emacs' editing
+     mode.
+
+`vi-editing-mode (M-C-j)'
+     When in `emacs' editing mode, this causes a switch to `vi' editing
+     mode.
 
 
 File: rluserman.info,  Node: Readline vi Mode,  Prev: Bindable Readline Commands,  Up: Command Line Editing
@@ -1150,7 +1220,8 @@
 standard.
 
    In order to switch interactively between `emacs' and `vi' editing
-modes, use the command M-C-j (toggle-editing-mode).  The Readline
+modes, use the command `M-C-j' (bound to emacs-editing-mode when in
+`vi' mode and to vi-editing-mode in `emacs' mode).  The Readline
 default is `emacs' mode.
 
    When you enter a line in `vi' mode, you are already placed in
@@ -1162,28 +1233,28 @@
 
 
 Tag Table:
-Node: Top1221
-Node: Command Line Editing1617
-Node: Introduction and Notation2231
-Node: Readline Interaction3850
-Node: Readline Bare Essentials5044
-Node: Readline Movement Commands6826
-Node: Readline Killing Commands7784
-Node: Readline Arguments9691
-Node: Searching10667
-Node: Readline Init File12511
-Node: Readline Init File Syntax13573
-Node: Conditional Init Constructs22839
-Node: Sample Init File25279
-Node: Bindable Readline Commands28450
-Node: Commands For Moving29495
-Node: Commands For History30345
-Node: Commands For Text33063
-Node: Commands For Killing35067
-Node: Numeric Arguments37035
-Node: Commands For Completion38163
-Node: Keyboard Macros39912
-Node: Miscellaneous Commands40472
-Node: Readline vi Mode43277
+Node: Top1208
+Node: Command Line Editing1604
+Node: Introduction and Notation2218
+Node: Readline Interaction3837
+Node: Readline Bare Essentials5025
+Node: Readline Movement Commands6807
+Node: Readline Killing Commands7765
+Node: Readline Arguments9675
+Node: Searching10712
+Node: Readline Init File12856
+Node: Readline Init File Syntax13918
+Node: Conditional Init Constructs24802
+Node: Sample Init File27328
+Node: Bindable Readline Commands30513
+Node: Commands For Moving31564
+Node: Commands For History32414
+Node: Commands For Text35273
+Node: Commands For Killing37988
+Node: Numeric Arguments39940
+Node: Commands For Completion41069
+Node: Keyboard Macros42602
+Node: Miscellaneous Commands43162
+Node: Readline vi Mode46512
 
 End Tag Table
diff --git a/readline/doc/rluserman.ps b/readline/doc/rluserman.ps
index 4edf578..b46417a 100644
--- a/readline/doc/rluserman.ps
+++ b/readline/doc/rluserman.ps
@@ -1,14 +1,14 @@
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software
+%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
 %%Title: rluserman.dvi
-%%Pages: 22
+%%Pages: 24
 %%PageOrder: Ascend
 %%BoundingBox: 0 0 612 792
 %%EndComments
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -t letter -o rluserman.ps rluserman.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2000.03.01:1453
+%DVIPSSource:  TeX output 2002.06.27:1354
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -20,9 +20,9 @@
 matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
 exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
 statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
 /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
 df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
 definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
@@ -50,7 +50,7 @@
 mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
 SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
 userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
 /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
 /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
@@ -69,29 +69,12 @@
 %%EndProcSet
 TeXDict begin 40258431 52099146 1000 300 300 (rluserman.dvi)
 @start
-%DVIPSBitmapFont: Fa cmti10 10.95 1
-/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fb cmbxti10 14.4 1
-/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46
+%DVIPSBitmapFont: Fa cmbxti10 14.4 1
+/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46
 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmmi10 10.95 1
-/Fc 1 59 df<127012F8A3127005057C840D>58 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fd cmsltt10 10.95 6
-/Fd 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E
-769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07
-C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C
-0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E
-00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6
-38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E
-A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92
-D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303
-3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fe cmbx12 13.14 46
-/Fe 46 122 df<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA212
+%DVIPSBitmapFont: Fb cmbx12 13.14 46
+/Fb 46 122 df<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA212
 00B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC38
 7C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F
 00131E5B1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA21823
@@ -180,45 +163,97 @@
 005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B
 1370EA68E0EA7FC0001FC8FC1D237F9720>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff cmsl10 10.95 22
-/Ff 22 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380
-70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12
-D<EAFFF0A20C027E8A0F>45 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4A
-C7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F
-48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75
-D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313
-1EEB2E2038784F40381F878014147D9317>97 D<13FEEA0383380E0780121C0038130090
-C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99
-D<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA
-3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0001201
-A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EB
-E1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218
-121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F80
-9417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA6
-5A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB80F014
-C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF
-8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A
-121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB803800
-07EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<
-38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13
-C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438
-E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807
-EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61
-C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E
-01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA
-0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA0780
-90C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802
-EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010
-147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840
-EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA2
-5BEA305E381F9F8011147B9319>I<381FF0FF3803C0780001137014403800E0C0EBE180
-EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07
-FC18147F9318>120 D<390FF83F803901E00E00EBC00C140813E000005B143014205C13
-705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12
-E61278191D809318>I E
+%DVIPSBitmapFont: Fc cmsl10 10.95 40
+/Fc 40 122 df<EAFFF0A20C027E8A0F>45 D<1408140C141C143CA2147C147E149EA2EB
+011EA21302801304A21308A20110138014071320A2EB7FFF90384007C0EB8003A2EA0100
+A21202EC01E01206001F130339FF801FFE1F207F9F22>65 D<0007B5FC3900F803C09038
+7801E0EC00F04913F8A515F03801E001EC03E015C0EC0F809038FFFE009038E00F803903
+C003C0EC01E015F0A21400A2485A1401A215E01403EC07C0390F000F80EC3E00B512F01D
+1F7E9E20>I<ECFE02903807018690381C004E0170133E49131E4848131C4848130C1207
+48C7FC5A121E003E1408003C1400127CA45AA4127815101520A27E1540001C14806CEB01
+006C13023803800C3800E030EB3FC01F217C9F21>I<0007B57E3900F801E09038780070
+81497F151E150E150FA348481480A6484814005DA3151E153E4848133C5DA25D4A5A4A5A
+260F000FC7FC143CB512F0211F7E9E23>I<0007B512FC3900F8007C0178131C150C5B15
+04A414043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A21560
+15C0380F00011407B612801E1F7E9E1F>I<0007B512F83900F800780178133815185B15
+08A53901E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D
+1F7E9E1E>I<3A07FF83FFC03A00F8007C000178133CA2495BA648485BA490B5FCEBE000
+4848485AA64848485AA64848485A01807F39FFF07FF8221F7E9E22>72
+D<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10>
+I<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C1460
+14F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381380F
+00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A25BA6485AA648
+5AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E9E1C>I<D807
+F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D801035BEB01E0
+A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C001E1300
+B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F048481378485A
+153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14E01403
+003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F23>I<
+0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01E0EC03C0EC0F
+00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FFFE3900F80780
+90387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C038
+80141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078CC7EA01F020207E
+9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120EA3000F1300A2
+7FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338A31430006013
+70146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512F0383C07800030
+1430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21
+>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600705BA25C
+A200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F
+000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B142301805C00
+0713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4
+EA01F015F85B5D5B15605B000014402C207A9E2F>87 D<EA07F8EA0C0CEA1E061307121C
+1200A313FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F87801414
+7D9317>97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14
+F0A5387001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA03
+83380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D
+9314>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA
+7002EA3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0
+001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB
+3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FC
+A21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC
+181F809417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6
+120EA65A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB
+80F014C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07
+C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A612
+0EA65A121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB
+80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E93
+26>I<38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380
+001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012
+F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3
+E03807EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C380740
+70EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA07
+02381E01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA
+07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300
+EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301
+EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA
+87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2
+EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4
+131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E
+01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15147C9318>I<381FF0FF
+3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E134E1387EA0107
+380203801204380C01C0383C03E038FE07FC18147F9318>120 D<390FF83F803901E00E
+00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C13381318
+1310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I
+E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg cmr8 8 41
-/Fg 41 124 df<126012F0A212701210A21220A21240A2040A7D960A>39
+%DVIPSBitmapFont: Fd cmti10 10.95 8
+/Fd 8 117 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5
+12E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801701310EC0E20A313609038E0
+0640EC038091C7FC5BA21201EA3180127948C8FC1262123C1D29829F1A>12
+D<127012F8A212F012E005057B840E>46 D<EB3C60EBE2703801C1E0EA0380EA07005A38
+0E01C0121EA3383C0380A4EB0700A2EA1C0F1317EA0C2EEA03CEEA000EA25BA21230EA78
+38485AEA60E0EA3F80141D7E9315>103 D<13C0EA01E0A213C0C7FCA7120E12131223EA
+4380EA4700A21287120EA35AA3EA38401380A21270EA31001232121C0B1F7C9E0E>105
+D<381C0F80382630C0384740601380EB0070A2008E13E0120EA3381C01C0A3EB03840038
+1388A2EB0708EB031000701330383001C016147C931A>110 D<EA1C1EEA266138278380
+EA47871307EB0300008EC7FC120EA35AA45AA45A123011147C9313>114
+D<13FCEA0302EA0601EA0C03130713061300EA0F8013F0EA07F8EA03FCEA003E130E1270
+EAF00CA2EAE008EA4010EA2060EA1F8010147D9313>I<EA018013C0EA0380A4EA0700A2
+EAFFF0EA0700120EA45AA45AA31320EA7040A21380A2EA3100121E0C1C7C9B0F>I
+E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fe cmr8 8 26
+/Fe 26 118 df<126012F0A212701210A21220A21240A2040A7D960A>39
 D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49
 D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018
 13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0
@@ -228,68 +263,104 @@
 381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512
 E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214
 3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C
-0C1304A390C7FCA6EAFFC014177F9617>I<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F
-000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616
->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3
-EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13
-101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0
-14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0
-EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470
-A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96
-1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC
-EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038
-1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814
-10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206
-217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379
-EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400
-5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA
-70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012
-E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA
-E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670
-120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70
-70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838
-EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712
-7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813
-F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C
-EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5
-EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400
-5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12
-6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A
-70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80
-EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0
-EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80
-110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700
-0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07
-4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE
-1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212
-A4127810147F8D13>I<B512801101808812>123 D E
+0C1304A390C7FCA6EAFFC014177F9617>I<EAFFC0001CC7FCAD1420A31460A2144014C0
+1303B5FC13177F9616>76 D<EAFFFE381C0380EB00C014601470A4146014C0EB0380381F
+FE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470A414E014C0
+EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F961A>82
+D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C
+130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038180040
+1308A200801304A300001300AF3803FF8016177F9619>I<12FCA212C0B3AB12FCA20621
+7D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379EA
+70FFEA1F1E100E7F8D12>97 D<EA07F0EA18381230EA7010EA600012E0A41260EA700812
+30EA1830EA07C00D0E7F8D10>99 D<EA0FC0EA1860EA3030EA7038EAE018EAFFF8EAE000
+A31260EA7008EA3010EA1830EA07C00D0E7F8D10>101 D<1203EA0780A2EA0300C7FCA5
+EA1F801203AF1243EAE30012E7127C091D82960B>106 D<12F81238A8133E1338133013
+4013801239EA3FC0EA39E0123813F01378133CA2EAFE7F10177F9613>I<EAF8F8EA3B1C
+EA3C0E1238AA38FE3F80110E7F8D14>110 D<EAF9F0EA3E1CEA380613077F1480A41400
+5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>112 D<EAF9E0EA3A70123CEA3820
+1300A9B4FC0C0E7F8D0E>114 D<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80EA1FC0EA
+01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0EA3800A7
+1340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80110E7F8D
+14>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh cmsy9 9 2
-/Fh 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E
+%DVIPSBitmapFont: Ff cmsy9 9 2
+/Ff 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E
 A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA
 0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I
 E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi cmcsc10 10.95 8
-/Fi 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E
-48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900
-781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E
-38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4
-15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038
-0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713
-80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300
-EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB
-F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB
-087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A
-FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813
-08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E
-961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C
-130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110
-D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117
-D E
+%DVIPSBitmapFont: Fg cmsltt10 10.95 29
+/Fg 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E
+769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3
+C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA
+7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203
+120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I<EB3E18EBFFB8
+4813F8EA07C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338
+380780383C0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3807FFC014E014F03801C0F814
+78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013
+07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000
+A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18
+1C7F9B18>I<EB1FF8EB3FFCEB1FF8EB01C0A4EB0380A6EB0700A6130EA2124012E06C5A
+EAE03CEAFFF86C5AEA1FC0161C7C9B18>74 D<EA07FC487E6C5AEA01C0A4485AA648C7FC
+A6120E14301470A4B512E0A3141C7E9B18>76 D<3907E01F80000FEB3FC0000714803903
+B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6
+5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12
+1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92
+D<387FFFC0B512E0A26C13C013047E7F18>95 D<EA03FC48B4FC4813801303380601C012
+00A2137FEA07FF121FEA3F813878038012F012E0A21307EA701F387FFFF0EA3FFBEA0FE1
+14147D9318>97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012
+38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I<EB07E0
+A31300A4EB01C0EA01F1EA07FDEA0FFFEA1E0FEA3C0738780380127012E0A4EB0700A25B
+5B6C5AEA787F383FFFC0381FEFE0380F87C0131C7C9B18>100 D<13F8EA07FE487E381F
+0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F
+FE6C5AEA07F012147B9318>I<EB01F8EB07FC131FEB1E3CEB38181400A25B381FFFF05A
+7E38007000A25BA6485AA6EA7FFE12FF127F161C7E9B18>I<EB1E1F90387FFF8090B5FC
+3901E1E3003803C0E01380EA0700A3495AA238038780EA07FF49C7FCEA0E7890C8FCA26C
+B47E4813E0487F383C007848133812705AA2147800705B387C03E0383FFFC0000F90C7FC
+EA03FC191F809318>I<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6
+EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106
+D<EA07E0120F12071200A4485AEBC7FEA3EBC1E0EBC3C038038780EB8F00139E13BC13FE
+13EEEA07CF1387EB0780130314C01301387FC7F838FFE7FC387FC7F8171C7F9B18>I<EA
+0FFCA3EA001CA45BA65BA65BA6B5128014C01480121C7D9B18>I<13FCEA03FF000F1380
+EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F
+FC6C5AEA07E013147C9318>111 D<EBF8C0EA03FDEA0FFFEA1F0FEA3C07387803801270
+12E0A4EB0700A25BA26C5AEA787FEA3FFEEA1FEEEA078EEA000EA35BA43801FF80A3121E
+7C9318>113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA
+FFFC7F5B17147E9318>I<EBFE603807FFE05AEA1F01121C003813C0EA3C00001F1300EA
+0FF8EA07FE3800FF801307383001C01270A238780380EA7C07B51200EAEFFEEA63F81314
+7D9318>I<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF
+E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013
+E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119
+D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC
+EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F
+F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13
+78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I
+E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fj cmbx12 17.28 18
-/Fj 18 117 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3
+%DVIPSBitmapFont: Fh cmcsc10 10.95 12
+/Fh 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807
+FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97
+D<EB7E083803819838070078000C1338001C13185A00781308127000F01300A700701308
+127812386C1310120C000713603803818038007E0015177E961B>99
+D<B512C0EA1C011300144014601420A213081400A21318EA1FF8EA1C1813081410A21300
+14301420A21460EB01E0B5FC14177E9619>101 D<B512C0EA1C011300144014601420A2
+13081400A21318EA1FF8EA1C181308A390C7FCA6EAFFC013177E9618>I<EB7E08380381
+9838070078000C1338001C13185A00781308127000F01300A5EB03FEEB00381270127812
+387E120C1207380380D838007F0817177E961D>I<EAFF80EA1C00B3A3EAFF8009177E96
+0E>105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13
+0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110
+D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700
+70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D>
+I<EAFFFCEA1C07EB03C0130114E0A414C01303EB0700EA1FFC001CC7FCAAB47E13177E96
+19>I<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA
+001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9615>115
+D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117
+D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F
+133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF
+18177F961C>120 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fi cmbx12 17.28 18
+/Fi 18 117 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3
 1C2E7AAD28>49 D<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB
 079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607A248
 5A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D15
@@ -330,14 +401,14 @@
 D<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7FCB0EC0380A712
 01EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmsy10 10.95 1
-/Fk 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000
-061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15
-30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7
-FC282B7EA02D>13 D E
+%DVIPSBitmapFont: Fj cmsy10 10.95 1
+/Fj 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01
+800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15
+306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0
+D900FEC7FC272B7DA02E>13 D E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fl cmbx12 14.4 39
-/Fl 39 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
+%DVIPSBitmapFont: Fk cmbx12 14.4 39
+/Fk 39 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
 0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46
 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49
 D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2
@@ -418,8 +489,8 @@
 3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B
 EA74F0EA3FE0EA0F8020277F9A23>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fm cmtt10 10.95 77
-/Fm 77 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
+%DVIPSBitmapFont: Fl cmtt10 10.95 77
+/Fl 77 127 df<127012F8B012701200A5127012F8A31270051C779B18>33
 D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5
 12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18>
 I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F
@@ -459,8 +530,8 @@
 FF803803FE00EA00F8131C7E9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E013
 00A214F01470A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F9B18>
 I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A315
-1C7F9B18>I<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0
-A3151C7F9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5
+1C7F9B18>I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0
+A3141C7E9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5
 EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B
 18>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8
 387F07F0151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C
@@ -527,8 +598,8 @@
 ABEA03C012FF90C7FC127C13247E9F18>125 D<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA
 60C00F067C9B18>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fn cmr10 10.95 72
-/Fn 72 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
+%DVIPSBitmapFont: Fm cmr10 10.95 71
+/Fm 71 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7
 B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701
 A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<127012F812FCA212741204A312
 08A21210A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5AA2123812
@@ -538,7 +609,7 @@
 1210A31220A21240050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A312700505
 7C840D>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78
 0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>48 D<13801203120F12F31203B3A6
-EA07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF8
+EA07C0EA7FFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF8
 03A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380
 EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F12
 001400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F0138012
@@ -566,24 +637,23 @@
 7F9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF1301
 13001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780
 071401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE
-1A1F7F9E1E>I<90380FE0109038381C309038E002703803C00139078000F048C7127012
-1E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E39
-03C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780
-AD90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>
-I<3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F
-9E17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB
-13C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F
-7E9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E
-1C>I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D13
-83A290380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F
-7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB07
-80A2EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D
-1F7E9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0
-A2007C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E0
-6CEB03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F00
-7C141E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F
->I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A28014
-3CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82
+1A1F7F9E1E>I<90380FE02090387818609038E004E03803800238070001481300001E14
+60A25A1520127C127800F81400A7EC7FFCEC03E000781301127C123CA27EA27E7E380380
+023900E00460903878182090380FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5
+FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<39FF
+F007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21E013
+41EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23>75
+D<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>I<B4
+6CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A29038
+0E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>
+I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03
+C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22
+>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14
+F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C0
+6C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80
+EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<B512
+E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814
+3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>82
 D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8
 6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180
 38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014
@@ -598,44 +668,44 @@
 EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89
 D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<12FFA21203B3B3A512FFA2082D80A10D
 >93 D<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96
-D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313
+D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313
 1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00
 C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F
 19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C
 0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112
 381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA
-0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706
-EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0
-1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA
-33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C
-13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2
-121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F
-7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA
-6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013
-E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12
-FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2
-001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38
-FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600
-7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01
-8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7
-FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612
-7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD
-18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0
-00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14
-7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C
-7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83
-F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370
-A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8
-0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14
-7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370
-137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>
-I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00
-E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12
-60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70
-06130EEAFFFE10147F9314>I E
+0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA
+01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010
+20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33
+E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13
+C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212
+1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F
+9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61
+80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0
+EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC
+121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200
+1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF
+8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070
+13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180
+14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC
+A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270
+12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18
+EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000
+127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F
+9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F
+9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8
+383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3
+132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807
+04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F
+9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013
+7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I<
+38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8
+A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260
+EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006
+130EEAFFFE10147F9314>I E
 %EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fo cmbx12 20.736 19
-/Fo 19 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F
+%DVIPSBitmapFont: Fn cmbx12 20.736 19
+/Fn 19 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F
 010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48
 5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F
 DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0
@@ -698,1198 +768,1232 @@
 
 %%EndSetup
 %%Page: 1 1
-1 0 bop 75 693 a Fo(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p
-75 743 1800 17 v 936 791 a Fn(Edition)17 b(4.1,)c(for)i
-Fm(Readline)f(Library)g Fn(V)l(ersion)i(4.1.)1609 845
-y(Jan)o(uary)f(2000)75 2467 y Fl(Brian)23 b(F)-6 b(o)n(x,)23
+1 0 bop 75 659 a Fn(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p
+75 709 1800 17 v 936 757 a Fm(Edition)17 b(4.3,)c(for)i
+Fl(Readline)f(Library)g Fm(V)l(ersion)i(4.3.)1643 811
+y(Marc)o(h)e(2002)75 2467 y Fk(Brian)23 b(F)-6 b(o)n(x,)23
 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75
 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop
 %%Page: 2 2
-2 1 bop 75 250 a Fn(This)22 b(do)q(cumen)o(t)f(describ)q(es)i(the)f
-(end)f(user)h(in)o(terface)f(of)g(the)g(GNU)g(Readline)j(Library)l(,)f
-(a)e(utilit)o(y)75 305 y(whic)o(h)14 b(aids)f(in)g(the)g(consistency)h
+2 1 bop 75 217 a Fm(This)22 b(do)q(cumen)o(t)f(describ)q(es)i(the)f
+(end)f(user)h(in)o(terface)f(of)g(the)g(GNU)g(Readline)i(Library)l(,)g
+(a)e(utilit)o(y)75 271 y(whic)o(h)14 b(aids)f(in)g(the)g(consistency)h
 (of)e(user)h(in)o(terface)g(across)f(discrete)h(programs)f(that)g(need)
-h(to)f(pro)o(vide)75 360 y(a)j(command)g(line)i(in)o(terface.)75
-427 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
-(oundation)75 482 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75
-537 y(Boston,)d(MA)h(02111)f(USA)75 604 y(P)o(ermission)j(is)f(gran)o
+h(to)f(pro)o(vide)75 326 y(a)j(command)g(line)i(in)o(terface.)75
+394 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
+(oundation)75 448 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75
+503 y(Boston,)d(MA)h(02111)f(USA)75 570 y(P)o(ermission)j(is)f(gran)o
 (ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f
-(this)h(man)o(ual)f(pro)o(vided)h(the)75 659 y(cop)o(yrigh)o(t)e
+(this)h(man)o(ual)f(pro)o(vided)h(the)75 625 y(cop)o(yrigh)o(t)e
 (notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h
-(on)f(all)h(copies.)75 726 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
+(on)f(all)h(copies.)75 692 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
 (cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h
-(man)o(ual)g(under)h(the)f(con-)75 781 y(ditions)k(for)e(v)o(erbatim)h
+(man)o(ual)g(under)h(the)f(con-)75 747 y(ditions)k(for)e(v)o(erbatim)h
 (cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g
-(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 836 y(under)h(the)f(terms)g
+(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 802 y(under)h(the)f(terms)g
 (of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
-903 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
+869 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
 (distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
-g(lan-)75 958 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
+g(lan-)75 924 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
 (for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
-(ermission)g(notice)75 1013 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
+(ermission)g(notice)75 979 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
 (translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are)
 d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289
-2661 y Fk(\015)i Fn(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+2661 y Fj(\015)h Fm(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l
 (oundation,)h(Inc.)p eop
 %%Page: 1 3
-1 2 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(1)75 183 y Fj(1)41 b(Command)28 b(Line)e(Editing)137
-299 y Fn(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f
-(of)g(the)g Fi(gnu)g Fn(command)g(line)i(editing)f(in)o(terface.)75
-426 y Fl(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137
-522 y Fn(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e
+1 2 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(1)75 149 y Fi(1)41 b(Command)28 b(Line)e(Editing)137
+271 y Fm(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f
+(of)g(the)g Fh(gnu)g Fm(command)g(line)i(editing)f(in)o(terface.)75
+403 y Fk(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137
+501 y Fm(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e
 (notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137
-589 y(The)h(text)327 587 y Fh(h)p 339 561 56 2 v 339
-589 a Fg(C-k)p 339 597 V 393 587 a Fh(i)424 589 y Fn(is)f(read)g(as)g
-(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q
-(duced)h(when)f(the)1831 587 y Fh(h)p 1844 561 19 2 v
-1844 589 a Fg(k)p 1844 597 V 1860 587 a Fh(i)75 644 y
-Fn(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h
-(depressed.)137 711 y(The)f(text)325 709 y Fh(h)p 337
-683 63 2 v 337 711 a Fg(M-k)p 337 719 V 397 709 a Fh(i)427
-711 y Fn(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o
-(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y)
+569 y(The)h(text)f Fg(C-k)h Fm(is)g(read)g(as)f(`Con)o(trol-K')g(and)h
+(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831
+567 y Ff(h)p 1844 541 19 2 v 1844 569 a Fe(k)p 1844 577
+V 1860 567 a Ff(i)75 624 y Fm(k)o(ey)d(is)h(pressed)g(while)g(the)f
+(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g
+Fg(M-k)f Fm(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o
+(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y)
 o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930
-764 y Fh(h)p 942 738 19 2 v 942 766 a Fg(k)p 942 774
-V 958 764 a Fh(i)987 766 y Fn(k)o(ey)g(is)h(pressed.)20
-b(The)15 b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 764 y
-Fh(h)p 1791 738 72 2 v 1791 766 a Fg(AL)m(T)p 1791 774
-V 1860 764 a Fh(i)75 821 y Fn(on)e(man)o(y)g(k)o(eyb)q(oards.)19
+745 y Ff(h)p 942 719 V 942 747 a Fe(k)p 942 755 V 958
+745 a Ff(i)987 747 y Fm(k)o(ey)g(is)h(pressed.)20 b(The)15
+b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Ff(h)p 1791
+719 72 2 v 1791 747 a Fe(AL)m(T)p 1791 755 V 1860 745
+a Ff(i)75 802 y Fm(on)e(man)o(y)g(k)o(eyb)q(oards.)19
 b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled)
-1213 819 y Fh(h)p 1225 793 V 1225 821 a Fg(AL)m(T)p 1225
-828 V 1294 819 a Fh(i)1322 821 y Fn(\(usually)i(to)e(either)i(side)g
-(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fh(h)p
-400 847 V 400 876 a Fg(AL)m(T)p 400 883 V 469 874 a Fh(i)499
-876 y Fn(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g
-(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 874 y Fh(h)p
-1709 847 V 1709 876 a Fg(AL)m(T)p 1709 883 V 1778 874
-a Fh(i)1808 876 y Fn(k)o(ey)75 930 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f
+1213 800 y Ff(h)p 1225 774 V 1225 802 a Fe(AL)m(T)p 1225
+810 V 1294 800 a Ff(i)1322 802 y Fm(\(usually)i(to)e(either)i(side)g
+(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Ff(h)p
+400 829 V 400 857 a Fe(AL)m(T)p 400 865 V 469 855 a Ff(i)499
+857 y Fm(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g
+(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Ff(h)p
+1709 829 V 1709 857 a Fe(AL)m(T)p 1709 865 V 1778 855
+a Ff(i)1808 857 y Fm(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f
 (also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g
-(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 985
+(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967
 y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g
-(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1052
+(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035
 y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694
-1050 y Fh(h)p 706 1024 V 706 1052 a Fg(AL)m(T)p 706 1060
-V 775 1050 a Fh(i)801 1052 y Fn(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w)
+1033 y Ff(h)p 706 1007 V 706 1035 a Fe(AL)m(T)p 706 1043
+V 775 1033 a Ff(i)801 1035 y Fm(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w)
 o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75
-1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping)
-809 1105 y Fh(h)p 821 1079 70 2 v 821 1107 a Fg(ESC)p
-821 1115 V 888 1105 a Fh(i)915 1107 y Ff(\014rst)p Fn(,)g(and)g(then)h
-(t)o(yping)1339 1105 y Fh(h)p 1351 1079 19 2 v 1351 1107
-a Fg(k)p 1351 1115 V 1368 1105 a Fh(i)1383 1107 y Fn(.)18
-b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j
-Ff(metafying)k Fn(the)425 1160 y Fh(h)p 437 1134 V 437
-1162 a Fg(k)p 437 1169 V 454 1160 a Fh(i)484 1162 y Fn(k)o(ey)l(.)137
-1229 y(The)h(text)334 1227 y Fh(h)p 347 1201 100 2 v
-347 1229 a Fg(M-C-k)p 347 1236 V 444 1227 a Fh(i)479
-1229 y Fn(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h
-(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Ff(metafying)291
-1281 y Fh(h)p 303 1255 56 2 v 303 1283 a Fg(C-k)p 303
-1291 V 357 1281 a Fh(i)372 1283 y Fn(.)137 1350 y(In)e(addition,)h(sev)
-o(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30
-b(Sp)q(eci\014cally)l(,)1384 1348 y Fh(h)p 1396 1322
-73 2 v 1396 1350 a Fg(DEL)p 1396 1358 V 1467 1348 a Fh(i)1482
-1350 y Fn(,)1514 1348 y Fh(h)p 1526 1322 70 2 v 1526
-1350 a Fg(ESC)p 1526 1358 V 1593 1348 a Fh(i)1608 1350
-y Fn(,)1640 1348 y Fh(h)p 1652 1322 72 2 v 1652 1350
-a Fg(LFD)p 1652 1358 V 1722 1348 a Fh(i)1737 1350 y Fn(,)1768
-1348 y Fh(h)p 1780 1322 70 2 v 1780 1350 a Fg(SPC)p 1780
-1358 V 1847 1348 a Fh(i)1862 1350 y Fn(,)75 1403 y Fh(h)p
-87 1377 76 2 v 87 1405 a Fg(RET)p 87 1413 V 160 1403
-a Fh(i)175 1405 y Fn(,)23 b(and)306 1403 y Fh(h)p 318
-1377 74 2 v 318 1405 a Fg(T)m(AB)p 318 1413 V 390 1403
-a Fh(i)427 1405 y Fn(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f
+1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping)
+809 1088 y Ff(h)p 822 1062 70 2 v 822 1090 a Fe(ESC)p
+822 1098 V 888 1088 a Ff(i)915 1090 y Fd(\014rst)p Fm(,)g(and)g(then)h
+(t)o(yping)1339 1088 y Ff(h)p 1351 1062 19 2 v 1351 1090
+a Fe(k)p 1351 1098 V 1368 1088 a Ff(i)1383 1090 y Fm(.)18
+b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j
+Fc(metafying)k Fm(the)425 1143 y Ff(h)p 437 1117 V 437
+1145 a Fe(k)p 437 1153 V 454 1143 a Ff(i)484 1145 y Fm(k)o(ey)l(.)137
+1214 y(The)i(text)e Fg(M-C-k)h Fm(is)h(read)f(as)f(`Meta-Con)o(trol-k')
+g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75
+1268 y Fc(metafying)e Fg(C-k)p Fm(.)137 1337 y(In)g(addition,)h(sev)o
+(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30
+b(Sp)q(eci\014cally)l(,)1384 1335 y Ff(h)p 1396 1309
+73 2 v 1396 1337 a Fe(DEL)p 1396 1345 V 1467 1335 a Ff(i)1482
+1337 y Fm(,)1514 1335 y Ff(h)p 1526 1309 70 2 v 1526
+1337 a Fe(ESC)p 1526 1345 V 1593 1335 a Ff(i)1608 1337
+y Fm(,)1640 1335 y Ff(h)p 1652 1309 72 2 v 1652 1337
+a Fe(LFD)p 1652 1345 V 1722 1335 a Ff(i)1737 1337 y Fm(,)1768
+1335 y Ff(h)p 1780 1309 70 2 v 1780 1337 a Fe(SPC)p 1780
+1345 V 1847 1335 a Ff(i)1862 1337 y Fm(,)75 1390 y Ff(h)p
+87 1364 76 2 v 87 1392 a Fe(RET)p 87 1399 V 160 1390
+a Ff(i)175 1392 y Fm(,)23 b(and)306 1390 y Ff(h)p 318
+1364 74 2 v 318 1392 a Fe(T)m(AB)p 318 1399 V 390 1390
+a Ff(i)427 1392 y Fm(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f
 (in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75
-1460 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32
+1447 y(Section)d(1.3)f([Readline)h(Init)g(File],)h(page)e(4\).)32
 b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444
-1458 y Fh(h)p 1456 1432 72 2 v 1456 1460 a Fg(LFD)p 1456
-1468 V 1526 1458 a Fh(i)1560 1460 y Fn(k)o(ey)l(,)h(t)o(yping)1802
-1458 y Fh(h)p 1814 1432 49 2 v 1814 1460 a Fg(C-j)p 1814
-1468 V 1860 1458 a Fh(i)75 1515 y Fn(will)c(pro)q(duce)g(the)f(desired)
-h(c)o(haracter.)j(The)874 1513 y Fh(h)p 886 1487 76 2
-v 886 1515 a Fg(RET)p 886 1522 V 959 1513 a Fh(i)989
-1515 y Fn(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513
-y Fh(h)p 1397 1487 109 2 v 1397 1515 a Fg(Return)p 1397
-1522 V 1503 1513 a Fh(i)1533 1515 y Fn(or)1588 1513 y
-Fh(h)p 1600 1487 86 2 v 1600 1515 a Fg(En)o(ter)p 1600
-1522 V 1684 1513 a Fh(i)1714 1515 y Fn(on)f(some)75 1569
-y(k)o(eyb)q(oards.)75 1697 y Fl(1.2)33 b(Readline)23
-b(In)n(teraction)137 1793 y Fn(Often)13 b(during)h(an)e(in)o(teractiv)o
+1445 y Ff(h)p 1456 1419 72 2 v 1456 1447 a Fe(LFD)p 1456
+1454 V 1526 1445 a Ff(i)1560 1447 y Fm(k)o(ey)l(,)h(t)o(yping)1802
+1445 y Ff(h)p 1814 1419 49 2 v 1814 1447 a Fe(C-j)p 1814
+1454 V 1860 1445 a Ff(i)75 1501 y Fm(will)c(pro)q(duce)g(the)f(desired)
+h(c)o(haracter.)j(The)874 1499 y Ff(h)p 886 1473 76 2
+v 886 1501 a Fe(RET)p 886 1509 V 959 1499 a Ff(i)989
+1501 y Fm(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499
+y Ff(h)p 1397 1473 109 2 v 1397 1501 a Fe(Return)p 1397
+1509 V 1503 1499 a Ff(i)1533 1501 y Fm(or)1588 1499 y
+Ff(h)p 1600 1473 86 2 v 1600 1501 a Fe(En)o(ter)p 1600
+1509 V 1684 1499 a Ff(i)1714 1501 y Fm(on)f(some)75 1556
+y(k)o(eyb)q(oards.)75 1688 y Fk(1.2)33 b(Readline)23
+b(In)n(teraction)137 1786 y Fm(Often)13 b(during)h(an)e(in)o(teractiv)o
 (e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,)
-h(only)g(to)f(notice)h(that)f(the)75 1848 y(\014rst)k(w)o(ord)f(on)h
-(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e
+h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h
+(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)i(library)f
 (giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75
-1903 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,)
+1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,)
 g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g
-(and)h(not)g(forcing)75 1958 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s
+(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s
 (jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h
-(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2012
+(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005
 y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f
 (insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75
-2067 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o
-(ou)e(simply)i(press)1160 2065 y Fh(h)p 1172 2039 155
-2 v 1172 2067 a Fg(RETURN)p 1172 2075 V 1324 2065 a Fh(i)1339
-2067 y Fn(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75
-2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120
-y Fh(h)p 646 2094 V 646 2122 a Fg(RETURN)p 646 2130 V
-798 2120 a Fh(i)813 2122 y Fn(;)g(the)h(en)o(tire)g(line)h(is)f
-(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177
-y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y
-Fe(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137
-2384 y Fn(In)12 b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g
-(the)h(line,)h(simply)g(t)o(yp)q(e)f(them.)18 b(The)12
-b(t)o(yp)q(ed)g(c)o(haracter)f(app)q(ears)75 2439 y(where)16
-b(the)h(cursor)f(w)o(as,)f(and)h(then)h(the)f(cursor)g(mo)o(v)o(es)g
-(one)g(space)g(to)g(the)g(righ)o(t.)23 b(If)17 b(y)o(ou)f(mist)o(yp)q
-(e)g(a)75 2493 y(c)o(haracter,)e(y)o(ou)h(can)g(use)h(y)o(our)f(erase)g
-(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h(delete)g(the)f(mist)o(yp)q
-(ed)h(c)o(haracter.)137 2560 y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)
-q(e)h(a)f(c)o(haracter,)f(and)i(not)f(notice)h(the)f(error)g(un)o(til)i
-(y)o(ou)e(ha)o(v)o(e)g(t)o(yp)q(ed)75 2615 y(sev)o(eral)f(other)f(c)o
-(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102
-2613 y Fh(h)p 1114 2587 57 2 v 1114 2615 a Fg(C-b)p 1114
-2623 V 1168 2613 a Fh(i)1197 2615 y Fn(to)f(mo)o(v)o(e)g(the)h(cursor)g
-(to)f(the)h(left,)g(and)75 2670 y(then)i(correct)e(y)o(our)h(mistak)o
-(e.)20 b(Afterw)o(ards,)13 b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g
-(to)g(the)g(righ)o(t)g(with)1714 2668 y Fh(h)p 1727 2642
-49 2 v 1727 2670 a Fg(C-f)p 1727 2678 V 1772 2668 a Fh(i)1787
-2670 y Fn(.)p eop
+2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o
+(ou)e(simply)i(press)1160 2058 y Ff(h)p 1172 2032 76
+2 v 1172 2060 a Fe(RET)p 1172 2068 V 1245 2058 a Ff(i)1260
+2060 y Fm(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f
+(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563
+2113 y Ff(h)p 575 2087 V 575 2115 a Fe(RET)p 575 2122
+V 648 2113 a Ff(i)663 2115 y Fm(;)i(the)f(en)o(tire)h(line)g(is)g
+(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75
+2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fb(1.2.1)30
+b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fm(In)12
+b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h
+(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f
+(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h
+(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23
+b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h
+(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h
+(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560
+y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f
+(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t)
+o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19
+b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fg(C-b)f
+Fm(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75
+2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13
+b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g
+(with)g Fg(C-f)p Fm(.)p eop
 %%Page: 2 4
-2 3 bop 75 -58 a Fn(2)1322 b(GNU)15 b(Readline)i(Library)137
-183 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j
+2 3 bop 75 -58 a Fm(2)1322 b(GNU)15 b(Readline)h(Library)137
+149 y(When)h(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j
 (y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75
-238 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h
+204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h
 (ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21
-b(Lik)o(ewise,)75 293 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j
+b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j
 (the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h
-(cursor)g(are)f(`pulled)75 348 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e
+(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e
 (blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h
 (text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75
-402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o
-(ws.)75 479 y Fh(h)p 87 453 57 2 v 87 481 a Fg(C-b)p
-87 489 V 142 479 a Fh(i)315 481 y Fn(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o
-(haracter.)75 558 y Fh(h)p 87 532 49 2 v 87 560 a Fg(C-f)p
-87 567 V 133 558 a Fh(i)315 560 y Fn(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c)
-o(haracter.)75 636 y Fh(h)p 87 610 73 2 v 87 638 a Fg(DEL)p
-87 646 V 158 636 a Fh(i)188 638 y Fn(or)244 636 y Fh(h)p
-256 610 159 2 v 256 638 a Fg(Bac)o(kspace)p 256 646 V
-412 636 a Fh(i)315 693 y Fn(Delete)h(the)f(c)o(haracter)g(to)f(the)h
-(left)h(of)f(the)g(cursor.)75 770 y Fh(h)p 87 744 57
-2 v 87 772 a Fg(C-d)p 87 779 V 142 770 a Fh(i)315 772
-y Fn(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75
-850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o
+369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o
+(ws.)75 449 y Fg(C-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o
+(haracter.)75 530 y Fg(C-f)168 b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h
+(c)o(haracter.)75 608 y Ff(h)p 87 582 73 2 v 87 610 a
+Fe(DEL)p 87 618 V 158 608 a Ff(i)188 610 y Fm(or)244
+608 y Ff(h)p 256 582 159 2 v 256 610 a Fe(Bac)o(kspace)p
+256 618 V 412 608 a Ff(i)315 665 y Fm(Delete)h(the)f(c)o(haracter)g(to)
+f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fg(C-d)168
+b Fm(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75
+825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o
 (haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75
-981 y Fh(h)p 87 955 50 2 v 87 983 a Fg(C-)p 126 983 11
-2 v 87 991 50 2 v 135 981 a Fh(i)165 983 y Fn(or)221
-981 y Fh(h)p 233 955 125 2 v 233 983 a Fg(C-x)c(C-u)p
-233 991 V 355 981 a Fh(i)315 1038 y Fn(Undo)17 b(the)g(last)f(editing)i
-(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o(y)f(bac)o
-(k)h(to)f(an)g(empt)o(y)315 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on)
-f(y)o(our)g(con\014guration,)g(the)863 1170 y Fh(h)p
-875 1144 159 2 v 875 1172 a Fg(Bac)o(kspace)p 875 1179
-V 1032 1170 a Fh(i)1063 1172 y Fn(k)o(ey)g(b)q(e)h(set)f(to)f(delete)i
-(the)f(c)o(haracter)g(to)f(the)75 1226 y(left)h(of)f(the)h(cursor)f
-(and)g(the)596 1224 y Fh(h)p 608 1198 73 2 v 608 1226
-a Fg(DEL)p 608 1234 V 679 1224 a Fh(i)710 1226 y Fn(k)o(ey)h(set)f(to)g
-(delete)h(the)g(c)o(haracter)f(underneath)h(the)g(cursor,)f(lik)o(e)75
-1279 y Fh(h)p 87 1253 57 2 v 87 1281 a Fg(C-d)p 87 1289
-V 142 1279 a Fh(i)157 1281 y Fn(,)f(rather)f(than)h(the)h(c)o(haracter)
-e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fe(1.2.2)30
-b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487
-y Fn(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e
+961 y Fg(C-_)g Fm(or)f Fg(C-x)h(C-u)315 1015 y Fm(Undo)i(the)g(last)f
+(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o
+(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75
+1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863
+1149 y Ff(h)p 875 1123 V 875 1151 a Fe(Bac)o(kspace)p
+875 1159 V 1032 1149 a Ff(i)1063 1151 y Fm(k)o(ey)g(b)q(e)h(set)f(to)f
+(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h
+(cursor)f(and)g(the)596 1204 y Ff(h)p 608 1178 73 2 v
+608 1206 a Fe(DEL)p 608 1213 V 679 1204 a Ff(i)710 1206
+y Fm(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h
+(the)g(cursor,)f(lik)o(e)75 1260 y Fg(C-d)p Fm(,)e(rather)h(than)g(the)
+g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75
+1374 y Fb(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137
+1471 y Fm(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e
 (basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g
-(do)g(editing)75 1542 y(of)f(the)h(input)h(line.)21 b(F)l(or)12
+(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12
 b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o
-(e)f(b)q(een)i(added)f(in)h(addition)75 1597 y(to)130
-1595 y Fh(h)p 142 1569 V 142 1597 a Fg(C-b)p 142 1605
-V 197 1595 a Fh(i)212 1597 y Fn(,)239 1595 y Fh(h)p 251
-1569 49 2 v 251 1597 a Fg(C-f)p 251 1605 V 297 1595 a
-Fh(i)312 1597 y Fn(,)339 1595 y Fh(h)p 351 1569 57 2
-v 351 1597 a Fg(C-d)p 351 1605 V 406 1595 a Fh(i)421
-1597 y Fn(,)g(and)536 1595 y Fh(h)p 548 1569 73 2 v 548
-1597 a Fg(DEL)p 548 1605 V 619 1595 a Fh(i)634 1597 y
-Fn(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h
-(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fh(h)p
-87 1702 55 2 v 87 1730 a Fg(C-a)p 87 1738 V 140 1728
-a Fh(i)315 1730 y Fn(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.)
-75 1807 y Fh(h)p 87 1781 53 2 v 87 1809 a Fg(C-e)p 87
-1817 V 138 1807 a Fh(i)315 1809 y Fn(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f
-(the)g(line.)75 1885 y Fh(h)p 87 1859 55 2 v 87 1887
-a Fg(M-f)p 87 1895 V 140 1885 a Fh(i)315 1887 y Fn(Mo)o(v)o(e)f(forw)o
-(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h(is)h(comp)q(osed)f(of)g
-(letters)g(and)h(digits.)75 1964 y Fh(h)p 87 1938 64
-2 v 87 1966 a Fg(M-b)p 87 1974 V 149 1964 a Fh(i)315
-1966 y Fn(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75
-2043 y Fh(h)p 87 2017 48 2 v 87 2045 a Fg(C-l)p 87 2052
-V 132 2043 a Fh(i)315 2045 y Fn(Clear)g(the)h(screen,)f(reprin)o(ting)h
-(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w)
-368 2121 y Fh(h)p 380 2095 49 2 v 380 2123 a Fg(C-f)p
-380 2131 V 426 2121 a Fh(i)452 2123 y Fn(mo)o(v)o(es)f(forw)o(ard)f(a)i
-(c)o(haracter,)f(while)1105 2121 y Fh(h)p 1117 2095 55
-2 v 1117 2123 a Fg(M-f)p 1117 2131 V 1170 2121 a Fh(i)1197
-2123 y Fn(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18
-b(It)12 b(is)g(a)g(lo)q(ose)75 2178 y(con)o(v)o(en)o(tion)j(that)f(con)
+(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fg(C-b)p
+Fm(,)h Fg(C-f)p Fm(,)f Fg(C-d)p Fm(,)g(and)522 1578 y
+Ff(h)p 534 1552 V 534 1580 a Fe(DEL)p 534 1588 V 605
+1578 a Ff(i)619 1580 y Fm(.)23 b(Here)16 b(are)g(some)f(commands)h(for)
+f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635
+y(line.)75 1716 y Fg(C-a)168 b Fm(Mo)o(v)o(e)14 b(to)h(the)g(start)f
+(of)h(the)g(line.)75 1796 y Fg(C-e)168 b Fm(Mo)o(v)o(e)14
+b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fg(M-f)168
+b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h
+(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957
+y Fg(M-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75
+2037 y Fg(C-l)168 b Fm(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f
+(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f
+Fg(C-f)g Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i
+Fg(M-f)e Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18
+b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con)
 o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h
-(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2233 y(w)o(ords.)75
-2343 y Fe(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137
-2439 y Ff(Killing)26 b Fn(text)18 b(means)g(to)g(delete)i(the)f(text)f
+(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75
+2341 y Fb(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137
+2438 y Fc(Killing)26 b Fm(text)18 b(means)g(to)g(delete)i(the)f(text)f
 (from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for)
-h(later)h(use,)75 2494 y(usually)f(b)o(y)f Ff(y)o(anking)22
-b Fn(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27
+h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fc(y)o(anking)22
+b Fm(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27
 b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75
-2549 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137
+2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137
 2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h
 (it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o
 (ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o
 (t)g(\(or)g(the)g(same\))g(place)h(later.)p eop
 %%Page: 3 5
-3 4 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(3)137 183 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g
-(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Ff(kill-ring)p Fn(.)21
+3 4 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g
+(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fc(kill-ring)p Fm(.)21
 b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75
-238 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d
+204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d
 (together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o
-(ou)g(get)g(it)h(all.)22 b(The)75 293 y(kill)c(ring)f(is)f(not)g(line)i
+(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i
 (sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g
 (previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75
-348 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f
-(are)g(t)o(yping)g(another)g(line.)137 415 y(Here)h(is)f(the)h(list)g
-(of)e(commands)h(for)g(killing)j(text.)75 492 y Fh(h)p
-87 466 56 2 v 87 494 a Fg(C-k)p 87 502 V 141 492 a Fh(i)315
-494 y Fn(Kill)f(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q
-(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 571 y
-Fh(h)p 87 545 64 2 v 87 573 a Fg(M-d)p 87 581 V 149 571
-a Fh(i)315 573 y Fn(Kill)g(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e
+314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f
+(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g
+(of)e(commands)h(for)g(killing)j(text.)75 458 y Fg(C-k)168
+b Fm(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q
+(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y
+Fg(M-d)168 b Fm(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e
 (the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)
-e(to)h(the)315 628 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
-(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)1728
-626 y Fh(h)p 1740 600 55 2 v 1740 628 a Fg(M-f)p 1740
-636 V 1793 626 a Fh(i)1808 628 y Fn(.)75 705 y Fh(h)p
-87 679 118 2 v 87 707 a Fg(M-DEL)p 87 715 V 202 705 a
-Fh(i)315 707 y Fn(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h
-(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f
-(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19
-b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g
-(b)o(y)315 815 y Fh(h)p 327 789 64 2 v 327 817 a Fg(M-b)p
-327 825 V 389 815 a Fh(i)404 817 y Fn(.)75 894 y Fh(h)p
-87 868 63 2 v 87 896 a Fg(C-w)p 87 904 V 148 894 a Fh(i)315
-896 y Fn(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h
-(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733
-894 y Fh(h)p 1745 868 118 2 v 1745 896 a Fg(M-DEL)p 1745
-904 V 1860 894 a Fh(i)315 951 y Fn(b)q(ecause)g(the)f(w)o(ord)g(b)q
-(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g
-Ff(y)o(ank)j Fn(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39
-b(Y)l(anking)21 b(means)g(to)f(cop)o(y)h(the)g(most-)75
-1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75
-1163 y Fh(h)p 87 1137 56 2 v 87 1165 a Fg(C-y)p 87 1172
-V 141 1163 a Fh(i)315 1165 y Fn(Y)l(ank)e(the)h(most)e(recen)o(tly)i
-(killed)h(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i
-(cursor.)75 1242 y Fh(h)p 87 1216 63 2 v 87 1244 a Fg(M-y)p
-87 1252 V 148 1242 a Fh(i)315 1244 y Fn(Rotate)h(the)g(kill-ring,)j
-(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
-(this)h(if)f(the)h(prior)315 1299 y(command)d(is)568
-1297 y Fh(h)p 580 1271 56 2 v 580 1299 a Fg(C-y)p 580
-1306 V 634 1297 a Fh(i)664 1299 y Fn(or)719 1297 y Fh(h)p
-732 1271 63 2 v 732 1299 a Fg(M-y)p 732 1306 V 792 1297
-a Fh(i)807 1299 y Fn(.)75 1410 y Fe(1.2.4)30 b(Readline)20
-b(Argumen)n(ts)137 1506 y Fn(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i
-(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15
-b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,)
-h(other)f(times)g(it)h(is)g(the)f Ff(sign)h Fn(of)f(the)g(argumen)o(t)f
-(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75
-1616 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)f(to)g(a)g(command)h(whic)o
-(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g(direction,)i(that)75
-1671 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o(ard)g(direction.)28
-b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o(k)g(to)g(the)h(start)
-e(of)75 1726 y(the)f(line,)i(y)o(ou)e(migh)o(t)g(t)o(yp)q(e)g(`)p
-Fm(M--)f(C-k)p Fn('.)137 1793 y(The)h(general)f(w)o(a)o(y)f(to)h(pass)g
-(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)h(to)e(t)o(yp)q(e)h
-(meta)g(digits)h(b)q(efore)75 1847 y(the)h(command.)k(If)c(the)f
-(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)g(min)o(us)g(sign)g(\(`)p
-Fm(-)p Fn('\),)d(then)j(the)f(sign)h(of)f(the)h(argumen)o(t)75
-1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o
-(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g
-(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g
-(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30
-b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955
-y Fh(h)p 1805 1929 57 2 v 1805 1957 a Fg(C-d)p 1805 1965
-V 1860 1955 a Fh(i)75 2012 y Fn(command)c(an)g(argumen)o(t)g(of)f(10,)h
-(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Fm(M-1)f(0)h(C-d)p
-Fn('.)75 2123 y Fe(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f
-(the)h(History)137 2219 y Fn(Readline)e(pro)o(vides)d(commands)g(for)g
-(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-)
-75 2274 y(taining)e(a)f(sp)q(eci\014ed)i(string.)j(There)c(are)e(t)o(w)
-o(o)g(searc)o(h)h(mo)q(des:)20 b Ff(incremen)o(tal)e
-Fn(and)e Ff(non-incremen)o(tal)p Fn(.)137 2341 y(Incremen)o(tal)e
-(searc)o(hes)f(b)q(egin)h(b)q(efore)f(the)g(user)g(has)g(\014nished)h
-(t)o(yping)f(the)g(searc)o(h)g(string.)19 b(As)13 b(eac)o(h)75
-2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g(string)f(is)h(t)o(yp)q
-(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en)o(try)f(from)g(the)h
-(history)75 2451 y(matc)o(hing)12 b(the)g(string)g(t)o(yp)q(ed)g(so)g
-(far.)18 b(An)13 b(incremen)o(tal)g(searc)o(h)f(requires)g(only)h(as)f
-(man)o(y)f(c)o(haracters)g(as)75 2506 y(needed)16 b(to)d(\014nd)j(the)e
-(desired)i(history)e(en)o(try)l(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o
-(ard)f(in)j(the)e(history)g(for)g(a)g(particular)75 2560
-y(string,)g(t)o(yp)q(e)317 2558 y Fh(h)p 329 2532 51
-2 v 329 2560 a Fg(C-r)p 329 2568 V 378 2558 a Fh(i)393
-2560 y Fn(.)19 b(T)o(yping)580 2558 y Fh(h)p 592 2532
-52 2 v 592 2560 a Fg(C-s)p 592 2568 V 641 2558 a Fh(i)670
-2560 y Fn(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20
-b(The)14 b(c)o(haracters)f(presen)o(t)75 2615 y(in)20
-b(the)f(v)m(alue)h(of)f(the)g Fm(isearch-terminators)d
-Fn(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75
-2670 y(searc)o(h.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q
-(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fh(h)p
-1294 2642 70 2 v 1294 2670 a Fg(ESC)p 1294 2678 V 1361
-2668 a Fh(i)1395 2670 y Fn(and)1486 2668 y Fh(h)p 1498
-2642 56 2 v 1498 2670 a Fg(C-J)p 1498 2678 V 1551 2668
-a Fh(i)1585 2670 y Fn(c)o(haracters)d(will)p eop
+e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
+(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f
+Fg(M-f)p Fm(.)75 668 y Fg(M-)123 666 y Ff(h)p 135 640
+73 2 v 135 668 a Fe(DEL)p 135 675 V 206 666 a Ff(i)315
+668 y Fm(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o
+(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315
+723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19
+b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315
+777 y Fg(M-b)p Fm(.)75 855 y Fg(C-w)168 b Fm(Kill)18
+b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
+b(This)16 b(is)g(di\013eren)o(t)g(than)f Fg(M-)1777 853
+y Ff(h)p 1789 827 V 1789 855 a Fe(DEL)p 1789 863 V 1860
+853 a Ff(i)315 910 y Fm(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h
+(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fc(y)o(ank)j
+Fm(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21
+b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d
+(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fg(C-y)168
+b Fm(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g
+(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198
+y Fg(M-y)168 b Fm(Rotate)16 b(the)h(kill-ring,)j(and)d(y)o(ank)g(the)h
+(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f(this)h(if)f(the)h(prior)
+315 1252 y(command)d(is)h Fg(C-y)f Fm(or)f Fg(M-y)p Fm(.)75
+1361 y Fb(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457
+y Fm(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g
+(Readline)h(commands.)20 b(Sometimes)15 b(the)g(argumen)o(t)e(acts)75
+1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f
+(the)g Fd(sign)j Fm(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o
+(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)
+f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g
+(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o
+(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o
+(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g
+(t)o(yp)q(e)g(`)p Fl(M--)f(C-k)p Fm('.)137 1742 y(The)h(general)f(w)o
+(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)
+h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797
+y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)
+g(min)o(us)g(sign)g(\(`)p Fl(-)p Fm('\),)d(then)j(the)f(sign)h(of)f
+(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31
+b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h
+(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75
+1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g
+(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f
+Fg(C-d)75 1961 y Fm(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f
+(could)i(t)o(yp)q(e)f(`)p Fl(M-1)14 b(0)h(C-d)p Fm(',)k(whic)o(h)g
+(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14
+b(on)i(the)f(input)h(line.)75 2125 y Fb(1.2.5)30 b(Searc)n(hing)21
+b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fm(Readline)d(pro)o
+(vides)e(commands)g(for)g(searc)o(hing)g(through)g(the)g(command)g
+(history)g(for)g(lines)i(con-)75 2275 y(taining)e(a)f(sp)q(eci\014ed)i
+(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20
+b Fc(incremen)o(tal)e Fm(and)e Fc(non-incremen)o(tal)p
+Fm(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f
+(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.)
+19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g
+(string)f(is)h(t)o(yp)q(ed,)h(Readline)g(displa)o(ys)f(the)g(next)g(en)
+o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12
+b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g
+(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75
+2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l
+(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g
+(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fg(C-r)p
+Fm(.)k(T)o(yping)d Fg(C-s)e Fm(searc)o(hes)h(forw)o(ard)e(through)h
+(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75
+2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Fl(isearch-terminators)d
+Fm(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75
+2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q
+(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Ff(h)p
+1301 2642 70 2 v 1301 2670 a Fe(ESC)p 1301 2678 V 1368
+2668 a Ff(i)1402 2670 y Fm(and)e Fg(C-J)f Fm(c)o(haracters)g(will)p
+eop
 %%Page: 4 6
-4 5 bop 75 -58 a Fn(4)1322 b(GNU)15 b(Readline)i(Library)75
-183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780
-181 y Fh(h)p 792 155 55 2 v 792 183 a Fg(C-g)p 792 191
-V 845 181 a Fh(i)880 183 y Fn(will)g(ab)q(ort)e(an)h(incremen)o(tal)h
-(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(line.)21
+4 5 bop 75 -58 a Fm(4)1322 b(GNU)15 b(Readline)h(Library)75
+149 y(terminate)21 b(an)g(incremen)o(tal)i(searc)o(h.)37
+b Fg(C-g)21 b Fm(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f
+(and)g(restore)g(the)75 204 y(original)16 b(line.)21
 b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o
-(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 293
-y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h
-(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o
-(yp)q(e)1231 355 y Fh(h)p 1243 329 51 2 v 1243 357 a
-Fg(C-r)p 1243 364 V 1292 355 a Fh(i)1322 357 y Fn(or)1377
-355 y Fh(h)p 1389 329 52 2 v 1389 357 a Fg(C-s)p 1389
-364 V 1438 355 a Fh(i)1468 357 y Fn(as)f(appropriate.)k(This)75
-412 y(will)c(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i(the)f
-(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g(searc)o(h)
-g(string)75 466 y(t)o(yp)q(ed)19 b(so)g(far.)30 b(An)o(y)19
-b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)i(command)d
-(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f
-(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fh(h)p
-1163 493 76 2 v 1163 521 a Fg(RET)p 1163 529 V 1236 519
-a Fh(i)1271 521 y Fn(will)g(terminate)f(the)f(searc)o(h)h(and)75
-576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command)
-g(from)g(the)g(history)g(list.)137 640 y(Non-incremen)o(tal)25
-b(searc)o(hes)e(read)h(the)f(en)o(tire)h(searc)o(h)f(string)g(b)q
-(efore)h(starting)f(to)f(searc)o(h)i(for)75 695 y(matc)o(hing)d
-(history)h(lines.)39 b(The)22 b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h
-(t)o(yp)q(ed)f(b)o(y)h(the)f(user)h(or)e(b)q(e)i(part)f(of)g(the)75
-750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75
-868 y Fl(1.3)33 b(Readline)23 b(Init)h(File)137 961 y
-Fn(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g
-(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 y(b)o(y)d(default,)
-h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)
-o(eybindings.)39 b(An)o(y)20 b(user)h(can)g(customize)75
-1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g
-(commands)g(in)i(an)e Ff(inputrc)k Fn(\014le,)d(con)o(v)o(en)o
-(tionally)g(in)g(his)75 1126 y(home)g(directory)l(.)24
-b(The)17 b(name)g(of)f(this)h(\014le)g(is)g(tak)o(en)g(from)e(the)i(v)m
-(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m(ariable)75
-1181 y Fm(INPUTRC)p Fn(.)i(If)c(that)g(v)m(ariable)h(is)g(unset,)f(the)
-g(default)h(is)g(`)p Fm(~/.inputrc)p Fn('.)137 1244 y(When)f(a)g
-(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i
-(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299
-y(k)o(ey)g(bindings)i(are)e(set.)137 1363 y(In)f(addition,)h(the)e
-Fm(C-x)i(C-r)e Fn(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us)
-e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1418 y(that)h(y)o(ou)h
-(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fe(1.3.1)30
-b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 y Fn(There)c(are)g
-(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g
-(Readline)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75
-1668 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p
-Fm(#)p Fn(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e
-(a)f(`)p Fm($)p Fn(')f(indicate)75 1723 y(conditional)c(constructs)f
-(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h
-(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h
-(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315
-1906 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of)
-e(Readline)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315
-1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g
-Fm(set)g Fn(command)g(within)h(the)f(init)h(\014le.)20
-b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g
-(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g
-Fm(vi)g Fn(line)i(editing)g(commands:)435 2076 y Fm(set)23
-b(editing-mode)g(vi)315 2140 y Fn(A)15 b(great)g(deal)g(of)g(run-time)h
-(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m
-(ariables.)315 2213 y Fm(bell-style)555 2268 y Fn(Con)o(trols)21
-b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f
-(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
-Fm(none)p Fn(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32
-b(If)19 b(set)g(to)555 2378 y(`)p Fm(visible)p Fn(',)c(Readline)j(uses)
-f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
-b(If)16 b(set)h(to)555 2432 y(`)p Fm(audible)p Fn(')g(\(the)h
-(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555
-2487 y(b)q(ell.)315 2560 y Fm(comment-begin)555 2615
-y Fn(The)c(string)f(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h
-(line)h(when)f(the)g Fm(insert-)555 2670 y(comment)f
-Fn(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g
-Fm("#")p Fn(.)p eop
+(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259
+y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i
+(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o
+(yp)q(e)f Fg(C-r)g Fm(or)g Fg(C-s)g Fm(as)h(appropriate.)k(This)75
+380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
+(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g
+(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30
+b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)
+h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10
+b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063
+487 y Ff(h)p 1076 461 76 2 v 1076 489 a Fe(RET)p 1076
+497 V 1149 487 a Ff(i)1174 489 y Fm(will)g(terminate)f(the)g(searc)o(h)
+f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
+(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f
+(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
+(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g
+(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen)
+o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f
+Fg(C-r)p Fm(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o
+(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f
+(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75
+774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)
+f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
+(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22
+b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f
+(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15
+b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fk(1.3)33 b(Readline)23
+b(Init)h(File)137 1169 y Fm(Although)f(the)g(Readline)h(library)f
+(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g
+(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e
+(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39
+b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15
+b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e
+Fc(inputrc)k Fm(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75
+1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g
+(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g
+(v)m(ariable)75 1388 y Fl(INPUTRC)p Fm(.)i(If)c(that)g(v)m(ariable)h
+(is)g(unset,)f(the)g(default)h(is)g(`)p Fl(~/.inputrc)p
+Fm('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)
+h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g
+(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574
+y(In)f(addition,)h(the)e Fl(C-x)i(C-r)e Fm(command)g(re-reads)h(this)g
+(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75
+1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75
+1737 y Fb(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137
+1832 y Fm(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)
+o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18
+b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d
+(a)h(`)p Fl(#)p Fm(')e(are)h(commen)o(ts.)35 b(Lines)22
+b(b)q(eginning)h(with)e(a)f(`)p Fl($)p Fm(')f(indicate)75
+1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f
+([Conditional)h(Init)h(Constructs],)e(page)h(9\).)k(Other)c(lines)75
+1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75
+2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g
+(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h
+(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f
+(the)g Fl(set)g Fm(command)f(within)i(the)f(init)h(\014le.)26
+b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300
+y Fl(set)23 b Fc(v)m(ariable)28 b(v)m(alue)315 2366 y
+Fm(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f
+(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315
+2421 y(use)g Fl(vi)e Fm(line)j(editing)g(commands:)435
+2484 y Fl(set)23 b(editing-mode)g(vi)315 2549 y Fm(V)l(ariable)c(names)
+e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)
+e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g
+(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o
+(wing)f(v)m(ariables.)p eop
 %%Page: 5 7
-5 6 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(5)315 183 y Fm(completion-ignore-case)555 238 y Fn(If)14
-b(set)f(to)g(`)p Fm(on)p Fn(',)g(Readline)j(p)q(erforms)d(\014lename)i
-(matc)o(hing)f(and)g(completion)555 293 y(in)i(a)f(case-insensitiv)o(e)
-i(fashion.)k(The)15 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p
-Fn('.)315 384 y Fm(completion-query-items)555 439 y Fn(The)d(n)o(um)o
-(b)q(er)h(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g
-(the)f(user)555 494 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d
-(to)i(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40
-b(If)21 b(the)555 549 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i
-(completions)f(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
-604 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f
-(view)h(them;)f(otherwise,)555 658 y(they)i(are)g(simply)i(listed.)k
-(The)15 b(default)h(limit)h(is)e Fm(100)p Fn(.)315 750
-y Fm(convert-meta)555 805 y Fn(If)i(set)g(to)g(`)p Fm(on)p
-Fn(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f
-(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f
-(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555
-915 y(\014xing)i(an)749 913 y Fh(h)p 761 887 70 2 v 761
-915 a Fg(ESC)p 761 922 V 828 913 a Fh(i)861 915 y Fn(c)o(haracter,)f
-(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555
-969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p
-Fm(on)p Fn('.)315 1061 y Fm(disable-completion)555 1116
-y Fn(If)k(set)f(to)f(`)p Fm(On)p Fn(',)h(Readline)j(will)f(inhibit)g(w)
-o(ord)e(completion.)30 b(Completion)555 1171 y(c)o(haracters)12
-b(will)j(b)q(e)f(inserted)g(in)o(to)f(the)g(line)h(as)f(if)h(they)f
-(had)g(b)q(een)h(mapp)q(ed)555 1225 y(to)h Fm(self-insert)p
-Fn(.)j(The)d(default)h(is)g(`)p Fm(off)p Fn('.)315 1317
-y Fm(editing-mode)555 1372 y Fn(The)f Fm(editing-mode)d
-Fn(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g
-(bind-)555 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g
-(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481
-y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g(similar)i(to)d(Emacs.)
-20 b(This)15 b(v)m(ariable)h(can)555 1536 y(b)q(e)g(set)f(to)f(either)i
-(`)p Fm(emacs)p Fn(')e(or)h(`)p Fm(vi)p Fn('.)315 1628
-y Fm(enable-keypad)555 1683 y Fn(When)d(set)f(to)h(`)p
-Fm(on)p Fn(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f
-(application)h(k)o(eypad)555 1737 y(when)h(it)f(is)h(called.)21
-b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g(arro)o(w)e(k)o
-(eys.)555 1792 y(The)j(default)h(is)g(`)p Fm(off)p Fn('.)315
-1884 y Fm(expand-tilde)555 1939 y Fn(If)e(set)g(to)f(`)p
-Fm(on)p Fn(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g
-(Readline)i(attempts)555 1994 y(w)o(ord)f(completion.)21
-b(The)15 b(default)h(is)f(`)p Fm(off)p Fn('.)315 2085
-y Fm(horizontal-scroll-mode)555 2140 y Fn(This)k(v)m(ariable)g(can)f(b)
-q(e)g(set)g(to)f(either)i(`)p Fm(on)p Fn(')e(or)g(`)p
-Fm(off)p Fn('.)27 b(Setting)19 b(it)f(to)f(`)p Fm(on)p
-Fn(')555 2195 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q
-(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555
-2250 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h
-(than)g(the)g(width)g(of)g(the)555 2304 y(screen,)e(instead)f(of)g
-(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13
-b(default,)h(this)555 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p
-Fm(off)p Fn('.)315 2451 y Fm(input-meta)555 2506 y Fn(If)h(set)g(to)f
-(`)p Fm(on)p Fn(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h
-(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e
-(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555
-2615 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34
-b(The)20 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p Fn('.)33
-b(The)555 2670 y(name)15 b Fm(meta-flag)f Fn(is)i(a)f(synon)o(ym)g(for)
-f(this)i(v)m(ariable.)p eop
+5 6 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(5)315 149 y Fl(bell-style)555 204 y Fm(Con)o(trols)21
+b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
+(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
+Fl(none)p Fm(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
+b(If)19 b(set)g(to)555 314 y(`)p Fl(visible)p Fm(',)c(Readline)i(uses)g
+(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
+b(If)16 b(set)h(to)555 369 y(`)p Fl(audible)p Fm(')g(\(the)h
+(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555
+423 y(b)q(ell.)315 504 y Fl(comment-begin)555 559 y Fm(The)c(string)f
+(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g
+Fl(insert-)555 614 y(comment)f Fm(command)h(is)h(executed.)21
+b(The)15 b(default)h(v)m(alue)g(is)g Fl("#")p Fm(.)315
+694 y Fl(completion-ignore-case)555 749 y Fm(If)e(set)f(to)g(`)p
+Fl(on)p Fm(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f
+(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
+(The)15 b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)315
+884 y Fl(completion-query-items)555 939 y Fm(The)d(n)o(um)o(b)q(er)h
+(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f
+(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
+(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21
+b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
+(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
+1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)
+f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20
+b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger)
+h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
+(default)f(limit)i(is)f Fl(100)p Fm(.)315 1294 y Fl(convert-meta)555
+1348 y Fm(If)11 b(set)g(to)g(`)p Fl(on)p Fm(',)f(Readline)i(will)h(con)
+o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555
+1403 y(to)f(an)h Fh(asci)q(i)e Fm(k)o(ey)i(sequence)g(b)o(y)g
+(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555
+1456 y Ff(h)p 567 1430 70 2 v 567 1458 a Fe(ESC)p 567
+1466 V 634 1456 a Ff(i)666 1458 y Fm(c)o(haracter,)k(con)o(v)o(erting)h
+(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555
+1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Fl(on)p Fm('.)315
+1593 y Fl(disable-completion)555 1648 y Fm(If)k(set)f(to)f(`)p
+Fl(On)p Fm(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30
+b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
+(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555
+1758 y(to)h Fl(self-insert)p Fm(.)j(The)d(default)h(is)g(`)p
+Fl(off)p Fm('.)315 1838 y Fl(editing-mode)555 1893 y
+Fm(The)f Fl(editing-mode)d Fm(v)m(ariable)k(con)o(trols)e(whic)o(h)h
+(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20
+b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i
+(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
+(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555
+2058 y(b)q(e)g(set)f(to)f(either)i(`)p Fl(emacs)p Fm(')e(or)h(`)p
+Fl(vi)p Fm('.)315 2138 y Fl(enable-keypad)555 2193 y
+Fm(When)d(set)f(to)h(`)p Fl(on)p Fm(',)e(Readline)j(will)h(try)d(to)g
+(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h
+(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g
+(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p
+Fl(off)p Fm('.)315 2383 y Fl(expand-tilde)555 2438 y
+Fm(If)e(set)g(to)f(`)p Fl(on)p Fm(',)f(tilde)k(expansion)e(is)h(p)q
+(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g
+(completion.)21 b(The)15 b(default)h(is)f(`)p Fl(off)p
+Fm('.)555 2560 y(If)g(set)g(to)f(`)p Fl(on)p Fm(',)g(the)g(history)h
+(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555
+2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g
+(with)f Fl(previous-history)e Fm(or)555 2670 y Fl(next-history)p
+Fm(.)p eop
 %%Page: 6 8
-6 7 bop 75 -58 a Fn(6)1322 b(GNU)15 b(Readline)i(Library)315
-183 y Fm(isearch-terminators)555 238 y Fn(The)26 b(string)g(of)f(c)o
-(haracters)g(that)g(should)i(terminate)f(an)g(incremen)o(tal)555
-293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o
-(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d
-([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has)
-555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o
-(haracters)1312 400 y Fh(h)p 1324 374 70 2 v 1324 402
-a Fg(ESC)p 1324 410 V 1391 400 a Fh(i)1419 402 y Fn(and)1505
-400 y Fh(h)p 1518 374 56 2 v 1518 402 a Fg(C-J)p 1518
-410 V 1571 400 a Fh(i)1599 402 y Fn(will)i(terminate)555
-457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Fm(keymap)114
-b Fn(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f
-(for)g(k)o(ey)g(binding)j(com-)555 595 y(mands.)41 b(Acceptable)23
-b Fm(keymap)f Fn(names)g(are)f Fm(emacs)p Fn(,)i Fm(emacs-standard)p
-Fn(,)555 650 y Fm(emacs-meta)p Fn(,)15 b Fm(emacs-ctlx)p
-Fn(,)h Fm(vi)p Fn(,)g Fm(vi-command)p Fn(,)g(and)h Fm(vi-insert)p
-Fn(.)23 b Fm(vi)16 b Fn(is)555 705 y(equiv)m(alen)o(t)e(to)f
-Fm(vi-command)p Fn(;)e Fm(emacs)h Fn(is)i(equiv)m(alen)o(t)g(to)e
-Fm(emacs-standard)p Fn(.)555 759 y(The)f(default)h(v)m(alue)g(is)f
-Fm(emacs)p Fn(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Fm(editing-mode)f
-Fn(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o
-(eymap.)315 897 y Fm(mark-directories)555 952 y Fn(If)j(set)g(to)g(`)p
-Fm(on)p Fn(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h(slash)
-h(app)q(ended.)555 1007 y(The)15 b(default)h(is)g(`)p
-Fm(on)p Fn('.)315 1090 y Fm(mark-modified-lines)555 1145
-y Fn(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Fm(on)p
-Fn(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555
-1200 y(terisk)f(\(`)p Fm(*)p Fn('\))e(at)i(the)f(start)g(of)h(history)f
-(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q(di\014ed.)555
-1254 y(This)e(v)m(ariable)g(is)g(`)p Fm(off)p Fn(')e(b)o(y)h(default.)
-315 1337 y Fm(output-meta)555 1392 y Fn(If)j(set)f(to)g(`)p
-Fm(on)p Fn(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j
-(the)e(eigh)o(th)h(bit)555 1447 y(set)g(directly)i(rather)d(than)h(as)g
+6 7 bop 75 -58 a Fm(6)1322 b(GNU)15 b(Readline)h(Library)315
+149 y Fl(horizontal-scroll-mode)555 204 y Fm(This)j(v)m(ariable)g(can)f
+(b)q(e)g(set)g(to)f(either)i(`)p Fl(on)p Fm(')e(or)g(`)p
+Fl(off)p Fm('.)27 b(Setting)19 b(it)f(to)f(`)p Fl(on)p
+Fm(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing)
+f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i
+(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g
+(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g
+(screen)h(line.)21 b(By)13 b(default,)h(this)555 423
+y(v)m(ariable)j(is)e(set)g(to)g(`)p Fl(off)p Fm('.)315
+506 y Fl(input-meta)555 560 y Fm(If)h(set)f(to)g(`)p
+Fl(on)p Fm(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it)
+g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
+o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555
+670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
+b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)33 b(The)555
+725 y(name)15 b Fl(meta-flag)f Fm(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
+m(ariable.)315 807 y Fl(isearch-terminators)555 862 y
+Fm(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f
+(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o
+(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555
+971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
+b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17
+b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247
+1024 y Ff(h)p 1259 998 70 2 v 1259 1026 a Fe(ESC)p 1259
+1034 V 1326 1024 a Ff(i)1357 1026 y Fm(and)g Fg(C-J)f
+Fm(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315
+1163 y Fl(keymap)96 b Fm(Sets)19 b(Readline's)i(idea)f(of)f(the)g
+(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555
+1218 y(mands.)41 b(Acceptable)23 b Fl(keymap)f Fm(names)g(are)f
+Fl(emacs)p Fm(,)i Fl(emacs-standard)p Fm(,)555 1273 y
+Fl(emacs-meta)p Fm(,)49 b Fl(emacs-ctlx)p Fm(,)g Fl(vi)p
+Fm(,)h Fl(vi-move)p Fm(,)f Fl(vi-command)p Fm(,)g(and)555
+1328 y Fl(vi-insert)p Fm(.)31 b Fl(vi)20 b Fm(is)g(equiv)m(alen)o(t)h
+(to)e Fl(vi-command)p Fm(;)g Fl(emacs)g Fm(is)h(equiv)m(alen)o(t)555
+1382 y(to)15 b Fl(emacs-standard)p Fm(.)20 b(The)d(default)f(v)m(alue)h
+(is)g Fl(emacs)p Fm(.)k(The)16 b(v)m(alue)h(of)f(the)555
+1437 y Fl(editing-mode)e Fm(v)m(ariable)i(also)f(a\013ects)g(the)g
+(default)h(k)o(eymap.)315 1519 y Fl(mark-directories)555
+1574 y Fm(If)j(set)g(to)g(`)p Fl(on)p Fm(',)f(completed)i(directory)g
+(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629
+y(The)15 b(default)h(is)g(`)p Fl(on)p Fm('.)315 1711
+y Fl(mark-modified-lines)555 1766 y Fm(This)j(v)m(ariable,)g(when)g
+(set)e(to)h(`)p Fl(on)p Fm(',)f(causes)h(Readline)h(to)e(displa)o(y)i
+(an)f(as-)555 1821 y(terisk)f(\(`)p Fl(*)p Fm('\))e(at)i(the)f(start)g
+(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q
+(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Fl(off)p
+Fm(')e(b)o(y)h(default.)315 1958 y Fl(mark-symlinked-directories)555
+2012 y Fm(If)23 b(set)f(to)f(`)p Fl(on)p Fm(',)i(completed)g(names)g
+(whic)o(h)g(are)f(sym)o(b)q(olic)i(links)f(to)f(di-)555
+2067 y(rectories)h(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(\(sub)s(ject)
+e(to)f(the)i(v)m(alue)g(of)f Fl(mark-)555 2122 y(directories)p
+Fm(\).)18 b(The)d(default)h(is)g(`)p Fl(off)p Fm('.)315
+2204 y Fl(match-hidden-files)555 2259 y Fm(This)c(v)m(ariable,)h(when)e
+(set)g(to)g(`)p Fl(on)p Fm(',)f(causes)h(Readline)i(to)d(matc)o(h)h
+(\014les)h(whose)555 2314 y(names)22 b(b)q(egin)h(with)g(a)e(`)p
+Fl(.)p Fm(')h(\(hidden)h(\014les\))g(when)f(p)q(erforming)h(\014lename)
+555 2369 y(completion,)g(unless)f(the)f(leading)h(`)p
+Fl(.)p Fm(')e(is)h(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555
+2423 y(\014lename)16 b(to)f(b)q(e)h(completed.)21 b(This)15
+b(v)m(ariable)i(is)f(`)p Fl(on)p Fm(')e(b)o(y)h(default.)315
+2506 y Fl(output-meta)555 2560 y Fm(If)j(set)f(to)g(`)p
+Fl(on)p Fm(',)g(Readline)i(will)h(displa)o(y)f(c)o(haracters)d(with)j
+(the)e(eigh)o(th)h(bit)555 2615 y(set)g(directly)i(rather)d(than)h(as)g
 (a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555
-1502 y(default)16 b(is)f(`)p Fm(off)p Fn('.)315 1585
-y Fm(print-completions-horizont)o(ally)555 1640 y Fn(If)d(set)g(to)f(`)
-p Fm(on)p Fn(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f
-(matc)o(hes)f(sorted)555 1694 y(horizon)o(tally)23 b(in)f(alphab)q
-(etical)i(order,)f(rather)e(than)g(do)o(wn)h(the)g(screen.)555
-1749 y(The)15 b(default)h(is)g(`)p Fm(off)p Fn('.)315
-1832 y Fm(show-all-if-ambiguous)555 1887 y Fn(This)g(alters)e(the)i
-(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h(functions.)21
-b(If)15 b(set)555 1942 y(to)e(`)p Fm(on)p Fn(',)g(w)o(ords)g(whic)o(h)h
-(ha)o(v)o(e)g(more)f(than)g(one)h(p)q(ossible)i(completion)f(cause)555
-1997 y(the)20 b(matc)o(hes)f(to)f(b)q(e)j(listed)f(immediately)h
-(instead)f(of)f(ringing)i(the)e(b)q(ell.)555 2051 y(The)c(default)h(v)m
-(alue)h(is)e(`)p Fm(off)p Fn('.)315 2134 y Fm(visible-stats)555
-2189 y Fn(If)h(set)g(to)f(`)p Fm(on)p Fn(',)g(a)h(c)o(haracter)f
-(denoting)h(a)g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555
-2244 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c
-(default)g(is)f(`)p Fm(off)p Fn('.)75 2327 y(Key)h(Bindings)315
-2382 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h
-(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20
-b(y)o(ou)315 2437 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f
-(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19
-b(The)14 b(follo)o(wing)315 2491 y(sections)k(con)o(tain)h(tables)f(of)
-f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)
-l(,)315 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g
-(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f
-(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey)
-315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g
-(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)p
-eop
+2670 y(default)16 b(is)f(`)p Fl(off)p Fm('.)p eop
 %%Page: 7 9
-7 8 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(7)315 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34
-b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g
-(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o
-(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316
-y Ff(k)o(eyname)s Fn(:)k Ff(function-name)g Fn(or)c Ff(macro)555
-371 y(k)o(eyname)i Fn(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j
-(out)d(in)h(English.)21 b(F)l(or)13 b(example:)675 435
-y Fm(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g
-(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555
-605 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023
-603 y Fh(h)p 1035 577 57 2 v 1035 605 a Fg(C-u)p 1035
-613 V 1090 603 a Fh(i)1123 605 y Fn(is)h(b)q(ound)g(to)f(the)g
-(function)h Fm(universal-)555 660 y(argument)p Fn(,)g(and)872
-658 y Fh(h)p 884 632 55 2 v 884 660 a Fg(C-o)p 884 667
-V 937 658 a Fh(i)971 660 y Fn(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g
-(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e
-(is,)h(to)f(insert)h(the)g(text)f(`)p Fm(>)h(output)p
-Fn(')f(in)o(to)g(the)h(line\).)315 793 y Fm(")p Ff(k)o(eyseq)q
-Fm(")p Fn(:)20 b Ff(function-name)e Fn(or)d Ff(macro)555
-848 y(k)o(eyseq)i Fn(di\013ers)e(from)g Ff(k)o(eyname)j
-Fn(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555
-902 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q(eci\014ed,)i(b)o(y)
-e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 957 y(double)e(quotes.)j
-(Some)c Fi(gnu)g Fn(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es)g(can)g(b)q
-(e)g(used,)g(as)555 1012 y(in)j(the)f(follo)o(wing)g(example,)h(but)f
-(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)f(not)555
-1067 y(recognized.)675 1130 y Fm("\\C-u":)23 b(universal-argument)675
-1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h
-("Function)f(Key)i(1")555 1301 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g
-(example,)1023 1299 y Fh(h)p 1035 1273 57 2 v 1035 1301
-a Fg(C-u)p 1035 1308 V 1090 1299 a Fh(i)1123 1301 y Fn(is)h(b)q(ound)g
-(to)f(the)g(function)h Fm(universal-)555 1355 y(argument)9
-b Fn(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`)
-1463 1353 y Fh(h)p 1475 1327 56 2 v 1475 1355 a Fg(C-x)p
-1475 1363 V 1529 1353 a Fh(i)k(h)p 1571 1327 51 2 v 1571
-1355 a Fg(C-r)p 1571 1363 V 1620 1353 a Fh(i)1635 1355
-y Fn(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i
-Fm(re-read-init-file)p Fn(,)c(and)i(`)1351 1408 y Fh(h)p
-1363 1382 70 2 v 1363 1410 a Fg(ESC)p 1363 1418 V 1430
-1408 a Fh(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fg([)p
-1472 1419 V 1480 1408 a Fh(i)g(h)p 1522 1382 18 2 v 1522
-1410 a Fg(1)p 1522 1418 V 1538 1408 a Fh(i)g(h)p 1580
-1382 V 1580 1410 a Fg(1)p 1580 1418 V 1595 1408 a Fh(i)g(h)p
-1637 1382 24 2 v 1637 1410 a Fm(~)p 1637 1418 V 1659
-1408 a Fh(i)1674 1410 y Fn(')h(is)h(b)q(ound)555 1465
-y(to)e(insert)g(the)g(text)g(`)p Fm(Function)f(Key)h(1)p
-Fn('.)315 1543 y(The)g(follo)o(wing)h Fi(gnu)e Fn(Emacs)h(st)o(yle)g
-(escap)q(e)h(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)
-315 1598 y(k)o(ey)g(sequences:)315 1676 y Fd(\\C-)168
-b Fn(con)o(trol)15 b(pre\014x)315 1755 y Fd(\\M-)168
-b Fn(meta)15 b(pre\014x)315 1833 y Fd(\\e)192 b Fn(an)15
-b(escap)q(e)h(c)o(haracter)315 1911 y Fd(\\\\)192 b Fn(bac)o(kslash)315
-1989 y Fd(\\)p Fm(")555 1987 y Fh(h)p 567 1961 V 567
-1989 a Fm(")p 567 1997 V 589 1987 a Fh(i)604 1989 y Fn(,)15
-b(a)f(double)j(quotation)e(mark)315 2068 y Fd(\\')555
-2066 y Fh(h)p 567 2040 10 2 v 567 2068 a Fg(')p 567 2075
-V 575 2066 a Fh(i)590 2068 y Fn(,)g(a)f(single)j(quote)e(or)g(ap)q
-(ostrophe)315 2146 y(In)f(addition)h(to)f(the)f Fi(gnu)h
-Fn(Emacs)g(st)o(yle)f(escap)q(e)i(sequences,)g(a)e(second)i(set)e(of)h
-(bac)o(kslash)315 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315
-2279 y Fm(\\a)192 b Fn(alert)15 b(\(b)q(ell\))315 2357
-y Fm(\\b)192 b Fn(bac)o(kspace)315 2435 y Fm(\\d)g Fn(delete)315
-2514 y Fm(\\f)g Fn(form)14 b(feed)315 2592 y Fm(\\n)192
-b Fn(newline)315 2670 y Fm(\\r)g Fn(carriage)15 b(return)p
-eop
+7 8 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(7)315 149 y Fl(page-completions)555 204 y Fm(If)17
+b(set)g(to)f(`)p Fl(on)p Fm(',)g(Readline)i(uses)g(an)e(in)o(ternal)i
+Fl(more)p Fm(-lik)o(e)g(pager)f(to)f(displa)o(y)555 259
+y(a)g(screenful)h(of)f(p)q(ossible)i(completions)f(at)f(a)g(time.)23
+b(This)17 b(v)m(ariable)g(is)g(`)p Fl(on)p Fm(')555 314
+y(b)o(y)e(default.)315 395 y Fl(print-completions-horizont)o(ally)555
+450 y Fm(If)d(set)g(to)f(`)p Fl(on)p Fm(',)h(Readline)h(will)g(displa)o
+(y)h(completions)f(with)f(matc)o(hes)f(sorted)555 505
+y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e(than)g
+(do)o(wn)h(the)g(screen.)555 560 y(The)15 b(default)h(is)g(`)p
+Fl(off)p Fm('.)315 641 y Fl(show-all-if-ambiguous)555
+696 y Fm(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h
+(completion)h(functions.)21 b(If)15 b(set)555 751 y(to)e(`)p
+Fl(on)p Fm(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h
+(p)q(ossible)i(completion)f(cause)555 806 y(the)20 b(matc)o(hes)f(to)f
+(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q
+(ell.)555 861 y(The)c(default)h(v)m(alue)h(is)e(`)p Fl(off)p
+Fm('.)315 942 y Fl(visible-stats)555 997 y Fm(If)h(set)g(to)f(`)p
+Fl(on)p Fm(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q
+(e)f(is)g(app)q(ended)i(to)d(the)555 1052 y(\014lename)h(when)g
+(listing)h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p
+Fl(off)p Fm('.)75 1133 y(Key)h(Bindings)315 1188 y(The)21
+b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f
+(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315
+1243 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f
+(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315
+1298 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g
+(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
+1353 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
+(es.)315 1421 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
+(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315
+1476 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
+(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315
+1530 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
+(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315
+1585 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)
+e(comfortable.)315 1653 y(In)19 b(addition)g(to)e(command)h(names,)g
+(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h
+(string)315 1708 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
+(pressed)g(\(a)e Fc(macro)r Fm(\).)315 1790 y Fc(k)o(eyname)s
+Fm(:)19 b Fc(function-name)g Fm(or)c Fc(macro)555 1845
+y(k)o(eyname)i Fm(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out)
+d(in)h(English.)21 b(F)l(or)13 b(example:)675 1910 y
+Fl(Control-u:)22 b(universal-argument)675 1962 y(Meta-Rubout:)g
+(backward-kill-word)675 2014 y(Control-o:)g(">)i(output")555
+2082 y Fm(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fg(C-u)e
+Fm(is)h(b)q(ound)g(to)f(the)g(function)h Fl(universal-)555
+2137 y(argument)p Fm(,)e Fg(M-DEL)h Fm(is)g(b)q(ound)h(to)e(the)h
+(function)h Fl(backward-kill-word)p Fm(,)555 2191 y(and)g
+Fg(C-o)f Fm(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g
+(the)f(righ)o(t)h(hand)555 2246 y(side)c(\(that)e(is,)i(to)e(insert)i
+(the)f(text)g(`)p Fl(>)f(output)p Fm(')g(in)o(to)i(the)f(line\).)555
+2314 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e
+(names)g(are)g(recognized)i(while)g(pro-)555 2369 y(cessing)13
+b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fc(DEL)p
+Fm(,)11 b Fc(ESC)p Fm(,)h Fc(ESCAPE)p Fm(,)f Fc(LFD)p
+Fm(,)g Fc(NEW-)555 2424 y(LINE)p Fm(,)16 b Fc(RET)p Fm(,)e
+Fc(RETURN)p Fm(,)f Fc(R)o(UBOUT)p Fm(,)i Fc(SP)l(A)o(CE)p
+Fm(,)g Fc(SPC)p Fm(,)f(and)i Fc(T)l(AB)p Fm(.)315 2506
+y Fl(")p Fc(k)o(eyseq)q Fl(")p Fm(:)k Fc(function-name)e
+Fm(or)d Fc(macro)555 2560 y(k)o(eyseq)i Fm(di\013ers)e(from)g
+Fc(k)o(eyname)j Fm(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g
+(an)f(en-)555 2615 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
+(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555
+2670 y(double)e(quotes.)j(Some)c Fh(gnu)g Fm(Emacs)f(st)o(yle)h(k)o(ey)
+g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)p eop
 %%Page: 8 10
-8 9 bop 75 -58 a Fn(8)1322 b(GNU)15 b(Readline)i(Library)315
-183 y Fm(\\t)192 b Fn(horizon)o(tal)16 b(tab)315 262
-y Fm(\\v)192 b Fn(v)o(ertical)16 b(tab)315 340 y Fm(\\)p
-Ff(nnn)141 b Fn(the)13 b(c)o(haracter)e(whose)i Fm(ASCII)e
-Fn(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Ff(nnn)f
-Fn(\(one)f(to)g(three)555 395 y(digits\))315 473 y Fm(\\x)p
-Ff(nnn)117 b Fn(the)15 b(c)o(haracter)e(whose)i Fm(ASCII)e
-Fn(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Ff(nnn)f
-Fn(\(one)555 528 y(to)g(three)g(digits\))315 607 y(When)k(en)o(tering)g
-(the)g(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o
-(ust)f(b)q(e)h(used)h(to)315 662 y(indicate)12 b(a)f(macro)f
-(de\014nition.)20 b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)
-f(function)i(name.)18 b(In)315 716 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i
-(the)f(bac)o(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)
-g(expanded.)20 b(Bac)o(kslash)315 771 y(will)i(quote)d(an)o(y)h(other)g
-(c)o(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p
-Fm(")p Fn(')c(and)h(`)p Fm(')p Fn('.)34 b(F)l(or)315
-826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p
-Fm(C-x)i(\\)p Fn(')f(insert)g(a)g(single)h(`)p Fm(\\)p
-Fn(')e(in)o(to)h(the)g(line:)435 890 y Fm("\\C-x\\\\":)23
-b("\\\\")75 1000 y Fe(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137
-1096 y Fn(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g
-(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75
-1150 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g
-(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f
-(as)75 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)
-g(directiv)o(es)h(used.)75 1284 y Fm($if)168 b Fn(The)16
-b Fm($if)f Fn(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g
-(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 1338
-y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e
-(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393
-y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f
-(are)h(required)i(to)d(isolate)i(it.)315 1472 y Fm(mode)144
-b Fn(The)11 b Fm(mode=)e Fn(form)h(of)g(the)h Fm($if)f
-Fn(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555
-1527 y(is)k(in)h Fm(emacs)e Fn(or)g Fm(vi)g Fn(mo)q(de.)20
-b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
-1581 y(`)p Fm(set)f(keymap)p Fn(')f(command,)g(for)h(instance,)g(to)f
-(set)h(bindings)h(in)g(the)f Fm(emacs-)555 1636 y(standard)d
-Fn(and)i Fm(emacs-ctlx)e Fn(k)o(eymaps)h(only)i(if)f(Readline)h(is)f
-(starting)f(out)555 1691 y(in)k Fm(emacs)f Fn(mo)q(de.)315
-1769 y Fm(term)144 b Fn(The)14 b Fm(term=)e Fn(form)h(ma)o(y)g(b)q(e)h
-(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
-1824 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
-(output)e(b)o(y)g(the)g(terminal's)555 1879 y(function)13
-b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
-(the)g(`)p Fm(=)p Fn(')f(is)h(tested)g(against)555 1934
-y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
-(ortion)h(of)e(the)h(terminal)555 1989 y(name)i(b)q(efore)g(the)g
-(\014rst)f(`)p Fm(-)p Fn('.)24 b(This)17 b(allo)o(ws)g
-Fm(sun)f Fn(to)g(matc)o(h)h(b)q(oth)f Fm(sun)h Fn(and)555
-2043 y Fm(sun-cmd)p Fn(,)d(for)g(instance.)315 2122 y
-Fm(application)555 2177 y Fn(The)d Ff(application)i Fn(construct)e(is)g
-(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555
-2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j
-(library)e(sets)f(the)g Ff(application)555 2286 y(name)p
-Fn(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18
-b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555
-2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i
-(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i
-(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren)
-o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675
-2514 y Fm($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h
-(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675
-2670 y($endif)p eop
+8 9 bop 75 -58 a Fm(8)1322 b(GNU)15 b(Readline)h(Library)555
+149 y(in)i(the)f(follo)o(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o
+(haracter)d(names)h(are)f(not)555 204 y(recognized.)675
+270 y Fl("\\C-u":)23 b(universal-argument)675 322 y("\\C-x\\C-r":)f
+(re-read-init-file)675 373 y("\\e[11~":)h("Function)f(Key)i(1")555
+442 y Fm(In)33 b(the)f(ab)q(o)o(v)o(e)g(example,)37 b
+Fg(C-u)32 b Fm(is)h(again)f(b)q(ound)h(to)f(the)g(function)555
+497 y Fl(universal-argument)19 b Fm(\(just)j(as)f(it)h(w)o(as)f(in)i
+(the)f(\014rst)f(example\),)j(`)p Fg(C-x)555 551 y(C-r)p
+Fm(')c(is)h(b)q(ound)g(to)f(the)h(function)g Fl(re-read-init-file)p
+Fm(,)f(and)g(`)1731 549 y Ff(h)p 1743 523 70 2 v 1743
+551 a Fe(ESC)p 1743 559 V 1810 549 a Ff(i)15 b(h)p 1852
+523 10 2 v 1852 551 a Fe([)p 1852 560 V 1860 549 a Ff(i)555
+604 y(h)p 567 578 18 2 v 567 606 a Fe(1)p 567 614 V 583
+604 a Ff(i)g(h)p 625 578 V 625 606 a Fe(1)p 625 614 V
+640 604 a Ff(i)g(h)p 683 578 24 2 v 683 606 a Fl(~)p
+683 614 V 704 604 a Ff(i)719 606 y Fm(')g(is)h(b)q(ound)g(to)e(insert)i
+(the)f(text)g(`)p Fl(Function)f(Key)g(1)p Fm('.)315 688
+y(The)h(follo)o(wing)h Fh(gnu)e Fm(Emacs)h(st)o(yle)g(escap)q(e)h
+(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315
+743 y(k)o(ey)g(sequences:)315 825 y Fg(\\C-)168 b Fm(con)o(trol)15
+b(pre\014x)315 907 y Fg(\\M-)168 b Fm(meta)15 b(pre\014x)315
+989 y Fg(\\e)192 b Fm(an)15 b(escap)q(e)h(c)o(haracter)315
+1071 y Fg(\\\\)192 b Fm(bac)o(kslash)315 1152 y Fg(\\)p
+Fl(")555 1150 y Ff(h)p 567 1124 V 567 1152 a Fl(")p 567
+1160 V 589 1150 a Ff(i)604 1152 y Fm(,)15 b(a)f(double)j(quotation)e
+(mark)315 1234 y Fg(\\')555 1232 y Ff(h)p 567 1206 10
+2 v 567 1234 a Fe(')p 567 1242 V 575 1232 a Ff(i)590
+1234 y Fm(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315
+1316 y(In)f(addition)h(to)f(the)f Fh(gnu)h Fm(Emacs)g(st)o(yle)f(escap)
+q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
+1371 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 1453 y
+Fl(\\a)192 b Fm(alert)15 b(\(b)q(ell\))315 1535 y Fl(\\b)192
+b Fm(bac)o(kspace)315 1617 y Fl(\\d)g Fm(delete)315 1699
+y Fl(\\f)g Fm(form)14 b(feed)315 1781 y Fl(\\n)192 b
+Fm(newline)315 1862 y Fl(\\r)g Fm(carriage)15 b(return)315
+1944 y Fl(\\t)192 b Fm(horizon)o(tal)16 b(tab)315 2026
+y Fl(\\v)192 b Fm(v)o(ertical)16 b(tab)315 2108 y Fl(\\)p
+Fc(nnn)141 b Fm(the)17 b(eigh)o(t-bit)h(c)o(haracter)f(whose)g(v)m
+(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i Fc(nnn)f Fm(\(one)f(to)555
+2163 y(three)e(digits\))315 2245 y Fl(\\x)p Fc(HH)124
+b Fm(the)20 b(eigh)o(t-bit)g(c)o(haracter)f(whose)h(v)m(alue)h(is)f
+(the)g(hexadecimal)h(v)m(alue)g Fc(HH)555 2300 y Fm(\(one)15
+b(or)g(t)o(w)o(o)f(hex)h(digits\))315 2382 y(When)k(en)o(tering)g(the)g
+(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o(ust)f(b)q
+(e)h(used)h(to)315 2436 y(indicate)12 b(a)f(macro)f(de\014nition.)20
+b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i
+(name.)18 b(In)315 2491 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o
+(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.)
+20 b(Bac)o(kslash)315 2546 y(will)i(quote)d(an)o(y)h(other)g(c)o
+(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p
+Fl(")p Fm(')c(and)h(`)p Fl(')p Fm('.)34 b(F)l(or)315
+2601 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)
+p Fg(C-x)i Fl(\\)p Fm(')f(insert)g(a)g(single)h(`)p Fl(\\)p
+Fm(')e(in)o(to)h(the)g(line:)435 2666 y Fl("\\C-x\\\\":)23
+b("\\\\")p eop
 %%Page: 9 11
-9 10 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(9)75 183 y Fm($endif)96 b Fn(This)16 b(command,)e(as)h(seen)h(in)g
-(the)f(previous)h(example,)g(terminates)f(an)g Fm($if)f
-Fn(command.)75 263 y Fm($else)120 b Fn(Commands)15 b(in)h(this)f(branc)
-o(h)h(of)e(the)i Fm($if)e Fn(directiv)o(e)j(are)e(executed)h(if)g(the)f
-(test)g(fails.)75 343 y Fm($include)48 b Fn(This)14 b(directiv)o(e)i
-(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h
-(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435
-462 y Fm($include)23 b(/etc/inputrc)75 574 y Fe(1.3.3)30
-b(Sample)20 b(Init)h(File)137 670 y Fn(Here)16 b(is)g(an)f(example)h
-(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g
-(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 y(and)f(conditional)i
-(syn)o(tax.)p eop
+9 10 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(9)75 149 y Fb(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137
+246 y Fm(Readline)f(implemen)o(ts)g(a)f(facilit)o(y)g(similar)h(in)g
+(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75
+301 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g
+(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f
+(as)75 355 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g
+(directiv)o(es)h(used.)75 435 y Fl($if)168 b Fm(The)16
+b Fl($if)f Fm(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g
+(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 490
+y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e
+(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315 545
+y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f
+(are)h(required)i(to)d(isolate)i(it.)315 624 y Fl(mode)144
+b Fm(The)11 b Fl(mode=)e Fm(form)h(of)g(the)h Fl($if)f
+Fm(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555
+679 y(is)k(in)h Fl(emacs)e Fm(or)g Fl(vi)g Fm(mo)q(de.)20
+b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
+734 y(`)p Fl(set)f(keymap)p Fm(')f(command,)g(for)h(instance,)g(to)f
+(set)h(bindings)h(in)g(the)f Fl(emacs-)555 789 y(standard)d
+Fm(and)i Fl(emacs-ctlx)e Fm(k)o(eymaps)h(only)i(if)f(Readline)g(is)g
+(starting)f(out)555 844 y(in)k Fl(emacs)f Fm(mo)q(de.)315
+923 y Fl(term)144 b Fm(The)14 b Fl(term=)e Fm(form)h(ma)o(y)g(b)q(e)h
+(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
+978 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
+(output)e(b)o(y)g(the)g(terminal's)555 1033 y(function)13
+b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
+(the)g(`)p Fl(=)p Fm(')f(is)h(tested)g(against)555 1088
+y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
+(ortion)h(of)e(the)h(terminal)555 1142 y(name)i(b)q(efore)g(the)g
+(\014rst)f(`)p Fl(-)p Fm('.)24 b(This)17 b(allo)o(ws)g
+Fl(sun)f Fm(to)g(matc)o(h)h(b)q(oth)f Fl(sun)h Fm(and)555
+1197 y Fl(sun-cmd)p Fm(,)d(for)g(instance.)315 1277 y
+Fl(application)555 1332 y Fm(The)d Fc(application)i Fm(construct)e(is)g
+(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555
+1386 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i
+(library)f(sets)f(the)g Fc(application)555 1441 y(name)p
+Fm(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20
+b(This)12 b(could)h(b)q(e)f(used)h(to)555 1496 y(bind)18
+b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)g(sp)q
+(eci\014c)i(program.)23 b(F)l(or)555 1551 y(instance,)17
+b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f
+(quotes)555 1606 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j
+(Bash:)675 1670 y Fl($if)23 b(Bash)675 1722 y(#)h(Quote)f(the)g
+(current)g(or)h(previous)f(word)675 1774 y("\\C-xq":)g
+("\\eb\\"\\ef\\"")675 1826 y($endif)75 1905 y($endif)96
+b Fm(This)16 b(command,)e(as)h(seen)h(in)g(the)f(previous)h(example,)g
+(terminates)f(an)g Fl($if)f Fm(command.)75 1985 y Fl($else)120
+b Fm(Commands)15 b(in)h(this)f(branc)o(h)h(of)e(the)i
+Fl($if)e Fm(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g(fails.)75
+2065 y Fl($include)48 b Fm(This)22 b(directiv)o(e)h(tak)o(es)e(a)h
+(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f(commands)
+315 2120 y(and)e(bindings)j(from)c(that)h(\014le.)33
+b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e
+(from)315 2174 y(`)p Fl(/etc/inputrc)p Fm(':)435 2239
+y Fl($include)k(/etc/inputrc)75 2351 y Fb(1.3.3)30 b(Sample)20
+b(Init)h(File)137 2447 y Fm(Here)16 b(is)g(an)f(example)h(of)f(an)g
+Fc(inputrc)k Fm(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i
+(v)m(ariable)f(assignmen)o(t,)75 2502 y(and)f(conditional)i(syn)o(tax.)
+p eop
 %%Page: 10 12
-10 11 bop 75 -58 a Fn(10)1299 b(GNU)15 b(Readline)i(Library)195
-235 y Fm(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f
-(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu)
-f(Readline)g(library.)47 b(Existing)22 b(programs)195
-339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391
-y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h
-(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h
-(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g
-(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195
-650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195
-806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)
-195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195
-1169 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the)
-f(function)g(name)g(is)h(ignored)p 1986 1179 21 38 v
-195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195
-1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195
-1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g
-(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195
-1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195
-1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195
-1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g
-(previous-history)195 1947 y("\\M-[B":)g(next-history)195
-1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode)
-195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195
-2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g
-(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195
-2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode)
-195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195
-2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g
-(previous-history)p eop
+10 11 bop 75 -58 a Fm(10)1299 b(GNU)15 b(Readline)h(Library)195
+201 y Fl(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f
+(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(GNU)
+f(Readline)g(library.)47 b(Existing)195 305 y(#)24 b(programs)e
+(include)h(FTP,)h(Bash,)f(and)g(GDB.)195 357 y(#)195
+409 y(#)h(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h(C-x)f
+(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h(comments.)
+195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g(systemwide)g
+(bindings)f(and)i(variable)195 616 y(#)g(assignments)e(from)h
+(/etc/Inputrc)195 668 y($include)g(/etc/Inputrc)195 772
+y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)195
+928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195
+1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the)
+f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v
+195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195
+1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195
+1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g
+(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195
+1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195
+1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195
+1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g
+(previous-history)195 1914 y("\\M-[B":)g(next-history)195
+1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode)
+195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195
+2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g
+(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195
+2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode)
+195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195
+2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g
+(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p
+eop
 %%Page: 11 13
-11 12 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(11)195 183 y Fm(#"\\M-\\C-[B":)165 b(next-history)195
-287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495
-y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the)
-f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are)
-h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195
-754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g
-("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g
-(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g
-(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g
-(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013
-y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i
-(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195
-1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195
-1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f
-(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195
-1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g
-(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f
-("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195
-1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195
-1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g
-(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740
-y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters)
-h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195
-1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off)
-195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h
-(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f
-(characters)195 2155 y(set)h(output-meta)g(on)195 2259
-y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f
-(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g
-(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e
-(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195
-2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p
-eop
+11 12 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(11)195 201 y Fl(C-q:)23 b(quoted-insert)195 305 y($endif)195
+409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h
+(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g
+(are)h(convenient)e(for)h(shell)h(interaction)195 616
+y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720
+y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195
+772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)195
+824 y(#)g(insert)f(open)g(and)h(close)f(double)g(quotes)195
+876 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g(quote)195
+928 y("\\C-x\\"":)g("\\"\\"\\C-b")195 980 y(#)h(insert)f(a)g(backslash)
+g(\(testing)g(backslash)g(escapes)195 1032 y(#)h(in)f(sequences)g(and)g
+(macros\))195 1083 y("\\C-x\\\\":)g("\\\\")195 1135 y(#)h(Quote)f(the)g
+(current)g(or)h(previous)f(word)195 1187 y("\\C-xq":)g
+("\\eb\\"\\ef\\"")195 1239 y(#)h(Add)f(a)h(binding)f(to)g(refresh)g
+(the)h(line,)f(which)g(is)h(unbound)195 1291 y("\\C-xr":)f
+(redraw-current-line)195 1343 y(#)h(Edit)f(variable)g(on)g(current)g
+(line.)195 1395 y("\\M-\\C-v":)f("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)
+o(")195 1447 y($endif)195 1550 y(#)i(use)f(a)h(visible)f(bell)g(if)h
+(one)f(is)h(available)195 1602 y(set)f(bell-style)g(visible)195
+1706 y(#)h(don't)f(strip)g(characters)g(to)g(7)h(bits)f(when)h(reading)
+195 1758 y(set)f(input-meta)g(on)195 1862 y(#)h(allow)f(iso-latin1)f
+(characters)h(to)g(be)h(inserted)f(rather)195 1914 y(#)h(than)f
+(converted)g(to)g(prefix-meta)g(sequences)195 1966 y(set)g
+(convert-meta)g(off)195 2069 y(#)h(display)f(characters)f(with)h(the)h
+(eighth)f(bit)g(set)h(directly)195 2121 y(#)g(rather)f(than)g(as)h
+(meta-prefixed)e(characters)195 2173 y(set)h(output-meta)g(on)195
+2277 y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g
+(completions)f(for)195 2329 y(#)i(a)f(word,)h(ask)f(the)h(user)f(if)g
+(he)h(wants)f(to)h(see)f(all)h(of)f(them)195 2381 y(set)g
+(completion-query-items)e(150)195 2484 y(#)j(For)f(FTP)195
+2536 y($if)g(Ftp)195 2588 y("\\C-xg":)g("get)g(\\M-?")195
+2640 y("\\C-xt":)g("put)g(\\M-?")p eop
 %%Page: 12 14
-12 13 bop 75 -58 a Fn(12)1299 b(GNU)15 b(Readline)i(Library)195
-183 y Fm("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75
-359 y Fl(1.4)33 b(Bindable)24 b(Readline)f(Commands)137
-453 y Fn(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that)
-g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137
-519 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g
-(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29
-b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g
-Ff(p)q(oin)o(t)h Fn(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q
-(osition,)i(and)g Ff(mark)h Fn(refers)e(to)f(a)75 628
-y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g
-Fm(set-mark)f Fn(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g
-(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g
-Ff(region)p Fn(.)75 790 y Fe(1.4.1)30 b(Commands)21 b(F)-5
-b(or)19 b(Mo)n(ving)75 895 y Fm(beginning-of-line)13
-b(\(C-a\))315 950 y Fn(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g
-(curren)o(t)g(line.)75 1026 y Fm(end-of-line)f(\(C-e\))315
-1081 y Fn(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75
-1157 y Fm(forward-char)f(\(C-f\))315 1212 y Fn(Mo)o(v)o(e)g(forw)o(ard)
-g(a)h(c)o(haracter.)75 1288 y Fm(backward-char)e(\(C-b\))315
-1343 y Fn(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75
-1419 y Fm(forward-word)f(\(M-f\))315 1474 y Fn(Mo)o(v)o(e)g(forw)o(ard)
-g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q
-(osed)i(of)f(letters)g(and)315 1529 y(digits.)75 1605
-y Fm(backward-word)e(\(M-b\))315 1660 y Fn(Mo)o(v)o(e)j(bac)o(k)g(to)h
-(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24
-b(W)l(ords)16 b(are)h(comp)q(osed)315 1715 y(of)e(letters)g(and)g
-(digits.)75 1791 y Fm(clear-screen)f(\(C-l\))315 1846
-y Fn(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,)
-i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315
-1900 y(of)i(the)g(screen.)75 1977 y Fm(redraw-current-line)e(\(\))315
-2031 y Fn(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15
-b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fe(1.4.2)30
-b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75
-2244 y Fm(accept-line)14 b(\(Newline,)g(Return\))315
-2298 y Fn(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor)
-f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315
-2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o
-(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315
-2408 y(to)h(its)g(original)h(state.)75 2484 y Fm(previous-history)d
-(\(C-p\))315 2539 y Fn(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g
-(list.)75 2615 y Fm(next-history)f(\(C-n\))315 2670 y
-Fn(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)p
-eop
+12 13 bop 75 -58 a Fm(12)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Fl("\\M-.":)23 b(yank-last-arg)195 201 y($endif)75
+329 y Fk(1.4)33 b(Bindable)24 b(Readline)f(Commands)137
+425 y Fm(This)17 b(section)f(describ)q(es)h(Readline)g(commands)f(that)
+e(ma)o(y)h(b)q(e)i(b)q(ound)f(to)f(k)o(ey)h(sequences.)22
+b(Com-)75 480 y(mand)15 b(names)g(without)h(an)f(accompan)o(ying)g(k)o
+(ey)g(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)f(default.)137
+547 y(In)f(the)f(follo)o(wing)h(descriptions,)h Fc(p)q(oin)o(t)f
+Fm(refers)f(to)g(the)g(curren)o(t)g(cursor)f(p)q(osition,)j(and)e
+Fc(mark)i Fm(refers)75 601 y(to)k(a)g(cursor)g(p)q(osition)h(sa)o(v)o
+(ed)f(b)o(y)h(the)f Fl(set-mark)g Fm(command.)32 b(The)20
+b(text)f(b)q(et)o(w)o(een)g(the)h(p)q(oin)o(t)g(and)75
+656 y(mark)15 b(is)g(referred)h(to)e(as)h(the)g Fc(region)p
+Fm(.)75 767 y Fb(1.4.1)30 b(Commands)21 b(F)-5 b(or)19
+b(Mo)n(ving)75 888 y Fl(beginning-of-line)13 b(\(C-a\))315
+942 y Fm(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g(curren)o(t)g(line.)
+75 1034 y Fl(end-of-line)f(\(C-e\))315 1088 y Fm(Mo)o(v)o(e)g(to)h(the)
+g(end)h(of)f(the)g(line.)75 1179 y Fl(forward-char)f(\(C-f\))315
+1234 y Fm(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)75
+1325 y Fl(backward-char)e(\(C-b\))315 1380 y Fm(Mo)o(v)o(e)h(bac)o(k)h
+(a)g(c)o(haracter.)75 1471 y Fl(forward-word)f(\(M-f\))315
+1526 y Fm(Mo)o(v)o(e)g(forw)o(ard)g(to)g(the)i(end)g(of)e(the)h(next)h
+(w)o(ord.)j(W)l(ords)c(are)f(comp)q(osed)i(of)f(letters)g(and)315
+1581 y(digits.)75 1672 y Fl(backward-word)e(\(M-b\))315
+1727 y Fm(Mo)o(v)o(e)j(bac)o(k)g(to)h(the)f(start)g(of)g(the)h(curren)o
+(t)g(or)f(previous)i(w)o(ord.)24 b(W)l(ords)16 b(are)h(comp)q(osed)315
+1782 y(of)e(letters)g(and)g(digits.)75 1873 y Fl(clear-screen)f
+(\(C-l\))315 1928 y Fm(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g
+(curren)o(t)g(line,)i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g
+(top)315 1982 y(of)i(the)g(screen.)75 2074 y Fl(redraw-current-line)e
+(\(\))315 2128 y Fm(Refresh)i(the)g(curren)o(t)g(line.)22
+b(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2239
+y Fb(1.4.2)30 b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f
+(History)75 2360 y Fl(accept-line)14 b(\(Newline)g(or)h(Return\))315
+2414 y Fm(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor)
+f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315
+2469 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g
+(future)g(recall)h(with)f Fl(add_history\(\))p Fm(.)k(If)d(this)315
+2524 y(line)g(is)f(a)e(mo)q(di\014ed)j(history)e(line,)i(the)e(history)
+g(line)i(is)f(restored)e(to)h(its)g(original)i(state.)75
+2615 y Fl(previous-history)c(\(C-p\))315 2670 y Fm(Mo)o(v)o(e)h(`bac)o
+(k')h(through)f(the)i(history)f(list,)g(fetc)o(hing)h(the)f(previous)h
+(command.)p eop
 %%Page: 13 15
-13 14 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(13)75 183 y Fm(beginning-of-history)12 b(\(M-<\))315
-238 y Fn(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l
-(.)75 314 y Fm(end-of-history)e(\(M->\))315 369 y Fn(Mo)o(v)o(e)h(to)h
-(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i
-(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 445 y Fm
-(reverse-search-history)c(\(C-r\))315 500 y Fn(Searc)o(h)k(bac)o(kw)o
-(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h
-(`up')f(through)g(the)h(his-)315 555 y(tory)e(as)h(necessary)l(.)20
-b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631
-y Fm(forward-search-history)c(\(C-s\))315 686 y Fn(Searc)o(h)j(forw)o
+13 14 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(13)75 149 y Fl(next-history)14 b(\(C-n\))315 204 y
+Fm(Mo)o(v)o(e)g(`forw)o(ard')f(through)i(the)h(history)f(list,)g(fetc)o
+(hing)h(the)f(next)h(command.)75 307 y Fl(beginning-of-history)c
+(\(M-<\))315 362 y Fm(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f
+(the)f(history)l(.)75 465 y Fl(end-of-history)e(\(M->\))315
+520 y Fm(Mo)o(v)o(e)h(to)h(the)g(end)h(of)f(the)g(input)h(history)l(,)f
+(i.e.,)g(the)g(line)i(curren)o(tly)f(b)q(eing)g(en)o(tered.)75
+624 y Fl(reverse-search-history)c(\(C-r\))315 678 y Fm(Searc)o(h)k(bac)
+o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)
+h(`up')f(through)g(the)h(his-)315 733 y(tory)e(as)h(necessary)l(.)20
+b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 836
+y Fl(forward-search-history)c(\(C-s\))315 891 y Fm(Searc)o(h)j(forw)o
 (ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)
-o(wn')f(through)g(the)h(the)315 741 y(history)g(as)g(necessary)l(.)20
-b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817
-y Fm(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315
-872 y Fn(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)
-f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315
-926 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o
-(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 981
-y(user.)75 1057 y Fm(non-incremental-forward-se)o(arch-hi)o(story)12
-b(\(M-n\))315 1112 y Fn(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f
+o(wn')f(through)g(the)h(the)315 946 y(history)g(as)g(necessary)l(.)20
+b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 1049
+y Fl(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315
+1104 y Fm(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o
+(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315
+1159 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o
+(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1214
+y(user.)75 1317 y Fl(non-incremental-forward-se)o(arch-hi)o(story)12
+b(\(M-n\))315 1372 y Fm(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f
 (curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the)
-315 1167 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i
+315 1426 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i
 (searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315
-1222 y(user.)75 1298 y Fm(history-search-forward)f(\(\))315
-1353 y Fn(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f
+1481 y(user.)75 1584 y Fl(history-search-forward)f(\(\))315
+1639 y Fm(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f
 (the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315
-1407 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o
+1694 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o
 (t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27
-b(By)315 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
-1538 y Fm(history-search-backward)c(\(\))315 1593 y Fn(Searc)o(h)18
+b(By)315 1749 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
+1852 y Fl(history-search-backward)c(\(\))315 1907 y Fm(Searc)o(h)18
 b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f
-(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1648 y(start)e(of)h(the)h
+(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1962 y(start)e(of)h(the)h
 (curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18
 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315
-1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
-1779 y Fm(yank-nth-arg)e(\(M-C-y\))315 1834 y Fn(Insert)f(the)g
+2016 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
+2120 y Fl(yank-nth-arg)e(\(M-C-y\))315 2174 y Fm(Insert)f(the)g
 (\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h
-(the)f(second)h(w)o(ord)e(on)315 1889 y(the)i(previous)i(line\).)21
-b(With)14 b(an)h(argumen)o(t)e Ff(n)p Fn(,)i(insert)f(the)h
-Ff(n)p Fn(th)f(w)o(ord)g(from)g(the)g(previous)315 1943
-y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q
-(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315
-1998 y(argumen)o(t)g(inserts)i(the)f Ff(n)p Fn(th)h(w)o(ord)e(from)h
-(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y
-Fm(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 y Fn(Insert)j(last)f
-(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f
-(of)g(the)g(previous)315 2184 y(history)e(en)o(try\).)20
-b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g
-Fm(yank-nth-arg)p Fn(.)j(Succes-)315 2239 y(siv)o(e)f(calls)g(to)f
-Fm(yank-last-arg)e Fn(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g
-(list,)i(inserting)f(the)315 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i
-(line)g(in)g(turn.)75 2400 y Fe(1.4.3)30 b(Commands)21
-b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Fm(delete-char)14
-b(\(C-d\))315 2560 y Fn(Delete)j(the)f(c)o(haracter)g(under)h(the)f
-(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of)
-e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g
-(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not)
-315 2670 y(b)q(ound)g(to)f Fm(delete-char)p Fn(,)e(then)j(return)f
-Fm(EOF)p Fn(.)p eop
-%%Page: 14 16
-14 15 bop 75 -58 a Fn(14)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Fm(backward-delete-char)12 b(\(Rubout\))315 238
-y Fn(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c(n)o
-(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 293
-y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
-378 y Fm(forward-backward-delete-ch)o(ar)12 b(\(\))315
-432 y Fn(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
-(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
-487 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
-(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
-542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627
-y Fm(quoted-insert)e(\(C-q,)i(C-v\))315 682 y Fn(Add)j(the)f(next)g(c)o
-(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
-b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 736
-y(sequences)f(lik)o(e)605 734 y Fh(h)p 617 708 56 2 v
-617 736 a Fg(C-q)p 617 744 V 671 734 a Fh(i)685 736 y
-Fn(,)f(for)g(example.)75 821 y Fm(tab-insert)f(\(M-TAB\))315
-876 y Fn(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Fm(self-insert)f
-(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fn(Insert)g(y)o(ourself.)
-75 1100 y Fm(transpose-chars)e(\(C-t\))315 1155 y Fn(Drag)i(the)h(c)o
-(haracter)f(b)q(efore)h(the)h(cursor)e(forw)o(ard)g(o)o(v)o(er)g(the)h
-(c)o(haracter)f(at)h(the)g(cursor,)315 1210 y(mo)o(ving)i(the)f(cursor)
-h(forw)o(ard)e(as)i(w)o(ell.)28 b(If)18 b(the)g(insertion)h(p)q(oin)o
-(t)f(is)g(at)f(the)h(end)h(of)e(the)315 1265 y(line,)c(then)e(this)h
-(transp)q(oses)e(the)h(last)g(t)o(w)o(o)f(c)o(haracters)g(of)h(the)g
-(line.)20 b(Negativ)o(e)11 b(argumen)o(ts)315 1320 y(ha)o(v)o(e)k(no)g
-(e\013ect.)75 1404 y Fm(transpose-words)e(\(M-t\))315
-1459 y Fn(Drag)i(the)h(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g
-(w)o(ord)f(after)h(p)q(oin)o(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f
-(that)315 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Fm(upcase-word)g
-(\(M-u\))315 1654 y Fn(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o
-(wing\))h(w)o(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)
-q(er-)315 1708 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g
-(mo)o(v)o(e)f(the)i(cursor.)75 1793 y Fm(downcase-word)d(\(M-l\))315
-1848 y Fn(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h
-(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o
-(ercase)315 1903 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o
-(v)o(e)f(the)h(cursor.)75 1988 y Fm(capitalize-word)e(\(M-c\))315
-2042 y Fn(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
-(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
-2097 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
-(the)h(cursor.)75 2220 y Fe(1.4.4)30 b(Killing)20 b(And)h(Y)-5
-b(anking)75 2336 y Fm(kill-line)14 b(\(C-k\))315 2391
-y Fn(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
-(the)g(line.)75 2476 y Fm(backward-kill-line)e(\(C-x)h(Rubout\))315
-2530 y Fn(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
-(line.)75 2615 y Fm(unix-line-discard)e(\(C-u\))315 2670
-y Fn(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
-(eginning)j(of)c(the)i(curren)o(t)f(line.)p eop
-%%Page: 15 17
-15 16 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(15)75 183 y Fm(kill-whole-line)13 b(\(\))315 238 y
-Fn(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e
-(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315
-293 y(un)o(b)q(ound.)75 374 y Fm(kill-word)c(\(M-d\))315
-429 y Fn(Kill)j(from)d(p)q(oin)o(t)h(to)f(the)h(end)g(of)f(the)h
-(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o(een)g(w)o(ords,)e(to)i
-(the)f(end)315 483 y(of)h(the)g(next)g(w)o(ord.)20 b(W)l(ord)14
-b(b)q(oundaries)j(are)e(the)g(same)g(as)g Fm(forward-word)p
-Fn(.)75 564 y Fm(backward-kill-word)e(\(M-DEL\))315 619
-y Fn(Kill)k(the)d(w)o(ord)g(b)q(ehind)i(p)q(oin)o(t.)21
-b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h(same)f(as)g
-Fm(backward-word)p Fn(.)75 700 y Fm(unix-word-rubout)f(\(C-w\))315
-755 y Fn(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o(t,)e(using)h
-(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23
-b(The)16 b(killed)315 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h
-(kill-ring.)75 891 y Fm(delete-horizontal-space)c(\(\))315
-946 y Fn(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k
-(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1027
-y Fm(kill-region)e(\(\))315 1082 y Fn(Kill)j(the)f(text)e(in)i(the)g
-(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un)
-o(b)q(ound.)75 1163 y Fm(copy-region-as-kill)d(\(\))315
-1217 y Fn(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
-(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o
-(a)o(y)l(.)315 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
-(ound.)75 1353 y Fm(copy-backward-word)d(\(\))315 1408
-y Fn(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i
-(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
-1463 y(same)c(as)g Fm(backward-word)p Fn(.)j(By)d(default,)g(this)h
-(command)f(is)h(un)o(b)q(ound.)75 1544 y Fm(copy-forward-word)d(\(\))
-315 1599 y Fn(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
-(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e
-(the)315 1653 y(same)g(as)g Fm(forward-word)p Fn(.)j(By)d(default,)h
-(this)f(command)g(is)h(un)o(b)q(ound.)75 1734 y Fm(yank)f(\(C-y\))315
-1789 y Fn(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the)
-h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75
-1870 y Fm(yank-pop)f(\(M-y\))315 1925 y Fn(Rotate)j(the)g(kill-ring,)j
-(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
-(this)h(if)f(the)h(prior)315 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o
-(ank-p)q(op.)75 2095 y Fe(1.4.5)30 b(Sp)r(ecifying)20
-b(Numeric)h(Argumen)n(ts)75 2205 y Fm(digit-argument)13
-b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 y Fn(Add)f(this)g(digit)g(to)f
-(the)h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)
-h(argumen)o(t.)315 2313 y Fh(h)p 327 2287 50 2 v 327
-2315 a Fg(M{)p 327 2323 V 375 2313 a Fh(i)405 2315 y
-Fn(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y
-Fm(universal-argument)e(\(\))315 2451 y Fn(This)g(is)h(another)e(w)o(a)
-o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
-b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
-2506 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o
-(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315
-2560 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
-(digits,)g(executing)g Fm(universal-argument)315 2615
-y Fn(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h
-(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
-2670 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
-f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)p
+(the)f(second)h(w)o(ord)e(on)315 2229 y(the)j(previous)h(line\))g(at)e
+(p)q(oin)o(t.)21 b(With)15 b(an)g(argumen)o(t)f Fc(n)p
+Fm(,)h(insert)g(the)g Fc(n)p Fm(th)g(w)o(ord)g(from)f(the)315
+2284 y(previous)g(command)g(\(the)f(w)o(ords)f(in)j(the)e(previous)i
+(command)e(b)q(egin)i(with)e(w)o(ord)g(0\).)19 b(A)315
+2339 y(negativ)o(e)13 b(argumen)o(t)f(inserts)h(the)g
+Fc(n)p Fm(th)g(w)o(ord)f(from)g(the)h(end)h(of)e(the)h(previous)g
+(command.)75 2442 y Fl(yank-last-arg)g(\(M-.)i(or)g(M-_\))315
+2497 y Fm(Insert)j(last)f(argumen)o(t)g(to)g(the)g(previous)i(command)e
+(\(the)g(last)h(w)o(ord)f(of)g(the)g(previous)315 2552
+y(history)e(en)o(try\).)20 b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)
+o(e)g(exactly)h(lik)o(e)g Fl(yank-nth-arg)p Fm(.)j(Succes-)315
+2606 y(siv)o(e)f(calls)g(to)f Fl(yank-last-arg)e Fm(mo)o(v)o(e)i(bac)o
+(k)g(through)g(the)g(history)g(list,)i(inserting)f(the)315
+2661 y(last)d(argumen)o(t)g(of)f(eac)o(h)i(line)g(in)g(turn.)p
 eop
+%%Page: 14 16
+14 15 bop 75 -58 a Fm(14)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fb(1.4.3)30 b(Commands)21 b(F)-5 b(or)19 b(Changing)i(T)-5
+b(ext)75 286 y Fl(delete-char)14 b(\(C-d\))315 341 y
+Fm(Delete)20 b(the)g(c)o(haracter)e(at)h(p)q(oin)o(t.)33
+b(If)20 b(p)q(oin)o(t)g(is)g(at)e(the)i(b)q(eginning)i(of)d(the)g
+(line,)j(there)315 396 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j
+(and)e(the)f(last)h(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q
+(ound)i(to)315 450 y Fl(delete-char)p Fm(,)13 b(then)j(return)f
+Fh(eof)p Fm(.)75 552 y Fl(backward-delete-char)d(\(Rubout\))315
+607 y Fm(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
+(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315
+661 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
+763 y Fl(forward-backward-delete-ch)o(ar)12 b(\(\))315
+818 y Fm(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
+(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
+872 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
+(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
+927 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 1029
+y Fl(quoted-insert)e(\(C-q)i(or)g(C-v\))315 1083 y Fm(Add)j(the)f(next)
+g(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
+b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 1138
+y(sequences)f(lik)o(e)h Fg(C-q)p Fm(,)d(for)h(example.)75
+1240 y Fl(tab-insert)f(\(M-)401 1238 y Ff(h)p 412 1212
+74 2 v 412 1240 a Fe(T)m(AB)p 412 1247 V 484 1238 a Ff(i)499
+1240 y Fl(\))315 1294 y Fm(Insert)h(a)g(tab)g(c)o(haracter.)75
+1396 y Fl(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
+1451 y Fm(Insert)g(y)o(ourself.)75 1552 y Fl(transpose-chars)e(\(C-t\))
+315 1607 y Fm(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
+(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315
+1662 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
+b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e
+(the)315 1716 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
+(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11
+b(argumen)o(ts)315 1771 y(ha)o(v)o(e)k(no)g(e\013ect.)75
+1873 y Fl(transpose-words)e(\(M-t\))315 1927 y Fm(Drag)i(the)h(w)o(ord)
+g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o
+(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1982
+y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e
+(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the)
+315 2037 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75
+2138 y Fl(upcase-word)f(\(M-u\))315 2193 y Fm(Upp)q(ercase)j(the)f
+(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16
+b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 2248
+y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the)
+i(cursor.)75 2349 y Fl(downcase-word)d(\(M-l\))315 2404
+y Fm(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
+(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase)
+315 2459 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2560 y Fl(capitalize-word)e(\(M-c\))315
+2615 y Fm(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
+(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
+2670 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)p eop
+%%Page: 15 17
+15 16 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(15)75 149 y Fl(overwrite-mode)13 b(\(\))315 204 y Fm(T)l(oggle)j(o)o
+(v)o(erwrite)g(mo)q(de.)24 b(With)17 b(an)f(explicit)j(p)q(ositiv)o(e)f
+(n)o(umeric)f(argumen)o(t,)f(switc)o(hes)315 259 y(to)10
+b(o)o(v)o(erwrite)g(mo)q(de.)19 b(With)11 b(an)g(explicit)i(non-p)q
+(ositiv)o(e)f(n)o(umeric)g(argumen)o(t,)e(switc)o(hes)i(to)315
+314 y(insert)k(mo)q(de.)k(This)c(command)f(a\013ects)g(only)h
+Fl(emacs)e Fm(mo)q(de;)h Fl(vi)g Fm(mo)q(de)h(do)q(es)g(o)o(v)o
+(erwrite)315 369 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15
+b(call)h(to)f Fl(readline\(\))f Fm(starts)f(in)k(insert)e(mo)q(de.)315
+436 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f
+Fl(self-insert)f Fm(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315
+491 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36
+b(Characters)20 b(b)q(ound)i(to)e Fl(backward-)315 546
+y(delete-char)14 b Fm(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q
+(oin)o(t)h(with)f(a)g(space.)315 614 y(By)g(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 729 y Fb(1.4.4)30 b(Killing)20
+b(And)h(Y)-5 b(anking)75 853 y Fl(kill-line)14 b(\(C-k\))315
+908 y Fm(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
+(the)g(line.)75 1002 y Fl(backward-kill-line)e(\(C-x)h(Rubout\))315
+1057 y Fm(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g
+(line.)75 1151 y Fl(unix-line-discard)e(\(C-u\))315 1205
+y Fm(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q
+(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1299 y Fl(kill-whole-line)
+e(\(\))315 1354 y Fm(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren)
+o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29
+b(By)19 b(default,)315 1409 y(this)d(is)f(un)o(b)q(ound.)75
+1503 y Fl(kill-word)f(\(M-d\))315 1558 y Fm(Kill)j(from)d(p)q(oin)o(t)h
+(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o
+(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1613 y(of)h(the)g(next)g(w)o
+(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g
+Fl(forward-word)p Fm(.)75 1707 y Fl(backward-kill-word)e(\(M-)592
+1705 y Ff(h)p 603 1679 73 2 v 603 1707 a Fe(DEL)p 603
+1714 V 674 1705 a Ff(i)689 1707 y Fl(\))315 1761 y Fm(Kill)k(the)d(w)o
+(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f
+(the)h(same)f(as)g Fl(backward-word)p Fm(.)75 1855 y
+Fl(unix-word-rubout)f(\(C-w\))315 1910 y Fm(Kill)18 b(the)e(w)o(ord)f
+(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g
+(b)q(oundary)l(.)23 b(The)16 b(killed)315 1965 y(text)f(is)g(sa)o(v)o
+(ed)g(on)g(the)h(kill-ring.)75 2059 y Fl(delete-horizontal-space)c
+(\(\))315 2114 y Fm(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q
+(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75
+2208 y Fl(kill-region)e(\(\))315 2263 y Fm(Kill)j(the)f(text)e(in)i
+(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g
+(is)h(un)o(b)q(ound.)75 2357 y Fl(copy-region-as-kill)d(\(\))315
+2412 y Fm(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h
+(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o
+(a)o(y)l(.)315 2466 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q
+(ound.)75 2560 y Fl(copy-backward-word)d(\(\))315 2615
+y Fm(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i
+(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
+2670 y(same)c(as)g Fl(backward-word)p Fm(.)j(By)d(default,)g(this)h
+(command)f(is)h(un)o(b)q(ound.)p eop
 %%Page: 16 18
-16 17 bop 75 -58 a Fn(16)1299 b(GNU)15 b(Readline)i(Library)315
-183 y(or)c(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the)
-g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
-238 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
+16 17 bop 75 -58 a Fm(16)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fl(copy-forward-word)d(\(\))315 204 y Fm(Cop)o(y)i(the)h(w)o(ord)
+e(follo)o(wing)j(p)q(oin)o(t)f(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o
+(ord)f(b)q(oundaries)i(are)e(the)315 259 y(same)g(as)g
+Fl(forward-word)p Fm(.)j(By)d(default,)h(this)f(command)g(is)h(un)o(b)q
+(ound.)75 342 y Fl(yank)f(\(C-y\))315 397 y Fm(Y)l(ank)g(the)h(top)f
+(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.)
+75 481 y Fl(yank-pop)g(\(M-y\))315 535 y Fm(Rotate)i(the)h(kill-ring,)j
+(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
+(this)h(if)f(the)h(prior)315 590 y(command)d(is)h Fl(yank)e
+Fm(or)h Fl(yank-pop)p Fm(.)75 693 y Fb(1.4.5)30 b(Sp)r(ecifying)20
+b(Numeric)h(Argumen)n(ts)75 806 y Fl(digit-argument)13
+b(\()p Fg(M-0)p Fl(,)i Fg(M-1)p Fl(,)f(...)h Fg(M--)p
+Fl(\))315 861 y Fm(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e
+(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315
+915 y Fg(M--)h Fm(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75
+999 y Fl(universal-argument)e(\(\))315 1054 y Fm(This)g(is)h(another)e
+(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
+b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
+1108 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o
+(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315
+1163 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
+(digits,)g(executing)g Fl(universal-argument)315 1218
+y Fm(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h
+(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
+1273 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)
+f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
+1328 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h
+(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
+1382 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
 (executing)i(this)f(function)h(the)e(\014rst)h(time)315
-293 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
+1437 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
 (time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315
-348 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
-(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 472 y Fe(1.4.6)30
+1492 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
+(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1595 y Fb(1.4.6)30
 b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5
-b(ou)75 590 y Fm(complete)14 b(\(TAB\))315 644 y Fn(A)o(ttempt)j(to)g
-(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27
-b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,)
-15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y)
-o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are)
-g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;)
-h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e
-(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315
-864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g
-(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315
-918 y(so)g(on.)75 1004 y Fm(possible-completions)d(\(M-?\))315
-1059 y Fn(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
-q(efore)h(the)f(cursor.)75 1145 y Fm(insert-completions)e(\(M-*\))315
-1199 y Fn(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
+b(ou)75 1708 y Fl(complete)14 b(\()305 1706 y Ff(h)p
+317 1680 74 2 v 317 1708 a Fe(T)m(AB)p 317 1715 V 389
+1706 a Ff(i)404 1708 y Fl(\))315 1762 y Fm(A)o(ttempt)c(to)h(p)q
+(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19
+b(The)11 b(actual)h(completion)315 1817 y(p)q(erformed)j(is)h
+(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename)
+g(completion.)75 1901 y Fl(possible-completions)c(\(M-?\))315
+1955 y Fm(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
+q(efore)h(p)q(oin)o(t.)75 2039 y Fl(insert-completions)d(\(M-*\))315
+2093 y Fm(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
 q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315
-1254 y(b)o(y)f Fm(possible-completions)p Fn(.)75 1340
-y Fm(menu-complete)e(\(\))315 1395 y Fn(Similar)g(to)f
-Fm(complete)p Fn(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
-(completed)f(with)h(a)e(single)j(matc)o(h)315 1450 y(from)k(the)h(list)
-h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20
-b(execution)g(of)f Fm(menu-complete)315 1504 y Fn(steps)h(through)g
+2148 y(b)o(y)f Fl(possible-completions)p Fm(.)75 2232
+y Fl(menu-complete)e(\(\))315 2286 y Fm(Similar)g(to)f
+Fl(complete)p Fm(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
+(completed)f(with)h(a)e(single)j(matc)o(h)315 2341 y(from)k(the)h(list)
+h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19
+b(execution)h(of)f Fl(menu-complete)315 2396 y Fm(steps)h(through)g
 (the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f
-(matc)o(h)f(in)i(turn.)315 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g
-(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i
-(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g
-Ff(n)g Fn(mo)o(v)o(es)g Ff(n)g Fn(p)q(ositions)h(forw)o(ard)e(in)i(the)
-g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f
-(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g
-(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f
-(b)q(e)h(b)q(ound)g(to)f Fm(TAB)p Fn(,)f(but)h(is)h(un)o(b)q(ound)g(b)o
-(y)f(default.)75 1809 y Fm(delete-char-or-list)e(\(\))315
-1864 y Fn(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h
-(not)f(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315
-1919 y(\(lik)o(e)i Fm(delete-char)p Fn(\).)j(If)d(at)f(the)h(end)g(of)f
-(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d
-Fm(possible-)315 1974 y(completions)p Fn(.)k(This)e(command)f(is)h(un)o
-(b)q(ound)g(b)o(y)f(default.)75 2098 y Fe(1.4.7)30 b(Keyb)r(oard)20
-b(Macros)75 2216 y Fm(start-kbd-macro)13 b(\(C-x)i(\(\))315
-2270 y Fn(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o
-(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 2356
-y Fm(end-kbd-macro)e(\(C-x)i(\)\))315 2411 y Fn(Stop)f(sa)o(ving)f(the)
-h(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q
-(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 2466 y(de\014nition.)75
-2552 y Fm(call-last-kbd-macro)g(\(C-x)h(e\))315 2606
-y Fn(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i
-(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315
-2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o
-(eyb)q(oard.)p eop
+(matc)o(h)f(in)i(turn.)315 2451 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g
+(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f
+(the)i(setting)315 2506 y(of)f Fl(bell-style)p Fm(\))e(and)i(the)g
+(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g
+Fc(n)i Fm(mo)o(v)o(es)e Fc(n)315 2560 y Fm(p)q(ositions)h(forw)o(ard)e
+(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g
+(ma)o(y)g(b)q(e)h(used)g(to)315 2615 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h
+(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f
+(b)q(e)h(b)q(ound)g(to)315 2668 y Ff(h)p 327 2642 V 327
+2670 a Fe(T)m(AB)p 327 2678 V 399 2668 a Ff(i)414 2670
+y Fm(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)p
+eop
 %%Page: 17 19
-17 18 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
-b(17)75 183 y Fe(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75
-298 y Fm(re-read-init-file)13 b(\(C-x)h(C-r\))315 353
-y Fn(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Ff(inputrc)k
-Fn(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m
-(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75
-491 y Fm(abort)e(\(C-g\))315 546 y Fn(Ab)q(ort)f(the)g(curren)o(t)h
+17 18 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(17)75 149 y Fl(delete-char-or-list)13 b(\(\))315 204
+y Fm(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h(not)f
+(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315
+259 y(\(lik)o(e)i Fl(delete-char)p Fm(\).)j(If)d(at)f(the)h(end)g(of)f
+(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d
+Fl(possible-)315 314 y(completions)p Fm(.)k(This)e(command)f(is)h(un)o
+(b)q(ound)g(b)o(y)f(default.)75 428 y Fb(1.4.7)30 b(Keyb)r(oard)20
+b(Macros)75 551 y Fl(start-kbd-macro)13 b(\(C-x)i(\(\))315
+606 y Fm(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o
+(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 699
+y Fl(end-kbd-macro)e(\(C-x)i(\)\))315 754 y Fm(Stop)f(sa)o(ving)f(the)h
+(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q
+(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 809 y(de\014nition.)75
+902 y Fl(call-last-kbd-macro)g(\(C-x)h(e\))315 957 y
+Fm(Re-execute)k(the)g(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i(b)o
+(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 1012
+y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o(eyb)q
+(oard.)75 1126 y Fb(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75
+1249 y Fl(re-read-init-file)13 b(\(C-x)h(C-r\))315 1304
+y Fm(Read)d(in)g(the)g(con)o(ten)o(ts)g(of)f(the)h Fc(inputrc)k
+Fm(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m
+(ariable)315 1358 y(assignmen)o(ts)k(found)h(there.)75
+1452 y Fl(abort)e(\(C-g\))315 1507 y Fm(Ab)q(ort)f(the)g(curren)o(t)h
 (editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s
-(ject)e(to)g(the)315 600 y(setting)i(of)g Fm(bell-style)p
-Fn(\).)75 684 y Fm(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p
-Ff(x)p Fm(,)h Fc(:)8 b(:)g(:)n Fm(\))315 739 y Fn(If)14
-b(the)g(meta\014ed)g(c)o(haracter)f Ff(x)k Fn(is)d(lo)o(w)o(ercase,)g
-(run)g(the)g(command)f(that)h(is)g(b)q(ound)h(to)e(the)315
-794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75
-877 y Fm(prefix-meta)e(\(ESC\))315 932 y Fn(Mak)o(e)j(the)i(next)f(c)o
-(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19
-b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.)
-20 b(T)o(yping)15 b(`)p Fm(ESC)g(f)p Fn(')f(is)i(equiv)m(alen)o(t)h(to)
-d(t)o(yping)i(`)p Fm(M-f)p Fn('.)75 1070 y Fm(undo)f(\(C-_,)f(C-x)h
-(C-u\))315 1125 y Fn(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q
-(ered)g(for)e(eac)o(h)h(line.)75 1209 y Fm(revert-line)f(\(M-r\))315
-1263 y Fn(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26
-b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Fm(undo)f
-Fn(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g
-(b)q(eginning.)75 1402 y Fm(tilde-expand)f(\(M-~\))315
-1456 y Fn(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o
-(ord.)75 1540 y Fm(set-mark)f(\(C-@\))315 1595 y Fn(Set)g(the)f(mark)g
-(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g
-(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f
-(that)h(p)q(osition.)75 1733 y Fm(exchange-point-and-mark)d(\(C-x)j
-(C-x\))315 1788 y Fn(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k
-(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o
-(v)o(ed)315 1843 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q
-(osition)h(is)g(sa)o(v)o(ed)f(as)g(the)g(mark.)75 1926
-y Fm(character-search)e(\(C-]\))315 1981 y Fn(A)f(c)o(haracter)g(is)h
-(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q
-(ccurrence)g(of)f(that)g(c)o(haracter.)315 2036 y(A)j(negativ)o(e)h
-(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75
-2119 y Fm(character-search-backward)c(\(M-C-]\))315 2174
-y Fn(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v)
-o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315
-2229 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f
-(subsequen)o(t)i(o)q(ccurrences.)75 2312 y Fm(insert-comment)d(\(M-#\))
-315 2367 y Fn(The)19 b(v)m(alue)i(of)e(the)g Fm(comment-begin)e
-Fn(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315
-2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if)
-i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506
-y Fm(dump-functions)d(\(\))315 2560 y Fn(Prin)o(t)g(all)h(of)f(the)g
-(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)h
-(output)e(stream.)315 2615 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i
-(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o
-(y)f(that)315 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g
-Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o
-(y)f(default.)p eop
+(ject)e(to)g(the)315 1561 y(setting)i(of)g Fl(bell-style)p
+Fm(\).)75 1655 y Fl(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p
+Fc(x)p Fl(,)h(...\))315 1710 y Fm(If)f(the)g(meta\014ed)g(c)o(haracter)
+f Fc(x)k Fm(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g
+(b)q(ound)h(to)e(the)315 1764 y(corresp)q(onding)j(upp)q(ercase)g(c)o
+(haracter.)75 1858 y Fl(prefix-meta)e(\()377 1856 y Ff(h)p
+389 1830 70 2 v 389 1858 a Fe(ESC)p 389 1866 V 456 1856
+a Ff(i)471 1858 y Fl(\))315 1913 y Fm(Metafy)k(the)h(next)g(c)o
+(haracter)f(t)o(yp)q(ed.)30 b(This)20 b(is)f(for)f(k)o(eyb)q(oards)h
+(without)g(a)f(meta)g(k)o(ey)l(.)315 1968 y(T)o(yping)e(`)485
+1966 y Ff(h)p 496 1939 V 496 1968 a Fe(ESC)p 496 1975
+V 563 1966 a Ff(i)593 1968 y Fl(f)p Fm(')f(is)h(equiv)m(alen)o(t)h(to)d
+(t)o(yping)i Fg(M-f)p Fm(.)75 2061 y Fl(undo)f(\(C-_)f(or)h(C-x)g
+(C-u\))315 2116 y Fm(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q
+(ered)g(for)e(eac)o(h)h(line.)75 2209 y Fl(revert-line)f(\(M-r\))315
+2264 y Fm(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26
+b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Fl(undo)f
+Fm(command)315 2319 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g
+(b)q(eginning.)75 2412 y Fl(tilde-expand)f(\(M-~\))315
+2467 y Fm(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o
+(ord.)75 2560 y Fl(set-mark)f(\(C-@\))315 2615 y Fm(Set)i(the)h(mark)f
+(to)f(the)i(p)q(oin)o(t.)24 b(If)17 b(a)f(n)o(umeric)h(argumen)o(t)f
+(is)g(supplied,)j(the)e(mark)e(is)i(set)315 2670 y(to)e(that)f(p)q
+(osition.)p eop
 %%Page: 18 20
-18 19 bop 75 -58 a Fn(18)1299 b(GNU)15 b(Readline)i(Library)75
-183 y Fm(dump-variables)c(\(\))315 238 y Fn(Prin)o(t)e(all)g(of)f(the)h
-(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e(the)h
-(Readline)i(output)d(stream.)315 293 y(If)16 b(a)g(n)o(umeric)g
-(argumen)o(t)f(is)i(supplied,)h(the)e(output)f(is)i(formatted)d(in)j
-(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 348 y(it)g(can)h(b)q(e)g(made)f
-(part)f(of)h(an)g Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h
-(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Fm(dump-macros)f(\(\))315
-482 y Fn(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b)
-q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315
-537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i
-(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315
-592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h
-Ff(inputrc)k Fn(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o
-(y)315 647 y(default.)75 775 y Fl(1.5)33 b(Readline)23
-b(vi)h(Mo)r(de)137 871 y Fn(While)13 b(the)f(Readline)j(library)d(do)q
-(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Fm(vi)g
-Fn(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75
-926 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h(of)d(the)i(line.)
-27 b(The)17 b(Readline)i Fm(vi)e Fn(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g
-(sp)q(eci\014ed)i(in)75 981 y(the)c Fi(POSIX)h Fn(1003.2)d(standard.)
-137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o
-(w)o(een)f Fm(emacs)e Fn(and)i Fm(vi)f Fn(editing)i(mo)q(des,)f(use)f
-(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21
-b(The)15 b(Readline)j(default)d(is)h Fm(emacs)f Fn(mo)q(de.)137
-1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Fm(vi)g
-Fn(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q
-(de,)g(as)g(if)g(y)o(ou)75 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p
-Fm(i)p Fn('.)18 b(Pressing)608 1223 y Fh(h)p 620 1197
-70 2 v 620 1225 a Fg(ESC)p 620 1233 V 687 1223 a Fh(i)715
-1225 y Fn(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i
-(where)f(y)o(ou)g(can)g(edit)h(the)75 1280 y(text)i(of)h(the)g(line)h
-(with)g(the)f(standard)f Fm(vi)h Fn(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o
-(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1335
-y(`)p Fm(k)p Fn(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p
-Fm(j)p Fn(',)e(and)h(so)g(forth.)p eop
-%%Page: -1 21
--1 20 bop 1862 -58 a Fn(i)75 183 y Fj(T)-7 b(able)27
-b(of)f(Con)n(ten)n(ts)75 354 y Fl(1)67 b(Command)22 b(Line)i(Editing)d
-Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
-(.)f(.)g(.)g(.)42 b Fl(1)224 423 y Fn(1.1)j(In)o(tro)q(duction)16
-b(to)f(Line)h(Editing)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+18 19 bop 75 -58 a Fm(18)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fl(exchange-point-and-mark)c(\(C-x)j(C-x\))315
+204 y Fm(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k(The)c
+(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o(v)o(ed)
+315 259 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q(osition)h(is)g
+(sa)o(v)o(ed)f(as)g(the)g(mark.)75 347 y Fl(character-search)e(\(C-]\))
+315 402 y Fm(A)f(c)o(haracter)g(is)h(read)g(and)f(p)q(oin)o(t)h(is)g
+(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q(ccurrence)g(of)f(that)g(c)o
+(haracter.)315 456 y(A)j(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f
+(previous)i(o)q(ccurrences.)75 544 y Fl(character-search-backward)c
+(\(M-C-]\))315 599 y Fm(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q
+(oin)o(t)g(is)g(mo)o(v)o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)
+e(that)315 654 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o
+(hes)g(for)f(subsequen)o(t)i(o)q(ccurrences.)75 741 y
+Fl(insert-comment)d(\(M-#\))315 796 y Fm(Without)18 b(a)f(n)o(umeric)i
+(argumen)o(t,)e(the)h(v)m(alue)h(of)f(the)f Fl(comment-begin)f
+Fm(v)m(ariable)k(is)e(in-)315 851 y(serted)e(at)f(the)h(b)q(eginning)i
+(of)d(the)h(curren)o(t)g(line.)23 b(If)16 b(a)g(n)o(umeric)h(argumen)o
+(t)e(is)h(supplied,)315 906 y(this)j(command)f(acts)g(as)f(a)h(toggle:)
+26 b(if)19 b(the)f(c)o(haracters)g(at)f(the)i(b)q(eginning)h(of)e(the)g
+(line)315 960 y(do)d(not)g(matc)o(h)g(the)g(v)m(alue)i(of)e
+Fl(comment-begin)p Fm(,)e(the)i(v)m(alue)i(is)f(inserted,)f(otherwise)h
+(the)315 1015 y(c)o(haracters)j(in)i Fl(comment-begin)d
+Fm(are)i(deleted)i(from)d(the)h(b)q(eginning)i(of)e(the)g(line.)36
+b(In)315 1070 y(either)16 b(case,)f(the)g(line)i(is)f(accepted)f(as)g
+(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)75 1158
+y Fl(dump-functions)c(\(\))315 1213 y Fm(Prin)o(t)g(all)h(of)f(the)g
+(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)g
+(output)f(stream.)315 1267 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i
+(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o
+(y)f(that)315 1322 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g
+Fc(inputrc)k Fm(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o
+(y)f(default.)75 1410 y Fl(dump-variables)e(\(\))315
+1465 y Fm(Prin)o(t)e(all)g(of)f(the)h(settable)g(v)m(ariables)h(and)f
+(their)g(v)m(alues)h(to)e(the)h(Readline)h(output)e(stream.)315
+1519 y(If)16 b(a)g(n)o(umeric)g(argumen)o(t)f(is)i(supplied,)h(the)e
+(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o(y)f(that)315
+1574 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g Fc(inputrc)k
+Fm(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.)
+75 1662 y Fl(dump-macros)f(\(\))315 1717 y Fm(Prin)o(t)j(all)h(of)e
+(the)h(Readline)h(k)o(ey)f(sequences)h(b)q(ound)g(to)e(macros)g(and)h
+(the)g(strings)g(they)315 1771 y(output.)26 b(If)18 b(a)f(n)o(umeric)h
+(argumen)o(t)f(is)h(supplied,)i(the)d(output)g(is)h(formatted)e(in)j
+(suc)o(h)e(a)315 1826 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g
+(part)g(of)f(an)h Fc(inputrc)k Fm(\014le.)i(This)15 b(command)g(is)h
+(un)o(b)q(ound)g(b)o(y)315 1881 y(default.)75 1969 y
+Fl(emacs-editing-mode)d(\(C-e\))315 2024 y Fm(When)j(in)g
+Fl(vi)e Fm(command)i(mo)q(de,)f(this)g(causes)h(a)f(switc)o(h)g(to)g
+Fl(emacs)f Fm(editing)j(mo)q(de.)75 2111 y Fl(vi-editing-mode)c
+(\(M-C-j\))315 2166 y Fm(When)j(in)g Fl(emacs)e Fm(editing)j(mo)q(de,)e
+(this)g(causes)h(a)f(switc)o(h)g(to)g Fl(vi)f Fm(editing)j(mo)q(de.)75
+2290 y Fk(1.5)33 b(Readline)23 b(vi)h(Mo)r(de)137 2385
+y Fm(While)13 b(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o(e)f
+(a)h(full)h(set)f(of)f Fl(vi)g Fm(editing)j(functions,)f(it)f(do)q(es)g
+(con)o(tain)75 2440 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h
+(of)d(the)i(line.)27 b(The)17 b(Readline)h Fl(vi)f Fm(mo)q(de)g(b)q
+(eha)o(v)o(es)g(as)g(sp)q(eci\014ed)i(in)75 2495 y(the)c
+Fh(posix)g Fm(1003.2)f(standard.)137 2560 y(In)h(order)g(to)f(switc)o
+(h)g(in)o(teractiv)o(ely)i(b)q(et)o(w)o(een)f Fl(emacs)e
+Fm(and)i Fl(vi)f Fm(editing)i(mo)q(des,)f(use)f(the)h(command)75
+2615 y Fg(M-C-j)j Fm(\(b)q(ound)i(to)e(emacs-editing-mo)q(de)j(when)e
+(in)h Fl(vi)f Fm(mo)q(de)g(and)g(to)f(vi-editing-mo)q(de)k(in)e
+Fl(emacs)75 2670 y Fm(mo)q(de\).)g(The)15 b(Readline)i(default)f(is)f
+Fl(emacs)g Fm(mo)q(de.)p eop
+%%Page: 19 21
+19 20 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(19)137 149 y(When)16 b(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e
+Fl(vi)g Fm(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g
+(`insertion')f(mo)q(de,)g(as)g(if)g(y)o(ou)75 204 y(had)e(t)o(yp)q(ed)h
+(an)f(`)p Fl(i)p Fm('.)18 b(Pressing)608 202 y Ff(h)p
+620 176 70 2 v 620 204 a Fe(ESC)p 620 212 V 687 202 a
+Ff(i)715 204 y Fm(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q
+(de,)i(where)f(y)o(ou)g(can)g(edit)h(the)75 259 y(text)i(of)h(the)g
+(line)h(with)g(the)f(standard)f Fl(vi)h Fm(mo)o(v)o(emen)o(t)f(k)o
+(eys,)g(mo)o(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75
+314 y(`)p Fl(k)p Fm(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p
+Fl(j)p Fm(',)e(and)h(so)g(forth.)p eop
+%%Page: 20 22
+20 21 bop 75 -58 a Fm(20)1299 b(GNU)15 b(Readline)h(Library)p
+eop
+%%Page: -1 23
+-1 22 bop 1862 -58 a Fm(i)75 149 y Fi(T)-7 b(able)27
+b(of)f(Con)n(ten)n(ts)75 320 y Fk(1)67 b(Command)22 b(Line)i(Editing)d
+Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)g(.)42 b Fk(1)224 389 y Fm(1.1)j(In)o(tro)q(duction)16
+b(to)f(Line)h(Editing)e Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)27 b Fn(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8
-b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+(.)27 b Fm(1)224 444 y(1.2)45 b(Readline)16 b(In)o(teraction)8
+b Fd(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
 h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)23 b Fn(1)374 532 y(1.2.1)44 b(Readline)17
-b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)h(.)f(.)23 b Fm(1)374 499 y(1.2.1)44 b(Readline)16
+b(Bare)f(Essen)o(tials)f Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
 (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
-b Fn(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands)
-7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)21 b Fn(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands)
-11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)25 b Fn(2)374 697 y(1.2.4)44 b(Readline)17
-b(Argumen)o(ts)12 b Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
-b Fn(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h
-(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
-b Fn(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+b Fm(1)374 553 y(1.2.2)44 b(Readline)16 b(Mo)o(v)o(emen)o(t)e(Commands)
+7 b Fd(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
+(.)h(.)21 b Fm(2)374 608 y(1.2.3)44 b(Readline)16 b(Killing)i(Commands)
+11 b Fd(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)25 b Fm(2)374 663 y(1.2.4)44 b(Readline)16
+b(Argumen)o(ts)c Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
+b Fm(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h
+(the)f(History)e Fd(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
+b Fm(3)224 773 y(1.3)45 b(Readline)16 b(Init)h(File)e
+Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
 h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)29 b Fn(4)374 861 y(1.3.1)44 b(Readline)17
-b(Init)f(File)h(Syn)o(tax)7 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+(.)h(.)f(.)h(.)f(.)29 b Fm(4)374 827 y(1.3.1)44 b(Readline)16
+b(Init)g(File)h(Syn)o(tax)7 b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fn(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5
-b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)19 b Fn(8)374 971 y(1.3.3)44 b(Sample)16
-b(Init)g(File)11 b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
+b Fm(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5
+b Fd(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)g(.)f(.)19 b Fm(9)374 937 y(1.3.3)44 b(Sample)16
+b(Init)g(File)11 b Fd(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
 (.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)26 b Fn(9)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h
-(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
-b Fn(12)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fn(12)374 1135 y(1.4.2)44
+h(.)f(.)26 b Fm(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)g(Commands)
+6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fm(12)374
+1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e
+Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fm(12)374 1101 y(1.4.2)44
 b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9
-b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fn(12)374 1190 y(1.4.3)44
-b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8
+b Fd(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fm(12)374 1156 y(1.4.3)44
+b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fd(.)8
 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30
-b Fn(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9
-b Fa(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fn(14)374
-1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c
-Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27
-b Fn(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l
-(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)25 b Fn(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15
-b(Macros)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+b Fm(14)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9
+b Fd(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fm(15)374
+1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c
+Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27
+b Fm(16)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)i(T)o(yp)q(e)e(F)l
+(or)g(Y)l(ou)10 b Fd(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)25 b Fm(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15
+b(Macros)6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
 (.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21
-b Fn(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7
-b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-22 b Fn(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e
-Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+b Fm(17)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7
+b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+22 b Fm(17)224 1485 y(1.5)45 b(Readline)16 b(vi)g(Mo)q(de)e
+Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
 f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)28 b Fn(18)p eop
-%%Page: -2 22
--2 21 bop 75 -58 a Fn(ii)1321 b(GNU)15 b(Readline)i(Library)p
+(.)h(.)f(.)h(.)28 b Fm(18)p eop
+%%Page: -2 24
+-2 23 bop 75 -58 a Fm(ii)1321 b(GNU)15 b(Readline)h(Library)p
 eop
 %%Trailer
 end
diff --git a/readline/doc/rluserman.texinfo b/readline/doc/rluserman.texinfo
index e6a3dcd..89abe31 100644
--- a/readline/doc/rluserman.texinfo
+++ b/readline/doc/rluserman.texinfo
@@ -10,14 +10,14 @@
 @ifinfo
 @dircategory Libraries
 @direntry
-* Readline: (readline).       The GNU readline library API
+* RLuserman: (rluserman).       The GNU readline library User's Manual.
 @end direntry
 
 This document describes the end user interface of the GNU Readline Library,
 a utility which aids in the consistency of user interface across discrete
 programs that need to provide a command line interface.
 
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
+Copyright (C) 1988-2002 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -72,7 +72,7 @@
 by the Free Software Foundation.
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1988-1999 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2002 Free Software Foundation, Inc.
 @end titlepage
 
 @ifinfo
diff --git a/readline/doc/texi2dvi b/readline/doc/texi2dvi
index 3d7134d..c186848 100755
--- a/readline/doc/texi2dvi
+++ b/readline/doc/texi2dvi
@@ -1,8 +1,8 @@
 #! /bin/sh
-# texi2dvi --- smartly produce DVI files from texinfo sources
+# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
 # $Id$
 #
-# Copyright (C) 1992, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+# Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -19,344 +19,550 @@
 # program's maintainer or write to: The Free Software Foundation,
 # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
 #
-# Commentary:
-#
-# Author: Noah Friedman <friedman@gnu.org>
+# Original author: Noah Friedman <friedman@gnu.org>.
 #
 # Please send bug reports, etc. to bug-texinfo@gnu.org.
 # If possible, please send a copy of the output of the script called with
 # the `--debug' option when making a bug report.
-#
-# In the interest of general portability, some common bourne shell
-# constructs were avoided because they weren't guaranteed to be available
-# in some earlier implementations.  I've tried to make this program as
-# portable as possible.  Welcome to unix, where the lowest common
-# denominator is rapidly diminishing.
-#
-# Among the more interesting lossages I noticed among Bourne shells:
-#     * No shell functions.
-#     * No `unset' builtin.
-#     * `shift' cannot take a numeric argument, and signals an error if
-#       there are no arguments to shift.
-#
-# Code:
-
-# Name by which this script was invoked.
-progname=`echo "$0" | sed -e 's/[^\/]*\///g'`
 
 # This string is expanded by rcs automatically when this file is checked out.
 rcs_revision='$Revision$'
-version=`set - $rcs_revision; echo $2`
+rcs_version=`set - $rcs_revision; echo $2`
+program=`echo $0 | sed -e 's!.*/!!'`
+version="texi2dvi (GNU Texinfo 4.0) $rcs_version
 
-# To prevent hairy quoting and escaping later.
-bq='`'
-eq="'"
-
-usage="Usage: $0 [OPTION]... FILE...
-Run a Texinfo document through TeX.
-
-Options:
--b, --batch          No interaction (\nonstopmode in TeX).
--c, --clean          Remove all auxiliary files.
--D, --debug          Turn on shell debugging ($bq${bq}set -x$eq$eq).
--t, --texinfo CMD    Insert CMD after @setfilename before running TeX.
---verbose            Report on what is done.
--h, --help           Display this help and exit.
--v, --version        Display version information and exit.
-
-The values of the TEX, TEXINDEX, and MAKEINFO environment variables are
-used to run those commands, if they are set.
-
-Email bug reports to bug-texinfo@gnu.org."
-
-# Initialize variables.
-# Don't use `unset' since old bourne shells don't have this command.
-# Instead, assign them an empty value.
-# Some of these, like TEX and TEXINDEX, may be inherited from the environment.
-backup_extension=.bak # these files get deleted if all goes well.
-batch=
-clean=
-debug=
-orig_pwd="`pwd`"
-textra=
-verbose=false
-makeinfo="${MAKEINFO-makeinfo}"
-texindex="${TEXINDEX-texindex}"
-tex="${TEX-tex}"
-
-# Save this so we can construct a new TEXINPUTS path for each file.
-TEXINPUTS_orig="$TEXINPUTS"
-export TEXINPUTS
-
-# Parse command line arguments.
-# Make sure that all wildcarded options are long enough to be unambiguous.
-# It's a good idea to document the full long option name in each case.
-# Long options which take arguments will need a `*' appended to the
-# canonical name to match the value appended after the `=' character.
-while :; do
-  test $# -eq 0 && break
-  
-  case "$1" in
-    -b | --batch | --b* ) batch=t; shift ;;
-    -c | --clean | --c* ) clean=t; shift ;;
-    -D | --debug | --d* ) debug=t; shift ;;
-    -h | --help | --h* )   echo "$usage"; exit 0 ;;
-    # OK, we should do real option parsing here, but be lazy for now.
-    -t | --texinfo | --t*) shift; textra="$textra $1"; shift ;; 
-    -v | --vers* )
-      echo "$progname (GNU Texinfo 3.12) $version"
-      echo "Copyright (C) 1998 Free Software Foundation, Inc.
+Copyright (C) 1999 Free Software Foundation, Inc.
 There is NO warranty.  You may redistribute this software
 under the terms of the GNU General Public License.
 For more information about these matters, see the files named COPYING."
-      exit 0 ;;
-    --verb* )            verbose=echo; shift ;;
-    -- )     # Stop option processing
-      shift
-      break ;;
-    -* )
-      case "$1" in
-        --*=* ) arg=`echo "$1" | sed -e 's/=.*//'` ;;
-        * )     arg="$1" ;;
-      esac
-      exec 1>&2
-      echo "$progname: Unknown or ambiguous option $bq$arg$eq."
-      echo "$progname: Try $bq--help$eq for more information."
-      exit 1 ;;
-    * ) break ;;
-   esac
-done
 
-# See if there are any command line args left (which will be interpreted as
-# filename arguments).
-if test $# -eq 0; then
-  exec 1>&2
-  echo "$progname: At least one file name is required as an argument."
-  echo "$progname: Try $bq--help$eq for more information."
+usage="Usage: $program [OPTION]... FILE...
+
+Run each Texinfo or LaTeX FILE through TeX in turn until all
+cross-references are resolved, building all indices.  The directory
+containing each FILE is searched for included files.  The suffix of FILE
+is used to determine its language (LaTeX or Texinfo).
+
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+
+Options:
+  -@                   Use @input instead of \input; for preloaded Texinfo.
+  -b, --batch          No interaction.
+  -c, --clean          Remove all auxiliary files.
+  -D, --debug          Turn on shell debugging (set -x).
+  -e, --expand         Force macro expansion using makeinfo.
+  -I DIR               Search DIR for Texinfo files.
+  -h, --help           Display this help and exit successfully.
+  -l, --language=LANG  Specify the LANG of FILE: LaTeX or Texinfo.
+  -p, --pdf            Use pdftex or pdflatex for processing.
+  -q, --quiet          No output unless errors (implies --batch).
+  -s, --silent         Same as --quiet.
+  -t, --texinfo=CMD    Insert CMD after @setfilename in copy of input file.
+                       Multiple values accumulate.
+  -v, --version        Display version information and exit successfully.
+  -V, --verbose        Report on what is done.
+
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), and TEXINDEX environment variables are used to run
+those commands, if they are set.
+
+Email bug reports to <bug-texinfo@gnu.org>,
+general questions and discussion to <help-texinfo@gnu.org>."
+
+# Initialize variables for option overriding and otherwise.
+# Don't use `unset' since old bourne shells don't have this command.
+# Instead, assign them an empty value.
+escape='\'
+batch=false     # eval for batch mode
+clean=
+debug=
+expand=         # t for expansion via makeinfo
+oformat=dvi
+set_language=
+miincludes=     # makeinfo include path
+textra=
+tmpdir=${TMPDIR:-/tmp}/t2d$$  # avoid collisions on 8.3 filesystems.
+txincludes=     # TEXINPUTS extensions
+txiprereq=19990129 # minimum texinfo.tex version to have macro expansion
+quiet=          # by default let the tools' message be displayed
+verbose=false   # echo for verbose mode
+
+orig_pwd=`pwd`
+
+# Systems which define $COMSPEC or $ComSpec use semicolons to separate
+# directories in TEXINPUTS.
+if test -n "$COMSPEC$ComSpec"; then
+  path_sep=";"
+else
+  path_sep=":"
+fi
+
+# Save this so we can construct a new TEXINPUTS path for each file.
+TEXINPUTS_orig="$TEXINPUTS"
+# Unfortunately makeindex does not read TEXINPUTS.
+INDEXSTYLE_orig="$INDEXSTYLE"
+export TEXINPUTS INDEXSTYLE
+
+# Push a token among the arguments that will be used to notice when we
+# ended options/arguments parsing.
+# Use "set dummy ...; shift" rather than 'set - ..." because on
+# Solaris set - turns off set -x (but keeps set -e).
+# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
+# still expand "$@" to a single argument (the empty string) rather
+# than nothing at all.
+arg_sep="$$--$$"
+set dummy ${1+"$@"} "$arg_sep"; shift
+
+# 
+# Parse command line arguments.
+while test x"$1" != x"$arg_sep"; do
+
+  # Handle --option=value by splitting apart and putting back on argv.
+  case "$1" in
+    --*=*)
+      opt=`echo "$1" | sed -e 's/=.*//'`
+      val=`echo "$1" | sed -e 's/[^=]*=//'`
+      shift
+      set dummy "$opt" "$val" ${1+"$@"}; shift
+      ;;
+  esac
+
+  # This recognizes --quark as --quiet.  So what.
+  case "$1" in
+    -@ ) escape=@;;
+    # Silently and without documentation accept -b and --b[atch] as synonyms.
+    -b | --b*) batch=eval;;
+    -q | -s | --q* | --s*) quiet=t; batch=eval;;
+    -c | --c*) clean=t;;
+    -D | --d*) debug=t;;
+    -e | --e*) expand=t;;
+    -h | --h*) echo "$usage"; exit 0;;
+    -I | --I*)
+      shift
+      miincludes="$miincludes -I $1"
+      txincludes="$txincludes$path_sep$1"
+      ;;
+    -l | --l*) shift; set_language=$1;;
+    -p | --p*) oformat=pdf;;
+    -t | --t*) shift; textra="$textra\\
+$1";;
+    -v | --vers*) echo "$version"; exit 0;;
+    -V | --verb*) verbose=echo;;
+    --) # What remains are not options.
+      shift
+      while test x"$1" != x"$arg_sep"; do
+        set dummy ${1+"$@"} "$1"; shift
+        shift
+      done
+      break;;
+    -*)
+      echo "$0: Unknown or ambiguous option \`$1'." >&2
+      echo "$0: Try \`--help' for more information." >&2
+      exit 1;;
+    *) set dummy ${1+"$@"} "$1"; shift;;
+   esac
+   shift
+done
+# Pop the token
+shift
+
+# Interpret remaining command line args as filenames.
+if test $# = 0; then
+  echo "$0: Missing file arguments." >&2
+  echo "$0: Try \`--help' for more information." >&2
   exit 2
 fi
 
+# Prepare the temporary directory.  Remove it at exit, unless debugging.
+if test -z "$debug"; then
+  trap "cd / && rm -rf $tmpdir" 0 1 2 15
+fi
+
+# Create the temporary directory with strict rights
+(umask 077 && mkdir $tmpdir) || exit 1
+
+# Prepare the tools we might need.  This may be extra work in some
+# cases, but improves the readibility of the script.
+utildir=$tmpdir/utils
+mkdir $utildir || exit 1
+
+# A sed script that preprocesses Texinfo sources in order to keep the
+# iftex sections only.  We want to remove non TeX sections, and
+# comment (with `@c texi2dvi') TeX sections so that makeinfo does not
+# try to parse them.  Nevertheless, while commenting TeX sections,
+# don't comment @macro/@end macro so that makeinfo does propagate
+# them.  Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo
+# doesn't work well enough (yet) to use that, so work around with sed.
+comment_iftex_sed=$utildir/comment.sed
+cat <<EOF >$comment_iftex_sed
+/^@tex/,/^@end tex/{
+  s/^/@c texi2dvi/
+}
+/^@iftex/,/^@end iftex/{
+  s/^/@c texi2dvi/
+  /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
+    s/^@c texi2dvi//
+  }
+}
+/^@html/,/^@end html/d
+/^@ifhtml/,/^@end ifhtml/d
+/^@ifnottex/,/^@end ifnottex/d
+/^@ifinfo/,/^@end ifinfo/{
+  /^@node/p
+  /^@menu/,/^@end menu/p
+  d
+}
+EOF
+# Uncommenting is simple: Remove any leading `@c texi2dvi'.
+uncomment_iftex_sed=$utildir/uncomment.sed
+cat <<EOF >$uncomment_iftex_sed
+s/^@c texi2dvi//
+EOF
+
+# A shell script that computes the list of xref files.
+# Takes the filename (without extension) of which we look for xref
+# files as argument.  The index files must be reported last.
+get_xref_files=$utildir/get_xref.sh
+cat <<\EOF >$get_xref_files
+#! /bin/sh
+
+# Get list of xref files (indexes, tables and lists).
+# Find all files having root filename with a two-letter extension,
+# saves the ones that are really Texinfo-related files.  .?o? catches
+# LaTeX tables and lists.
+for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
+  # If file is empty, skip it.
+  test -s "$this_file" || continue
+  # If the file is not suitable to be an index or xref file, don't
+  # process it.  The file can't be if its first character is not a
+  # backslash or single quote.
+  first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
+  if test "x$first_character" = "x\\" \
+     || test "x$first_character" = "x'"; then
+    xref_files="$xref_files ./$this_file"
+  fi
+done
+echo "$xref_files"
+EOF
+chmod 500 $get_xref_files
+
+# File descriptor usage:
+# 0 standard input
+# 1 standard output (--verbose messages)
+# 2 standard error
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 tools output (turned off by --quiet)
+
+# Tools' output.  If quiet, discard, else redirect to the message flow.
+if test "$quiet" = t; then
+  exec 5>/dev/null
+else
+  exec 5>&1
+fi
+
+# Enable tracing
 test "$debug" = t && set -x
 
-# Texify files
+# 
+# TeXify files.
+
 for command_line_filename in ${1+"$@"}; do
   $verbose "Processing $command_line_filename ..."
 
-  # See if file exists.  If it doesn't we're in trouble since, even
+  # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
+  # prepend `./' in order to avoid that the tools take it as an option.
+  echo "$command_line_filename" | egrep '^(/|[A-z]:/)' >/dev/null \
+  || command_line_filename="./$command_line_filename"
+
+  # See if the file exists.  If it doesn't we're in trouble since, even
   # though the user may be able to reenter a valid filename at the tex
   # prompt (assuming they're attending the terminal), this script won't
-  # be able to find the right index files and so forth.
-  if test ! -r "${command_line_filename}"; then
-    echo "$0: Could not read ${command_line_filename}." >&2
+  # be able to find the right xref files and so forth.
+  if test ! -r "$command_line_filename"; then
+    echo "$0: Could not read $command_line_filename, skipping." >&2
     continue
   fi
 
-  # Roughly equivalent to `dirname ...`, but more portable
-  directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`"
-  filename_texi="`basename ${command_line_filename}`"
-  # Strip off the last extension part (probably .texinfo or .texi)
-  filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`"
+  # Get the name of the current directory.  We want the full path
+  # because in clean mode we are in tmp, in which case a relative
+  # path has no meaning.
+  filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
+  filename_dir=`cd "$filename_dir" >/dev/null && pwd`
 
-  # Use same basename since we want to generate aux files with the same
-  # basename as the manual.  Use extension .texi for the temp file so
-  # that TeX will ignore it.  Thus, we must use a subdirectory.
-  #
-  # Output the macro-expanded file to here.  The vastly abbreviated
-  # temporary directory name is so we don't have collisions on 8.3 or
-  # 14-character filesystems.
-  tmp_dir=${TMPDIR-/tmp}/txi2d.$$
-  filename_tmp=$tmp_dir/$filename_noext.texi
-  # Output the file with the user's extra commands to here.
-  tmp_dir2=${tmp_dir}.2
-  filename_tmp2=$tmp_dir2/$filename_noext.texi
-  mkdir $tmp_dir $tmp_dir2
-  # Always remove the temporary directories.
-  trap "rm -rf $tmp_dir $tmp_dir2" 1 2 15
+  # Strip directory part but leave extension.
+  filename_ext=`basename "$command_line_filename"`
+  # Strip extension.
+  filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
+  ext=`echo "$filename_ext" | sed 's/^.*\.//'`
 
-  # If directory and file are the same, then it's probably because there's
-  # no pathname component.  Set dirname to `.', the current directory.
-  if test "z${directory}" = "z${command_line_filename}"; then
-    directory=.
+  # _src.  Use same basename since we want to generate aux files with
+  # the same basename as the manual.  If --expand, then output the
+  # macro-expanded file to here, else copy the original file.
+  tmpdir_src=$tmpdir/src
+  filename_src=$tmpdir_src/$filename_noext.$ext
+
+  # _xtr.  The file with the user's extra commands.
+  tmpdir_xtr=$tmpdir/xtr
+  filename_xtr=$tmpdir_xtr/$filename_noext.$ext
+
+  # _bak.  Copies of the previous xref files (another round is run if
+  # they differ from the new one).
+  tmpdir_bak=$tmpdir/bak
+
+  # Make all those directories and give up if we can't succeed.
+  mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1
+
+  # Source file might include additional sources.  Put `.' and
+  # directory where source file(s) reside in TEXINPUTS before anything
+  # else.  `.' goes first to ensure that any old .aux, .cps,
+  # etc. files in ${directory} don't get used in preference to fresher
+  # files in `.'.  Include orig_pwd in case we are in clean mode, where
+  # we've cd'd to a temp directory.
+  common=".$path_sep$orig_pwd$path_sep$filename_dir$path_sep$txincludes$path_sep"
+   TEXINPUTS="$common$TEXINPUTS_orig"
+  INDEXSTYLE="$common$INDEXSTYLE_orig"
+
+  # If the user explicitly specified the language, use that.
+  # Otherwise, if the first line is \input texinfo, assume it's texinfo.
+  # Otherwise, guess from the file extension.
+  if test -n "$set_language"; then
+    language=$set_language
+  elif sed 1q "$command_line_filename" | fgrep 'input texinfo' >/dev/null; then
+    language=texinfo
+  else
+    language=
   fi
 
-  # Source file might @include additional texinfo sources.  Put `.' and
-  # directory where source file(s) reside in TEXINPUTS before anything
-  # else.  `.' goes first to ensure that any old .aux, .cps, etc. files in
-  # ${directory} don't get used in preference to fresher files in `.'.
-  TEXINPUTS=".:${directory}:${TEXINPUTS_orig}"
+  # Get the type of the file (latex or texinfo) from the given language
+  # we just guessed, or from the file extension if not set yet.
+  case ${language:-$filename_ext} in
+    [lL]a[tT]e[xX] | *.ltx | *.tex)
+      # Assume a LaTeX file.  LaTeX needs bibtex and uses latex for
+      # compilation.  No makeinfo.
+      bibtex=${BIBTEX:-bibtex}
+      makeinfo= # no point in running makeinfo on latex source.
+      texindex=${MAKEINDEX:-makeindex}
+      if test $oformat = dvi; then
+        tex=${LATEX:-latex}
+      else
+        tex=${PDFLATEX:-pdflatex}
+      fi
+      ;;
 
-  # Expand macro commands in the original source file using Makeinfo;
-  #   the macro syntax bfox implemented is impossible to implement in TeX.
+    *)
+      # Assume a Texinfo file.  Texinfo files need makeinfo, texindex and tex.
+      bibtex=
+      texindex=${TEXINDEX:-texindex}
+      if test $oformat = dvi; then
+        tex=${TEX:-tex}
+      else
+        tex=${PDFTEX:-pdftex}
+      fi
+      # Unless required by the user, makeinfo expansion is wanted only
+      # if texinfo.tex is too old.
+      if test "$expand" = t; then
+        makeinfo=${MAKEINFO:-makeinfo}
+      else
+        # Check if texinfo.tex performs macro expansion by looking for
+        # its version.  The version is a date of the form YEAR-MO-DA.
+        # We don't need to use [0-9] to match the digits since anyway
+        # the comparison with $txiprereq, a number, will fail with non
+        # digits.
+        txiversion_tex=txiversion.tex
+        echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex
+        # Run in the tmpdir to avoid leaving files.
+        eval `cd $tmpdir >/dev/null \
+                    && $tex $txiversion_tex 2>/dev/null \
+| sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'`
+        $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
+        if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
+          makeinfo=
+        else
+          makeinfo=${MAKEINFO:-makeinfo}
+        fi
+        # As long as we had to run TeX, offer the user this convenience
+        if test "$txiformat" = Texinfo; then
+          escape=@
+        fi
+      fi
+      ;;
+  esac
+
+  # Expand macro commands in the original source file using Makeinfo.
   # Always use `end' footnote style, since the `separate' style
   #   generates different output (arguably this is a bug in -E).
   # Discard main info output, the user asked to run TeX, not makeinfo.
-  # Redirect output to /dev/null to throw away `Making info file...' msg.
-  $verbose "Macro-expanding $command_line_filename to $filename_tmp ..."
-  $makeinfo --footnote-style=end -E $filename_tmp -o /dev/null \
-    $command_line_filename >/dev/null
-
-  # But if there were no macros, or makeinfo failed for some reason,
-  # just use the original file.  (It shouldn't make any difference, but
-  # let's be safe.)
-  if test $? -ne 0 || cmp -s $filename_tmp $command_line_filename; then
-    $verbose "Reverting to $command_line_filename ..."
-    cp -p $command_line_filename $filename_tmp
+  if test -n "$makeinfo"; then
+    $verbose "Macro-expanding $command_line_filename to $filename_src ..."
+    sed -f $comment_iftex_sed "$command_line_filename" \
+      | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
+        -o /dev/null --macro-expand=- \
+      | sed -f $uncomment_iftex_sed >"$filename_src"
+    filename_input=$filename_src
   fi
-  filename_input=$filename_tmp
-  dirname_input=$tmp_dir
+
+  # If makeinfo failed (or was not even run), use the original file as input.
+  if test $? -ne 0 \
+     || test ! -r "$filename_src"; then
+    $verbose "Reverting to $command_line_filename ..."
+    filename_input=$filename_dir/$filename_ext
+  fi
 
   # Used most commonly for @finalout, @smallbook, etc.
   if test -n "$textra"; then
-    $verbose "Inserting extra commands: $textra."
+    $verbose "Inserting extra commands: $textra"
     sed '/^@setfilename/a\
-'"$textra" $filename_input >$filename_tmp2
-   filename_input=$filename_tmp2
-   dirname_input=$tmp_dir2
+'"$textra" "$filename_input" >$filename_xtr
+    filename_input=$filename_xtr
   fi
 
   # If clean mode was specified, then move to the temporary directory.
   if test "$clean" = t; then
-    $verbose "cd $dirname_input"
-    cd $dirname_input || exit 1
-    filename_input=`basename $filename_input`
+    $verbose "cd $tmpdir_src"
+    cd "$tmpdir_src" || exit 1
   fi
 
-  while true; do # will break out of loop below
-    # "Unset" variables that might have values from previous iterations and
-    # which won't be completely reset later.
-    definite_index_files=
+  while :; do # will break out of loop below
+    orig_xref_files=`$get_xref_files "$filename_noext"`
 
-    # Find all files having root filename with a two-letter extension,
-    # determine whether they're really index files, and save them.  Foo.aux
-    # is actually the cross-references file, but we need to keep track of
-    # that too.
-    possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`"
-    for this_file in ${possible_index_files}; do
-      # If file is empty, forget it.
-      test -s "${this_file}" || continue
+    # Save copies of originals for later comparison.
+    if test -n "$orig_xref_files"; then
+      $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
+      cp $orig_xref_files $tmpdir_bak
+    fi
 
-      # Examine first character of file.  If it's not suitable to be an
-      # index or xref file, don't process it.
-      first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`"
-      if test "x${first_character}" = "x\\" \
-         || test "x${first_character}" = "x'"; then
-        definite_index_files="${definite_index_files} ${this_file}"
+    # Run bibtex on current file.
+    # - If its input (AUX) exists.
+    # - If AUX contains both `\bibdata' and `\bibstyle'.
+    # - If some citations are missing (LOG contains `Citation').
+    #   or the LOG complains of a missing .bbl
+    #
+    # We run bibtex first, because I can see reasons for the indexes
+    # to change after bibtex is run, but I see no reason for the
+    # converse.
+    #
+    # Don't try to be too smart.  Running bibtex only if the bbl file
+    # exists and is older than the LaTeX file is wrong, since the
+    # document might include files that have changed.  Because there
+    # can be several AUX (if there are \include's), but a single LOG,
+    # looking for missing citations in LOG is easier, though we take
+    # the risk to match false messages.
+    if test -n "$bibtex" \
+       && test -r "$filename_noext.aux" \
+       && test -r "$filename_noext.log" \
+       && (grep '^\\bibdata[{]'  "$filename_noext.aux" \
+           && grep '^\\bibstyle[{]' "$filename_noext.aux" \
+           && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
+               || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
+          >/dev/null 2>&1; \
+    then
+      $verbose "Running $bibtex $filename_noext ..."
+      if $bibtex "$filename_noext" >&5; then :; else
+        echo "$0: $bibtex exited with bad status, quitting." >&2
+        exit 1
       fi
-    done
-    orig_index_files="${definite_index_files}"
-    orig_index_files_sans_aux="`echo ${definite_index_files} \
-                                 | sed 's/'${filename_noext}'\.aux//;
-                                        s/^[ ]*//;s/[ ]*$//;'`"
+    fi
 
-    # Now save copies of original index files so we have some means of
-    # comparison later.
-    $verbose "Backing up current index files: $orig_index_files ..."  
-    for index_file_to_save in ${orig_index_files}; do
-      cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}"
-    done
-
-    # Run texindex on current index files.  If they already exist, and
-    # after running TeX a first time the index files don't change, then
-    # there's no reason to run TeX again.  But we won't know that if the
-    # index files are out of date or nonexistent.
-    if test -n "${orig_index_files_sans_aux}"; then
-      $verbose "Running $texindex $orig_index_files_sans_aux ..."
-      ${texindex} ${orig_index_files_sans_aux}
+    # What we'll run texindex on -- exclude non-index files.
+    # Since we know index files are last, it is correct to remove everything
+    # before .aux and .?o?.
+    index_files=`echo "$orig_xref_files" \
+                 | sed "s!.*\.aux!!g;
+                        s!./$filename_noext\..o.!!g;
+                        s/^[ ]*//;s/[ ]*$//"`
+    # Run texindex (or makeindex) on current index files.  If they
+    # already exist, and after running TeX a first time the index
+    # files don't change, then there's no reason to run TeX again.
+    # But we won't know that if the index files are out of date or
+    # nonexistent.
+    if test -n "$texindex" && test -n "$index_files"; then
+      $verbose "Running $texindex $index_files ..."
+      if $texindex $index_files 2>&5 1>&2; then :; else
+         echo "$0: $texindex exited with bad status, quitting." >&2
+         exit 1
+      fi
     fi
 
     # Finally, run TeX.
-    if test "$batch" = t; then
-      tex_mode='\nonstopmode'
-    else
-      tex_mode=
+    # Prevent $ESCAPE from being interpreted by the shell if it happens
+    # to be `/'.
+    $batch tex_args="\\${escape}nonstopmode\ \\${escape}input"
+    $verbose "Running $cmd ..."
+    cmd="$tex $tex_args $filename_input"
+    if $cmd >&5; then :; else
+      echo "$0: $tex exited with bad status, quitting." >&2
+      echo "$0: see $filename_noext.log for errors." >&2
+      test "$clean" = t \
+        && cp "$filename_noext.log" "$orig_pwd"
+      exit 1
     fi
-    $verbose "Running $tex $filename_input ..."
-    cmd="$tex $tex_mode \\input $filename_input"
-    $cmd
 
-    # Check if index files changed.
-    # 
-    definite_index_files=
-    # Get list of new index files.
-    possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`"
-    for this_file in ${possible_index_files}; do
-       # If file is empty, forget it.
-       test -s "${this_file}" || continue
 
-       # Examine first character of file.  If it's not a backslash or
-       # single quote, then it's definitely not an index or xref file.
-       # (Will have to check for @ when we switch to Texinfo syntax in
-       # all these files...)
-       first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`"
-       if test "x${first_character}" = "x\\" \
-          || test "x${first_character}" = "x'"; then
-         definite_index_files="${definite_index_files} ${this_file}"
-       fi
-    done
-    new_index_files="${definite_index_files}"
-    new_index_files_sans_aux="`echo ${definite_index_files} \
-                               | sed 's/'${filename_noext}'\.aux//;
-                                      s/^[ ]*//;s/[ ]*$//;'`"
+    # Decide if looping again is needed.
+    finished=t
 
-    # If old and new list don't at least have the same file list, then one
-    # file or another has definitely changed.
-    $verbose "Original index files =$orig_index_files"
-    $verbose "New index files =$new_index_files"
-    if test "z${orig_index_files}" != "z${new_index_files}"; then
-      index_files_changed_p=t
-    else
-      # File list is the same.  We must compare each file until we find a
-      # difference.
-      index_files_changed_p=
-      for this_file in ${new_index_files}; do
-        $verbose "Comparing index file $this_file ..."
-        # cmp -s will return nonzero exit status if files differ.
-        cmp -s "${this_file}" "${this_file}${backup_extension}"
-        if test $? -ne 0; then
-          # We only need to keep comparing until we find *one* that
-          # differs, because we'll have to run texindex & tex no
-          # matter what.
-          index_files_changed_p=t
-          $verbose "Index file $this_file differed:"
-          test $verbose = echo \
-          && diff -c "${this_file}${backup_extension}" "${this_file}"
+    # LaTeX (and the package changebar) report in the LOG file if it
+    # should be rerun.  This is needed for files included from
+    # subdirs, since texi2dvi does not try to compare xref files in
+    # subdirs.  Performing xref files test is still good since LaTeX
+    # does not report changes in xref files.
+    if fgrep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then
+      finished=
+    fi
+
+    # Check if xref files changed.
+    new_xref_files=`$get_xref_files "$filename_noext"`
+    $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
+    $verbose "New xref files      = `echo $new_xref_files | sed 's|\./||g'`"
+
+    # If old and new lists don't at least have the same file list,
+    # then one file or another has definitely changed.
+    test "x$orig_xref_files" != "x$new_xref_files" && finished=
+
+    # File list is the same.  We must compare each file until we find
+    # a difference.
+    if test -n "$finished"; then
+      for this_file in $new_xref_files; do
+        $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
+        # cmp -s returns nonzero exit status if files differ.
+        if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
+          # We only need to keep comparing until we find one that
+          # differs, because we'll have to run texindex & tex again no
+          # matter how many more there might be.
+          finished=
+          $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
+          test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
           break
         fi
       done
     fi
 
-    # If index files have changed since TeX has been run, or if the aux
-    # file wasn't present originally, run texindex and TeX again.
-    if test "${index_files_changed_p}"; then :; else
-      # Nothing changed.  We're done with TeX.
-      break
-    fi
+    # If finished, exit the loop, else rerun the loop.
+    test -n "$finished" && break
   done
 
   # If we were in clean mode, compilation was in a tmp directory.
-  # Copy the DVI file into the directory where the compilation
+  # Copy the DVI (or PDF) file into the directory where the compilation
   # has been done.  (The temp dir is about to get removed anyway.)
   # We also return to the original directory so that
   # - the next file is processed in correct conditions
   # - the temporary file can be removed
   if test -n "$clean"; then
-    $verbose "Copying DVI file from `pwd` to $orig_pwd"
-    cp -p $filename_noext.dvi $orig_pwd
+    $verbose "Copying $oformat file from `pwd` to $orig_pwd"
+    cp -p "./$filename_noext.$oformat" "$orig_pwd"
+    cd / # in case $orig_pwd is on a different drive (for DOS)
     cd $orig_pwd || exit 1
   fi
 
-  # Generate list of files to delete, then call rm once with the entire
-  # list.  This is significantly faster than multiple executions of rm.
-  file_list=
-  for file in ${orig_index_files}; do
-    file_list="${file_list} ${file}${backup_extension}"
-  done
-  if test -n "${file_list}"; then
-    $verbose "Removing $file_list $tmp_dir $tmp_dir2 ..."
-    rm -f ${file_list}
-    rm -rf $tmp_dir $tmp_dir2
+  # Remove temporary files.
+  if test "x$debug" = "x"; then
+    $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
+    cd /
+    rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
   fi
 done
 
 $verbose "$0 done."
-true # exit successfully.
+exit 0 # exit successfully, not however we ended the loop.
diff --git a/readline/doc/texi2html b/readline/doc/texi2html
index 4beec01..7bb8493 100755
--- a/readline/doc/texi2html
+++ b/readline/doc/texi2html
@@ -1,19 +1,1733 @@
-#!/usr/local/bin/perl
+#! /usr/bin/perl
 'di ';
 'ig 00 ';
 #+##############################################################################
-#                                                                              #
-# File: texi2html                                                              #
-#                                                                              #
-# Description: Program to transform most Texinfo documents to HTML             #
-#                                                                              #
+#
+# texi2html: Program to transform Texinfo documents to HTML
+#
+#    Copyright (C) 1999, 2000  Free Software Foundation, Inc.
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 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, write to the Free Software
+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# 
 #-##############################################################################
 
-# @(#)texi2html	1.52 01/05/98	Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch
+# This requires perl version 5 or higher
+require 5.0;
 
+#++##############################################################################
+#
+# NOTE FOR DEBUGGING THIS SCRIPT:
+# You can run 'perl texi2html.pl' directly, provided you have
+# the environment variable T2H_HOME set to the directory containing
+# the texi2html.init file
+#
+#--##############################################################################
+
+# CVS version:
+# $Id$
+
+# Homepage:
+$T2H_HOMEPAGE = <<EOT;
+http://www.mathematik.uni-kl.de/~obachman/Texi2html
+EOT
+
+# Authors:  
+$T2H_AUTHORS = <<EOT;
+Written by: Lionel Cons <Lionel.Cons\@cern.ch> (original author)
+            Karl Berry  <karl\@freefriends.org>
+            Olaf Bachmann <obachman\@mathematik.uni-kl.de>
+            and many others.
+Maintained by: Olaf Bachmann <obachman\@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html\@mathematik.uni-kl.de>
+EOT
+
+# Version: set in configure.in
+$THISVERSION = '1.64';
+$THISPROG = "texi2html $THISVERSION";	# program name and version
+  
 # The man page for this program is included at the end of this file and can be
 # viewed using the command 'nroff -man texi2html'.
-# Please read the copyright at the end of the man page.
+
+# Identity:
+
+$T2H_TODAY = &pretty_date;		# like "20 September 1993"
+# the eval prevents this from breaking on system which do not have
+# a proper getpwuid implemented
+eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i
+
+#+++############################################################################
+#                                                                              #
+# Initialization                                                               #
+# Pasted content of File $(srcdir)/texi2html.init: Default initializations     # 
+#                                                                              #
+#---############################################################################
+
+# leave this within comments, and keep the require statement
+# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
+# exists.
+
+# 
+# -*-perl-*-
+######################################################################
+# File: texi2html.init
+#
+# Sets default values for command-line arguments and for various customizable
+# procedures
+#
+# A copy of this file is pasted into the beginning of texi2html by
+# 'make texi2html'
+#
+# Copy this file and make changes to it, if you like.
+# Afterwards, either, load it with command-line option -init_file <your_init_file>
+#
+# $Id$
+
+######################################################################
+# stuff which can also be set by command-line options
+#
+#
+# Note: values set here, overwrite values set by the command-line
+# options before -init_file and might still be overwritten by
+# command-line arguments following the -init_file option
+#
+
+# T2H_OPTIONS is a hash whose keys are the (long) names of valid
+# command-line options and whose values are a hash with the following keys:
+# type    ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info)
+# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info)
+# verbose ==> short description of option (displayed by -h)
+# noHelp  ==> if 1 -> for "not so important options": only print description on -h 1
+#                2 -> for obsolete options: only print description on -h 2
+
+$T2H_DEBUG = 0;
+$T2H_OPTIONS -> {debug} =
+{
+ type => '=i',
+ linkage => \$main::T2H_DEBUG,
+ verbose => 'output HTML with debuging information',
+};
+
+$T2H_DOCTYPE = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'; 
+$T2H_OPTIONS -> {doctype} = 
+{
+ type => '=s',
+ linkage => \$main::T2H_DOCTYPE,
+ verbose => 'document type which is output in header of HTML files',
+ noHelp => 1
+};
+
+$T2H_CHECK = 0;
+$T2H_OPTIONS -> {check} =
+{
+ type => '!',
+ linkage => \$main::T2H_CHECK,
+ verbose => 'if set, only check files and output all things that may be Texinfo commands',
+ noHelp => 1
+};
+
+# -expand
+# if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections
+# else, neither expand @iftex, @tex, nor @ifinfo sections
+$T2H_EXPAND = "info";
+$T2H_OPTIONS -> {expand} = 
+{
+ type => '=s',
+ linkage => \$T2H_EXPAND,
+ verbose => 'Expand info|tex|none section of texinfo source',
+};
+
+# - glossary
+#if set, uses section named `Footnotes' for glossary
+$T2H_USE_GLOSSARY = 0;
+T2H_OPTIONS -> {glossary} =
+{
+ type => '!',
+ linkage => \$T2H_USE_GLOSSARY,
+ verbose => "if set, uses section named `Footnotes' for glossary",
+ noHelp  => 1,
+};
+
+
+# -invisible
+# $T2H_INVISIBLE_MARK is the text used to create invisible destination
+# anchors for index links (you can for instance use the invisible.xbm
+# file shipped with this program). This is a workaround for a known
+# bug of many WWW browsers, including netscape.
+# For me, it works fine without it -- on the contrary: if there, it
+# inserts space between headers and start of text (obachman 3/99)
+$T2H_INVISIBLE_MARK = '';
+# $T2H_INVISIBLE_MARK = '&#160;';
+$T2H_OPTIONS -> {invisible} =
+{
+ type => '=s',
+ linkage => \$T2H_INVISIBLE_MARK,
+ verbose => 'use text in invisble anchot',
+ noHelp  => 1,
+};
+
+# -iso
+# if set, ISO8879 characters are used for special symbols (like copyright, etc)
+$T2H_USE_ISO = 0;
+$T2H_OPTIONS -> {iso} =
+{
+ type => 'iso',
+ linkage => \$T2H_USE_ISO,
+ verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)',
+ noHelp => 1,
+};
+
+# -I
+# list directories where @include files are searched for (besides the
+# directory of the doc file) additional '-I' args add to this list
+@T2H_INCLUDE_DIRS = (".");
+$T2H_OPTIONS -> {I} =
+{
+ type => '=s',
+ linkage => \@T2H_INCLUDE_DIRS,
+ verbose => 'append $s to the @include search path',
+};
+
+# -top_file
+# uses file of this name for top-level file
+# extension is manipulated appropriately, if necessary.
+# If empty, <basename of document>.html is used
+# Typically, you would set this to "index.html".
+$T2H_TOP_FILE = '';
+$T2H_OPTIONS -> {top_file} =
+{
+ type => '=s',
+ linkage => \$T2H_TOP_FILE,
+ verbose => 'use $s as top file, instead of <docname>.html',
+};
+
+
+# -toc_file
+# uses file of this name for table of contents file
+# extension is manipulated appropriately, if necessary.
+# If empty, <basename of document>_toc.html is used
+$T2H_TOC_FILE = '';
+$T2H_OPTIONS -> {toc_file} =
+{
+ type => '=s',
+ linkage => \$T2H_TOC_FILE,
+ verbose => 'use $s as ToC file, instead of <docname>_toc.html',
+};
+
+# -frames
+# if set, output two additional files which use HTML 4.0 "frames".
+$T2H_FRAMES = 0;
+$T2H_OPTIONS -> {frames} =
+{
+ type => '!',
+ linkage => \$T2H_FRAMES,
+ verbose => 'output files which use HTML 4.0 frames (experimental)',
+ noHelp => 1,
+};
+
+
+# -menu | -nomenu
+# if set, show the Texinfo menus
+$T2H_SHOW_MENU = 1;
+$T2H_OPTIONS -> {menu} =
+{
+ type => '!',
+ linkage => \$T2H_SHOW_MENU,
+ verbose => 'ouput Texinfo menus',
+};
+
+# -number | -nonumber
+# if set, number sections and show section names and numbers in references 
+# and menus
+$T2H_NUMBER_SECTIONS = 1;
+$T2H_OPTIONS -> {number} =
+{
+ type => '!',
+ linkage => \$T2H_NUMBER_SECTIONS,
+ verbose => 'use numbered sections'
+};
+
+# if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu
+# entries, instead of section names
+$T2H_NODE_NAME_IN_MENU = 0;
+
+# if set and menu entry equals menu descr, then do not print menu descr.
+# Likewise, if node name equals entry name, do not print entry name.
+$T2H_AVOID_MENU_REDUNDANCY = 1;
+
+# -split section|chapter|none 
+# if set to 'section' (resp. 'chapter') create one html file per (sub)section
+# (resp. chapter) and separate pages for Top, ToC, Overview, Index,
+# Glossary, About.
+# otherwise, create monolithic html file which contains whole document
+#$T2H_SPLIT = 'section';
+$T2H_SPLIT = '';
+$T2H_OPTIONS -> {split} =
+{
+ type => '=s',
+ linkage => \$T2H_SPLIT,
+ verbose => 'split document on section|chapter else no splitting',
+};
+
+# -section_navigation|-no-section_navigation
+# if set, then navigation panels are printed at the beginning of each section
+# and, possibly at the end (depending on whether or not there were more than 
+# $T2H_WORDS_IN_PAGE  words on page
+# This is most useful if you do not want to have section navigation 
+# on -split chapter
+$T2H_SECTION_NAVIGATION = 1;
+$T2H_OPTIONS -> {sec_nav} =
+{
+ type => '!',
+ linkage => \$T2H_SECTION_NAVIGATION,
+ verbose => 'output navigation panels for each section',
+};
+
+# -subdir
+# if set put result files in this directory
+# if not set result files are put into current directory
+#$T2H_SUBDIR = 'html';
+$T2H_SUBDIR = '';
+$T2H_OPTIONS -> {subdir} =
+{
+ type => '=s',
+ linkage => \$T2H_SUBDIR,
+ verbose => 'put HTML files in directory $s, instead of $cwd',
+};
+
+# -short_extn
+# If this is set all HTML file will have extension ".htm" instead of
+# ".html". This is helpful when shipping the document to PC systems.
+$T2H_SHORTEXTN = 0;
+$T2H_OPTIONS -> {short_ext} =
+{
+ type => '!',
+ linkage => \$T2H_SHORTEXTN,
+ verbose => 'use "htm" extension for output HTML files',
+};
+
+
+# -prefix
+# Set the output file prefix, prepended to all .html, .gif and .pl files.
+# By default, this is the basename of the document
+$T2H_PREFIX = '';
+$T2H_OPTIONS -> {prefix} =
+{
+ type => '=s',
+ linkage => \$T2H_PREFIX,
+ verbose => 'use as prefix for output files, instead of <docname>',
+};
+
+# -o filename
+# If set, generate monolithic document output html into $filename
+$T2H_OUT = '';
+$T2H_OPTIONS -> {out_file} =
+{
+ type => '=s',
+ linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
+ verbose => 'if set, all HTML output goes into file $s',
+};
+
+# -short_ref
+#if set cross-references are given without section numbers
+$T2H_SHORT_REF = '';
+$T2H_OPTIONS -> {short_ref} =
+{
+ type => '!',
+ linkage => \$T2H_SHORT_REF,
+ verbose => 'if set, references are without section numbers',
+};
+
+# -idx_sum
+# if value is set, then for each @prinindex $what
+# $docu_name_$what.idx is created which contains lines of the form
+# $key\t$ref sorted alphabetically (case matters)
+$T2H_IDX_SUMMARY = 0;
+$T2H_OPTIONS -> {idx_sum} =
+{
+ type => '!',
+ linkage => \$T2H_IDX_SUMMARY,
+ verbose => 'if set, also output index summary',
+ noHelp  => 1,
+};
+
+# -verbose
+# if set, chatter about what we are doing
+$T2H_VERBOSE = '';
+$T2H_OPTIONS -> {Verbose} =
+{
+ type => '!',
+ linkage => \$T2H_VERBOSE,
+ verbose => 'print progress info to stdout',
+};
+
+# -lang
+# For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title.
+# To add a new language, supply list of titles (see $T2H_WORDS below).
+# and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02 
+# for  definitions)
+# Default's to 'en' if not set or no @documentlanguage is specified
+$T2H_LANG = '';
+$T2H_OPTIONS -> {lang} =
+{
+ type => '=s',
+ linkage => sub {SetDocumentLanguage($_[1])},
+ verbose => 'use $s as document language (ISO 639 encoding)',
+};
+
+# -l2h
+# if set, uses latex2html for generation of math content 
+$T2H_L2H = '';
+$T2H_OPTIONS -> {l2h} =
+{
+ type => '!',
+ linkage => \$T2H_L2H,
+ verbose => 'if set, uses latex2html for @math and @tex',
+};
+
+######################
+# The following options are only relevant if $T2H_L2H is set
+#
+# -l2h_l2h
+# name/location of latex2html progam
+$T2H_L2H_L2H = "latex2html";
+$T2H_OPTIONS -> {l2h_l2h} =
+{
+ type => '=s',
+ linkage => \$T2H_L2H_L2H,
+ verbose => 'program to use for latex2html translation',
+ noHelp => 1,
+};
+
+# -l2h_skip
+# if set, skips actual call to latex2html tries to reuse previously generated 
+# content, instead
+$T2H_L2H_SKIP = '';
+$T2H_OPTIONS -> {l2h_skip} =
+{
+ type => '!',
+ linkage => \$T2H_L2H_SKIP,
+ verbose => 'if set, tries to reuse previously latex2html output',
+ noHelp => 1,
+};
+
+# -l2h_tmp
+# if set, l2h uses this directory for temporarary files. The path
+# leading to this directory may not contain a dot (i.e., a "."),
+# otherwise, l2h will fail
+$T2H_L2H_TMP = '';
+$T2H_OPTIONS -> {l2h_tmp} =
+{
+ type => '=s',
+ linkage => \$T2H_L2H_TMP,
+ verbose => 'if set, uses $s as temporary latex2html directory',
+ noHelp => 1,
+};
+
+# if set, cleans intermediate files (they all have the prefix $doc_l2h_) 
+# of l2h 
+$T2H_L2H_CLEAN = 1;
+$T2H_OPTIONS -> {l2h_clean} =
+{
+ type => '!',
+ linkage => \$T2H_L2H_CLEAN,
+ verbose => 'if set, do not keep intermediate latex2html files for later reuse',
+ noHelp => 1,
+};
+
+$T2H_OPTIONS -> {D} =
+{
+ type => '=s',
+ linkage => sub {$main::value{@_[1]} = 1;},
+ verbose => 'equivalent to Texinfo "@set $s 1"',
+ noHelp => 1,
+};
+
+$T2H_OPTIONS -> {init_file} =
+{
+ type => '=s',
+ linkage => \&LoadInitFile,
+ verbose => 'load init file $s'
+};
+
+
+##############################################################################
+#
+# The following can only be set in the init file
+#
+##############################################################################
+
+# if set, center @image by default
+# otherwise, do not center by default
+$T2H_CENTER_IMAGE = 1;
+
+# used as identation for block enclosing command @example, etc
+# If not empty, must be enclosed in <td></td>
+$T2H_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
+# same as above, only for @small
+$T2H_SMALL_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
+# font size for @small
+$T2H_SMALL_FONT_SIZE = '-1';
+
+# if non-empty, and no @..heading appeared in Top node, then
+# use this as header for top node/section, otherwise use value of 
+# @settitle or @shorttitle (in that order)
+$T2H_TOP_HEADING = '';
+
+# if set, use this chapter for 'Index' button, else
+# use first chapter whose name matches 'index' (case insensitive)
+$T2H_INDEX_CHAPTER = '';
+
+# if set and $T2H_SPLIT is set, then split index pages at the next letter
+# after they have more than that many entries
+$T2H_SPLIT_INDEX = 100;
+
+# if set (e.g., to index.html) replace hrefs to this file 
+# (i.e., to index.html) by ./
+$T2H_HREF_DIR_INSTEAD_FILE = '';
+
+########################################################################
+# Language dependencies: 
+# To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash
+# To redefine one word, simply do:
+# $T2H_WORDS->{<language>}->{<word>} = 'whatever' in your personal init file.
+#
+$T2H_WORDS_EN =
+{
+ # titles  of pages
+ 'ToC_Title' => 'Table of Contents',
+ 'Overview_Title' => 'Short Table of Contents',
+ 'Index_Title' => 'Index',
+ 'About_Title' => 'About this document',
+ 'Footnotes_Title' => 'Footnotes',
+ 'See' => 'See',
+ 'see' => 'see',
+ 'section' => 'section',
+# If necessary, we could extend this as follows: 
+#  # text for buttons
+#  'Top_Button' => 'Top',
+#  'ToC_Button' => 'Contents',
+#  'Overview_Button' => 'Overview',
+#  'Index_button' => 'Index',
+#  'Back_Button' => 'Back',
+#  'FastBack_Button' => 'FastBack',
+#  'Prev_Button' => 'Prev',
+#  'Up_Button' => 'Up',
+#  'Next_Button' => 'Next',
+#  'Forward_Button' =>'Forward',
+#  'FastWorward_Button' => 'FastForward',
+#  'First_Button' => 'First',
+#  'Last_Button' => 'Last',
+#  'About_Button' => 'About'
+};
+
+$T2H_WORD_DE =
+{
+ 'ToC_Title' => 'Inhaltsverzeichniss',
+ 'Overview_Title' => 'Kurzes Inhaltsverzeichniss',
+ 'Index_Title' => 'Index',
+ 'About_Title' => '&Uuml;ber dieses Dokument',
+ 'Footnotes_Title' => 'Fu&szlig;noten',
+ 'See' => 'Siehe',
+ 'see' => 'siehe',
+ 'section' => 'Abschnitt',
+};
+
+$T2H_WORD_NL =
+{
+ 'ToC_Title' => 'Inhoudsopgave',
+ 'Overview_Title' => 'Korte inhoudsopgave',
+ 'Index_Title' => 'Index', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!', #No translation available!
+ 'See' => 'Zie',
+ 'see' => 'zie',
+ 'section' => 'sectie',
+};
+
+$T2H_WORD_ES =
+{
+ 'ToC_Title' => '&iacute;ndice General',
+ 'Overview_Title' => 'Resumen del Contenido',
+ 'Index_Title' => 'Index', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'Fu&szlig;noten',
+ 'See' => 'V&eacute;ase',
+ 'see' => 'v&eacute;ase',
+ 'section' => 'secci&oacute;n',
+};
+
+$T2H_WORD_NO =
+{
+ 'ToC_Title' => 'Innholdsfortegnelse',
+ 'Overview_Title' => 'Kort innholdsfortegnelse',
+ 'Index_Title' => 'Indeks', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!',
+ 'See' => 'Se',
+ 'see' => 'se',
+ 'section' => 'avsnitt',
+};
+
+$T2H_WORD_PT =
+{
+ 'ToC_Title' => 'Sum&aacute;rio',
+ 'Overview_Title' => 'Breve Sum&aacute;rio',
+ 'Index_Title' => '&Iacute;ndice', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!',
+ 'See' => 'Veja',
+ 'see' => 'veja',
+ 'section' => 'Se&ccedil;&atilde;o',
+};
+
+$T2H_WORDS =
+{
+ 'en' => $T2H_WORDS_EN,
+ 'de' => $T2H_WORDS_DE,
+ 'nl' => $T2H_WORDS_NL,
+ 'es' => $T2H_WORDS_ES,
+ 'no' => $T2H_WORDS_NO,
+ 'pt' => $T2H_WORDS_PT
+};
+
+@MONTH_NAMES_EN =
+(
+ 'January', 'February', 'March', 'April', 'May',
+ 'June', 'July', 'August', 'September', 'October',
+ 'November', 'December'
+);
+
+@MONTH_NAMES_DE =
+(
+ 'Januar', 'Februar', 'M&auml;rz', 'April', 'Mai',
+ 'Juni', 'Juli', 'August', 'September', 'Oktober',
+ 'November', 'Dezember'
+);
+
+@MONTH_NAMES_NL =
+(
+ 'Januari', 'Februari', 'Maart', 'April', 'Mei',
+ 'Juni', 'Juli', 'Augustus', 'September', 'Oktober',
+ 'November', 'December'
+);
+
+@MONTH_NAMES_ES =
+(
+ 'enero', 'febrero', 'marzo', 'abril', 'mayo',
+ 'junio', 'julio', 'agosto', 'septiembre', 'octubre',
+ 'noviembre', 'diciembre'
+);
+
+@MONTH_NAMES_NO =
+(
+
+ 'januar', 'februar', 'mars', 'april', 'mai',
+ 'juni', 'juli', 'august', 'september', 'oktober',
+ 'november', 'desember'
+);
+
+@MONTH_NAMES_PT =
+(
+ 'Janeiro', 'Fevereiro', 'Mar&ccedil;o', 'Abril', 'Maio',
+ 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro',
+ 'Novembro', 'Dezembro'
+);
+
+
+$MONTH_NAMES =
+{
+    'en' => \@MONTH_NAMES_EN,
+    'de' => \@MONTH_NAMES_DE,
+    'es' => \@MONTH_NAMES_ES,
+    'nl' => \@MONTH_NAMES_NL,
+    'no' => \@MONTH_NAMES_NO,
+    'pt' => \@MONTH_NAMES_PT
+};
+########################################################################
+# Control of Page layout:
+# You can make changes of the Page layout at two levels:
+# 1.) For small changes, it is often enough to change the value of
+#     some global string/hash/array variables
+# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines,
+#     give them another name, and assign them to the respective
+#     $T2H_<fnc> variable.
+
+# As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold 
+# href, html-name, node-name of
+# This     -- current section (resp. html page)
+# Top      -- top page ($T2H_TOP_FILE)
+# Contents -- Table of contents
+# Overview -- Short table of contents
+# Index    -- Index page
+# About    -- page which explain "navigation buttons"
+# First    -- first node 
+# Last     -- last node
+#
+# Whether or not the following hash values are set, depends on the context 
+# (all values are w.r.t. 'This' section)
+# Next        -- next node of texinfo
+# Prev        -- previous node of texinfo
+# Up          -- up node of texinfo
+# Forward     -- next node in reading order
+# Back        -- previous node in reading order
+# FastForward -- if leave node, up and next, else next node
+# FastBackward-- if leave node, up and prev, else prev node
+#
+# Furthermore, the following global variabels are set:
+# $T2H_THISDOC{title}     -- title as set by @setttile
+# $T2H_THISDOC{fulltitle} -- full title as set by @title...
+# $T2H_THISDOC{subtitle}  -- subtitle as set by @subtitle
+# $T2H_THISDOC{author}    -- author as set by @author
+# 
+# and pointer to arrays of lines which need to be printed by t2h_print_lines 
+# $T2H_OVERVIEW      -- lines of short table of contents
+# $T2H_TOC           -- lines of table of contents
+# $T2H_TOP           -- lines of Top texinfo node 
+# $T2H_THIS_SECTION  -- lines of 'This' section
+
+#
+# There are the following subs which control the layout:
+#
+$T2H_print_section            = \&T2H_DEFAULT_print_section;
+$T2H_print_Top_header         = \&T2H_DEFAULT_print_Top_header;       
+$T2H_print_Top_footer	      = \&T2H_DEFAULT_print_Top_footer;       
+$T2H_print_Top		      = \&T2H_DEFAULT_print_Top;              
+$T2H_print_Toc		      = \&T2H_DEFAULT_print_Toc;              
+$T2H_print_Overview	      = \&T2H_DEFAULT_print_Overview;         
+$T2H_print_Footnotes	      = \&T2H_DEFAULT_print_Footnotes;        
+$T2H_print_About	      = \&T2H_DEFAULT_print_About;            
+$T2H_print_misc_header	      = \&T2H_DEFAULT_print_misc_header;      
+$T2H_print_misc_footer	      = \&T2H_DEFAULT_print_misc_footer;      
+$T2H_print_misc		      = \&T2H_DEFAULT_print_misc;
+$T2H_print_chapter_header     = \&T2H_DEFAULT_print_chapter_header;      
+$T2H_print_chapter_footer     = \&T2H_DEFAULT_print_chapter_footer;      
+$T2H_print_page_head	      = \&T2H_DEFAULT_print_page_head;        
+$T2H_print_page_foot	      = \&T2H_DEFAULT_print_page_foot;        
+$T2H_print_head_navigation    = \&T2H_DEFAULT_print_head_navigation;  
+$T2H_print_foot_navigation    = \&T2H_DEFAULT_print_foot_navigation;  
+$T2H_button_icon_img	      = \&T2H_DEFAULT_button_icon_img;        
+$T2H_print_navigation	      = \&T2H_DEFAULT_print_navigation;       
+$T2H_about_body		      = \&T2H_DEFAULT_about_body;            
+$T2H_print_frame              = \&T2H_DEFAULT_print_frame;
+$T2H_print_toc_frame          = \&T2H_DEFAULT_print_toc_frame;
+
+########################################################################
+# Layout for html for every sections
+#
+sub T2H_DEFAULT_print_section
+{
+  my $fh = shift;
+  local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS;
+  &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION;
+  my $nw = t2h_print_lines($fh);
+  if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION)
+  {
+    &$T2H_print_foot_navigation($fh, $nw);
+  }
+  else
+  {
+    print $fh '<HR SIZE="6">' . "\n";
+  }
+}
+
+###################################################################
+# Layout of top-page I recommend that you use @ifnothtml, @ifhtml,
+# @html within the Top texinfo node to specify content of top-level
+# page. 
+#
+# If you enclose everything in @ifnothtml, then title, subtitle,
+# author and overview is printed
+# T2H_HREF of Next, Prev, Up, Forward, Back are not defined
+# if $T2H_SPLIT then Top page is in its own html file
+sub T2H_DEFAULT_print_Top_header
+{
+  &$T2H_print_page_head(@_) if $T2H_SPLIT;
+  t2h_print_label(@_); # this needs to be called, otherwise no label set
+  &$T2H_print_head_navigation(@_);
+}
+sub T2H_DEFAULT_print_Top_footer
+{
+  &$T2H_print_foot_navigation(@_);
+  &$T2H_print_page_foot(@_) if $T2H_SPLIT; 
+}
+sub T2H_DEFAULT_print_Top
+{
+  my $fh = shift;
+
+  # for redefining navigation buttons use:
+  # local $T2H_BUTTONS = [...];
+  # as it is, 'Top', 'Contents', 'Index', 'About' are printed
+  local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
+  &$T2H_print_Top_header($fh);
+  if ($T2H_THIS_SECTION)
+  {
+    # if top-level node has content, then print it with extra header
+    print $fh "<H1>$T2H_NAME{Top}</H1>"
+      unless ($T2H_HAS_TOP_HEADING);
+    t2h_print_lines($fh, $T2H_THIS_SECTION)
+  }
+  else
+  {
+    # top-level node is fully enclosed in @ifnothtml
+    # print fulltitle, subtitle, author, Overview
+    print $fh 
+      "<CENTER>\n<H1>" .
+      join("</H1>\n<H1>", split(/\n/,  $T2H_THISDOC{fulltitle})) .
+      "</H1>\n";
+    print $fh "<H2>$T2H_THISDOC{subtitle}</H2>\n" if $T2H_THISDOC{subtitle};
+    print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author};
+    print $fh <<EOT;
+</CENTER>
+<HR>
+<P></P>  
+<H2> Overview: </H2>
+<BLOCKQUOTE>  
+EOT
+    t2h_print_lines($fh, $T2H_OVERVIEW);
+    print $fh "</BLOCKQUOTE>\n";
+  }
+  &$T2H_print_Top_footer($fh);
+}
+
+###################################################################
+# Layout of Toc, Overview, and Footnotes pages
+# By default, we use "normal" layout 
+# T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined
+# use: local $T2H_BUTTONS = [...] to redefine navigation buttons
+sub T2H_DEFAULT_print_Toc
+{
+  return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_Overview
+{
+  return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_Footnotes
+{
+  return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_About
+{
+  return &$T2H_print_misc(@_);
+}
+
+sub T2H_DEFAULT_print_misc_header
+{
+  &$T2H_print_page_head(@_) if $T2H_SPLIT;
+  # this needs to be called, otherwise, no labels are set
+  t2h_print_label(@_); 
+  &$T2H_print_head_navigation(@_);
+}
+sub T2H_DEFAULT_print_misc_footer
+{
+  &$T2H_print_foot_navigation(@_);
+  &$T2H_print_page_foot(@_) if $T2H_SPLIT; 
+}
+sub T2H_DEFAULT_print_misc
+{
+  my $fh = shift;
+  local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
+  &$T2H_print_misc_header($fh);
+  print $fh "<H1>$T2H_NAME{This}</H1>\n";
+  t2h_print_lines($fh);
+  &$T2H_print_misc_footer($fh);
+}
+
+###################################################################
+# chapter_header and chapter_footer are only called if
+# T2H_SPLIT eq 'chapter'
+# chapter_header: after print_page_header, before print_section
+# chapter_footer: after print_section of last section, before print_page_footer
+# 
+# If you want to get rid of navigation stuff after each section,
+# redefine print_section such that it does not call print_navigation,
+# and put print_navigation into print_chapter_header
+@T2H_CHAPTER_BUTTONS =
+  (
+   'FastBack', 'FastForward', ' ', 
+   ' ', ' ', ' ', ' ',
+   'Top', 'Contents', 'Index', 'About', 
+  );
+
+sub T2H_DEFAULT_print_chapter_header
+{
+  # nothing to do there, by default
+  if (! $T2H_SECTION_NAVIGATION)
+  {
+    my $fh = shift;
+    local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
+    &$T2H_print_navigation($fh);
+    print $fh "\n<HR SIZE=2>\n";
+  }
+}
+
+sub T2H_DEFAULT_print_chapter_footer
+{
+  local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
+  &$T2H_print_navigation(@_);
+}
+###################################################################
+$T2H_TODAY = &pretty_date;		# like "20 September 1993"
+
+sub pretty_date {
+    local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
+
+    ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
+    $year += ($year < 70) ? 2000 : 1900;
+    # obachman: Let's do it as the Americans do
+    return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year);
+}
+
+
+###################################################################
+# Layout of standard header and footer
+#
+
+# Set the default body text, inserted between <BODY ... > 
+###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
+$T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
+# text inserted after <BODY ...>
+$T2H_AFTER_BODY_OPEN = '';
+#text inserted before </BODY>
+$T2H_PRE_BODY_CLOSE = '';
+# this is used in footer
+$T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER;
+$T2H_ADDRESS .= "on <I>$T2H_TODAY</I>";
+# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff
+# can be used for <style> <script>, <meta> tags
+$T2H_EXTRA_HEAD = '';
+
+sub T2H_DEFAULT_print_page_head
+{
+  my $fh = shift; 
+  my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}";
+  print $fh <<EOT;
+<HTML>
+$T2H_DOCTYPE
+<!-- Created on $T2H_TODAY by $THISPROG -->
+<!-- 
+$T2H_AUTHORS 
+-->
+<HEAD>
+<TITLE>$longtitle</TITLE>
+
+<META NAME="description" CONTENT="$longtitle">
+<META NAME="keywords" CONTENT="$longtitle">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="$THISPROG">
+$T2H_EXTRA_HEAD
+</HEAD>
+
+<BODY $T2H_BODYTEXT>
+$T2H_AFTER_BODY_OPEN
+EOT
+}
+
+sub T2H_DEFAULT_print_page_foot
+{
+  my $fh = shift;
+  print $fh <<EOT;
+<BR>  
+<FONT SIZE="-1">
+This document was generated
+$T2H_ADDRESS
+using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
+$T2H_PRE_BODY_CLOSE
+</BODY>
+</HTML>
+EOT
+}
+
+###################################################################
+# Layout of navigation panel
+
+# if this is set, then a vertical navigation panel is used
+$T2H_VERTICAL_HEAD_NAVIGATION = 0;
+sub T2H_DEFAULT_print_head_navigation
+{
+  my $fh = shift;
+  if ($T2H_VERTICAL_HEAD_NAVIGATION)
+  {
+    print $fh <<EOT;
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
+<TR VALIGN="TOP">
+<TD ALIGN="LEFT">
+EOT
+  }
+  &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION);
+  if ($T2H_VERTICAL_HEAD_NAVIGATION)
+  {
+    print $fh <<EOT;
+</TD>
+<TD ALIGN="LEFT">
+EOT
+  }
+  elsif ($T2H_SPLIT eq 'section')
+  {
+    print $fh "<HR SIZE=1>\n";
+  }
+}
+
+# Specifies the minimum page length required before a navigation panel
+# is placed at the bottom of a page (the default is that of latex2html)
+# T2H_THIS_WORDS_IN_PAGE holds number of words of current page
+$T2H_WORDS_IN_PAGE = 300;
+sub T2H_DEFAULT_print_foot_navigation
+{
+  my $fh = shift;
+  my $nwords = shift;
+  if ($T2H_VERTICAL_HEAD_NAVIGATION)
+  {
+    print $fh <<EOT;
+</TD>
+</TR>
+</TABLE>
+EOT
+  }
+  print $fh "<HR SIZE=1>\n";
+  &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE)
+}
+
+######################################################################
+# navigation panel
+#
+# specify in this array which "buttons" should appear in which order
+# in the navigation panel for sections; use ' ' for empty buttons (space)
+@T2H_SECTION_BUTTONS =
+  (
+   'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward',  
+   ' ', ' ', ' ', ' ',
+   'Top', 'Contents', 'Index', 'About', 
+  );
+
+# buttons for misc stuff
+@T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About');
+
+# insert here name of icon images for buttons 
+# Icons are used, if $T2H_ICONS and resp. value are set
+%T2H_ACTIVE_ICONS =
+  (
+   'Top',      '',
+   'Contents', '',
+   'Overview', '',
+   'Index',    '',
+   'Back',     '',
+   'FastBack', '',
+   'Prev',     '',
+   'Up',       '',
+   'Next',     '',
+   'Forward',  '',
+   'FastForward', '',
+   'About' ,    '',
+   'First',    '',
+   'Last',     '',
+   ' ',        ''
+  );
+
+# insert here name of icon images for these, if button is inactive
+%T2H_PASSIVE_ICONS =
+  (
+   'Top',      '',
+   'Contents', '',
+   'Overview', '',
+   'Index',    '',
+   'Back',     '',
+   'FastBack', '',
+   'Prev',     '',
+   'Up',       '',
+   'Next',     '',
+   'Forward',  '',
+   'FastForward', '',
+   'About',     '',
+   'First',    '',
+   'Last',     '',
+  );
+
+# how to create IMG tag
+sub T2H_DEFAULT_button_icon_img
+{
+  my $button = shift;
+  my $icon = shift;
+  my $name = shift;
+  return qq{<IMG SRC="$icon" BORDER="0" ALT="$button: $name" ALIGN="MIDDLE">};
+}
+
+# Names of text as alternative for icons
+%T2H_NAVIGATION_TEXT =
+  (
+   'Top',      'Top',
+   'Contents', 'Contents',
+   'Overview', 'Overview',
+   'Index',    'Index',
+   ' ',        ' &nbsp; ',
+   'Back',     ' &lt; ',
+   'FastBack', ' &lt;&lt; ',
+   'Prev',     'Prev',
+   'Up',       ' Up ',
+   'Next',     'Next',
+   'Forward',  ' &gt; ',
+   'FastForward',  ' &gt;&gt; ',
+   'About',     ' ? ',
+   'First',    ' |&lt; ',
+   'Last',     ' &gt;| '
+  );
+
+sub T2H_DEFAULT_print_navigation
+{
+  my $fh = shift;
+  my $vertical = shift;
+  my $spacing = 1;
+  print $fh "<TABLE CELLPADDING=$spacing CELLSPACING=$spacing BORDER=0>\n";
+
+  print $fh "<TR>" unless $vertical;
+  for $button (@$T2H_BUTTONS)
+  {
+    print $fh qq{<TR VALIGN="TOP" ALIGN="LEFT">\n} if $vertical;
+    print $fh qq{<TD VALIGN="MIDDLE" ALIGN="LEFT">};
+
+    if (ref($button) eq 'CODE')
+    {
+      &$button($fh, $vertical);
+    }
+    elsif ($button eq ' ')
+    { # handle space button
+      print $fh 
+	$T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ? 
+	 &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) :
+	 $T2H_NAVIGATION_TEXT{' '};
+      next;
+    }
+    elsif ($T2H_HREF{$button})
+    { # button is active
+      print $fh   
+	 $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ? 
+	   t2h_anchor('', $T2H_HREF{$button},  # yes
+		    &$T2H_button_icon_img($button,
+					$T2H_ACTIVE_ICONS{$button},
+					$T2H_NAME{$button})) 
+	 : # use text
+	 "[" . 
+	 t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) .
+	 "]";  
+    }
+    else
+    { # button is passive 
+      print $fh 
+	$T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ?
+	 &$T2H_button_icon_img($button,
+			       $T2H_PASSIVE_ICONS{$button},
+			       $T2H_NAME{$button}) :
+	 
+	 "[" . $T2H_NAVIGATION_TEXT{$button} . "]";
+    }
+    print $fh "</TD>\n";
+    print $fh "</TR>\n" if $vertical;
+  }
+  print $fh "</TR>" unless $vertical;
+  print $fh "</TABLE>\n";
+}
+
+######################################################################
+# Frames: this is from "Richard Y. Kim" <ryk@coho.net>
+# Should be improved to be more conforming to other _print* functions
+
+sub T2H_DEFAULT_print_frame
+{
+  my $fh = shift;
+  print $fh <<EOT;
+<HTML>
+<HEAD><TITLE>$T2H_THISDOC{title}</TITLE></HEAD>
+<FRAMESET cols="140,*"> 
+  <FRAME name=toc  src="$docu_toc_frame_file">
+  <FRAME name=main src="$docu_doc">
+</FRAMESET> 
+</HTML>
+EOT
+}
+
+sub T2H_DEFAULT_print_toc_frame
+{
+  my $fh = shift;
+  &$T2H_print_page_head($fh);
+  print $fh <<EOT;
+<H2>Content</H2>
+EOT
+  print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines;
+  print $fh "</BODY></HTML>\n";
+}
+
+######################################################################
+# About page
+#
+
+# T2H_PRE_ABOUT might be a function
+$T2H_PRE_ABOUT = <<EOT;
+This document was generated $T2H_ADDRESS
+using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
+<P></P>  
+EOT
+$T2H_AFTER_ABOUT = '';
+
+sub T2H_DEFAULT_about_body
+{
+  my $about;
+  if (ref($T2H_PRE_ABOUT) eq 'CODE')
+  {
+    $about = &$T2H_PRE_ABOUT();
+  }
+  else
+  {
+    $about = $T2H_PRE_ABOUT;
+  }
+  $about .= <<EOT;
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+EOT
+  
+  for $button (@T2H_SECTION_BUTTONS)
+  {
+    next if $button eq ' ' || ref($button) eq 'CODE';
+    $about .= <<EOT;
+<TR>
+<TD ALIGN="CENTER">
+EOT
+    $about .= 	
+      ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ?
+       &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) :
+       " [" . $T2H_NAVIGATION_TEXT{$button} . "] ");
+    $about .= <<EOT;
+</TD>
+<TD ALIGN="CENTER">
+$button
+</TD>
+<TD>
+$T2H_BUTTONS_GOTO{$button}
+</TD>
+<TD>
+$T2H_BUTTONS_EXAMPLE{$button}
+</TD>
+</TR>
+EOT
+  }
+
+  $about .= <<EOT;
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position 
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of 
+the following structure:
+<UL>
+<LI> 1. Section One  </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+$T2H_AFTER_ABOUT
+EOT
+  return $about;  
+}
+
+  
+%T2H_BUTTONS_GOTO =
+  (
+   'Top',      'cover (top) of document',
+   'Contents', 'table of contents',
+   'Overview', 'short table of contents',
+   'Index',    'concept index',
+   'Back',     'previous section in reading order',
+   'FastBack', 'previous or up-and-previous section ',
+   'Prev',     'previous section same level',
+   'Up',       'up section',
+   'Next',     'next section same level',
+   'Forward',  'next section in reading order',
+   'FastForward', 'next or up-and-next section',
+   'About' ,    'this page',
+   'First',    'first section in reading order',
+   'Last',     'last section in reading order',
+  );
+
+%T2H_BUTTONS_EXAMPLE = 
+(
+   'Top',      ' &nbsp; ',
+   'Contents', ' &nbsp; ',
+   'Overview', ' &nbsp; ',
+   'Index',    ' &nbsp; ',
+   'Back',     '1.2.2',
+   'FastBack', '1.1',
+   'Prev',     '1.2.2',
+   'Up',       '1.2',
+   'Next',     '1.2.4',
+   'Forward',  '1.2.4',
+   'FastForward', '1.3',
+   'About',     ' &nbsp; ',
+   'First',    '1.',
+   'Last',     '1.2.4',
+);
+
+
+######################################################################
+# from here on, its l2h init stuff 
+#
+
+## initialization for latex2html as for Singular manual generation
+## obachman 3/99
+
+#
+# Options controlling Titles, File-Names, Tracing and Sectioning
+#
+$TITLE = '';
+
+$SHORTEXTN = 0;
+
+$LONG_TITLES = 0;
+
+$DESTDIR = ''; # should be overwritten by cmd-line argument
+
+$NO_SUBDIR = 0;# should be overwritten by cmd-line argument
+
+$PREFIX = '';  # should be overwritten by cmd-line argument
+
+$AUTO_PREFIX = 0; # this is needed, so that prefix settings are used
+
+$AUTO_LINK = 0; 
+
+$SPLIT = 0;
+
+$MAX_LINK_DEPTH = 0;
+
+$TMP = ''; # should be overwritten by cmd-line argument
+
+$DEBUG = 0;
+
+$VERBOSE = 1;
+
+#
+# Options controlling Extensions and Special Features 
+#
+$HTML_VERSION = "3.2";
+
+$TEXDEFS = 1; # we absolutely need that
+
+$EXTERNAL_FILE = '';
+
+$SCALABLE_FONTS = 1;
+
+$NO_SIMPLE_MATH = 1;
+
+$LOCAL_ICONS = 1;
+
+$SHORT_INDEX = 0;
+
+$NO_FOOTNODE = 1;
+
+$ADDRESS = '';
+
+$INFO = '';
+
+#
+# Switches controlling Image Generation 
+#
+$ASCII_MODE = 0;
+
+$NOLATEX = 0;
+
+$EXTERNAL_IMAGES = 0;
+
+$PS_IMAGES = 0;
+
+$NO_IMAGES = 0;
+
+$IMAGES_ONLY = 0;
+
+$REUSE = 2;
+
+$ANTI_ALIAS = 1;
+
+$ANTI_ALIAS_TEXT = 1;
+
+#
+#Switches controlling Navigation Panels
+#
+$NO_NAVIGATION = 1;
+$ADDRESS = '';
+$INFO = 0;              # 0 = do not make a "About this document..." section 
+
+#
+#Switches for Linking to other documents 
+#
+# actuall -- we don't care
+
+$MAX_SPLIT_DEPTH = 0;	# Stop making separate files at this depth
+
+$MAX_LINK_DEPTH = 0;    # Stop showing child nodes at this depth   
+
+$NOLATEX = 0;           # 1 = do not pass unknown environments to Latex
+
+$EXTERNAL_IMAGES = 0;   # 1 = leave the images outside the document 
+
+$ASCII_MODE = 0;        # 1 = do not use any icons or internal images
+
+# 1 =  use links to external postscript images rather than inlined bitmap
+# images.
+$PS_IMAGES = 0;
+$SHOW_SECTION_NUMBERS = 0;
+
+### Other global variables ###############################################
+$CHILDLINE = "";
+
+# This is the line width measured in pixels and it is used to right justify
+# equations and equation arrays; 
+$LINE_WIDTH = 500;		
+
+# Used in conjunction with AUTO_NAVIGATION
+$WORDS_IN_PAGE = 300;	
+
+# Affects ONLY the way accents are processed 
+$default_language = 'english';	
+
+# The value of this variable determines how many words to use in each 
+# title that is added to the navigation panel (see below)
+# 
+$WORDS_IN_NAVIGATION_PANEL_TITLES = 0;
+
+# This number will determine the size of the equations, special characters,
+# and anything which will be converted into an inlined image
+# *except* "image generating environments" such as "figure", "table" 
+# or "minipage".
+# Effective values are those greater than 0.
+# Sensible values are between 0.1 - 4.
+$MATH_SCALE_FACTOR = 1.5;
+
+# This number will determine the size of 
+# image generating environments such as "figure", "table" or "minipage".
+# Effective values are those greater than 0.
+# Sensible values are between 0.1 - 4.
+$FIGURE_SCALE_FACTOR = 1.6;
+
+
+#  If both of the following two variables are set then the "Up" button
+#  of the navigation panel in the first node/page of a converted document
+#  will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set
+#  to some text which describes this external link.
+$EXTERNAL_UP_LINK = "";
+$EXTERNAL_UP_TITLE = "";
+
+# If this is set then the resulting HTML will look marginally better if viewed 
+# with Netscape.
+$NETSCAPE_HTML = 1;
+
+# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0"
+# Paper sizes has no effect other than in the time it takes to create inlined
+# images and in whether large images can be created at all ie
+#  - larger paper sizes *MAY* help with large image problems 
+#  - smaller paper sizes are quicker to handle
+$PAPERSIZE = "a4";
+
+# Replace "english" with another language in order to tell LaTeX2HTML that you 
+# want some generated section titles (eg "Table of Contents" or "References")
+# to appear in a different language. Currently only "english" and "french"
+# is supported but it is very easy to add your own. See the example in the
+# file "latex2html.config" 
+$TITLES_LANGUAGE = "english";
+
+1;	# This must be the last non-comment line
+
+# End File texi2html.init
+######################################################################
+
+
+require "$ENV{T2H_HOME}/texi2html.init" 
+  if ($0 =~ /\.pl$/ &&
+      -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
+
+#+++############################################################################
+#                                                                              #
+# Initialization                                                               #
+# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing        #
+#                                                                              #
+#---############################################################################
+
+# leave this within comments, and keep the require statement
+# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
+# exists.
+
+# 
+package Getopt::MySimple;
+
+# Name:
+#	Getopt::MySimple.
+#
+# Documentation:
+#	POD-style (incomplete) documentation is in file MySimple.pod
+#
+# Tabs:
+#	4 spaces || die.
+#
+# Author:
+#	Ron Savage	rpsavage@ozemail.com.au.
+#	1.00	19-Aug-97	Initial version.
+#	1.10	13-Oct-97	Add arrays of switches (eg '=s@').
+#	1.20	 3-Dec-97	Add 'Help' on a per-switch basis.
+#	1.30	11-Dec-97	Change 'Help' to 'verbose'. Make all hash keys lowercase.
+#	1.40	10-Nov-98	Change width of help report. Restructure tests.
+#               1-Jul-00        Modifications for Texi2html
+
+# --------------------------------------------------------------------------
+# Locally modified by obachman (Display type instead of env, order by cmp)
+# $Id$
+
+# use strict;
+# no strict 'refs';
+
+use vars qw(@EXPORT @EXPORT_OK @ISA);
+use vars qw($fieldWidth $opt $VERSION);
+
+use Exporter();
+use Getopt::Long;
+
+@ISA		= qw(Exporter);
+@EXPORT		= qw();
+@EXPORT_OK	= qw($opt);	# An alias for $self -> {'opt'}.
+
+# --------------------------------------------------------------------------
+
+$fieldWidth	= 20;
+$VERSION	= '1.41';
+
+# --------------------------------------------------------------------------
+
+sub byOrder
+{
+	my($self) = @_;
+	
+	return uc($a) cmp (uc($b));
+}
+
+# --------------------------------------------------------------------------
+
+sub dumpOptions
+{
+	my($self) = @_;
+
+	print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n";
+
+	for (sort byOrder keys(%{$self -> {'opt'} }) )
+	{
+	  print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n";
+	}
+
+	print "\n";
+
+}	# End of dumpOptions.
+
+# --------------------------------------------------------------------------
+# Return:
+#	0 -> Error.
+#	1 -> Ok.
+
+sub getOptions
+{
+	push(@_, 0) if ($#_ == 2);	# Default for $ignoreCase is 0.
+	push(@_, 1) if ($#_ == 3);	# Default for $helpThenExit is 1.
+
+	my($self, $default, $helpText, $versionText, 
+	   $helpThenExit, $versionThenExit, $ignoreCase) = @_;
+	
+	$helpThenExit = 1 unless (defined($helpThenExit));
+	$versionThenExit = 1 unless (defined($versionThenExit));
+	$ignoreCase = 0 unless (defined($ignoreCase));
+
+	$self -> {'default'}		= $default;
+	$self -> {'helpText'}		= $helpText;
+	$self -> {'versionText'}        = $versionText;
+	$Getopt::Long::ignorecase	= $ignoreCase;
+
+	unless (defined($self -> {'default'}{'help'}))
+	{
+	  $self -> {'default'}{'help'} = 
+	  { 
+	   type => ':i', 
+	   default => '',
+	   linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;},
+	   verbose => "print help and exit"
+	  };
+	}
+
+	unless (defined($self -> {'default'}{'version'}))
+	{
+	  $self -> {'default'}{'version'} = 
+	  { 
+	   type => '', 
+	   default => '',
+	   linkage => sub {print $self->{'versionText'};  exit (0) if versionTheExit;},
+	   verbose => "print version and exit"
+	  };
+	}
+
+	for (keys(%{$self -> {'default'} }) )
+	{
+	  my $type = ${$self -> {'default'} }{$_}{'type'};
+	  push(@{$self -> {'type'} }, "$_$type");
+	  $self->{'opt'}->{$_} =  ${$self -> {'default'} }{$_}{'linkage'}
+            if ${$self -> {'default'} }{$_}{'linkage'};
+	}
+
+	my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} });
+
+        return $result unless $result;
+
+	for (keys(%{$self -> {'default'} }) )
+	{
+ 	   if (! defined(${$self -> {'opt'} }{$_})) #{
+            {
+ 	     ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'};
+            }
+	}
+
+	$result;
+}	# End of getOptions.
+
+# --------------------------------------------------------------------------
+
+sub helpOptions
+{
+	my($self) = shift;
+	my($noHelp) = shift;
+	$noHelp = 0 unless $noHelp;
+	my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) 
+	  = (10, 5, 9, 78, 4, 11);
+
+	print "$self->{'helpText'}" if ($self -> {'helpText'});
+
+	print ' Option', ' ' x ($optwidth - length('Option') -1 ),
+		'Type', ' ' x ($typewidth - length('Type') + 1),
+		'Default', ' ' x ($defaultwidth - length('Default') ),
+	        "Description\n";
+
+	for (sort byOrder keys(%{$self -> {'default'} }) )
+	{
+	  my($line, $help, $option, $val);
+	  $option = $_;
+	  next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp;
+		$line = " -$_ " . ' ' x ($optwidth - (2 + length) ) .
+			"${$self->{'default'} }{$_}{'type'} ".
+			' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) ));
+
+                 $val = ${$self->{'default'} }{$_}{'linkage'};
+                if ($val)
+                {
+                  if (ref($val) eq 'SCALAR')
+		  {
+		    $val = $$val; 
+		  }
+		  else
+		  {
+		    $val = '';
+		  }
+                }
+		else
+		{
+		  $val = ${$self->{'default'} }{$_}{'default'};
+		}
+	        $line .= "$val  ";
+		$line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line));
+		
+		if (defined(${$self -> {'default'} }{$_}{'verbose'}) &&
+		  ${$self -> {'default'} }{$_}{'verbose'} ne '')
+	      {
+		$help = "${$self->{'default'} }{$_}{'verbose'}";
+	      }
+	      else
+	      {
+		$help = ' ';
+	      }
+	      if ((length("$line") + length($help)) < $maxlinewidth)
+	      {
+		print $line , $help, "\n";
+	      }
+	      else
+	      {
+		print $line, "\n", ' ' x $valind, $help, "\n";
+	      }
+	      for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}}))
+	      {
+	        print ' ' x ($valind + 2);
+	        print $val, '  ', ' ' x ($valwidth - length($val) - 2);
+	        print ${$self->{'default'}}{$option}{'values'}{$val}, "\n";
+	      }
+	}
+
+	print <<EOT;
+Note: 'Options' may be abbreviated. 'Type' specifications mean:
+ <none>| !    no argument: variable is set to 1 on -foo (or, to 0 on -nofoo)
+    =s | :s   mandatory (or, optional)  string argument
+    =i | :i   mandatory (or, optional)  integer argument
+EOT
+}	# End of helpOptions.
+
+#-------------------------------------------------------------------
+
+sub new
+{
+	my($class)				= @_;
+	my($self)				= {};
+	$self -> {'default'}	= {};
+	$self -> {'helpText'}	= '';
+	$self -> {'opt'}		= {};
+	$opt					= $self -> {'opt'};	 # An alias for $self -> {'opt'}.
+	$self -> {'type'}		= ();
+
+	return bless $self, $class;
+
+}	# End of new.
+
+# --------------------------------------------------------------------------
+
+1;
+
+# End MySimple.pm
+
+require "$ENV{T2H_HOME}/MySimple.pm" 
+  if ($0 =~ /\.pl$/ &&
+      -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
+
+package main;
 
 #+++############################################################################
 #                                                                              #
@@ -28,36 +1742,41 @@
 $DEBUG_DEF   = 16;
 $DEBUG_HTML  = 32;
 $DEBUG_USER  = 64;
+$DEBUG_L2H   = 128;
+
 
 $BIBRE = '\[[\w\/-]+\]';		# RE for a bibliography reference
 $FILERE = '[\/\w.+-]+';			# RE for a file name
 $VARRE = '[^\s\{\}]+';			# RE for a variable name
-$NODERE = '[^@{}:\'`",]+';		# RE for a node name
-$NODESRE = '[^@{}:\'`"]+';		# RE for a list of node names
-$XREFRE = '[^@{}]+';			# RE for a xref (should use NODERE)
+$NODERE = '[^,:]+';		        # RE for a node name
+$NODESRE = '[^:]+';		        # RE for a list of node names
 
-$ERROR = "***";			        # prefix for errors and warnings
-$THISPROG = "texi2html 1.52";			# program name and version
-$HOMEPAGE = "http://wwwinfo.cern.ch/dis/texi2html/"; # program home page
-$TODAY = &pretty_date;			# like "20 September 1993"
-$SPLITTAG = "<!-- SPLIT HERE -->\n";	# tag to know where to split
+$ERROR = "***";			        # prefix for errors 
+$WARN  = "**";                          # prefix for warnings
+  
+                                        # program home page
 $PROTECTTAG = "_ThisIsProtected_";	# tag to recognize protected sections
-$html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN">';
 
-#
-# language dependent constants
-#
-#$LDC_SEE = 'see';
-#$LDC_SECTION = 'section';
-#$LDC_IN = 'in';
-#$LDC_TOC = 'Table of Contents';
-#$LDC_GOTO = 'Go to the';
-#$LDC_FOOT = 'Footnotes';
-# TODO: @def* shortcuts
+$CHAPTEREND = "<!-- End chapter -->\n"; # to know where a chpater ends
+$SECTIONEND = "<!-- End section -->\n"; # to know where section ends
+$TOPEND     = "<!-- End top     -->\n"; # to know where top ends
+
+  
 
 #
 # pre-defined indices
 #
+$index_properties =
+{
+ 'c' => { name => 'cp'},
+ 'f' => { name => 'fn', code => 1},
+ 'v' => { name => 'vr', code => 1},
+ 'k' => { name => 'ky', code => 1},
+ 'p' => { name => 'pg', code => 1},
+ 't' => { name => 'tp', code => 1}
+};
+
+
 %predefined_index = (
 		    'cp', 'c',
 		    'fn', 'f',
@@ -122,8 +1841,11 @@
 	       # cf. makeinfo.c
 	       "*", "<BR>",		# HTML+
 	       " ", " ",
+	       "\t", " ",
+  	       "-", "&#173;",	# soft hyphen
 	       "\n", "\n",
 	       "|", "",
+	       'tab', '<\/TD><TD>',
 	       # spacing commands
 	       ":", "",
 	       "!", "!",
@@ -140,7 +1862,8 @@
 	       'br', '<P>',		# paragraph break
 	       'bullet', '*',
 	       'copyright', '(C)',
-	       'dots', '...',
+	       'dots', '<small>...<\/small>',
+	       'enddots', '<small>....<\/small>',
 	       'equiv', '==',
 	       'error', 'error-->',
 	       'expansion', '==>',
@@ -148,27 +1871,45 @@
 	       'point', '-!-',
 	       'print', '-|',
 	       'result', '=>',
-	       'today', $TODAY,
+	       'today', $T2H_TODAY,
+	       'aa', '&aring;',
+	       'AA', '&Aring;',
+	       'ae', '&aelig;',
+	       'oe', '&#156;',
+	       'AE', '&AElig;',
+	       'OE', '&#140;',
+	       'o',  '&oslash;',
+	       'O',  '&Oslash;',
+	       'ss', '&szlig;',
+	       'l', '\/l',
+	       'L', '\/L',
+	       'exclamdown', '&iexcl;',
+	       'questiondown', '&iquest;',
+	       'pounds', '&pound;'
 	       );
 
 #
 # texinfo styles (@foo{bar}) to HTML ones
 #
 %style_map = (
+	      'acronym', '&do_acronym',
 	      'asis', '',
 	      'b', 'B',
 	      'cite', 'CITE',
 	      'code', 'CODE',
+	      'command', 'CODE',
 	      'ctrl', '&do_ctrl',	# special case
 	      'dfn', 'EM',		# DFN tag is illegal in the standard
 	      'dmn', '',		# useless
 	      'email', '&do_email',     # insert a clickable email address
 	      'emph', 'EM',
+	      'env', 'CODE',
 	      'file', '"TT',		# will put quotes, cf. &apply_style
 	      'i', 'I',
 	      'kbd', 'KBD',
 	      'key', 'KBD',
-	      'math', 'EM',
+	      'math', '&do_math',
+	      'option', '"SAMP',        # will put quotes, cf. &apply_style
 	      'r', '',			# unsupported
 	      'samp', '"SAMP',		# will put quotes, cf. &apply_style
 	      'sc', '&do_sc',		# special case
@@ -179,19 +1920,23 @@
 	      'url', '&do_url',         # insert a clickable URL
 	      'var', 'VAR',
 	      'w', '',			# unsupported
+	      'H', '&do_accent',
+	      'dotaccent', '&do_accent',
+	      'ringaccent','&do_accent',
+	      'tieaccent', '&do_accent',
+	      'u','&do_accent',
+	      'ubaraccent','&do_accent',
+	      'udotaccent','&do_accent',
+	      'v', '&do_accent',
+	      ',', '&do_accent',
+	      'dotless', '&do_accent'
 	      );
 
 #
 # texinfo format (@foo/@end foo) to HTML ones
 #
 %format_map = (
-	       'display', 'PRE',
-	       'example', 'PRE',
-	       'format', 'PRE',
-	       'lisp', 'PRE',
 	       'quotation', 'BLOCKQUOTE',
-	       'smallexample', 'PRE',
-	       'smalllisp', 'PRE',
 	       # lists
 	       'itemize', 'UL',
 	       'enumerate', 'OL',
@@ -201,6 +1946,38 @@
 	       );
 
 #
+# an eval of these $complex_format_map->{what}->[0] yields beginning
+# an eval of these $complex_format_map->{what}->[1] yieleds end
+$complex_format_map =
+{
+ example => 
+ [
+  q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=example><pre>"},
+  q{'</pre></td></tr></table>'}
+ ],
+ smallexample => 
+ [
+  q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smallexample><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre>"},
+  q{'</FONT></pre></td></tr></table>'}
+ ],
+ display =>
+ [
+  q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=display><pre " . 'style="font-family: serif">'},
+  q{'</pre></td></tr></table>'}
+ ],
+ smalldisplay =>
+ [
+  q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smalldisplay><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre " . 'style="font-family: serif">'},
+  q{'</pre></FONT></td></tr></table>'}
+ ]
+};
+
+$complex_format_map->{lisp} = $complex_format_map->{example};
+$complex_format_map->{smalllisp} = $complex_format_map->{smallexample};
+$complex_format_map->{format} = $complex_format_map->{display};
+$complex_format_map->{smallformat} = $complex_format_map->{smalldisplay};
+
+#
 # texinfo definition shortcuts to real ones
 #
 %def_map = (
@@ -229,7 +2006,9 @@
 	    'deftypefun', 'deftypefn Function',
 	    'deftypevar', 'deftypevr Variable',
 	    'defivar', 'defcv {Instance Variable}',
+	    'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME
 	    'defmethod', 'defop Method',
+	    'deftypemethod', 'defop Method', # NEW:FIXME
 	    # x shortcuts
 	    'defunx', 'deffnx Function',
 	    'defmacx', 'deffnx Macro',
@@ -249,7 +2028,15 @@
 	    # comments
 	    'c', 1,
 	    'comment', 1,
+            'ifnotinfo', 1,
+            'ifnottex', 1,
+	    'ifhtml', 1,
+	    'end ifhtml', 1,
+            'end ifnotinfo', 1,
+            'end ifnottex', 1,
 	    # useless
+	    'detailmenu', 1,
+            'direntry', 1,
 	    'contents', 1,
 	    'shortcontents', 1,
 	    'summarycontents', 1,
@@ -263,6 +2050,7 @@
 	    'cropmarks', 1,
 	    'finalout', 1,
 	    'headings', 1,
+            'sp', 1,
 	    'need', 1,
 	    'page', 1,
 	    'setchapternewpage', 1,
@@ -289,88 +2077,221 @@
 #                                                                              #
 #---############################################################################
 
-%value = ();				# hold texinfo variables, see also -D
+#
+# flush stdout and stderr after every write
+#
+select(STDERR);
+$| = 1;
+select(STDOUT);
+$| = 1;
 
+
+%value = ();				# hold texinfo variables, see also -D
 $use_bibliography = 1;
-$use_acc = 0;
-$debug = 0;
-$doctype = '';
-$check = 0;
-$expandinfo = 0;
-$use_glossary = 0;
-$invisible_mark = '';
-$use_iso = 0;
-@include_dirs = ();
-$show_menu = 0;
-$number_sections = 0;
-$split_node = 0;
-$split_chapter = 0;
-$monolithic = 0;
-$verbose = 0;
-$usage = <<EOT;
-This is $THISPROG
-To convert a Texinfo file to HMTL: $0 [options] file
-  where options can be:
-    -expandinfo    : use \@ifinfo sections, not \@iftex
-    -glossary      : handle a glossary
-    -invisible name: use 'name' as an invisible anchor
-    -Dname         : define name like with \@set
-    -I dir         : search also for files in 'dir'
-    -menu          : handle menus
-    -monolithic    : output only one file including ToC
-    -number        : number sections
-    -split_chapter : split on main sections
-    -split_node    : split on nodes
-    -usage         : print usage instructions
-    -verbose       : verbose output
-To check converted files: $0 -check [-verbose] files
+$use_acc = 1;
+
+#
+# called on -init-file
+sub LoadInitFile
+{
+  my $init_file = shift;
+  # second argument is value of options
+  $init_file = shift;
+  if (-f $init_file)
+  {
+    print "# reading initialization file from $init_file\n" 
+      if ($T2H_VERBOSE);
+    require($init_file);
+  }
+  else
+  {
+    print "$ERROR Error: can't read init file $int_file\n";
+    $init_file = '';
+  }
+}
+
+#
+# called on -lang
+sub SetDocumentLanguage
+{
+  my $lang = shift;
+  if (! exists($T2H_WORDS->{$lang}))
+  {
+    warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" . 
+      ($T2H_LANG ? T2H_LANG : "en") . "'\n";
+  }
+  else
+  {
+    print "# using '$lang' as document language\n" if ($T2H_VERBOSE);
+    $T2H_LANG = $lang;
+  }
+}
+
+##
+## obsolete cmd line options
+##
+$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;},
+ verbose => 'obsolete, use -nosec_nav',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {use_acc} =
+{
+ type => '!',
+ linkage => \$use_acc,
+ verbose => 'obsolete',
+ noHelp => 2
+};
+$T2H_OBSOLETE_OPTIONS -> {expandinfo} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_EXPAND = 'info';},
+ verbose => 'obsolete, use "-expand info" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {expandtex} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_EXPAND = 'tex';},
+ verbose => 'obsolete, use "-expand tex" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {monolithic} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_SPLIT = '';},
+ verbose => 'obsolete, use "-split no" instead',
+ noHelp => 2
+};
+$T2H_OBSOLETE_OPTIONS -> {split_node} =
+{
+ type => '!',
+ linkage => sub{$main::T2H_SPLIT = 'section';},
+ verbose => 'obsolete, use "-split section" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {split_chapter} =
+{
+ type => '!',
+ linkage => sub{$main::T2H_SPLIT = 'chapter';},
+ verbose => 'obsolete, use "-split chapter" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {no_verbose} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_VERBOSE = 0;},
+ verbose => 'obsolete, use -noverbose instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {output_file} =
+{
+ type => '=s',
+ linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
+ verbose => 'obsolete, use -out_file instead',
+ noHelp => 2
+};
+
+$T2H_OBSOLETE_OPTIONS -> {section_navigation} =
+{
+ type => '!',
+ linkage => \$T2H_SECTION_NAVIGATION,
+ verbose => 'obsolete, use -sec_nav instead',
+ noHelp => 2,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {verbose} =
+{
+ type => '!',
+ linkage => \$T2H_VERBOSE,
+ verbose => 'obsolete, use -Verbose instead',
+ noHelp => 2
+};
+
+# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc
+my $home = $ENV{HOME};
+defined($home) or $home = '';
+foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") {
+    if (-f $i) {
+	print "# reading initialization file from $i\n" 
+	    if ($T2H_VERBOSE);
+	require($i);
+    }
+}
+
+
+#+++############################################################################
+#                                                                              #
+# parse command-line options
+#                                                                              #
+#---############################################################################
+$T2H_USAGE_TEXT = <<EOT;
+Usage: texi2html  [OPTIONS] TEXINFO-FILE
+Translates Texinfo source documentation to HTML.
+EOT
+$T2H_FAILURE_TEXT = <<EOT;
+Try 'texi2html -help' for usage instructions.
+EOT
+$options = new Getopt::MySimple;
+
+# some older version of GetOpt::Long don't have 
+# Getopt::Long::Configure("pass_through")
+eval {Getopt::Long::Configure("pass_through");};
+$Configure_failed = $@ && <<EOT;
+**WARNING: Parsing of obsolete command-line options could have failed. 
+           Consider to use only documented command-line options (run
+           'texi2html -help 2' for a complete list) or upgrade to perl 
+           version 5.005 or higher.
 EOT
 
-while (@ARGV && $ARGV[0] =~ /^-/) {
-    $_ = shift(@ARGV);
-    if (/^-acc$/)            { $use_acc = 1; next; }
-    if (/^-d(ebug)?(\d+)?$/) { $debug = $2 || shift(@ARGV); next; }
-    if (/^-doctype$/)        { $doctype = shift(@ARGV); next; }
-    if (/^-c(heck)?$/)       { $check = 1; next; }
-    if (/^-e(xpandinfo)?$/)  { $expandinfo = 1; next; }
-    if (/^-g(lossary)?$/)    { $use_glossary = 1; next; }
-    if (/^-i(nvisible)?$/)   { $invisible_mark = shift(@ARGV); next; }
-    if (/^-iso$/)            { $use_iso = 1; next; }
-    if (/^-D(.+)?$/)         { $value{$1 || shift(@ARGV)} = 1; next; }
-    if (/^-I(.+)?$/)         { push(@include_dirs, $1 || shift(@ARGV)); next; }
-    if (/^-m(enu)?$/)        { $show_menu = 1; next; }
-    if (/^-mono(lithic)?$/)  { $monolithic = 1; next; }
-    if (/^-n(umber)?$/)      { $number_sections = 1; next; }
-    if (/^-s(plit)?_?(n(ode)?|c(hapter)?)?$/) {
-	if ($2 =~ /^n/) {
-	    $split_node = 1;
-	} else {
-	    $split_chapter = 1;
-	}
-	next;
-    }
-    if (/^-v(erbose)?$/)     { $verbose = 1; next; }
-    die $usage;
+if (! $options->getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
+{
+  print $Configure_failed if $Configure_failed;
+  die $T2H_FAILURE_TEXT;
 }
-if ($check) {
-    die $usage unless @ARGV > 0;
+
+if (@ARGV > 1)
+{
+  eval {Getopt::Long::Configure("no_pass_through");};
+  if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
+  {
+    print $Configure_failed if $Configure_failed;
+    die $T2H_FAILURE_TEXT;
+  }
+}
+
+if ($T2H_CHECK) {
+    die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0;
     &check;
     exit;
 }
 
-if (($split_node || $split_chapter) && $monolithic) {
-    warn "Can't use -monolithic with -split, -monolithic ignored.\n";
-    $monolithic = 0;
+#+++############################################################################
+#                                                                              #
+# evaluation of cmd line options
+#                                                                              #
+#---############################################################################
+
+if ($T2H_EXPAND eq 'info') 
+{
+  $to_skip{'ifinfo'} = 1;
+  $to_skip{'end ifinfo'} = 1;
+} 
+elsif ($T2H_EXPAND eq 'tex')
+{
+  $to_skip{'iftex'} = 1;
+  $to_skip{'end iftex'} = 1;
+  
 }
-if ($expandinfo) {
-    $to_skip{'ifinfo'}++;
-    $to_skip{'end ifinfo'}++;
-} else {
-    $to_skip{'iftex'}++;
-    $to_skip{'end iftex'}++;
-}
-$invisible_mark = '<IMG SRC="invisible.xbm">' if $invisible_mark eq 'xbm';
-die $usage unless @ARGV == 1;
+
+$T2H_INVISIBLE_MARK = '<IMG SRC="invisible.xbm">' if $T2H_INVISIBLE_MARK eq 'xbm';
+
+#
+# file name buisness
+#
+die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1;
 $docu = shift(@ARGV);
 if ($docu =~ /.*\//) {
     chop($docu_dir = $&);
@@ -379,29 +2300,123 @@
     $docu_dir = '.';
     $docu_name = $docu;
 }
-unshift(@include_dirs, $docu_dir);
+unshift(@T2H_INCLUDE_DIRS, $docu_dir);
 $docu_name =~ s/\.te?x(i|info)?$//;	# basename of the document
+$docu_name = $T2H_PREFIX if ($T2H_PREFIX);
 
-$docu_doc = "$docu_name.html";		# document's contents
-if ($monolithic) {
-    $docu_toc = $docu_foot = $docu_doc;
-} else {
-    $docu_toc  = "${docu_name}_toc.html";  # document's table of contents
-    $docu_foot = "${docu_name}_foot.html"; # document's footnotes
+# subdir
+if ($T2H_SUBDIR && ! $T2H_OUT)
+{
+  $T2H_SUBDIR =~ s|/*$||;
+  unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR")
+  {
+    if ( mkdir($T2H_SUBDIR, oct(755)))
+    {
+      print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE);
+    }
+    else
+    {
+      warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n";
+      $T2H_SUBDIR = '';
+    }
+  }
 }
 
+if ($T2H_SUBDIR && ! $T2H_OUT)
+{
+  $docu_rdir = "$T2H_SUBDIR/";
+  print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
+}
+else
+{
+  if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|)
+  {
+    $docu_rdir = "$1/";
+    print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
+  }
+  else
+  {
+    print "# putting result files into current directory \n" if ($T2H_VERBOSE);
+    $docu_rdir = '';
+  }
+}
+
+# extension
+if ($T2H_SHORTEXTN)
+{
+  $docu_ext = "htm";
+}
+else
+{
+  $docu_ext = "html";
+}
+if ($T2H_TOP_FILE =~ /\..*$/)
+{
+  $T2H_TOP_FILE = $`.".$docu_ext";
+}
+
+# result files
+if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i))
+{
+  $T2H_SPLIT = 'section';
+}
+elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i)
+{
+  $T2H_SPLIT = 'chapter'
+}
+else
+{
+  undef $T2H_SPLIT;
+}
+
+$docu_doc = "$docu_name.$docu_ext";		# document's contents
+$docu_doc_file = "$docu_rdir$docu_doc";
+if ($T2H_SPLIT) 
+{
+  $docu_toc  = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents
+  $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc
+  $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes
+  $docu_about = "${docu_name}_abt.$docu_ext"; # about this document
+  $docu_top  = $T2H_TOP_FILE || $docu_doc;
+}
+else
+{
+  if ($T2H_OUT)
+  {
+    $docu_doc = $T2H_OUT;
+    $docu_doc =~ s|.*/||;
+  }
+  $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc;
+}
+
+$docu_toc_file  = "$docu_rdir$docu_toc";
+$docu_stoc_file = "$docu_rdir$docu_stoc";
+$docu_foot_file = "$docu_rdir$docu_foot";
+$docu_about_file = "$docu_rdir$docu_about";
+$docu_top_file  = "$docu_rdir$docu_top";
+
+$docu_frame_file =     "$docu_rdir${docu_name}_frame.$docu_ext";
+$docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext";
+
 #
 # variables
 #
 $value{'html'} = 1;			# predefine html (the output format)
-$value{'texi2html'} = '1.52';		# predefine texi2html (the translator)
+$value{'texi2html'} = $THISVERSION;	# predefine texi2html (the translator)
 # _foo: internal to track @foo
 foreach ('_author', '_title', '_subtitle',
-	 '_settitle', '_setfilename') {
+	 '_settitle', '_setfilename', '_shorttitle') {
     $value{$_} = '';		        # prevent -w warnings
 }
 %node2sec = ();				# node to section name
+%sec2node = ();				# section to node name
+%sec2number = ();                       # section to number
+%number2sec = ();                       # number to section 
+%idx2node = ();                         # index keys to node
 %node2href = ();			# node to HREF
+%node2next = ();			# node to next
+%node2prev = ();			# node to prev
+%node2up   = ();			# node to up
 %bib2href = ();				# bibliography reference to HREF
 %gloss2href = ();			# glossary term to HREF
 @sections = ();				# list of sections
@@ -421,7 +2436,7 @@
 #
 # can I use ISO8879 characters? (HTML+)
 #
-if ($use_iso) {
+if ($T2H_USE_ISO) {
     $things_map{'bullet'} = "&bull;";
     $things_map{'copyright'} = "&copy;";
     $things_map{'dots'} = "&hellip;";
@@ -436,19 +2451,487 @@
 #
 $extensions = 'texi2html.ext'; # extensions in working directory
 if (-f $extensions) {
-    print "# reading extensions from $extensions\n" if $verbose;
+    print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
     require($extensions);
 }
 ($progdir = $0) =~ s/[^\/]+$//;
 if ($progdir && ($progdir ne './')) {
     $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory
     if (-f $extensions) {
-	print "# reading extensions from $extensions\n" if $verbose;
+	print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
 	require($extensions);
     }
 }
 
-print "# reading from $docu\n" if $verbose;
+
+print "# reading from $docu\n" if $T2H_VERBOSE;
+
+#########################################################################
+#
+# latex2html stuff
+# 
+# latex2html conversions consist of three stages:
+# 1) ToLatex: Put "latex" code into a latex file
+# 2) ToHtml: Use latex2html to generate corresponding html code and images
+# 3) FromHtml: Extract generated code and images from latex2html run
+#
+
+##########################
+# default settings
+#
+
+# defaults for files and names
+
+sub l2h_Init 
+{
+  local($root) = @_;
+  
+  return 0 unless ($root);
+  
+  $l2h_name =  "${root}_l2h";
+  
+  $l2h_latex_file = "$docu_rdir${l2h_name}.tex";
+  $l2h_cache_file = "${docu_rdir}l2h_cache.pm";
+  $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H);
+  
+  # destination dir -- generated images are put there, should be the same
+  # as dir of enclosing html document -- 
+  $l2h_html_file = "$docu_rdir${l2h_name}.html";
+  $l2h_prefix = "${l2h_name}_";
+  return 1;
+}
+
+
+##########################
+# 
+# First stage: Generation of Latex file
+# Initialize with: l2h_InitToLatex
+# Add content with: l2h_ToLatex($text) --> HTML placeholder comment
+# Finish with: l2h_FinishToLatex
+# 
+
+$l2h_latex_preample = <<EOT;
+% This document was automatically generated by the l2h extenstion of texi2html
+% DO NOT EDIT !!!
+\\documentclass{article}
+\\usepackage{html}
+\\begin{document}
+EOT
+
+$l2h_latex_closing = <<EOT;
+\\end{document}
+EOT
+
+# return used latex 1, if l2h could be initalized properly, 0 otherwise
+sub l2h_InitToLatex
+{
+  %l2h_to_latex = ();
+  unless ($T2H_L2H_SKIP)
+  {
+    unless (open(L2H_LATEX, ">$l2h_latex_file"))
+    {
+      warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n";
+      return 0;
+    }  
+    print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE);
+    print L2H_LATEX $l2h_latex_preample;
+  }
+  # open database for caching
+  l2h_InitCache();
+  $l2h_latex_count = 0;
+  $l2h_to_latex_count = 0;
+  $l2h_cached_count = 0;
+  return  1;
+}
+
+# print text (1st arg) into latex file (if not already there), return
+# HTML commentary which can be later on replaced by the latex2html
+# generated text
+sub l2h_ToLatex
+{
+  my($text) = @_;
+  my($count);
+  
+  $l2h_to_latex_count++;
+  $text =~ s/(\s*)$//;
+  
+  # try whether we can cache it
+  my $cached_text = l2h_FromCache($text);
+  if ($cached_text)
+  {
+    $l2h_cached_count++;
+    return $cached_text;
+  }
+  
+  # try whether we have text already on things to do
+  unless ($count = $l2h_to_latex{$text})
+  {
+    $count = $l2h_latex_count;
+    $l2h_latex_count++;
+    $l2h_to_latex{$text} = $count;
+    $l2h_to_latex[$count] = $text;
+    unless ($T2H_L2H_SKIP)
+    {
+      print L2H_LATEX "\\begin{rawhtml}\n";
+      print L2H_LATEX "<!-- l2h_begin ${l2h_name} ${count} -->\n";
+      print L2H_LATEX "\\end{rawhtml}\n";
+      
+      print L2H_LATEX "$text\n";
+      
+      print L2H_LATEX "\\begin{rawhtml}\n";
+      print L2H_LATEX "<!-- l2h_end ${l2h_name} ${count} -->\n";
+      print L2H_LATEX "\\end{rawhtml}\n";
+    }
+  }
+  return "<!-- l2h_replace ${l2h_name} ${count} -->"; 
+}
+
+# print closing into latex file and close it
+sub l2h_FinishToLatex
+{
+  local ($reused);
+  
+  $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count;
+  unless ($T2H_L2H_SKIP)
+  {
+    print L2H_LATEX $l2h_latex_closing;
+    close(L2H_LATEX);
+  }
+  print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE);
+  unless ($l2h_latex_count)
+  {
+    l2h_Finish();
+    return 0;
+  }
+  return 1;
+}
+
+###################################
+# Second stage: Use latex2html to generate corresponding html code and images
+#
+# l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]):
+#   Call latex2html on $l2h_latex_file
+#   Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir
+#   Return 1, on success
+#          0, otherwise
+#
+sub l2h_ToHtml
+{
+  local($call, $ext, $root, $dotbug);
+  
+  if ($T2H_L2H_SKIP)
+  {
+    print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE);
+    return 1;
+  }
+  
+  # Check for dot in directory where dvips will work
+  if ($T2H_L2H_TMP)
+  {
+    if ($T2H_L2H_TMP =~ /\./)
+    {
+      warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n";
+      $dotbug = 1;
+    }
+  }
+  else
+  {
+    if (&getcwd =~ /\./)
+    {
+     warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n";
+     $dotbug = 1;
+   }
+  }
+  # fix it, if necessary and hope that it works 
+  $T2H_L2H_TMP = "/tmp" if ($dotbug);
+    
+  $call = $T2H_L2H_L2H;
+  # use init file, if specified
+  $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file);
+  # set output dir
+  $call .=  ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir");
+  # use l2h_tmp, if specified
+  $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP);
+  # options we want to be sure of
+  $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link";
+  $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file"; 
+
+  print "# l2h: executing '$call'\n" if ($T2H_VERBOSE);
+  if (system($call))
+  {
+    warn "l2h ***Error: '${call}' did not succeed\n";
+    return 0;
+  }
+  else
+  {
+    print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE);
+    return 1;
+  }
+}
+
+# this is directly pasted over from latex2html
+sub getcwd {
+    local($_) = `pwd`;
+
+    die "'pwd' failed (out of memory?)\n"
+	unless length;
+    chop;
+    $_;
+}
+
+
+##########################
+# Third stage: Extract generated contents from latex2html run
+# Initialize with: l2h_InitFromHtml
+#   open $l2h_html_file for reading
+#   reads in contents into array indexed by numbers
+#   return 1,  on success -- 0, otherwise
+# Extract Html code with: l2h_FromHtml($text)
+#   replaces in $text all previosuly inserted comments by generated html code
+#   returns (possibly changed) $text
+# Finish with: l2h_FinishFromHtml
+#   closes $l2h_html_dir/$l2h_name.".$docu_ext" 
+
+sub l2h_InitFromHtml
+{
+  local($h_line, $h_content, $count, %l2h_img);
+
+  if (! open(L2H_HTML, "<${l2h_html_file}"))
+  {
+    print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n";
+    return 0;
+  }
+  print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE);
+
+  $l2h_html_count = 0;
+  
+  while ($h_line = <L2H_HTML>)
+  {
+    if ($h_line =~ /^<!-- l2h_begin $l2h_name ([0-9]+) -->/)
+    {
+      $count = $1;
+      $h_content = "";
+      while ($h_line = <L2H_HTML>)
+      {
+	if ($h_line =~ /^<!-- l2h_end $l2h_name $count -->/)
+	{
+	  chomp $h_content;
+	  chomp $h_content;
+	  $l2h_html_count++;
+	  $h_content = l2h_ToCache($count, $h_content);
+	  $l2h_from_html[$count] = $h_content;
+	  $h_content = '';
+	  last;
+	}
+	$h_content = $h_content.$h_line;
+      }
+      if ($hcontent)
+      {
+	print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n" 
+	  if ($T2H_VERBOSE);
+	close(L2H_HTML);
+	return 0;
+      }
+    }
+  }
+  print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n"
+    if ($T2H_VERBOSE);
+
+  close(L2H_HTML);
+  return 1;
+}
+
+sub l2h_FromHtml
+{
+  local($text) = @_;
+  local($done, $to_do, $count);
+  
+  $to_do = $text;
+  
+  while ($to_do =~ /([^\000]*)<!-- l2h_replace $l2h_name ([0-9]+) -->([^\000]*)/)
+  {
+    $to_do = $1;
+    $count = $2;
+    $done = $3.$done;
+    
+    $done = "<!-- l2h_end $l2h_name $count -->".$done
+      if ($T2H_DEBUG & $DEBUG_L2H);
+
+    $done = &l2h_ExtractFromHtml($count) . $done;
+
+    $done = "<!-- l2h_begin $l2h_name $count -->".$done
+      if ($T2H_DEBUG & $DEBUG_L2H);
+  }
+  return $to_do.$done;
+}
+
+
+sub l2h_ExtractFromHtml
+{
+  local($count) = @_;
+  
+  return $l2h_from_html[$count] if ($l2h_from_html[$count]);
+  
+  if ($count >= 0 && $count < $l2h_latex_count)
+  {
+    # now we are in trouble
+    local($l_l2h, $_);
+
+    $l2h_extract_error++;
+    print "$ERROR l2h: can't extract content $count from html\n" 
+      if ($T2H_VERBOSE);
+    # try simple (ordinary) substition (without l2h)
+    $l_l2h = $T2H_L2H;
+    $T2H_L2H = 0;
+    $_ = $l2h_to_latex{$count};
+    $_ = &substitute_style($_); 
+    &unprotect_texi;
+    $_ = "<!-- l2h: ". __LINE__ . " use texi2html -->" . $_
+      if ($T2H_DEBUG & $DEBUG_L2H);
+    $T2H_L2H = $l_l2h;
+    return $_;
+  }
+  else
+  {
+    # now we have been incorrectly called
+    $l2h_range_error++;
+    print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n";
+    return "<!-- l2h: ". __LINE__ . " out of range count $count -->"
+      if ($T2H_DEBUG & $DEBUG_L2H);
+    return "<!-- l2h: out of range count $count -->";
+  }
+}
+    
+sub l2h_FinishFromHtml
+{
+  if ($T2H_VERBOSE)
+  {
+    if ($l2h_extract_error + $l2h_range_error)
+    {
+      print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n";
+    }
+    else
+    {
+      print "# l2h: finished from html (no errors)\n";
+    }
+  }
+}
+
+sub l2h_Finish
+{
+  l2h_StoreCache();
+  if ($T2H_L2H_CLEAN)
+  {
+    print "# l2h: removing temporary files generated by l2h extension\n"
+      if $T2H_VERBOSE;
+    while (<"$docu_rdir$l2h_name"*>)
+    {
+      unlink $_;
+    }
+  }
+  print "# l2h: Finished\n" if $T2H_VERBOSE;
+  return 1;
+}
+
+##############################
+# stuff for l2h caching
+#
+
+# I tried doing this with a dbm data base, but it did not store all
+# keys/values. Hence, I did as latex2html does it
+sub l2h_InitCache
+{
+  if (-r "$l2h_cache_file")
+  {
+    my $rdo = do "$l2h_cache_file";
+    warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n")
+      unless ($rdo);
+  }
+}
+
+sub l2h_StoreCache
+{
+  return unless $l2h_latex_count;
+  
+  my ($key, $value);
+  open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n";
+
+  
+  while (($key, $value) = each %l2h_cache)
+  {
+    # escape stuff
+    $key =~ s|/|\\/|g;
+    $key =~ s|\\\\/|\\/|g;
+    # weird, a \ at the end of the key results in an error
+    # maybe this also broke the dbm database stuff
+    $key =~ s|\\$|\\\\|;
+    $value =~ s/\|/\\\|/g; 
+    $value =~ s/\\\\\|/\\\|/g; 
+    $value =~ s|\\\\|\\\\\\\\|g;
+    print FH "\n\$l2h_cache_key = q/$key/;\n";
+    print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n";
+  }
+  print FH "1;";
+  close(FH);
+}
+
+# return cached html, if it exists for text, and if all pictures
+# are there, as well
+sub l2h_FromCache
+{
+  my $text = shift;
+  my $cached = $l2h_cache{$text};
+  if ($cached)
+  {
+    while ($cached =~ m/SRC="(.*?)"/g)
+    {
+      unless (-e "$docu_rdir$1")
+      {
+	return undef;
+      }
+    }
+    return $cached;
+  }
+  return undef;
+}
+
+# insert generated html into cache, move away images, 
+# return transformed html
+$maximage = 1;
+sub l2h_ToCache
+{
+  my $count = shift;
+  my $content = shift;
+  my @images = ($content =~ /SRC="(.*?)"/g);
+  my ($src, $dest);
+
+  for $src (@images)
+  {
+    $dest = $l2h_img{$src};
+    unless ($dest)
+    {
+      my $ext;
+      if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext)
+      {
+	$ext = $1;
+      }
+      else
+      {
+	warn "$ERROR: L2h image $src has invalid extension\n";
+	next;
+      }
+      while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;}
+      $dest = "${docu_name}_$maximage.$ext";
+      system("cp -f $docu_rdir$src $docu_rdir$dest");
+      $l2h_img{$src} = $dest;
+      unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H);
+    }
+    $content =~ s/$src/$dest/g;
+  }
+  $l2h_cache{$l2h_to_latex[$count]} = $content;
+  return $content;
+}
+
 
 #+++############################################################################
 #                                                                              #
@@ -458,25 +2941,34 @@
 
 @lines = ();				# whole document
 @toc_lines = ();			# table of contents
-$toplevel = 0;			        # top level seen in hierarchy
+@stoc_lines = ();			# table of contents
 $curlevel = 0;				# current level in TOC
 $node = '';				# current node name
+$node_next = '';                        # current node next name               
+$node_prev = '';                        # current node prev name
+$node_up = '';                          # current node up name
 $in_table = 0;				# am I inside a table
 $table_type = '';			# type of table ('', 'f', 'v', 'multi')
 @tables = ();			        # nested table support
 $in_bibliography = 0;			# am I inside a bibliography
 $in_glossary = 0;			# am I inside a glossary
 $in_top = 0;				# am I inside the top node
+$has_top = 0;				# did I see a top node?
+$has_top_command = 0;			# did I see @top for automatic pointers?
 $in_pre = 0;				# am I inside a preformatted section
 $in_list = 0;				# am I inside a list
 $in_html = 0;				# am I inside an HTML section
 $first_line = 1;		        # is it the first line
 $dont_html = 0;				# don't protect HTML on this line
-$split_num = 0;				# split index
 $deferred_ref = '';			# deferred reference for indexes
 @html_stack = ();			# HTML elements stack
 $html_element = '';			# current HTML element
 &html_reset;
+%macros = ();                           # macros
+
+# init l2h
+$T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H);
+$T2H_L2H = &l2h_InitToLatex      if ($T2H_L2H);    
 
 # build code for simple substitutions
 # the maps used (%simple_map and %things_map) MUST be aware of this
@@ -499,13 +2991,13 @@
 	} else {
 	    $subst_code .= "s/\\\@\\$_";
 	}
-	$subst_code .= "([aeiou])/&\${1}$accent_map{$_};/gi;\n";
+	$subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n";
     }
 }
 eval("sub simple_substitutions { $subst_code }");
 
 &init_input;
-while ($_ = &next_line) {
+INPUT_LINE: while ($_ = &next_line) {
     #
     # remove \input on the first lines only
     #
@@ -513,56 +3005,123 @@
 	next if /^\\input/;
 	$first_line = 0;
     }
+    # non-@ substitutions cf. texinfmt.el
     #
     # parse texinfo tags
     #
     $tag = '';
     $end_tag = '';
-    if (/^\@end\s+(\w+)\b/) {
+    if (/^\s*\@end\s+(\w+)\b/) {
 	$end_tag = $1;
-    } elsif (/^\@(\w+)\b/) {
+    } elsif (/^\s*\@(\w+)\b/) {
 	$tag = $1;
     }
     #
-    # handle @ifhtml / @end ifhtml
+    # handle @html / @end html
     #
     if ($in_html) {
-	if ($end_tag eq 'ifhtml') {
+	if ($end_tag eq 'html') {
 	    $in_html = 0;
 	} else {
 	    $tag2pro{$in_html} .= $_;
 	}
 	next;
-    } elsif ($tag eq 'ifhtml') {
+    } elsif ($tag eq 'html') {
 	$in_html = $PROTECTTAG . ++$html_num;
 	push(@lines, $in_html);
 	next;
     }
-    #
-    # try to skip the line
-    #
-    if ($end_tag) {
-	next if $to_skip{"end $end_tag"};
-    } elsif ($tag) {
-	next if $to_skip{$tag};
-	last if $tag eq 'bye';
-    }
-    if ($in_top) {
-	# parsing the top node
-	if ($tag eq 'node' || $tag eq 'include' || $sec2level{$tag}) {
-	    # no more in top
-	    $in_top = 0;
-	} else {
-	    # skip it
-	    next;
-	}
-    }
+
     #
     # try to remove inlined comments
     # syntax from tex-mode.el comment-start-skip
     #
-    s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
-    # non-@ substitutions cf. texinfmt.el
+    s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/;
+
+# Sometimes I use @c right at the end of  a line ( to suppress the line feed )
+#    s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/;
+#     s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
+#     s/(.*)\@c{.*?}(.*)/$1$2/;
+#     s/(.*)\@comment{.*?}(.*)/$1$2/;
+#     s/^(.*)\@c /$1/;
+#     s/^(.*)\@comment /$1/;
+
+    #############################################################
+    # value substitution before macro expansion, so that
+    # it works in macro arguments			    
+    s/\@value{($VARRE)}/$value{$1}/eg;
+			    
+    #############################################################
+    # macro substitution
+    while (/\@(\w+)/g)
+    {
+      if (exists($macros->{$1}))    
+      {
+	my $before = $`;
+	my $name = $1;
+	my $after = $';
+	my @args;
+	my $args;
+	if ($after =~ /^\s*{(.*?[^\\])}(.*)/)  
+	{
+	  $args = $1;
+	  $after = $2;
+	}
+	elsif (@{$macros->{$name}->{Args}} == 1)
+	{
+	  $args = $after;
+	  $args =~ s/^\s*//;
+	  $args =~ s/\s*$//;
+	  $after = '';
+	}
+	$args =~ s|\\\\|\\|g;
+	$args =~ s|\\{|{|g;
+        $args =~ s|\\}|}|g;
+	if (@{$macros->{$name}->{Args}} > 1)
+	{
+	  $args =~ s/(^|[^\\]),/$1$;/g ;
+	  $args =~ s|\\,|,|g;
+	  @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1);
+	}
+	else
+	{
+	  $args =~ s|\\,|,|g;
+	  @args = ($args);
+	}
+	my $macrobody = $macros->{$name}->{Body};
+	for ($i=0; $i<=$#args; $i++)
+	{
+	  $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g;
+	}
+	$macrobody =~ s|\\\\|\\|g;
+	$_ = $before . $macrobody . $after;
+	unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_);
+	next INPUT_LINE;
+      }
+    }				#
+			    
+    
+    #
+    # try to skip the line
+    #
+    if ($end_tag) {
+        $in_titlepage = 0 if $end_tag eq 'titlepage';
+	next if $to_skip{"end $end_tag"};
+    } elsif ($tag) {
+      $in_titlepage = 1 if $tag eq 'titlepage';
+      next if $to_skip{$tag};
+      last if $tag eq 'bye';
+    }
+    if ($in_top) {
+	# parsing the top node
+	if ($tag eq 'node' || 
+	    ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/))
+	{
+	    # no more in top
+	    $in_top = 0;
+	    push(@lines, $TOPEND);
+	}
+    }
     unless ($in_pre) {
 	s/``/\"/g;
 	s/''/\"/g;
@@ -574,12 +3133,33 @@
     if ($tag) {
 	# skip lines
 	&skip_until($tag), next if $tag eq 'ignore';
-	if ($expandinfo) {
-	    &skip_until($tag), next if $tag eq 'iftex';
-	} else {
-	    &skip_until($tag), next if $tag eq 'ifinfo';
+	&skip_until($tag), next if $tag eq 'ifnothtml';
+	if ($tag eq 'ifinfo')
+	{
+	  &skip_until($tag), next unless $T2H_EXPAND eq 'info';
 	}
-	&skip_until($tag), next if $tag eq 'tex';
+	if ($tag eq 'iftex')
+	{
+	  &skip_until($tag), next unless $T2H_EXPAND eq 'tex';
+	} 
+	if ($tag eq 'tex')
+	{
+	  # add to latex2html file
+	  if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre)
+	  {
+	    # add space to the end -- tex(i2dvi) does this, as well 
+	    push(@lines, &l2h_ToLatex(&string_until($tag) . " "));
+	  }
+	  else
+	  {
+	    &skip_until($tag);
+	  }
+	  next;
+	}
+	if ($tag eq 'titlepage')
+	{
+	  next;
+	}
 	# handle special tables
 	if ($tag =~ /^(|f|v|multi)table$/) {
 	    $table_type = $1;
@@ -588,35 +3168,37 @@
 	# special cases
 	if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) {
 	    $in_top = 1;
+	    $has_top = 1;
+	    $has_top_command = 1 if $tag eq 'top';
 	    @lines = (); # ignore all lines before top (title page garbage)
 	    next;
 	} elsif ($tag eq 'node') {
+	  if ($in_top)
+	  {
 	    $in_top = 0;
-	    warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
-	    $_ = &protect_html($_); # if node contains '&' for instance
-	    s/^\@node\s+//;
-	    ($node) = split(/,/);
-	    &normalise_node($node);
-	    if ($split_node) {
-		&next_doc;
-		push(@lines, $SPLITTAG) if $split_num++;
-		push(@sections, $node);
-	    }
-	    next;
+	    push(@lines, $TOPEND);
+	  }
+	  warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
+	  # request of "Richard Y. Kim" <ryk@ap.com>
+	  s/^\@node\s+//;
+	  $_ = &protect_html($_); # if node contains '&' for instance
+	  ($node, $node_next, $node_prev, $node_up) = split(/,/);
+	  &normalise_node($node);
+	  &normalise_node($node_next);
+	  &normalise_node($node_prev);
+	  &normalise_node($node_up);
+	  $node =~ /\"/ ?
+	    push @lines, &html_debug("<A NAME='$node'></A>\n", __LINE__) :
+	    push @lines, &html_debug("<A NAME=\"$node\"></A>\n", __LINE__);
+	  next;
 	} elsif ($tag eq 'include') {
 	    if (/^\@include\s+($FILERE)\s*$/o) {
-		$file = $1;
-		unless (-e $file) {
-		    foreach $dir (@include_dirs) {
-			$file = "$dir/$1";
-			last if -e $file;
-		    }
-		}
-		if (-e $file) {
+		$file = LocateIncludeFile($1);
+		if ($file && -e $file) {
 		    &open($file);
-		    print "# including $file\n" if $verbose;
+		    print "# including $file\n" if $T2H_VERBOSE;
 		} else {
-		    warn "$ERROR Can't find $file, skipping";
+		    warn "$ERROR Can't find $1, skipping";
 		}
 	    } else {
 		warn "$ERROR Bad include line: $_";
@@ -639,45 +3221,110 @@
 	    }
 	    next;
 	} elsif ($tag eq 'menu') {
-	    unless ($show_menu) {
+	    unless ($T2H_SHOW_MENU) {
 		&skip_until($tag);
 		next;
 	    }
 	    &html_push_if($tag);
-	    push(@lines, &html_debug("\n", __LINE__));
+	    push(@lines, &html_debug('', __LINE__));
 	} elsif ($format_map{$tag}) {
 	    $in_pre = 1 if $format_map{$tag} eq 'PRE';
 	    &html_push_if($format_map{$tag});
-	    push(@lines, &html_debug("\n", __LINE__));
+	    push(@lines, &html_debug('', __LINE__));
 	    $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ;
-	    push(@lines, &debug("<$format_map{$tag}>\n", __LINE__));
+#	    push(@lines, &debug("<BLOCKQUOTE>\n", __LINE__))
+#	      if $tag =~ /example/i;
+	    # sunshine@sunshineco.com: <PRE>bla</PRE> looks better than
+	    # <PRE>\nbla</PRE> (at least on NeXTstep browser
+	    push(@lines, &debug("<$format_map{$tag}>" . 
+				($in_pre ? '' : "\n"), __LINE__));
 	    next;
+	}
+	elsif (exists $complex_format_map->{$tag})
+	{
+	  my $start = eval $complex_format_map->{$tag}->[0];
+	  if ($@)
+	  {
+	    print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@";
+	    $start = '<pre>'
+	  }
+	  $in_pre = 1 if $start =~ /<pre/;
+	  push(@lines, html_debug($start. ($in_pre ? '' : "\n"), __LINE__));
+	  next;
 	} elsif ($tag eq 'table') {
-	    if (/^\@(|f|v|multi)table\s+\@(\w+)/) {
+	  # anorland@hem2.passagen.se
+	  # if (/^\s*\@(|f|v|multi)table\s+\@(\w+)/) {
+	     if (/^\s*\@(|f|v|multi)table\s+\@(\w+)|(\{[^\}]*\})/) {
 		$in_table = $2;
 		unshift(@tables, join($;, $table_type, $in_table));
 		if ($table_type eq "multi") {
-		    push(@lines, &debug("<TABLE BORDER>\n", __LINE__));
+		    # don't use borders -- gets confused by empty cells
+		    push(@lines, &debug("<TABLE>\n", __LINE__));
 		    &html_push_if('TABLE');
 		} else {
 		    push(@lines, &debug("<DL COMPACT>\n", __LINE__));
 		    &html_push_if('DL');
 		}
-		push(@lines, &html_debug("\n", __LINE__));
+		push(@lines, &html_debug('', __LINE__));
 	    } else {
 		warn "$ERROR Bad table line: $_";
 	    }
 	    next;
-	} elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') {
-	    if (/^\@$tag\s+(\w)\w\s+(\w)\w\s*$/) {
-		eval("*${1}index = *${2}index");
-	    } else {
-		warn "$ERROR Bad syn*index line: $_";
+	} 
+	elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') 
+	{
+	  if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/) 
+	  {
+	    my $from = $1;
+	    my $to = $2;
+	    my $prefix_from = IndexName2Prefix($from);
+	    my $prefix_to = IndexName2Prefix($to);
+
+	    warn("$ERROR unknown from index name $from ind syn*index line: $_"), next
+	      unless $prefix_from;
+	    warn("$ERROR unknown to index name $to ind syn*index line: $_"), next
+	      unless $prefix_to;
+
+	    if ($tag eq 'syncodeindex')
+	    {
+	      $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1;
 	    }
-	    next;
-	} elsif ($tag eq 'sp') {
+	    else
+	    {
+	       $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1;
+	    }
+	  } 
+	  else 
+	  {
+	    warn "$ERROR Bad syn*index line: $_";
+	  }
+	  next;
+	} 
+	elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') 
+	{
+	  if (/^\@$tag\s+(\w+)\s*$/) 
+	  {
+	    my $name = $1;
+	    $index_properties->{$name}->{name} = $name;
+	    $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex';
+	  } 
+	  else 
+	  {
+	    warn "$ERROR Bad defindex line: $_";
+	  }
+	  next;
+	}
+	elsif (/^\@printindex/)
+	{
+	  push (@lines, "<!--::${section}::-->$_");
+	  next;
+	}
+	elsif ($tag eq 'sp') {
 	    push(@lines, &debug("<P>\n", __LINE__));
 	    next;
+	} elsif ($tag eq 'center') {
+	    push(@lines, &debug("<center>\n", __LINE__));
+	    s/\@center//;
 	} elsif ($tag eq 'setref') {
 	    &protect_html; # if setref contains '&' for instance
 	    if (/^\@$tag\s*{($NODERE)}\s*$/) {
@@ -685,19 +3332,60 @@
 		$setref =~ s/\s+/ /g; # normalize
 		$setref =~ s/ $//;
 		$node2sec{$setref} = $name;
+		$sec2node{$name} = $setref;
 		$node2href{$setref} = "$docu_doc#$docid";
 	    } else {
 		warn "$ERROR Bad setref line: $_";
 	    }
 	    next;
-	} elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') {
-	    if (/^\@$tag\s+(\w\w)\s*$/) {
-		$valid_index{$1} = 1;
-	    } else {
-		warn "$ERROR Bad defindex line: $_";
+	} elsif ($tag eq 'lowersections') {
+	    local ($sec, $level);
+	    while (($sec, $level) = each %sec2level) {
+		$sec2level{$sec} = $level + 1;
 	    }
 	    next;
-	} elsif (defined($def_map{$tag})) {
+	} elsif ($tag eq 'raisesections') {
+	    local ($sec, $level);
+	    while (($sec, $level) = each %sec2level) {
+		$sec2level{$sec} = $level - 1;
+	    }
+	    next;
+	}
+	elsif ($tag eq 'macro' || $tag eq 'rmacro')
+	{
+	  if (/^\@$tag\s*(\w+)\s*(.*)/)
+	  {
+	    my $name = $1;
+	    my @args;
+	    @args = split(/\s*,\s*/ , $1)
+	      if ($2 =~ /^\s*{(.*)}\s*/);
+	    
+	    $macros->{$name}->{Args} = \@args;
+	    $macros->{$name}->{Body} = '';
+	    while (($_ = &next_line) && $_ !~ /\@end $tag/)
+	    {
+	      $macros->{$name}->{Body} .= $_;
+	    }
+	    die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n"
+	      unless (/\@end $tag/);
+	    chomp $macros->{$name}->{Body};
+	  }
+	  else
+	  {
+	    warn "$ERROR: Bad macro defintion $_"
+	  }
+	  next;
+	}
+	elsif ($tag eq 'unmacro')
+	{
+	  delete $macros->{$1} if (/^\@unmacro\s*(\w+)/);
+	  next;
+	}
+	elsif ($tag eq 'documentlanguage')
+	{
+	  SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/);
+	}
+	elsif (defined($def_map{$tag})) {
 	    if ($def_map{$tag}) {
 		s/^\@$tag\s+//;
 		$tag = $def_map{$tag};
@@ -707,7 +3395,7 @@
 	} elsif (defined($user_sub{$tag})) {
 	    s/^\@$tag\s+//;
 	    $sub = $user_sub{$tag};
-	    print "# user $tag = $sub, arg: $_" if $debug & $DEBUG_USER;
+	    print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER;
 	    if (defined(&$sub)) {
 		chop($_);
 		&$sub($_);
@@ -715,7 +3403,7 @@
 		warn "$ERROR Bad user sub for $tag: $sub\n";
 	    }
 	    next;
-	}
+	  } 
 	if (defined($def_map{$tag})) {
 	    s/^\@$tag\s+//;
 	    if ($tag =~ /x$/) {
@@ -742,9 +3430,9 @@
 	    $type = shift(@args);
 	    $type =~ s/^\{(.*)\}$/$1/;
 	    print "# def ($tag): {$type} ", join(', ', @args), "\n"
-		if $debug & $DEBUG_DEF;
+		if $T2H_DEBUG & $DEBUG_DEF;
 	    $type .= ':'; # it's nicer like this
-	    $name = shift(@args);
+	    my $name = shift(@args);
 	    $name =~ s/^\{(.*)\}$/$1/;
 	    if ($is_extra) {
 		$_ = &debug("<DT>", __LINE__);
@@ -769,13 +3457,17 @@
  	    $_ .= &debug("\n<DD>", __LINE__);
 	    $name = &unprotect_html($name);
 	    if ($tag eq 'deffn' || $tag eq 'deftypefn') {
-		unshift(@input_spool, "\@findex $name\n");
+	      EnterIndexEntry('f', $name, $docu_doc, $section, \@lines);
+#		unshift(@input_spool, "\@findex $name\n");
 	    } elsif ($tag eq 'defop') {
-		unshift(@input_spool, "\@findex $name on $ftype\n");
+	      EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines);
+#		unshift(@input_spool, "\@findex $name on $ftype\n");
 	    } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') {
-		unshift(@input_spool, "\@vindex $name\n");
+	      EnterIndexEntry('v', $name, $docu_doc, $section, \@lines);
+#		unshift(@input_spool, "\@vindex $name\n");
 	    } else {
-		unshift(@input_spool, "\@tindex $name\n");
+	      EnterIndexEntry('t', $name, $docu_doc, $section, \@lines);
+#		unshift(@input_spool, "\@tindex $name\n");
 	    }
 	    $dont_html = 1;
 	}
@@ -783,15 +3475,28 @@
 	if ($format_map{$end_tag}) {
 	    $in_pre = 0 if $format_map{$end_tag} eq 'PRE';
 	    $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ;
-	    &html_pop_if('LI', 'P');
+	    &html_pop_if('P');
+	    &html_pop_if('LI');
 	    &html_pop_if();
 	    push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__));
-	    push(@lines, &html_debug("\n", __LINE__));
+	    push(@lines, &html_debug('', __LINE__));
+	}
+	elsif (exists $complex_format_map->{$end_tag})
+	{
+	  my $end = eval $complex_format_map->{$end_tag}->[1];
+	  if ($@)
+	  {
+	    print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@";
+	    $end = '</pre>'
+	  }
+	  $in_pre = 0 if $end =~ m|</pre>|;
+	  push(@lines, html_debug($end, __LINE__));
 	} elsif ($end_tag =~ /^(|f|v|multi)table$/) {
 	    unless (@tables) {
 		warn "$ERROR \@end $end_tag without \@*table\n";
 		next;
 	    }
+	    &html_pop_if('P');
 	    ($table_type, $in_table) = split($;, shift(@tables));
 	    unless ($1 eq $table_type) {
 		warn "$ERROR \@end $end_tag without matching \@$end_tag\n";
@@ -815,103 +3520,154 @@
 	} elsif ($end_tag eq 'menu') {
 	    &html_pop_if();
 	    push(@lines, $_); # must keep it for pass 2
-	}
+	} 
 	next;
     }
-    #
-    # misc things
+    #############################################################
+    # anchor insertion
+    while (/\@anchor\s*\{(.*?)\}/)
+    {
+      $_ = $`.$';
+      my $anchor = $1;
+      $anchor = &normalise_node($anchor);
+      push @lines, &html_debug("<A NAME=\"$anchor\"></A>\n");
+      $node2href{$anchor} = "$docu_doc#$anchor";
+      next INPUT_LINE if $_ =~ /^\s*$/;
+    }
+
+    #############################################################
+    # index entry generation, after value substitutions
+    if (/^\@(\w+?)index\s+/)
+    {
+      EnterIndexEntry($1, $', $docu_doc, $section, \@lines);
+      next;
+    }
     #
     # protect texi and HTML things
     &protect_texi;
     $_ = &protect_html($_) unless $dont_html;
     $dont_html = 0;
     # substitution (unsupported things)
-    s/^\@center\s+//g;
     s/^\@exdent\s+//g;
     s/\@noindent\s+//g;
     s/\@refill\s+//g;
     # other substitutions
     &simple_substitutions;
-    s/\@value{($VARRE)}/$value{$1}/eg;
     s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4
     #
     # analyze the tag again
     #
     if ($tag) {
-	if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
+      if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
 	    if (/^\@$tag\s+(.+)$/) {
 		$name = $1;
-		$name =~ s/\s+$//;
+		$name = &normalise_node($name);
 		$level = $sec2level{$tag};
-		$name = &update_sec_num($tag, $level) . "  $name"
-		    if $number_sections && $tag !~ /^unnumbered/;
-		if ($tag =~ /heading$/) {
-		    push(@lines, &html_debug("\n", __LINE__));
-		    if ($html_element ne 'body') {
-			# We are in a nice pickle here. We are trying to get a H? heading
-			# even though we are not in the body level. So, we convert it to a
-			# nice, bold, line by itself.
-			$_ = &debug("\n\n<P><STRONG>$name</STRONG></P>\n\n", __LINE__);
-		    } else {
-			$_ = &debug("<H$level>$name</H$level>\n", __LINE__);
-			&html_push_if('body');
+		# check for index
+		$first_index_chapter = $name
+		  if ($level == 1 && !$first_index_chapter && 
+		      $name =~ /index/i);
+		if ($in_top && /heading/){
+		    $T2H_HAS_TOP_HEADING = 1;
+                    $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
+		    &html_push_if('body');
+		    print "# top heading, section $name, level $level\n"
+			if $T2H_DEBUG & $DEBUG_TOC;
+		}
+		else
+		{
+		  unless (/^\@\w*heading/)
+		  {
+		    unless (/^\@unnumbered/)
+		    {
+		      my $number = &update_sec_num($tag, $level);
+		      $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS;
+		      $sec2number{$name} = $number;
+		      $number2sec{$number} = $name;
 		    }
-		    print "# heading, section $name, level $level\n"
-			if $debug & $DEBUG_TOC;
-		} else {
-		    if ($split_chapter) {
-			unless ($toplevel) {
-			    # first time we see a "section"
-			    unless ($level == 1) {
-				warn "$ERROR The first section found is not of level 1: $_";
-				warn "$ERROR I'll split on sections of level $level...\n";
-			    }
-			    $toplevel = $level;
-			}
-			if ($level == $toplevel) {
-			    &next_doc;
-			    push(@lines, $SPLITTAG) if $split_num++;
-			    push(@sections, $name);
-			}
+		    if (defined($toplevel))
+		    {
+		      push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND);
 		    }
-		    $sec_num++;
-		    $docid = "SEC$sec_num";
-		    $tocid = "TOC$sec_num";
-		    # check biblio and glossary
-		    $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
-		    $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
-		    # check node
-		    if ($node) {
-			if ($node2sec{$node}) {
-			    warn "$ERROR Duplicate node found: $node\n";
-			} else {
-			    $node2sec{$node} = $name;
-			    $node2href{$node} = "$docu_doc#$docid";
-			    print "# node $node, section $name, level $level\n"
-				if $debug & $DEBUG_TOC;
-			}
-			$node = '';
-		    } else {
-			print "# no node, section $name, level $level\n"
-			    if $debug & $DEBUG_TOC;
+		    else
+		    {
+		      # first time we see a "section"
+		      unless ($level == 1) 
+		      {
+			warn "$WARN The first section found is not of level 1: $_";
+		      }
+		      $toplevel = $level;
 		    }
+		    push(@sections, $name);
+		    next_doc() if ($T2H_SPLIT eq 'section' ||
+				   $T2H_SPLIT && $level == $toplevel);
+		  }
+		  $sec_num++;
+		  $docid = "SEC$sec_num";
+		  $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num");
+		  # check biblio and glossary
+		  $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
+		  $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
+		  # check node
+		  if ($node)
+		  {
+		    warn "$ERROR Duplicate node found: $node\n"
+		      if ($node2sec{$node});
+		  }
+		  else
+		  {
+		    $name .= ' ' while ($node2sec{$name});
+		    $node = $name;
+		  }
+		  $name .= ' ' while ($sec2node{$name});
+		  $section = $name; 
+		  $node2sec{$node} = $name;
+		  $sec2node{$name} = $node;
+		  $node2href{$node} = "$docu_doc#$docid";
+		  $node2next{$node} = $node_next;
+		  $node2prev{$node} = $node_prev;
+		  $node2up{$node} = $node_up;
+		  print "# node $node, section $name, level $level\n"
+		    if $T2H_DEBUG & $DEBUG_TOC;
+
+		  $node = '';
+		  $node_next = '';
+		  $node_prev = '';
+		  $node_next = '';
+		  if ($tocid)
+		  {
 		    # update TOC
 		    while ($level > $curlevel) {
-			$curlevel++;
-			push(@toc_lines, "<UL>\n");
+		      $curlevel++;
+		      push(@toc_lines, "<UL>\n");
 		    }
 		    while ($level < $curlevel) {
-			$curlevel--;
-			push(@toc_lines, "</UL>\n");
+		      $curlevel--;
+		      push(@toc_lines, "</UL>\n");
 		    }
-		    $_ = "<LI>" . &anchor($tocid, "$docu_doc#$docid", $name, 1);
-		    push(@toc_lines, &substitute_style($_));
-		    # update DOC
-		    push(@lines, &html_debug("\n", __LINE__));
-		    &html_reset;
-		    $_ =  "<H$level>".&anchor($docid, "$docu_toc#$tocid", $name)."</H$level>\n";
-		    $_ = &debug($_, __LINE__);
-		    push(@lines, &html_debug("\n", __LINE__));
+		    $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1);
+		    $_ = &substitute_style($_);
+		    push(@stoc_lines, "$_<BR>\n") if ($level == 1);
+		    if ($T2H_NUMBER_SECTIONS)
+		    {
+		      push(@toc_lines, $_ . "<BR>\n")
+		    }
+		    else
+		    {
+		      push(@toc_lines, "<LI>" . $_ ."</LI>");
+		    }
+		  }
+		  else
+		  {
+		    push(@lines, &html_debug("<A NAME=\"$docid\"></A>\n", 
+					   __LINE__));
+		  }
+		  # update DOC
+		  push(@lines, &html_debug('', __LINE__));
+		  &html_reset;
+		  $_ =  "<H$level> $name </H$level>\n<!--docid::${docid}::-->\n";
+		  $_ = &debug($_, __LINE__);
+		  push(@lines, &html_debug('', __LINE__));
 		}
 		# update DOC
 		foreach $line (split(/\n+/, $_)) {
@@ -923,59 +3679,18 @@
 	    }
 	} else {
 	    # track variables
-	    $value{$1} = $2, next if /^\@set\s+($VARRE)\s+(.*)$/o;
+	    $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o;
 	    delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o;
 	    # store things
-	    $value{'_setfilename'}   = $1, next if /^\@setfilename\s+(.*)$/;
-	    $value{'_settitle'}      = $1, next if /^\@settitle\s+(.*)$/;
-	    $value{'_author'}   .= "$1\n", next if /^\@author\s+(.*)$/;
-	    $value{'_subtitle'} .= "$1\n", next if /^\@subtitle\s+(.*)$/;
-	    $value{'_title'}    .= "$1\n", next if /^\@title\s+(.*)$/;
-	    # index
-	    if (/^\@(..?)index\s+/) {
-		unless ($valid_index{$1}) {
-		    warn "$ERROR Undefined index command: $_";
-		    next;
-		}
-		$id = 'IDX' . ++$idx_num;
-		$index = $1 . 'index';
-		$what = &substitute_style($');
-		$what =~ s/\s+$//;
-		print "# found $index for '$what' id $id\n"
-		    if $debug & $DEBUG_INDEX;
-		eval(<<EOC);
-		if (defined(\$$index\{\$what\})) {
-		    \$$index\{\$what\} .= "$;$docu_doc#$id";
-		} else {
-		    \$$index\{\$what\} = "$docu_doc#$id";
-		}
-EOC
-		#
-		# dirty hack to see if I can put an invisible anchor...
-		#
-		if ($html_element eq 'P' ||
-		    $html_element eq 'LI' ||
-		    $html_element eq 'DT' ||
-		    $html_element eq 'DD' ||
-		    $html_element eq 'ADDRESS' ||
-		    $html_element eq 'B' ||
-		    $html_element eq 'BLOCKQUOTE' ||
-		    $html_element eq 'PRE' ||
-		    $html_element eq 'SAMP') {
-                    push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
-                } elsif ($html_element eq 'body') {
-		    push(@lines, &debug("<P>\n", __LINE__));
-                    push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
-		    &html_push('P');
-		} elsif ($html_element eq 'DL' ||
-			 $html_element eq 'UL' ||
-			 $html_element eq 'OL' ) {
-		    $deferred_ref .= &anchor($id, '', $invisible_mark, !$in_pre) . " ";
-		}
-		next;
-	    }
+	    $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/;
+	    $value{'_setfilename'}   = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/;
+	    $value{'_settitle'}      = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/;
+	    $value{'_author'}   .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/;
+	    $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/;
+	    $value{'_title'}    .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/;
+
 	    # list item
-	    if (/^\@itemx?\s+/) {
+	    if (/^\s*\@itemx?\s+/) {
 		$what = $';
 		$what =~ s/\s+$//;
 		if ($in_bibliography && $use_bibliography) {
@@ -983,17 +3698,21 @@
 			$id = 'BIB' . ++$bib_num;
 			$bib2href{$what} = "$docu_doc#$id";
 			print "# found bibliography for '$what' id $id\n"
-			    if $debug & $DEBUG_BIB;
-			$what = &anchor($id, '', $what);
+			    if $T2H_DEBUG & $DEBUG_BIB;
+			$what = &t2h_anchor($id, '', $what);
 		    }
-		} elsif ($in_glossary && $use_glossary) {
+		} elsif ($in_glossary && $T2H_USE_GLOSSARY) {
 		    $id = 'GLOSS' . ++$gloss_num;
 		    $entry = $what;
 		    $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
 		    $gloss2href{$entry} = "$docu_doc#$id";
 		    print "# found glossary for '$entry' id $id\n"
-			if $debug & $DEBUG_GLOSS;
-		    $what = &anchor($id, '', $what);
+			if $T2H_DEBUG & $DEBUG_GLOSS;
+		    $what = &t2h_anchor($id, '', $what);
+		}
+		elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v'))
+		{
+		  EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines);
 		}
 		&html_pop_if('P');
 		if ($html_element eq 'DL' || $html_element eq 'DD') {
@@ -1018,7 +3737,7 @@
 		    push(@lines, &debug("<LI>$what\n", __LINE__));
 		    &html_push('LI') unless $html_element eq 'LI';
 		}
-		push(@lines, &html_debug("\n", __LINE__));
+		push(@lines, &html_debug('', __LINE__));
 		if ($deferred_ref) {
 		    push(@lines, &debug("$deferred_ref\n", __LINE__));
 		    $deferred_ref = '';
@@ -1031,20 +3750,25 @@
 	}
     }
     # paragraph separator
-    if ($_ eq "\n") {
+    if ($_ eq "\n" && ! $in_pre) {
 	next if $#lines >= 0 && $lines[$#lines] eq "\n";
 	if ($html_element eq 'P') {
-	    push(@lines, "\n");
-	    $_ = &debug("</P>\n", __LINE__);
-	    &html_pop;
+	    push (@lines, &debug("</P><P>\n", __LINE__));
 	}
-    } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE') {
-	push(@lines, "<P>\n");
-	&html_push('P');
-	$_ = &debug($_, __LINE__);
-    }
+# 	else
+# 	{
+# 	  push(@lines, "<P></P>\n");
+# 	  $_ = &debug("<P></P>\n", __LINE__);
+# 	}
+        elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI') 
+	{
+	  &html_push('P');
+	  push(@lines, &debug("<P>\n", __LINE__));
+	}
+      }
     # otherwise
-    push(@lines, $_);
+    push(@lines, $_) unless $in_titlepage;
+    push(@lines, &debug("</center>\n", __LINE__))  if ($tag eq 'center');
 }
 
 # finish TOC
@@ -1054,7 +3778,327 @@
     push(@toc_lines, "</UL>\n");
 }
 
-print "# end of pass 1\n" if $verbose;
+print "# end of pass 1\n" if $T2H_VERBOSE;
+
+SetDocumentLanguage('en') unless ($T2H_LANG);
+#+++############################################################################
+#                                                                              #
+# Stuff related to Index generation                                            #
+#                                                                              #
+#---############################################################################
+
+sub EnterIndexEntry
+{
+  my $prefix = shift;
+  my $key = shift;
+  my $docu_doc = shift;
+  my $section = shift;
+  my $lines = shift;
+  local $_;
+
+  warn "$ERROR Undefined index command: $_", next
+    unless (exists ($index_properties->{$prefix}));
+  $key =~ s/\s+$//;
+  $_ = $key;
+  &protect_texi;
+  $key = $_;
+  $_ = &protect_html($_);
+  my $html_key = substitute_style($_);
+  my $id;
+  $key = remove_style($key);
+  $key = remove_things($key);
+  $_ = $key;
+  &unprotect_texi;
+  $key = $_;
+  while (exists $index->{$prefix}->{$key}) {$key .= ' '};
+  if ($lines->[$#lines] =~ /^<!--docid::(.+)::-->$/)
+  {
+    $id = $1;
+  }
+  else
+  {
+    $id = 'IDX' . ++$idx_num;
+    push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre));
+  }
+  $index->{$prefix}->{$key}->{html_key} = $html_key;
+  $index->{$prefix}->{$key}->{section} = $section;
+  $index->{$prefix}->{$key}->{href} = "$docu_doc#$id";
+  print "# found ${prefix}index  for '$key' with id $id\n"
+    if $T2H_DEBUG & $DEBUG_INDEX;
+}
+
+sub IndexName2Prefix
+{
+  my $name = shift;
+  my $prefix;
+
+  for $prefix (keys %$index_properties)
+  {
+    return $prefix if ($index_properties->{$prefix}->{name} eq $name);
+  }
+  return undef;
+}
+
+sub GetIndexEntries
+{
+  my $normal = shift;
+  my $code = shift;
+  my ($entries, $prefix, $key) = ({});
+  
+  for $prefix (keys %$normal)
+  {
+    for $key (keys %{$index->{$prefix}})
+    {
+      $entries->{$key} = {%{$index->{$prefix}->{$key}}};
+    }
+  }
+
+  if (defined($code))
+  {
+    for $prefix (keys %$code)
+    {
+      unless (exists $normal->{$keys})
+      {
+	for $key (keys %{$index->{$prefix}})
+	{
+	  $entries->{$key} = {%{$index->{$prefix}->{$key}}};
+	  $entries->{$key}->{html_key} = "<CODE>$entries->{$key}->{html_key}</CODE>";
+	}
+      }
+    }
+  }
+  return $entries;
+}
+
+sub byAlpha
+{
+  if ($a =~ /^[A-Za-z]/)
+  {
+    if ($b =~ /^[A-Za-z]/)
+    {
+      return lc($a) cmp lc($b);
+    }
+    else
+    {
+      return 1;
+    }
+  }
+  elsif ($b =~ /^[A-Za-z]/)
+  {
+    return -1;
+  }
+  else
+  {
+    return lc($a) cmp lc($b);
+  } 
+}
+
+sub GetIndexPages
+{
+  my $entries = shift;
+  my (@Letters, $key);
+  my ($EntriesByLetter, $Pages, $page) = ({}, [], {});
+  my @keys = sort byAlpha keys %$entries;
+
+  for $key (@keys)
+  {
+    push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key};
+  }
+  @Letters = sort byAlpha keys %$EntriesByLetter;
+  
+  $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT);
+
+  unless ($T2H_SPLIT_INDEX)
+  {
+    $page->{First} = $Letters[0];
+    $page->{Last} = $Letters[$#Letters];
+    $page->{Letters} = \@Letters;
+    $page->{EntriesByLetter} = $EntriesByLetter;
+    push @$Pages, $page;
+    return $Pages;
+  }
+
+  if ($T2H_SPLIT_INDEX =~ /^\d+$/)
+  {
+    my $i = 0;
+    my ($prev_letter, $letter);
+    $page->{First} = $Letters[0];
+    for $letter (@Letters)
+    {
+      if ($i > $T2H_SPLIT_INDEX)
+      {
+	$page->{Last} = $prev_letter;
+	push @$Pages, {%$page};
+	$page->{Letters} = [];
+	$page->{EntriesByLetter} = {};
+	$page->{First} = $letter;
+	$i=0;
+      }
+      push @{$page->{Letters}}, $letter;
+      $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}];
+      $i += scalar(@{$EntriesByLetter->{$letter}});
+      $prev_letter = $letter;
+    }
+    $page->{Last} = $Letters[$#Letters];
+    push @$Pages, {%$page};
+  }
+  return $Pages;
+}
+
+sub GetIndexSummary
+{
+  my $first_page = shift;
+  my $Pages = shift;
+  my $name = shift;
+  my ($page, $letter, $summary, $i, $l1, $l2, $l);
+
+  $i = 0;
+  $summary = '<table><tr><th valign=top>Jump to: &nbsp; </th><td>';
+  
+  for $page ($first_page, @$Pages)
+  {
+    for $letter (@{$page->{Letters}})
+    {
+      $l = t2h_anchor('', "$page->{href}#${name}_$letter", "<b>$letter</b>", 
+		      0, 'style="text-decoration:none"') . "\n &nbsp; \n";
+      
+      if ($letter =~ /^[A-Za-z]/)
+      {
+	$l2 .= $l;
+      }
+      else
+      {
+	$l1 .= $l;
+      }
+    }
+  }
+  $summary .= $l1 . "<BR>\n" if ($l1);
+  $summary .= $l2 . '</td></tr></table><br>';
+  return $summary;
+}
+
+sub PrintIndexPage
+{
+  my $lines = shift;
+  my $summary = shift;
+  my $page = shift;
+  my $name = shift;
+
+  push @$lines, $summary;
+
+  push @$lines , <<EOT;
+<P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+EOT
+
+  for $letter (@{$page->{Letters}})
+  {
+    push @$lines, "<TR><TH><A NAME=\"${name}_$letter\"></A>$letter</TH><TD></TD><TD></TD></TR>\n";
+    for $entry (@{$page->{EntriesByLetter}->{$letter}})
+    {
+      push @$lines, 
+      "<TR><TD></TD><TD valign=top>" . 
+	t2h_anchor('', $entry->{href}, $entry->{html_key}) .
+	  "</TD><TD valign=top>" . 
+	    t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) .
+	      "</TD></TR>\n";
+    }
+    push @$lines, "<TR><TD COLSPAN=3> <HR></TD></TR>\n";
+  }
+  push @$lines, "</TABLE><P></P>";
+  push @$lines, $summary;
+}
+
+sub PrintIndex
+{
+  my $lines = shift;
+  my $name = shift;
+  my $section = shift;
+  $section = 'Top' unless $section;
+  my $prefix = IndexName2Prefix($name);
+
+  warn ("$ERROR printindex: bad index name: $name"), return 
+    unless $prefix;
+
+  if ($index_properties->{$prefix}->{code})
+  {
+    $index_properties->{$prefix}->{from_code}->{$prefix} = 1;
+  }
+  else
+  {
+    $index_properties->{$prefix}->{from}->{$prefix}= 1;
+  }
+
+  my $Entries = GetIndexEntries($index_properties->{$prefix}->{from}, 
+				$index_properties->{$prefix}->{from_code});
+  return unless %$Entries;
+
+  if ($T2H_IDX_SUMMARY)
+  {
+    my $key;
+    open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx")
+      || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n";
+    print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE;
+
+    for $key (sort keys %$Entries)
+    {
+      print FHIDX "$key\t$Entries->{$key}->{href}\n";
+    }
+  }
+
+  my $Pages = GetIndexPages($Entries);
+  my $page;
+  my $first_page = shift @$Pages;
+  my $sec_name = $section;
+  # remove section number
+  $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./;
+
+  ($first_page->{href} = sec_href($section)) =~ s/\#.*$//;
+  # Update tree structure of document
+  if (@$Pages)
+  {
+    my $sec;
+    my @after;
+
+    while (@sections && $sections[$#sections] ne $section)
+    {
+      unshift @after, pop @sections;
+    }
+
+    for $page (@$Pages)
+    {
+      my $node = ($page->{First} ne $page->{Last} ? 
+		  "$sec_name: $page->{First} -- $page->{Last}" :
+		  "$sec_name: $page->{First}");
+      push @sections, $node;
+      $node2sec{$node} = $node;
+      $sec2node{$node} = $node;
+      $node2up{$node} = $section;
+      $page->{href} = next_doc();
+      $page->{name} = $node;
+      $node2href{$node} = $page->{href};
+      if ($prev_node)
+      {
+	$node2next{$prev_node} = $node;
+	$node2prev{$node} = $prev_node;
+      }
+      $prev_node = $node;
+    }
+    push @sections, @after;
+  }
+
+  my $summary = GetIndexSummary($first_page, $Pages, $name);
+  PrintIndexPage($lines, $summary, $first_page, $name);
+  for $page (@$Pages)
+  {
+    push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
+    push @$lines, "<H2 ALIGN=\"Left\">$page->{name}</H2>\n";
+    PrintIndexPage($lines, $summary, $page, $name);
+  }
+}
+
 
 #+++############################################################################
 #                                                                              #
@@ -1078,78 +4122,78 @@
     #
     # menu
     #
-    $in_menu = 1, push(@lines2, &debug("<UL>\n", __LINE__)), next if /^\@menu\b/;
-    $in_menu = 0, push(@lines2, &debug("</UL>\n", __LINE__)), next if /^\@end\s+menu\b/;
-    if ($in_menu) {
-	if (/^\*\s+($NODERE)::/o) {
-	    $descr = $';
-	    chop($descr);
-	    &menu_entry($1, $1, $descr);
-	} elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) {
-	    $descr = $';
-	    chop($descr);
-	    &menu_entry($1, $2, $descr);
-	} elsif (/^\*/) {
-	    warn "$ERROR Bad menu line: $_";
-	} else { # description continued?
-	    push(@lines2, $_);
+    if (/^\@menu\b/)
+    {
+      $in_menu = 1;
+      $in_menu_listing = 1;
+      push(@lines2, &debug("<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> \n", __LINE__));
+      next;
+    }
+    if (/^\@end\s+menu\b/)
+    {
+      if ($in_menu_listing)
+      {
+	push(@lines2, &debug("</TABLE></BLOCKQUOTE>\n", __LINE__));
+      }
+      else
+      {
+	push(@lines2, &debug("</BLOCKQUOTE>\n", __LINE__));
+      }
+      $in_menu = 0;
+      $in_menu_listing = 0;
+      next;
+    }
+    if ($in_menu) 
+    {
+      my ($node, $name, $descr);
+      if (/^\*\s+($NODERE)::/o)
+      {
+	$node = $1;
+	$descr = $';
+      }
+      elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/)
+      {
+	$name = $1;
+	$node = $2;
+	$descr = $';
+      }
+      elsif (/^\*/) 
+      {
+	warn "$ERROR Bad menu line: $_";
+      }
+      else
+      {
+	if ($in_menu_listing)
+	{
+	  $in_menu_listing = 0;
+	  push(@lines2, &debug("</TABLE>\n", __LINE__));
 	}
-	next;
+	# should be like verbatim -- preseve spaces, etc
+	s/ /\&nbsp;/g;
+	$_ .= "<br>\n";
+	push(@lines2, $_);
+      }
+      if ($node)
+      {
+	if (! $in_menu_listing)
+	{
+	  $in_menu_listing = 1;
+	  push(@lines2, &debug("<TABLE BORDER=0 CELLSPACING=0>\n", __LINE__));
+	}
+	# look for continuation
+	while ($lines[0] =~ /^\s+\w+/)
+	{
+	  $descr .= shift(@lines);
+	}
+	&menu_entry($node, $name, $descr);
+      } 
+      next;
     }
     #
     # printindex
     #
-    if (/^\@printindex\s+(\w\w)\b/) {
-	local($index, *ary, @keys, $key, $letter, $last_letter, @refs);
-	if ($predefined_index{$1}) {
-	    $index = $predefined_index{$1} . 'index';
-	} else {
-	    $index = $1 . 'index';
-	}
-	eval("*ary = *$index");
-	@keys = keys(%ary);
-	foreach $key (@keys) {
-	    $_ = $key;
-	    1 while s/<(\w+)>\`(.*)\'<\/\1>/$2/; # remove HTML tags with quotes
-	    1 while s/<(\w+)>(.*)<\/\1>/$2/;     # remove HTML tags
-	    $_ = &unprotect_html($_);
-	    &unprotect_texi;
-	    tr/A-Z/a-z/; # lowercase
-	    $key2alpha{$key} = $_;
-	    print "# index $key sorted as $_\n"
-		if $key ne $_ && $debug & $DEBUG_INDEX;
-	}
-	push(@lines2, "Jump to:\n");
-	$last_letter = undef;
-	foreach $key (sort byalpha @keys) {
-	    $letter = substr($key2alpha{$key}, 0, 1);
-	    $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
-	    if (!defined($last_letter) || $letter ne $last_letter) {
-		push(@lines2, "-\n") if defined($last_letter);
-		push(@lines2, "<A HREF=\"#$index\_$letter\">" . &protect_html($letter) . "</A>\n");
-		$last_letter = $letter;
-	    }
-	}
-	push(@lines2, "<P>\n");
-	$last_letter = undef;
-	foreach $key (sort byalpha @keys) {
-	    $letter = substr($key2alpha{$key}, 0, 1);
-	    $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
-	    if (!defined($last_letter) || $letter ne $last_letter) {
-		push(@lines2, "</DIR>\n") if defined($last_letter);
-		push(@lines2, "<H2><A NAME=\"$index\_$letter\">" . &protect_html($letter) . "</A></H2>\n");
-		push(@lines2, "<DIR>\n");
-		$last_letter = $letter;
-	    }
-	    @refs = ();
-	    foreach (split(/$;/, $ary{$key})) {
-		push(@refs, &anchor('', $_, $key, 0));
-	    }
-	    push(@lines2, "<LI>" . join(", ", @refs) . "\n");
-	}
-	push(@lines2, "</DIR>\n") if defined($last_letter);
-	next;
-    }
+    PrintIndex(\@lines2, $2, $1), next
+      if (/^<!--::(.*)::-->\@printindex\s+(\w+)/);
     #
     # simple style substitutions
     #
@@ -1157,7 +4201,7 @@
     #
     # xref
     #
-    while (/\@(x|px|info|)ref{($XREFRE)(}?)/o) {
+    while (/\@(x|px|info|)ref{([^{}]+)(}?)/) {
 	# note: Texinfo may accept other characters
 	($type, $nodes, $full) = ($1, $2, $3);
 	($before, $after) = ($`, $');
@@ -1167,11 +4211,11 @@
 	    next; # while xref
 	}
 	if ($type eq 'x') {
-	    $type = 'See ';
+	    $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} ";
 	} elsif ($type eq 'px') {
-	    $type = 'see ';
+	    $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} ";
 	} elsif ($type eq 'info') {
-	    $type = 'See Info';
+	    $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info";
 	} else {
 	    $type = '';
 	}
@@ -1201,24 +4245,50 @@
 	$nodes =~ s/\s+/ /g; # remove useless spaces
 	@args = split(/\s*,\s*/, $nodes);
 	$node = $args[0]; # the node is always the first arg
-	&normalise_node($node);
-	$sec = $node2sec{$node};
+	$node = &normalise_node($node);
+	$sec = $args[2] || $args[1] || $node2sec{$node};
+	$href = $node2href{$node};
 	if (@args == 5) { # reference to another manual
 	    $sec = $args[2] || $node;
 	    $man = $args[4] || $args[3];
-	    $_ = "${before}${type}section `$sec' in \@cite{$man}$after";
+	    $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after";
 	} elsif ($type =~ /Info/) { # inforef
 	    warn "$ERROR Wrong number of arguments: $_" unless @args == 3;
 	    ($nn, $_, $in) = @args;
 	    $_ = "${before}${type} file `$in', node `$nn'$after";
-	} elsif ($sec) {
-	    $href = $node2href{$node};
-	    $_ = "${before}${type}section " . &anchor('', $href, $sec) . $after;
-	} else {
+	} elsif ($sec && $href && ! $T2H_SHORT_REF) {
+	    $_  = "${before}${type}";
+	    $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type};
+	    $_ .= &t2h_anchor('', $href, $sec) . $after;
+	} 
+	elsif ($href)
+	{
+	  $_ = "${before}${type} " . 
+	    &t2h_anchor('', $href, $args[2] || $args[1] || $node) . 
+	      $after;
+	}
+	else {
 	    warn "$ERROR Undefined node ($node): $_";
 	    $_ = "$before$;0xref{$nodes}$after";
 	}
     }
+
+    # replace images
+    s[\@image\s*{(.+?)}]
+    {
+     my @args = split (/\s*,\s*/, $1);
+     my $base = $args[0];
+     my $image = 
+       LocateIncludeFile("$base.png") || 
+       LocateIncludeFile("$base.jpg") ||
+       LocateIncludeFile("$base.gif");
+     warn "$ERROR no image file for $base: $_" unless ($image && -e $image);
+     "<IMG SRC=\"$image\" ALT=\"$base\">";
+     ($T2H_CENTER_IMAGE ?
+      "<CENTER><IMG SRC=\"$image\" ALT=\"$base\"></CENTER>" :
+      "<IMG SRC=\"$image\" ALT=\"$base\">");
+    }eg;
+
     #
     # try to guess bibliography references or glossary terms
     #
@@ -1229,7 +4299,7 @@
 		($pre, $what, $post) = ($`, $&, $');
 		$href = $bib2href{$what};
 		if (defined($href) && $post !~ /^[^<]*<\/A>/) {
-		    $done .= $pre . &anchor('', $href, $what);
+		    $done .= $pre . &t2h_anchor('', $href, $what);
 		} else {
 		    $done .= "$pre$what";
 		}
@@ -1237,7 +4307,7 @@
 	    }
 	    $_ = $done . $_;
 	}
-	if ($use_glossary) {
+	if ($T2H_USE_GLOSSARY) {
 	    $done = '';
 	    while (/\b\w+\b/) {
 		($pre, $what, $post) = ($`, $&, $');
@@ -1245,7 +4315,7 @@
 		$entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
 		$href = $gloss2href{$entry};
 		if (defined($href) && $post !~ /^[^<]*<\/A>/) {
-		    $done .= $pre . &anchor('', $href, $what);
+		    $done .= $pre . &t2h_anchor('', $href, $what);
 		} else {
 		    $done .= "$pre$what";
 		}
@@ -1257,7 +4327,7 @@
     # otherwise
     push(@lines2, $_);
 }
-print "# end of pass 2\n" if $verbose;
+print "# end of pass 2\n" if $T2H_VERBOSE;
 
 #
 # split style substitutions
@@ -1307,8 +4377,8 @@
     # otherwise
     push(@lines3, $_);
 }
-print "# end of pass 3\n" if $verbose;
-
+print "# end of pass 3\n" if $T2H_VERBOSE;
+	
 #+++############################################################################
 #                                                                              #
 # Pass 4: foot notes, final cleanup                                            #
@@ -1318,7 +4388,7 @@
 @foot_lines = ();			# footnotes
 @doc_lines = ();			# final document
 $end_of_para = 0;			# true if last line is <P>
-
+	
 while (@lines3) {
     $_ = shift(@lines3);
     #
@@ -1356,10 +4426,10 @@
 	    $docid  = "DOCF$foot_num";
 	    $footid = "FOOT$foot_num";
 	    $foot = "($foot_num)";
-	    push(@foot_lines, "<H3>" . &anchor($footid, "$d#$docid", $foot) . "</H3>\n");
+	    push(@foot_lines, "<H3>" . &t2h_anchor($footid, "$d#$docid", $foot) . "</H3>\n");
 	    $text = "<P>$text" unless $text =~ /^\s*<P>/;
 	    push(@foot_lines, "$text\n");
-	    $_ = $before . &anchor($docid, "$docu_foot#$footid", $foot) . $after;
+	    $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after;
 	}
     }
     #
@@ -1373,7 +4443,8 @@
     # otherwise
     push(@doc_lines, $_);
 }
-print "# end of pass 4\n" if $verbose;
+	
+print "# end of pass 4\n" if $T2H_VERBOSE;
 
 #+++############################################################################
 #                                                                              #
@@ -1381,126 +4452,377 @@
 #                                                                              #
 #---############################################################################
 
-$header = <<EOT;
-<!-- This HTML file has been created by $THISPROG
-     from $docu on $TODAY -->
-EOT
+$T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H);
+$T2H_L2H = &l2h_ToHtml        if ($T2H_L2H);
+$T2H_L2H = &l2h_InitFromHtml  if ($T2H_L2H);
 
-$full_title = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
-$title = $value{'_settitle'} || $full_title;
-$_ = &substitute_style($full_title);
-&unprotect_texi;
-s/\n$//; # rmv last \n (if any)
-$full_title = "<H1>" . join("</H1>\n<H1>", split(/\n/, $_)) . "</H1>\n";
-
-#
-# print ToC
-#
-if (!$monolithic && @toc_lines) {
-    if (open(FILE, "> $docu_toc")) {
-	print "# creating $docu_toc...\n" if $verbose;
-	&print_toplevel_header("$title - Table of Contents");
-	&print_ruler;
-	&print(*toc_lines, FILE);
-	&print_toplevel_footer;
-	close(FILE);
-    } else {
-	warn "$ERROR Can't write to $docu_toc: $!\n";
-    }
+# fix node2up, node2prev, node2next, if desired
+if ($has_top_command)
+{
+  for $section (keys %sec2number)
+  {
+    $node = $sec2node{$section};
+    $node2up{$node} = Sec2UpNode($section) unless $node2up{$node};
+    $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node};
+    $node2next{$node} = Sec2NextNode($section) unless $node2next{$node};
+  }
 }
 
-#
-# print footnotes
-#
-if (!$monolithic && @foot_lines) {
-    if (open(FILE, "> $docu_foot")) {
-	print "# creating $docu_foot...\n" if $verbose;
-	&print_toplevel_header("$title - Footnotes");
-	&print_ruler;
-        &print(*foot_lines, FILE);
-	&print_toplevel_footer;
-	close(FILE);
-    } else {
-	warn "$ERROR Can't write to $docu_foot: $!\n";
-    }
+# prepare %T2H_THISDOC
+$T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
+$T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle};
+$T2H_THISDOC{author} = $value{'_author'};
+$T2H_THISDOC{subtitle} = $value{'_subtitle'};
+$T2H_THISDOC{shorttitle} = $value{'_shorttitle'};
+for $key (keys %T2H_THISDOC)
+{
+  $_ = &substitute_style($T2H_THISDOC{$key});
+  &unprotect_texi;
+  s/\s*$//;
+  $T2H_THISDOC{$key} = $_;
 }
 
-#
-# print document
-#
-if ($split_chapter || $split_node) { # split
-    $doc_num = 0;
-    $last_num = scalar(@sections);
-    $first_doc = &doc_name(1);
-    $last_doc = &doc_name($last_num);
-    while (@sections) {
-	$section = shift(@sections);
-	&next_doc;
-	if (open(FILE, "> $docu_doc")) {
-	    print "# creating $docu_doc...\n" if $verbose;
-	    &print_header("$title - $section");
-	    $prev_doc = ($doc_num == 1 ? undef : &doc_name($doc_num - 1));
-	    $next_doc = ($doc_num == $last_num ? undef : &doc_name($doc_num + 1));
-	    $navigation = "Go to the ";
-	    $navigation .= ($prev_doc ? &anchor('', $first_doc, "first") : "first");
-	    $navigation .= ", ";
-	    $navigation .= ($prev_doc ? &anchor('', $prev_doc, "previous") : "previous");
-	    $navigation .= ", ";
-	    $navigation .= ($next_doc ? &anchor('', $next_doc, "next") : "next");
-	    $navigation .= ", ";
-	    $navigation .= ($next_doc ? &anchor('', $last_doc, "last") : "last");
-	    $navigation .= " section, " . &anchor('', $docu_toc, "table of contents") . ".\n";
-	    print FILE $navigation;
-	    &print_ruler;
-	    # find corresponding lines
-            @tmp_lines = ();
-            while (@doc_lines) {
-		$_ = shift(@doc_lines);
-		last if ($_ eq $SPLITTAG);
-		push(@tmp_lines, $_);
-	    }
-            &print(*tmp_lines, FILE);
-	    &print_ruler;
-	    print FILE $navigation;
-	    &print_footer;
-	    close(FILE);
-	} else {
-	    warn "$ERROR Can't write to $docu_doc: $!\n";
-	}
-    }
-} else { # not split
-    if (open(FILE, "> $docu_doc")) {
-	print "# creating $docu_doc...\n" if $verbose;
-	if ($monolithic || !@toc_lines) {
-	    &print_toplevel_header($title);
-	} else {
-	    &print_header($title);
-	    print FILE $full_title;
-	}
-	if ($monolithic && @toc_lines) {
-	    &print_ruler;
- 	    print FILE "<H1>Table of Contents</H1>\n";
- 	    &print(*toc_lines, FILE);
-	}
-	&print_ruler;
-        &print(*doc_lines, FILE);
-	if ($monolithic && @foot_lines) {
-	    &print_ruler;
- 	    print FILE "<H1>Footnotes</H1>\n";
- 	    &print(*foot_lines, FILE);
-	}
-	if ($monolithic || !@toc_lines) {
-	    &print_toplevel_footer;
-	} else {
-	    &print_footer;
-	}
-	close(FILE);
-    } else {
-	warn "$ERROR Can't write to $docu_doc: $!\n";
-    }
+# if no sections, then simply print document as is
+unless (@sections)
+{
+  print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE;
+  open(FILE, "> $docu_top_file") 
+    || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
+
+  &$T2H_print_page_head(\*FILE);
+  $T2H_THIS_SECTION = \@doc_lines;
+  t2h_print_lines(\*FILE);
+  &$T2H_print_foot_navigation(\*FILE);
+  &$T2H_print_page_foot(\*FILE);
+  close(FILE);
+  goto Finish;
 }
 
-print "# that's all folks\n" if $verbose;
+# initialize $T2H_HREF, $T2H_NAME
+%T2H_HREF = 
+  (
+   'First' ,   sec_href($sections[0]),
+   'Last',     sec_href($sections[$#sections]),
+   'About',     $docu_about. '#SEC_About',
+  );
+
+# prepare TOC, OVERVIEW, TOP
+$T2H_TOC = \@toc_lines;
+$T2H_OVERVIEW = \@stoc_lines;
+if ($has_top)
+{
+  while (1)
+  {
+    $_ = shift @doc_lines;
+    last if /$TOPEND/;
+    push @$T2H_TOP, $_;
+  }
+  $T2H_HREF{'Top'} = $docu_top . '#SEC_Top';
+}
+else
+{
+  $T2H_HREF{'Top'} = $T2H_HREF{First};
+}
+
+$node2href{Top} = $T2H_HREF{Top};
+$T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines;
+$T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines;
+
+# settle on index
+if ($T2H_INDEX_CHAPTER)
+{
+  $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)};
+  warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n"
+    unless $T2H_HREF{Index};
+}
+if (! $T2H_HREF{Index} && $first_index_chapter)
+{
+  $T2H_INDEX_CHAPTER = $first_index_chapter;
+  $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER};
+}
+
+print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n"
+  if ($T2H_VERBOSE && $T2H_HREF{Index});
+
+%T2H_NAME =
+  (
+   'First',   clean_name($sec2node{$sections[0]}),
+   'Last',    clean_name($sec2node{$sections[$#sections]}),
+   'About',    $T2H_WORDS->{$T2H_LANG}->{'About_Title'},
+   'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'},
+   'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'},
+   'Index' ,   clean_name($T2H_INDEX_CHAPTER),
+   'Top',      clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}),
+  );
+
+#############################################################################
+# print frame and frame toc file
+#
+if ( $T2H_FRAMES )
+{
+  open(FILE, "> $docu_frame_file") 
+    || die "$ERROR: Can't open $docu_frame_file for writing: $!\n";
+  print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
+  &$T2H_print_frame(\*FILE);
+  close(FILE);
+
+  open(FILE, "> $docu_toc_frame_file") 
+    || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n";
+  print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
+   &$T2H_print_toc_frame(\*FILE);
+  close(FILE);
+}
+
+
+#############################################################################
+# print Top
+#
+open(FILE, "> $docu_top_file") 
+  || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
+&$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT);
+
+if ($has_top)
+{
+  print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE;
+  $T2H_THIS_SECTION = $T2H_TOP;
+  $T2H_HREF{This} = $T2H_HREF{Top};
+  $T2H_NAME{This} = $T2H_NAME{Top};
+  &$T2H_print_Top(\*FILE);
+}
+  
+close(FILE) if $T2H_SPLIT;
+
+#############################################################################
+# Print sections
+#
+$T2H_NODE{Forward} = $sec2node{$sections[0]};
+$T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]});
+$T2H_HREF{Forward} = sec_href($sections[0]);
+$T2H_NODE{This} = 'Top';
+$T2H_NAME{This} = $T2H_NAME{Top};
+$T2H_HREF{This} = $T2H_HREF{Top};
+if ($T2H_SPLIT)
+{
+  print "# writing " . scalar(@sections) . 
+    " sections in $docu_rdir$docu_name"."_[1..$doc_num]"
+	  if $T2H_VERBOSE;
+  $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
+  undef $FH;
+  $doc_num = 0;
+}
+else
+{
+  print "# writing " . scalar(@sections) . " sections in $docu_top_file ..." 
+    if $T2H_VERBOSE;
+  $FH = \*FILE;
+  $previous = '';
+}
+
+$counter = 0;
+# loop through sections
+while ($section = shift(@sections)) 
+{
+  if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND))
+  { 
+    if ($FH)
+    {
+      #close previous page
+      &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
+      &$T2H_print_page_foot($FH);
+      close($FH);
+      undef $FH;
+    }
+  }
+  $T2H_NAME{Back} = $T2H_NAME{This};
+  $T2H_HREF{Back} = $T2H_HREF{This};
+  $T2H_NODE{Back} = $T2H_NODE{This};
+  $T2H_NAME{This} = $T2H_NAME{Forward};
+  $T2H_HREF{This} = $T2H_HREF{Forward};
+  $T2H_NODE{This} = $T2H_NODE{Forward};
+  if ($sections[0])
+  {
+    $T2H_NODE{Forward} = $sec2node{$sections[0]};
+    $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward});
+    $T2H_HREF{Forward} = sec_href($sections[0]);
+  }
+  else
+  {
+    undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward};
+  }
+
+  $node = $node2up{$T2H_NODE{This}};
+  $T2H_HREF{Up} = $node2href{$node};
+  if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up})
+  {
+    $T2H_NAME{Up} = $T2H_NAME{Top};
+    $T2H_HREF{Up} = $T2H_HREF{Top};
+    $T2H_NODE{Up} = 'Up';
+  }
+  else
+  {
+    $T2H_NAME{Up} = &clean_name($node);
+    $T2H_NODE{Up} = $node;
+  }
+
+  $node = $T2H_NODE{This};
+  $node = $node2prev{$node};
+  $T2H_NAME{Prev} = &clean_name($node);
+  $T2H_HREF{Prev} = $node2href{$node};
+  $T2H_NODE{Prev} = $node;
+
+  $node = $T2H_NODE{This};
+  if ($node2up{$node} && $node2up{$node} ne 'Top'&&
+      ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node}))
+  {
+    $node = $node2up{$node};
+    while ($node && $node ne $node2up{$node} && ! $node2prev{$node})
+    {
+      $node = $node2up{$node};
+    }
+    $node = $node2prev{$node} 
+      unless $node2up{$node} eq 'Top' || ! $node2up{$node};
+  }
+  else
+  {
+    $node = $node2prev{$node};
+  }
+  $T2H_NAME{FastBack} = &clean_name($node);
+  $T2H_HREF{FastBack} = $node2href{$node};
+  $T2H_NODE{FastBack} = $node;
+  
+  $node = $T2H_NODE{This};
+  $node = $node2next{$node};
+  $T2H_NAME{Next} = &clean_name($node);
+  $T2H_HREF{Next} = $node2href{$node};
+  $T2H_NODE{Next} = $node;
+
+  $node = $T2H_NODE{This};
+  if ($node2up{$node} && $node2up{$node} ne 'Top'&& 
+      ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node}))
+  {
+    $node = $node2up{$node};
+    while ($node && $node ne $node2up{$node} && ! $node2next{$node})
+    {
+      $node = $node2up{$node};
+    }
+  }
+  $node = $node2next{$node};
+  $T2H_NAME{FastForward} = &clean_name($node);
+  $T2H_HREF{FastForward} = $node2href{$node};
+  $T2H_NODE{FastForward} = $node;
+
+  if (! defined($FH))
+  {
+    my $file = $T2H_HREF{This};
+    $file =~ s/\#.*$//;
+    open(FILE, "> $docu_rdir$file") || 
+      die "$ERROR: Can't open $docu_rdir$file for writing: $!\n";
+    $FH = \*FILE;
+    &$T2H_print_page_head($FH);
+    t2h_print_label($FH);
+    &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter';
+  }
+  else
+  {
+    t2h_print_label($FH);
+  }
+
+  $T2H_THIS_SECTION = [];
+  while (@doc_lines) {
+    $_ = shift(@doc_lines);
+    last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND);
+    push(@$T2H_THIS_SECTION, $_);
+  }
+  $previous = $_;
+  &$T2H_print_section($FH);
+
+  if ($T2H_VERBOSE)
+  {
+    $counter++;
+    print "." if $counter =~ /00$/;
+  }
+}
+if ($T2H_SPLIT)
+{
+  &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
+  &$T2H_print_page_foot($FH);
+  close($FH);
+}
+print "\n" if $T2H_VERBOSE;
+
+#############################################################################
+# Print ToC, Overview, Footnotes
+#
+undef $T2H_HREF{Prev};
+undef $T2H_HREF{Next};
+undef $T2H_HREF{Back};
+undef $T2H_HREF{Forward};
+undef $T2H_HREF{Up};
+
+if (@foot_lines)
+{
+  print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE;
+  open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n"
+      if $T2H_SPLIT;
+  $T2H_HREF{This} = $docu_foot;
+  $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'};
+  $T2H_THIS_SECTION = \@foot_lines;
+  &$T2H_print_Footnotes(\*FILE);
+  close(FILE) if $T2H_SPLIT;
+}
+
+if (@toc_lines)
+{
+  print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE;
+  open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n"
+      if $T2H_SPLIT;
+  $T2H_HREF{This} = $T2H_HREF{Contents};
+  $T2H_NAME{This} = $T2H_NAME{Contents};
+  $T2H_THIS_SECTION = \@toc_lines;
+  &$T2H_print_Toc(\*FILE);
+  close(FILE) if $T2H_SPLIT;
+}
+
+if (@stoc_lines)
+{
+  print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE;
+  open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n"
+      if $T2H_SPLIT;
+  
+  $T2H_HREF{This} = $T2H_HREF{Overview};
+  $T2H_NAME{This} = $T2H_NAME{Overview};
+  $T2H_THIS_SECTION = \@stoc_lines;
+  unshift @$T2H_THIS_SECTION, "<BLOCKQUOTE>\n";
+  push @$T2H_THIS_SECTION, "\n</BLOCKQUOTE>\n";
+  &$T2H_print_Overview(\*FILE);
+  close(FILE) if $T2H_SPLIT;
+}
+
+if ($about_body = &$T2H_about_body())
+{
+  print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE;
+  open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n"
+      if $T2H_SPLIT;
+  
+  $T2H_HREF{This} = $T2H_HREF{About};
+  $T2H_NAME{This} = $T2H_NAME{About};
+  $T2H_THIS_SECTION = [$about_body];
+  &$T2H_print_About(\*FILE);
+  close(FILE) if $T2H_SPLIT;
+}
+
+unless ($T2H_SPLIT)
+{
+  &$T2H_print_page_foot(\*FILE);
+  close (FILE);
+}
+  
+Finish:
+&l2h_FinishFromHtml if ($T2H_L2H);
+&l2h_Finish if($T2H_L2H);
+print "# that's all folks\n" if $T2H_VERBOSE;
+
+exit(0);
 
 #+++############################################################################
 #                                                                              #
@@ -1508,27 +4830,55 @@
 #                                                                              #
 #---############################################################################
 
+sub LocateIncludeFile
+{
+  my $file = shift;
+  my $dir;
+
+  return $file if (-e $file && -r $file);
+  foreach $dir (@T2H_INCLUDE_DIRS)
+  {
+    return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file");
+  }
+  return undef;
+}
+
+sub clean_name 
+{
+  local ($_);
+  $_ = &remove_style($_[0]);
+  &unprotect_texi;
+  return $_;
+}
+
 sub update_sec_num {
     local($name, $level) = @_;
+    my $ret;
 
     $level--; # here we start at 0
-    if ($name =~ /^appendix/) {
+    if ($name =~ /^appendix/ || defined(@appendix_sec_num)) {
 	# appendix style
 	if (defined(@appendix_sec_num)) {
 	    &incr_sec_num($level, @appendix_sec_num);
 	} else {
 	    @appendix_sec_num = ('A', 0, 0, 0);
 	}
-	return(join('.', @appendix_sec_num[0..$level]));
+	$ret = join('.', @appendix_sec_num[0..$level]);
     } else {
 	# normal style
-	if (defined(@normal_sec_num)) {
-	    &incr_sec_num($level, @normal_sec_num);
-	} else {
-	    @normal_sec_num = (1, 0, 0, 0);
+	if (defined(@normal_sec_num)) 
+	{
+	  &incr_sec_num($level, @normal_sec_num);
+	} 
+	else 
+	{
+	  @normal_sec_num = (1, 0, 0, 0);
 	}
-	return(join('.', @normal_sec_num[0..$level]));
+	$ret = join('.', @normal_sec_num[0..$level]);
     }
+    
+    $ret .= "." if $level == 0;
+    return $ret;
 }
 
 sub incr_sec_num {
@@ -1540,13 +4890,78 @@
     }
 }
 
+sub Sec2UpNode
+{
+  my $sec = shift;
+  my $num = $sec2number{$sec};
+
+  return '' unless $num;
+  return 'Top' unless $num =~ /\.\d+/;
+  $num =~ s/\.[^\.]*$//;
+  $num = $num . '.' unless $num =~ /\./;
+  return $sec2node{$number2sec{$num}};
+}
+
+sub Sec2PrevNode
+{
+  my $sec = shift;
+  my $num = $sec2number{$sec};
+  my ($i, $post);
+  
+  if ($num =~ /(\w+)(\.$|$)/)
+  {
+    $num = $`;
+    $i = $1;
+    $post = $2;
+    if ($i eq 'A')
+    {
+      $i = $normal_sec_num[0];
+    }
+    elsif ($i ne '1')
+    {
+      # unfortunately, -- operator is not magical
+      $i = chr(ord($i) + 1);
+    }
+    else
+    {
+      return '';
+    }
+    return $sec2node{$number2sec{$num . $i . $post}}
+  }
+  return '';
+}
+
+sub Sec2NextNode
+{
+  my $sec = shift;
+  my $num = $sec2number{$sec};
+  my $i;
+
+  if ($num =~ /(\w+)(\.$|$)/)
+  {
+    $num = $`;
+    $i = $1;
+    $post = $2;
+    if ($post eq '.' && $i eq $normal_sec_num[0])
+    {
+      $i = 'A';
+    }
+    else
+    {
+      $i++;
+    }
+    return $sec2node{$number2sec{$num . $i . $post}}
+  }
+  return '';
+}
+
 sub check {
     local($_, %seen, %context, $before, $match, $after);
 
     while (<>) {
 	if (/\@(\*|\.|\:|\@|\{|\})/) {
 	    $seen{$&}++;
-	    $context{$&} .= "> $_" if $verbose;
+	    $context{$&} .= "> $_" if $T2H_VERBOSE;
 	    $_ = "$`XX$'";
 	    redo;
 	}
@@ -1554,10 +4969,10 @@
 	    ($before, $match, $after) = ($`, $&, $');
 	    if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address
 		$seen{'e-mail address'}++;
-		$context{'e-mail address'} .= "> $_" if $verbose;
+		$context{'e-mail address'} .= "> $_" if $T2H_VERBOSE;
 	    } else {
 		$seen{$match}++;
-		$context{$match} .= "> $_" if $verbose;
+		$context{$match} .= "> $_" if $T2H_VERBOSE;
 	    }
 	    $match =~ s/^\@/X/;
 	    $_ = "$before$match$after";
@@ -1566,7 +4981,7 @@
     }
     
     foreach (sort(keys(%seen))) {
-	if ($verbose) {
+	if ($T2H_VERBOSE) {
 	    print "$_\n";
 	    print $context{$_};
 	} else {
@@ -1621,6 +5036,19 @@
     die "* Failed to find '$tag' after: " . $lines[$#lines];
 }
 
+# used in pass 1 for l2h use &next_line
+sub string_until {
+    local($tag) = @_;
+    local($_, $string);
+
+    while ($_ = &next_line) {
+	return $string if /^\@end\s+$tag\s*$/;
+#	$_ =~ s/hbox/mbox/g;
+	$string = $string.$_;
+    }
+    die "* Failed to find '$tag' after: " . $lines[$#lines];
+}
+
 #
 # HTML stacking to have a better HTML output
 #
@@ -1664,8 +5092,11 @@
 
 sub html_debug {
     local($what, $line) = @_;
-    return("<!-- $line @html_stack, $html_element -->$what")
-	if $debug & $DEBUG_HTML;
+    if ($T2H_DEBUG & $DEBUG_HTML)
+    {
+     $what = "\n" unless $what;
+     return("<!-- $line @html_stack, $html_element -->$what")
+    }	
     return($what);
 }
 
@@ -1673,29 +5104,80 @@
 sub debug {
     local($what, $line) = @_;
     return("<!-- $line -->$what")
-	if $debug & $DEBUG_HTML;
+	if $T2H_DEBUG & $DEBUG_HTML;
     return($what);
 }
 
-sub normalise_node {
-    $_[0] =~ s/\s+/ /g;
-    $_[0] =~ s/ $//;
-    $_[0] =~ s/^ //;
+sub SimpleTexi2Html
+{
+  local $_ = $_[0];
+  &protect_texi;
+  &protect_html;
+  $_ = substitute_style($_);
+  $_[0]  = $_;
 }
 
-sub menu_entry {
-    local($entry, $node, $descr) = @_;
-    local($href);
+sub normalise_node {
+  local $_ = $_[0];
+  s/\s+/ /g;
+  s/ $//;
+  s/^ //;
+  &protect_texi;
+  &protect_html;
+  $_ = substitute_style($_);
+  $_[0]  = $_;
+}
 
-    &normalise_node($node);
-    $href = $node2href{$node};
-    if ($href) {
-	$descr =~ s/^\s+//;
-	$descr = ": $descr" if $descr;
-	push(@lines2, "<LI>" . &anchor('', $href, $entry) . "$descr\n");
-    } else {
-	warn "$ERROR Undefined node ($node): $_";
+sub menu_entry 
+{
+  my ($node, $name, $descr) = @_;
+  my ($href, $entry);
+  
+  &normalise_node($node);
+  $href = $node2href{$node};
+  if ($href) 
+  {
+    $descr =~ s/^\s+//;
+    $descr =~ s/\s*$//;
+    $descr = SimpleTexi2Html($descr);
+    if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node})
+    {
+      $entry = $node2sec{$node};
+      $name = '';
     }
+    else
+    {
+      &normalise_node($name);
+      $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY) 
+		? "$name : $node" : $node);
+    }
+
+    if ($T2H_AVOID_MENU_REDUNDANCY && $descr)
+    {
+      my $clean_entry = $entry;
+      $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /);
+      $clean_entry =~ s/[^\w]//g;
+      my $clean_descr = $descr;
+      $clean_descr =~ s/[^\w]//g;
+      $descr = '' if ($clean_entry eq $clean_descr)
+    }
+    push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . 
+			&t2h_anchor('', $href, $entry) . 
+			'</TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">' . 
+			$descr . 
+			"</TD></TR>\n", __LINE__));
+  }
+  elsif ($node =~ /^\(.*\)\w+/)
+  {
+    push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . 
+			$entry . 
+			'</TD><TD ALIGN="left" VALIGN="TOP">' . $descr . 
+			"</TD></TR>\n", __LINE__))
+  }
+  else
+  {
+    warn "$ERROR Undefined node of menu_entry ($node): $_";
+  }
 }
 
 sub do_ctrl { "^$_[0]" }
@@ -1704,19 +5186,51 @@
     local($addr, $text) = split(/,\s*/, $_[0]);
 
     $text = $addr unless $text;
-    &anchor('', "mailto:$addr", $text);
+    &t2h_anchor('', "mailto:$addr", $text);
 }
 
-sub do_sc { "\U$_[0]\E" }
+sub do_sc 
+{ 
+  # l2h does this much better
+  return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H);
+  return "\U$_[0]\E";
+}
+
+sub do_math
+{
+  return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H);
+  return "<EM>".$text."</EM>";
+}
 
 sub do_uref {
-    local($url, $text) = split(/,\s*/, $_[0]);
+    local($url, $text, $only_text) = split(/,\s*/, $_[0]);
 
+    $text = $only_text if $only_text;
     $text = $url unless $text;
-    &anchor('', $url, $text);
+    &t2h_anchor('', $url, $text);
 }
 
-sub do_url { &anchor('', $_[0], $_[0]) }
+sub do_url { &t2h_anchor('', $_[0], $_[0]) }
+
+sub do_acronym
+{
+  return '<FONT SIZE="-1">' . $_[0] . '</FONT>';
+}
+
+sub do_accent
+{
+  return "&$_[0]acute;" if $_[1] eq 'H';
+  return "$_[0]." if $_[1] eq 'dotaccent';
+  return "$_[0]*" if $_[1] eq 'ringaccent';
+  return "$_[0]".'[' if $_[1] eq 'tieaccent';
+  return "$_[0]".'(' if $_[1] eq 'u';
+  return "$_[0]_" if $_[1] eq 'ubaraccent';
+  return ".$_[0]" if $_[1] eq 'udotaccent';
+  return "$_[0]&lt;" if $_[1] eq 'v';
+  return "&$_[0]cedil;" if $_[1] eq ',';
+  return "$_[0]" if $_[1] eq 'dotless';
+  return undef;
+}
 
 sub apply_style {
     local($texi_style, $text) = @_;
@@ -1730,7 +5244,7 @@
 	}
 	if ($style =~ /^\&/) { # custom
 	    $style = $';
-	    $text = &$style($text);
+	    $text = &$style($text, $texi_style);
 	} elsif ($style) { # good style
 	    $text = "<$style>$text</$style>";
 	} else { # no style
@@ -1744,19 +5258,27 @@
 # remove Texinfo styles
 sub remove_style {
     local($_) = @_;
-    s/\@\w+{([^\{\}]+)}/$1/g;
+    1 while(s/\@\w+{([^\{\}]+)}/$1/g);
     return($_);
 }
 
+sub remove_things
+{
+  local ($_) = @_;
+  s|\@(\w+)\{\}|$1|g;
+  return $_;
+}
+
 sub substitute_style {
     local($_) = @_;
     local($changed, $done, $style, $text);
 
+    &simple_substitutions;
     $changed = 1;
     while ($changed) {
 	$changed = 0;
 	$done = '';
-	while (/\@(\w+){([^\{\}]+)}/) {
+	while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) {
 	    $text = &apply_style($1, $2);
 	    if ($text) {
 		$_ = "$`$text$'";
@@ -1771,13 +5293,19 @@
     return($_);
 }
 
-sub anchor {
-    local($name, $href, $text, $newline) = @_;
+sub t2h_anchor {
+    local($name, $href, $text, $newline, $extra_attribs) = @_;
     local($result);
 
     $result = "<A";
     $result .= " NAME=\"$name\"" if $name;
-    $result .= " HREF=\"$href\"" if $href;
+    if ($href)
+    {
+      $href =~ s|^$T2H_HREF_DIR_INSTEAD_FILE|./| 
+	if ($T2H_HREF_DIR_INSTEAD_FILE);
+      $result .= ($href =~ /\"/ ? " HREF='$href'"  : " HREF=\"$href\"");
+    }
+    $result .= " $extra_attribs" if $extra_attribs;
     $result .= ">$text</A>";
     $result .= "\n" if $newline;
     return($result);
@@ -1786,104 +5314,46 @@
 sub pretty_date {
     local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
 
-    @MoY = ('January', 'Febuary', 'March', 'April', 'May', 'June',
+    @MoY = ('January', 'February', 'March', 'April', 'May', 'June',
 	    'July', 'August', 'September', 'October', 'November', 'December');
     ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
     $year += ($year < 70) ? 2000 : 1900;
-    return("$mday $MoY[$mon] $year");
+    # obachman: Let's do it as the Americans do
+    return("$MoY[$mon], $mday  $year");
 }
 
-sub doc_name {
+sub doc_href {
     local($num) = @_;
 
-    return("${docu_name}_$num.html");
+    return("${docu_name}_$num.$docu_ext");
+}
+
+sub sec_href
+{
+  return $node2href{$sec2node{$_[0]}};
 }
 
 sub next_doc {
-    $docu_doc = &doc_name(++$doc_num);
+    $docu_doc = &doc_href(++$doc_num);
 }
 
-sub print {
-    local(*lines, $fh) = @_;
+sub t2h_print_lines {
+    my ($fh, $lines) = @_;
     local($_);
-
-    while (@lines) {
-	$_ = shift(@lines);
+    $lines = $T2H_THIS_SECTION unless $lines;
+    my $cnt = 0;
+    for (@$lines) 
+    {
+	$_ = l2h_FromHtml($_) if ($T2H_L2H);
 	if (/^$PROTECTTAG/o) {
 	    $_ = $tag2pro{$_};
 	} else {
 	    &unprotect_texi;
 	}
 	print $fh $_;
+	$cnt += split(/\W*\s+\W*/);
     }
-}
-
-sub print_ruler {
-    print FILE "<P><HR><P>\n";
-}
-
-sub print_header {
-    local($_);
-
-    # clean the title
-    $_ = &remove_style($_[0]);
-    &unprotect_texi;
-    # print the header
-    if ($doctype eq 'html2') {
-	print FILE $html2_doctype;
-    } elsif ($doctype) {
-	print FILE $doctype;
-    }
-    print FILE <<EOT;
-<HTML>
-<HEAD>
-$header
-<TITLE>$_</TITLE>
-</HEAD>
-<BODY>
-EOT
-}
-
-sub print_toplevel_header {
-    local($_);
-
-    &print_header; # pass given arg...
-    print FILE $full_title;
-    if ($value{'_subtitle'}) {
-	$value{'_subtitle'} =~ s/\n+$//;
-	foreach (split(/\n/, $value{'_subtitle'})) {
-	    $_ = &substitute_style($_);
-	    &unprotect_texi;
-	    print FILE "<H2>$_</H2>\n";
-	}
-    }
-    if ($value{'_author'}) {
-	$value{'_author'} =~ s/\n+$//;
-	foreach (split(/\n/, $value{'_author'})) {
-	    $_ = &substitute_style($_);
-	    &unprotect_texi;
-	    s/[\w.-]+\@[\w.-]+/<A HREF="mailto:$&">$&<\/A>/g;
-	    print FILE "<ADDRESS>$_</ADDRESS>\n";
-	}
-    }
-    print FILE "<P>\n";
-}
-
-sub print_footer {
-    print FILE <<EOT;
-</BODY>
-</HTML>
-EOT
-}
-
-sub print_toplevel_footer {
-    &print_ruler;
-    print FILE <<EOT;
-This document was generated on $TODAY using the
-<A HREF=\"$HOMEPAGE\">texi2html</A>
-translator version 1.52.</P>
-EOT
-    &print_footer;
+    return $cnt;
 }
 
 sub protect_texi {
@@ -1901,6 +5371,13 @@
     $what =~ s/\&/\&\#38;/g;
     $what =~ s/\</\&\#60;/g;
     $what =~ s/\>/\&\#62;/g;
+    # restore anything in quotes
+    # this fixes my problem where I had:
+    # < IMG SRC="leftarrow.gif" ALT="<--" >  but what if I wanted &#60; in my ALT text ??
+    # maybe byte stuffing or some other technique should be used.
+    $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g;
+    $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g;
+    $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g;
     # but recognize some HTML things
     $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g;	      # </A>
     $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g;     # <A [^&]+>
@@ -1916,6 +5393,13 @@
     s/$;4/\'/go;
 }
 
+sub Unprotect_texi 
+{
+  local $_ = shift;
+  &unprotect_texi;
+  return($_);
+}
+
 sub unprotect_html {
     local($what) = @_;
     $what =~ s/\&\#38;/\&/g;
@@ -1924,8 +5408,12 @@
     return($what);
 }
 
-sub byalpha {
-    $key2alpha{$a} cmp $key2alpha{$b};
+sub t2h_print_label
+{
+    my $fh = shift;
+    my $href = shift || $T2H_HREF{This};
+    $href =~ s/.*#(.*)$/$1/;
+    print $fh qq{<A NAME="$href"></A>\n};
 }
 
 ##############################################################################
@@ -1938,144 +5426,4 @@
 .nr nl 0-1		\" fake up transition to first page again
 .nr % 0			\" start at page 1
 '; __END__ ############# From here on it's a standard manual page ############
-.TH TEXI2HTML 1 "01/05/98"
-.AT 3
-.SH NAME
-texi2html \- a Texinfo to HTML converter
-.SH SYNOPSIS
-.B texi2html [options] file
-.PP
-.B texi2html -check [-verbose] files
-.SH DESCRIPTION
-.I Texi2html
-converts the given Texinfo file to a set of HTML files. It tries to handle
-most of the Texinfo commands. It creates hypertext links for cross-references,
-footnotes...
-.PP
-It also tries to add links from a reference to its corresponding entry in the
-bibliography (if any). It may also handle a glossary (see the
-.B \-glossary
-option).
-.PP
-.I Texi2html
-creates several files depending on the contents of the Texinfo file and on
-the chosen options (see FILES).
-.PP
-The HTML files created by
-.I texi2html
-are closer to TeX than to Info, that's why
-.I texi2html
-converts @iftex sections and not @ifinfo ones by default. You can reverse
-this with the \-expandinfo option.
-.SH OPTIONS
-.TP 12
-.B \-check
-Check the given file and give the list of all things that may be Texinfo commands.
-This may be used to check the output of
-.I texi2html
-to find the Texinfo commands that have been left in the HTML file.
-.TP
-.B \-expandinfo
-Expand @ifinfo sections, not @iftex ones.
-.TP
-.B \-glossary
-Use the section named 'Glossary' to build a list of terms and put links in the HTML
-document from each term toward its definition.
-.TP
-.B \-invisible \fIname\fP
-Use \fIname\fP to create invisible destination anchors for index links
-(you can for instance use the invisible.xbm file shipped with this program).
-This is a workaround for a known bug of many WWW browsers, including netscape.
-.TP
-.B \-I \fIdir\fP
-Look also in \fIdir\fP to find included files.
-.TP
-.B \-menu
-Show the Texinfo menus; by default they are ignored.
-.TP
-.B \-monolithic
-Output only one file, including the table of contents and footnotes.
-.TP
-.B \-number
-Number the sections.
-.TP
-.B \-split_chapter
-Split the output into several HTML files (one per main section:
-chapter, appendix...).
-.TP
-.B \-split_node
-Split the output into several HTML files (one per node).
-.TP
-.B \-usage
-Print usage instructions, listing the current available command-line options.
-.TP
-.B \-verbose
-Give a verbose output. Can be used with the
-.B \-check
-option.
-.PP
-.SH FILES
-By default
-.I texi2html
-creates the following files (foo being the name of the Texinfo file):
-.TP 16
-.B foo_toc.html
-The table of contents.
-.TP
-.B foo.html
-The document's contents.
-.TP
-.B foo_foot.html
-The footnotes (if any).
-.PP
-When used with the
-.B \-split
-option, it creates several files (one per chapter or node), named
-.B foo_n.html
-(n being the indice of the chapter or node), instead of the single
-.B foo.html
-file.
-.PP
-When used with the
-.B \-monolithic
-option, it creates only one file:
-.B foo.html
-.SH VARIABLES
-.I texi2html
-predefines the following variables: \fBhtml\fP, \fBtexi2html\fP.
-.SH ADDITIONAL COMMANDS
-.I texi2html
-implements the following non-Texinfo commands (maybe they are in Texinfo now...):
-.TP 16
-.B @ifhtml
-This indicates the start of an HTML section, this section will passed through
-without any modification.
-.TP
-.B @end ifhtml
-This indicates the end of an HTML section.
-.SH VERSION
-This is \fItexi2html\fP version 1.52, 01/05/98.
-.PP
-The latest version of \fItexi2html\fP can be found in WWW, cf. URL
-http://wwwinfo.cern.ch/dis/texi2html/
-.SH AUTHOR
-The main author is Lionel Cons, CERN IT/DIS/OSE, Lionel.Cons@cern.ch.
-Many other people around the net contributed to this program.
-.SH COPYRIGHT
-This program is the intellectual property of the European
-Laboratory for Particle Physics (known as CERN). No guarantee whatsoever is
-provided by CERN. No liability whatsoever is accepted for any loss or damage
-of any kind resulting from any defect or inaccuracy in this information or
-code.
-.PP
-CERN, 1211 Geneva 23, Switzerland
-.SH "SEE ALSO"
-GNU Texinfo Documentation Format,
-HyperText Markup Language (HTML),
-World Wide Web (WWW).
-.SH BUGS
-This program does not understand all Texinfo commands (yet).
-.PP
-TeX specific commands (normally enclosed in @iftex) will be
-passed unmodified.
-.ex
+.so /usr/local/man/man1/texi2html.1
diff --git a/readline/doc/texinfo.tex b/readline/doc/texinfo.tex
index 7d62f26..c49af9f 100644
--- a/readline/doc/texinfo.tex
+++ b/readline/doc/texinfo.tex
@@ -1,51 +1,72 @@
-%% TeX macros to handle texinfo files
-
-%  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
-%                94, 95, 1996 Free Software Foundation, Inc.
-
-%This texinfo.tex file is free software; you can redistribute it and/or
-%modify it under the terms of the GNU General Public License as
-%published by the Free Software Foundation; either version 2, or (at
-%your option) any later version.
-
-%This texinfo.tex file is distributed in the hope that it will be
-%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%General Public License for more details.
-
-%You should have received a copy of the GNU General Public License
-%along with this texinfo.tex file; see the file COPYING.  If not, write
-%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-%Boston, MA 02111-1307, USA.
-
-
-%In other words, you are welcome to use, share and improve this program.
-%You are forbidden to forbid anyone else to use, share and improve
-%what you give them.   Help stamp out software-hoarding!
-
-
-% Send bug reports to bug-texinfo@prep.ai.mit.edu.
-% Please include a *precise* test case in each bug report.
-
-
-% Make it possible to create a .fmt file just by loading this file:
-% if the underlying format is not loaded, start by loading it now.
-% Added by gildea November 1993.
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{1999-09-25.10}
+%
+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
+% Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this texinfo.tex file; see the file COPYING.  If not, write
+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+% In other words, you are welcome to use, share and improve this program.
+% You are forbidden to forbid anyone else to use, share and improve
+% what you give them.   Help stamp out software-hoarding!
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+%   ftp://ftp.gnu.org/gnu/texinfo.tex
+%   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+%   ftp://texinfo.org/tex/texinfo.tex
+%   ftp://us.ctan.org/macros/texinfo/texinfo.tex
+%   (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
+%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+% The texinfo.tex in any given Texinfo distribution could well be out
+% of date, so if that's what you're using, please check.
+% Texinfo has a small home page at http://texinfo.org/.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
+% The extra runs of TeX get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages.  You can get
+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
 
-% This automatically updates the version number based on RCS.
-\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision$
-\message{Loading texinfo package [Version \texinfoversion]:}
+\message{Loading texinfo [version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
 % and turn on active characters that we couldn't do earlier because
 % they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
+\everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
 % Save some parts of plain tex whose names we will redefine.
-
 \let\ptexb=\b
 \let\ptexbullet=\bullet
 \let\ptexc=\c
@@ -53,27 +74,17 @@
 \let\ptexdot=\.
 \let\ptexdots=\dots
 \let\ptexend=\end
-\let\ptexequiv = \equiv
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
 \let\ptexi=\i
 \let\ptexlbrace=\{
 \let\ptexrbrace=\}
 \let\ptexstar=\*
 \let\ptext=\t
-\let\ptextilde=\~
 
-% 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\ }
-}
-\let\~ = \tie                  % And make it available as @~.
-
+% We never want plain's outer \+ definition in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
 
 \message{Basics,}
 \chardef\other=12
@@ -82,18 +93,47 @@
 % starts a new line in the output.
 \newlinechar = `^^J
 
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
+% 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
 
 % Ignore a token.
 %
@@ -102,10 +142,11 @@
 \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 \bindingoffset
+\newdimen \normaloffset
 \newdimen\pagewidth \newdimen\pageheight
 
 % Sometimes it is convenient to have everything in the transcript file
@@ -113,87 +154,119 @@
 % since that produces some useless output on the terminal.
 %
 \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\ifx\eTeXversion\undefined
 \def\loggingall{\tracingcommands2 \tracingstats2
    \tracingpages1 \tracingoutput1 \tracinglostchars1
    \tracingmacros2 \tracingparagraphs1 \tracingrestores1
    \showboxbreadth\maxdimen\showboxdepth\maxdimen
 }%
+\else
+\def\loggingall{\tracingcommands3 \tracingstats2
+   \tracingpages1 \tracingoutput1 \tracinglostchars1
+   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+   \tracingscantokens1 \tracingassigns1 \tracingifs1
+   \tracinggroups1 \tracingnesting2
+   \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+\fi
 
-%---------------------Begin change-----------------------
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
 %
-%%%% For @cropmarks command.
-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
 %
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen \topandbottommargin
-\newdimen \outerhsize \newdimen \outervsize
-\cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
 %
-%---------------------End change-----------------------
+\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.
-\chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
 \def\onepageout#1{%
-  \hoffset=\normaloffset
+  \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}%
+  %
   {%
-    \escapechar = `\\ % use backslash in output files.
-    \indexdummies
+    % 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{%
-      {\let\hsize=\pagewidth \makeheadline}%
+      \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}%
-      {\let\hsize=\pagewidth \makefootline}%
-    }%
-  }%
+      \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
+      %
+      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \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 \turnoffactive
   \advancepageno
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
 }
 
-%%%% For @cropmarks command %%%%
-
-% Here is a modification of the main output routine for Near East Publications
-% This provides right-angle cropmarks at all four corners.
-% The contents of the page are centerlined into the cropmarks,
-% and any desired binding offset is added as an \hskip on either
-% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
-%
-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-{\escapechar=`\\\relax % makes sure backslash is used in output files.
-                 \shipout
-                 \vbox to \outervsize{\hsize=\outerhsize
-                 \vbox{\line{\ewtop\hfill\ewtop}}
-                 \nointerlineskip
-                 \line{\vbox{\moveleft\cornerthick\nstop}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nstop}}
-                 \vskip \topandbottommargin
-                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-                        \vbox{
-                        {\let\hsize=\pagewidth \makeheadline}
-                        \pagebody{#1}
-                        {\let\hsize=\pagewidth \makefootline}}
-                        \ifodd\pageno\else\hskip\bindingoffset\fi}
-                 \vskip \topandbottommargin plus1fill minus1fill
-                 \boxmaxdepth\cornerthick
-                 \line{\vbox{\moveleft\cornerthick\nsbot}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nsbot}}
-                 \nointerlineskip
-                 \vbox{\line{\ewbot\hfill\ewbot}}
-        }}
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-%
-% Do @cropmarks to get crop marks
-\def\cropmarks{\let\onepageout=\croppageout }
-
 \newinsert\margin \dimen\margin=\maxdimen
 
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
@@ -207,7 +280,6 @@
 \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)
@@ -302,11 +374,11 @@
 %% 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.  Type Return to continue.}
+\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{Type <Return> to continue.}
+\newhelp\EMsimple{Press RETURN to continue.}
 
 \outer\def\begin{\parsearg\beginxxx}
 
@@ -365,7 +437,7 @@
 
 % @@ prints an @
 % Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
+\def\@{{\tt\char64}}
 
 % This is turned off because it was never documented
 % and you can use @w{...} around a quote to suppress ligatures.
@@ -375,8 +447,8 @@
 %\def\'{{'}}
 
 % Used to generate quoted braces.
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
 \let\{=\mylbrace
 \let\}=\myrbrace
 \begingroup
@@ -413,6 +485,18 @@
   \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 }
 
@@ -422,14 +506,11 @@
 % @. is an end-of-sentence period.
 \def\.{.\spacefactor=3000 }
 
-% @enddots{} is an end-of-sentence ellipsis.
-\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
-
 % @! is an end-of-sentence bang.
-\gdef\!{!\spacefactor=3000 }
+\def\!{!\spacefactor=3000 }
 
 % @? is an end-of-sentence query.
-\gdef\?{?\spacefactor=3000 }
+\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
@@ -513,53 +594,81 @@
 %% 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\penalty 10000
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
 %\prevdepth=-1000pt
 %}}
 
 \def\needx#1{%
-  % Go into vertical mode, so we don't make a big box in the middle of a
+  % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.
   \par
   %
-  % Don't add any leading before our big empty box, but allow a page
-  % break, since the best break might be right here.
-  \allowbreak
-  \nointerlineskip
-  \vtop to #1\mil{\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
+  % 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 some dots
+% @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
+  }%
+}
 
-\def\dots{$\ldots$}
+% @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....
@@ -626,314 +735,50 @@
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 
-\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
-\parsearg \commentxxx}
-
-\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
+\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  is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% 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.
+% @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\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \relax
-  \let\deffn = \relax
-  \let\deffnx = \relax
-  \let\defindex = \relax
-  \let\defivar = \relax
-  \let\defmac = \relax
-  \let\defmethod = \relax
-  \let\defop = \relax
-  \let\defopt = \relax
-  \let\defspec = \relax
-  \let\deftp = \relax
-  \let\deftypefn = \relax
-  \let\deftypefun = \relax
-  \let\deftypevar = \relax
-  \let\deftypevr = \relax
-  \let\defun = \relax
-  \let\defvar = \relax
-  \let\defvr = \relax
-  \let\ref = \relax
-  \let\xref = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\settitle = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\everyheading = \relax
-  \let\evenheading = \relax
-  \let\oddheading = \relax
-  \let\everyfooting = \relax
-  \let\evenfooting = \relax
-  \let\oddfooting = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\lowersections = \relax
-  \let\down = \relax
-  \let\raisesections = \relax
-  \let\up = \relax
-  \let\set = \relax
-  \let\clear = \relax
-  \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
-%
-\def\ignore{\doignore{ignore}}
-
-% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% Also ignore @macro ... @end macro.  The user must run texi2dvi,
-% which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
-\def\macro{\doignore{macro}}
-\let\unmacro = \comment
-
-
-% @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'.
-  \long\def\doignoretext##1\end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode32 = 10
-  %
-  % And now expand that command.
-  \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.ai.mit.edu/pub/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
+\def\paragraphindent{\parsearg\doparagraphindent}
+\def\doparagraphindent#1{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
     \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 change of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook: make the current font be a dummy font.
-  %
-  \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 not all sites
-    % might 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 (mostly for their use in
-    % smallexample)
-    \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont
-    \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont
-    \let\indsf = \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}}
-}
-
-% @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 \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
+  \parindent = \defaultparindent
 }
-% 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.
-%
-\def\value#1{\expandafter
-                \ifx\csname SET#1\endcsname\relax
-                        {\{No value for ``#1''\}}
-                \else \csname SET#1\endcsname \fi}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifsetfail
+% @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
-    \expandafter\ifsetsucceed
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
   \fi
 }
-\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\ifclearxxx}
-\def\ifclearxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifclearsucceed
-  \else
-    \expandafter\ifclearfail
-  \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex always succeeds; we read the text following, through @end
-% iftex).  But `@end iftex' should be valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\defineunmatchedend{iftex}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group).  So we must
-% define \Eiftex to redefine itself to be its previous value.  (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
-  \edef\temp{%
-    % Remember the current value of \E#1.
-    \let\nece{prevE#1} = \nece{E#1}%
-    %
-    % At the `@end #1', redefine \E#1 to be its previous value.
-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-  }%
-  \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
 
 % @asis just yields its argument.  Used with @table, for example.
 %
@@ -956,63 +801,229 @@
 \def\bullet{\implicitmath\ptexbullet\implicitmath}
 \def\minus{\implicitmath-\implicitmath}
 
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\appendixnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
 % @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{%
-   \readauxfile
-   \opencontents
+   \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}
 
-% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-% \def\macroxxx#1#2 \end macro{%
-% \expandafter\gdef\macrotemp#1{#2}%
-% \endgroup}
 
-%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
-%\def\linemacroxxx#1#2 \end linemacro{%
-%\let\parsearg=\relax
-%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
-%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
-%\expandafter\gdef\macrotempx#1{#2}%
-%\endgroup}
+\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
 
-%\def\butfirst#1{}
+\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}%
+    \ifnum\pdftexversion < 14
+      \pdfimage
+    \else
+      \pdfximage
+    \fi
+      \ifx\empty\imagewidth\else width \imagewidth \fi
+      \ifx\empty\imageheight\else height \imageheight \fi
+      {#1.pdf}%
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
+  \def\pdfmkpgn#1{#1@}
+  \let\linkcolor = \Cyan
+  \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\bgroup
+      \closein 1 
+      \indexnofonts
+      \def\tt{}
+      % 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\unnumbchapentry ##1##2{}
+      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+      \def\unnumbsecentry ##1##2{}
+      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+      \def\unnumbsubsecentry ##1##2{}
+      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+      \def\unnumbsubsubsecentry ##1##2{}
+      \input \jobname.toc
+      \def\chapentry ##1##2##3{%
+        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+      \def\unnumbchapentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\secentry ##1##2##3##4{%
+        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+      \def\unnumbsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\subsecentry ##1##2##3##4##5{%
+        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+      \def\unnumbsubsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\subsubsecentry ##1##2##3##4##5##6{%
+        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+      \def\unnumbsubsubsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \input \jobname.toc
+    \egroup\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\@{@}%
+      \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{\mkpgn{#1}}
+    \linkcolor #1\endlink}
+  \def\mkpgn#1{#1@} 
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % \ifx\pdfoutput
 
 
 \message{fonts,}
-
 % Font-change commands.
 
-% Texinfo supports the sans serif font style, which plain TeX does not.
+% 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}
@@ -1021,8 +1032,9 @@
 % We don't need math for this one.
 \def\ttsl{\tenttsl}
 
-%% Try out Computer Modern fonts at \magstephalf
-\let\mainmagstep=\magstephalf
+% Use Computer Modern fonts at \magstephalf (11pt).
+\newcount\mainmagstep
+\mainmagstep=\magstephalf
 
 % Set the font macro #1 to the font named #2, adding on the
 % specified font prefix (normally `cm').
@@ -1077,22 +1089,30 @@
 \setfont\deftt\ttshape{10}{\magstep1}
 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
 
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\slshape{9}{1000}
-\let\indsl=\indit
-\let\indtt=\ninett
-\let\indttsl=\ninett
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
+% 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 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}
 
 % Chapter (and unnumbered) fonts (17.28pt).
 \setfont\chaprm\rmbshape{12}{\magstep2}
@@ -1100,7 +1120,7 @@
 \setfont\chapsl\slbshape{10}{\magstep3}
 \setfont\chaptt\ttbshape{12}{\magstep2}
 \setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{12}{\magstep2}
+\setfont\chapsf\sfbshape{17}{1000}
 \let\chapbf=\chaprm
 \setfont\chapsc\scbshape{10}{\magstep3}
 \font\chapi=cmmi12 scaled \magstep2
@@ -1137,19 +1157,15 @@
 \setfont\ssecit\itbshape{10}{1315}
 \setfont\ssecsl\slbshape{10}{1315}
 \setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{\magstep1}
+\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 \magstep1
+\font\ssecsy=cmsy10 scaled 1315
 % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
 % but that is not a standard magnification.
 
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\let\authorrm = \secrm
-
 % 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, we
@@ -1174,6 +1190,13 @@
   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
   \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
   \resetmathfonts}
+\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
@@ -1190,16 +1213,21 @@
   \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\indexfonts{%
-  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-  \resetmathfonts \setleading{12pt}}
+\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{11pt}}
 
 % 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
 
@@ -1214,13 +1242,14 @@
 % \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\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
 
 \let\i=\smartitalic
-\let\var=\smartitalic
-\let\dfn=\smartitalic
+\let\var=\smartslanted
+\let\dfn=\smartslanted
 \let\emph=\smartitalic
-\let\cite=\smartitalic
+\let\cite=\smartslanted
 
 \def\b#1{{\bf #1}}
 \let\strong=\b
@@ -1237,22 +1266,22 @@
   \null
 }
 \let\ttfont=\t
-\def\samp #1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
-  \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
+\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{$\langle$}}#1}}%
+     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
     \kern-0.4pt\hrule}%
-  \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
+  \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\url=\samp % perhaps include a hypertex \special eventually
-\def\email#1{$\langle${\tt #1}$\rangle$}
+\let\option=\samp
 
 % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.
@@ -1287,43 +1316,117 @@
 % 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}
-% The following is used by \doprintindex to insure that long function names
-% wrap around.  It is necessary for - and _ to be active before the index is
-% read from the file, as \entry parses the arguments long before \code is
-% ever called.  -- mycroft
-\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
+  \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\realunder{_}
 \def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\normalunderscore\discretionary{}{}{}}
+\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
 \def\codex #1{\tclose{#1}\endgroup}
 
 %\let\exp=\tclose  %Was temporary
 
 % @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}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
+% the catcodes are wrong for parsearg to work.)
+\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
+
 \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{\ttsl\look}}\fi
-\else{\tclose{\ttsl\look}}\fi}
+\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.
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
 %
 \def\dmn#1{\thinspace #1}
 
@@ -1334,11 +1437,14 @@
 % 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
-% Use of \lowercase was suggested.
 \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\$}}
 
@@ -1349,20 +1455,23 @@
 \newskip\titlepagebottomglue \titlepagebottomglue = 2pc
 
 % First the title page.  Must do @settitle before @titlepage.
-\def\titlefont#1{{\titlerm #1}}
-
 \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
-% I deinstalled the following change because \cmr12 is undefined.
-% This change was not in the ChangeLog anyway.  --rms.
-%   \let\subtitlerm=\cmr12
    \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
    %
    \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
@@ -1372,7 +1481,7 @@
    %
    % Now you can print the title using @title.
    \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefont{##1}}
+   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
                     % print a rule at the page bottom also.
                     \finishedtitlepagefalse
                     \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
@@ -1411,6 +1520,23 @@
    % after the title page, which we certainly don't want.
    \oldpage
    \endgroup
+   %
+   % 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
+   %
+   \ifpdf \pdfmakepagedesttrue \fi
+   %
    \HEADINGSon
 }
 
@@ -1424,10 +1550,10 @@
 
 \let\thispage=\folio
 
-\newtoks \evenheadline    % Token sequence for heading line of even pages
-\newtoks \oddheadline     % Token sequence for heading line of odd pages
-\newtoks \evenfootline    % Token sequence for footing line of even pages
-\newtoks \oddfootline     % Token sequence for footing line of odd pages
+\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
@@ -1461,10 +1587,7 @@
 \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\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{%
@@ -1472,12 +1595,15 @@
 
 \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
 \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+  \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{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
 %
 }% unbind the catcode of @.
 
@@ -1545,39 +1671,23 @@
 
 % Subroutines used in generating headings
 % Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
+\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}
 
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
+% @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,}
-
-% @tabs -- simple alignment
-
-% These don't work.  For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
 % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
 
 % default indentation of table text
@@ -1621,11 +1731,6 @@
   \itemindex{#1}%
   \nobreak % This prevents a break before @itemx.
   %
-  % Be sure we are not still in the middle of a paragraph.
-  %{\parskip = 0in
-  %\par
-  %}%
-  %
   % 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
@@ -1654,13 +1759,17 @@
     \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.  Since that
-    % text will be indented by \tableindent, we make the item text be in
-    % a zero-width box.
+    % following text (if any) will end up on the same line.
     \noindent
-    \rlap{\hskip -\tableindent\box0}\ignorespaces%
-    \endgroup%
-    \itemxneedsnegativevskiptrue%
+    % 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
 }
 
@@ -1671,9 +1780,10 @@
 \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
+% 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{%
@@ -1733,7 +1843,7 @@
 \def\itemize{\parsearg\itemizezzz}
 
 \def\itemizezzz #1{%
-  \begingroup % ended by the @end itemsize
+  \begingroup % ended by the @end itemize
   \itemizey {#1}{\Eitemize}
 }
 
@@ -1861,7 +1971,7 @@
 \def\itemizeitem{%
 \advance\itemno by 1
 {\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
+\ifhmode \errmessage{In hmode at itemizeitem}\fi
 {\parskip=0in \hskip 0pt
 \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
 \vadjust{\penalty 1200}}%
@@ -1879,7 +1989,7 @@
 
 % To make preamble:
 %
-% Either define widths of columns in terms of percent of \hsize: 
+% Either define widths of columns in terms of percent of \hsize:
 %   @multitable @columnfractions .25 .3 .45
 %   @item ...
 %
@@ -1897,13 +2007,13 @@
 % the preamble, break the line within one argument and it
 % will parse correctly, i.e.,
 %
-%     @multitable {Column 1 template} {Column 2 template} {Column 3 
+%     @multitable {Column 1 template} {Column 2 template} {Column 3
 %      template}
 % Not:
-%     @multitable {Column 1 template} {Column 2 template} 
+%     @multitable {Column 1 template} {Column 2 template}
 %      {Column 3 template}
 
-% Each new table line starts with @item, each subsequent new column 
+% 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.
@@ -1915,15 +2025,15 @@
 
 %   @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 
+%   @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
@@ -1935,10 +2045,7 @@
 % @multitablelinespace is space to leave between table items, baseline
 %                                                            to baseline.
 %   0pt means it depends on current normal line spacing.
-
-%%%%
-% Dimensions 
-
+%
 \newskip\multitableparskip
 \newskip\multitableparindent
 \newdimen\multitablecolspace
@@ -1948,117 +2055,150 @@
 \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
 
-%% 2/1/96, to allow fractions to be given with more than one digit.
-\def\pickupwholefraction#1 {\global\advance\colcount by1 %
-\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-\setuptable}
+% #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%
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
   \else
-    \ifsetpercent
-       \let\go\pickupwholefraction   % In this case arg of setuptable
-                                     % is the decimal point before the
-                                     % number given in percent of hsize.
-                                     % We don't need this so we don't use it.
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
     \else
-       \global\advance\colcount by1
-       \setbox0=\hbox{#1 }% 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}%
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip }% 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%
-\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
-\fi\go}
-
-%%%%
-% multitable syntax
-\def\tab{&\hskip1sp\relax} % 2/2/96
-                           % tiny skip here makes sure this column space is
-                           % maintained, even if it is never used.
-
-
-%%%%
-% @multitable ... @end multitable definitions:
-
-\def\multitable{\parsearg\dotable}
-
-\def\dotable#1{\bgroup
-\let\item\cr
-\tolerance=9500
-\hbadness=9500
-\setmultitablespacing
-\parskip=\multitableparskip
-\parindent=\multitableparindent
-\overfullrule=0pt
-\global\colcount=0\relax%
-\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-\setuptable#1 \endsetuptable
- % Need to reset this to 0 after \setuptable.
-\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 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.
-\ifnum\colcount=1
-\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
-\noindent##\multistrut}\cr%
- % \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.
-\global\everycr{\noalign{%
-\filbreak%% keeps underfull box messages off when table breaks over pages.
-\global\colcount=0\relax}}
+  \go
+}
+
+% This used to have \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.
+\def\tab{&}
+
+% @multitable ... @end multitable definitions:
+%
+\def\multitable{\parsearg\dotable}
+\def\dotable#1{\bgroup
+  \vskip\parskip
+  \let\item\crcr
+  \tolerance=9500
+  \hbadness=9500
+  \setmultitablespacing
+  \parskip=\multitableparskip
+  \parindent=\multitableparindent
+  \overfullrule=0pt
+  \global\colcount=0
+  \def\Emultitable{\global\setpercentfalse\cr\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
-%% 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.
 \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
@@ -2071,6 +2211,356 @@
 \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.
+%
+\def\ignoremorecommands{%
+  \let\defcodeindex = \relax
+  \let\defcv = \relax
+  \let\deffn = \relax
+  \let\deffnx = \relax
+  \let\defindex = \relax
+  \let\defivar = \relax
+  \let\defmac = \relax
+  \let\defmethod = \relax
+  \let\defop = \relax
+  \let\defopt = \relax
+  \let\defspec = \relax
+  \let\deftp = \relax
+  \let\deftypefn = \relax
+  \let\deftypefun = \relax
+  \let\deftypeivar = \relax
+  \let\deftypeop = \relax
+  \let\deftypevar = \relax
+  \let\deftypevr = \relax
+  \let\defun = \relax
+  \let\defvar = \relax
+  \let\defvr = \relax
+  \let\ref = \relax
+  \let\xref = \relax
+  \let\printindex = \relax
+  \let\pxref = \relax
+  \let\settitle = \relax
+  \let\setchapternewpage = \relax
+  \let\setchapterstyle = \relax
+  \let\everyheading = \relax
+  \let\evenheading = \relax
+  \let\oddheading = \relax
+  \let\everyfooting = \relax
+  \let\evenfooting = \relax
+  \let\oddfooting = \relax
+  \let\headings = \relax
+  \let\include = \relax
+  \let\lowersections = \relax
+  \let\down = \relax
+  \let\raisesections = \relax
+  \let\up = \relax
+  \let\set = \relax
+  \let\clear = \relax
+  \let\item = \relax
+}
+
+% Ignore @ignore ... @end ignore.
+%
+\def\ignore{\doignore{ignore}}
+
+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
+%
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\html{\doignore{html}}
+\def\menu{\doignore{menu}}
+\def\direntry{\doignore{direntry}}
+
+% @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.
+  \catcode32 = 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
+  %
+  % 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
+  %
+  % And now expand that command.
+  \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/pub/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 change of memory overflow, we follow the approach outlined on
+  % page 401 of the TeXbook: make the current font be a dummy font.
+  %
+  \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 not all sites
+    % might 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 (mostly for their use in smallexample).
+    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+    \let\smallsf=\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`\-=12 \catcode`\_=12
+    \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, 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'']}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+\def\ifset{\parsearg\ifsetxxx}
+\def\ifsetxxx #1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    \expandafter\ifsetfail
+  \else
+    \expandafter\ifsetsucceed
+  \fi
+}
+\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\ifclearxxx}
+\def\ifclearxxx #1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    \expandafter\ifclearsucceed
+  \else
+    \expandafter\ifclearfail
+  \fi
+}
+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+\def\ifclearfail{\nestedignore{ifclear}}
+\defineunmatchedend{ifclear}
+
+% @iftex, @ifnothtml, @ifnotinfo 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}}
+\defineunmatchedend{iftex}
+\defineunmatchedend{ifnothtml}
+\defineunmatchedend{ifnotinfo}
+
+% We can't just want to start a group at @iftex (for example) and end it
+% at @end iftex, since then @set commands inside the conditional have no
+% effect (they'd get reverted at the end of the group).  So we must
+% define \Eiftex to redefine itself to be its previous value.  (We can't
+% just define it to fail again with an ``unmatched end'' error, since
+% the @ifset might be nested.)
+%
+\def\conditionalsucceed#1{%
+  \edef\temp{%
+    % Remember the current value of \E#1.
+    \let\nece{prevE#1} = \nece{E#1}%
+    %
+    % At the `@end #1', redefine \E#1 to be its previous value.
+    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+  }%
+  \temp
+}
+
+% We need to expand lots of \csname's, but we don't want to expand the
+% control sequences after we've constructed them.
+%
+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
 \message{indexing,}
 % Index generation facilities
 
@@ -2086,12 +2576,14 @@
 % 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{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#1}}
+%
+\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}
@@ -2100,31 +2592,37 @@
 
 % Define @defcodeindex, like @defindex except put all entries in @code.
 
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#1}}
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}
 }
 
 \def\defcodeindex{\parsearg\newcodeindex}
 
 % @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.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#2}}%
+% The \closeout helps reduce unnecessary open files; the limit on the
+% Acorn RISC OS is a mere 16 files.
+\def\synindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\doindex{#2}}%
 }
 
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#2}}%
+\def\syncodeindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\docodeindex{#2}}%
 }
 
 % Define \doindex, the driver for all \fooindex macros.
@@ -2145,6 +2643,7 @@
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
 
 \def\indexdummies{%
+\def\ { }%
 % Take care of the plain tex accent commands.
 \def\"{\realbackslash "}%
 \def\`{\realbackslash `}%
@@ -2174,8 +2673,11 @@
 % (Must be a way to avoid doing expansion at all, and thus not have to
 % laboriously list every single command here.)
 \def\@{@}% will be @@ when we switch to @ as escape char.
-%\let\{ = \lbracecmd
-%\let\} = \rbracecmd
+% 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
 \def\_{{\realbackslash _}}%
 \def\w{\realbackslash w }%
 \def\bf{\realbackslash bf }%
@@ -2186,12 +2688,22 @@
 \def\gtr{\realbackslash gtr}%
 \def\less{\realbackslash less}%
 \def\hat{\realbackslash hat}%
-%\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
+\def\result{\realbackslash result}%
+\def\equiv{\realbackslash equiv}%
+\def\expansion{\realbackslash expansion}%
+\def\print{\realbackslash print}%
+\def\error{\realbackslash error}%
+\def\point{\realbackslash point}%
+\def\copyright{\realbackslash copyright}%
 \def\tclose##1{\realbackslash tclose {##1}}%
 \def\code##1{\realbackslash code {##1}}%
+\def\uref##1{\realbackslash uref {##1}}%
+\def\url##1{\realbackslash url {##1}}%
+\def\env##1{\realbackslash env {##1}}%
+\def\command##1{\realbackslash command {##1}}%
+\def\option##1{\realbackslash option {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%
 \def\samp##1{\realbackslash samp {##1}}%
 \def\,##1{\realbackslash ,{##1}}%
@@ -2199,6 +2711,7 @@
 \def\r##1{\realbackslash r {##1}}%
 \def\i##1{\realbackslash i {##1}}%
 \def\b##1{\realbackslash b {##1}}%
+\def\sc##1{\realbackslash sc {##1}}%
 \def\cite##1{\realbackslash cite {##1}}%
 \def\key##1{\realbackslash key {##1}}%
 \def\file##1{\realbackslash file {##1}}%
@@ -2206,7 +2719,16 @@
 \def\kbd##1{\realbackslash kbd {##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}%
 \def\emph##1{\realbackslash emph {##1}}%
+\def\acronym##1{\realbackslash acronym {##1}}%
+%
+% 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
+%
 \unsepspaces
+% Turn off macro expansion
+\turnoffmacros
 }
 
 % If an index command is used in an @example environment, any spaces
@@ -2263,6 +2785,12 @@
 %\let\tt=\indexdummyfont
 \let\tclose=\indexdummyfont
 \let\code=\indexdummyfont
+\let\url=\indexdummyfont
+\let\uref=\indexdummyfont
+\let\env=\indexdummyfont
+\let\acronym=\indexdummyfont
+\let\command=\indexdummyfont
+\let\option=\indexdummyfont
 \let\file=\indexdummyfont
 \let\samp=\indexdummyfont
 \let\kbd=\indexdummyfont
@@ -2278,14 +2806,24 @@
 % so we do not become unable to do a definition.
 
 {\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
+ @gdef@realbackslash{\}}
 
 \let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
+% 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}}%
@@ -2296,48 +2834,75 @@
       \indexdummies % Must do this here, since \bf, etc expand at this stage
       \escapechar=`\\
       {%
-        \let\folio=0 % We will expand all macros now EXCEPT \folio.
+        \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.
         %
-        % First process the index-string with all font commands turned off
-        % to get the string to sort by.
-        {\indexnofonts \xdef\indexsorttmp{#2}}%
+        \def\thirdarg{#3}%
         %
-        % Now produce the complete index entry, with both the sort key and the
-        % original text, including any font commands.
+        % If third arg is present, precede it with space in sort key.
+        \ifx\thirdarg\emptymacro
+          \let\subentry = \empty
+        \else
+          \def\subentry{ #3}%
+        \fi
+        %
+        % First process the index entry with all font commands turned
+        % off to get the string to sort by.
+        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
+        %
+        % Now the real index entry with the fonts.
         \toks0 = {#2}%
+        %
+        % If third (subentry) arg is present, add it to the index
+        % string.  And include a space.
+        \ifx\thirdarg\emptymacro \else
+          \toks0 = \expandafter{\the\toks0 \space #3}%
+        \fi
+        %
+        % 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, texindex reduces to
+        % two when writing the .??s sorted result.
         \edef\temp{%
           \write\csname#1indfile\endcsname{%
             \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
         }%
-        \temp
+        %
+        % 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-\lastskip \fi
+          \fi
+          %
+          \temp % do the write
+          %
+          %
+          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+        \fi
       }%
     }%
     \penalty\count255
   }%
 }
 
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
-
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
 % or
@@ -2370,36 +2935,30 @@
 
 % Define the macros used in formatting output of the sorted index material.
 
-% This is what you call to cause a particular index to get printed.
-% Write
-% @unnumbered Function Index
-% @printindex fn
-
+% @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}%
   %
-  \indexfonts \rm
+  \smallfonts \rm
   \tolerance = 9500
   \indexbreaks
-  \def\indexbackslash{\rawbackslashxx}%
-  % 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.
-  \catcode`\\ = 0
-  \catcode`\@ = 11
-  \escapechar = `\\
-  \begindoublecolumns
   %
   % 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.
-    (Index is nonexistent)
+    \putwordIndexNonexistent
   \else
     %
     % If the index file exists but is empty, then \openin leaves \ifeof
@@ -2407,33 +2966,54 @@
     % it can discover if there is anything in it.
     \read 1 to \temp
     \ifeof 1
-      (Index is empty)
+      \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
-  \enddoublecolumns
 \endgroup}
 
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
-
-\def\initial #1{%
-{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
+\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
+\def\entry#1#2{\begingroup
   %
   % Start a new paragraph if necessary, so our assignments below can't
   % affect previous text.
@@ -2456,12 +3036,15 @@
   %
   % \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
+  \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
@@ -2486,7 +3069,11 @@
     % The `\ ' here is removed by the implicit \unskip that TeX does as
     % part of (the primitive) \par.  Without it, a spurious underfull
     % \hbox ensues.
-    \ #2% The page number ends the paragraph.
+    \ifpdf
+      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+    \else
+      \ #2% The page number ends the paragraph.
+    \fi
   \fi%
   \par
 \endgroup}
@@ -2515,24 +3102,41 @@
 
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.
-  \output = {\global\setbox\partialpage
-    =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
-  \eject
+  \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
   %
-  % Now switch to the double-column output routine.
-  \output={\doublecolumnout}%
+  % 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 once.
+  % 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.
+  % 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)
@@ -2545,109 +3149,140 @@
   %
   % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)
+  \advance\vsize by -\ht\partialpage
   \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@=\pageheight \advance\dimen@ by-\ht\partialpage
-  % box0 will be the left-hand column, box1 the right.
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  %
+  % box0 will be the left-hand column, box2 the right.
   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
   \onepageout\pagesofar
-  \unvbox255 \penalty\outputpenalty
+  \unvbox255
+  \penalty\outputpenalty
 }
 \def\pagesofar{%
-  % The contents of the output page -- any previous material,
-  % followed by the two boxes we just split.
+  % Re-output the contents of the output page -- any previous material,
+  % followed by the two boxes we just split, in box0 and box2.
   \unvbox\partialpage
+  %
   \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
 }
 \def\enddoublecolumns{%
-  \output={\balancecolumns}\eject % split what we have
-  \endgroup
-  % Back to normal single-column typesetting, but take account of the
-  % fact that we just accumulated some stuff on the output page.
-  \pagegoal=\vsize 
+  \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
 }
 \def\balancecolumns{%
-  % Called on the last page of the double column material.
-  \setbox0=\vbox{\unvbox255}%
+  % Called at the end of the double column material.
+  \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
+  \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@ by1pt \repeat}%
+  {%
+    \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
+\catcode`\@ = \other
 
 
 \message{sectioning,}
-% Define chapters, sections, etc.
+% Chapters, sections, etc.
 
-\newcount \chapno
-\newcount \secno        \secno=0
-\newcount \subsecno     \subsecno=0
-\newcount \subsubsecno  \subsubsecno=0
+\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}
-
-\newwrite \contentsfile
-% This is called from \setfilename.
-\def\opencontents{\openout \contentsfile = \jobname.toc}
+\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{}
-\def\seccheck#1{\if \pageno<0 %
-\errmessage{@#1 not allowed after generating table of contents}\fi
-%
-}
-
-\def\chapternofonts{%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\def\result{\realbackslash result}
-\def\equiv{\realbackslash equiv}
-\def\expansion{\realbackslash expansion}
-\def\print{\realbackslash print}
-\def\TeX{\realbackslash TeX}
-\def\dots{\realbackslash dots}
-\def\copyright{\realbackslash copyright}
-\def\tt{\realbackslash tt}
-\def\bf{\realbackslash bf }
-\def\w{\realbackslash w}
-\def\less{\realbackslash less}
-\def\gtr{\realbackslash gtr}
-\def\hat{\realbackslash hat}
-\def\char{\realbackslash char}
-\def\tclose##1{\realbackslash tclose {##1}}
-\def\code##1{\realbackslash code {##1}}
-\def\samp##1{\realbackslash samp {##1}}
-\def\r##1{\realbackslash r {##1}}
-\def\b##1{\realbackslash b {##1}}
-\def\key##1{\realbackslash key {##1}}
-\def\file##1{\realbackslash file {##1}}
-\def\kbd##1{\realbackslash kbd {##1}}
-% These are redefined because @smartitalic wouldn't work inside xdef.
-\def\i##1{\realbackslash i {##1}}
-\def\cite##1{\realbackslash cite {##1}}
-\def\var##1{\realbackslash var {##1}}
-\def\emph##1{\realbackslash emph {##1}}
-\def\dfn##1{\realbackslash dfn {##1}}
-}
+% 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
@@ -2719,57 +3354,59 @@
 \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{\seccheck{chapter}%
+\def\chapterzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
+\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}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\donoderef %
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+                                  {\the\chapno}}}%
+\temp
+\donoderef
 \global\let\section = \numberedsec
 \global\let\subsection = \numberedsubsec
 \global\let\subsubsection = \numberedsubsubsec
-}}
+}
 
 \outer\def\appendix{\parsearg\appendixyyy}
 \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{\seccheck{appendix}%
+\def\appendixzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
+\global\advance \appendixno by 1
+\message{\putwordAppendix\space \appendixletter}%
 \chapmacro {#1}{\putwordAppendix{} \appendixletter}%
 \gdef\thissection{#1}%
 \gdef\thischaptername{#1}%
 \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-{\chapternofonts%
-\edef\temp{{\realbackslash chapentry
-  {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\appendixnoderef %
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+                       {\putwordAppendix{} \appendixletter}}}%
+\temp
+\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{\seccheck{unnumbered}%
+\def\unnumberedzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
 %
 % This used to be simply \message{#1}, but TeX fully expands the
@@ -2781,146 +3418,139 @@
 % Anyway, we don't want the fully-expanded definition of @cite to appear
 % as a result of the \message, we just want `@cite' itself.  We use
 % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of the <toks register>.
+% simply yielding the contents of <toks register>.  (We also do this for
+% the toc entries.)
 \toks0 = {#1}\message{(\the\toks0)}%
 %
 \unnumbchapmacro {#1}%
 \gdef\thischapter{#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+\temp
+\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{\seccheck{section}%
+\def\seczzz #1{%
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                  {\the\chapno}{\the\secno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsection{\parsearg\appendixsecyyy}
 \outer\def\appendixsec{\parsearg\appendixsecyyy}
 \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
+\def\appendixsectionzzz #1{%
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash secentry %
-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                  {\appendixletter}{\the\secno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
 \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+\def\unnumberedseczzz #1{%
 \plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
 
+% Subsections.
 \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
 \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{\seccheck{subsection}%
+\def\numberedsubseczzz #1{%
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                    {\the\chapno}{\the\secno}{\the\subsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
 \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
+\def\appendixsubseczzz #1{%
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                {\appendixletter}{\the\secno}{\the\subsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
 \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+\def\unnumberedsubseczzz #1{%
 \plainsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
+                                    {\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
 
+% Subsubsections.
 \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
 \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
+\def\numberedsubsubseczzz #1{%
 \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
 \subsubsecheading {#1}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry %
-  {#1}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-  {\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
 \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
+\def\appendixsubsubseczzz #1{%
 \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
 \subsubsecheading {#1}
   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry{#1}%
-  {\appendixletter}
-  {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
 \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+\def\unnumberedsubsubseczzz #1{%
 \plainsubsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\toks0 = {#1}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
+                                    {\the\toks0}}}%
+\temp
+\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.
@@ -2949,8 +3579,7 @@
 
 % Define @majorheading, @heading and @subheading
 
-% NOTE on use of \vbox for chapter headings, section headings, and
-% such:
+% 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
@@ -2997,12 +3626,12 @@
 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
 
-\def\CHAPPAGoff{
+\def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak
 \global\let\pagealignmacro=\chappager}
 
-\def\CHAPPAGon{
+\def\CHAPPAGon{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager
 \global\let\pagealignmacro=\chappager
@@ -3056,7 +3685,7 @@
 \def\unnchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\penalty 10000 %
+                       \rm #1\hfill}}\bigskip \par\nobreak
 }
 
 \def\chfopen #1#2{\chapoddpage {\chapfonts
@@ -3067,7 +3696,7 @@
 \def\centerchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
+                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
 }
 
 \def\CHAPFopen{
@@ -3096,7 +3725,7 @@
 
 
 % 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{%
@@ -3120,43 +3749,77 @@
 }
 
 
-\message{toc printing,}
-% Finish up the main text and prepare to read what we've written
-% to \contentsfile.
+\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.
+%
+% We open the .toc file here instead of at @setfilename or any other
+% given time so that @contents can be put in the document anywhere.
+%
+\newif\iftocfileopened
+\def\writetocentry#1{%
+  \iftocfileopened\else
+    \immediate\openout\tocfile = \jobname.toc
+    \global\tocfileopenedtrue
+  \fi
+  \iflinks \write\tocfile{#1{\folio}}\fi
+}
 
 \newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Finish up the main text and prepare to read what we've written
+% to \tocfile.
+%
 \def\startcontents#1{%
    % If @setchapternewpage on, and @headings double, the contents should
    % start on an odd page, unlike chapters.  Thus, we maintain
    % \contentsalignmacro in parallel with \pagealignmacro.
    % From: Torbjorn Granlund <tege@matematik.su.se>
    \contentsalignmacro
-   \immediate\closeout \contentsfile
-   \ifnum \pageno>0
-      \pageno = -1              % Request roman numbered pages.
-   \fi
+   \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
-      \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+      % 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 \pageno = \lastnegativepageno \fi
 }
 
 
 % Normal (long) toc.
-\outer\def\contents{%
-   \startcontents{\putwordTableofContents}%
-      \input \jobname.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
-   \vfill \eject
+   \lastnegativepageno = \pageno
+   \pageno = \savepageno
 }
 
 % And just the chapters.
-\outer\def\summarycontents{%
-   \startcontents{\putwordShortContents}%
+\def\summarycontents{%
+   \startcontents{\putwordShortTOC}%
       %
       \let\chapentry = \shortchapentry
       \let\unnumbchapentry = \shortunnumberedentry
@@ -3172,12 +3835,23 @@
       \def\unnumbsubsecentry ##1##2{}
       \def\subsubsecentry ##1##2##3##4##5##6{}
       \def\unnumbsubsubsecentry ##1##2{}
-      \input \jobname.toc
+      \openin 1 \jobname.toc
+      \ifeof 1 \else
+        \closein 1
+        \input \jobname.toc
+      \fi
+     \vfill \eject
+     \contentsalignmacro % in case @setchapternewpage odd is in effect
    \endgroup
-   \vfill \eject
+   \lastnegativepageno = \pageno
+   \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.
@@ -3188,7 +3862,7 @@
 
 % See comments in \dochapentry re vbox and related settings
 \def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
 }
 
 % Typeset the label for a chapter or appendix for the short contents.
@@ -3196,10 +3870,14 @@
 % 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.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
+%
+\newdimen\shortappendixwidth
+%
 \def\shortchaplabel#1{%
+  % Compute width of word "Appendix", may change with language.
+  \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
+  \shortappendixwidth = \wd0
+  %
   % We typeset #1 in a box of constant width, regardless of the text of
   % #1, so the chapter titles will come out aligned.
   \setbox0 = \hbox{#1}%
@@ -3214,7 +3892,7 @@
 }
 
 \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
 
 % Sections.
 \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
@@ -3241,35 +3919,36 @@
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
      \chapentryfonts
-     \tocentry{#1}{\dopageno{#2}}%
+     \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{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsecentry#1#2{\begingroup
   \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsubsecentry#1#2{\begingroup
   \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \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.)
-%
-% \turnoffactive is for the sake of @" used for umlauts.
 \def\tocentry#1#2{\begingroup
   \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-  \entry{\turnoffactive #1}{\turnoffactive #2}%
+  % Do not use \turnoffactive in these arguments.  Since the toc is
+  % typeset in cmr, so 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.
@@ -3285,6 +3964,7 @@
 
 
 \message{environments,}
+% @foo ... @end foo.
 
 % 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.
@@ -3335,31 +4015,36 @@
 % 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 `\~=13 \let~=\tie
-\catcode `\%=14
-\catcode 43=12 % plus
-\catcode`\"=12
-\catcode`\==12
-\catcode`\|=12
-\catcode`\<=12
-\catcode`\>=12
-\escapechar=`\\
-%
-\let\,=\ptexcomma
-\let\~=\ptextilde
-\let\{=\ptexlbrace
-\let\}=\ptexrbrace
-\let\.=\ptexdot
-\let\*=\ptexstar
-\let\dots=\ptexdots
-\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}
-\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}
-\def\@{@}%
-\let\bullet=\ptexbullet
-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
-%
+  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+  \catcode `\%=14
+  \catcode 43=12 % plus
+  \catcode`\"=12
+  \catcode`\==12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \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 ... @endlisp.
@@ -3404,8 +4089,8 @@
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
 \let\nonarrowing=\relax
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
 \font\circle=lcircle10
 \newdimen\circthick
 \newdimen\cartouter\newdimen\cartinner
@@ -3432,9 +4117,9 @@
         \cartinner=\hsize \advance\cartinner by-\lskip
                           \advance\cartinner by-\rskip
         \cartouter=\hsize
-        \advance\cartouter by 18pt % allow for 3pt kerns on either
+        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
 %                                    side, and for 6pt waste from
-%                                    each corner char
+%                                    each corner char, and rule thickness
         \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
         % Flag to tell @lisp, etc., not to narrow margin.
         \let\nonarrowing=\comment
@@ -3488,48 +4173,52 @@
   \fi
 }
 
-% To ending 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.
+% Define the \E... control sequence only if we are inside the particular
+% environment, so the error checking in \end will work.
 %
-\def\nonfillfinish{\afterenvbreak\endgroup}%
+% 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}
 
-% This macro is
+% @lisp: indented, narrowed, typewriter font.
 \def\lisp{\begingroup
   \nonfillstart
   \let\Elisp = \nonfillfinish
   \tt
-  \rawbackslash % have \ input char produce \ char from current font
-  \gobble
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
 }
 
-% Define the \E... control sequence only if we are inside the
-% environment, so the error checking in \end will work.
-%
-% We must call \lisp last in the definition, since it reads the
-% return following the @example (or whatever) command.
-%
+% @example: Same as @lisp.
 \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
 
-% @smallexample and @smalllisp.  This is not used unless the @smallbook
-% command is given.  Originally contributed by Pavel@xerox.
+% @small... is usually equivalent to the non-small (@smallbook
+% redefines).  We must call \example (or whatever) last in the
+% definition, since it reads the return following the @example (or
+% whatever) command.
 %
+% This actually allows (for example) @end display inside an
+% @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
+%
+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+
+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
+% Originally contributed by Pavel@xerox.
 \def\smalllispx{\begingroup
-  \nonfillstart
-  \let\Esmalllisp = \nonfillfinish
-  \let\Esmallexample = \nonfillfinish
-  %
-  % Smaller fonts for small examples.
-  \indexfonts \tt
-  \rawbackslash % make \ output the \ character from the current font (tt)
-  \gobble
+  \def\Esmalllisp{\nonfillfinish\endgroup}%
+  \def\Esmallexample{\nonfillfinish\endgroup}%
+  \smallfonts
+  \lisp
 }
 
-% This is @display; same as @lisp except use roman font.
+% @display: same as @lisp except keep current font.
 %
 \def\display{\begingroup
   \nonfillstart
@@ -3537,7 +4226,15 @@
   \gobble
 }
 
-% This is @format; same as @display except don't narrow margins.
+% @smalldisplay (when @smallbook): @display plus smaller fonts.
+%
+\def\smalldisplayx{\begingroup
+  \def\Esmalldisplay{\nonfillfinish\endgroup}%
+  \smallfonts \rm
+  \display
+}
+
+% @format: same as @display except don't narrow margins.
 %
 \def\format{\begingroup
   \let\nonarrowing = t
@@ -3546,20 +4243,27 @@
   \gobble
 }
 
-% @flushleft (same as @format) and @flushright.
+% @smallformat (when @smallbook): @format plus smaller fonts.
 %
-\def\flushleft{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushleft = \nonfillfinish
-  \gobble
+\def\smallformatx{\begingroup
+  \def\Esmallformat{\nonfillfinish\endgroup}%
+  \smallfonts \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}
+  \gobble
+}
 
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
 % and narrows the margins.
@@ -3582,9 +4286,11 @@
   \fi
 }
 
+
 \message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
+% @defun etc.
+
+% Allow user to change definition object font (\df) internally
 \def\setdeffont #1 {\csname DEF#1\endcsname}
 
 \newskip\defbodyindent \defbodyindent=.4in
@@ -3618,16 +4324,17 @@
 
 % 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 }
+\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 }
+  % 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\&#1}\let(=\oprm \let)=\clrm\ }
 %
@@ -3635,8 +4342,17 @@
 } % 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`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+\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`& = 13
+  \global\let& = \ampnr
+}
 
 % First, defname, which formats the header line itself.
 % #1 should be the function name.
@@ -3647,20 +4363,18 @@
 % outside the @def...
 \dimen2=\leftskip
 \advance\dimen2 by -\defbodyindent
-\dimen3=\rightskip
-\advance\dimen3 by -\defbodyindent
-\noindent        %
+\noindent
 \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
 \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     %
+\parshape 2 0in \dimen0 \defargsindent \dimen1
 % Now output arg 2 ("Function" or some such)
 % ending at \deftypemargin from the right margin,
 % but stuck inside a box of width 0 so it does not interfere with linebreaking
 {% Adjust \hsize to exclude the ambient margins,
 % so that \rightline will obey them.
-\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
+\advance \hsize by -\dimen2
+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
 % Make all lines underfull and no complaints:
 \tolerance=10000 \hbadness=10000
 \advance\leftskip by -\defbodyindent
@@ -3681,23 +4395,62 @@
 \def#1{\endgraf\endgroup\medbreak}%
 \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup %
 \catcode 61=\active % 61 is `='
 \obeylines\activeparens\spacesplit#3}
 
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by the space, is the class name.
+%
+\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
 % so that it will exit this group.
 \def#1{\endgraf\endgroup\medbreak}%
 \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
 
+% Used for @deftypemethod and @deftypeivar.
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by a space, is the class name.
+% #5 is the method's return type.
+%
+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
+  \medbreak
+  \def#1{\endgraf\endgroup\medbreak}%
+  \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+  \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 {\begingroup\inENV
+  \medbreak
+  \def#1{\endgraf\endgroup\medbreak}%
+  \def#2##1 ##2 ##3 {%
+    \def#4{##1}%
+    \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+  \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
+
 \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
@@ -3706,7 +4459,7 @@
 \def#2##1 ##2 {\def#4{##1}%
 \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
 
@@ -3721,7 +4474,7 @@
 \def#1{\endgraf\endgroup\medbreak}%
 \def#2{\begingroup\obeylines\spacesplit#3}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup %
 \catcode 61=\active %
@@ -3729,7 +4482,7 @@
 
 % This is used for \def{tp,vr}parsebody.  It could probably be used for
 % some of the others, too, with some judicious conditionals.
-% 
+%
 \def\parsebodycommon#1#2#3{%
   \begingroup\inENV %
   \medbreak %
@@ -3738,7 +4491,7 @@
   \def#1{\endgraf\endgroup\medbreak}%
   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
   \parindent=0in
-  \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+  \advance\leftskip by \defbodyindent
   \exdentamount=\defbodyindent
   \begingroup\obeylines
 }
@@ -3763,17 +4516,16 @@
 }
 
 % Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does, putting the result in \tptemp.
-% 
-\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
+% 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{%
-  \removeemptybraces#2\relax
-  #1{\tptemp}{#3}%
+  #1{\removeemptybraces#2\relax}{#3}%
 }%
 
 \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
@@ -3784,7 +4536,7 @@
 \def#2##1 ##2 {\def#4{##1}%
 \begingroup\obeylines\spacesplit{#3{##2}}}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\spacesplit{#3{#5}}}
 
@@ -3808,16 +4560,17 @@
 % First, define the processing that is wanted for arguments of \defun
 % Use this to expand the args and terminate the paragraph they make up
 
-\def\defunargs #1{\functionparens \sl
+\def\defunargs#1{\functionparens \sl
 % Expand, preventing hyphenation at `-' chars.
 % Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
+{\tensl\hyphenchar\font=0}%
 #1%
-\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+{\tensl\hyphenchar\font=45}%
+\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
 \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+\endgraf\nobreak\vskip -\parskip\nobreak
 }
 
 \def\deftypefunargs #1{%
@@ -3828,7 +4581,7 @@
 \tclose{#1}% avoid \code because of side effects on active chars
 \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+\endgraf\nobreak\vskip -\parskip\nobreak
 }
 
 % Do complete processing of one @defun or @defunx line already parsed.
@@ -3847,7 +4600,7 @@
 \def\defun{\defparsebody\Edefun\defunx\defunheader}
 
 \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
+\begingroup\defname {#1}{\putwordDeffunc}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -3861,7 +4614,7 @@
 % #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}{Function}%
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
 \deftypefunargs {#3}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -3892,7 +4645,7 @@
 \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
 
 \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
+\begingroup\defname {#1}{\putwordDefmac}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -3902,42 +4655,77 @@
 \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
 
 \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
+\begingroup\defname {#1}{\putwordDefspec}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
 
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop {Funny Method} foo-class frobnicate argument
-
+% @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}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
+%
+\def\defopheader#1#2#3{%
+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
+\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{#3}{\putwordInstanceVariableof\ \code{#1}}%
+    \defvarargs{#3}%
+  \endgroup
+}
+
 % @defmethod == @defop Method
-
+%
 \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
+%
+% #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
@@ -3946,37 +4734,30 @@
 \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
 
 \def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
 \defvarargs {#3}\endgroup %
 }
 
-% @defivar == @defcv {Instance Variable}
-
+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+%
 \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
+%
+\def\defivarheader#1#2#3{%
+  \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
+  \begingroup
+    \defname{#2}{\putwordInstanceVariableof\ #1}%
+    \defvarargs{#3}%
+  \endgroup
 }
 
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
+% @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%
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
+\endgraf\nobreak\vskip -\parskip\nobreak}
 
 % @defvr Counter foo-count
 
@@ -3990,7 +4771,7 @@
 \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
 
 \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
+\begingroup\defname {#1}{\putwordDefvar}%
 \defvarargs {#2}\endgroup %
 }
 
@@ -3999,7 +4780,7 @@
 \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
 
 \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
+\begingroup\defname {#1}{\putwordDefopt}%
 \defvarargs {#2}\endgroup %
 }
 
@@ -4007,33 +4788,26 @@
 
 \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
 
-% #1 is the data type.  #2 is the name.
+% #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{%
-\doind {vr}{\code{#2}}% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
+\dovarind#2 \relax% Make entry in variables index
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgraf\nobreak\vskip -\parskip\nobreak
 \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{\doind {vr}{\code{#3}}%
+\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
 \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgraf\nobreak\vskip -\parskip\nobreak
 \endgroup}
 
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
 % Now define @deftp
 % Args are printed in bold, a slight difference from @defvar.
 
@@ -4046,51 +4820,394 @@
 \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
 \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
 
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
-
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
+% 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{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
+\message{macros,}
+% @macro.
 
-\newif\ifhavexrefs  % True if xref values are known.
+% 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`\\=12 \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`\\=12 \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=12\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`\~=12
+  \catcode`\^=12
+  \catcode`\_=12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \catcode`\+=12
+  \catcode`\{=12
+  \catcode`\}=12
+  \catcode`\@=12
+  \catcode`\^^M=12
+  \usembodybackslash}
+
+\def\macroargctxt{%
+  \catcode`\~=12
+  \catcode`\^=12
+  \catcode`\_=12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \catcode`\+=12
+  \catcode`\@=12
+  \catcode`\\=12}
+
+% \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{The name \the\macname\space is reserved}\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\unmacroxxx}
+\def\unmacroxxx#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
+      \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
+      \def\do##1{%
+        \def\tempb{##1}%
+        \ifx\tempa\tempb
+          % remove this
+        \else
+          \toks0 = \expandafter{\newmacrolist\do}%
+          \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
+        \fi}%
+      \def\newmacrolist{}%
+      % Execute macro list to define \newmacrolist
+      \macrolist
+      \global\let\macrolist\newmacrolist
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX:  let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+  \let\hash=##% convert placeholders to macro parameter chars
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup\noexpand\scanmacro{\temp}}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \egroup
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \expandafter\noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \egroup
+          \noexpand\norecurse{\the\macname}%
+          \noexpand\scanmacro{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \next}
+
+% We mant to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+  \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+           \expandafter\noexpand\csname#2\endcsname}%
+\expandafter\endgroup\next}
+
+
+\message{cross references,}
+% @xref etc.
+
+\newwrite\auxfile
+
+\newif\ifhavexrefs    % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
-% @inforef is simple.
+% @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{}}}
 
-% \setref{foo} defines a cross-reference point named foo.
+% @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
 
-\def\setref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
+% 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
+}
 
-\def\unnumbsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
 
-\def\appendixsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Yappendixletterandtype}}
+% @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}
 
-% \xref, \pxref, and \ref generate cross-references to specified points.
-% 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.
+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
+% NAME-title, NAME-pg, and NAME-SNT.  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.
+%
+\def\setref#1#2{{%
+  \indexdummies
+  \pdfmkdest{#1}%
+  \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}%
@@ -4103,7 +5220,7 @@
     \else
       % Use the actual chapter/section title appear inside
       % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1>0pt%
+      \ifdim \wd1 > 0pt
         % It is in another manual, so we don't have it.
         \def\printednodename{\ignorespaces #1}%
       \else
@@ -4124,27 +5241,54 @@
   % 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}%
+    \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'' in \cite{\printedmanual}%
+    \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 \refx{#1-snt}{}}%
-    \space [\printednodename],\space
+    {\normalturnoffactive
+     % 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 \putwordpage\tie\refx{#1-pg}{}%
   \fi
+  \endlink
 \endgroup}
 
 % \dosetq is the interface for calls from other macros
 
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat%
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
+% Use \normalturnoffactive so that punctuation chars such as underscore
+% and backslash work in node names.  (\turnoffactive doesn't do \.)
+\def\dosetq#1#2{%
+  {\let\folio=0%
+   \normalturnoffactive
+   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+   \iflinks
+     \next
+   \fi
+  }%
+}
 
 % \internalsetq {foo}{page} expands into
 % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
@@ -4195,13 +5339,15 @@
 \def\refx#1#2{%
   \expandafter\ifx\csname X#1\endcsname\relax
     % If not defined, say something at least.
-    $\langle$un\-de\-fined$\rangle$%
-    \ifhavexrefs
-      \message{\linenumber Undefined cross reference `#1'.}%
-    \else
-      \ifwarnedxrefs\else
-        \global\warnedxrefstrue
-        \message{Cross reference values unknown; you must run TeX again.}%
+    \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
@@ -4211,84 +5357,101 @@
   #2% Output the suffix in any case.
 }
 
-% Read the last existing aux file, if any.  No error if none exists.
-
 % This is the macro invoked by entries in the aux file.
-\def\xrdef #1#2{
-{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
+%
+\def\xrdef#1{\begingroup
+  % Reenable \ as an escape while reading the second argument.
+  \catcode`\\ = 0
+  \afterassignment\endgroup
+  \expandafter\gdef\csname X#1\endcsname
+}
 
-\def\readauxfile{%
-\begingroup
-\catcode `\^^@=\other
-\catcode `\=\other
-\catcode `\=\other
-\catcode `\^^C=\other
-\catcode `\^^D=\other
-\catcode `\^^E=\other
-\catcode `\^^F=\other
-\catcode `\^^G=\other
-\catcode `\^^H=\other
-\catcode `\=\other
-\catcode `\^^L=\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
-\catcode 26=\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
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode `\$=\other
-\catcode `\#=\other
-\catcode `\&=\other
-% `\+ does not work, so use 43.
-\catcode 43=\other
-% 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
+% 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
+  \catcode`\@=\other
+  \catcode`\^=\other
+  % It was suggested to define this as 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
+  \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
+    }%
   }%
-}%
-% the aux file uses ' as the escape.
-% 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 `\{=1 \catcode `\}=2
-\catcode `\%=\other
-\catcode `\'=0
-\catcode`\^=7 % to make ^^e4 etc usable in xref tags 
-\catcode `\\=\other
-\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
+  % The aux file uses ' as the escape (for now).
+  % 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`\{=1
+  \catcode`\}=2
+  \catcode`\%=\other
+  \catcode`\'=0
+  \catcode`\\=\other
+  %
+  \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}
 
 
@@ -4303,7 +5466,7 @@
 % space to prevent strange expansion errors.)
 \def\supereject{\par\penalty -20000\footnoteno =0 }
 
-% @footnotestyle is meaningful for info output only..
+% @footnotestyle is meaningful for info output only.
 \let\footnotestyle=\comment
 
 \let\ptexfootnote=\footnote
@@ -4329,7 +5492,11 @@
 % 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.
 %
-\long\gdef\footnotezzz#1{\insert\footins{%
+% 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.
+%
+\long\gdef\footnotezzz{\insert\footins\bgroup
   % 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.
@@ -4343,6 +5510,8 @@
   \xspaceskip\z@skip
   \parindent\defaultparindent
   %
+  \smallfonts \rm
+  %
   % Hang the footnote text off the number.
   \hang
   \textindent{\thisfootno}%
@@ -4351,8 +5520,13 @@
   % expands into a box, it must come within the paragraph, lest it
   % provide a place where TeX can split the footnote.
   \footstrut
-  #1\strut}%
+  \futurelet\next\fo@t
 }
+\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+  \else\let\next\f@t\fi \next}
+\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+\def\f@t#1{#1\@foot}
+\def\@foot{\strut\par\egroup}
 
 }%end \catcode `\@=11
 
@@ -4409,36 +5583,117 @@
 %
 \def\finalout{\overfullrule=0pt}
 
-
-% End of control word definitions.
-
-\message{and turning on texinfo input format.}
-
-\def\openindices{%
-   \newindex{cp}%
-   \newcodeindex{fn}%
-   \newcodeindex{vr}%
-   \newcodeindex{tp}%
-   \newcodeindex{ky}%
-   \newcodeindex{pg}%
+% @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 post-v2.7 epsf.tex (available in
+  % doc/epsf.tex until it shows up 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 just the usual extra ignored arg for parsing this stuff.
+\def\imagexxx#1,#2,#3,#4\finish{%
+  \ifpdf
+    \centerline{\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
+    \begingroup
+      \catcode`\^^M = 5 % in case we're inside an example
+      % If the image is by itself, center it.
+      \ifvmode
+        \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
+        \centerline{\epsfbox{#1.eps}}%
+        \bigbreak
+      \else
+        % In the middle of a paragraph, no extra space.
+        \epsfbox{#1.eps}%
+      \fi
+    \endgroup
+  \fi
 }
 
-% Set some numeric style parameters, for 8.5 x 11 format.
 
-\hsize = 6in
-\hoffset = .25in
+\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
-\parindent = \defaultparindent
-\parskip 3pt plus 2pt minus 1pt
-\setleading{13.2pt}
-\advance\topskip by 1.2cm
 
 \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
+\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
@@ -4447,101 +5702,125 @@
 % 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.  This makes it come to about 9pt for the 8.5x11 format.
+% \hsize.  We call this whenever the paper size is set.
 %
-\ifx\emergencystretch\thisisundefined
-  % Allow us to assign to \emergencystretch anyway.
-  \def\emergencystretch{\dimen0}%
-\else
-  \emergencystretch = \hsize
-  \divide\emergencystretch by 45
-\fi
-
-% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
-\def\smallbook{
-  \global\chapheadingskip = 15pt plus 4pt minus 2pt
-  \global\secheadingskip = 12pt plus 3pt minus 2pt
-  \global\subsecheadingskip = 9pt plus 2pt minus 2pt
-  %
-  \global\lispnarrowing = 0.3in
-  \setleading{12pt}
-  \advance\topskip by -1cm
-  \global\parskip 2pt plus 1pt
-  \global\hsize = 5in
-  \global\vsize=7.5in
-  \global\tolerance=700
-  \global\hfuzz=1pt
-  \global\contentsrightmargin=0pt
-  \global\deftypemargin=0pt
-  \global\defbodyindent=.5cm
-  %
-  \global\pagewidth=\hsize
-  \global\pageheight=\vsize
-  %
-  \global\let\smalllisp=\smalllispx
-  \global\let\smallexample=\smalllispx
-  \global\def\Esmallexample{\Esmalllisp}
+\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.  Then whoever calls us can
+% set \parskip and call \setleading for \baselineskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6{%
+  \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
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{13.2pt}%
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \setleading{12pt}%
+  %
+  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \deftypemargin = 0pt
+  \defbodyindent = .5cm
+  %
+  \let\smalldisplay = \smalldisplayx
+  \let\smallexample = \smalllispx
+  \let\smallformat = \smallformatx
+  \let\smalllisp = \smalllispx
+}}
+
 % Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
-
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize=   5.85in     % A4 wide 10pt
-\global\hsize=  6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
-
-\bindingoffset=0pt
-\normaloffset=\hoffset
-\pagewidth=\hsize
-\pageheight=\vsize
-
-% Allow control of the text dimensions.  Parameters in order: textheight;
-% textwidth; voffset; hoffset; binding offset; topskip.
-% All require a dimension;
-% header is additional; added length extends the bottom of the page.
-
-\def\changepagesizes#1#2#3#4#5#6{
- \global\vsize= #1
- \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
+\def\afourpaper{{\globaldefs = 1
+  \setleading{12pt}%
+  \parskip = 3pt plus 2pt minus 1pt
+  %
+  \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+}}
 
 % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
 % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex
-        {\global\tolerance=700
-        \global\hfuzz=1pt
-        \setleading{12pt}
-        \global\parskip 15pt plus 1pt
-        \advance\baselineskip by 1.6pt
-        \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-        }
+\def\afourlatex{{\globaldefs = 1
+  \setleading{13.6pt}%
+  %
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+  %
+  \globaldefs = 0
+}}
 
 % Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{\afourpaper
-\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+\def\afourwide{%
+  \afourpaper
+  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+  %
+  \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{13.2pt}%
+  %
+  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+}}
+
+% 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
@@ -4552,6 +5831,7 @@
 \catcode`\<=\other
 \catcode`\>=\other
 \catcode`\+=\other
+\catcode`\$=\other
 \def\normaldoublequote{"}
 \def\normaltilde{~}
 \def\normalcaret{^}
@@ -4560,6 +5840,7 @@
 \def\normalless{<}
 \def\normalgreater{>}
 \def\normalplus{+}
+\def\normaldollar{$}
 
 % 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,
@@ -4570,7 +5851,13 @@
 % 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\the\font=0pt #1\else #2\fi}
+\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).
@@ -4578,13 +5865,12 @@
 % use math or other variants that look better in normal text.
 
 \catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
+\def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active
-\def~{{\tt \char '176}}
+\def~{{\tt\char126}}
 \chardef\hat=`\^
 \catcode`\^=\active
-\def\auxhat{\def^{'hat}}
 \def^{{\tt \hat}}
 
 \catcode`\_=\active
@@ -4593,7 +5879,7 @@
 \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
 
 \catcode`\|=\active
-\def|{{\tt \char '174}}
+\def|{{\tt\char124}}
 \chardef \less=`\<
 \catcode`\<=\active
 \def<{{\tt \less}}
@@ -4602,6 +5888,8 @@
 \def>{{\tt \gtr}}
 \catcode`\+=\active
 \def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}
 %\catcode 27=\active
 %\def^^[{$\diamondsuit$}
 
@@ -4632,9 +5920,6 @@
 % \normalbackslash outputs one backslash in fixed width font.
 \def\normalbackslash{{\tt\rawbackslashxx}}
 
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
 % \catcode 17=0   % Define control-q
 \catcode`\\=\active
 
@@ -4648,7 +5933,8 @@
 @let|=@normalverticalbar
 @let<=@normalless
 @let>=@normalgreater
-@let+=@normalplus}
+@let+=@normalplus
+@let$=@normaldollar}
 
 @def@normalturnoffactive{@let"=@normaldoublequote
 @let\=@normalbackslash
@@ -4658,7 +5944,8 @@
 @let|=@normalverticalbar
 @let<=@normalless
 @let>=@normalgreater
-@let+=@normalplus}
+@let+=@normalplus
+@let$=@normaldollar}
 
 % Make _ and + \other characters, temporarily.
 % This is canceled by @fixbackslash.
@@ -4677,16 +5964,29 @@
 % 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}
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
 
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
+% 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/readline/emacs_keymap.c b/readline/emacs_keymap.c
index daba213..ca9d134 100644
--- a/readline/emacs_keymap.c
+++ b/readline/emacs_keymap.c
@@ -33,185 +33,185 @@
 KEYMAP_ENTRY_ARRAY emacs_standard_keymap = {
 
   /* Control keys. */
-  { ISFUNC, rl_set_mark },		/* Control-@ */
-  { ISFUNC, rl_beg_of_line },		/* Control-a */
-  { ISFUNC, rl_backward },		/* Control-b */
-  { ISFUNC, (Function *)0x0 },		/* Control-c */
-  { ISFUNC, rl_delete },		/* Control-d */
-  { ISFUNC, rl_end_of_line },		/* Control-e */
-  { ISFUNC, rl_forward },		/* Control-f */
-  { ISFUNC, rl_abort },			/* Control-g */
-  { ISFUNC, rl_rubout },		/* Control-h */
-  { ISFUNC, rl_complete },		/* Control-i */
-  { ISFUNC, rl_newline },		/* Control-j */
-  { ISFUNC, rl_kill_line },		/* Control-k */
-  { ISFUNC, rl_clear_screen },		/* Control-l */
-  { ISFUNC, rl_newline },		/* Control-m */
-  { ISFUNC, rl_get_next_history },	/* Control-n */
-  { ISFUNC, (Function *)0x0 },		/* Control-o */
-  { ISFUNC, rl_get_previous_history },	/* Control-p */
-  { ISFUNC, rl_quoted_insert },		/* Control-q */
-  { ISFUNC, rl_reverse_search_history }, /* Control-r */
-  { ISFUNC, rl_forward_search_history }, /* Control-s */
-  { ISFUNC, rl_transpose_chars },	/* Control-t */
-  { ISFUNC, rl_unix_line_discard },	/* Control-u */
-  { ISFUNC, rl_quoted_insert },		/* Control-v */
-  { ISFUNC, rl_unix_word_rubout },	/* Control-w */
-  { ISKMAP, (Function *)emacs_ctlx_keymap },	/* Control-x */
-  { ISFUNC, rl_yank },			/* Control-y */
-  { ISFUNC, (Function *)0x0 },		/* Control-z */
-  { ISKMAP, (Function *)emacs_meta_keymap }, /* Control-[ */
-  { ISFUNC, (Function *)0x0 },		/* Control-\ */
-  { ISFUNC, rl_char_search },		/* Control-] */
-  { ISFUNC, (Function *)0x0 },		/* Control-^ */
-  { ISFUNC, rl_undo_command },		/* Control-_ */
+  { ISFUNC, rl_set_mark },			/* Control-@ */
+  { ISFUNC, rl_beg_of_line },			/* Control-a */
+  { ISFUNC, rl_backward_char },			/* Control-b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-c */
+  { ISFUNC, rl_delete },			/* Control-d */
+  { ISFUNC, rl_end_of_line },			/* Control-e */
+  { ISFUNC, rl_forward_char },			/* Control-f */
+  { ISFUNC, rl_abort },				/* Control-g */
+  { ISFUNC, rl_rubout },			/* Control-h */
+  { ISFUNC, rl_complete },			/* Control-i */
+  { ISFUNC, rl_newline },			/* Control-j */
+  { ISFUNC, rl_kill_line },			/* Control-k */
+  { ISFUNC, rl_clear_screen },			/* Control-l */
+  { ISFUNC, rl_newline },			/* Control-m */
+  { ISFUNC, rl_get_next_history },		/* Control-n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-o */
+  { ISFUNC, rl_get_previous_history },		/* Control-p */
+  { ISFUNC, rl_quoted_insert },			/* Control-q */
+  { ISFUNC, rl_reverse_search_history },	/* Control-r */
+  { ISFUNC, rl_forward_search_history },	/* Control-s */
+  { ISFUNC, rl_transpose_chars },		/* Control-t */
+  { ISFUNC, rl_unix_line_discard },		/* Control-u */
+  { ISFUNC, rl_quoted_insert },			/* Control-v */
+  { ISFUNC, rl_unix_word_rubout },		/* Control-w */
+  { ISKMAP, (rl_command_func_t *)emacs_ctlx_keymap },	/* Control-x */
+  { ISFUNC, rl_yank },				/* Control-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-z */
+  { ISKMAP, (rl_command_func_t *)emacs_meta_keymap }, /* Control-[ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-\ */
+  { ISFUNC, rl_char_search },			/* Control-] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-^ */
+  { ISFUNC, rl_undo_command },			/* Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, rl_insert },	/* SPACE */
-  { ISFUNC, rl_insert },	/* ! */
-  { ISFUNC, rl_insert },	/* " */
-  { ISFUNC, rl_insert },	/* # */
-  { ISFUNC, rl_insert },	/* $ */
-  { ISFUNC, rl_insert },	/* % */
-  { ISFUNC, rl_insert },	/* & */
-  { ISFUNC, rl_insert },	/* ' */
-  { ISFUNC, rl_insert },	/* ( */
-  { ISFUNC, rl_insert },	/* ) */
-  { ISFUNC, rl_insert },	/* * */
-  { ISFUNC, rl_insert },	/* + */
-  { ISFUNC, rl_insert },	/* , */
-  { ISFUNC, rl_insert },	/* - */
-  { ISFUNC, rl_insert },	/* . */
-  { ISFUNC, rl_insert },	/* / */
-
-  /* Regular digits. */
-  { ISFUNC, rl_insert },	/* 0 */
-  { ISFUNC, rl_insert },	/* 1 */
-  { ISFUNC, rl_insert },	/* 2 */
-  { ISFUNC, rl_insert },	/* 3 */
-  { ISFUNC, rl_insert },	/* 4 */
-  { ISFUNC, rl_insert },	/* 5 */
-  { ISFUNC, rl_insert },	/* 6 */
-  { ISFUNC, rl_insert },	/* 7 */
-  { ISFUNC, rl_insert },	/* 8 */
-  { ISFUNC, rl_insert },	/* 9 */
+  { ISFUNC, rl_insert },		/* SPACE */
+  { ISFUNC, rl_insert },		/* ! */
+  { ISFUNC, rl_insert },		/* " */
+  { ISFUNC, rl_insert },		/* # */
+  { ISFUNC, rl_insert },		/* $ */
+  { ISFUNC, rl_insert },		/* % */
+  { ISFUNC, rl_insert },		/* & */
+  { ISFUNC, rl_insert },		/* ' */
+  { ISFUNC, rl_insert },		/* ( */
+  { ISFUNC, rl_insert },		/* ) */
+  { ISFUNC, rl_insert },		/* * */
+  { ISFUNC, rl_insert },		/* + */
+  { ISFUNC, rl_insert },		/* , */
+  { ISFUNC, rl_insert },		/* - */
+  { ISFUNC, rl_insert },		/* . */
+  { ISFUNC, rl_insert },		/* / */
+	
+	  /* Regular digits. */
+  { ISFUNC, rl_insert },		/* 0 */
+  { ISFUNC, rl_insert },		/* 1 */
+  { ISFUNC, rl_insert },		/* 2 */
+  { ISFUNC, rl_insert },		/* 3 */
+  { ISFUNC, rl_insert },		/* 4 */
+  { ISFUNC, rl_insert },		/* 5 */
+  { ISFUNC, rl_insert },		/* 6 */
+  { ISFUNC, rl_insert },		/* 7 */
+  { ISFUNC, rl_insert },		/* 8 */
+  { ISFUNC, rl_insert },		/* 9 */
 
   /* A little more punctuation. */
-  { ISFUNC, rl_insert },	/* : */
-  { ISFUNC, rl_insert },	/* ; */
-  { ISFUNC, rl_insert },	/* < */
-  { ISFUNC, rl_insert },	/* = */
-  { ISFUNC, rl_insert },	/* > */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* @ */
+  { ISFUNC, rl_insert },		/* : */
+  { ISFUNC, rl_insert },		/* ; */
+  { ISFUNC, rl_insert },		/* < */
+  { ISFUNC, rl_insert },		/* = */
+  { ISFUNC, rl_insert },		/* > */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* @ */
 
   /* Uppercase alphabet. */
-  { ISFUNC, rl_insert },	/* A */
-  { ISFUNC, rl_insert },	/* B */
-  { ISFUNC, rl_insert },	/* C */
-  { ISFUNC, rl_insert },	/* D */
-  { ISFUNC, rl_insert },	/* E */
-  { ISFUNC, rl_insert },	/* F */
-  { ISFUNC, rl_insert },	/* G */
-  { ISFUNC, rl_insert },	/* H */
-  { ISFUNC, rl_insert },	/* I */
-  { ISFUNC, rl_insert },	/* J */
-  { ISFUNC, rl_insert },	/* K */
-  { ISFUNC, rl_insert },	/* L */
-  { ISFUNC, rl_insert },	/* M */
-  { ISFUNC, rl_insert },	/* N */
-  { ISFUNC, rl_insert },	/* O */
-  { ISFUNC, rl_insert },	/* P */
-  { ISFUNC, rl_insert },	/* Q */
-  { ISFUNC, rl_insert },	/* R */
-  { ISFUNC, rl_insert },	/* S */
-  { ISFUNC, rl_insert },	/* T */
-  { ISFUNC, rl_insert },	/* U */
-  { ISFUNC, rl_insert },	/* V */
-  { ISFUNC, rl_insert },	/* W */
-  { ISFUNC, rl_insert },	/* X */
-  { ISFUNC, rl_insert },	/* Y */
-  { ISFUNC, rl_insert },	/* Z */
+  { ISFUNC, rl_insert },		/* A */
+  { ISFUNC, rl_insert },		/* B */
+  { ISFUNC, rl_insert },		/* C */
+  { ISFUNC, rl_insert },		/* D */
+  { ISFUNC, rl_insert },		/* E */
+  { ISFUNC, rl_insert },		/* F */
+  { ISFUNC, rl_insert },		/* G */
+  { ISFUNC, rl_insert },		/* H */
+  { ISFUNC, rl_insert },		/* I */
+  { ISFUNC, rl_insert },		/* J */
+  { ISFUNC, rl_insert },		/* K */
+  { ISFUNC, rl_insert },		/* L */
+  { ISFUNC, rl_insert },		/* M */
+  { ISFUNC, rl_insert },		/* N */
+  { ISFUNC, rl_insert },		/* O */
+  { ISFUNC, rl_insert },		/* P */
+  { ISFUNC, rl_insert },		/* Q */
+  { ISFUNC, rl_insert },		/* R */
+  { ISFUNC, rl_insert },		/* S */
+  { ISFUNC, rl_insert },		/* T */
+  { ISFUNC, rl_insert },		/* U */
+  { ISFUNC, rl_insert },		/* V */
+  { ISFUNC, rl_insert },		/* W */
+  { ISFUNC, rl_insert },		/* X */
+  { ISFUNC, rl_insert },		/* Y */
+  { ISFUNC, rl_insert },		/* Z */
 
   /* Some more punctuation. */
-  { ISFUNC, rl_insert },	/* [ */
-  { ISFUNC, rl_insert },	/* \ */
-  { ISFUNC, rl_insert },	/* ] */
-  { ISFUNC, rl_insert },	/* ^ */
-  { ISFUNC, rl_insert },	/* _ */
-  { ISFUNC, rl_insert },	/* ` */
+  { ISFUNC, rl_insert },		/* [ */
+  { ISFUNC, rl_insert },		/* \ */
+  { ISFUNC, rl_insert },		/* ] */
+  { ISFUNC, rl_insert },		/* ^ */
+  { ISFUNC, rl_insert },		/* _ */
+  { ISFUNC, rl_insert },		/* ` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, rl_insert },	/* a */
-  { ISFUNC, rl_insert },	/* b */
-  { ISFUNC, rl_insert },	/* c */
-  { ISFUNC, rl_insert },	/* d */
-  { ISFUNC, rl_insert },	/* e */
-  { ISFUNC, rl_insert },	/* f */
-  { ISFUNC, rl_insert },	/* g */
-  { ISFUNC, rl_insert },	/* h */
-  { ISFUNC, rl_insert },	/* i */
-  { ISFUNC, rl_insert },	/* j */
-  { ISFUNC, rl_insert },	/* k */
-  { ISFUNC, rl_insert },	/* l */
-  { ISFUNC, rl_insert },	/* m */
-  { ISFUNC, rl_insert },	/* n */
-  { ISFUNC, rl_insert },	/* o */
-  { ISFUNC, rl_insert },	/* p */
-  { ISFUNC, rl_insert },	/* q */
-  { ISFUNC, rl_insert },	/* r */
-  { ISFUNC, rl_insert },	/* s */
-  { ISFUNC, rl_insert },	/* t */
-  { ISFUNC, rl_insert },	/* u */
-  { ISFUNC, rl_insert },	/* v */
-  { ISFUNC, rl_insert },	/* w */
-  { ISFUNC, rl_insert },	/* x */
-  { ISFUNC, rl_insert },	/* y */
-  { ISFUNC, rl_insert },	/* z */
+  { ISFUNC, rl_insert },		/* a */
+  { ISFUNC, rl_insert },		/* b */
+  { ISFUNC, rl_insert },		/* c */
+  { ISFUNC, rl_insert },		/* d */
+  { ISFUNC, rl_insert },		/* e */
+  { ISFUNC, rl_insert },		/* f */
+  { ISFUNC, rl_insert },		/* g */
+  { ISFUNC, rl_insert },		/* h */
+  { ISFUNC, rl_insert },		/* i */
+  { ISFUNC, rl_insert },		/* j */
+  { ISFUNC, rl_insert },		/* k */
+  { ISFUNC, rl_insert },		/* l */
+  { ISFUNC, rl_insert },		/* m */
+  { ISFUNC, rl_insert },		/* n */
+  { ISFUNC, rl_insert },		/* o */
+  { ISFUNC, rl_insert },		/* p */
+  { ISFUNC, rl_insert },		/* q */
+  { ISFUNC, rl_insert },		/* r */
+  { ISFUNC, rl_insert },		/* s */
+  { ISFUNC, rl_insert },		/* t */
+  { ISFUNC, rl_insert },		/* u */
+  { ISFUNC, rl_insert },		/* v */
+  { ISFUNC, rl_insert },		/* w */
+  { ISFUNC, rl_insert },		/* x */
+  { ISFUNC, rl_insert },		/* y */
+  { ISFUNC, rl_insert },		/* z */
 
   /* Final punctuation. */
-  { ISFUNC, rl_insert },	/* { */
-  { ISFUNC, rl_insert },	/* | */
-  { ISFUNC, rl_insert },	/* } */
-  { ISFUNC, rl_insert },	/* ~ */
-  { ISFUNC, rl_rubout },	/* RUBOUT */
+  { ISFUNC, rl_insert },		/* { */
+  { ISFUNC, rl_insert },		/* | */
+  { ISFUNC, rl_insert },		/* } */
+  { ISFUNC, rl_insert },		/* ~ */
+  { ISFUNC, rl_rubout },		/* RUBOUT */
 
 #if KEYMAP_SIZE > 128
   /* Pure 8-bit characters (128 - 159).
      These might be used in some
      character sets. */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
-  { ISFUNC, rl_insert },	/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
+  { ISFUNC, rl_insert },		/* ? */
 
   /* ISO Latin-1 characters (160 - 255) */
   { ISFUNC, rl_insert },	/* No-break space */
@@ -316,78 +316,78 @@
 KEYMAP_ENTRY_ARRAY emacs_meta_keymap = {
 
   /* Meta keys.  Just like above, but the high bit is set. */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-@ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-a */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-b */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-c */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-d */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-e */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-f */
-  { ISFUNC, rl_abort },		/* Meta-Control-g */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-@ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-a */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-b */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-c */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-d */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-e */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-f */
+  { ISFUNC, rl_abort },			/* Meta-Control-g */
   { ISFUNC, rl_backward_kill_word },	/* Meta-Control-h */
-  { ISFUNC, rl_tab_insert },	/* Meta-Control-i */
-  { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-j */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-k */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-l */
-  { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-m */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-n */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-o */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-p */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-q */
-  { ISFUNC, rl_revert_line },	/* Meta-Control-r */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-s */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-t */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-u */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-v */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-w */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-x */
-  { ISFUNC, rl_yank_nth_arg },	/* Meta-Control-y */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-z */
+  { ISFUNC, rl_tab_insert },		/* Meta-Control-i */
+  { ISFUNC, rl_vi_editing_mode },	/* Meta-Control-j */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-k */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-l */
+  { ISFUNC, rl_vi_editing_mode }, 	/* Meta-Control-m */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-n */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-o */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-p */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-q */
+  { ISFUNC, rl_revert_line },		/* Meta-Control-r */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-s */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-t */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-u */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-v */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-w */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-x */
+  { ISFUNC, rl_yank_nth_arg },		/* Meta-Control-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-z */
 
-  { ISFUNC, rl_complete },	/* Meta-Control-[ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-\ */
+  { ISFUNC, rl_complete },		/* Meta-Control-[ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-\ */
   { ISFUNC, rl_backward_char_search },	/* Meta-Control-] */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-^ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-Control-_ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-^ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, rl_set_mark },	/* Meta-SPACE */
-  { ISFUNC, (Function *)0x0 },	/* Meta-! */
-  { ISFUNC, (Function *)0x0 },	/* Meta-" */
-  { ISFUNC, rl_insert_comment },/* Meta-# */
-  { ISFUNC, (Function *)0x0 },	/* Meta-$ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-% */
-  { ISFUNC, rl_tilde_expand },	/* Meta-& */
-  { ISFUNC, (Function *)0x0 },	/* Meta-' */
-  { ISFUNC, (Function *)0x0 },	/* Meta-( */
-  { ISFUNC, (Function *)0x0 },	/* Meta-) */
+  { ISFUNC, rl_set_mark },		/* Meta-SPACE */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-! */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-" */
+  { ISFUNC, rl_insert_comment },	/* Meta-# */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-$ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-% */
+  { ISFUNC, rl_tilde_expand },		/* Meta-& */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-' */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-( */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-) */
   { ISFUNC, rl_insert_completions },	/* Meta-* */
-  { ISFUNC, (Function *)0x0 },	/* Meta-+ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-, */
-  { ISFUNC, rl_digit_argument }, /* Meta-- */
-  { ISFUNC, rl_yank_last_arg},	/* Meta-. */
-  { ISFUNC, (Function *)0x0 },	/* Meta-/ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-+ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-, */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-- */
+  { ISFUNC, rl_yank_last_arg},		/* Meta-. */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-/ */
 
   /* Regular digits. */
-  { ISFUNC, rl_digit_argument }, /* Meta-0 */
-  { ISFUNC, rl_digit_argument }, /* Meta-1 */
-  { ISFUNC, rl_digit_argument }, /* Meta-2 */
-  { ISFUNC, rl_digit_argument }, /* Meta-3 */
-  { ISFUNC, rl_digit_argument }, /* Meta-4 */
-  { ISFUNC, rl_digit_argument }, /* Meta-5 */
-  { ISFUNC, rl_digit_argument }, /* Meta-6 */
-  { ISFUNC, rl_digit_argument }, /* Meta-7 */
-  { ISFUNC, rl_digit_argument }, /* Meta-8 */
-  { ISFUNC, rl_digit_argument }, /* Meta-9 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-0 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-1 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-2 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-3 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-4 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-5 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-6 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-7 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-8 */
+  { ISFUNC, rl_digit_argument }, 	/* Meta-9 */
 
   /* A little more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* Meta-: */
-  { ISFUNC, (Function *)0x0 },		/* Meta-; */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-: */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-; */
   { ISFUNC, rl_beginning_of_history },	/* Meta-< */
   { ISFUNC, rl_possible_completions },	/* Meta-= */
   { ISFUNC, rl_end_of_history },	/* Meta-> */
   { ISFUNC, rl_possible_completions },	/* Meta-? */
-  { ISFUNC, (Function *)0x0 },		/* Meta-@ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-@ */
 
   /* Uppercase alphabet. */
   { ISFUNC, rl_do_lowercase_version },	/* Meta-A */
@@ -418,456 +418,456 @@
   { ISFUNC, rl_do_lowercase_version },	/* Meta-Z */
 
   /* Some more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* Meta-[ */	/* was rl_arrow_keys */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Meta-[ */	/* was rl_arrow_keys */
   { ISFUNC, rl_delete_horizontal_space },	/* Meta-\ */
-  { ISFUNC, (Function *)0x0 },		/* Meta-] */
-  { ISFUNC, (Function *)0x0 },		/* Meta-^ */
-  { ISFUNC, rl_yank_last_arg },		/* Meta-_ */
-  { ISFUNC, (Function *)0x0 },		/* Meta-` */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Meta-] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Meta-^ */
+  { ISFUNC, rl_yank_last_arg },			/* Meta-_ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Meta-` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, (Function *)0x0 },	/* Meta-a */
-  { ISFUNC, rl_backward_word },	/* Meta-b */
-  { ISFUNC, rl_capitalize_word }, /* Meta-c */
-  { ISFUNC, rl_kill_word },	/* Meta-d */
-  { ISFUNC, (Function *)0x0 },	/* Meta-e */
-  { ISFUNC, rl_forward_word },	/* Meta-f */
-  { ISFUNC, (Function *)0x0 },	/* Meta-g */
-  { ISFUNC, (Function *)0x0 },	/* Meta-h */
-  { ISFUNC, (Function *)0x0 },	/* Meta-i */
-  { ISFUNC, (Function *)0x0 },	/* Meta-j */
-  { ISFUNC, (Function *)0x0 },	/* Meta-k */
-  { ISFUNC, rl_downcase_word },	/* Meta-l */
-  { ISFUNC, (Function *)0x0 },	/* Meta-m */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-a */
+  { ISFUNC, rl_backward_word },		/* Meta-b */
+  { ISFUNC, rl_capitalize_word }, 	/* Meta-c */
+  { ISFUNC, rl_kill_word },		/* Meta-d */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-e */
+  { ISFUNC, rl_forward_word },		/* Meta-f */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-g */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-h */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-i */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-j */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-k */
+  { ISFUNC, rl_downcase_word },		/* Meta-l */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-m */
   { ISFUNC, rl_noninc_forward_search },	/* Meta-n */
-  { ISFUNC, (Function *)0x0 },	/* Meta-o */	/* was rl_arrow_keys */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-o */	/* was rl_arrow_keys */
   { ISFUNC, rl_noninc_reverse_search },	/* Meta-p */
-  { ISFUNC, (Function *)0x0 },	/* Meta-q */
-  { ISFUNC, rl_revert_line },	/* Meta-r */
-  { ISFUNC, (Function *)0x0 },	/* Meta-s */
-  { ISFUNC, rl_transpose_words }, /* Meta-t */
-  { ISFUNC, rl_upcase_word },	/* Meta-u */
-  { ISFUNC, (Function *)0x0 },	/* Meta-v */
-  { ISFUNC, (Function *)0x0 },	/* Meta-w */
-  { ISFUNC, (Function *)0x0 },	/* Meta-x */
-  { ISFUNC, rl_yank_pop },	/* Meta-y */
-  { ISFUNC, (Function *)0x0 },	/* Meta-z */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-q */
+  { ISFUNC, rl_revert_line },		/* Meta-r */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-s */
+  { ISFUNC, rl_transpose_words }, 	/* Meta-t */
+  { ISFUNC, rl_upcase_word },		/* Meta-u */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-v */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-w */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-x */
+  { ISFUNC, rl_yank_pop },		/* Meta-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-z */
 
   /* Final punctuation. */
-  { ISFUNC, (Function *)0x0 },	/* Meta-{ */
-  { ISFUNC, (Function *)0x0 },	/* Meta-| */
-  { ISFUNC, (Function *)0x0 },	/* Meta-} */
-  { ISFUNC, rl_tilde_expand },	/* Meta-~ */
-  { ISFUNC, rl_backward_kill_word }, /* Meta-rubout */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-{ */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-| */
+  { ISFUNC, (rl_command_func_t *)0x0 },	/* Meta-} */
+  { ISFUNC, rl_tilde_expand },		/* Meta-~ */
+  { ISFUNC, rl_backward_kill_word },	/* Meta-rubout */
 
 #if KEYMAP_SIZE > 128
   /* Undefined keys. */
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 }
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 }
 #endif /* KEYMAP_SIZE > 128 */
 };
 
 KEYMAP_ENTRY_ARRAY emacs_ctlx_keymap = {
 
   /* Control keys. */
-  { ISFUNC, (Function *)0x0 },		/* Control-@ */
-  { ISFUNC, (Function *)0x0 },		/* Control-a */
-  { ISFUNC, (Function *)0x0 },		/* Control-b */
-  { ISFUNC, (Function *)0x0 },		/* Control-c */
-  { ISFUNC, (Function *)0x0 },		/* Control-d */
-  { ISFUNC, (Function *)0x0 },		/* Control-e */
-  { ISFUNC, (Function *)0x0 },		/* Control-f */
-  { ISFUNC, rl_abort },			/* Control-g */
-  { ISFUNC, (Function *)0x0 },		/* Control-h */
-  { ISFUNC, (Function *)0x0 },		/* Control-i */
-  { ISFUNC, (Function *)0x0 },		/* Control-j */
-  { ISFUNC, (Function *)0x0 },		/* Control-k */
-  { ISFUNC, (Function *)0x0 },		/* Control-l */
-  { ISFUNC, (Function *)0x0 },		/* Control-m */
-  { ISFUNC, (Function *)0x0 },		/* Control-n */
-  { ISFUNC, (Function *)0x0 },		/* Control-o */
-  { ISFUNC, (Function *)0x0 },		/* Control-p */
-  { ISFUNC, (Function *)0x0 },		/* Control-q */
-  { ISFUNC, rl_re_read_init_file },	/* Control-r */
-  { ISFUNC, (Function *)0x0 },		/* Control-s */
-  { ISFUNC, (Function *)0x0 },		/* Control-t */
-  { ISFUNC, rl_undo_command },		/* Control-u */
-  { ISFUNC, (Function *)0x0 },		/* Control-v */
-  { ISFUNC, (Function *)0x0 },		/* Control-w */
-  { ISFUNC, rl_exchange_point_and_mark },/* Control-x */
-  { ISFUNC, (Function *)0x0 },		/* Control-y */
-  { ISFUNC, (Function *)0x0 },		/* Control-z */
-  { ISFUNC, (Function *)0x0 },		/* Control-[ */
-  { ISFUNC, (Function *)0x0 },		/* Control-\ */
-  { ISFUNC, (Function *)0x0 },		/* Control-] */
-  { ISFUNC, (Function *)0x0 },		/* Control-^ */
-  { ISFUNC, (Function *)0x0 },		/* Control-_ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-@ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-a */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-c */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-d */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-e */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-f */
+  { ISFUNC, rl_abort },				/* Control-g */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-h */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-i */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-j */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-k */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-l */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-m */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-o */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-p */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-q */
+  { ISFUNC, rl_re_read_init_file },		/* Control-r */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-s */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-t */
+  { ISFUNC, rl_undo_command },			/* Control-u */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-v */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-w */
+  { ISFUNC, rl_exchange_point_and_mark },	/* Control-x */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-[ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-\ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-^ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, (Function *)0x0 },		/* SPACE */
-  { ISFUNC, (Function *)0x0 },		/* ! */
-  { ISFUNC, (Function *)0x0 },		/* " */
-  { ISFUNC, (Function *)0x0 },		/* # */
-  { ISFUNC, (Function *)0x0 },		/* $ */
-  { ISFUNC, (Function *)0x0 },		/* % */
-  { ISFUNC, (Function *)0x0 },		/* & */
-  { ISFUNC, (Function *)0x0 },		/* ' */
-  { ISFUNC, rl_start_kbd_macro },	/* ( */
-  { ISFUNC, rl_end_kbd_macro  },	/* ) */
-  { ISFUNC, (Function *)0x0 },		/* * */
-  { ISFUNC, (Function *)0x0 },		/* + */
-  { ISFUNC, (Function *)0x0 },		/* , */
-  { ISFUNC, (Function *)0x0 },		/* - */
-  { ISFUNC, (Function *)0x0 },		/* . */
-  { ISFUNC, (Function *)0x0 },		/* / */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* SPACE */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ! */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* " */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* # */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* $ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* % */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* & */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ' */
+  { ISFUNC, rl_start_kbd_macro },		/* ( */
+  { ISFUNC, rl_end_kbd_macro  },		/* ) */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* * */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* + */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* , */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* - */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* . */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* / */
 
   /* Regular digits. */
-  { ISFUNC, (Function *)0x0 },		/* 0 */
-  { ISFUNC, (Function *)0x0 },		/* 1 */
-  { ISFUNC, (Function *)0x0 },		/* 2 */
-  { ISFUNC, (Function *)0x0 },		/* 3 */
-  { ISFUNC, (Function *)0x0 },		/* 4 */
-  { ISFUNC, (Function *)0x0 },		/* 5 */
-  { ISFUNC, (Function *)0x0 },		/* 6 */
-  { ISFUNC, (Function *)0x0 },		/* 7 */
-  { ISFUNC, (Function *)0x0 },		/* 8 */
-  { ISFUNC, (Function *)0x0 },		/* 9 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 0 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 1 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 2 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 3 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 4 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 5 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 6 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 7 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 8 */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* 9 */
 
   /* A little more punctuation. */
-  { ISFUNC, (Function *)0x0 },	/* : */
-  { ISFUNC, (Function *)0x0 },	/* ; */
-  { ISFUNC, (Function *)0x0 },	/* < */
-  { ISFUNC, (Function *)0x0 },	/* = */
-  { ISFUNC, (Function *)0x0 },	/* > */
-  { ISFUNC, (Function *)0x0 },	/* ? */
-  { ISFUNC, (Function *)0x0 },	/* @ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* : */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ; */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* < */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* = */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* > */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ? */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* @ */
 
   /* Uppercase alphabet. */
-  { ISFUNC, rl_do_lowercase_version },	/* A */
-  { ISFUNC, rl_do_lowercase_version },	/* B */
-  { ISFUNC, rl_do_lowercase_version },	/* C */
-  { ISFUNC, rl_do_lowercase_version },	/* D */
-  { ISFUNC, rl_do_lowercase_version },	/* E */
-  { ISFUNC, rl_do_lowercase_version },	/* F */
-  { ISFUNC, rl_do_lowercase_version },	/* G */
-  { ISFUNC, rl_do_lowercase_version },	/* H */
-  { ISFUNC, rl_do_lowercase_version },	/* I */
-  { ISFUNC, rl_do_lowercase_version },	/* J */
-  { ISFUNC, rl_do_lowercase_version },	/* K */
-  { ISFUNC, rl_do_lowercase_version },	/* L */
-  { ISFUNC, rl_do_lowercase_version },	/* M */
-  { ISFUNC, rl_do_lowercase_version },	/* N */
-  { ISFUNC, rl_do_lowercase_version },	/* O */
-  { ISFUNC, rl_do_lowercase_version },	/* P */
-  { ISFUNC, rl_do_lowercase_version },	/* Q */
-  { ISFUNC, rl_do_lowercase_version },	/* R */
-  { ISFUNC, rl_do_lowercase_version },	/* S */
-  { ISFUNC, rl_do_lowercase_version },	/* T */
-  { ISFUNC, rl_do_lowercase_version },	/* U */
-  { ISFUNC, rl_do_lowercase_version },	/* V */
-  { ISFUNC, rl_do_lowercase_version },	/* W */
-  { ISFUNC, rl_do_lowercase_version },	/* X */
-  { ISFUNC, rl_do_lowercase_version },	/* Y */
-  { ISFUNC, rl_do_lowercase_version },	/* Z */
+  { ISFUNC, rl_do_lowercase_version },		/* A */
+  { ISFUNC, rl_do_lowercase_version },		/* B */
+  { ISFUNC, rl_do_lowercase_version },		/* C */
+  { ISFUNC, rl_do_lowercase_version },		/* D */
+  { ISFUNC, rl_do_lowercase_version },		/* E */
+  { ISFUNC, rl_do_lowercase_version },		/* F */
+  { ISFUNC, rl_do_lowercase_version },		/* G */
+  { ISFUNC, rl_do_lowercase_version },		/* H */
+  { ISFUNC, rl_do_lowercase_version },		/* I */
+  { ISFUNC, rl_do_lowercase_version },		/* J */
+  { ISFUNC, rl_do_lowercase_version },		/* K */
+  { ISFUNC, rl_do_lowercase_version },		/* L */
+  { ISFUNC, rl_do_lowercase_version },		/* M */
+  { ISFUNC, rl_do_lowercase_version },		/* N */
+  { ISFUNC, rl_do_lowercase_version },		/* O */
+  { ISFUNC, rl_do_lowercase_version },		/* P */
+  { ISFUNC, rl_do_lowercase_version },		/* Q */
+  { ISFUNC, rl_do_lowercase_version },		/* R */
+  { ISFUNC, rl_do_lowercase_version },		/* S */
+  { ISFUNC, rl_do_lowercase_version },		/* T */
+  { ISFUNC, rl_do_lowercase_version },		/* U */
+  { ISFUNC, rl_do_lowercase_version },		/* V */
+  { ISFUNC, rl_do_lowercase_version },		/* W */
+  { ISFUNC, rl_do_lowercase_version },		/* X */
+  { ISFUNC, rl_do_lowercase_version },		/* Y */
+  { ISFUNC, rl_do_lowercase_version },		/* Z */
 
   /* Some more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* [ */
-  { ISFUNC, (Function *)0x0 },		/* \ */
-  { ISFUNC, (Function *)0x0 },		/* ] */
-  { ISFUNC, (Function *)0x0 },		/* ^ */
-  { ISFUNC, (Function *)0x0 },		/* _ */
-  { ISFUNC, (Function *)0x0 },		/* ` */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* [ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* \ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ^ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* _ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, (Function *)0x0 },		/* a */
-  { ISFUNC, (Function *)0x0 },		/* b */
-  { ISFUNC, (Function *)0x0 },		/* c */
-  { ISFUNC, (Function *)0x0 },		/* d */
-  { ISFUNC, rl_call_last_kbd_macro },	/* e */
-  { ISFUNC, (Function *)0x0 },		/* f */
-  { ISFUNC, (Function *)0x0 },		/* g */
-  { ISFUNC, (Function *)0x0 },		/* h */
-  { ISFUNC, (Function *)0x0 },		/* i */
-  { ISFUNC, (Function *)0x0 },		/* j */
-  { ISFUNC, (Function *)0x0 },		/* k */
-  { ISFUNC, (Function *)0x0 },		/* l */
-  { ISFUNC, (Function *)0x0 },		/* m */
-  { ISFUNC, (Function *)0x0 },		/* n */
-  { ISFUNC, (Function *)0x0 },		/* o */
-  { ISFUNC, (Function *)0x0 },		/* p */
-  { ISFUNC, (Function *)0x0 },		/* q */
-  { ISFUNC, (Function *)0x0 },		/* r */
-  { ISFUNC, (Function *)0x0 },		/* s */
-  { ISFUNC, (Function *)0x0 },		/* t */
-  { ISFUNC, (Function *)0x0 },		/* u */
-  { ISFUNC, (Function *)0x0 },		/* v */
-  { ISFUNC, (Function *)0x0 },		/* w */
-  { ISFUNC, (Function *)0x0 },		/* x */
-  { ISFUNC, (Function *)0x0 },		/* y */
-  { ISFUNC, (Function *)0x0 },		/* z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* a */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* c */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* d */
+  { ISFUNC, rl_call_last_kbd_macro },		/* e */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* f */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* g */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* h */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* i */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* j */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* k */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* l */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* m */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* o */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* p */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* q */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* r */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* s */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* t */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* u */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* v */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* w */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* x */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* z */
 
   /* Final punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* { */
-  { ISFUNC, (Function *)0x0 },		/* | */
-  { ISFUNC, (Function *)0x0 },		/* } */
-  { ISFUNC, (Function *)0x0 },		/* ~ */
-  { ISFUNC, rl_backward_kill_line },	/* RUBOUT */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* { */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* | */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* } */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ~ */
+  { ISFUNC, rl_backward_kill_line },		/* RUBOUT */
 
 #if KEYMAP_SIZE > 128
   /* Undefined keys. */
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 }
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 }
 #endif /* KEYMAP_SIZE > 128 */
 };
diff --git a/readline/examples/Inputrc b/readline/examples/Inputrc
index 5b71bd7..d7fdb42 100644
--- a/readline/examples/Inputrc
+++ b/readline/examples/Inputrc
@@ -4,6 +4,22 @@
 # on which program is running, or what terminal is active.
 #
 
+# Copyright (C) 1989-2002 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
 # In all programs, all terminals, make sure this is bound.
 "\C-x\C-r": re-read-init-file
 
diff --git a/readline/examples/Makefile.in b/readline/examples/Makefile.in
index 7246e75..72c9904 100644
--- a/readline/examples/Makefile.in
+++ b/readline/examples/Makefile.in
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+RL_LIBRARY_VERSION = @LIBVERSION@
 
 SHELL = @MAKE_SHELL@
 RM = rm -f
@@ -25,16 +26,19 @@
 top_srcdir = @top_srcdir@
 BUILD_DIR = .
 
+# Support an alternate destination root directory for package building
+DESTDIR =
+
 DEFS = @DEFS@
 CC = @CC@
 CFLAGS = @CFLAGS@
-LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY
+LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"'
 CPPFLAGS = @CPPFLAGS@
 
 INCLUDES = -I$(srcdir) -I$(top_srcdir) -I..
 
 CCFLAGS  = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS)
-LDFLAGS = -g -L..
+LDFLAGS = -g -L.. @LDFLAGS@
 
 READLINE_LIB = ../libreadline.a
 HISTORY_LIB = ../libhistory.a
@@ -45,26 +49,34 @@
 	${RM} $@
 	$(CC) $(CCFLAGS) -c $<
 
-EXECUTABLES = fileman rltest rl rlversion
-OBJECTS = fileman.o rltest.o rl.o rlversion.o
+EXECUTABLES = fileman rltest rl rlcat rlversion histexamp 
+OBJECTS = fileman.o rltest.o rl.o rlversion.o histexamp.o
 
 all: $(EXECUTABLES)
+everything: all rlfe
 
-rl: rl.o
+rl: rl.o $(READLINE_LIB)
 	$(CC) $(LDFLAGS) -o $@ rl.o -lreadline $(TERMCAP_LIB)
 
-fileman: fileman.o
+rlcat: rlcat.o $(READLINE_LIB)
+	$(CC) $(LDFLAGS) -o $@ rlcat.o -lreadline $(TERMCAP_LIB)
+
+fileman: fileman.o $(READLINE_LIB)
 	$(CC) $(LDFLAGS) -o $@ fileman.o -lreadline $(TERMCAP_LIB)
 
-rltest: rltest.o
+rltest: rltest.o $(READLINE_LIB)
 	$(CC) $(LDFLAGS) -o $@ rltest.o -lreadline $(TERMCAP_LIB)
 
 rlversion: rlversion.o $(READLINE_LIB)
 	$(CC) $(LDFLAGS) -o $@ rlversion.o -lreadline $(TERMCAP_LIB)
 
+histexamp: histexamp.o $(HISTORY_LIB)
+	$(CC) $(LDFLAGS) -o $@ histexamp.o -lhistory $(TERMCAP_LIB)
+
 clean mostlyclean:
 	$(RM) $(OBJECTS)
 	$(RM) $(EXECUTABLES) *.exe
+	$(RM) rlfe.o rlfe
 
 distclean maintainer-clean: clean
 	$(RM) Makefile
@@ -73,6 +85,13 @@
 rltest.o: rltest.c
 rl.o: rl.c
 rlversion.o: rlversion.c
+histexamp.o: histexamp.c
+
+fileman.o: $(top_srcdir)/readline.h
+rltest.o: $(top_srcdir)/readline.h
+rl.o: $(top_srcdir)/readline.h
+rlversion.o: $(top_srcdir)/readline.h
+histexamp.o: $(top_srcdir)/history.h
 
 # Stuff for Per Bothner's `rlfe' program
  
diff --git a/readline/examples/excallback.c b/readline/examples/excallback.c
index ca03fc3..3d4bb18 100644
--- a/readline/examples/excallback.c
+++ b/readline/examples/excallback.c
@@ -153,6 +153,8 @@
   } else {
     fprintf(stderr, "|%s|\n", line);
   }
+
+  free (line);
 }
 
 int
diff --git a/readline/examples/fileman.c b/readline/examples/fileman.c
index dc29a40..340eee7 100644
--- a/readline/examples/fileman.c
+++ b/readline/examples/fileman.c
@@ -1,3 +1,23 @@
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
 /* fileman.c -- A tiny application which demonstrates how to use the
    GNU Readline library.  This application interactively allows users
    to manipulate files and their modes. */
@@ -41,15 +61,22 @@
 extern char *xmalloc ();
 
 /* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
+int com_list PARAMS((char *));
+int com_view PARAMS((char *));
+int com_rename PARAMS((char *));
+int com_stat PARAMS((char *));
+int com_pwd PARAMS((char *));
+int com_delete PARAMS((char *));
+int com_help PARAMS((char *));
+int com_cd PARAMS((char *));
+int com_quit PARAMS((char *));
 
 /* A structure which contains information on the commands this program
    can understand. */
 
 typedef struct {
   char *name;			/* User printable name of the function. */
-  Function *func;		/* Function to call to do the job. */
+  rl_icpfunc_t *func;		/* Function to call to do the job. */
   char *doc;			/* Documentation for this function.  */
 } COMMAND;
 
@@ -65,7 +92,7 @@
   { "rename", com_rename, "Rename FILE to NEWNAME" },
   { "stat", com_stat, "Print out statistics on FILE" },
   { "view", com_view, "View the contents of FILE" },
-  { (char *)NULL, (Function *)NULL, (char *)NULL }
+  { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
 };
 
 /* Forward declarations. */
@@ -205,8 +232,8 @@
 /*                                                                  */
 /* **************************************************************** */
 
-char *command_generator ();
-char **fileman_completion ();
+char *command_generator PARAMS((const char *, int));
+char **fileman_completion PARAMS((const char *, int, int));
 
 /* Tell the GNU Readline library how to complete.  We want to try to complete
    on command names if this is the first word in the line, or on filenames
@@ -217,7 +244,7 @@
   rl_readline_name = "FileMan";
 
   /* Tell the completer that we want a crack first. */
-  rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+  rl_attempted_completion_function = fileman_completion;
 }
 
 /* Attempt to complete on the contents of TEXT.  START and END bound the
@@ -227,7 +254,7 @@
    or NULL if there aren't any. */
 char **
 fileman_completion (text, start, end)
-     char *text;
+     const char *text;
      int start, end;
 {
   char **matches;
@@ -238,7 +265,7 @@
      to complete.  Otherwise it is the name of a file in the current
      directory. */
   if (start == 0)
-    matches = completion_matches (text, command_generator);
+    matches = rl_completion_matches (text, command_generator);
 
   return (matches);
 }
@@ -248,7 +275,7 @@
    start at the top of the list. */
 char *
 command_generator (text, state)
-     char *text;
+     const char *text;
      int state;
 {
   static int list_index, len;
diff --git a/readline/examples/histexamp.c b/readline/examples/histexamp.c
index eceb66d..45651df 100644
--- a/readline/examples/histexamp.c
+++ b/readline/examples/histexamp.c
@@ -1,4 +1,34 @@
-main ()
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include <stdio.h>
+
+#ifdef READLINE_LIBRARY
+#  include "history.h"
+#else
+#  include <readline/history.h>
+#endif
+
+main (argc, argv)
+     int argc;
+     char **argv;
 {
   char line[1024], *t;
   int len, done = 0;
diff --git a/readline/examples/manexamp.c b/readline/examples/manexamp.c
index 3496efa..9c6cf2c 100644
--- a/readline/examples/manexamp.c
+++ b/readline/examples/manexamp.c
@@ -1,12 +1,31 @@
 /* manexamp.c -- The examples which appear in the documentation are here. */
 
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
 #include <stdio.h>
 #include <readline/readline.h>
 
-
 /* **************************************************************** */
 /*                                                                  */
-*   			How to Emulate gets ()			    */
+/*   			How to Emulate gets ()			    */
 /*                                                                  */
 /* **************************************************************** */
 
@@ -82,13 +101,12 @@
 
   for (; start != end; start += direction)
     {
-      if (uppercase_p (rl_line_buffer[start]))
-	rl_line_buffer[start] = to_lower (rl_line_buffer[start]);
-      else if (lowercase_p (rl_line_buffer[start]))
-	rl_line_buffer[start] = to_upper (rl_line_buffer[start]);
+      if (_rl_uppercase_p (rl_line_buffer[start]))
+	rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]);
+      else if (_rl_lowercase_p (rl_line_buffer[start]))
+	rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]);
     }
 
   /* Move point to on top of the last character changed. */
   rl_point = end - direction;
 }
-
diff --git a/readline/examples/readlinebuf.h b/readline/examples/readlinebuf.h
new file mode 100644
index 0000000..91ef4d6
--- /dev/null
+++ b/readline/examples/readlinebuf.h
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * $Revision$
+ * $Date$
+ * $Author$
+ *
+ * Contents: A streambuf which uses the GNU readline library for line I/O
+ * (c) 2001 by Dimitris Vyzovitis [vyzo@media.mit.edu]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ******************************************************************************/
+
+#ifndef _READLINEBUF_H_
+#define _READLINEBUF_H_
+
+#include <iostream>
+#include <cstring>
+#include <cassert>
+#include <cstdlib>
+#include <cstdio>
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+#if (defined __GNUC__) && (__GNUC__ < 3)
+#include <streambuf.h>
+#else
+#include <streambuf>
+using std::streamsize;
+using std::streambuf;
+#endif
+
+class readlinebuf : public streambuf {
+public:
+#if (defined __GNUC__) && (__GNUC__ < 3)
+	typedef char char_type;
+	typedef int int_type;
+	typedef streampos pos_type;
+	typedef streamoff off_type;
+#endif
+	static const int_type eof = EOF; // this is -1
+	static const int_type not_eof = 0;
+
+private:
+	const char* prompt_;
+	bool history_;
+	char* line_;
+	int low_;
+	int high_;
+
+protected:
+		
+	virtual int_type showmanyc() const { return high_ - low_; }
+		
+	virtual streamsize xsgetn( char_type* buf, streamsize n ) {
+		int rd = n > (high_ - low_)? (high_ - low_) : n;
+		memcpy( buf, line_, rd );
+		low_ += rd;
+			
+		if ( rd < n ) {
+			low_ = high_ = 0;
+			free( line_ ); // free( NULL ) is a noop
+			line_ = readline( prompt_ );
+			if ( line_ ) {
+				high_ = strlen( line_ );
+				if ( history_ && high_ ) add_history( line_ );
+				rd += xsgetn( buf + rd, n - rd );
+			}
+		}
+			
+		return rd; 
+	}
+		
+	virtual int_type underflow() {
+		if ( high_ == low_ ) {
+			low_ = high_ = 0;
+			free( line_ ); // free( NULL ) is a noop
+			line_ = readline( prompt_ );
+			if ( line_ ) {
+				high_ = strlen( line_ );
+				if ( history_ && high_ ) add_history( line_ );
+			}
+		}
+			
+		if ( low_ < high_ ) return line_[low_];
+		else return eof;
+	}
+		
+	virtual int_type uflow() {
+		int_type c = underflow();
+		if ( c != eof ) ++low_;
+		return c;
+	}
+		
+	virtual int_type pbackfail( int_type c = eof ) {
+		if ( low_ > 0 )	--low_;
+		else if ( c != eof ) {
+			if ( high_ > 0 ) {
+				char* nl = (char*)realloc( line_, high_ + 1 );
+				if ( nl ) {
+					line_ = (char*)memcpy( nl + 1, line_, high_ );
+					high_ += 1;
+					line_[0] = char( c );
+				} else return eof;
+			} else {
+				assert( !line_ );
+				line_ = (char*)malloc( sizeof( char ) );
+				*line_ = char( c );
+				high_ = 1;
+			}
+		} else return eof;
+
+		return not_eof;
+	}
+ 		
+public:
+	readlinebuf( const char* prompt = NULL, bool history = true ) 
+		: prompt_( prompt ), history_( history ),
+		  line_( NULL ), low_( 0 ), high_( 0 ) {
+		setbuf( 0, 0 );
+	}
+		
+		
+};
+
+#endif
diff --git a/readline/examples/rl.c b/readline/examples/rl.c
index 2d1d17e..d260489 100644
--- a/readline/examples/rl.c
+++ b/readline/examples/rl.c
@@ -5,6 +5,26 @@
  * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars]
  */
 
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
 #if defined (HAVE_CONFIG_H)
 #  include <config.h>
 #endif
@@ -38,7 +58,7 @@
     {
       rl_insert_text (deftext);
       deftext = (char *)NULL;
-      rl_startup_hook = (Function *)NULL;
+      rl_startup_hook = (rl_hook_func_t *)NULL;
     }
   return 0;
 }
@@ -126,6 +146,6 @@
   if (temp == 0)
     exit (1);
 
-  puts (temp);
+  printf ("%s\n", temp);
   exit (0);
 }
diff --git a/readline/examples/rlcat.c b/readline/examples/rlcat.c
new file mode 100644
index 0000000..176b9f4
--- /dev/null
+++ b/readline/examples/rlcat.c
@@ -0,0 +1,174 @@
+/*
+ * rlcat - cat(1) using readline
+ *
+ * usage: rlcat
+ */
+
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+
+#include <sys/types.h>
+#include "posixstat.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+
+#if defined (READLINE_LIBRARY)
+#  include "readline.h"
+#  include "history.h"
+#else
+#  include <readline/readline.h>
+#  include <readline/history.h>
+#endif
+
+extern int optind;
+extern char *optarg;
+
+static int stdcat();
+
+static char *progname;
+static int vflag;
+
+static void
+usage()
+{
+  fprintf (stderr, "%s: usage: %s [-vEVN] [filename]\n", progname, progname);
+}
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  char *temp;
+  int opt, Vflag, Nflag;
+
+  progname = strrchr(argv[0], '/');
+  if (progname == 0)
+    progname = argv[0];
+  else
+    progname++;
+
+  vflag = Vflag = Nflag = 0;
+  while ((opt = getopt(argc, argv, "vEVN")) != EOF)
+    {
+      switch (opt)
+	{
+	case 'v':
+	  vflag = 1;
+	  break;
+	case 'V':
+	  Vflag = 1;
+	  break;
+	case 'E':
+	  Vflag = 0;
+	  break;
+	case 'N':
+	  Nflag = 1;
+	  break;
+	default:
+	  usage ();
+	  exit (2);
+	}
+    }
+
+  argc -= optind;
+  argv += optind;
+
+  if (isatty(0) == 0 || argc || Nflag)
+    return stdcat(argc, argv);
+
+  rl_variable_bind ("editing-mode", Vflag ? "vi" : "emacs");
+  while (temp = readline (""))
+    {
+      if (*temp)
+        add_history (temp);
+      printf ("%s\n", temp);
+    }
+
+  return (ferror (stdout));
+}
+
+static int
+fcopy(fp)
+     FILE *fp;
+{
+  int c;
+  char *x;
+
+  while ((c = getc(fp)) != EOF)
+    {
+      if (vflag && isascii ((unsigned char)c) && isprint((unsigned char)c) == 0)
+	{
+	  x = rl_untranslate_keyseq (c);
+	  if (fputs (x, stdout) != 0)
+	    return 1;
+	}
+      else if (putchar (c) == EOF)
+        return 1;
+    }
+  return (ferror (stdout));
+}
+
+int
+stdcat (argc, argv)
+     int argc;
+     char **argv;
+{
+  int  i, fd, r;
+  char *s;
+  FILE *fp;
+
+  if (argc == 0)
+    return (fcopy(stdin));
+
+  for (i = 0, r = 1; i < argc; i++)
+    {
+      if (*argv[i] == '-' && argv[i][1] == 0)
+	fp = stdin;
+      else
+	{
+	  fp = fopen (argv[i], "r");
+	  if (fp == 0)
+	    {
+	      fprintf (stderr, "%s: %s: cannot open: %s\n", progname, argv[i], strerror(errno));
+	      continue;
+	    }
+        }
+      r = fcopy (fp);
+      if (fp != stdin)
+	fclose(fp);
+    }
+  return r;
+}
diff --git a/readline/examples/rlfe.c b/readline/examples/rlfe.c
index 5c3c8fd..d634d7c 100644
--- a/readline/examples/rlfe.c
+++ b/readline/examples/rlfe.c
@@ -64,6 +64,8 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <termios.h>
+#include <limits.h>
+#include <dirent.h>
 
 #ifdef READLINE_LIBRARY
 #  include "readline.h"
@@ -81,6 +83,7 @@
 #endif
 
 #ifndef HAVE_MEMMOVE
+#ifndef memmove
 #  if __GNUC__ > 1
 #    define memmove(d, s, n)	__builtin_memcpy(d, s, n)
 #  else
@@ -89,8 +92,19 @@
 #else
 #  define memmove(d, s, n)	memcpy(d, s, n)
 #endif
+#endif
 
-#define APPLICATION_NAME "Fep"
+#define APPLICATION_NAME "Rlfe"
+
+#ifndef errno
+extern int errno;
+#endif
+
+extern int optind;
+extern char *optarg;
+
+static char *progname;
+static char *progversion;
 
 static int in_from_inferior_fd;
 static int out_to_inferior_fd;
@@ -110,13 +124,15 @@
 int echo_suppress_start = 0;
 int echo_suppress_limit = 0;
 
-#define DEBUG
+/* #define DEBUG */
+
+static FILE *logfile = NULL;
 
 #ifdef DEBUG
-FILE *logfile = NULL;
-#define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile))
-#define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile))
-#define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile))
+FILE *debugfile = NULL;
+#define DPRINT0(FMT) (fprintf(debugfile, FMT), fflush(debugfile))
+#define DPRINT1(FMT, V1) (fprintf(debugfile, FMT, V1), fflush(debugfile))
+#define DPRINT2(FMT, V1, V2) (fprintf(debugfile, FMT, V1, V2), fflush(debugfile))
 #else
 #define DPRINT0(FMT) /* Do nothing */
 #define DPRINT1(FMT, V1) /* Do nothing */
@@ -125,6 +141,10 @@
 
 struct termios orig_term;
 
+static int rlfe_directory_completion_hook __P((char **));
+static int rlfe_directory_rewrite_hook __P((char **));
+static char *rlfe_filename_completion_function __P((const char *, int));
+
 /* Pid of child process. */
 static pid_t child = -1;
 
@@ -370,13 +390,20 @@
   return ch;
 }
 
+static void
+usage()
+{
+  fprintf (stderr, "%s: usage: %s [-l filename] [-a] [-n appname] [-hv] [command [arguments...]]\n",
+		   progname, progname);
+}
+
 int
 main(int argc, char** argv)
 {
   char *path;
-  int i;
+  int i, append;
   int master;
-  char *name;
+  char *name, *logfname, *appname;
   int in_from_tty_fd;
   struct sigaction act;
   struct winsize ws;
@@ -387,12 +414,58 @@
   char *prompt = empty_string;
   int ioctl_err = 0;
 
+  if ((progname = strrchr (argv[0], '/')) == 0)
+    progname = argv[0];
+  else
+    progname++;
+  progversion = RL_LIBRARY_VERSION;
+
+  append = 0;
+  appname = APPLICATION_NAME;
+  logfname = (char *)NULL;
+
+  while ((i = getopt (argc, argv, "ahl:n:v")) != EOF)
+    {
+      switch (i)
+	{
+	case 'l':
+	  logfname = optarg;
+	  break;
+	case 'n':
+	  appname = optarg;
+	  break;
+	case 'a':
+	  append = 1;
+	  break;
+	case 'h':
+	  usage ();
+	  exit (0);
+	case 'v':
+	  fprintf (stderr, "%s version %s\n", progname, progversion);
+	  exit (0);
+	default:
+	  usage ();
+	  exit (2);
+	}
+    }
+
+  argc -= optind;
+  argv += optind;
+
+  if (logfname)
+    {
+      logfile = fopen (logfname, append ? "a" : "w");
+      if (logfile == 0)
+	fprintf (stderr, "%s: warning: could not open log file %s: %s\n",
+			 progname, logfname, strerror (errno));
+    }
+    
+  rl_readline_name = appname;
+  
 #ifdef DEBUG
-  logfile = fopen("LOG", "w");
+  debugfile = fopen("LOG", "w");
 #endif
 
-  rl_readline_name = APPLICATION_NAME;
-  
   if ((master = get_master_pty(&name)) < 0)
     {
       perror("ptypair: could not open master pty");
@@ -486,10 +559,10 @@
       /* now start the shell */
       {
 	static char* command_args[] = { COMMAND_ARGS, NULL };
-	if (argc <= 1)
+	if (argc < 1)
 	  execvp(COMMAND, command_args);
 	else
-	  execvp(argv[1], &argv[1]);
+	  execvp(argv[0], &argv[0]);
       }
 
       /* should never be reached */
@@ -535,6 +608,13 @@
   rl_deprep_term_function = null_deprep_terminal; 
   rl_callback_handler_install (prompt, line_handler);
 
+#if 1
+  rl_directory_completion_hook = rlfe_directory_completion_hook;
+  rl_completion_entry_function = rlfe_filename_completion_function;
+#else
+  rl_directory_rewrite_hook = rlfe_directory_rewrite_hook;
+#endif
+
   in_from_tty_fd = STDIN_FILENO;
   FD_ZERO (&in_set);
   maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd
@@ -644,6 +724,47 @@
 	    }
 	  old_count = buf_count;
 
+	  /* Do some minimal carriage return translation and backspace
+	     processing before logging the input line. */
+	  if (logfile)
+	    {
+#ifndef __GNUC__
+	      char *b;
+#else
+	      char b[count + 1];
+#endif
+	      int i, j;
+
+#ifndef __GNUC__
+	      b = malloc (count + 1);
+	      if (b) {
+#endif
+	      for (i = 0; i < count; i++)
+	        b[i] = buf[buf_count + i];
+	      b[i] = '\0';
+	      for (i = j = 0; i <= count; i++)
+		{
+		  if (b[i] == '\r')
+		    {
+		      if (b[i+1] != '\n')
+		        b[j++] = '\n';
+		    }
+		  else if (b[i] == '\b')
+		    {
+		      if (i)
+			j--;
+		    }
+		  else
+		    b[j++] = b[i];
+		}
+	      fprintf (logfile, "%s", b);
+
+#ifndef __GNUC__
+	      free (b);
+	      }
+#endif
+	    }
+
           /* Look for any pending echo that we need to suppress. */
 	  while (echo_suppress_start < echo_suppress_limit
 		 && count > 0
@@ -683,3 +804,239 @@
 	}
     }
 }
+
+/*
+ *
+ * FILENAME COMPLETION FOR RLFE
+ *
+ */
+
+#ifndef PATH_MAX
+#  define PATH_MAX 1024
+#endif
+
+#define DIRSEP		'/'
+#define ISDIRSEP(x)	((x) == '/')
+#define PATHSEP(x)	(ISDIRSEP(x) || (x) == 0)
+
+#define DOT_OR_DOTDOT(x) \
+	((x)[0] == '.' && (PATHSEP((x)[1]) || \
+			  ((x)[1] == '.' && PATHSEP((x)[2]))))
+
+#define FREE(x)		if (x) free(x)
+
+#define STRDUP(s, x)	do { \
+			  s = strdup (x);\
+			  if (s == 0) \
+			    return ((char *)NULL); \
+			} while (0)
+
+static int
+get_inferior_cwd (path, psize)
+     char *path;
+     size_t psize;
+{
+  int n;
+  static char procfsbuf[PATH_MAX] = { '\0' };
+
+  if (procfsbuf[0] == '\0')
+    sprintf (procfsbuf, "/proc/%d/cwd", (int)child);
+  n = readlink (procfsbuf, path, psize);
+  if (n < 0)
+    return n;
+  if (n > psize)
+    return -1;
+  path[n] = '\0';
+  return n;
+}
+
+static int
+rlfe_directory_rewrite_hook (dirnamep)
+     char **dirnamep;
+{
+  char *ldirname, cwd[PATH_MAX], *retdir, *ld;
+  int n, ldlen;
+
+  ldirname = *dirnamep;
+
+  if (*ldirname == '/')
+    return 0;
+
+  n = get_inferior_cwd (cwd, sizeof(cwd) - 1);
+  if (n < 0)
+    return 0;
+  if (n == 0)	/* current directory */
+    {
+      cwd[0] = '.';
+      cwd[1] = '\0';
+      n = 1;
+    }
+
+  /* Minimally canonicalize ldirname by removing leading `./' */
+  for (ld = ldirname; *ld; )
+    {
+      if (ISDIRSEP (ld[0]))
+	ld++;
+      else if (ld[0] == '.' && PATHSEP(ld[1]))
+	ld++;
+      else
+	break;
+    }
+  ldlen = (ld && *ld) ? strlen (ld) : 0;
+
+  retdir = (char *)malloc (n + ldlen + 3);
+  if (retdir == 0)
+    return 0;
+  if (ldlen)
+    sprintf (retdir, "%s/%s", cwd, ld);
+  else
+    strcpy (retdir, cwd);
+  free (ldirname);
+
+  *dirnamep = retdir;
+
+  DPRINT1("rl_directory_rewrite_hook returns %s\n", retdir);
+  return 1;
+}
+
+/* Translate *DIRNAMEP to be relative to the inferior's CWD.  Leave a trailing
+   slash on the result. */
+static int
+rlfe_directory_completion_hook (dirnamep)
+     char **dirnamep;
+{
+  char *ldirname, *retdir;
+  int n, ldlen;
+
+  ldirname = *dirnamep;
+
+  if (*ldirname == '/')
+    return 0;
+
+  n = rlfe_directory_rewrite_hook (dirnamep);
+  if (n == 0)
+    return 0;
+
+  ldirname = *dirnamep;
+  ldlen = (ldirname && *ldirname) ? strlen (ldirname) : 0;
+
+  if (ldlen == 0 || ldirname[ldlen - 1] != '/')
+    {
+      retdir = (char *)malloc (ldlen + 3);
+      if (retdir == 0)
+	return 0;
+      if (ldlen)
+	strcpy (retdir, ldirname);
+      else
+	retdir[ldlen++] = '.';
+      retdir[ldlen] = '/';
+      retdir[ldlen+1] = '\0';
+      free (ldirname);
+
+      *dirnamep = retdir;
+    }
+
+  DPRINT1("rl_directory_completion_hook returns %s\n", retdir);
+  return 1;
+}
+
+static char *
+rlfe_filename_completion_function (text, state)
+     const char *text;
+     int state;
+{
+  static DIR *directory;
+  static char *filename = (char *)NULL;
+  static char *dirname = (char *)NULL, *ud = (char *)NULL;
+  static int flen, udlen;
+  char *temp;
+  struct dirent *dentry;
+
+  if (state == 0)
+    {
+      if (directory)
+	{
+	  closedir (directory);
+	  directory = 0;
+	}
+      FREE (dirname);
+      FREE (filename);
+      FREE (ud);
+
+      if (text && *text)
+        STRDUP (filename, text);
+      else
+	{
+	  filename = malloc(1); 
+	  if (filename == 0)
+	    return ((char *)NULL);
+	  filename[0] = '\0';
+	}
+      dirname = (text && *text) ? strdup (text) : strdup (".");
+      if (dirname == 0)
+        return ((char *)NULL);
+
+      temp = strrchr (dirname, '/');
+      if (temp)
+	{
+	  strcpy (filename, ++temp);
+	  *temp = '\0';
+	}
+      else
+	{
+	  dirname[0] = '.';
+	  dirname[1] = '\0';
+	}
+
+      STRDUP (ud, dirname);
+      udlen = strlen (ud);
+
+      rlfe_directory_completion_hook (&dirname);
+
+      directory = opendir (dirname);
+      flen = strlen (filename);
+
+      rl_filename_completion_desired = 1;
+    }
+
+  dentry = 0;
+  while (directory && (dentry = readdir (directory)))
+    {
+      if (flen == 0)
+	{
+          if (DOT_OR_DOTDOT(dentry->d_name) == 0)
+            break;
+	}
+      else
+	{
+	  if ((dentry->d_name[0] == filename[0]) &&
+	      (strlen (dentry->d_name) >= flen) &&
+	      (strncmp (filename, dentry->d_name, flen) == 0))
+	    break;
+	}
+    }
+
+  if (dentry == 0)
+    {
+      if (directory)
+	{
+	  closedir (directory);
+	  directory = 0;
+	}
+      FREE (dirname);
+      FREE (filename);
+      FREE (ud);
+      dirname = filename = ud = 0;
+      return ((char *)NULL);
+    }
+
+  if (ud == 0 || (ud[0] == '.' && ud[1] == '\0'))
+    temp = strdup (dentry->d_name);
+  else
+    {
+      temp = malloc (1 + udlen + strlen (dentry->d_name));
+      strcpy (temp, ud);
+      strcpy (temp + udlen, dentry->d_name);
+    }
+  return (temp);
+}
diff --git a/readline/examples/rltest.c b/readline/examples/rltest.c
index 6250f90..99f083b 100644
--- a/readline/examples/rltest.c
+++ b/readline/examples/rltest.c
@@ -4,6 +4,26 @@
 /*								    */
 /* **************************************************************** */
 
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
 #if defined (HAVE_CONFIG_H)
 #include <config.h>
 #endif
diff --git a/readline/examples/rlversion.c b/readline/examples/rlversion.c
index 652d37c..53949d1 100644
--- a/readline/examples/rlversion.c
+++ b/readline/examples/rlversion.c
@@ -2,6 +2,26 @@
  * rlversion -- print out readline's version number
  */
 
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
 #if defined (HAVE_CONFIG_H)
 #  include <config.h>
 #endif
diff --git a/readline/funmap.c b/readline/funmap.c
index 1f7ba87..fe9a1da 100644
--- a/readline/funmap.c
+++ b/readline/funmap.c
@@ -46,7 +46,7 @@
 typedef int QSFUNC ();
 #endif
 
-extern int _rl_qsort_string_compare ();
+extern int _rl_qsort_string_compare PARAMS((char **, char **));
 
 FUNMAP **funmap;
 static int funmap_size;
@@ -60,7 +60,8 @@
   { "abort", rl_abort },
   { "accept-line", rl_newline },
   { "arrow-key-prefix", rl_arrow_keys },
-  { "backward-char", rl_backward },
+  { "backward-byte", rl_backward_byte },
+  { "backward-char", rl_backward_char },
   { "backward-delete-char", rl_rubout },
   { "backward-kill-line", rl_backward_kill_line },
   { "backward-kill-word", rl_backward_kill_word },
@@ -91,7 +92,8 @@
   { "end-of-line", rl_end_of_line },
   { "exchange-point-and-mark", rl_exchange_point_and_mark },
   { "forward-backward-delete-char", rl_rubout_or_delete },
-  { "forward-char", rl_forward },
+  { "forward-byte", rl_forward_byte },
+  { "forward-char", rl_forward_char },
   { "forward-search-history", rl_forward_search_history },
   { "forward-word", rl_forward_word },
   { "history-search-backward", rl_history_search_backward },
@@ -108,7 +110,8 @@
   { "non-incremental-reverse-search-history", rl_noninc_reverse_search },
   { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again },
   { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again },
-#ifdef __CYGWIN32__
+  { "overwrite-mode", rl_overwrite_mode },
+#ifdef __CYGWIN__
   { "paste-from-clipboard", rl_paste_from_clipboard },
 #endif
   { "possible-completions", rl_possible_completions },
@@ -142,7 +145,6 @@
   { "vi-arg-digit", rl_vi_arg_digit },
   { "vi-back-to-indent", rl_vi_back_to_indent },
   { "vi-bWord", rl_vi_bWord },
-  { "vi-bracktype", rl_vi_bracktype },
   { "vi-bword", rl_vi_bword },
   { "vi-change-case", rl_vi_change_case },
   { "vi-change-char", rl_vi_change_char },
@@ -182,13 +184,13 @@
   { "vi-yank-to", rl_vi_yank_to },
 #endif /* VI_MODE */
 
- {(char *)NULL, (Function *)NULL }
+ {(char *)NULL, (rl_command_func_t *)NULL }
 };
 
 int
 rl_add_funmap_entry (name, function)
-     char *name;
-     Function *function;
+     const char *name;
+     rl_command_func_t *function;
 {
   if (funmap_entry + 2 >= funmap_size)
     {
@@ -225,21 +227,21 @@
 /* Produce a NULL terminated array of known function names.  The array
    is sorted.  The array itself is allocated, but not the strings inside.
    You should free () the array when you done, but not the pointrs. */
-char **
+const char **
 rl_funmap_names ()
 {
-  char **result;
+  const char **result;
   int result_size, result_index;
 
   /* Make sure that the function map has been initialized. */
   rl_initialize_funmap ();
 
-  for (result_index = result_size = 0, result = (char **)NULL; funmap[result_index]; result_index++)
+  for (result_index = result_size = 0, result = (const char **)NULL; funmap[result_index]; result_index++)
     {
       if (result_index + 2 > result_size)
 	{
 	  result_size += 20;
-	  result = (char **)xrealloc (result, result_size * sizeof (char *));
+	  result = (const char **)xrealloc (result, result_size * sizeof (char *));
 	}
 
       result[result_index] = funmap[result_index]->name;
@@ -249,12 +251,3 @@
   qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
   return (result);
 }
-
-/* Things that mean `Control'. */
-char *possible_control_prefixes[] = {
-  "Control-", "C-", "CTRL-", (char *)NULL
-};
-
-char *possible_meta_prefixes[] = {
-  "Meta", "M-", (char *)NULL
-};
diff --git a/readline/histexpand.c b/readline/histexpand.c
index 78da3e5..6c81196 100644
--- a/readline/histexpand.c
+++ b/readline/histexpand.c
@@ -41,11 +41,7 @@
 #  include <unistd.h>
 #endif
 
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif /* !HAVE_STRING_H */
+#include "rlmbutil.h"
 
 #include "history.h"
 #include "histlib.h"
@@ -56,6 +52,10 @@
 #define HISTORY_WORD_DELIMITERS		" \t\n;&()|<>"
 #define HISTORY_QUOTE_CHARACTERS	"\"'`"
 
+typedef int _hist_search_func_t PARAMS((const char *, int));
+
+extern int rl_byte_oriented;	/* declared in mbutil.c */
+
 static char error_pointer;
 
 static char *subst_lhs;
@@ -63,10 +63,10 @@
 static int subst_lhs_len;
 static int subst_rhs_len;
 
-static char *get_history_word_specifier __P((char *, char *, int *));
-static char *history_find_word __P((char *, int));
+static char *get_history_word_specifier PARAMS((char *, char *, int *));
+static char *history_find_word PARAMS((char *, int));
 
-static char *quote_breaks __P((char *));
+static char *quote_breaks PARAMS((char *));
 
 /* Variables exported by this file. */
 /* The character that represents the start of a history expansion
@@ -91,9 +91,12 @@
    The default is 0. */
 int history_quotes_inhibit_expansion = 0;
 
+/* Used to split words by history_tokenize_internal. */
+char *history_word_delimiters = HISTORY_WORD_DELIMITERS;
+
 /* If set, this points to a function that is called to verify that a
    particular history expansion should be performed. */
-Function *history_inhibit_expansion_function;
+rl_linebuf_func_t *history_inhibit_expansion_function;
 
 /* **************************************************************** */
 /*								    */
@@ -122,7 +125,7 @@
    line = get_history_event ("!echo:p", &index, 0);  */
 char *
 get_history_event (string, caller_index, delimiting_quote)
-     char *string;
+     const char *string;
      int *caller_index;
      int delimiting_quote;
 {
@@ -130,7 +133,7 @@
   register char c;
   HIST_ENTRY *entry;
   int which, sign, local_index, substring_okay;
-  Function *search_func;
+  _hist_search_func_t *search_func;
   char *temp;
 
   /* The event can be specified in a number of ways.
@@ -199,15 +202,33 @@
 
   /* Only a closing `?' or a newline delimit a substring search string. */
   for (local_index = i; c = string[i]; i++)
-    if ((!substring_okay && (whitespace (c) || c == ':' ||
-	(history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
-	string[i] == delimiting_quote)) ||
-	string[i] == '\n' ||
-	(substring_okay && string[i] == '?'))
-      break;
+#if defined (HANDLE_MULTIBYTE)
+    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+      {
+	int v;
+	mbstate_t ps;
+
+	memset (&ps, 0, sizeof (mbstate_t));
+	/* These produce warnings because we're passing a const string to a
+	   function that takes a non-const string. */
+	_rl_adjust_point (string, i, &ps);
+	if ((v = _rl_get_char_len (string + i, &ps)) > 1)
+	  {
+	    i += v - 1;
+	    continue;
+	  }
+      }
+    else
+#endif /* HANDLE_MULTIBYTE */
+      if ((!substring_okay && (whitespace (c) || c == ':' ||
+	  (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
+	  string[i] == delimiting_quote)) ||
+	  string[i] == '\n' ||
+	  (substring_okay && string[i] == '?'))
+	break;
 
   which = i - local_index;
-  temp = xmalloc (1 + which);
+  temp = (char *)xmalloc (1 + which);
   if (which)
     strncpy (temp, string + local_index, which);
   temp[which] = '\0';
@@ -309,7 +330,7 @@
 	len += 2;
     }
 
-  r = ret = xmalloc (len);
+  r = ret = (char *)xmalloc (len);
   *r++ = '\'';
   for (p = s; p && *p; )
     {
@@ -340,7 +361,8 @@
       char *s;
       int start, current, errtype;
 {
-  char *temp, *emsg;
+  char *temp;
+  const char *emsg;
   int ll, elen;
 
   ll = current - start;
@@ -373,7 +395,7 @@
       break;
     }
 
-  temp = xmalloc (ll + elen + 3);
+  temp = (char *)xmalloc (ll + elen + 3);
   strncpy (temp, s + start, ll);
   temp[ll] = ':';
   temp[ll + 1] = ' ';
@@ -399,17 +421,37 @@
      int *iptr, delimiter, is_rhs, *lenptr;
 {
   register int si, i, j, k;
-  char *s = (char *) NULL;
+  char *s;
+#if defined (HANDLE_MULTIBYTE)
+  mbstate_t ps;
+#endif
 
+  s = (char *)NULL;
   i = *iptr;
 
+#if defined (HANDLE_MULTIBYTE)
+  memset (&ps, 0, sizeof (mbstate_t));
+  _rl_adjust_point (str, i, &ps);
+#endif
+
   for (si = i; str[si] && str[si] != delimiter; si++)
-    if (str[si] == '\\' && str[si + 1] == delimiter)
-      si++;
+#if defined (HANDLE_MULTIBYTE)
+    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+      {
+	int v;
+	if ((v = _rl_get_char_len (str + si, &ps)) > 1)
+	  si += v - 1;
+	else if (str[si] == '\\' && str[si + 1] == delimiter)
+	  si++;
+      }
+    else
+#endif /* HANDLE_MULTIBYTE */
+      if (str[si] == '\\' && str[si + 1] == delimiter)
+	si++;
 
   if (si > i || is_rhs)
     {
-      s = xmalloc (si - i + 1);
+      s = (char *)xmalloc (si - i + 1);
       for (j = 0, k = i; k < si; j++, k++)
 	{
 	  /* Remove a backslash quoting the search string delimiter. */
@@ -436,13 +478,13 @@
   char *new;
   int i, j, new_size;
 
-  new = xmalloc (new_size = subst_rhs_len + subst_lhs_len);
+  new = (char *)xmalloc (new_size = subst_rhs_len + subst_lhs_len);
   for (i = j = 0; i < subst_rhs_len; i++)
     {
       if (subst_rhs[i] == '&')
 	{
 	  if (j + subst_lhs_len >= new_size)
-	    new = xrealloc (new, (new_size = new_size * 2 + subst_lhs_len));
+	    new = (char *)xrealloc (new, (new_size = new_size * 2 + subst_lhs_len));
 	  strcpy (new + j, subst_lhs);
 	  j += subst_lhs_len;
 	}
@@ -452,7 +494,7 @@
 	  if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&')
 	    i++;
 	  if (j >= new_size)
-	    new = xrealloc (new, new_size *= 2);
+	    new = (char *)xrealloc (new, new_size *= 2);
 	  new[j++] = subst_rhs[i];
 	}
     }
@@ -478,8 +520,13 @@
   int substitute_globally, want_quotes, print_only;
   char *event, *temp, *result, *tstr, *t, c, *word_spec;
   int result_len;
+#if defined (HANDLE_MULTIBYTE)
+  mbstate_t ps;
 
-  result = xmalloc (result_len = 128);
+  memset (&ps, 0, sizeof (mbstate_t));
+#endif
+
+  result = (char *)xmalloc (result_len = 128);
 
   i = start;
 
@@ -508,8 +555,21 @@
 	 quote, then this expansion takes place inside of the
 	 quoted string.  If we have to search for some text ("!foo"),
 	 allow the delimiter to end the search string. */
-      if (i && (string[i - 1] == '\'' || string[i - 1] == '"'))
-	quoted_search_delimiter = string[i - 1];
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  int c, l;
+	  l = _rl_find_prev_mbchar (string, i, MB_FIND_ANY);
+	  c = string[l];
+	  /* XXX - original patch had i - 1 ???  If i == 0 it would fail. */
+	  if (i && (c == '\'' || c == '"'))
+	    quoted_search_delimiter = c;
+	}
+      else
+#endif /* HANDLE_MULTIBYTE */	  
+	if (i && (string[i - 1] == '\'' || string[i - 1] == '"'))
+	  quoted_search_delimiter = string[i - 1];
+
       event = get_history_event (string, &i, quoted_search_delimiter);
     }
 	  
@@ -622,13 +682,26 @@
 	case '&':
 	case 's':
 	  {
-	    char *new_event, *t;
+	    char *new_event;
 	    int delimiter, failed, si, l_temp;
 
 	    if (c == 's')
 	      {
 		if (i + 2 < (int)strlen (string))
-		  delimiter = string[i + 2];
+		  {
+#if defined (HANDLE_MULTIBYTE)
+		    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+		      {
+			_rl_adjust_point (string, i + 2, &ps);
+			if (_rl_get_char_len (string + i + 2, &ps) > 1)
+			  delimiter = 0;
+			else
+			  delimiter = string[i + 2];
+		      }
+		    else
+#endif /* HANDLE_MULTIBYTE */
+		      delimiter = string[i + 2];
+		  }
 		else
 		  break;	/* no search delimiter */
 
@@ -692,7 +765,7 @@
 	      if (STREQN (temp+si, subst_lhs, subst_lhs_len))
 		{
 		  int len = subst_rhs_len - subst_lhs_len + l_temp;
-		  new_event = xmalloc (1 + len);
+		  new_event = (char *)xmalloc (1 + len);
 		  strncpy (new_event, temp, si);
 		  strncpy (new_event + si, subst_rhs, subst_rhs_len);
 		  strncpy (new_event + si + subst_rhs_len,
@@ -741,7 +814,7 @@
       char *x;
 
       if (want_quotes == 'q')
-	x = single_quote (temp);
+	x = sh_single_quote (temp);
       else if (want_quotes == 'x')
 	x = quote_breaks (temp);
       else
@@ -753,7 +826,7 @@
 
   n = strlen (temp);
   if (n >= result_len)
-    result = xrealloc (result, n + 2);
+    result = (char *)xrealloc (result, n + 2);
   strcpy (result, temp);
   free (temp);
 
@@ -784,7 +857,7 @@
 	      { \
 		while (j >= result_len) \
 		  result_len += 128; \
-		result = xrealloc (result, result_len); \
+		result = (char *)xrealloc (result, result_len); \
 	      } \
 	    strcpy (result + j - sl, s); \
 	  } \
@@ -794,7 +867,7 @@
 	do \
 	  { \
 	    if (j >= result_len - 1) \
-	      result = xrealloc (result, result_len += 64); \
+	      result = (char *)xrealloc (result, result_len += 64); \
 	    result[j++] = c; \
 	    result[j] = '\0'; \
 	  } \
@@ -813,9 +886,17 @@
   int result_len;
   char *result;
 
+#if defined (HANDLE_MULTIBYTE)
+  char mb[MB_LEN_MAX];
+  mbstate_t ps;
+#endif
+
   /* Used when adding the string. */
   char *temp;
 
+  if (output == 0)
+    return 0;
+
   /* Setting the history expansion character to 0 inhibits all
      history expansion. */
   if (history_expansion_char == 0)
@@ -825,7 +906,7 @@
     }
     
   /* Prepare the buffer for printing error messages. */
-  result = xmalloc (result_len = 256);
+  result = (char *)xmalloc (result_len = 256);
   result[0] = '\0';
 
   only_printing = modified = 0;
@@ -842,7 +923,7 @@
      that is the substitution that we do. */
   if (hstring[0] == history_subst_char)
     {
-      string = xmalloc (l + 5);
+      string = (char *)xmalloc (l + 5);
 
       string[0] = string[1] = history_expansion_char;
       string[2] = ':';
@@ -852,6 +933,10 @@
     }
   else
     {
+#if defined (HANDLE_MULTIBYTE)
+      memset (&ps, 0, sizeof (mbstate_t));
+#endif
+
       string = hstring;
       /* If not quick substitution, still maybe have to do expansion. */
 
@@ -859,13 +944,26 @@
 	 is NOT an expansion. */
       for (i = 0; string[i]; i++)
 	{
+#if defined (HANDLE_MULTIBYTE)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    {
+	      int v;
+	      v = _rl_get_char_len (string + i, &ps);
+	      if (v > 1)
+		{
+		  i += v - 1;
+		  continue;
+		}
+	    }
+#endif /* HANDLE_MULTIBYTE */
+
 	  cc = string[i + 1];
-	  /* The history_comment_char, if set, appearing that the beginning
+	  /* The history_comment_char, if set, appearing at the beginning
 	     of a word signifies that the rest of the line should not have
 	     history expansion performed on it.
 	     Skip the rest of the line and break out of the loop. */
 	  if (history_comment_char && string[i] == history_comment_char &&
-	      (i == 0 || member (string[i - 1], HISTORY_WORD_DELIMITERS)))
+	      (i == 0 || member (string[i - 1], history_word_delimiters)))
 	    {
 	      while (string[i])
 		i++;
@@ -923,6 +1021,30 @@
 	  continue;
 	}
 
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  int k, c;
+
+	  c = tchar;
+	  memset (mb, 0, sizeof (mb));
+	  for (k = 0; k < MB_LEN_MAX; k++)
+	    {
+	      mb[k] = (char)c;
+	      memset (&ps, 0, sizeof (mbstate_t));
+	      if (_rl_get_char_len (mb, &ps) == -2)
+		c = string[++i];
+	      else
+		break;
+	    }
+	  if (strlen (mb) > 1)
+	    {
+	      ADD_STRING (mb);
+	      break;
+	    }
+	}
+#endif /* HANDLE_MULTIBYTE */
+
       if (tchar == history_expansion_char)
 	tchar = -3;
       else if (tchar == history_comment_char)
@@ -951,7 +1073,7 @@
 		hist_string_extract_single_quoted (string, &i);
 
 		slen = i - quote + 2;
-		temp = xmalloc (slen);
+		temp = (char *)xmalloc (slen);
 		strncpy (temp, string + quote, slen);
 		temp[slen - 1] = '\0';
 		ADD_STRING (temp);
@@ -963,9 +1085,9 @@
 	  }
 
 	case -2:		/* history_comment_char */
-	  if (i == 0 || member (string[i - 1], HISTORY_WORD_DELIMITERS))
+	  if (i == 0 || member (string[i - 1], history_word_delimiters))
 	    {
-	      temp = xmalloc (l - i + 1);
+	      temp = (char *)xmalloc (l - i + 1);
 	      strcpy (temp, string + i);
 	      ADD_STRING (temp);
 	      free (temp);
@@ -997,7 +1119,7 @@
 	    {
 	      if (result)
 		{
-		  temp = xmalloc (1 + strlen (result));
+		  temp = (char *)xmalloc (1 + strlen (result));
 		  strcpy (temp, result);
 		  ADD_STRING (temp);
 		  free (temp);
@@ -1131,7 +1253,14 @@
 	  i++;
 	  last = '$';
 	}
-      else if (!spec[i] || spec[i] == ':')  /* could be modifier separator */
+#if 0
+      else if (!spec[i] || spec[i] == ':')
+	/* check against `:' because there could be a modifier separator */
+#else
+      else
+	/* csh seems to allow anything to terminate the word spec here,
+	   leaving it as an abbreviation. */
+#endif
 	last = -1;		/* x- abbreviates x-$ omitting word `$' */
     }
 
@@ -1151,7 +1280,7 @@
 char *
 history_arg_extract (first, last, string)
      int first, last;
-     char *string;
+     const char *string;
 {
   register int i, len;
   char *result;
@@ -1187,7 +1316,7 @@
     {
       for (size = 0, i = first; i < last; i++)
 	size += strlen (list[i]) + 1;
-      result = xmalloc (size + 1);
+      result = (char *)xmalloc (size + 1);
       result[0] = '\0';
 
       for (i = first, offset = 0; i < last; i++)
@@ -1217,13 +1346,18 @@
    *INDP. */
 static char **
 history_tokenize_internal (string, wind, indp)
-     char *string;
+     const char *string;
      int wind, *indp;
 {
   char **result;
   register int i, start, result_index, size;
   int len, delimiter;
 
+  /* If we're searching for a string that's not part of a word (e.g., " "),
+     make sure we set *INDP to a reasonable value. */
+  if (indp && wind != -1)
+    *indp = -1;
+
   /* Get a token, and stuff it into RESULT.  The tokens are split
      exactly where the shell would split them. */
   for (i = result_index = size = 0, result = (char **)NULL; string[i]; )
@@ -1298,7 +1432,7 @@
 	      continue;
 	    }
 
-	  if (!delimiter && (member (string[i], HISTORY_WORD_DELIMITERS)))
+	  if (!delimiter && (member (string[i], history_word_delimiters)))
 	    break;
 
 	  if (!delimiter && member (string[i], HISTORY_QUOTE_CHARACTERS))
@@ -1315,7 +1449,7 @@
       len = i - start;
       if (result_index + 2 >= size)
 	result = (char **)xrealloc (result, ((size += 10) * sizeof (char *)));
-      result[result_index] = xmalloc (1 + len);
+      result[result_index] = (char *)xmalloc (1 + len);
       strncpy (result[result_index], string + start, len);
       result[result_index][len] = '\0';
       result[++result_index] = (char *)NULL;
@@ -1328,7 +1462,7 @@
    parsed out of STRING. */
 char **
 history_tokenize (string)
-     char *string;
+     const char *string;
 {
   return (history_tokenize_internal (string, -1, (int *)NULL));
 }
@@ -1345,7 +1479,7 @@
   int i, wind;
 
   words = history_tokenize_internal (line, ind, &wind);
-  if (wind == -1)
+  if (wind == -1 || words == 0)
     return ((char *)NULL);
   s = words[wind];
   for (i = 0; i < wind; i++)
diff --git a/readline/histfile.c b/readline/histfile.c
index b908e22..60a9125 100644
--- a/readline/histfile.c
+++ b/readline/histfile.c
@@ -48,12 +48,26 @@
 #  include <unistd.h>
 #endif
 
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif /* !HAVE_STRING_H */
+#if defined (__EMX__) || defined (__CYGWIN__)
+#  undef HAVE_MMAP
+#endif
 
+#ifdef HAVE_MMAP
+#  include <sys/mman.h>
+
+#  ifdef MAP_FILE
+#    define MAP_RFLAGS	(MAP_FILE|MAP_PRIVATE)
+#    define MAP_WFLAGS	(MAP_FILE|MAP_SHARED)
+#  else
+#    define MAP_RFLAGS	MAP_PRIVATE
+#    define MAP_WFLAGS	MAP_SHARED
+#  endif
+
+#  ifndef MAP_FAILED
+#    define MAP_FAILED	((void *)-1)
+#  endif
+
+#endif /* HAVE_MMAP */
 
 /* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment
    on win 95/98/nt), we want to open files with O_BINARY mode so that there
@@ -84,9 +98,10 @@
    filename to read_history (), or write_history (). */
 static char *
 history_filename (filename)
-     char *filename;
+     const char *filename;
 {
-  char *return_val, *home;
+  char *return_val;
+  const char *home;
   int home_len;
 
   return_val = filename ? savestring (filename) : (char *)NULL;
@@ -94,7 +109,7 @@
   if (return_val)
     return (return_val);
   
-  home = get_env_value ("HOME");
+  home = sh_get_env_value ("HOME");
 
   if (home == 0)
     {
@@ -104,7 +119,7 @@
   else
     home_len = strlen (home);
 
-  return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
+  return_val = (char *)xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
   strcpy (return_val, home);
   return_val[home_len] = '/';
 #if defined (__MSDOS__)
@@ -121,7 +136,7 @@
    successful, or errno if not. */
 int
 read_history (filename)
-     char *filename;
+     const char *filename;
 {
   return (read_history_range (filename, 0, -1));
 }
@@ -133,11 +148,11 @@
    ~/.history.  Returns 0 if successful, or errno if not. */
 int
 read_history_range (filename, from, to)
-     char *filename;
+     const char *filename;
      int from, to;
 {
-  register int line_start, line_end;
-  char *input, *buffer;
+  register char *line_start, *line_end;
+  char *input, *buffer, *bufend;
   int file, current_line, chars_read;
   struct stat finfo;
   size_t file_size;
@@ -156,23 +171,39 @@
     {
 #if defined (EFBIG)
       errno = EFBIG;
+#elif defined (EOVERFLOW)
+      errno = EOVERFLOW;
 #endif
       goto error_and_exit;
     }
 
-  buffer = xmalloc (file_size + 1);
+#ifdef HAVE_MMAP
+  /* We map read/write and private so we can change newlines to NULs without
+     affecting the underlying object. */
+  buffer = (char *)mmap (0, file_size, PROT_READ|PROT_WRITE, MAP_RFLAGS, file, 0);
+  if ((void *)buffer == MAP_FAILED)
+    goto error_and_exit;
+  chars_read = file_size;
+#else
+  buffer = (char *)malloc (file_size + 1);
+  if (buffer == 0)
+    goto error_and_exit;
 
   chars_read = read (file, buffer, file_size);
+#endif
   if (chars_read < 0)
     {
   error_and_exit:
+      chars_read = errno;
       if (file >= 0)
 	close (file);
 
       FREE (input);
+#ifndef HAVE_MMAP
       FREE (buffer);
+#endif
 
-      return (errno);
+      return (chars_read);
     }
 
   close (file);
@@ -182,29 +213,25 @@
     to = chars_read;
 
   /* Start at beginning of file, work to end. */
-  line_start = line_end = current_line = 0;
+  bufend = buffer + chars_read;
+  current_line = 0;
 
   /* Skip lines until we are at FROM. */
-  while (line_start < chars_read && current_line < from)
-    {
-      for (line_end = line_start; line_end < chars_read; line_end++)
-	if (buffer[line_end] == '\n')
-	  {
-	    current_line++;
-	    line_start = line_end + 1;
-	    if (current_line == from)
-	      break;
-	  }
-    }
+  for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++)
+    if (*line_end == '\n')
+      {
+	current_line++;
+	line_start = line_end + 1;
+      }
 
   /* If there are lines left to gobble, then gobble them now. */
-  for (line_end = line_start; line_end < chars_read; line_end++)
-    if (buffer[line_end] == '\n')
+  for (line_end = line_start; line_end < bufend; line_end++)
+    if (*line_end == '\n')
       {
-	buffer[line_end] = '\0';
+	*line_end = '\0';
 
-	if (buffer[line_start])
-	  add_history (buffer + line_start);
+	if (*line_start)
+	  add_history (line_start);
 
 	current_line++;
 
@@ -215,34 +242,52 @@
       }
 
   FREE (input);
+#ifndef HAVE_MMAP
   FREE (buffer);
+#else
+  munmap (buffer, file_size);
+#endif
 
   return (0);
 }
 
 /* Truncate the history file FNAME, leaving only LINES trailing lines.
-   If FNAME is NULL, then use ~/.history. */
+   If FNAME is NULL, then use ~/.history.  Returns 0 on success, errno
+   on failure. */
 int
 history_truncate_file (fname, lines)
-     char *fname;
+     const char *fname;
      int lines;
 {
-  register int i;
-  int file, chars_read;
-  char *buffer, *filename;
+  char *buffer, *filename, *bp;
+  int file, chars_read, rv;
   struct stat finfo;
   size_t file_size;
 
   buffer = (char *)NULL;
   filename = history_filename (fname);
   file = open (filename, O_RDONLY|O_BINARY, 0666);
-
-  if (file == -1 || fstat (file, &finfo) == -1)
-    goto truncate_exit;
+  rv = 0;
 
   /* Don't try to truncate non-regular files. */
-  if (S_ISREG(finfo.st_mode) == 0)
-    goto truncate_exit;
+  if (file == -1 || fstat (file, &finfo) == -1)
+    {
+      rv = errno;
+      if (file != -1)
+	close (file);
+      goto truncate_exit;
+    }
+
+  if (S_ISREG (finfo.st_mode) == 0)
+    {
+      close (file);
+#ifdef EFTYPE
+      rv = EFTYPE;
+#else
+      rv = EINVAL;
+#endif
+      goto truncate_exit;
+    }
 
   file_size = (size_t)finfo.st_size;
 
@@ -251,23 +296,36 @@
     {
       close (file);
 #if defined (EFBIG)
-      errno = EFBIG;
+      rv = errno = EFBIG;
+#elif defined (EOVERFLOW)
+      rv = errno = EOVERFLOW;
+#else
+      rv = errno = EINVAL;
 #endif
       goto truncate_exit;
     }
 
-  buffer = xmalloc (file_size + 1);
+  buffer = (char *)malloc (file_size + 1);
+  if (buffer == 0)
+    {
+      close (file);
+      goto truncate_exit;
+    }
+
   chars_read = read (file, buffer, file_size);
   close (file);
 
   if (chars_read <= 0)
-    goto truncate_exit;
+    {
+      rv = (chars_read < 0) ? errno : 0;
+      goto truncate_exit;
+    }
 
   /* Count backwards from the end of buffer until we have passed
      LINES lines. */
-  for (i = chars_read - 1; lines && i; i--)
+  for (bp = buffer + chars_read - 1; lines && bp > buffer; bp--)
     {
-      if (buffer[i] == '\n')
+      if (*bp == '\n')
 	lines--;
     }
 
@@ -276,22 +334,22 @@
      anything.  It's the first line if we don't find a newline between
      the current value of i and 0.  Otherwise, write from the start of
      this line until the end of the buffer. */
-  for ( ; i; i--)
-    if (buffer[i] == '\n')
+  for ( ; bp > buffer; bp--)
+    if (*bp == '\n')
       {
-	i++;
+	bp++;
 	break;
       }
 
   /* Write only if there are more lines in the file than we want to
      truncate to. */
-  if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
+  if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
     {
-      write (file, buffer + i, chars_read - i);
+      write (file, bp, chars_read - (bp - buffer));
 
 #if defined (__BEOS__)
       /* BeOS ignores O_TRUNC. */
-      ftruncate (file, chars_read - i);
+      ftruncate (file, chars_read - (bp - buffer));
 #endif
 
       close (file);
@@ -302,7 +360,7 @@
   FREE (buffer);
 
   free (filename);
-  return 0;
+  return rv;
 }
 
 /* Workhorse function for writing history.  Writes NELEMENT entries
@@ -310,15 +368,21 @@
    wish to replace FILENAME with the entries. */
 static int
 history_do_write (filename, nelements, overwrite)
-     char *filename;
+     const char *filename;
      int nelements, overwrite;
 {
   register int i;
   char *output;
-  int file, mode;
+  int file, mode, rv;
+  size_t cursize;
 
+#ifdef HAVE_MMAP
+  mode = overwrite ? O_RDWR|O_CREAT|O_TRUNC|O_BINARY : O_RDWR|O_APPEND|O_BINARY;
+#else
   mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY;
+#endif
   output = history_filename (filename);
+  rv = 0;
 
   if ((file = open (output, mode, 0600)) == -1)
     {
@@ -326,6 +390,10 @@
       return (errno);
     }
 
+#ifdef HAVE_MMAP
+  cursize = overwrite ? 0 : lseek (file, 0, SEEK_END);
+#endif
+
   if (nelements > history_length)
     nelements = history_length;
 
@@ -343,7 +411,28 @@
       buffer_size += 1 + strlen (the_history[i]->line);
 
     /* Allocate the buffer, and fill it. */
-    buffer = xmalloc (buffer_size);
+#ifdef HAVE_MMAP
+    if (ftruncate (file, buffer_size+cursize) == -1)
+      goto mmap_error;
+    buffer = (char *)mmap (0, buffer_size, PROT_READ|PROT_WRITE, MAP_WFLAGS, file, cursize);
+    if ((void *)buffer == MAP_FAILED)
+      {
+mmap_error:
+	rv = errno;
+	FREE (output);
+	close (file);
+	return rv;
+      }
+#else    
+    buffer = (char *)malloc (buffer_size);
+    if (buffer == 0)
+      {
+      	rv = errno;
+	FREE (output);
+	close (file);
+	return rv;
+      }
+#endif
 
     for (j = 0, i = history_length - nelements; i < history_length; i++)
       {
@@ -352,15 +441,21 @@
 	buffer[j++] = '\n';
       }
 
-    write (file, buffer, buffer_size);
+#ifdef HAVE_MMAP
+    if (msync (buffer, buffer_size, 0) != 0 || munmap (buffer, buffer_size) != 0)
+      rv = errno;
+#else
+    if (write (file, buffer, buffer_size) < 0)
+      rv = errno;
     free (buffer);
+#endif
   }
 
   close (file);
 
   FREE (output);
 
-  return (0);
+  return (rv);
 }
 
 /* Append NELEMENT entries to FILENAME.  The entries appended are from
@@ -368,7 +463,7 @@
 int
 append_history (nelements, filename)
      int nelements;
-     char *filename;
+     const char *filename;
 {
   return (history_do_write (filename, nelements, HISTORY_APPEND));
 }
@@ -378,7 +473,7 @@
    are as in read_history ().*/
 int
 write_history (filename)
-     char *filename;
+     const char *filename;
 {
   return (history_do_write (filename, history_length, HISTORY_OVERWRITE));
 }
diff --git a/readline/histlib.h b/readline/histlib.h
index 88a34d1..c39af71 100644
--- a/readline/histlib.h
+++ b/readline/histlib.h
@@ -22,14 +22,11 @@
 #if !defined (_HISTLIB_H_)
 #define _HISTLIB_H_
 
-/* Function pointers can be declared as (Function *)foo. */
-#if !defined (_FUNCTION_DEF)
-#  define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
-#endif /* _FUNCTION_DEF */
+#if defined (HAVE_STRING_H)
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif /* !HAVE_STRING_H */
 
 #if !defined (STREQ)
 #define STREQ(a, b)	(((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
@@ -38,9 +35,6 @@
 #endif
 
 #ifndef savestring
-#  ifndef strcpy
-extern char *strcpy ();
-#  endif
 #define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
 #endif
 
diff --git a/readline/history.c b/readline/history.c
index 400f18b..4242f33 100644
--- a/readline/history.c
+++ b/readline/history.c
@@ -44,12 +44,6 @@
 #  include <unistd.h>
 #endif
 
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif /* !HAVE_STRING_H */
-
 #include "history.h"
 #include "histlib.h"
 
@@ -71,9 +65,13 @@
    history that we save. */
 static int history_stifled;
 
+/* The current number of slots allocated to the input_history. */
+static int history_size;
+
 /* If HISTORY_STIFLED is non-zero, then this is the maximum number of
    entries to remember. */
-int max_input_history;
+int history_max_entries;
+int max_input_history;	/* backwards compatibility */
 
 /* The current location of the interactive history pointer.  Just makes
    life easier for outside callers. */
@@ -82,9 +80,6 @@
 /* The number of strings currently stored in the history list. */
 int history_length;
 
-/* The current number of slots allocated to the input_history. */
-static int history_size;
-
 /* The logical `base' of the history array.  It defaults to 1. */
 int history_base = 1;
 
@@ -134,9 +129,7 @@
 {
   register int i, result;
 
-  result = 0;
-
-  for (i = 0; the_history && the_history[i]; i++)
+  for (i = result = 0; the_history && the_history[i]; i++)
     result += strlen (the_history[i]->line);
 
   return (result);
@@ -217,16 +210,16 @@
    is  set to NULL. */
 void
 add_history (string)
-     char *string;
+     const char *string;
 {
   HIST_ENTRY *temp;
 
-  if (history_stifled && (history_length == max_input_history))
+  if (history_stifled && (history_length == history_max_entries))
     {
       register int i;
 
       /* If the history is stifled, and history_length is zero,
-	 and it equals max_input_history, we don't save items. */
+	 and it equals history_max_entries, we don't save items. */
       if (history_length == 0)
 	return;
 
@@ -277,15 +270,15 @@
 HIST_ENTRY *
 replace_history_entry (which, line, data)
      int which;
-     char *line;
+     const char *line;
      histdata_t data;
 {
-  HIST_ENTRY *temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
-  HIST_ENTRY *old_value;
+  HIST_ENTRY *temp, *old_value;
 
   if (which >= history_length)
     return ((HIST_ENTRY *)NULL);
 
+  temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
   old_value = the_history[which];
 
   temp->line = savestring (line);
@@ -303,12 +296,12 @@
      int which;
 {
   HIST_ENTRY *return_value;
+  register int i;
 
   if (which >= history_length || !history_length)
     return_value = (HIST_ENTRY *)NULL;
   else
     {
-      register int i;
       return_value = the_history[which];
 
       for (i = which; i < history_length; i++)
@@ -325,13 +318,13 @@
 stifle_history (max)
      int max;
 {
+  register int i, j;
+
   if (max < 0)
     max = 0;
 
   if (history_length > max)
     {
-      register int i, j;
-
       /* This loses because we cannot free the data. */
       for (i = 0, j = history_length - max; i < j; i++)
 	{
@@ -347,22 +340,22 @@
     }
 
   history_stifled = 1;
-  max_input_history = max;
+  max_input_history = history_max_entries = max;
 }
 
-/* Stop stifling the history.  This returns the previous amount the 
-   history was stifled by.  The value is positive if the history was
-   stifled,  negative if it wasn't. */
+/* Stop stifling the history.  This returns the previous maximum
+   number of history entries.  The value is positive if the history
+   was stifled,  negative if it wasn't. */
 int
 unstifle_history ()
 {
   if (history_stifled)
     {
       history_stifled = 0;
-      return (-max_input_history);
+      return (history_max_entries);
     }
-
-  return (max_input_history);
+  else
+    return (-history_max_entries);
 }
 
 int
diff --git a/readline/history.h b/readline/history.h
index 5210deb..58b5de4 100644
--- a/readline/history.h
+++ b/readline/history.h
@@ -28,16 +28,10 @@
 
 #if defined READLINE_LIBRARY
 #  include "rlstdc.h"
+#  include "rltypedefs.h"
 #else
 #  include <readline/rlstdc.h>
-#endif
-
-#if !defined (_FUNCTION_DEF)
-#  define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
+#  include <readline/rltypedefs.h>
 #endif
 
 #ifdef __STDC__
@@ -68,81 +62,81 @@
 
 /* Begin a session in which the history functions might be used.  This
    just initializes the interactive variables. */
-extern void using_history __P((void));
+extern void using_history PARAMS((void));
 
 /* Return the current HISTORY_STATE of the history. */
-extern HISTORY_STATE *history_get_history_state __P((void));
+extern HISTORY_STATE *history_get_history_state PARAMS((void));
 
 /* Set the state of the current history array to STATE. */
-extern void history_set_history_state __P((HISTORY_STATE *));
+extern void history_set_history_state PARAMS((HISTORY_STATE *));
 
 /* Manage the history list. */
 
 /* Place STRING at the end of the history list.
    The associated data field (if any) is set to NULL. */
-extern void add_history __P((char *));
+extern void add_history PARAMS((const char *));
 
 /* A reasonably useless function, only here for completeness.  WHICH
    is the magic number that tells us which element to delete.  The
    elements are numbered from 0. */
-extern HIST_ENTRY *remove_history __P((int));
+extern HIST_ENTRY *remove_history PARAMS((int));
 
 /* Make the history entry at WHICH have LINE and DATA.  This returns
    the old entry so you can dispose of the data.  In the case of an
    invalid WHICH, a NULL pointer is returned. */
-extern HIST_ENTRY *replace_history_entry __P((int, char *, histdata_t));
+extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t));
 
 /* Clear the history list and start over. */
-extern void clear_history __P((void));
+extern void clear_history PARAMS((void));
 
 /* Stifle the history list, remembering only MAX number of entries. */
-extern void stifle_history __P((int));
+extern void stifle_history PARAMS((int));
 
 /* Stop stifling the history.  This returns the previous amount the
    history was stifled by.  The value is positive if the history was
    stifled, negative if it wasn't. */
-extern int unstifle_history __P((void));
+extern int unstifle_history PARAMS((void));
 
 /* Return 1 if the history is stifled, 0 if it is not. */
-extern int history_is_stifled __P((void));
+extern int history_is_stifled PARAMS((void));
 
 /* Information about the history list. */
 
 /* 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. */
-extern HIST_ENTRY **history_list __P((void));
+extern HIST_ENTRY **history_list PARAMS((void));
 
 /* Returns the number which says what history element we are now
    looking at.  */
-extern int where_history __P((void));
+extern int where_history PARAMS((void));
   
 /* Return the history entry at the current position, as determined by
    history_offset.  If there is no entry there, return a NULL pointer. */
-extern HIST_ENTRY *current_history __P((void));
+extern HIST_ENTRY *current_history PARAMS((void));
 
 /* Return the history entry which is logically at OFFSET in the history
    array.  OFFSET is relative to history_base. */
-extern HIST_ENTRY *history_get __P((int));
+extern HIST_ENTRY *history_get PARAMS((int));
 
 /* Return the number of bytes that the primary history entries are using.
    This just adds up the lengths of the_history->lines. */
-extern int history_total_bytes __P((void));
+extern int history_total_bytes PARAMS((void));
 
 /* Moving around the history list. */
 
 /* Set the position in the history list to POS. */
-extern int history_set_pos __P((int));
+extern int history_set_pos PARAMS((int));
 
 /* Back up history_offset to the previous history entry, and return
    a pointer to that entry.  If there is no previous entry, return
    a NULL pointer. */
-extern HIST_ENTRY *previous_history __P((void));
+extern HIST_ENTRY *previous_history PARAMS((void));
 
 /* Move history_offset forward to the next item in the input_history,
    and return the a pointer to that entry.  If there is no next entry,
    return a NULL pointer. */
-extern HIST_ENTRY *next_history __P((void));
+extern HIST_ENTRY *next_history PARAMS((void));
 
 /* Searching the history list. */
 
@@ -152,45 +146,45 @@
    current_history () is the history entry, and the value of this function
    is the offset in the line of that history entry that the string was
    found in.  Otherwise, nothing is changed, and a -1 is returned. */
-extern int history_search __P((char *, int));
+extern int history_search PARAMS((const char *, int));
 
 /* Search the history for STRING, starting at history_offset.
    The search is anchored: matching lines must begin with string.
    DIRECTION is as in history_search(). */
-extern int history_search_prefix __P((char *, int));
+extern int history_search_prefix PARAMS((const char *, int));
 
 /* Search for STRING in the history list, starting at POS, an
    absolute index into the list.  DIR, if negative, says to search
    backwards from POS, else forwards.
    Returns the absolute index of the history element where STRING
    was found, or -1 otherwise. */
-extern int history_search_pos __P((char *, int, int));
+extern int history_search_pos PARAMS((const char *, int, int));
 
 /* Managing the history file. */
 
 /* 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. */
-extern int read_history __P((char *));
+extern int read_history PARAMS((const char *));
 
 /* Read a range of lines from FILENAME, adding them to the history list.
    Start reading at the FROM'th line and end at the TO'th.  If FROM
    is zero, start at the beginning.  If TO is less than FROM, read
    until the end of the file.  If FILENAME is NULL, then read from
    ~/.history.  Returns 0 if successful, or errno if not. */
-extern int read_history_range __P((char *, int, int));
+extern int read_history_range PARAMS((const char *, int, int));
 
 /* Write the current history to FILENAME.  If FILENAME is NULL,
    then write the history list to ~/.history.  Values returned
    are as in read_history ().  */
-extern int write_history __P((char *));
+extern int write_history PARAMS((const char *));
 
 /* Append NELEMENT entries to FILENAME.  The entries appended are from
    the end of the list minus NELEMENTs up to the end of the list. */
-extern int append_history __P((int, char *));
+extern int append_history PARAMS((int, const char *));
 
 /* Truncate the history file, leaving only the last NLINES lines. */
-extern int history_truncate_file __P((char *, int));
+extern int history_truncate_file PARAMS((const char *, int));
 
 /* History expansion. */
 
@@ -206,12 +200,12 @@
 
   If an error ocurred in expansion, then OUTPUT contains a descriptive
   error message. */
-extern int history_expand __P((char *, char **));
+extern int history_expand PARAMS((char *, char **));
 
 /* Extract a string segment consisting of the FIRST through LAST
    arguments present in STRING.  Arguments are broken up as in
    the shell. */
-extern char *history_arg_extract __P((int, int, char *));
+extern char *history_arg_extract PARAMS((int, int, const char *));
 
 /* Return the text of the history event beginning at the current
    offset into STRING.  Pass STRING with *INDEX equal to the
@@ -219,27 +213,31 @@
    DELIMITING_QUOTE is a character that is allowed to end the string
    specification for what to search for in addition to the normal
    characters `:', ` ', `\t', `\n', and sometimes `?'. */
-extern char *get_history_event __P((char *, int *, int));
+extern char *get_history_event PARAMS((const char *, int *, int));
 
 /* Return an array of tokens, much as the shell might.  The tokens are
    parsed out of STRING. */
-extern char **history_tokenize __P((char *));
+extern char **history_tokenize PARAMS((const char *));
 
 /* Exported history variables. */
 extern int history_base;
 extern int history_length;
-extern int max_input_history;
+extern int history_max_entries;
 extern char history_expansion_char;
 extern char history_subst_char;
+extern char *history_word_delimiters;
 extern char history_comment_char;
 extern char *history_no_expand_chars;
 extern char *history_search_delimiter_chars;
 extern int history_quotes_inhibit_expansion;
 
+/* Backwards compatibility */
+extern int max_input_history;
+
 /* If set, this function is called to decide whether or not a particular
    history expansion should be treated as a special case for the calling
    application and not expanded. */
-extern Function *history_inhibit_expansion_function;
+extern rl_linebuf_func_t *history_inhibit_expansion_function;
 
 #ifdef __cplusplus
 }
diff --git a/readline/histsearch.c b/readline/histsearch.c
index 8d153b6..d94fd6c 100644
--- a/readline/histsearch.c
+++ b/readline/histsearch.c
@@ -32,17 +32,13 @@
 #else
 #  include "ansi_stdlib.h"
 #endif /* HAVE_STDLIB_H */
+
 #if defined (HAVE_UNISTD_H)
 #  ifdef _MINIX
 #    include <sys/types.h>
 #  endif
 #  include <unistd.h>
 #endif
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif /* !HAVE_STRING_H */
 
 #include "history.h"
 #include "histlib.h"
@@ -51,6 +47,8 @@
    string. */
 char *history_search_delimiter_chars = (char *)NULL;
 
+static int history_search_internal PARAMS((const char *, int, int));
+
 /* Search the history for STRING, starting at history_offset.
    If DIRECTION < 0, then the search is through previous entries, else
    through subsequent.  If ANCHORED is non-zero, the string must
@@ -63,7 +61,7 @@
 
 static int
 history_search_internal (string, direction, anchored)
-     char *string;
+     const char *string;
      int direction, anchored;
 {
   register int i, reverse;
@@ -159,7 +157,7 @@
 /* Do a non-anchored search for STRING through the history in DIRECTION. */
 int
 history_search (string, direction)
-     char *string;
+     const char *string;
      int direction;
 {
   return (history_search_internal (string, direction, NON_ANCHORED_SEARCH));
@@ -168,7 +166,7 @@
 /* Do an anchored search for string through the history in DIRECTION. */
 int
 history_search_prefix (string, direction)
-     char *string;
+     const char *string;
      int direction;
 {
   return (history_search_internal (string, direction, ANCHORED_SEARCH));
@@ -179,7 +177,7 @@
    which point to begin searching. */
 int
 history_search_pos (string, dir, pos)
-     char *string;
+     const char *string;
      int dir, pos;
 {
   int ret, old;
diff --git a/readline/input.c b/readline/input.c
index 64a55c6..841f05d 100644
--- a/readline/input.c
+++ b/readline/input.c
@@ -63,6 +63,7 @@
 
 /* System-specific feature definitions and include files. */
 #include "rldefs.h"
+#include "rlmbutil.h"
 
 /* Some standard library routines. */
 #include "readline.h"
@@ -78,9 +79,15 @@
 
 /* Non-null means it is a pointer to a function to run while waiting for
    character input. */
-Function *rl_event_hook = (Function *)NULL;
+rl_hook_func_t *rl_event_hook = (rl_hook_func_t *)NULL;
 
-Function *rl_getc_function = rl_getc;
+rl_getc_func_t *rl_getc_function = rl_getc;
+
+static int _keyboard_input_timeout = 100000;		/* 0.1 seconds; it's in usec */
+
+static int ibuffer_space PARAMS((void));
+static int rl_get_char PARAMS((int *));
+static int rl_gather_tyi PARAMS((void));
 
 /* **************************************************************** */
 /*								    */
@@ -132,8 +139,8 @@
 /* Stuff KEY into the *front* of the input buffer.
    Returns non-zero if successful, zero if there is
    no space left in the buffer. */
-static int
-rl_unget_char (key)
+int
+_rl_unget_char (key)
      int key;
 {
   if (ibuffer_space ())
@@ -147,9 +154,10 @@
   return (0);
 }
 
-/* If a character is available to be read, then read it
-   and stuff it into IBUFFER.  Otherwise, just return. */
-static void
+/* If a character is available to be read, then read it and stuff it into
+   IBUFFER.  Otherwise, just return.  Returns number of characters read
+   (0 if none available) and -1 on error (EIO). */
+static int
 rl_gather_tyi ()
 {
   int tty;
@@ -169,14 +177,18 @@
   FD_SET (tty, &readfds);
   FD_SET (tty, &exceptfds);
   timeout.tv_sec = 0;
-  timeout.tv_usec = 100000;	/* 0.1 seconds */
-  if (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) <= 0)
-    return;	/* Nothing to read. */
+  timeout.tv_usec = _keyboard_input_timeout;
+  result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout);
+  if (result <= 0)
+    return 0;	/* Nothing to read. */
 #endif
 
   result = -1;
 #if defined (FIONREAD)
+  errno = 0;
   result = ioctl (tty, FIONREAD, &chars_avail);
+  if (result == -1 && errno == EIO)
+    return -1;
 #endif
 
 #if defined (O_NDELAY)
@@ -189,14 +201,14 @@
 
       fcntl (tty, F_SETFL, tem);
       if (chars_avail == -1 && errno == EAGAIN)
-	return;
+	return 0;
     }
 #endif /* O_NDELAY */
 
   /* If there's nothing available, don't waste time trying to read
      something. */
   if (chars_avail <= 0)
-    return;
+    return 0;
 
   tem = ibuffer_space ();
 
@@ -220,10 +232,28 @@
       if (chars_avail)
 	rl_stuff_char (input);
     }
+
+  return 1;
+}
+
+int
+rl_set_keyboard_input_timeout (u)
+     int u;
+{
+  int o;
+
+  o = _keyboard_input_timeout;
+  if (u > 0)
+    _keyboard_input_timeout = u;
+  return (o);
 }
 
 /* Is there input available to be read on the readline input file
-   descriptor?  Only works if the system has select(2) or FIONREAD. */
+   descriptor?  Only works if the system has select(2) or FIONREAD.
+   Uses the value of _keyboard_input_timeout as the timeout; if another
+   readline function wants to specify a timeout and not leave it up to
+   the user, it should use _rl_input_queued(timeout_value_in_microseconds)
+   instead. */
 int
 _rl_input_available ()
 {
@@ -231,7 +261,7 @@
   fd_set readfds, exceptfds;
   struct timeval timeout;
 #endif
-#if defined(FIONREAD)
+#if !defined (HAVE_SELECT) && defined(FIONREAD)
   int chars_avail;
 #endif
   int tty;
@@ -244,18 +274,32 @@
   FD_SET (tty, &readfds);
   FD_SET (tty, &exceptfds);
   timeout.tv_sec = 0;
-  timeout.tv_usec = 100000;	/* 0.1 seconds */
+  timeout.tv_usec = _keyboard_input_timeout;
   return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0);
-#endif
+#else
 
 #if defined (FIONREAD)
   if (ioctl (tty, FIONREAD, &chars_avail) == 0)
     return (chars_avail);
 #endif
 
+#endif
+
   return 0;
 }
 
+int
+_rl_input_queued (t)
+     int t;
+{
+  int old_timeout, r;
+
+  old_timeout = rl_set_keyboard_input_timeout (t);
+  r = _rl_input_available ();
+  rl_set_keyboard_input_timeout (old_timeout);
+  return r;
+}
+
 void
 _rl_insert_typein (c)
      int c;     
@@ -264,7 +308,7 @@
   char *string;
 
   i = key = 0;
-  string = xmalloc (ibuffer_len + 1);
+  string = (char *)xmalloc (ibuffer_len + 1);
   string[i++] = (char) c;
 
   while ((t = rl_get_char (&key)) &&
@@ -273,7 +317,7 @@
     string[i++] = key;
 
   if (t)
-    rl_unget_char (key);
+    _rl_unget_char (key);
 
   string[i] = '\0';
   rl_insert_text (string);
@@ -293,6 +337,7 @@
     {
       key = NEWLINE;
       rl_pending_input = EOF;
+      RL_SETSTATE (RL_STATE_INPUTPENDING);
     }
   ibuffer[push_index++] = key;
   if (push_index >= ibuffer_len)
@@ -307,6 +352,16 @@
      int c;
 {
   rl_pending_input = c;
+  RL_SETSTATE (RL_STATE_INPUTPENDING);
+  return 0;
+}
+
+/* Clear any pending input pushed with rl_execute_next() */
+int
+rl_clear_pending_input ()
+{
+  rl_pending_input = 0;
+  RL_UNSETSTATE (RL_STATE_INPUTPENDING);
   return 0;
 }
 
@@ -327,7 +382,7 @@
   if (rl_pending_input)
     {
       c = rl_pending_input;
-      rl_pending_input = 0;
+      rl_clear_pending_input ();
     }
   else
     {
@@ -341,7 +396,13 @@
 	  while (rl_event_hook && rl_get_char (&c) == 0)
 	    {
 	      (*rl_event_hook) ();
-	      rl_gather_tyi ();
+	      if (rl_done)		/* XXX - experimental */
+		return ('\n');
+	      if (rl_gather_tyi () < 0)	/* XXX - EIO */
+		{
+		  rl_done = 1;
+		  return ('\n');
+		}
 	    }
 	}
       else
@@ -392,7 +453,7 @@
 
       if (errno == X_EWOULDBLOCK || errno == X_EAGAIN)
 	{
-	  if (unset_nodelay_mode (fileno (stream)) < 0)
+	  if (sh_unset_nodelay_mode (fileno (stream)) < 0)
 	    return (EOF);
 	  continue;
 	}
@@ -407,3 +468,73 @@
 	return (EOF);
     }
 }
+
+#if defined (HANDLE_MULTIBYTE)
+/* read multibyte char */
+int
+_rl_read_mbchar (mbchar, size)
+     char *mbchar;
+     int size;
+{
+  int mb_len = 0;
+  size_t mbchar_bytes_length;
+  wchar_t wc;
+  mbstate_t ps, ps_back;
+
+  memset(&ps, 0, sizeof (mbstate_t));
+  memset(&ps_back, 0, sizeof (mbstate_t));
+  
+  while (mb_len < size)
+    {
+      RL_SETSTATE(RL_STATE_MOREINPUT);
+      mbchar[mb_len++] = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+      mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
+      if (mbchar_bytes_length == (size_t)(-1))
+	break;		/* invalid byte sequence for the current locale */
+      else if (mbchar_bytes_length == (size_t)(-2))
+	{
+	  /* shorted bytes */
+	  ps = ps_back;
+	  continue;
+	} 
+      else if (mbchar_bytes_length > (size_t)(0))
+	break;
+    }
+
+  return mb_len;
+}
+
+/* Read a multibyte-character string whose first character is FIRST into
+   the buffer MB of length MBLEN.  Returns the last character read, which
+   may be FIRST.  Used by the search functions, among others.  Very similar
+   to _rl_read_mbchar. */
+int
+_rl_read_mbstring (first, mb, mblen)
+     int first;
+     char *mb;
+     int mblen;
+{
+  int i, c;
+  mbstate_t ps;
+
+  c = first;
+  memset (mb, 0, mblen);
+  for (i = 0; i < mblen; i++)
+    {
+      mb[i] = (char)c;
+      memset (&ps, 0, sizeof (mbstate_t));
+      if (_rl_get_char_len (mb, &ps) == -2)
+	{
+	  /* Read more for multibyte character */
+	  RL_SETSTATE (RL_STATE_MOREINPUT);
+	  c = rl_read_key ();
+	  RL_UNSETSTATE (RL_STATE_MOREINPUT);
+	}
+      else
+	break;
+    }
+  return c;
+}
+#endif /* HANDLE_MULTIBYTE */
diff --git a/readline/isearch.c b/readline/isearch.c
index 952c10d..c1ea5b3 100644
--- a/readline/isearch.c
+++ b/readline/isearch.c
@@ -4,7 +4,7 @@
 /*								    */
 /* **************************************************************** */
 
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
 
    This file contains the Readline Library (the Library), a set of
    routines for providing Emacs style line input to programs that ask
@@ -45,6 +45,8 @@
 #endif
 
 #include "rldefs.h"
+#include "rlmbutil.h"
+
 #include "readline.h"
 #include "history.h"
 
@@ -52,18 +54,24 @@
 #include "xmalloc.h"
 
 /* Variables exported to other files in the readline library. */
-unsigned char *_rl_isearch_terminators = (unsigned char *)NULL;
+char *_rl_isearch_terminators = (char *)NULL;
 
 /* Variables imported from other files in the readline library. */
-extern HIST_ENTRY *saved_line_for_history;
+extern HIST_ENTRY *_rl_saved_line_for_history;
 
 /* Forward declarations */
-static int rl_search_history __P((int, int));
+static int rl_search_history PARAMS((int, int));
 
 /* Last line found by the current incremental search, so we don't `find'
    identical lines many times in a row. */
 static char *prev_line_found;
 
+/* Last search string and its length. */
+static char *last_isearch_string;
+static int last_isearch_string_len;
+
+static char *default_isearch_terminators = "\033\012";
+
 /* Search backwards through the history looking for a string which is typed
    interactively.  Start with the current line. */
 int
@@ -97,7 +105,7 @@
 
   searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
 
-  message = xmalloc (searchlen + 33);
+  message = (char *)xmalloc (searchlen + 33);
   msglen = 0;
 
 #if defined (NOTDEF)
@@ -127,7 +135,7 @@
 
   strcpy (message + msglen, "': ");
 
-  rl_message ("%s", message, 0);
+  rl_message ("%s", message);
   free (message);
   (*rl_redisplay_function) ();
 }
@@ -159,8 +167,12 @@
   HIST_ENTRY **hlist;
 
   register int i;
-  int orig_point, orig_line, last_found_line;
+  int orig_point, orig_mark, orig_line, last_found_line;
   int c, found, failed, sline_len;
+  int n, wstart, wlen;
+#if defined (HANDLE_MULTIBYTE)
+  char mb[MB_LEN_MAX];
+#endif
 
   /* The line currently being searched. */
   char *sline;
@@ -174,19 +186,21 @@
   /* The list of characters which terminate the search, but are not
      subsequently executed.  If the variable isearch-terminators has
      been set, we use that value, otherwise we use ESC and C-J. */
-  unsigned char *isearch_terminators;
+  char *isearch_terminators;
 
+  RL_SETSTATE(RL_STATE_ISEARCH);
   orig_point = rl_point;
+  orig_mark = rl_mark;
   last_found_line = orig_line = where_history ();
   reverse = direction < 0;
   hlist = history_list ();
   allocated_line = (char *)NULL;
 
   isearch_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
-						: (unsigned char *)"\033\012";
+						: default_isearch_terminators;
 
   /* Create an arrary of pointers to the lines that we want to search. */
-  maybe_replace_line ();
+  rl_maybe_replace_line ();
   i = 0;
   if (hlist)
     for (i = 0; hlist[i]; i++);
@@ -197,12 +211,12 @@
   for (i = 0; i < hlen; i++)
     lines[i] = hlist[i]->line;
 
-  if (saved_line_for_history)
-    lines[i] = saved_line_for_history->line;
+  if (_rl_saved_line_for_history)
+    lines[i] = _rl_saved_line_for_history->line;
   else
     {
       /* Keep track of this so we can free it. */
-      allocated_line = xmalloc (1 + strlen (rl_line_buffer));
+      allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
       strcpy (allocated_line, &rl_line_buffer[0]);
       lines[i] = allocated_line;
     }
@@ -215,7 +229,7 @@
   rl_save_prompt ();
 
   /* Initialize search parameters. */
-  search_string = xmalloc (search_string_size = 128);
+  search_string = (char *)xmalloc (search_string_size = 128);
   *search_string = '\0';
   search_string_index = 0;
   prev_line_found = (char *)0;		/* XXX */
@@ -232,12 +246,20 @@
   found = failed = 0;
   for (;;)
     {
-      Function *f = (Function *)NULL;
+      rl_command_func_t *f = (rl_command_func_t *)NULL;
 
       /* Read a key and decide how to proceed. */
+      RL_SETSTATE(RL_STATE_MOREINPUT);
       c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
-      if (_rl_keymap[c].type == ISFUNC)
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
+#endif
+
+      /* Translate the keys we do something with to opcodes. */
+      if (c >= 0 && _rl_keymap[c].type == ISFUNC)
 	{
 	  f = _rl_keymap[c].function;
 
@@ -245,34 +267,56 @@
 	    c = reverse ? -1 : -2;
 	  else if (f == rl_forward_search_history)
 	    c =  !reverse ? -1 : -2;
+	  else if (f == rl_rubout)
+	    c = -3;
+	  else if (c == CTRL ('G'))
+	    c = -4;
+	  else if (c == CTRL ('W'))	/* XXX */
+	    c = -5;
+	  else if (c == CTRL ('Y'))	/* XXX */
+	    c = -6;
 	}
 
-#if 0
-      /* Let NEWLINE (^J) terminate the search for people who don't like
-	 using ESC.  ^M can still be used to terminate the search and
-	 immediately execute the command. */
-      if (c == ESC || c == NEWLINE)
-#else
       /* The characters in isearch_terminators (set from the user-settable
 	 variable isearch-terminators) are used to terminate the search but
 	 not subsequently execute the character as a command.  The default
 	 value is "\033\012" (ESC and C-J). */
       if (strchr (isearch_terminators, c))
-#endif
 	{
 	  /* ESC still terminates the search, but if there is pending
 	     input or if input arrives within 0.1 seconds (on systems
 	     with select(2)) it is used as a prefix character
 	     with rl_execute_next.  WATCH OUT FOR THIS!  This is intended
 	     to allow the arrow keys to be used like ^F and ^B are used
-	     to terminate the search and execute the movement command. */
-	  if (c == ESC && _rl_input_available ())	/* XXX */
+	     to terminate the search and execute the movement command.
+	     XXX - since _rl_input_available depends on the application-
+	     settable keyboard timeout value, this could alternatively
+	     use _rl_input_queued(100000) */
+	  if (c == ESC && _rl_input_available ())
 	    rl_execute_next (ESC);
 	  break;
 	}
 
-      if (c >= 0 && (CTRL_CHAR (c) || META_CHAR (c) || c == RUBOUT) && c != CTRL ('G'))
+#define ENDSRCH_CHAR(c) \
+  ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G')))
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
 	{
+	  if (c >= 0 && strlen (mb) == 1 && ENDSRCH_CHAR (c))
+	    {
+	      /* This sets rl_pending_input to c; it will be picked up the next
+		 time rl_read_key is called. */
+	      rl_execute_next (c);
+	      break;
+	    }
+	}
+      else
+#endif
+      if (c >= 0 && ENDSRCH_CHAR (c))
+	{
+	  /* This sets rl_pending_input to c; it will be picked up the next
+	     time rl_read_key is called. */
 	  rl_execute_next (c);
 	  break;
 	}
@@ -281,13 +325,24 @@
 	{
 	case -1:
 	  if (search_string_index == 0)
-	    continue;
+	    {
+	      if (last_isearch_string)
+		{
+		  search_string_size = 64 + last_isearch_string_len;
+		  search_string = (char *)xrealloc (search_string, search_string_size);
+		  strcpy (search_string, last_isearch_string);
+		  search_string_index = last_isearch_string_len;
+		  rl_display_search (search_string, reverse, -1);
+		  break;
+		}
+	      continue;
+	    }
 	  else if (reverse)
 	    --line_index;
 	  else if (line_index != sline_len)
 	    ++line_index;
 	  else
-	    ding ();
+	    rl_ding ();
 	  break;
 
 	  /* switch directions */
@@ -296,40 +351,96 @@
 	  reverse = direction < 0;
 	  break;
 
-	case CTRL ('G'):
-	  strcpy (rl_line_buffer, lines[orig_line]);
+	/* delete character from search string. */
+	case -3:	/* C-H, DEL */
+	  /* This is tricky.  To do this right, we need to keep a
+	     stack of search positions for the current search, with
+	     sentinels marking the beginning and end.  But this will
+	     do until we have a real isearch-undo. */
+	  if (search_string_index == 0)
+	    rl_ding ();
+	  else
+	    search_string[--search_string_index] = '\0';
+
+	  break;
+
+	case -4:	/* C-G */
+	  rl_replace_line (lines[orig_line], 0);
 	  rl_point = orig_point;
-	  rl_end = strlen (rl_line_buffer);
+	  rl_mark = orig_mark;
 	  rl_restore_prompt();
 	  rl_clear_message ();
 	  if (allocated_line)
 	    free (allocated_line);
 	  free (lines);
+	  RL_UNSETSTATE(RL_STATE_ISEARCH);
 	  return 0;
 
-#if 0
-	/* delete character from search string. */
-	case -3:
-	  if (search_string_index == 0)
-	    ding ();
-	  else
+	case -5:	/* C-W */
+	  /* skip over portion of line we already matched */
+	  wstart = rl_point + search_string_index;
+	  if (wstart >= rl_end)
 	    {
-	      search_string[--search_string_index] = '\0';
-	      /* This is tricky.  To do this right, we need to keep a
-		 stack of search positions for the current search, with
-		 sentinels marking the beginning and end. */
+	      rl_ding ();
+	      break;
 	    }
+
+	  /* if not in a word, move to one. */
+	  if (rl_alphabetic(rl_line_buffer[wstart]) == 0)
+	    {
+	      rl_ding ();
+	      break;
+	    }
+	  n = wstart;
+	  while (n < rl_end && rl_alphabetic(rl_line_buffer[n]))
+	    n++;
+	  wlen = n - wstart + 1;
+	  if (search_string_index + wlen + 1 >= search_string_size)
+	    {
+	      search_string_size += wlen + 1;
+	      search_string = (char *)xrealloc (search_string, search_string_size);
+	    }
+	  for (; wstart < n; wstart++)
+	    search_string[search_string_index++] = rl_line_buffer[wstart];
+	  search_string[search_string_index] = '\0';
 	  break;
-#endif
+
+	case -6:	/* C-Y */
+	  /* skip over portion of line we already matched */
+	  wstart = rl_point + search_string_index;
+	  if (wstart >= rl_end)
+	    {
+	      rl_ding ();
+	      break;
+	    }
+	  n = rl_end - wstart + 1;
+	  if (search_string_index + n + 1 >= search_string_size)
+	    {
+	      search_string_size += n + 1;
+	      search_string = (char *)xrealloc (search_string, search_string_size);
+	    }
+	  for (n = wstart; n < rl_end; n++)
+	    search_string[search_string_index++] = rl_line_buffer[n];
+	  search_string[search_string_index] = '\0';
+	  break;
 
 	default:
 	  /* Add character to search string and continue search. */
 	  if (search_string_index + 2 >= search_string_size)
 	    {
 	      search_string_size += 128;
-	      search_string = xrealloc (search_string, search_string_size);
+	      search_string = (char *)xrealloc (search_string, search_string_size);
 	    }
-	  search_string[search_string_index++] = c;
+#if defined (HANDLE_MULTIBYTE)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    {
+	      int j, l;
+	      for (j = 0, l = strlen (mb); j < l; )
+		search_string[search_string_index++] = mb[j++];
+	    }
+	  else
+#endif
+	    search_string[search_string_index++] = c;
 	  search_string[search_string_index] = '\0';
 	  break;
 	}
@@ -384,7 +495,7 @@
       if (failed)
 	{
 	  /* We cannot find the search string.  Ding the bell. */
-	  ding ();
+	  rl_ding ();
 	  i = last_found_line;
 	  continue; 		/* XXX - was break */
 	}
@@ -394,17 +505,9 @@
 	 the location. */
       if (found)
 	{
-	  int line_len;
-
 	  prev_line_found = lines[i];
-	  line_len = strlen (lines[i]);
-
-	  if (line_len >= rl_line_buffer_len)
-	    rl_extend_line_buffer (line_len);
-
-	  strcpy (rl_line_buffer, lines[i]);
+	  rl_replace_line (lines[i], 0);
 	  rl_point = line_index;
-	  rl_end = line_len;
 	  last_found_line = i;
 	  rl_display_search (search_string, reverse, (i == orig_line) ? -1 : i);
 	}
@@ -420,23 +523,38 @@
 
   rl_restore_prompt ();
 
-  /* Free the search string. */
-  free (search_string);
+  /* Save the search string for possible later use. */
+  FREE (last_isearch_string);
+  last_isearch_string = search_string;
+  last_isearch_string_len = search_string_index;
 
   if (last_found_line < orig_line)
     rl_get_previous_history (orig_line - last_found_line, 0);
   else
     rl_get_next_history (last_found_line - orig_line, 0);
 
-  /* If the string was not found, put point at the end of the line. */
+  /* If the string was not found, put point at the end of the last matching
+     line.  If last_found_line == orig_line, we didn't find any matching
+     history lines at all, so put point back in its original position. */
   if (line_index < 0)
-    line_index = strlen (rl_line_buffer);
+    {
+      if (last_found_line == orig_line)
+	line_index = orig_point;
+      else
+	line_index = strlen (rl_line_buffer);
+      rl_mark = orig_mark;
+    }
+
   rl_point = line_index;
+  /* Don't worry about where to put the mark here; rl_get_previous_history
+     and rl_get_next_history take care of it. */
+
   rl_clear_message ();
 
-  if (allocated_line)
-    free (allocated_line);
+  FREE (allocated_line);
   free (lines);
 
+  RL_UNSETSTATE(RL_STATE_ISEARCH);
+
   return 0;
 }
diff --git a/readline/keymaps.c b/readline/keymaps.c
index 8fb7de3..12506d3 100644
--- a/readline/keymaps.c
+++ b/readline/keymaps.c
@@ -61,7 +61,7 @@
   for (i = 0; i < KEYMAP_SIZE; i++)
     {
       keymap[i].type = ISFUNC;
-      keymap[i].function = (Function *)NULL;
+      keymap[i].function = (rl_command_func_t *)NULL;
     }
 
   for (i = 'A'; i < ('Z' + 1); i++)
diff --git a/readline/keymaps.h b/readline/keymaps.h
index 3a504fb..66fa2a5 100644
--- a/readline/keymaps.h
+++ b/readline/keymaps.h
@@ -30,17 +30,11 @@
 #if defined (READLINE_LIBRARY)
 #  include "rlstdc.h"
 #  include "chardefs.h"
+#  include "rltypedefs.h"
 #else
 #  include <readline/rlstdc.h>
 #  include <readline/chardefs.h>
-#endif
-
-#if !defined (_FUNCTION_DEF)
-#  define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
+#  include <readline/rltypedefs.h>
 #endif
 
 /* A keymap contains one entry for each key in the ASCII set.
@@ -50,16 +44,17 @@
    TYPE says which kind of thing FUNCTION is. */
 typedef struct _keymap_entry {
   char type;
-  Function *function;
+  rl_command_func_t *function;
 } KEYMAP_ENTRY;
 
 /* This must be large enough to hold bindings for all of the characters
    in a desired character set (e.g, 128 for ASCII, 256 for ISO Latin-x,
-   and so on). */
-#define KEYMAP_SIZE 256
+   and so on) plus one for subsequence matching. */
+#define KEYMAP_SIZE 257
+#define ANYOTHERKEY KEYMAP_SIZE-1
 
 /* I wanted to make the above structure contain a union of:
-   union { Function *function; struct _keymap_entry *keymap; } value;
+   union { rl_command_func_t *function; struct _keymap_entry *keymap; } value;
    but this made it impossible for me to create a static array.
    Maybe I need C lessons. */
 
@@ -76,30 +71,30 @@
 
 /* Return a new, empty keymap.
    Free it with free() when you are done. */
-extern Keymap rl_make_bare_keymap __P((void));
+extern Keymap rl_make_bare_keymap PARAMS((void));
 
 /* Return a new keymap which is a copy of MAP. */
-extern Keymap rl_copy_keymap __P((Keymap));
+extern Keymap rl_copy_keymap PARAMS((Keymap));
 
 /* Return a new keymap with the printing characters bound to rl_insert,
    the lowercase Meta characters bound to run their equivalents, and
    the Meta digits bound to produce numeric arguments. */
-extern Keymap rl_make_keymap __P((void));
+extern Keymap rl_make_keymap PARAMS((void));
 
 /* Free the storage associated with a keymap. */
-extern void rl_discard_keymap __P((Keymap));
+extern void rl_discard_keymap PARAMS((Keymap));
 
 /* These functions actually appear in bind.c */
 
 /* Return the keymap corresponding to a given name.  Names look like
    `emacs' or `emacs-meta' or `vi-insert'.  */
-extern Keymap rl_get_keymap_by_name __P((char *));
+extern Keymap rl_get_keymap_by_name PARAMS((const char *));
 
 /* Return the current keymap. */
-extern Keymap rl_get_keymap __P((void));
+extern Keymap rl_get_keymap PARAMS((void));
 
 /* Set the current keymap to MAP. */
-extern void rl_set_keymap __P((Keymap));
+extern void rl_set_keymap PARAMS((Keymap));
 
 #ifdef __cplusplus
 }
diff --git a/readline/kill.c b/readline/kill.c
index c3241bd..a616b92 100644
--- a/readline/kill.c
+++ b/readline/kill.c
@@ -70,6 +70,11 @@
 /* How many slots we have in the kill ring. */
 static int rl_kill_ring_length;
 
+static int _rl_copy_to_kill_ring PARAMS((char *, int));
+static int region_kill_internal PARAMS((int));
+static int _rl_copy_word_as_kill PARAMS((int, int));
+static int rl_yank_nth_arg_internal PARAMS((int, int, int));
+
 /* How to say that you only want to save a certain amount
    of kill material. */
 int
@@ -129,7 +134,7 @@
   if (_rl_last_command_was_kill && rl_editing_mode != vi_mode)
     {
       old = rl_kill_ring[slot];
-      new = xmalloc (1 + strlen (old) + strlen (text));
+      new = (char *)xmalloc (1 + strlen (old) + strlen (text));
 
       if (append)
 	{
@@ -196,18 +201,21 @@
 rl_kill_word (count, key)
      int count, key;
 {
-  int orig_point = rl_point;
+  int orig_point;
 
   if (count < 0)
     return (rl_backward_kill_word (-count, key));
   else
     {
+      orig_point = rl_point;
       rl_forward_word (count, key);
 
       if (rl_point != orig_point)
 	rl_kill_text (orig_point, rl_point);
 
       rl_point = orig_point;
+      if (rl_editing_mode == emacs_mode)
+	rl_mark = rl_point;
     }
   return 0;
 }
@@ -217,16 +225,20 @@
 rl_backward_kill_word (count, ignore)
      int count, ignore;
 {
-  int orig_point = rl_point;
+  int orig_point;
 
   if (count < 0)
     return (rl_kill_word (-count, ignore));
   else
     {
+      orig_point = rl_point;
       rl_backward_word (count, ignore);
 
       if (rl_point != orig_point)
 	rl_kill_text (orig_point, rl_point);
+
+      if (rl_editing_mode == emacs_mode)
+	rl_mark = rl_point;
     }
   return 0;
 }
@@ -237,16 +249,19 @@
 rl_kill_line (direction, ignore)
      int direction, ignore;
 {
-  int orig_point = rl_point;
+  int orig_point;
 
   if (direction < 0)
     return (rl_backward_kill_line (1, ignore));
   else
     {
+      orig_point = rl_point;
       rl_end_of_line (1, ignore);
       if (orig_point != rl_point)
 	rl_kill_text (orig_point, rl_point);
       rl_point = orig_point;
+      if (rl_editing_mode == emacs_mode)
+	rl_mark = rl_point;
     }
   return 0;
 }
@@ -257,18 +272,22 @@
 rl_backward_kill_line (direction, ignore)
      int direction, ignore;
 {
-  int orig_point = rl_point;
+  int orig_point;
 
   if (direction < 0)
     return (rl_kill_line (1, ignore));
   else
     {
       if (!rl_point)
-	ding ();
+	rl_ding ();
       else
 	{
+	  orig_point = rl_point;
 	  rl_beg_of_line (1, ignore);
-	  rl_kill_text (orig_point, rl_point);
+	  if (rl_point != orig_point)
+	    rl_kill_text (orig_point, rl_point);
+	  if (rl_editing_mode == emacs_mode)
+	    rl_mark = rl_point;
 	}
     }
   return 0;
@@ -282,6 +301,7 @@
   rl_begin_undo_group ();
   rl_point = 0;
   rl_kill_text (rl_point, rl_end);
+  rl_mark = 0;
   rl_end_undo_group ();
   return 0;
 }
@@ -299,7 +319,7 @@
   int orig_point;
 
   if (rl_point == 0)
-    ding ();
+    rl_ding ();
   else
     {
       orig_point = rl_point;
@@ -316,6 +336,8 @@
 	}
 
       rl_kill_text (orig_point, rl_point);
+      if (rl_editing_mode == emacs_mode)
+	rl_mark = rl_point;
     }
   return 0;
 }
@@ -331,11 +353,13 @@
      int count, key;
 {
   if (rl_point == 0)
-    ding ();
+    rl_ding ();
   else
     {
       rl_kill_text (rl_point, 0);
       rl_point = 0;
+      if (rl_editing_mode == emacs_mode)
+	rl_mark = rl_point;
     }
   return 0;
 }
@@ -348,17 +372,14 @@
 {
   char *text;
 
-  if (rl_mark == rl_point)
+  if (rl_mark != rl_point)
     {
-      _rl_last_command_was_kill++;
-      return 0;
+      text = rl_copy_text (rl_point, rl_mark);
+      if (delete)
+	rl_delete_text (rl_point, rl_mark);
+      _rl_copy_to_kill_ring (text, rl_point < rl_mark);
     }
 
-  text = rl_copy_text (rl_point, rl_mark);
-  if (delete)
-    rl_delete_text (rl_point, rl_mark);
-  _rl_copy_to_kill_ring (text, rl_point < rl_mark);
-
   _rl_last_command_was_kill++;
   return 0;
 }
@@ -512,19 +533,21 @@
 
   if (entry == 0)
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
   arg = history_arg_extract (count, count, entry->line);
   if (!arg || !*arg)
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
   rl_begin_undo_group ();
 
+  _rl_set_mark_at_pos (rl_point);
+
 #if defined (VI_MODE)
   /* Vi mode always inserts a space before yanking the argument, and it
      inserts it right *after* rl_point. */
@@ -592,7 +615,7 @@
 }
 
 /* A special paste command for users of Cygnus's cygwin32. */
-#if defined (__CYGWIN32__)
+#if defined (__CYGWIN__)
 #include <windows.h>
 
 int
@@ -612,12 +635,13 @@
       if (ptr)
 	{
 	  len = ptr - data;
-	  ptr = xmalloc (len + 1);
+	  ptr = (char *)xmalloc (len + 1);
 	  ptr[len] = '\0';
 	  strncpy (ptr, data, len);
 	}
       else
         ptr = data;
+      _rl_set_mark_at_pos (rl_point);
       rl_insert_text (ptr);
       if (ptr != data)
 	free (ptr);
@@ -625,4 +649,4 @@
     }
   return (0);
 }
-#endif /* __CYGWIN32__ */
+#endif /* __CYGWIN__ */
diff --git a/readline/macro.c b/readline/macro.c
index 5a44852..b73c3af 100644
--- a/readline/macro.c
+++ b/readline/macro.c
@@ -49,20 +49,15 @@
 #include "rlprivate.h"
 #include "xmalloc.h"
 
-#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
-
 /* **************************************************************** */
 /*								    */
 /*			Hacking Keyboard Macros 		    */
 /*								    */
 /* **************************************************************** */
 
-/* Non-zero means to save keys that we dispatch on in a kbd macro. */
-int _rl_defining_kbd_macro = 0;
-
 /* The currently executing macro string.  If this is non-zero,
    then it is a malloc ()'ed string where input is coming from. */
-char *_rl_executing_macro = (char *)NULL;
+char *rl_executing_macro = (char *)NULL;
 
 /* The offset in the above string to the next character to be read. */
 static int executing_macro_index;
@@ -95,8 +90,9 @@
      char *string;
 {
   _rl_push_executing_macro ();
-  _rl_executing_macro = string;
+  rl_executing_macro = string;
   executing_macro_index = 0;
+  RL_SETSTATE(RL_STATE_MACROINPUT);
 }
 
 /* Return the next character available from a macro, or 0 if
@@ -104,16 +100,16 @@
 int
 _rl_next_macro_key ()
 {
-  if (_rl_executing_macro == 0)
+  if (rl_executing_macro == 0)
     return (0);
 
-  if (_rl_executing_macro[executing_macro_index] == 0)
+  if (rl_executing_macro[executing_macro_index] == 0)
     {
       _rl_pop_executing_macro ();
       return (_rl_next_macro_key ());
     }
 
-  return (_rl_executing_macro[executing_macro_index++]);
+  return (rl_executing_macro[executing_macro_index++]);
 }
 
 /* Save the currently executing macro on a stack of saved macros. */
@@ -125,7 +121,7 @@
   saver = (struct saved_macro *)xmalloc (sizeof (struct saved_macro));
   saver->next = macro_list;
   saver->sindex = executing_macro_index;
-  saver->string = _rl_executing_macro;
+  saver->string = rl_executing_macro;
 
   macro_list = saver;
 }
@@ -137,20 +133,21 @@
 {
   struct saved_macro *macro;
 
-  if (_rl_executing_macro)
-    free (_rl_executing_macro);
-
-  _rl_executing_macro = (char *)NULL;
+  FREE (rl_executing_macro);
+  rl_executing_macro = (char *)NULL;
   executing_macro_index = 0;
 
   if (macro_list)
     {
       macro = macro_list;
-      _rl_executing_macro = macro_list->string;
+      rl_executing_macro = macro_list->string;
       executing_macro_index = macro_list->sindex;
       macro_list = macro_list->next;
       free (macro);
     }
+
+  if (rl_executing_macro == 0)
+    RL_UNSETSTATE(RL_STATE_MACROINPUT);
 }
 
 /* Add a character to the macro being built. */
@@ -161,9 +158,9 @@
   if (current_macro_index + 1 >= current_macro_size)
     {
       if (current_macro == 0)
-	current_macro = xmalloc (current_macro_size = 25);
+	current_macro = (char *)xmalloc (current_macro_size = 25);
       else
-	current_macro = xrealloc (current_macro, current_macro_size += 25);
+	current_macro = (char *)xrealloc (current_macro, current_macro_size += 25);
     }
 
   current_macro[current_macro_index++] = c;
@@ -180,14 +177,11 @@
     }
   current_macro_size = current_macro_index = 0;
 
-  if (_rl_executing_macro)
-    {
-      free (_rl_executing_macro);
-      _rl_executing_macro = (char *) NULL;
-    }
+  FREE (rl_executing_macro);
+  rl_executing_macro = (char *) NULL;
   executing_macro_index = 0;
 
-  _rl_defining_kbd_macro = 0;
+  RL_UNSETSTATE(RL_STATE_MACRODEF);
 }
 
 /* Begin defining a keyboard macro.
@@ -200,7 +194,7 @@
 rl_start_kbd_macro (ignore1, ignore2)
      int ignore1, ignore2;
 {
-  if (_rl_defining_kbd_macro)
+  if (RL_ISSTATE (RL_STATE_MACRODEF))
     {
       _rl_abort_internal ();
       return -1;
@@ -214,7 +208,7 @@
   else
     current_macro_index = 0;
 
-  _rl_defining_kbd_macro = 1;
+  RL_SETSTATE(RL_STATE_MACRODEF);
   return 0;
 }
 
@@ -225,7 +219,7 @@
 rl_end_kbd_macro (count, ignore)
      int count, ignore;
 {
-  if (_rl_defining_kbd_macro == 0)
+  if (RL_ISSTATE (RL_STATE_MACRODEF) == 0)
     {
       _rl_abort_internal ();
       return -1;
@@ -234,7 +228,7 @@
   current_macro_index -= rl_key_sequence_length - 1;
   current_macro[current_macro_index] = '\0';
 
-  _rl_defining_kbd_macro = 0;
+  RL_UNSETSTATE(RL_STATE_MACRODEF);
 
   return (rl_call_last_kbd_macro (--count, 0));
 }
@@ -248,9 +242,9 @@
   if (current_macro == 0)
     _rl_abort_internal ();
 
-  if (_rl_defining_kbd_macro)
+  if (RL_ISSTATE (RL_STATE_MACRODEF))
     {
-      ding ();		/* no recursive macros */
+      rl_ding ();		/* no recursive macros */
       current_macro[--current_macro_index] = '\0';	/* erase this char */
       return 0;
     }
diff --git a/readline/mbutil.c b/readline/mbutil.c
new file mode 100644
index 0000000..50302f0
--- /dev/null
+++ b/readline/mbutil.c
@@ -0,0 +1,337 @@
+/* mbutil.c -- readline multibyte character utility functions */
+
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include "posixjmp.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>	   /* for _POSIX_VERSION */
+#endif /* HAVE_UNISTD_H */
+
+#if defined (HAVE_STDLIB_H)
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#include <stdio.h>
+#include <ctype.h>
+
+/* System-specific feature definitions and include files. */
+#include "rldefs.h"
+#include "rlmbutil.h"
+
+#if defined (TIOCSTAT_IN_SYS_IOCTL)
+#  include <sys/ioctl.h>
+#endif /* TIOCSTAT_IN_SYS_IOCTL */
+
+/* Some standard library routines. */
+#include "readline.h"
+
+#include "rlprivate.h"
+#include "xmalloc.h"
+
+/* Declared here so it can be shared between the readline and history
+   libraries. */
+#if defined (HANDLE_MULTIBYTE)
+int rl_byte_oriented = 0;
+#else
+int rl_byte_oriented = 1;
+#endif
+
+/* **************************************************************** */
+/*								    */
+/*		Multibyte Character Utility Functions		    */
+/*								    */
+/* **************************************************************** */
+
+#if defined(HANDLE_MULTIBYTE)
+
+static int
+_rl_find_next_mbchar_internal (string, seed, count, find_non_zero)
+     char *string;
+     int seed, count, find_non_zero;
+{
+  size_t tmp = 0;
+  mbstate_t ps;
+  int point = 0;
+  wchar_t wc;
+
+  memset(&ps, 0, sizeof (mbstate_t));
+  if (seed < 0)
+    seed = 0;
+  if (count <= 0)
+    return seed;
+
+  point = seed + _rl_adjust_point(string, seed, &ps);
+  /* if this is true, means that seed was not pointed character
+     started byte.  So correct the point and consume count */
+  if (seed < point)
+    count --;
+
+  while (count > 0)  
+    {
+      tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps);
+      if ((size_t)(tmp) == (size_t)-1 || (size_t)(tmp) == (size_t)-2)
+	{
+	  /* invalid bytes. asume a byte represents a character */
+	  point++;
+	  count--;
+	  /* reset states. */
+	  memset(&ps, 0, sizeof(mbstate_t));
+	}
+      else if (tmp == (size_t)0)
+	/* found '\0' char */
+	break;
+      else
+	{
+	  /* valid bytes */
+	  point += tmp;
+	  if (find_non_zero)
+	    {
+	      if (wcwidth (wc) == 0)
+		continue;
+	      else
+		count--;
+	    }
+	  else
+	    count--;
+	}
+    }
+
+  if (find_non_zero)
+    {
+      tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
+      while (wcwidth (wc) == 0)
+	{
+	  point += tmp;
+	  tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
+	  if (tmp == (size_t)(0) || tmp == (size_t)(-1) || tmp == (size_t)(-2))
+	    break;
+	}
+    }
+    return point;
+}
+
+static int
+_rl_find_prev_mbchar_internal (string, seed, find_non_zero)
+     char *string;
+     int seed, find_non_zero;
+{
+  mbstate_t ps;
+  int prev, non_zero_prev, point, length;
+  size_t tmp;
+  wchar_t wc;
+
+  memset(&ps, 0, sizeof(mbstate_t));
+  length = strlen(string);
+  
+  if (seed < 0)
+    return 0;
+  else if (length < seed)
+    return length;
+
+  prev = non_zero_prev = point = 0;
+  while (point < seed)
+    {
+      tmp = mbrtowc (&wc, string + point, length - point, &ps);
+      if ((size_t)(tmp) == (size_t)-1 || (size_t)(tmp) == (size_t)-2)
+	{
+	  /* in this case, bytes are invalid or shorted to compose
+	     multibyte char, so assume that the first byte represents
+	     a single character anyway. */
+	  tmp = 1;
+	  /* clear the state of the byte sequence, because
+	     in this case effect of mbstate is undefined  */
+	  memset(&ps, 0, sizeof (mbstate_t));
+	}
+      else if (tmp == 0)
+	break;			/* Found '\0' char.  Can this happen? */
+      else
+	{
+	  if (find_non_zero)
+	    {
+	      if (wcwidth (wc) != 0)
+		prev = point;
+	    }
+	  else
+	    prev = point;  
+	}
+
+      point += tmp;
+    }
+
+  return prev;
+}
+
+/* return the number of bytes parsed from the multibyte sequence starting
+   at src, if a non-L'\0' wide character was recognized. It returns 0, 
+   if a L'\0' wide character was recognized. It  returns (size_t)(-1), 
+   if an invalid multibyte sequence was encountered. It returns (size_t)(-2) 
+   if it couldn't parse a complete  multibyte character.  */
+int
+_rl_get_char_len (src, ps)
+     char *src;
+     mbstate_t *ps;
+{
+  size_t tmp;
+
+  tmp = mbrlen((const char *)src, (size_t)strlen (src), ps);
+  if (tmp == (size_t)(-2))
+    {
+      /* shorted to compose multibyte char */
+      memset (ps, 0, sizeof(mbstate_t));
+      return -2;
+    }
+  else if (tmp == (size_t)(-1))
+    {
+      /* invalid to compose multibyte char */
+      /* initialize the conversion state */
+      memset (ps, 0, sizeof(mbstate_t));
+      return -1;
+    }
+  else if (tmp == (size_t)0)
+    return 0;
+  else
+    return (int)tmp;
+}
+
+/* compare the specified two characters. If the characters matched,
+   return 1. Otherwise return 0. */
+int
+_rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2)
+     char *buf1, *buf2;
+     mbstate_t *ps1, *ps2;
+     int pos1, pos2;
+{
+  int i, w1, w2;
+
+  if ((w1 = _rl_get_char_len (&buf1[pos1], ps1)) <= 0 || 
+	(w2 = _rl_get_char_len (&buf2[pos2], ps2)) <= 0 ||
+	(w1 != w2) ||
+	(buf1[pos1] != buf2[pos2]))
+    return 0;
+
+  for (i = 1; i < w1; i++)
+    if (buf1[pos1+i] != buf2[pos2+i])
+      return 0;
+
+  return 1;
+}
+
+/* adjust pointed byte and find mbstate of the point of string.
+   adjusted point will be point <= adjusted_point, and returns
+   differences of the byte(adjusted_point - point).
+   if point is invalied (point < 0 || more than string length),
+   it returns -1 */
+int
+_rl_adjust_point(string, point, ps)
+     char *string;
+     int point;
+     mbstate_t *ps;
+{
+  size_t tmp = 0;
+  int length;
+  int pos = 0;
+
+  length = strlen(string);
+  if (point < 0)
+    return -1;
+  if (length < point)
+    return -1;
+  
+  while (pos < point)
+    {
+      tmp = mbrlen (string + pos, length - pos, ps);
+      if((size_t)(tmp) == (size_t)-1 || (size_t)(tmp) == (size_t)-2)
+	{
+	  /* in this case, bytes are invalid or shorted to compose
+	     multibyte char, so assume that the first byte represents
+	     a single character anyway. */
+	  pos++;
+	  /* clear the state of the byte sequence, because
+	     in this case effect of mbstate is undefined  */
+	  memset (ps, 0, sizeof (mbstate_t));
+	}
+      else
+	pos += tmp;
+    }
+
+  return (pos - point);
+}
+
+int
+_rl_is_mbchar_matched (string, seed, end, mbchar, length)
+     char *string;
+     int seed, end;
+     char *mbchar;
+     int length;
+{
+  int i;
+
+  if ((end - seed) < length)
+    return 0;
+
+  for (i = 0; i < length; i++)
+    if (string[seed + i] != mbchar[i])
+      return 0;
+  return 1;
+}
+#endif /* HANDLE_MULTIBYTE */
+
+/* Find next `count' characters started byte point of the specified seed.
+   If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte
+   characters. */
+#undef _rl_find_next_mbchar
+int
+_rl_find_next_mbchar (string, seed, count, flags)
+     char *string;
+     int seed, count, flags;
+{
+#if defined (HANDLE_MULTIBYTE)
+  return _rl_find_next_mbchar_internal (string, seed, count, flags);
+#else
+  return (seed + count);
+#endif
+}
+
+/* Find previous character started byte point of the specified seed.
+   Returned point will be point <= seed.  If flags is MB_FIND_NONZERO,
+   we look for non-zero-width multibyte characters. */
+#undef _rl_find_prev_mbchar
+int
+_rl_find_prev_mbchar (string, seed, flags)
+     char *string;
+     int seed, flags;
+{
+#if defined (HANDLE_MULTIBYTE)
+  return _rl_find_prev_mbchar_internal (string, seed, flags);
+#else
+  return ((seed == 0) ? seed : seed - 1);
+#endif
+}
diff --git a/readline/misc.c b/readline/misc.c
new file mode 100644
index 0000000..f3775d3
--- /dev/null
+++ b/readline/misc.c
@@ -0,0 +1,496 @@
+/* misc.c -- miscellaneous bindable readline functions. */
+
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#if defined (HAVE_STDLIB_H)
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#if defined (HAVE_LOCALE_H)
+#  include <locale.h>
+#endif
+
+#include <stdio.h>
+
+/* System-specific feature definitions and include files. */
+#include "rldefs.h"
+#include "rlmbutil.h"
+
+/* Some standard library routines. */
+#include "readline.h"
+#include "history.h"
+
+#include "rlprivate.h"
+#include "rlshell.h"
+#include "xmalloc.h"
+
+static int rl_digit_loop PARAMS((void));
+static void _rl_history_set_point PARAMS((void));
+
+/* Forward declarations used in this file */
+void _rl_free_history_entry PARAMS((HIST_ENTRY *));
+
+/* If non-zero, rl_get_previous_history and rl_get_next_history attempt
+   to preserve the value of rl_point from line to line. */
+int _rl_history_preserve_point = 0;
+
+/* Saved target point for when _rl_history_preserve_point is set.  Special
+   value of -1 means that point is at the end of the line. */
+int _rl_history_saved_point = -1;
+
+/* **************************************************************** */
+/*								    */
+/*			Numeric Arguments			    */
+/*								    */
+/* **************************************************************** */
+
+/* Handle C-u style numeric args, as well as M--, and M-digits. */
+static int
+rl_digit_loop ()
+{
+  int key, c, sawminus, sawdigits;
+
+  rl_save_prompt ();
+
+  RL_SETSTATE(RL_STATE_NUMERICARG);
+  sawminus = sawdigits = 0;
+  while (1)
+    {
+      if (rl_numeric_arg > 1000000)
+	{
+	  sawdigits = rl_explicit_arg = rl_numeric_arg = 0;
+	  rl_ding ();
+	  rl_restore_prompt ();
+	  rl_clear_message ();
+	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
+	  return 1;
+	}
+      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+      RL_SETSTATE(RL_STATE_MOREINPUT);
+      key = c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+      if (c < 0)
+	{
+	  _rl_abort_internal ();
+	  return -1;
+	}
+
+      /* If we see a key bound to `universal-argument' after seeing digits,
+	 it ends the argument but is otherwise ignored. */
+      if (_rl_keymap[c].type == ISFUNC &&
+	  _rl_keymap[c].function == rl_universal_argument)
+	{
+	  if (sawdigits == 0)
+	    {
+	      rl_numeric_arg *= 4;
+	      continue;
+	    }
+	  else
+	    {
+	      RL_SETSTATE(RL_STATE_MOREINPUT);
+	      key = rl_read_key ();
+	      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+	      rl_restore_prompt ();
+	      rl_clear_message ();
+	      RL_UNSETSTATE(RL_STATE_NUMERICARG);
+	      return (_rl_dispatch (key, _rl_keymap));
+	    }
+	}
+
+      c = UNMETA (c);
+
+      if (_rl_digit_p (c))
+	{
+	  rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + c - '0' : c - '0';
+	  sawdigits = rl_explicit_arg = 1;
+	}
+      else if (c == '-' && rl_explicit_arg == 0)
+	{
+	  rl_numeric_arg = sawminus = 1;
+	  rl_arg_sign = -1;
+	}
+      else
+	{
+	  /* Make M-- command equivalent to M--1 command. */
+	  if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0)
+	    rl_explicit_arg = 1;
+	  rl_restore_prompt ();
+	  rl_clear_message ();
+	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
+	  return (_rl_dispatch (key, _rl_keymap));
+	}
+    }
+
+  /*NOTREACHED*/
+}
+
+/* Add the current digit to the argument in progress. */
+int
+rl_digit_argument (ignore, key)
+     int ignore, key;
+{
+  rl_execute_next (key);
+  return (rl_digit_loop ());
+}
+
+/* What to do when you abort reading an argument. */
+int
+rl_discard_argument ()
+{
+  rl_ding ();
+  rl_clear_message ();
+  _rl_init_argument ();
+  return 0;
+}
+
+/* Create a default argument. */
+int
+_rl_init_argument ()
+{
+  rl_numeric_arg = rl_arg_sign = 1;
+  rl_explicit_arg = 0;
+  return 0;
+}
+
+/* C-u, universal argument.  Multiply the current argument by 4.
+   Read a key.  If the key has nothing to do with arguments, then
+   dispatch on it.  If the key is the abort character then abort. */
+int
+rl_universal_argument (count, key)
+     int count, key;
+{
+  rl_numeric_arg *= 4;
+  return (rl_digit_loop ());
+}
+
+/* **************************************************************** */
+/*								    */
+/*			History Utilities			    */
+/*								    */
+/* **************************************************************** */
+
+/* We already have a history library, and that is what we use to control
+   the history features of readline.  This is our local interface to
+   the history mechanism. */
+
+/* While we are editing the history, this is the saved
+   version of the original line. */
+HIST_ENTRY *_rl_saved_line_for_history = (HIST_ENTRY *)NULL;
+
+/* Set the history pointer back to the last entry in the history. */
+void
+_rl_start_using_history ()
+{
+  using_history ();
+  if (_rl_saved_line_for_history)
+    _rl_free_history_entry (_rl_saved_line_for_history);
+
+  _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
+}
+
+/* Free the contents (and containing structure) of a HIST_ENTRY. */
+void
+_rl_free_history_entry (entry)
+     HIST_ENTRY *entry;
+{
+  if (entry == 0)
+    return;
+  if (entry->line)
+    free (entry->line);
+  free (entry);
+}
+
+/* Perhaps put back the current line if it has changed. */
+int
+rl_maybe_replace_line ()
+{
+  HIST_ENTRY *temp;
+
+  temp = current_history ();
+  /* If the current line has changed, save the changes. */
+  if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list))
+    {
+      temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list);
+      free (temp->line);
+      free (temp);
+    }
+  return 0;
+}
+
+/* Restore the _rl_saved_line_for_history if there is one. */
+int
+rl_maybe_unsave_line ()
+{
+  if (_rl_saved_line_for_history)
+    {
+      rl_replace_line (_rl_saved_line_for_history->line, 0);
+      rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data;
+      _rl_free_history_entry (_rl_saved_line_for_history);
+      _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
+      rl_point = rl_end;	/* rl_replace_line sets rl_end */
+    }
+  else
+    rl_ding ();
+  return 0;
+}
+
+/* Save the current line in _rl_saved_line_for_history. */
+int
+rl_maybe_save_line ()
+{
+  if (_rl_saved_line_for_history == 0)
+    {
+      _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
+      _rl_saved_line_for_history->line = savestring (rl_line_buffer);
+      _rl_saved_line_for_history->data = (char *)rl_undo_list;
+    }
+  return 0;
+}
+
+int
+_rl_free_saved_history_line ()
+{
+  if (_rl_saved_line_for_history)
+    {
+      _rl_free_history_entry (_rl_saved_line_for_history);
+      _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
+    }
+  return 0;
+}
+
+static void
+_rl_history_set_point ()
+{
+  rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1)
+		? _rl_history_saved_point
+		: rl_end;
+  if (rl_point > rl_end)
+    rl_point = rl_end;
+
+#if defined (VI_MODE)
+  if (rl_editing_mode == vi_mode)
+    rl_point = 0;
+#endif /* VI_MODE */
+
+  if (rl_editing_mode == emacs_mode)
+    rl_mark = (rl_point == rl_end ? 0 : rl_end);
+}
+
+void
+rl_replace_from_history (entry, flags)
+     HIST_ENTRY *entry;
+     int flags;			/* currently unused */
+{
+  rl_replace_line (entry->line, 0);
+  rl_undo_list = (UNDO_LIST *)entry->data;
+  rl_point = rl_end;
+  rl_mark = 0;
+
+#if defined (VI_MODE)
+  if (rl_editing_mode == vi_mode)
+    {
+      rl_point = 0;
+      rl_mark = rl_end;
+    }
+#endif
+}  
+
+/* **************************************************************** */
+/*								    */
+/*			History Commands			    */
+/*								    */
+/* **************************************************************** */
+
+/* Meta-< goes to the start of the history. */
+int
+rl_beginning_of_history (count, key)
+     int count, key;
+{
+  return (rl_get_previous_history (1 + where_history (), key));
+}
+
+/* Meta-> goes to the end of the history.  (The current line). */
+int
+rl_end_of_history (count, key)
+     int count, key;
+{
+  rl_maybe_replace_line ();
+  using_history ();
+  rl_maybe_unsave_line ();
+  return 0;
+}
+
+/* Move down to the next history line. */
+int
+rl_get_next_history (count, key)
+     int count, key;
+{
+  HIST_ENTRY *temp;
+
+  if (count < 0)
+    return (rl_get_previous_history (-count, key));
+
+  if (count == 0)
+    return 0;
+
+  rl_maybe_replace_line ();
+
+  /* either not saved by rl_newline or at end of line, so set appropriately. */
+  if (_rl_history_saved_point == -1 && (rl_point || rl_end))
+    _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
+  temp = (HIST_ENTRY *)NULL;
+  while (count)
+    {
+      temp = next_history ();
+      if (!temp)
+	break;
+      --count;
+    }
+
+  if (temp == 0)
+    rl_maybe_unsave_line ();
+  else
+    {
+      rl_replace_from_history (temp, 0);
+      _rl_history_set_point ();
+    }
+  return 0;
+}
+
+/* Get the previous item out of our interactive history, making it the current
+   line.  If there is no previous history, just ding. */
+int
+rl_get_previous_history (count, key)
+     int count, key;
+{
+  HIST_ENTRY *old_temp, *temp;
+
+  if (count < 0)
+    return (rl_get_next_history (-count, key));
+
+  if (count == 0)
+    return 0;
+
+  /* either not saved by rl_newline or at end of line, so set appropriately. */
+  if (_rl_history_saved_point == -1 && (rl_point || rl_end))
+    _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
+  /* If we don't have a line saved, then save this one. */
+  rl_maybe_save_line ();
+
+  /* If the current line has changed, save the changes. */
+  rl_maybe_replace_line ();
+
+  temp = old_temp = (HIST_ENTRY *)NULL;
+  while (count)
+    {
+      temp = previous_history ();
+      if (temp == 0)
+	break;
+
+      old_temp = temp;
+      --count;
+    }
+
+  /* If there was a large argument, and we moved back to the start of the
+     history, that is not an error.  So use the last value found. */
+  if (!temp && old_temp)
+    temp = old_temp;
+
+  if (temp == 0)
+    rl_ding ();
+  else
+    {
+      rl_replace_from_history (temp, 0);
+      _rl_history_set_point ();
+    }
+  return 0;
+}
+
+/* **************************************************************** */
+/*								    */
+/*			    Editing Modes			    */
+/*								    */
+/* **************************************************************** */
+/* How to toggle back and forth between editing modes. */
+int
+rl_vi_editing_mode (count, key)
+     int count, key;
+{
+#if defined (VI_MODE)
+  _rl_set_insert_mode (RL_IM_INSERT, 1);	/* vi mode ignores insert mode */
+  rl_editing_mode = vi_mode;
+  rl_vi_insertion_mode (1, key);
+#endif /* VI_MODE */
+
+  return 0;
+}
+
+int
+rl_emacs_editing_mode (count, key)
+     int count, key;
+{
+  rl_editing_mode = emacs_mode;
+  _rl_set_insert_mode (RL_IM_INSERT, 1); /* emacs mode default is insert mode */
+  _rl_keymap = emacs_standard_keymap;
+  return 0;
+}
+
+/* Function for the rest of the library to use to set insert/overwrite mode. */
+void
+_rl_set_insert_mode (im, force)
+     int im, force;
+{
+#ifdef CURSOR_MODE
+  _rl_set_cursor (im, force);
+#endif
+
+  rl_insert_mode = im;
+}
+
+/* Toggle overwrite mode.  A positive explicit argument selects overwrite
+   mode.  A negative or zero explicit argument selects insert mode. */
+int
+rl_overwrite_mode (count, key)
+     int count, key;
+{
+  if (rl_explicit_arg == 0)
+    _rl_set_insert_mode (rl_insert_mode ^ 1, 0);
+  else if (count > 0)
+    _rl_set_insert_mode (RL_IM_OVERWRITE, 0);
+  else
+    _rl_set_insert_mode (RL_IM_INSERT, 0);
+
+  return 0;
+}
diff --git a/readline/nls.c b/readline/nls.c
index 67bed8a..706c819 100644
--- a/readline/nls.c
+++ b/readline/nls.c
@@ -71,8 +71,8 @@
   0
 };
 
-static char *normalize_codeset __P((char *));
-static char *find_codeset __P((char *, size_t *));
+static char *normalize_codeset PARAMS((char *));
+static char *find_codeset PARAMS((char *, size_t *));
 #endif /* !HAVE_SETLOCALE */
 
 /* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
@@ -105,9 +105,9 @@
   /* We don't have setlocale.  Finesse it.  Check the environment for the
      appropriate variables and set eight-bit mode if they have the right
      values. */
-  lspec = get_env_value ("LC_ALL");
-  if (lspec == 0) lspec = get_env_value ("LC_CTYPE");
-  if (lspec == 0) lspec = get_env_value ("LANG");
+  lspec = sh_get_env_value ("LC_ALL");
+  if (lspec == 0) lspec = sh_get_env_value ("LC_CTYPE");
+  if (lspec == 0) lspec = sh_get_env_value ("LANG");
   if (lspec == 0 || (t = normalize_codeset (lspec)) == 0)
     return (0);
   for (i = 0; t && legal_lang_values[i]; i++)
@@ -141,10 +141,10 @@
   all_digits = 1;
   for (len = 0, i = 0; i < namelen; i++)
     {
-      if (isalnum (codeset[i]))
+      if (ISALNUM ((unsigned char)codeset[i]))
 	{
 	  len++;
-	  all_digits &= isdigit (codeset[i]);
+	  all_digits &= _rl_digit_p (codeset[i]);
 	}
     }
 
@@ -162,9 +162,9 @@
     }
 
   for (i = 0; i < namelen; i++)
-    if (isalpha (codeset[i]))
-      *wp++ = (isupper (codeset[i])) ? tolower (codeset[i]) : codeset[i];
-    else if (isdigit (codeset[i]))
+    if (ISALPHA ((unsigned char)codeset[i]))
+      *wp++ = _rl_to_lower (codeset[i]);
+    else if (_rl_digit_p (codeset[i]))
       *wp++ = codeset[i];
   *wp = '\0';
 
diff --git a/readline/parens.c b/readline/parens.c
index b6de529..54ef1f3 100644
--- a/readline/parens.c
+++ b/readline/parens.c
@@ -30,6 +30,10 @@
 #include <stdio.h>
 #include <sys/types.h>
 
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
 #if defined (FD_SET) && !defined (HAVE_SELECT)
 #  define HAVE_SELECT
 #endif
@@ -54,7 +58,7 @@
 #include "readline.h"
 #include "rlprivate.h"
 
-static int find_matching_open __P((char *, int, int));
+static int find_matching_open PARAMS((char *, int, int));
 
 /* Non-zero means try to blink the matching open parenthesis when the
    close parenthesis is inserted. */
@@ -64,6 +68,8 @@
 int rl_blink_matching_paren = 0;
 #endif /* !HAVE_SELECT */
 
+static int _paren_blink_usec = 500000;
+
 /* Change emacs_standard_keymap to have bindings for paren matching when
    ON_OR_OFF is 1, change them back to self_insert when ON_OR_OFF == 0. */
 void
@@ -85,11 +91,23 @@
 }
 
 int
+rl_set_paren_blink_timeout (u)
+     int u;
+{
+  int o;
+
+  o = _paren_blink_usec;
+  if (u > 0)
+    _paren_blink_usec = u;
+  return (o);
+}
+
+int
 rl_insert_close (count, invoking_key)
      int count, invoking_key;
 {
   if (rl_explicit_arg || !rl_blink_matching_paren)
-    rl_insert (count, invoking_key);
+    _rl_insert_char (count, invoking_key);
   else
     {
 #if defined (HAVE_SELECT)
@@ -97,7 +115,7 @@
       struct timeval timer;
       fd_set readfds;
 
-      rl_insert (1, invoking_key);
+      _rl_insert_char (1, invoking_key);
       (*rl_redisplay_function) ();
       match_point =
 	find_matching_open (rl_line_buffer, rl_point - 2, invoking_key);
@@ -109,7 +127,7 @@
       FD_ZERO (&readfds);
       FD_SET (fileno (rl_instream), &readfds);
       timer.tv_sec = 0;
-      timer.tv_usec = 500000;
+      timer.tv_usec = _paren_blink_usec;
 
       orig_point = rl_point;
       rl_point = match_point;
@@ -117,7 +135,7 @@
       ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer);
       rl_point = orig_point;
 #else /* !HAVE_SELECT */
-      rl_insert (count, invoking_key);
+      _rl_insert_char (count, invoking_key);
 #endif /* !HAVE_SELECT */
     }
   return 0;
diff --git a/readline/posixdir.h b/readline/posixdir.h
index 98ced75..505e279 100644
--- a/readline/posixdir.h
+++ b/readline/posixdir.h
@@ -46,4 +46,12 @@
 #  define d_fileno d_ino
 #endif
 
+#if defined (_POSIX_SOURCE) && (!defined (STRUCT_DIRENT_HAS_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/readline/readline.c b/readline/readline.c
index 2c6aef6..28801f1 100644
--- a/readline/readline.c
+++ b/readline/readline.c
@@ -1,7 +1,7 @@
 /* readline.c -- a general facility for reading lines of input
    with emacs style editing and completion. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -52,6 +52,7 @@
 
 /* System-specific feature definitions and include files. */
 #include "rldefs.h"
+#include "rlmbutil.h"
 
 #if defined (__EMX__)
 #  define INCL_DOSPROCESS
@@ -67,22 +68,23 @@
 #include "xmalloc.h"
 
 #ifndef RL_LIBRARY_VERSION
-#  define RL_LIBRARY_VERSION "4.1"
+#  define RL_LIBRARY_VERSION "4.3"
 #endif
 
-/* Evaluates its arguments multiple times. */
-#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
+#ifndef RL_READLINE_VERSION
+#  define RL_READLINE_VERSION	0x0403
+#endif
+
+extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
 
 /* Forward declarations used in this file. */
-void _rl_free_history_entry __P((HIST_ENTRY *));
+static char *readline_internal PARAMS((void));
+static void readline_initialize_everything PARAMS((void));
 
-static char *readline_internal __P((void));
-static void readline_initialize_everything __P((void));
-static void start_using_history __P((void));
-static void bind_arrow_keys __P((void));
-static int rl_change_case __P((int, int));
+static void bind_arrow_keys_internal PARAMS((Keymap));
+static void bind_arrow_keys PARAMS((void));
 
-static void readline_default_bindings __P((void));
+static void readline_default_bindings PARAMS((void));
 
 /* **************************************************************** */
 /*								    */
@@ -90,8 +92,11 @@
 /*								    */
 /* **************************************************************** */
 
-char *rl_library_version = RL_LIBRARY_VERSION;
+const char *rl_library_version = RL_LIBRARY_VERSION;
 
+int rl_readline_version = RL_READLINE_VERSION;
+
+/* True if this is `real' readline as opposed to some stub substitute. */
 int rl_gnu_readline_p = 1;
 
 /* A pointer to the keymap that is currently in use.
@@ -101,6 +106,9 @@
 /* The current style of editing. */
 int rl_editing_mode = emacs_mode;
 
+/* The current insert mode:  input (the default) or overwrite */
+int rl_insert_mode = RL_IM_DEFAULT;
+
 /* Non-zero if we called this function from _rl_dispatch().  It's present
    so functions can find out whether they were called from a key binding
    or directly from an application. */
@@ -121,8 +129,13 @@
 /* Non-zero means we have been called at least once before. */
 static int rl_initialized;
 
+#if 0
 /* If non-zero, this program is running in an EMACS buffer. */
 static int running_in_emacs;
+#endif
+
+/* Flags word encapsulating the current readline state. */
+int rl_readline_state = RL_STATE_NONE;
 
 /* The current offset in the current input line. */
 int rl_point;
@@ -137,7 +150,7 @@
 int rl_done;
 
 /* The last function executed by readline. */
-Function *rl_last_func = (Function *)NULL;
+rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
 
 /* Top level environment for readline_internal (). */
 procenv_t readline_top_level;
@@ -149,11 +162,14 @@
 FILE *rl_instream = (FILE *)NULL;
 FILE *rl_outstream = (FILE *)NULL;
 
-/* Non-zero means echo characters as they are read. */
-int readline_echoing_p = 1;
+/* Non-zero means echo characters as they are read.  Defaults to no echo;
+   set to 1 if there is a controlling terminal, we can get its attributes,
+   and the attributes include `echo'.  Look at rltty.c:prepare_terminal_settings
+   for the code that sets it. */
+int readline_echoing_p = 0;
 
 /* Current prompt. */
-char *rl_prompt;
+char *rl_prompt = (char *)NULL;
 int rl_visible_prompt_length = 0;
 
 /* Set to non-zero by calling application if it has already printed rl_prompt
@@ -165,12 +181,12 @@
 
 /* If non-zero, then this is the address of a function to call just
    before readline_internal_setup () prints the first prompt. */
-Function *rl_startup_hook = (Function *)NULL;
+rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL;
 
 /* If non-zero, this is the address of a function to call just before
    readline_internal_setup () returns and readline_internal starts
    reading input characters. */
-Function *rl_pre_input_hook = (Function *)NULL;
+rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL;
 
 /* What we use internally.  You should always refer to RL_LINE_BUFFER. */
 static char *the_line;
@@ -183,7 +199,7 @@
 int rl_pending_input = 0;
 
 /* Pointer to a useful terminal name. */
-char *rl_terminal_name = (char *)NULL;
+const char *rl_terminal_name = (const char *)NULL;
 
 /* Non-zero means to always use horizontal scrolling in line display. */
 int _rl_horizontal_scroll_mode = 0;
@@ -213,7 +229,7 @@
 char *rl_line_buffer = (char *)NULL;
 int rl_line_buffer_len = 0;
 
-/* Forward declarations used by the display and termcap code. */
+/* Forward declarations used by the display, termcap, and history code. */
 
 /* **************************************************************** */
 /*								    */
@@ -243,24 +259,35 @@
 /* Non-zero means treat 0200 bit in terminal input as Meta bit. */
 int _rl_meta_flag = 0;	/* Forward declaration */
 
+/* Set up the prompt and expand it.  Called from readline() and
+   rl_callback_handler_install (). */
+int
+rl_set_prompt (prompt)
+     const char *prompt;
+{
+  FREE (rl_prompt);
+  rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
+
+  rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
+  return 0;
+}
+  
 /* Read a line of input.  Prompt with PROMPT.  An empty PROMPT means
    none.  A return value of NULL means that EOF was encountered. */
 char *
 readline (prompt)
-     char *prompt;
+     const char *prompt;
 {
   char *value;
 
-  rl_prompt = prompt;
-
   /* If we are at EOF return a NULL string. */
   if (rl_pending_input == EOF)
     {
-      rl_pending_input = 0;
+      rl_clear_pending_input ();
       return ((char *)NULL);
     }
 
-  rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
+  rl_set_prompt (prompt);
 
   rl_initialize ();
   (*rl_prep_term_function) (_rl_meta_flag);
@@ -296,7 +323,10 @@
   if (rl_startup_hook)
     (*rl_startup_hook) ();
 
-  if (readline_echoing_p == 0)
+  /* If we're not echoing, we still want to at least print a prompt, because
+     rl_redisplay will not do it for us.  If the calling application has a
+     custom redisplay function, though, let that function handle it. */
+  if (readline_echoing_p == 0 && rl_redisplay_function == rl_redisplay)
     {
       if (rl_prompt && rl_already_prompted == 0)
 	{
@@ -313,12 +343,13 @@
       else
 	rl_on_new_line ();
       (*rl_redisplay_function) ();
-#if defined (VI_MODE)
-      if (rl_editing_mode == vi_mode)
-	rl_vi_insertion_mode (1, 0);
-#endif /* VI_MODE */
     }
 
+#if defined (VI_MODE)
+  if (rl_editing_mode == vi_mode)
+    rl_vi_insertion_mode (1, 0);
+#endif /* VI_MODE */
+
   if (rl_pre_input_hook)
     (*rl_pre_input_hook) ();
 }
@@ -348,7 +379,10 @@
   /* At any rate, it is highly likely that this line has an undo list.  Get
      rid of it now. */
   if (rl_undo_list)
-    free_undo_list ();
+    rl_free_undo_list ();
+
+  /* Restore normal cursor, if available. */
+  _rl_set_insert_mode (RL_IM_INSERT, 0);
 
   return (eof ? (char *)NULL : savestring (the_line));
 }
@@ -384,7 +418,9 @@
 	  rl_key_sequence_length = 0;
 	}
 
+      RL_SETSTATE(RL_STATE_READCMD);
       c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_READCMD);
 
       /* EOF typed to a non-blank line is a <NL>. */
       if (c == EOF && rl_end)
@@ -395,6 +431,7 @@
       if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end)
 	{
 #if defined (READLINE_CALLBACKS)
+	  RL_SETSTATE(RL_STATE_DONE);
 	  return (rl_done = 1);
 #else
 	  eof_found = 1;
@@ -470,7 +507,7 @@
 void
 _rl_init_line_state ()
 {
-  rl_point = rl_end = 0;
+  rl_point = rl_end = rl_mark = 0;
   the_line = rl_line_buffer;
   the_line[0] = 0;
 }
@@ -489,15 +526,24 @@
      register int key;
      Keymap map;
 {
+  return _rl_dispatch_subseq (key, map, 0);
+}
+
+int
+_rl_dispatch_subseq (key, map, got_subseq)
+     register int key;
+     Keymap map;
+     int got_subseq;
+{
   int r, newkey;
   char *macro;
-  Function *func;
+  rl_command_func_t *func;
 
   if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
     {
       if (map[ESC].type == ISKMAP)
 	{
-	  if (_rl_defining_kbd_macro)
+	  if (RL_ISSTATE (RL_STATE_MACRODEF))
 	    _rl_add_macro_char (ESC);
 	  map = FUNCTION_TO_KEYMAP (map, ESC);
 	  key = UNMETA (key);
@@ -505,11 +551,11 @@
 	  return (_rl_dispatch (key, map));
 	}
       else
-	ding ();
+	rl_ding ();
       return 0;
     }
 
-  if (_rl_defining_kbd_macro)
+  if (RL_ISSTATE (RL_STATE_MACRODEF))
     _rl_add_macro_char (key);
 
   r = 0;
@@ -517,7 +563,7 @@
     {
     case ISFUNC:
       func = map[key].function;
-      if (func != (Function *)NULL)
+      if (func)
 	{
 	  /* Special case rl_do_lowercase_version (). */
 	  if (func == rl_do_lowercase_version)
@@ -530,15 +576,34 @@
 #endif
 
 	  rl_dispatching = 1;
+	  RL_SETSTATE(RL_STATE_DISPATCHING);
 	  r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
+	  RL_UNSETSTATE(RL_STATE_DISPATCHING);
 	  rl_dispatching = 0;
 
 	  /* If we have input pending, then the last command was a prefix
 	     command.  Don't change the state of rl_last_func.  Otherwise,
 	     remember the last command executed in this variable. */
-	  if (!rl_pending_input && map[key].function != rl_digit_argument)
+	  if (rl_pending_input == 0 && map[key].function != rl_digit_argument)
 	    rl_last_func = map[key].function;
 	}
+      else if (map[ANYOTHERKEY].function)
+	{
+	  /* OK, there's no function bound in this map, but there is a
+	     shadow function that was overridden when the current keymap
+	     was created.  Return -2 to note  that. */
+	  _rl_unget_char  (key);
+	  return -2;
+	}
+      else if (got_subseq)
+	{
+	  /* Return -1 to note that we're in a subsequence, but  we don't
+	     have a matching key, nor was one overridden.  This means
+	     we need to back up the recursion chain and find the last
+	     subsequence that is bound to a function. */
+	  _rl_unget_char (key);
+	  return -1;
+	}
       else
 	{
 	  _rl_abort_internal ();
@@ -547,11 +612,59 @@
       break;
 
     case ISKMAP:
-      if (map[key].function != (Function *)NULL)
+      if (map[key].function != 0)
 	{
+#if defined (VI_MODE)
+	  /* The only way this test will be true is if a subsequence has been
+	     bound starting with ESC, generally the arrow keys.  What we do is
+	     check whether there's input in the queue, which there generally
+	     will be if an arrow key has been pressed, and, if there's not,
+	     just dispatch to (what we assume is) rl_vi_movement_mode right
+	     away.  This is essentially an input test with a zero timeout. */
+	  if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap
+	      && _rl_input_queued (0) == 0)
+	    return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key)));
+#endif
+
 	  rl_key_sequence_length++;
+
+	  if (key == ESC)
+	    RL_SETSTATE(RL_STATE_METANEXT);
+	  RL_SETSTATE(RL_STATE_MOREINPUT);
 	  newkey = rl_read_key ();
-	  r = _rl_dispatch (newkey, FUNCTION_TO_KEYMAP (map, key));
+	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+	  if (key == ESC)
+	    RL_UNSETSTATE(RL_STATE_METANEXT);
+
+	  if (newkey < 0)
+	    {
+	      _rl_abort_internal ();
+	      return -1;
+	    }
+
+	  r = _rl_dispatch_subseq (newkey, FUNCTION_TO_KEYMAP (map, key), got_subseq || map[ANYOTHERKEY].function);
+
+	  if (r == -2)
+	    /* We didn't match anything, and the keymap we're indexed into
+	       shadowed a function previously bound to that prefix.  Call
+	       the function.  The recursive call to _rl_dispatch_subseq has
+	       already taken care of pushing any necessary input back onto
+	       the input queue with _rl_unget_char. */
+	    r = _rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key));
+	  else if (r && map[ANYOTHERKEY].function)
+	    {
+	      /* We didn't match (r is probably -1), so return something to
+		 tell the caller that it should try ANYOTHERKEY for an
+		 overridden function. */
+	      _rl_unget_char (key);
+	      return -2;
+	    }
+	  else if (r && got_subseq)
+	    {
+	      /* OK, back up the chain. */
+	      _rl_unget_char (key);
+	      return -1;
+	    }
 	}
       else
 	{
@@ -561,7 +674,7 @@
       break;
 
     case ISMACR:
-      if (map[key].function != (Function *)NULL)
+      if (map[key].function != 0)
 	{
 	  macro = savestring ((char *)map[key].function);
 	  _rl_with_macro_input (macro);
@@ -591,8 +704,11 @@
      terminal and data structures. */
   if (!rl_initialized)
     {
+      RL_SETSTATE(RL_STATE_INITIALIZING);
       readline_initialize_everything ();
+      RL_UNSETSTATE(RL_STATE_INITIALIZING);
       rl_initialized++;
+      RL_SETSTATE(RL_STATE_INITIALIZED);
     }
 
   /* Initalize the current line information. */
@@ -600,15 +716,16 @@
 
   /* We aren't done yet.  We haven't even gotten started yet! */
   rl_done = 0;
+  RL_UNSETSTATE(RL_STATE_DONE);
 
   /* Tell the history routines what is going on. */
-  start_using_history ();
+  _rl_start_using_history ();
 
   /* Make the display buffer match the state of the line. */
   rl_reset_line_state ();
 
   /* No such function typed yet. */
-  rl_last_func = (Function *)NULL;
+  rl_last_func = (rl_command_func_t *)NULL;
 
   /* Parsing of key-bindings begins in an enabled state. */
   _rl_parsing_conditionalized_out = 0;
@@ -618,6 +735,9 @@
     _rl_vi_initialize_line ();
 #endif
 
+  /* Each line starts in insert mode (the default). */
+  _rl_set_insert_mode (RL_IM_DEFAULT, 1);
+
   return 0;
 }
 
@@ -658,8 +778,10 @@
 #endif
 #endif
 
-  /* Find out if we are running in Emacs. */
-  running_in_emacs = get_env_value ("EMACS") != (char *)0;
+#if 0
+  /* Find out if we are running in Emacs -- UNUSED. */
+  running_in_emacs = sh_get_env_value ("EMACS") != (char *)0;
+#endif
 
   /* Set up input and output if they are not already set up. */
   if (!rl_instream)
@@ -676,10 +798,12 @@
 
   /* Allocate data structures. */
   if (rl_line_buffer == 0)
-    rl_line_buffer = xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
+    rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
 
   /* Initialize the terminal interface. */
-  _rl_init_terminal_io ((char *)NULL);
+  if (rl_terminal_name == 0)
+    rl_terminal_name = sh_get_env_value ("TERM");
+  _rl_init_terminal_io (rl_terminal_name);
 
   /* Bind tty characters to readline functions. */
   readline_default_bindings ();
@@ -696,8 +820,8 @@
   /* XXX */
   if (_rl_horizontal_scroll_mode && _rl_term_autowrap)
     {
-      screenwidth--;
-      screenchars -= screenheight;
+      _rl_screenwidth--;
+      _rl_screenchars -= _rl_screenheight;
     }
 
   /* Override the effect of any `set keymap' assignments in the
@@ -723,1367 +847,127 @@
 static void
 readline_default_bindings ()
 {
-  rltty_set_default_bindings (_rl_keymap);
+  rl_tty_set_default_bindings (_rl_keymap);
 }
 
+/* Bind some common arrow key sequences in MAP. */
 static void
-bind_arrow_keys_internal ()
+bind_arrow_keys_internal (map)
+     Keymap map;
 {
-  Function *f;
+  Keymap xkeymap;
+
+  xkeymap = _rl_keymap;
+  _rl_keymap = map;
 
 #if defined (__MSDOS__)
-  f = rl_function_of_keyseq ("\033[0A", _rl_keymap, (int *)NULL);
-  if (!f || f == rl_do_lowercase_version)
-    {
-       _rl_bind_if_unbound ("\033[0A", rl_get_previous_history);
-       _rl_bind_if_unbound ("\033[0B", rl_backward);
-       _rl_bind_if_unbound ("\033[0C", rl_forward);
-       _rl_bind_if_unbound ("\033[0D", rl_get_next_history);
-    }
+   _rl_bind_if_unbound ("\033[0A", rl_get_previous_history);
+   _rl_bind_if_unbound ("\033[0B", rl_backward_char);
+   _rl_bind_if_unbound ("\033[0C", rl_forward_char);
+   _rl_bind_if_unbound ("\033[0D", rl_get_next_history);
 #endif
-	
-  f = rl_function_of_keyseq ("\033[A", _rl_keymap, (int *)NULL);
-  if (!f || f == rl_do_lowercase_version)
-    {
-      _rl_bind_if_unbound ("\033[A", rl_get_previous_history);
-      _rl_bind_if_unbound ("\033[B", rl_get_next_history);
-      _rl_bind_if_unbound ("\033[C", rl_forward);
-      _rl_bind_if_unbound ("\033[D", rl_backward);
-    }
 
-  f = rl_function_of_keyseq ("\033OA", _rl_keymap, (int *)NULL);
-  if (!f || f == rl_do_lowercase_version)
-    {
-      _rl_bind_if_unbound ("\033OA", rl_get_previous_history);
-      _rl_bind_if_unbound ("\033OB", rl_get_next_history);
-      _rl_bind_if_unbound ("\033OC", rl_forward);
-      _rl_bind_if_unbound ("\033OD", rl_backward);
-    }
+  _rl_bind_if_unbound ("\033[A", rl_get_previous_history);
+  _rl_bind_if_unbound ("\033[B", rl_get_next_history);
+  _rl_bind_if_unbound ("\033[C", rl_forward_char);
+  _rl_bind_if_unbound ("\033[D", rl_backward_char);
+  _rl_bind_if_unbound ("\033[H", rl_beg_of_line);
+  _rl_bind_if_unbound ("\033[F", rl_end_of_line);
+
+  _rl_bind_if_unbound ("\033OA", rl_get_previous_history);
+  _rl_bind_if_unbound ("\033OB", rl_get_next_history);
+  _rl_bind_if_unbound ("\033OC", rl_forward_char);
+  _rl_bind_if_unbound ("\033OD", rl_backward_char);
+  _rl_bind_if_unbound ("\033OH", rl_beg_of_line);
+  _rl_bind_if_unbound ("\033OF", rl_end_of_line);
+
+  _rl_keymap = xkeymap;
 }
 
-/* Try and bind the common arrow key prefix after giving termcap and
+/* Try and bind the common arrow key prefixes after giving termcap and
    the inputrc file a chance to bind them and create `real' keymaps
    for the arrow key prefix. */
 static void
 bind_arrow_keys ()
 {
-  Keymap xkeymap;
-
-  xkeymap = _rl_keymap;
-
-  _rl_keymap = emacs_standard_keymap;
-  bind_arrow_keys_internal ();
+  bind_arrow_keys_internal (emacs_standard_keymap);
 
 #if defined (VI_MODE)
-  _rl_keymap = vi_movement_keymap;
-  bind_arrow_keys_internal ();
+  bind_arrow_keys_internal (vi_movement_keymap);
+  bind_arrow_keys_internal (vi_insertion_keymap);
 #endif
-
-  _rl_keymap = xkeymap;
-}
-
-
-/* **************************************************************** */
-/*								    */
-/*			Numeric Arguments			    */
-/*								    */
-/* **************************************************************** */
-
-/* Handle C-u style numeric args, as well as M--, and M-digits. */
-static int
-rl_digit_loop ()
-{
-  int key, c, sawminus, sawdigits;
-
-  rl_save_prompt ();
-
-  sawminus = sawdigits = 0;
-  while (1)
-    {
-      if (rl_numeric_arg > 1000000)
-	{
-	  sawdigits = rl_explicit_arg = rl_numeric_arg = 0;
-	  ding ();
-	  rl_restore_prompt ();
-	  rl_clear_message ();
-	  return 1;
-	}
-      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
-      key = c = rl_read_key ();
-
-      /* If we see a key bound to `universal-argument' after seeing digits,
-	 it ends the argument but is otherwise ignored. */
-      if (_rl_keymap[c].type == ISFUNC &&
-	  _rl_keymap[c].function == rl_universal_argument)
-	{
-	  if (sawdigits == 0)
-	    {
-	      rl_numeric_arg *= 4;
-	      continue;
-	    }
-	  else
-	    {
-	      key = rl_read_key ();
-	      rl_restore_prompt ();
-	      rl_clear_message ();
-	      return (_rl_dispatch (key, _rl_keymap));
-	    }
-	}
-
-      c = UNMETA (c);
-
-      if (_rl_digit_p (c))
-	{
-	  rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + c - '0' : c - '0';
-	  sawdigits = rl_explicit_arg = 1;
-	}
-      else if (c == '-' && rl_explicit_arg == 0)
-	{
-	  rl_numeric_arg = sawminus = 1;
-	  rl_arg_sign = -1;
-	}
-      else
-	{
-	  /* Make M-- command equivalent to M--1 command. */
-	  if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0)
-	    rl_explicit_arg = 1;
-	  rl_restore_prompt ();
-	  rl_clear_message ();
-	  return (_rl_dispatch (key, _rl_keymap));
-	}
-    }
-
-  return 0;
-}
-
-/* Add the current digit to the argument in progress. */
-int
-rl_digit_argument (ignore, key)
-     int ignore, key;
-{
-  rl_pending_input = key;
-  return (rl_digit_loop ());
-}
-
-/* What to do when you abort reading an argument. */
-int
-rl_discard_argument ()
-{
-  ding ();
-  rl_clear_message ();
-  _rl_init_argument ();
-  return 0;
-}
-
-/* Create a default argument. */
-int
-_rl_init_argument ()
-{
-  rl_numeric_arg = rl_arg_sign = 1;
-  rl_explicit_arg = 0;
-  return 0;
-}
-
-/* C-u, universal argument.  Multiply the current argument by 4.
-   Read a key.  If the key has nothing to do with arguments, then
-   dispatch on it.  If the key is the abort character then abort. */
-int
-rl_universal_argument (count, key)
-     int count, key;
-{
-  rl_numeric_arg *= 4;
-  return (rl_digit_loop ());
 }
 
 /* **************************************************************** */
 /*								    */
-/*			Insert and Delete			    */
-/*								    */
-/* **************************************************************** */
-
-/* Insert a string of text into the line at point.  This is the only
-   way that you should do insertion.  rl_insert () calls this
-   function. */
-int
-rl_insert_text (string)
-     char *string;
-{
-  register int i, l = strlen (string);
-
-  if (rl_end + l >= rl_line_buffer_len)
-    rl_extend_line_buffer (rl_end + l);
-
-  for (i = rl_end; i >= rl_point; i--)
-    the_line[i + l] = the_line[i];
-  strncpy (the_line + rl_point, string, l);
-
-  /* Remember how to undo this if we aren't undoing something. */
-  if (!_rl_doing_an_undo)
-    {
-      /* If possible and desirable, concatenate the undos. */
-      if ((l == 1) &&
-	  rl_undo_list &&
-	  (rl_undo_list->what == UNDO_INSERT) &&
-	  (rl_undo_list->end == rl_point) &&
-	  (rl_undo_list->end - rl_undo_list->start < 20))
-	rl_undo_list->end++;
-      else
-	rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL);
-    }
-  rl_point += l;
-  rl_end += l;
-  the_line[rl_end] = '\0';
-  return l;
-}
-
-/* Delete the string between FROM and TO.  FROM is
-   inclusive, TO is not. */
-int
-rl_delete_text (from, to)
-     int from, to;
-{
-  register char *text;
-  register int diff, i;
-
-  /* Fix it if the caller is confused. */
-  if (from > to)
-    SWAP (from, to);
-
-  /* fix boundaries */
-  if (to > rl_end)
-    {
-      to = rl_end;
-      if (from > to)
-        from = to;
-    }
-
-  text = rl_copy_text (from, to);
-
-  /* Some versions of strncpy() can't handle overlapping arguments. */
-  diff = to - from;
-  for (i = from; i < rl_end - diff; i++)
-    the_line[i] = the_line[i + diff];
-
-  /* Remember how to undo this delete. */
-  if (_rl_doing_an_undo == 0)
-    rl_add_undo (UNDO_DELETE, from, to, text);
-  else
-    free (text);
-
-  rl_end -= diff;
-  the_line[rl_end] = '\0';
-  return (diff);
-}
-
-/* Fix up point so that it is within the line boundaries after killing
-   text.  If FIX_MARK_TOO is non-zero, the mark is forced within line
-   boundaries also. */
-
-#define _RL_FIX_POINT(x) \
-	do { \
-	if (x > rl_end) \
-	  x = rl_end; \
-	else if (x < 0) \
-	  x = 0; \
-	} while (0)
-
-void
-_rl_fix_point (fix_mark_too)
-     int fix_mark_too;
-{
-  _RL_FIX_POINT (rl_point);
-  if (fix_mark_too)
-    _RL_FIX_POINT (rl_mark);
-}
-#undef _RL_FIX_POINT
-
-void
-_rl_replace_text (text, start, end)
-     char *text;
-     int start, end;
-{
-  rl_begin_undo_group ();
-  rl_delete_text (start, end + 1);
-  rl_point = start;
-  rl_insert_text (text);
-  rl_end_undo_group ();
-}
-
-/* **************************************************************** */
-/*								    */
-/*			Readline character functions		    */
-/*								    */
-/* **************************************************************** */
-
-/* This is not a gap editor, just a stupid line input routine.  No hair
-   is involved in writing any of the functions, and none should be. */
-
-/* Note that:
-
-   rl_end is the place in the string that we would place '\0';
-   i.e., it is always safe to place '\0' there.
-
-   rl_point is the place in the string where the cursor is.  Sometimes
-   this is the same as rl_end.
-
-   Any command that is called interactively receives two arguments.
-   The first is a count: the numeric arg pased to this command.
-   The second is the key which invoked this command.
-*/
-
-/* **************************************************************** */
-/*								    */
-/*			Movement Commands			    */
-/*								    */
-/* **************************************************************** */
-
-/* Note that if you `optimize' the display for these functions, you cannot
-   use said functions in other functions which do not do optimizing display.
-   I.e., you will have to update the data base for rl_redisplay, and you
-   might as well let rl_redisplay do that job. */
-
-/* Move forward COUNT characters. */
-int
-rl_forward (count, key)
-     int count, key;
-{
-  if (count < 0)
-    rl_backward (-count, key);
-  else if (count > 0)
-    {
-      int end = rl_point + count;
-#if defined (VI_MODE)
-      int lend = rl_end - (rl_editing_mode == vi_mode);
-#else
-      int lend = rl_end;
-#endif
-
-      if (end > lend)
-	{
-	  rl_point = lend;
-	  ding ();
-	}
-      else
-	rl_point = end;
-    }
-
-  if (rl_end < 0)
-    rl_end = 0;
-
-  return 0;
-}
-
-/* Move backward COUNT characters. */
-int
-rl_backward (count, key)
-     int count, key;
-{
-  if (count < 0)
-    rl_forward (-count, key);
-  else if (count > 0)
-    {
-      if (rl_point < count)
-	{
-	  rl_point = 0;
-	  ding ();
-	}
-      else
-        rl_point -= count;
-    }
-  return 0;
-}
-
-/* Move to the beginning of the line. */
-int
-rl_beg_of_line (count, key)
-     int count, key;
-{
-  rl_point = 0;
-  return 0;
-}
-
-/* Move to the end of the line. */
-int
-rl_end_of_line (count, key)
-     int count, key;
-{
-  rl_point = rl_end;
-  return 0;
-}
-
-/* Move forward a word.  We do what Emacs does. */
-int
-rl_forward_word (count, key)
-     int count, key;
-{
-  int c;
-
-  if (count < 0)
-    {
-      rl_backward_word (-count, key);
-      return 0;
-    }
-
-  while (count)
-    {
-      if (rl_point == rl_end)
-	return 0;
-
-      /* If we are not in a word, move forward until we are in one.
-	 Then, move forward until we hit a non-alphabetic character. */
-      c = the_line[rl_point];
-      if (alphabetic (c) == 0)
-	{
-	  while (++rl_point < rl_end)
-	    {
-	      c = the_line[rl_point];
-	      if (alphabetic (c))
-		break;
-	    }
-	}
-      if (rl_point == rl_end)
-	return 0;
-      while (++rl_point < rl_end)
-	{
-	  c = the_line[rl_point];
-	  if (alphabetic (c) == 0)
-	    break;
-	}
-      --count;
-    }
-  return 0;
-}
-
-/* Move backward a word.  We do what Emacs does. */
-int
-rl_backward_word (count, key)
-     int count, key;
-{
-  int c;
-
-  if (count < 0)
-    {
-      rl_forward_word (-count, key);
-      return 0;
-    }
-
-  while (count)
-    {
-      if (!rl_point)
-	return 0;
-
-      /* Like rl_forward_word (), except that we look at the characters
-	 just before point. */
-
-      c = the_line[rl_point - 1];
-      if (alphabetic (c) == 0)
-	{
-	  while (--rl_point)
-	    {
-	      c = the_line[rl_point - 1];
-	      if (alphabetic (c))
-		break;
-	    }
-	}
-
-      while (rl_point)
-	{
-	  c = the_line[rl_point - 1];
-	  if (alphabetic (c) == 0)
-	    break;
-	  else
-	    --rl_point;
-	}
-      --count;
-    }
-  return 0;
-}
-
-/* Clear the current line.  Numeric argument to C-l does this. */
-int
-rl_refresh_line (ignore1, ignore2)
-     int ignore1, ignore2;
-{
-  int curr_line;
-
-  curr_line = _rl_current_display_line ();
-
-  _rl_move_vert (curr_line);
-  _rl_move_cursor_relative (0, the_line);   /* XXX is this right */
-
-  _rl_clear_to_eol (0);		/* arg of 0 means to not use spaces */
-
-  rl_forced_update_display ();
-  rl_display_fixed = 1;
-
-  return 0;
-}
-
-/* C-l typed to a line without quoting clears the screen, and then reprints
-   the prompt and the current input line.  Given a numeric arg, redraw only
-   the current line. */
-int
-rl_clear_screen (count, key)
-     int count, key;
-{
-  if (rl_explicit_arg)
-    {
-      rl_refresh_line (count, key);
-      return 0;
-    }
-
-  _rl_clear_screen ();		/* calls termcap function to clear screen */
-  rl_forced_update_display ();
-  rl_display_fixed = 1;
-
-  return 0;
-}
-
-int
-rl_arrow_keys (count, c)
-     int count, c;
-{
-  int ch;
-
-  ch = rl_read_key ();
-
-  switch (_rl_to_upper (ch))
-    {
-    case 'A':
-      rl_get_previous_history (count, ch);
-      break;
-
-    case 'B':
-      rl_get_next_history (count, ch);
-      break;
-
-    case 'C':
-      rl_forward (count, ch);
-      break;
-
-    case 'D':
-      rl_backward (count, ch);
-      break;
-
-    default:
-      ding ();
-    }
-  return 0;
-}
-
-
-/* **************************************************************** */
-/*								    */
-/*			Text commands				    */
-/*								    */
-/* **************************************************************** */
-
-/* Insert the character C at the current location, moving point forward. */
-int
-rl_insert (count, c)
-     int count, c;
-{
-  register int i;
-  char *string;
-
-  if (count <= 0)
-    return 0;
-
-  /* If we can optimize, then do it.  But don't let people crash
-     readline because of extra large arguments. */
-  if (count > 1 && count <= 1024)
-    {
-      string = xmalloc (1 + count);
-
-      for (i = 0; i < count; i++)
-	string[i] = c;
-
-      string[i] = '\0';
-      rl_insert_text (string);
-      free (string);
-
-      return 0;
-    }
-
-  if (count > 1024)
-    {
-      int decreaser;
-      char str[1024+1];
-
-      for (i = 0; i < 1024; i++)
-	str[i] = c;
-
-      while (count)
-	{
-	  decreaser = (count > 1024 ? 1024 : count);
-	  str[decreaser] = '\0';
-	  rl_insert_text (str);
-	  count -= decreaser;
-	}
-
-      return 0;
-    }
-
-  /* We are inserting a single character.
-     If there is pending input, then make a string of all of the
-     pending characters that are bound to rl_insert, and insert
-     them all. */
-  if (_rl_any_typein ())
-    _rl_insert_typein (c);
-  else
-    {
-      /* Inserting a single character. */
-      char str[2];
-
-      str[1] = '\0';
-      str[0] = c;
-      rl_insert_text (str);
-    }
-  return 0;
-}
-
-/* Insert the next typed character verbatim. */
-int
-rl_quoted_insert (count, key)
-     int count, key;
-{
-  int c;
-
-#if defined (HANDLE_SIGNALS)
-  _rl_disable_tty_signals ();
-#endif
-  c = rl_read_key ();
-#if defined (HANDLE_SIGNALS)
-  _rl_restore_tty_signals ();
-#endif
-
-  return (rl_insert (count, c));  
-}
-
-/* Insert a tab character. */
-int
-rl_tab_insert (count, key)
-     int count, key;
-{
-  return (rl_insert (count, '\t'));
-}
-
-/* What to do when a NEWLINE is pressed.  We accept the whole line.
-   KEY is the key that invoked this command.  I guess it could have
-   meaning in the future. */
-int
-rl_newline (count, key)
-     int count, key;
-{
-  rl_done = 1;
-
-#if defined (VI_MODE)
-  if (rl_editing_mode == vi_mode)
-    {
-      _rl_vi_done_inserting ();
-      _rl_vi_reset_last ();
-    }
-#endif /* VI_MODE */
-
-  /* If we've been asked to erase empty lines, suppress the final update,
-     since _rl_update_final calls crlf(). */
-  if (rl_erase_empty_line && rl_point == 0 && rl_end == 0)
-    return 0;
-
-  if (readline_echoing_p)
-    _rl_update_final ();
-  return 0;
-}
-
-/* What to do for some uppercase characters, like meta characters,
-   and some characters appearing in emacs_ctlx_keymap.  This function
-   is just a stub, you bind keys to it and the code in _rl_dispatch ()
-   is special cased. */
-int
-rl_do_lowercase_version (ignore1, ignore2)
-     int ignore1, ignore2;
-{
-  return 0;
-}
-
-/* Rubout the character behind point. */
-int
-rl_rubout (count, key)
-     int count, key;
-{
-  if (count < 0)
-    {
-      rl_delete (-count, key);
-      return 0;
-    }
-
-  if (!rl_point)
-    {
-      ding ();
-      return -1;
-    }
-
-  if (count > 1 || rl_explicit_arg)
-    {
-      int orig_point = rl_point;
-      rl_backward (count, key);
-      rl_kill_text (orig_point, rl_point);
-    }
-  else
-    {
-      int c = the_line[--rl_point];
-      rl_delete_text (rl_point, rl_point + 1);
-
-      if (rl_point == rl_end && isprint (c) && _rl_last_c_pos)
-	{
-	  int l;
-	  l = rl_character_len (c, rl_point);
-	  _rl_erase_at_end_of_line (l);
-	}
-    }
-  return 0;
-}
-
-/* Delete the character under the cursor.  Given a numeric argument,
-   kill that many characters instead. */
-int
-rl_delete (count, key)
-     int count, key;
-{
-  if (count < 0)
-    return (rl_rubout (-count, key));
-
-  if (rl_point == rl_end)
-    {
-      ding ();
-      return -1;
-    }
-
-  if (count > 1 || rl_explicit_arg)
-    {
-      int orig_point = rl_point;
-      rl_forward (count, key);
-      rl_kill_text (orig_point, rl_point);
-      rl_point = orig_point;
-      return 0;
-    }
-  else
-    return (rl_delete_text (rl_point, rl_point + 1));
-}
-
-/* Delete the character under the cursor, unless the insertion
-   point is at the end of the line, in which case the character
-   behind the cursor is deleted.  COUNT is obeyed and may be used
-   to delete forward or backward that many characters. */      
-int
-rl_rubout_or_delete (count, key)
-     int count, key;
-{
-  if (rl_end != 0 && rl_point == rl_end)
-    return (rl_rubout (count, key));
-  else
-    return (rl_delete (count, key));
-}  
-
-/* Delete all spaces and tabs around point. */
-int
-rl_delete_horizontal_space (count, ignore)
-     int count, ignore;
-{
-  int start = rl_point;
-
-  while (rl_point && whitespace (the_line[rl_point - 1]))
-    rl_point--;
-
-  start = rl_point;
-
-  while (rl_point < rl_end && whitespace (the_line[rl_point]))
-    rl_point++;
-
-  if (start != rl_point)
-    {
-      rl_delete_text (start, rl_point);
-      rl_point = start;
-    }
-  return 0;
-}
-
-/* Like the tcsh editing function delete-char-or-list.  The eof character
-   is caught before this is invoked, so this really does the same thing as
-   delete-char-or-list-or-eof, as long as it's bound to the eof character. */
-int
-rl_delete_or_show_completions (count, key)
-     int count, key;
-{
-  if (rl_end != 0 && rl_point == rl_end)
-    return (rl_possible_completions (count, key));
-  else
-    return (rl_delete (count, key));
-}
-
-#ifndef RL_COMMENT_BEGIN_DEFAULT
-#define RL_COMMENT_BEGIN_DEFAULT "#"
-#endif
-
-/* Turn the current line into a comment in shell history.
-   A K*rn shell style function. */
-int
-rl_insert_comment (count, key)
-     int count, key;
-{
-  rl_beg_of_line (1, key);
-  rl_insert_text (_rl_comment_begin ? _rl_comment_begin
-				    : RL_COMMENT_BEGIN_DEFAULT);
-  (*rl_redisplay_function) ();
-  rl_newline (1, '\n');
-  return (0);
-}
-
-/* **************************************************************** */
-/*								    */
-/*			Changing Case				    */
-/*								    */
-/* **************************************************************** */
-
-/* The three kinds of things that we know how to do. */
-#define UpCase 1
-#define DownCase 2
-#define CapCase 3
-
-/* Uppercase the word at point. */
-int
-rl_upcase_word (count, key)
-     int count, key;
-{
-  return (rl_change_case (count, UpCase));
-}
-
-/* Lowercase the word at point. */
-int
-rl_downcase_word (count, key)
-     int count, key;
-{
-  return (rl_change_case (count, DownCase));
-}
-
-/* Upcase the first letter, downcase the rest. */
-int
-rl_capitalize_word (count, key)
-     int count, key;
-{
- return (rl_change_case (count, CapCase));
-}
-
-/* The meaty function.
-   Change the case of COUNT words, performing OP on them.
-   OP is one of UpCase, DownCase, or CapCase.
-   If a negative argument is given, leave point where it started,
-   otherwise, leave it where it moves to. */
-static int
-rl_change_case (count, op)
-     int count, op;
-{
-  register int start, end;
-  int inword, c;
-
-  start = rl_point;
-  rl_forward_word (count, 0);
-  end = rl_point;
-
-  if (count < 0)
-    SWAP (start, end);
-
-  /* We are going to modify some text, so let's prepare to undo it. */
-  rl_modifying (start, end);
-
-  for (inword = 0; start < end; start++)
-    {
-      c = the_line[start];
-      switch (op)
-	{
-	case UpCase:
-	  the_line[start] = _rl_to_upper (c);
-	  break;
-
-	case DownCase:
-	  the_line[start] = _rl_to_lower (c);
-	  break;
-
-	case CapCase:
-	  the_line[start] = (inword == 0) ? _rl_to_upper (c) : _rl_to_lower (c);
-	  inword = alphabetic (the_line[start]);
-	  break;
-
-	default:
-	  ding ();
-	  return -1;
-	}
-    }
-  rl_point = end;
-  return 0;
-}
-
-/* **************************************************************** */
-/*								    */
-/*			Transposition				    */
-/*								    */
-/* **************************************************************** */
-
-/* Transpose the words at point. */
-int
-rl_transpose_words (count, key)
-     int count, key;
-{
-  char *word1, *word2;
-  int w1_beg, w1_end, w2_beg, w2_end;
-  int orig_point = rl_point;
-
-  if (!count)
-    return 0;
-
-  /* Find the two words. */
-  rl_forward_word (count, key);
-  w2_end = rl_point;
-  rl_backward_word (1, key);
-  w2_beg = rl_point;
-  rl_backward_word (count, key);
-  w1_beg = rl_point;
-  rl_forward_word (1, key);
-  w1_end = rl_point;
-
-  /* Do some check to make sure that there really are two words. */
-  if ((w1_beg == w2_beg) || (w2_beg < w1_end))
-    {
-      ding ();
-      rl_point = orig_point;
-      return -1;
-    }
-
-  /* Get the text of the words. */
-  word1 = rl_copy_text (w1_beg, w1_end);
-  word2 = rl_copy_text (w2_beg, w2_end);
-
-  /* We are about to do many insertions and deletions.  Remember them
-     as one operation. */
-  rl_begin_undo_group ();
-
-  /* Do the stuff at word2 first, so that we don't have to worry
-     about word1 moving. */
-  rl_point = w2_beg;
-  rl_delete_text (w2_beg, w2_end);
-  rl_insert_text (word1);
-
-  rl_point = w1_beg;
-  rl_delete_text (w1_beg, w1_end);
-  rl_insert_text (word2);
-
-  /* This is exactly correct since the text before this point has not
-     changed in length. */
-  rl_point = w2_end;
-
-  /* I think that does it. */
-  rl_end_undo_group ();
-  free (word1);
-  free (word2);
-
-  return 0;
-}
-
-/* Transpose the characters at point.  If point is at the end of the line,
-   then transpose the characters before point. */
-int
-rl_transpose_chars (count, key)
-     int count, key;
-{
-  char dummy[2];
-
-  if (!count)
-    return 0;
-
-  if (!rl_point || rl_end < 2)
-    {
-      ding ();
-      return -1;
-    }
-
-  rl_begin_undo_group ();
-
-  if (rl_point == rl_end)
-    {
-      --rl_point;
-      count = 1;
-    }
-  rl_point--;
-
-  dummy[0] = the_line[rl_point];
-  dummy[1] = '\0';
-
-  rl_delete_text (rl_point, rl_point + 1);
-
-  rl_point += count;
-  _rl_fix_point (0);
-  rl_insert_text (dummy);
-
-  rl_end_undo_group ();
-  return 0;
-}
-
-/* **************************************************************** */
-/*								    */
-/*			Character Searching			    */
+/*		Saving and Restoring Readline's state		    */
 /*								    */
 /* **************************************************************** */
 
 int
-_rl_char_search_internal (count, dir, schar)
-     int count, dir, schar;
+rl_save_state (sp)
+     struct readline_state *sp;
 {
-  int pos, inc;
-
-  pos = rl_point;
-  inc = (dir < 0) ? -1 : 1;
-  while (count)
-    {
-      if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end))
-	{
-	  ding ();
-	  return -1;
-	}
-
-      pos += inc;
-      do
-	{
-	  if (rl_line_buffer[pos] == schar)
-	    {
-	      count--;
-	      if (dir < 0)
-	        rl_point = (dir == BTO) ? pos + 1 : pos;
-	      else
-		rl_point = (dir == FTO) ? pos - 1 : pos;
-	      break;
-	    }
-	}
-      while ((dir < 0) ? pos-- : ++pos < rl_end);
-    }
-  return (0);
-}
-
-/* Search COUNT times for a character read from the current input stream.
-   FDIR is the direction to search if COUNT is non-negative; otherwise
-   the search goes in BDIR. */
-static int
-_rl_char_search (count, fdir, bdir)
-     int count, fdir, bdir;
-{
-  int c;
-
-  c = rl_read_key ();
-  if (count < 0)
-    return (_rl_char_search_internal (-count, bdir, c));
-  else
-    return (_rl_char_search_internal (count, fdir, c));
-}
-
-int
-rl_char_search (count, key)
-     int count, key;
-{
-  return (_rl_char_search (count, FFIND, BFIND));
-}
-
-int
-rl_backward_char_search (count, key)
-     int count, key;
-{
-  return (_rl_char_search (count, BFIND, FFIND));
-}
-
-/* **************************************************************** */
-/*								    */
-/*			History Utilities			    */
-/*								    */
-/* **************************************************************** */
-
-/* We already have a history library, and that is what we use to control
-   the history features of readline.  This is our local interface to
-   the history mechanism. */
-
-/* While we are editing the history, this is the saved
-   version of the original line. */
-HIST_ENTRY *saved_line_for_history = (HIST_ENTRY *)NULL;
-
-/* Set the history pointer back to the last entry in the history. */
-static void
-start_using_history ()
-{
-  using_history ();
-  if (saved_line_for_history)
-    _rl_free_history_entry (saved_line_for_history);
-
-  saved_line_for_history = (HIST_ENTRY *)NULL;
-}
-
-/* Free the contents (and containing structure) of a HIST_ENTRY. */
-void
-_rl_free_history_entry (entry)
-     HIST_ENTRY *entry;
-{
-  if (entry == 0)
-    return;
-  if (entry->line)
-    free (entry->line);
-  free (entry);
-}
-
-/* Perhaps put back the current line if it has changed. */
-int
-maybe_replace_line ()
-{
-  HIST_ENTRY *temp;
-
-  temp = current_history ();
-  /* If the current line has changed, save the changes. */
-  if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list))
-    {
-      temp = replace_history_entry (where_history (), the_line, (histdata_t)rl_undo_list);
-      free (temp->line);
-      free (temp);
-    }
-  return 0;
-}
-
-/* Put back the saved_line_for_history if there is one. */
-int
-maybe_unsave_line ()
-{
-  int line_len;
-
-  if (saved_line_for_history)
-    {
-      line_len = strlen (saved_line_for_history->line);
-
-      if (line_len >= rl_line_buffer_len)
-	rl_extend_line_buffer (line_len);
-
-      strcpy (the_line, saved_line_for_history->line);
-      rl_undo_list = (UNDO_LIST *)saved_line_for_history->data;
-      _rl_free_history_entry (saved_line_for_history);
-      saved_line_for_history = (HIST_ENTRY *)NULL;
-      rl_end = rl_point = strlen (the_line);
-    }
-  else
-    ding ();
-  return 0;
-}
-
-/* Save the current line in saved_line_for_history. */
-int
-maybe_save_line ()
-{
-  if (saved_line_for_history == 0)
-    {
-      saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
-      saved_line_for_history->line = savestring (the_line);
-      saved_line_for_history->data = (char *)rl_undo_list;
-    }
-  return 0;
-}
-
-/* **************************************************************** */
-/*								    */
-/*			History Commands			    */
-/*								    */
-/* **************************************************************** */
-
-/* Meta-< goes to the start of the history. */
-int
-rl_beginning_of_history (count, key)
-     int count, key;
-{
-  return (rl_get_previous_history (1 + where_history (), key));
-}
-
-/* Meta-> goes to the end of the history.  (The current line). */
-int
-rl_end_of_history (count, key)
-     int count, key;
-{
-  maybe_replace_line ();
-  using_history ();
-  maybe_unsave_line ();
-  return 0;
-}
-
-/* Move down to the next history line. */
-int
-rl_get_next_history (count, key)
-     int count, key;
-{
-  HIST_ENTRY *temp;
-  int line_len;
-
-  if (count < 0)
-    return (rl_get_previous_history (-count, key));
-
-  if (count == 0)
-    return 0;
-
-  maybe_replace_line ();
-
-  temp = (HIST_ENTRY *)NULL;
-  while (count)
-    {
-      temp = next_history ();
-      if (!temp)
-	break;
-      --count;
-    }
-
-  if (temp == 0)
-    maybe_unsave_line ();
-  else
-    {
-      line_len = strlen (temp->line);
-
-      if (line_len >= rl_line_buffer_len)
-	rl_extend_line_buffer (line_len);
-
-      strcpy (the_line, temp->line);
-      rl_undo_list = (UNDO_LIST *)temp->data;
-      rl_end = rl_point = strlen (the_line);
-#if defined (VI_MODE)
-      if (rl_editing_mode == vi_mode)
-	rl_point = 0;
-#endif /* VI_MODE */
-    }
-  return 0;
-}
-
-/* Get the previous item out of our interactive history, making it the current
-   line.  If there is no previous history, just ding. */
-int
-rl_get_previous_history (count, key)
-     int count, key;
-{
-  HIST_ENTRY *old_temp, *temp;
-  int line_len;
-
-  if (count < 0)
-    return (rl_get_next_history (-count, key));
-
-  if (count == 0)
-    return 0;
-
-  /* If we don't have a line saved, then save this one. */
-  maybe_save_line ();
-
-  /* If the current line has changed, save the changes. */
-  maybe_replace_line ();
-
-  temp = old_temp = (HIST_ENTRY *)NULL;
-  while (count)
-    {
-      temp = previous_history ();
-      if (temp == 0)
-	break;
-
-      old_temp = temp;
-      --count;
-    }
-
-  /* If there was a large argument, and we moved back to the start of the
-     history, that is not an error.  So use the last value found. */
-  if (!temp && old_temp)
-    temp = old_temp;
-
-  if (temp == 0)
-    ding ();
-  else
-    {
-      line_len = strlen (temp->line);
-
-      if (line_len >= rl_line_buffer_len)
-	rl_extend_line_buffer (line_len);
-
-      strcpy (the_line, temp->line);
-      rl_undo_list = (UNDO_LIST *)temp->data;
-      rl_end = rl_point = line_len;
-
-#if defined (VI_MODE)
-      if (rl_editing_mode == vi_mode)
-	rl_point = 0;
-#endif /* VI_MODE */
-    }
-  return 0;
-}
-
-/* **************************************************************** */
-/*								    */
-/*		   The Mark and the Region.			    */
-/*								    */
-/* **************************************************************** */
-
-/* Set the mark at POSITION. */
-int
-_rl_set_mark_at_pos (position)
-     int position;
-{
-  if (position > rl_end)
+  if (sp == 0)
     return -1;
 
-  rl_mark = position;
-  return 0;
-}
+  sp->point = rl_point;
+  sp->end = rl_end;
+  sp->mark = rl_mark;
+  sp->buffer = rl_line_buffer;
+  sp->buflen = rl_line_buffer_len;
+  sp->ul = rl_undo_list;
+  sp->prompt = rl_prompt;
 
-/* A bindable command to set the mark. */
-int
-rl_set_mark (count, key)
-     int count, key;
-{
-  return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
-}
+  sp->rlstate = rl_readline_state;
+  sp->done = rl_done;
+  sp->kmap = _rl_keymap;
 
-/* Exchange the position of mark and point. */
-int
-rl_exchange_point_and_mark (count, key)
-     int count, key;
-{
-  if (rl_mark > rl_end)
-    rl_mark = -1;
+  sp->lastfunc = rl_last_func;
+  sp->insmode = rl_insert_mode;
+  sp->edmode = rl_editing_mode;
+  sp->kseqlen = rl_key_sequence_length;
+  sp->inf = rl_instream;
+  sp->outf = rl_outstream;
+  sp->pendingin = rl_pending_input;
+  sp->macro = rl_executing_macro;
 
-  if (rl_mark == -1)
-    {
-      ding ();
-      return -1;
-    }
-  else
-    SWAP (rl_point, rl_mark);
+  sp->catchsigs = rl_catch_signals;
+  sp->catchsigwinch = rl_catch_sigwinch;
 
-  return 0;
-}
-
-/* **************************************************************** */
-/*								    */
-/*			    Editing Modes			    */
-/*								    */
-/* **************************************************************** */
-/* How to toggle back and forth between editing modes. */
-int
-rl_vi_editing_mode (count, key)
-     int count, key;
-{
-#if defined (VI_MODE)
-  rl_editing_mode = vi_mode;
-  rl_vi_insertion_mode (1, key);
-#endif /* VI_MODE */
-  return 0;
+  return (0);
 }
 
 int
-rl_emacs_editing_mode (count, key)
-     int count, key;
+rl_restore_state (sp)
+     struct readline_state *sp;
 {
-  rl_editing_mode = emacs_mode;
-  _rl_keymap = emacs_standard_keymap;
-  return 0;
+  if (sp == 0)
+    return -1;
+
+  rl_point = sp->point;
+  rl_end = sp->end;
+  rl_mark = sp->mark;
+  the_line = rl_line_buffer = sp->buffer;
+  rl_line_buffer_len = sp->buflen;
+  rl_undo_list = sp->ul;
+  rl_prompt = sp->prompt;
+
+  rl_readline_state = sp->rlstate;
+  rl_done = sp->done;
+  _rl_keymap = sp->kmap;
+
+  rl_last_func = sp->lastfunc;
+  rl_insert_mode = sp->insmode;
+  rl_editing_mode = sp->edmode;
+  rl_key_sequence_length = sp->kseqlen;
+  rl_instream = sp->inf;
+  rl_outstream = sp->outf;
+  rl_pending_input = sp->pendingin;
+  rl_executing_macro = sp->macro;
+
+  rl_catch_signals = sp->catchsigs;
+  rl_catch_sigwinch = sp->catchsigwinch;
+
+  return (0);
 }
diff --git a/readline/readline.h b/readline/readline.h
index 97c62fd..f11b3d0 100644
--- a/readline/readline.h
+++ b/readline/readline.h
@@ -29,14 +29,21 @@
 
 #if defined (READLINE_LIBRARY)
 #  include "rlstdc.h"
+#  include "rltypedefs.h"
 #  include "keymaps.h"
 #  include "tilde.h"
 #else
 #  include <readline/rlstdc.h>
+#  include <readline/rltypedefs.h>
 #  include <readline/keymaps.h>
 #  include <readline/tilde.h>
 #endif
 
+/* Hex-encoded Readline version number. */
+#define RL_READLINE_VERSION	0x0403		/* Readline 4.3 */
+#define RL_VERSION_MAJOR	4
+#define RL_VERSION_MINOR	3
+
 /* Readline data structures. */
 
 /* Maintaining the state of undo.  We remember individual deletes and inserts
@@ -60,8 +67,8 @@
 
 /* The data structure for mapping textual names to code addresses. */
 typedef struct _funmap {
-  char *name;
-  Function *function;
+  const char *name;
+  rl_command_func_t *function;
 } FUNMAP;
 
 extern FUNMAP **funmap;
@@ -73,184 +80,191 @@
 /* **************************************************************** */
 
 /* Bindable commands for numeric arguments. */
-extern int rl_digit_argument __P((int, int));
-extern int rl_universal_argument __P((int, int));
+extern int rl_digit_argument PARAMS((int, int));
+extern int rl_universal_argument PARAMS((int, int));
 
 /* Bindable commands for moving the cursor. */
-extern int rl_forward __P((int, int));
-extern int rl_backward __P((int, int));
-extern int rl_beg_of_line __P((int, int));
-extern int rl_end_of_line __P((int, int));
-extern int rl_forward_word __P((int, int));
-extern int rl_backward_word __P((int, int));
-extern int rl_refresh_line __P((int, int));
-extern int rl_clear_screen __P((int, int));
-extern int rl_arrow_keys __P((int, int));
+extern int rl_forward_byte PARAMS((int, int));
+extern int rl_forward_char PARAMS((int, int));
+extern int rl_forward PARAMS((int, int));
+extern int rl_backward_byte PARAMS((int, int));
+extern int rl_backward_char PARAMS((int, int));
+extern int rl_backward PARAMS((int, int));
+extern int rl_beg_of_line PARAMS((int, int));
+extern int rl_end_of_line PARAMS((int, int));
+extern int rl_forward_word PARAMS((int, int));
+extern int rl_backward_word PARAMS((int, int));
+extern int rl_refresh_line PARAMS((int, int));
+extern int rl_clear_screen PARAMS((int, int));
+extern int rl_arrow_keys PARAMS((int, int));
 
 /* Bindable commands for inserting and deleting text. */
-extern int rl_insert __P((int, int));
-extern int rl_quoted_insert __P((int, int));
-extern int rl_tab_insert __P((int, int));
-extern int rl_newline __P((int, int));
-extern int rl_do_lowercase_version __P((int, int));
-extern int rl_rubout __P((int, int));
-extern int rl_delete __P((int, int));
-extern int rl_rubout_or_delete __P((int, int));
-extern int rl_delete_horizontal_space __P((int, int));
-extern int rl_delete_or_show_completions __P((int, int));
-extern int rl_insert_comment __P((int, int));
+extern int rl_insert PARAMS((int, int));
+extern int rl_quoted_insert PARAMS((int, int));
+extern int rl_tab_insert PARAMS((int, int));
+extern int rl_newline PARAMS((int, int));
+extern int rl_do_lowercase_version PARAMS((int, int));
+extern int rl_rubout PARAMS((int, int));
+extern int rl_delete PARAMS((int, int));
+extern int rl_rubout_or_delete PARAMS((int, int));
+extern int rl_delete_horizontal_space PARAMS((int, int));
+extern int rl_delete_or_show_completions PARAMS((int, int));
+extern int rl_insert_comment PARAMS((int, int));
 
 /* Bindable commands for changing case. */
-extern int rl_upcase_word __P((int, int));
-extern int rl_downcase_word __P((int, int));
-extern int rl_capitalize_word __P((int, int));
+extern int rl_upcase_word PARAMS((int, int));
+extern int rl_downcase_word PARAMS((int, int));
+extern int rl_capitalize_word PARAMS((int, int));
 
 /* Bindable commands for transposing characters and words. */
-extern int rl_transpose_words __P((int, int));
-extern int rl_transpose_chars __P((int, int));
+extern int rl_transpose_words PARAMS((int, int));
+extern int rl_transpose_chars PARAMS((int, int));
 
 /* Bindable commands for searching within a line. */
-extern int rl_char_search __P((int, int));
-extern int rl_backward_char_search __P((int, int));
+extern int rl_char_search PARAMS((int, int));
+extern int rl_backward_char_search PARAMS((int, int));
 
 /* Bindable commands for readline's interface to the command history. */
-extern int rl_beginning_of_history __P((int, int));
-extern int rl_end_of_history __P((int, int));
-extern int rl_get_next_history __P((int, int));
-extern int rl_get_previous_history __P((int, int));
+extern int rl_beginning_of_history PARAMS((int, int));
+extern int rl_end_of_history PARAMS((int, int));
+extern int rl_get_next_history PARAMS((int, int));
+extern int rl_get_previous_history PARAMS((int, int));
 
 /* Bindable commands for managing the mark and region. */
-extern int rl_set_mark __P((int, int));
-extern int rl_exchange_point_and_mark __P((int, int));
+extern int rl_set_mark PARAMS((int, int));
+extern int rl_exchange_point_and_mark PARAMS((int, int));
 
 /* Bindable commands to set the editing mode (emacs or vi). */
-extern int rl_vi_editing_mode __P((int, int));
-extern int rl_emacs_editing_mode __P((int, int));
+extern int rl_vi_editing_mode PARAMS((int, int));
+extern int rl_emacs_editing_mode PARAMS((int, int));
+
+/* Bindable commands to change the insert mode (insert or overwrite) */
+extern int rl_overwrite_mode PARAMS((int, int));
 
 /* Bindable commands for managing key bindings. */
-extern int rl_re_read_init_file __P((int, int));
-extern int rl_dump_functions __P((int, int));
-extern int rl_dump_macros __P((int, int));
-extern int rl_dump_variables __P((int, int));
+extern int rl_re_read_init_file PARAMS((int, int));
+extern int rl_dump_functions PARAMS((int, int));
+extern int rl_dump_macros PARAMS((int, int));
+extern int rl_dump_variables PARAMS((int, int));
 
 /* Bindable commands for word completion. */
-extern int rl_complete __P((int, int));
-extern int rl_possible_completions __P((int, int));
-extern int rl_insert_completions __P((int, int));
-extern int rl_menu_complete __P((int, int));
+extern int rl_complete PARAMS((int, int));
+extern int rl_possible_completions PARAMS((int, int));
+extern int rl_insert_completions PARAMS((int, int));
+extern int rl_menu_complete PARAMS((int, int));
 
 /* Bindable commands for killing and yanking text, and managing the kill ring. */
-extern int rl_kill_word __P((int, int));
-extern int rl_backward_kill_word __P((int, int));
-extern int rl_kill_line __P((int, int));
-extern int rl_backward_kill_line __P((int, int));
-extern int rl_kill_full_line __P((int, int));
-extern int rl_unix_word_rubout __P((int, int));
-extern int rl_unix_line_discard __P((int, int));
-extern int rl_copy_region_to_kill __P((int, int));
-extern int rl_kill_region __P((int, int));
-extern int rl_copy_forward_word __P((int, int));
-extern int rl_copy_backward_word __P((int, int));
-extern int rl_yank __P((int, int));
-extern int rl_yank_pop __P((int, int));
-extern int rl_yank_nth_arg __P((int, int));
-extern int rl_yank_last_arg __P((int, int));
-/* Not available unless __CYGWIN32__ is defined. */
-#ifdef __CYGWIN32__
-extern int rl_paste_from_clipboard __P((int, int));
+extern int rl_kill_word PARAMS((int, int));
+extern int rl_backward_kill_word PARAMS((int, int));
+extern int rl_kill_line PARAMS((int, int));
+extern int rl_backward_kill_line PARAMS((int, int));
+extern int rl_kill_full_line PARAMS((int, int));
+extern int rl_unix_word_rubout PARAMS((int, int));
+extern int rl_unix_line_discard PARAMS((int, int));
+extern int rl_copy_region_to_kill PARAMS((int, int));
+extern int rl_kill_region PARAMS((int, int));
+extern int rl_copy_forward_word PARAMS((int, int));
+extern int rl_copy_backward_word PARAMS((int, int));
+extern int rl_yank PARAMS((int, int));
+extern int rl_yank_pop PARAMS((int, int));
+extern int rl_yank_nth_arg PARAMS((int, int));
+extern int rl_yank_last_arg PARAMS((int, int));
+/* Not available unless __CYGWIN__ is defined. */
+#ifdef __CYGWIN__
+extern int rl_paste_from_clipboard PARAMS((int, int));
 #endif
 
 /* Bindable commands for incremental searching. */
-extern int rl_reverse_search_history __P((int, int));
-extern int rl_forward_search_history __P((int, int));
+extern int rl_reverse_search_history PARAMS((int, int));
+extern int rl_forward_search_history PARAMS((int, int));
 
 /* Bindable keyboard macro commands. */
-extern int rl_start_kbd_macro __P((int, int));
-extern int rl_end_kbd_macro __P((int, int));
-extern int rl_call_last_kbd_macro __P((int, int));
+extern int rl_start_kbd_macro PARAMS((int, int));
+extern int rl_end_kbd_macro PARAMS((int, int));
+extern int rl_call_last_kbd_macro PARAMS((int, int));
 
 /* Bindable undo commands. */
-extern int rl_revert_line __P((int, int));
-extern int rl_undo_command __P((int, int));
+extern int rl_revert_line PARAMS((int, int));
+extern int rl_undo_command PARAMS((int, int));
 
 /* Bindable tilde expansion commands. */
-extern int rl_tilde_expand __P((int, int));
+extern int rl_tilde_expand PARAMS((int, int));
 
 /* Bindable terminal control commands. */
-extern int rl_restart_output __P((int, int));
-extern int rl_stop_output __P((int, int));
+extern int rl_restart_output PARAMS((int, int));
+extern int rl_stop_output PARAMS((int, int));
 
 /* Miscellaneous bindable commands. */
-extern int rl_abort __P((int, int));
-extern int rl_tty_status __P((int, int));
+extern int rl_abort PARAMS((int, int));
+extern int rl_tty_status PARAMS((int, int));
 
 /* Bindable commands for incremental and non-incremental history searching. */
-extern int rl_history_search_forward __P((int, int));
-extern int rl_history_search_backward __P((int, int));
-extern int rl_noninc_forward_search __P((int, int));
-extern int rl_noninc_reverse_search __P((int, int));
-extern int rl_noninc_forward_search_again __P((int, int));
-extern int rl_noninc_reverse_search_again __P((int, int));
+extern int rl_history_search_forward PARAMS((int, int));
+extern int rl_history_search_backward PARAMS((int, int));
+extern int rl_noninc_forward_search PARAMS((int, int));
+extern int rl_noninc_reverse_search PARAMS((int, int));
+extern int rl_noninc_forward_search_again PARAMS((int, int));
+extern int rl_noninc_reverse_search_again PARAMS((int, int));
 
 /* Bindable command used when inserting a matching close character. */
-extern int rl_insert_close __P((int, int));
+extern int rl_insert_close PARAMS((int, int));
 
 /* Not available unless READLINE_CALLBACKS is defined. */
-extern void rl_callback_handler_install __P((char *, VFunction *));
-extern void rl_callback_read_char __P((void));
-extern void rl_callback_handler_remove __P((void));
+extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *));
+extern void rl_callback_read_char PARAMS((void));
+extern void rl_callback_handler_remove PARAMS((void));
 
 /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */
 /* VI-mode bindable commands. */
-extern int rl_vi_redo __P((int, int));
-extern int rl_vi_undo __P((int, int));
-extern int rl_vi_yank_arg __P((int, int));
-extern int rl_vi_fetch_history __P((int, int));
-extern int rl_vi_search_again __P((int, int));
-extern int rl_vi_search __P((int, int));
-extern int rl_vi_complete __P((int, int));
-extern int rl_vi_tilde_expand __P((int, int));
-extern int rl_vi_prev_word __P((int, int));
-extern int rl_vi_next_word __P((int, int));
-extern int rl_vi_end_word __P((int, int));
-extern int rl_vi_insert_beg __P((int, int));
-extern int rl_vi_append_mode __P((int, int));
-extern int rl_vi_append_eol __P((int, int));
-extern int rl_vi_eof_maybe __P((int, int));
-extern int rl_vi_insertion_mode __P((int, int));
-extern int rl_vi_movement_mode __P((int, int));
-extern int rl_vi_arg_digit __P((int, int));
-extern int rl_vi_change_case __P((int, int));
-extern int rl_vi_put __P((int, int));
-extern int rl_vi_column __P((int, int));
-extern int rl_vi_delete_to __P((int, int));
-extern int rl_vi_change_to __P((int, int));
-extern int rl_vi_yank_to __P((int, int));
-extern int rl_vi_delete __P((int, int));
-extern int rl_vi_back_to_indent __P((int, int));
-extern int rl_vi_first_print __P((int, int));
-extern int rl_vi_char_search __P((int, int));
-extern int rl_vi_match __P((int, int));
-extern int rl_vi_change_char __P((int, int));
-extern int rl_vi_subst __P((int, int));
-extern int rl_vi_overstrike __P((int, int));
-extern int rl_vi_overstrike_delete __P((int, int));
-extern int rl_vi_replace __P((int, int));
-extern int rl_vi_set_mark __P((int, int));
-extern int rl_vi_goto_mark __P((int, int));
+extern int rl_vi_redo PARAMS((int, int));
+extern int rl_vi_undo PARAMS((int, int));
+extern int rl_vi_yank_arg PARAMS((int, int));
+extern int rl_vi_fetch_history PARAMS((int, int));
+extern int rl_vi_search_again PARAMS((int, int));
+extern int rl_vi_search PARAMS((int, int));
+extern int rl_vi_complete PARAMS((int, int));
+extern int rl_vi_tilde_expand PARAMS((int, int));
+extern int rl_vi_prev_word PARAMS((int, int));
+extern int rl_vi_next_word PARAMS((int, int));
+extern int rl_vi_end_word PARAMS((int, int));
+extern int rl_vi_insert_beg PARAMS((int, int));
+extern int rl_vi_append_mode PARAMS((int, int));
+extern int rl_vi_append_eol PARAMS((int, int));
+extern int rl_vi_eof_maybe PARAMS((int, int));
+extern int rl_vi_insertion_mode PARAMS((int, int));
+extern int rl_vi_movement_mode PARAMS((int, int));
+extern int rl_vi_arg_digit PARAMS((int, int));
+extern int rl_vi_change_case PARAMS((int, int));
+extern int rl_vi_put PARAMS((int, int));
+extern int rl_vi_column PARAMS((int, int));
+extern int rl_vi_delete_to PARAMS((int, int));
+extern int rl_vi_change_to PARAMS((int, int));
+extern int rl_vi_yank_to PARAMS((int, int));
+extern int rl_vi_delete PARAMS((int, int));
+extern int rl_vi_back_to_indent PARAMS((int, int));
+extern int rl_vi_first_print PARAMS((int, int));
+extern int rl_vi_char_search PARAMS((int, int));
+extern int rl_vi_match PARAMS((int, int));
+extern int rl_vi_change_char PARAMS((int, int));
+extern int rl_vi_subst PARAMS((int, int));
+extern int rl_vi_overstrike PARAMS((int, int));
+extern int rl_vi_overstrike_delete PARAMS((int, int));
+extern int rl_vi_replace PARAMS((int, int));
+extern int rl_vi_set_mark PARAMS((int, int));
+extern int rl_vi_goto_mark PARAMS((int, int));
 
 /* VI-mode utility functions. */
-extern int rl_vi_check __P((void));
-extern int rl_vi_domove __P((int, int *));
-extern int rl_vi_bracktype __P((int));
+extern int rl_vi_check PARAMS((void));
+extern int rl_vi_domove PARAMS((int, int *));
+extern int rl_vi_bracktype PARAMS((int));
 
 /* VI-mode pseudo-bindable commands, used as utility functions. */
-extern int rl_vi_fWord __P((int, int));
-extern int rl_vi_bWord __P((int, int));
-extern int rl_vi_eWord __P((int, int));
-extern int rl_vi_fword __P((int, int));
-extern int rl_vi_bword __P((int, int));
-extern int rl_vi_eword __P((int, int));
+extern int rl_vi_fWord PARAMS((int, int));
+extern int rl_vi_bWord PARAMS((int, int));
+extern int rl_vi_eWord PARAMS((int, int));
+extern int rl_vi_fword PARAMS((int, int));
+extern int rl_vi_bword PARAMS((int, int));
+extern int rl_vi_eword PARAMS((int, int));
 
 /* **************************************************************** */
 /*								    */
@@ -260,142 +274,176 @@
 
 /* Readline functions. */
 /* Read a line of input.  Prompt with PROMPT.  A NULL PROMPT means none. */
-extern char *readline __P((char *));
+extern char *readline PARAMS((const char *));
 
-extern int rl_initialize __P((void));
+extern int rl_set_prompt PARAMS((const char *));
+extern int rl_expand_prompt PARAMS((char *));
 
-extern int rl_discard_argument __P((void));
+extern int rl_initialize PARAMS((void));
+
+/* Undocumented; unused by readline */
+extern int rl_discard_argument PARAMS((void));
 
 /* Utility functions to bind keys to readline commands. */
-extern int rl_add_defun __P((char *, Function *, int));
-extern int rl_bind_key __P((int, Function *));
-extern int rl_bind_key_in_map __P((int, Function *, Keymap));
-extern int rl_unbind_key __P((int));
-extern int rl_unbind_key_in_map __P((int, Keymap));
-extern int rl_unbind_function_in_map __P((Function *, Keymap));
-extern int rl_unbind_command_in_map __P((char *, Keymap));
-extern int rl_set_key __P((char *, Function *, Keymap));
-extern int rl_generic_bind __P((int, char *, char *, Keymap));
-extern int rl_variable_bind __P((char *, char *));
+extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int));
+extern int rl_bind_key PARAMS((int, rl_command_func_t *));
+extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap));
+extern int rl_unbind_key PARAMS((int));
+extern int rl_unbind_key_in_map PARAMS((int, Keymap));
+extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap));
+extern int rl_unbind_command_in_map PARAMS((const char *, Keymap));
+extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap));
+extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap));
+extern int rl_variable_bind PARAMS((const char *, const char *));
 
 /* Backwards compatibility, use rl_generic_bind instead. */
-extern int rl_macro_bind __P((char *, char *, Keymap));
+extern int rl_macro_bind PARAMS((const char *, const char *, Keymap));
 
 /* Undocumented in the texinfo manual; not really useful to programs. */
-extern int rl_translate_keyseq __P((char *, char *, int *));
-extern char *rl_untranslate_keyseq __P((int));
+extern int rl_translate_keyseq PARAMS((const char *, char *, int *));
+extern char *rl_untranslate_keyseq PARAMS((int));
 
-extern Function *rl_named_function __P((char *));
-extern Function *rl_function_of_keyseq __P((char *, Keymap, int *));
+extern rl_command_func_t *rl_named_function PARAMS((const char *));
+extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *));
 
-extern void rl_list_funmap_names __P((void));
-extern char **rl_invoking_keyseqs_in_map __P((Function *, Keymap));
-extern char **rl_invoking_keyseqs __P((Function *));
+extern void rl_list_funmap_names PARAMS((void));
+extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap));
+extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *));
  
-extern void rl_function_dumper __P((int));
-extern void rl_macro_dumper __P((int));
-extern void rl_variable_dumper __P((int));
+extern void rl_function_dumper PARAMS((int));
+extern void rl_macro_dumper PARAMS((int));
+extern void rl_variable_dumper PARAMS((int));
 
-extern int rl_read_init_file __P((char *));
-extern int rl_parse_and_bind __P((char *));
+extern int rl_read_init_file PARAMS((const char *));
+extern int rl_parse_and_bind PARAMS((char *));
 
 /* Functions for manipulating keymaps. */
-extern Keymap rl_make_bare_keymap __P((void));
-extern Keymap rl_copy_keymap __P((Keymap));
-extern Keymap rl_make_keymap __P((void));
-extern void rl_discard_keymap __P((Keymap));
+extern Keymap rl_make_bare_keymap PARAMS((void));
+extern Keymap rl_copy_keymap PARAMS((Keymap));
+extern Keymap rl_make_keymap PARAMS((void));
+extern void rl_discard_keymap PARAMS((Keymap));
 
-extern Keymap rl_get_keymap_by_name __P((char *));
-extern char *rl_get_keymap_name __P((Keymap));
-extern void rl_set_keymap __P((Keymap));
-extern Keymap rl_get_keymap __P((void));
-extern void rl_set_keymap_from_edit_mode __P((void));
-extern char *rl_get_keymap_name_from_edit_mode __P((void));
+extern Keymap rl_get_keymap_by_name PARAMS((const char *));
+extern char *rl_get_keymap_name PARAMS((Keymap));
+extern void rl_set_keymap PARAMS((Keymap));
+extern Keymap rl_get_keymap PARAMS((void));
+/* Undocumented; used internally only. */
+extern void rl_set_keymap_from_edit_mode PARAMS((void));
+extern char *rl_get_keymap_name_from_edit_mode PARAMS((void));
 
 /* Functions for manipulating the funmap, which maps command names to functions. */
-extern int rl_add_funmap_entry __P((char *, Function *));
-extern void rl_initialize_funmap __P((void));
-extern char **rl_funmap_names __P((void));
+extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *));
+extern const char **rl_funmap_names PARAMS((void));
+/* Undocumented, only used internally -- there is only one funmap, and this
+   function may be called only once. */
+extern void rl_initialize_funmap PARAMS((void));
 
 /* Utility functions for managing keyboard macros. */
-extern void rl_push_macro_input __P((char *));
+extern void rl_push_macro_input PARAMS((char *));
 
 /* Functions for undoing, from undo.c */
-extern void rl_add_undo __P((enum undo_code, int, int, char *));
-extern void free_undo_list __P((void));
-extern int rl_do_undo __P((void));
-extern int rl_begin_undo_group __P((void));
-extern int rl_end_undo_group __P((void));
-extern int rl_modifying __P((int, int));
+extern void rl_add_undo PARAMS((enum undo_code, int, int, char *));
+extern void rl_free_undo_list PARAMS((void));
+extern int rl_do_undo PARAMS((void));
+extern int rl_begin_undo_group PARAMS((void));
+extern int rl_end_undo_group PARAMS((void));
+extern int rl_modifying PARAMS((int, int));
 
 /* Functions for redisplay. */
-extern void rl_redisplay __P((void));
-extern int rl_on_new_line __P((void));
-extern int rl_on_new_line_with_prompt __P((void));
-extern int rl_forced_update_display __P((void));
-extern int rl_clear_message __P((void));
-extern int rl_reset_line_state __P((void));
+extern void rl_redisplay PARAMS((void));
+extern int rl_on_new_line PARAMS((void));
+extern int rl_on_new_line_with_prompt PARAMS((void));
+extern int rl_forced_update_display PARAMS((void));
+extern int rl_clear_message PARAMS((void));
+extern int rl_reset_line_state PARAMS((void));
+extern int rl_crlf PARAMS((void));
 
 #if (defined (__STDC__) || defined (__cplusplus)) && defined (USE_VARARGS) && defined (PREFER_STDARG)
-extern int rl_message (const char *, ...);
+extern int rl_message (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
 #else
 extern int rl_message ();
 #endif
 
+extern int rl_show_char PARAMS((int));
+
 /* Undocumented in texinfo manual. */
-extern int rl_show_char __P((int));
-extern int rl_character_len __P((int, int));
-extern int crlf __P((void));
+extern int rl_character_len PARAMS((int, int));
 
 /* Save and restore internal prompt redisplay information. */
-extern void rl_save_prompt __P((void));
-extern void rl_restore_prompt __P((void));
+extern void rl_save_prompt PARAMS((void));
+extern void rl_restore_prompt PARAMS((void));
 
 /* Modifying text. */
-extern int rl_insert_text __P((char *));
-extern int rl_delete_text __P((int, int));
-extern int rl_kill_text __P((int, int));
-extern char *rl_copy_text __P((int, int));
+extern void rl_replace_line PARAMS((const char *, int));
+extern int rl_insert_text PARAMS((const char *));
+extern int rl_delete_text PARAMS((int, int));
+extern int rl_kill_text PARAMS((int, int));
+extern char *rl_copy_text PARAMS((int, int));
 
 /* Terminal and tty mode management. */
-extern void rl_prep_terminal __P((int));
-extern void rl_deprep_terminal __P((void));
-extern void rltty_set_default_bindings __P((Keymap));
+extern void rl_prep_terminal PARAMS((int));
+extern void rl_deprep_terminal PARAMS((void));
+extern void rl_tty_set_default_bindings PARAMS((Keymap));
 
-extern int rl_reset_terminal __P((char *));
-extern void rl_resize_terminal __P((void));
+extern int rl_reset_terminal PARAMS((const char *));
+extern void rl_resize_terminal PARAMS((void));
+extern void rl_set_screen_size PARAMS((int, int));
+extern void rl_get_screen_size PARAMS((int *, int *));
 
-/* `Public' utility functions . */
-extern void rl_extend_line_buffer __P((int));
-extern int ding __P((void));
+extern char *rl_get_termcap PARAMS((const char *));
 
 /* Functions for character input. */
-extern int rl_stuff_char __P((int));
-extern int rl_execute_next __P((int));
-extern int rl_read_key __P((void));
-extern int rl_getc __P((FILE *));
+extern int rl_stuff_char PARAMS((int));
+extern int rl_execute_next PARAMS((int));
+extern int rl_clear_pending_input PARAMS((void));
+extern int rl_read_key PARAMS((void));
+extern int rl_getc PARAMS((FILE *));
+extern int rl_set_keyboard_input_timeout PARAMS((int));
+
+/* `Public' utility functions . */
+extern void rl_extend_line_buffer PARAMS((int));
+extern int rl_ding PARAMS((void));
+extern int rl_alphabetic PARAMS((int));
 
 /* Readline signal handling, from signals.c */
-extern int rl_set_signals __P((void));
-extern int rl_clear_signals __P((void));
-extern void rl_cleanup_after_signal __P((void));
-extern void rl_reset_after_signal __P((void));
-extern void rl_free_line_state __P((void));
+extern int rl_set_signals PARAMS((void));
+extern int rl_clear_signals PARAMS((void));
+extern void rl_cleanup_after_signal PARAMS((void));
+extern void rl_reset_after_signal PARAMS((void));
+extern void rl_free_line_state PARAMS((void));
  
-/* Undocumented. */
-extern int rl_expand_prompt __P((char *));
+extern int rl_set_paren_blink_timeout PARAMS((int));
 
-extern int maybe_save_line __P((void));
-extern int maybe_unsave_line __P((void));
-extern int maybe_replace_line __P((void));
+/* Undocumented. */
+extern int rl_maybe_save_line PARAMS((void));
+extern int rl_maybe_unsave_line PARAMS((void));
+extern int rl_maybe_replace_line PARAMS((void));
 
 /* Completion functions. */
-extern int rl_complete_internal __P((int));
-extern void rl_display_match_list __P((char **, int, int));
+extern int rl_complete_internal PARAMS((int));
+extern void rl_display_match_list PARAMS((char **, int, int));
 
-extern char **completion_matches __P((char *, CPFunction *));
-extern char *username_completion_function __P((char *, int));
-extern char *filename_completion_function __P((char *, int));
+extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
+extern char *rl_username_completion_function PARAMS((const char *, int));
+extern char *rl_filename_completion_function PARAMS((const char *, int));
+
+extern int rl_completion_mode PARAMS((rl_command_func_t *));
+
+#if 0
+/* Backwards compatibility (compat.c).  These will go away sometime. */
+extern void free_undo_list PARAMS((void));
+extern int maybe_save_line PARAMS((void));
+extern int maybe_unsave_line PARAMS((void));
+extern int maybe_replace_line PARAMS((void));
+
+extern int ding PARAMS((void));
+extern int alphabetic PARAMS((int));
+extern int crlf PARAMS((void));
+
+extern char **completion_matches PARAMS((char *, rl_compentry_func_t *));
+extern char *username_completion_function PARAMS((const char *, int));
+extern char *filename_completion_function PARAMS((const char *, int));
+#endif
 
 /* **************************************************************** */
 /*								    */
@@ -404,14 +452,26 @@
 /* **************************************************************** */
 
 /* The version of this incarnation of the readline library. */
-extern char *rl_library_version;
+extern const char *rl_library_version;		/* e.g., "4.2" */
+extern int rl_readline_version;			/* e.g., 0x0402 */
 
 /* True if this is real GNU readline. */
 extern int rl_gnu_readline_p;
 
+/* Flags word encapsulating the current readline state. */
+extern int rl_readline_state;
+
+/* Says which editing mode readline is currently using.  1 means emacs mode;
+   0 means vi mode. */
+extern int rl_editing_mode;
+
+/* Insert or overwrite mode for emacs mode.  1 means insert mode; 0 means
+   overwrite mode.  Reset to insert mode on each input line. */
+extern int rl_insert_mode;
+
 /* The name of the calling program.  You should initialize this to
    whatever was in argv[0].  It is used when parsing conditionals. */
-extern char *rl_readline_name;
+extern const char *rl_readline_name;
 
 /* The prompt readline uses.  This is set from the argument to
    readline (), and should not be assigned to directly. */
@@ -421,7 +481,8 @@
 extern char *rl_line_buffer;
 
 /* The location of point, and end. */
-extern int rl_point, rl_end;
+extern int rl_point;
+extern int rl_end;
 
 /* The mark, or saved cursor position. */
 extern int rl_mark;
@@ -438,29 +499,44 @@
    or directly from an application. */
 extern int rl_dispatching;
 
+/* Non-zero if the user typed a numeric argument before executing the
+   current function. */
+extern int rl_explicit_arg;
+
+/* The current value of the numeric argument specified by the user. */
+extern int rl_numeric_arg;
+
+/* The address of the last command function Readline executed. */
+extern rl_command_func_t *rl_last_func;
+
 /* The name of the terminal to use. */
-extern char *rl_terminal_name;
+extern const char *rl_terminal_name;
 
 /* The input and output streams. */
-extern FILE *rl_instream, *rl_outstream;
+extern FILE *rl_instream;
+extern FILE *rl_outstream;
 
 /* If non-zero, then this is the address of a function to call just
    before readline_internal () prints the first prompt. */
-extern Function *rl_startup_hook;
+extern rl_hook_func_t *rl_startup_hook;
 
 /* If non-zero, this is the address of a function to call just before
    readline_internal_setup () returns and readline_internal starts
    reading input characters. */
-extern Function *rl_pre_input_hook;
+extern rl_hook_func_t *rl_pre_input_hook;
       
 /* The address of a function to call periodically while Readline is
    awaiting character input, or NULL, for no event handling. */
-extern Function *rl_event_hook;
+extern rl_hook_func_t *rl_event_hook;
 
-extern Function *rl_getc_function;
-extern VFunction *rl_redisplay_function;
-extern VFunction *rl_prep_term_function;
-extern VFunction *rl_deprep_term_function;
+/* The address of the function to call to fetch a character from the current
+   Readline input stream */
+extern rl_getc_func_t *rl_getc_function;
+
+extern rl_voidfunc_t *rl_redisplay_function;
+
+extern rl_vintfunc_t *rl_prep_term_function;
+extern rl_voidfunc_t *rl_deprep_term_function;
 
 /* Dispatch variables. */
 extern Keymap rl_executing_keymap;
@@ -481,6 +557,9 @@
    up to a character bound to accept-line. */
 extern int rl_num_chars_to_read;
 
+/* The text of a currently-executing keyboard macro. */
+extern char *rl_executing_macro;
+
 /* Variables to control readline signal handling. */
 /* If non-zero, readline will install its own signal handlers for
    SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */
@@ -495,9 +574,9 @@
 
 /* Completion variables. */
 /* Pointer to the generator function for completion_matches ().
-   NULL means to use filename_entry_function (), the default filename
-   completer. */
-extern Function *rl_completion_entry_function;
+   NULL means to use rl_filename_completion_function (), the default
+   filename completer. */
+extern rl_compentry_func_t *rl_completion_entry_function;
 
 /* If rl_ignore_some_completions_function is non-NULL it is the address
    of a function to call after all of the possible matches have been
@@ -505,7 +584,7 @@
    The function is called with one argument; a NULL terminated array
    of (char *).  If your function removes any of the elements, they
    must be free()'ed. */
-extern Function *rl_ignore_some_completions_function;
+extern rl_compignore_func_t *rl_ignore_some_completions_function;
 
 /* Pointer to alternative function to create matches.
    Function is called with TEXT, START, and END.
@@ -514,39 +593,50 @@
    If this function exists and returns NULL then call the value of
    rl_completion_entry_function to try to match, otherwise use the
    array of strings returned. */
-extern CPPFunction *rl_attempted_completion_function;
+extern rl_completion_func_t *rl_attempted_completion_function;
 
 /* The basic list of characters that signal a break between words for the
    completer routine.  The initial contents of this variable is what
    breaks words in the shell, i.e. "n\"\\'`@$>". */
-extern char *rl_basic_word_break_characters;
+extern const char *rl_basic_word_break_characters;
 
 /* The list of characters that signal a break between words for
    rl_complete_internal.  The default list is the contents of
    rl_basic_word_break_characters.  */
-extern char *rl_completer_word_break_characters;
+extern const char *rl_completer_word_break_characters;
 
 /* List of characters which can be used to quote a substring of the line.
    Completion occurs on the entire substring, and within the substring   
    rl_completer_word_break_characters are treated as any other character,
    unless they also appear within this list. */
-extern char *rl_completer_quote_characters;
+extern const char *rl_completer_quote_characters;
 
 /* List of quote characters which cause a word break. */
-extern char *rl_basic_quote_characters;
+extern const char *rl_basic_quote_characters;
 
 /* List of characters that need to be quoted in filenames by the completer. */
-extern char *rl_filename_quote_characters;
+extern const char *rl_filename_quote_characters;
 
 /* List of characters that are word break characters, but should be left
    in TEXT when it is passed to the completion function.  The shell uses
    this to help determine what kind of completing to do. */
-extern char *rl_special_prefixes;
+extern const char *rl_special_prefixes;
 
 /* If non-zero, then this is the address of a function to call when
    completing on a directory name.  The function is called with
-   the address of a string (the current directory name) as an arg. */
-extern Function *rl_directory_completion_hook;
+   the address of a string (the current directory name) as an arg.  It
+   changes what is displayed when the possible completions are printed
+   or inserted. */
+extern rl_icppfunc_t *rl_directory_completion_hook;
+
+/* If non-zero, this is the address of a function to call when completing
+   a directory name.  This function takes the address of the directory name
+   to be modified as an argument.  Unlike rl_directory_completion_hook, it
+   only modifies the directory name used in opendir(2), not what is displayed
+   when the possible completions are printed or inserted.  It is called
+   before rl_directory_completion_hook.  I'm not happy with how this works
+   yet, so it's undocumented. */
+extern rl_icppfunc_t *rl_directory_rewrite_hook;
 
 /* Backwards compatibility with previous versions of readline. */
 #define rl_symbolic_link_hook rl_directory_completion_hook
@@ -558,7 +648,7 @@
    where MATCHES is the array of strings that matched, NUM_MATCHES is the
    number of strings in that array, and MAX_LENGTH is the length of the
    longest string in that array. */
-extern VFunction *rl_completion_display_matches_hook;
+extern rl_compdisp_func_t *rl_completion_display_matches_hook;
 
 /* Non-zero means that the results of the matches are to be treated
    as filenames.  This is ALWAYS zero on entry, and can only be changed
@@ -576,17 +666,17 @@
    Called with the text to quote, the type of match found (single or multiple)
    and a pointer to the quoting character to be used, which the function can
    reset if desired. */
-extern CPFunction *rl_filename_quoting_function;
+extern rl_quote_func_t *rl_filename_quoting_function;
 
 /* Function to call to remove quoting characters from a filename.  Called
    before completion is attempted, so the embedded quotes do not interfere
    with matching names in the file system. */
-extern CPFunction *rl_filename_dequoting_function;
+extern rl_dequote_func_t *rl_filename_dequoting_function;
 
 /* Function to call to decide whether or not a word break character is
    quoted.  If a character is quoted, it does not break words for the
    completer. */
-extern Function *rl_char_is_quoted_p;
+extern rl_linebuf_func_t *rl_char_is_quoted_p;
 
 /* Non-zero means to suppress normal filename completion after the
    user-specified completion function has been called. */
@@ -601,18 +691,33 @@
    default is a space.  Nothing is added if this is '\0'. */
 extern int rl_completion_append_character;
 
+/* If set to non-zero by an application completion function,
+   rl_completion_append_character will not be appended. */
+extern int rl_completion_suppress_append;
+
 /* Up to this many items will be displayed in response to a
    possible-completions call.  After that, we ask the user if she
    is sure she wants to see them all.  The default value is 100. */
 extern int rl_completion_query_items;
 
+/* If non-zero, a slash will be appended to completed filenames that are
+   symbolic links to directory names, subject to the value of the
+   mark-directories variable (which is user-settable).  This exists so
+   that application completion functions can override the user's preference
+   (set via the mark-symlinked-directories variable) if appropriate.
+   It's set to the value of _rl_complete_mark_symlink_dirs in
+   rl_complete_internal before any application-specific completion
+   function is called, so without that function doing anything, the user's
+   preferences are honored. */
+extern int rl_completion_mark_symlink_dirs;
+
 /* If non-zero, then disallow duplicates in the matches. */
 extern int rl_ignore_completion_duplicates;
 
 /* If this is non-zero, completion is (temporarily) inhibited, and the
    completion character will be inserted as any other. */
 extern int rl_inhibit_completion;
-   
+
 /* Definitions available for use by readline clients. */
 #define RL_PROMPT_START_IGNORE	'\001'
 #define RL_PROMPT_END_IGNORE	'\002'
@@ -623,9 +728,69 @@
 #define SINGLE_MATCH    1
 #define MULT_MATCH      2
 
-#if !defined (savestring)
-extern char *savestring __P((char *));	/* XXX backwards compatibility */
-#endif
+/* Possible state values for rl_readline_state */
+#define RL_STATE_NONE		0x00000		/* no state; before first call */
+
+#define RL_STATE_INITIALIZING	0x00001		/* initializing */
+#define RL_STATE_INITIALIZED	0x00002		/* initialization done */
+#define RL_STATE_TERMPREPPED	0x00004		/* terminal is prepped */
+#define RL_STATE_READCMD	0x00008		/* reading a command key */
+#define RL_STATE_METANEXT	0x00010		/* reading input after ESC */
+#define RL_STATE_DISPATCHING	0x00020		/* dispatching to a command */
+#define RL_STATE_MOREINPUT	0x00040		/* reading more input in a command function */
+#define RL_STATE_ISEARCH	0x00080		/* doing incremental search */
+#define RL_STATE_NSEARCH	0x00100		/* doing non-inc search */
+#define RL_STATE_SEARCH		0x00200		/* doing a history search */
+#define RL_STATE_NUMERICARG	0x00400		/* reading numeric argument */
+#define RL_STATE_MACROINPUT	0x00800		/* getting input from a macro */
+#define RL_STATE_MACRODEF	0x01000		/* defining keyboard macro */
+#define RL_STATE_OVERWRITE	0x02000		/* overwrite mode */
+#define RL_STATE_COMPLETING	0x04000		/* doing completion */
+#define RL_STATE_SIGHANDLER	0x08000		/* in readline sighandler */
+#define RL_STATE_UNDOING	0x10000		/* doing an undo */
+#define RL_STATE_INPUTPENDING	0x20000		/* rl_execute_next called */
+
+#define RL_STATE_DONE		0x80000		/* done; accepted line */
+
+#define RL_SETSTATE(x)		(rl_readline_state |= (x))
+#define RL_UNSETSTATE(x)	(rl_readline_state &= ~(x))
+#define RL_ISSTATE(x)		(rl_readline_state & (x))
+
+struct readline_state {
+  /* line state */
+  int point;
+  int end;
+  int mark;
+  char *buffer;
+  int buflen;
+  UNDO_LIST *ul;
+  char *prompt;
+
+  /* global state */
+  int rlstate;
+  int done;
+  Keymap kmap;
+
+  /* input state */
+  rl_command_func_t *lastfunc;
+  int insmode;
+  int edmode;
+  int kseqlen;
+  FILE *inf;
+  FILE *outf;
+  int pendingin;
+  char *macro;
+
+  /* signal state */
+  int catchsigs;
+  int catchsigwinch;
+
+  /* reserved for future expansion, so the struct size doesn't change */
+  char reserved[64];
+};
+
+extern int rl_save_state PARAMS((struct readline_state *));
+extern int rl_restore_state PARAMS((struct readline_state *));
 
 #ifdef __cplusplus
 }
diff --git a/readline/rlconf.h b/readline/rlconf.h
index d2ab704..c651fd8 100644
--- a/readline/rlconf.h
+++ b/readline/rlconf.h
@@ -54,4 +54,7 @@
    X `callback' style. */
 #define READLINE_CALLBACKS
 
+/* Define this if you want the cursor to indicate insert or overwrite mode. */
+/* #define CURSOR_MODE */
+
 #endif /* _RLCONF_H_ */
diff --git a/readline/rldefs.h b/readline/rldefs.h
index e504d9b..4a28bd1 100644
--- a/readline/rldefs.h
+++ b/readline/rldefs.h
@@ -30,6 +30,8 @@
 #  include "config.h"
 #endif
 
+#include "rlstdc.h"
+
 #if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING)
 #  define TERMIOS_TTY_DRIVER
 #else
@@ -71,7 +73,14 @@
 #define _rl_stricmp strcasecmp
 #define _rl_strnicmp strncasecmp
 #else
-extern int _rl_stricmp (), _rl_strnicmp ();
+extern int _rl_stricmp PARAMS((char *, char *));
+extern int _rl_strnicmp PARAMS((char *, char *, int));
+#endif
+
+#if defined (HAVE_STRPBRK)
+#  define _rl_strpbrk(a,b)	strpbrk((a),(b))
+#else
+extern char *_rl_strpbrk PARAMS((const char *, const char *));
 #endif
 
 #if !defined (emacs_mode)
@@ -80,6 +89,13 @@
 #  define emacs_mode 1
 #endif
 
+#if !defined (RL_IM_INSERT)
+#  define RL_IM_INSERT		1
+#  define RL_IM_OVERWRITE	0
+#
+#  define RL_IM_DEFAULT		RL_IM_INSERT
+#endif
+
 /* If you cast map[key].function to type (Keymap) on a Cray,
    the compiler takes the value of map[key].function and
    divides it by 4 to convert between pointer types (pointers
@@ -87,15 +103,14 @@
    This is not what is wanted. */
 #if defined (CRAY)
 #  define FUNCTION_TO_KEYMAP(map, key)	(Keymap)((int)map[key].function)
-#  define KEYMAP_TO_FUNCTION(data)	(Function *)((int)(data))
+#  define KEYMAP_TO_FUNCTION(data)	(rl_command_func_t *)((int)(data))
 #else
 #  define FUNCTION_TO_KEYMAP(map, key)	(Keymap)(map[key].function)
-#  define KEYMAP_TO_FUNCTION(data)	(Function *)(data)
+#  define KEYMAP_TO_FUNCTION(data)	(rl_command_func_t *)(data)
 #endif
 
 #ifndef savestring
-extern char *xmalloc ();
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
 #endif
 
 /* Possible values for _rl_bell_preference. */
@@ -113,9 +128,10 @@
 /* Possible values for the found_quote flags word used by the completion
    functions.  It says what kind of (shell-like) quoting we found anywhere
    in the line. */
-#define RL_QF_SINGLE_QUOTE	0x1
-#define RL_QF_DOUBLE_QUOTE	0x2
-#define RL_QF_BACKSLASH		0x4
+#define RL_QF_SINGLE_QUOTE	0x01
+#define RL_QF_DOUBLE_QUOTE	0x02
+#define RL_QF_BACKSLASH		0x04
+#define RL_QF_OTHER_QUOTE	0x08
 
 /* Default readline line buffer length. */
 #define DEFAULT_BUFFER_SIZE 256
@@ -130,6 +146,10 @@
 #  define FREE(x)	if (x) free (x)
 #endif
 
+#if !defined (SWAP)
+#  define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
+#endif
+
 /* CONFIGURATION SECTION */
 #include "rlconf.h"
 
diff --git a/readline/rlmbutil.h b/readline/rlmbutil.h
new file mode 100644
index 0000000..27ca32b
--- /dev/null
+++ b/readline/rlmbutil.h
@@ -0,0 +1,108 @@
+/* rlmbutil.h -- utility functions for multibyte characters. */
+
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#if !defined (_RL_MBUTIL_H_)
+#define _RL_MBUTIL_H_
+
+#include "rlstdc.h"
+
+/************************************************/
+/* check multibyte capability for I18N code     */
+/************************************************/
+
+/* For platforms which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+   /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
+#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H)
+#  include <wchar.h>
+#  include <wctype.h>
+#  if defined (HAVE_MBSRTOWCS) /* system is supposed to support XPG5 */
+#    define HANDLE_MULTIBYTE      1
+#  endif
+#endif
+
+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
+#if HANDLE_MULTIBYTE && !defined (HAVE_MBSTATE_T)
+#  define wcsrtombs(dest, src, len, ps) (wcsrtombs) (dest, src, len, 0)
+#  define mbsrtowcs(dest, src, len, ps) (mbsrtowcs) (dest, src, len, 0)
+#  define wcrtomb(s, wc, ps) (wcrtomb) (s, wc, 0)
+#  define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
+#  define mbrlen(s, n, ps) (mbrlen) (s, n, 0)
+#  define mbstate_t int
+#endif
+
+/* Make sure MB_LEN_MAX is at least 16 on systems that claim to be able to
+   handle multibyte chars (some systems define MB_LEN_MAX as 1) */
+#ifdef HANDLE_MULTIBYTE
+#  include <limits.h>
+#  if defined(MB_LEN_MAX) && (MB_LEN_MAX < 16)
+#    undef MB_LEN_MAX
+#  endif
+#  if !defined (MB_LEN_MAX)
+#    define MB_LEN_MAX 16
+#  endif
+#endif
+
+/************************************************/
+/* end of multibyte capability checks for I18N  */
+/************************************************/
+
+/*
+ * Flags for _rl_find_prev_mbchar and _rl_find_next_mbchar:
+ *
+ * MB_FIND_ANY		find any multibyte character
+ * MB_FIND_NONZERO	find a non-zero-width multibyte character
+ */
+
+#define MB_FIND_ANY	0x00
+#define MB_FIND_NONZERO	0x01
+
+extern int _rl_find_prev_mbchar PARAMS((char *, int, int));
+extern int _rl_find_next_mbchar PARAMS((char *, int, int, int));
+
+#ifdef HANDLE_MULTIBYTE
+
+extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *));
+extern int _rl_get_char_len PARAMS((char *, mbstate_t *));
+extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *));
+
+extern int _rl_read_mbchar PARAMS((char *, int));
+extern int _rl_read_mbstring PARAMS((int, char *, int));
+
+extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
+
+#else /* !HANDLE_MULTIBYTE */
+
+#undef MB_LEN_MAX
+#undef MB_CUR_MAX
+
+#define MB_LEN_MAX	1
+#define MB_CUR_MAX	1
+
+#define _rl_find_prev_mbchar(b, i, f)		(((i) == 0) ? (i) : ((i) - 1))
+#define _rl_find_next_mbchar(b, i1, i2, f)	((i1) + (i2))
+
+#endif /* !HANDLE_MULTIBYTE */
+
+extern int rl_byte_oriented;
+
+#endif /* _RL_MBUTIL_H_ */
diff --git a/readline/rlprivate.h b/readline/rlprivate.h
index c05230e..ccb9144 100644
--- a/readline/rlprivate.h
+++ b/readline/rlprivate.h
@@ -26,7 +26,7 @@
 
 #include "rlconf.h"	/* for VISIBLE_STATS */
 #include "rlstdc.h"
-#include "posixjmp.h" /* defines procenv_t */
+#include "posixjmp.h"	/* defines procenv_t */
 
 /*************************************************************************
  *									 *
@@ -34,9 +34,6 @@
  *									 *
  *************************************************************************/
 
-/* terminal.c */
-extern char *rl_get_termcap __P((char *));
-
 /*************************************************************************
  *									 *
  * Global variables undocumented in texinfo manual and not in readline.h *
@@ -51,14 +48,11 @@
 
 /* readline.c */
 extern int rl_line_buffer_len;
-extern int rl_numeric_arg;
 extern int rl_arg_sign;
-extern int rl_explicit_arg;
-extern int rl_editing_mode;
 extern int rl_visible_prompt_length;
-extern Function *rl_last_func;
 extern int readline_echoing_p;
 extern int rl_key_sequence_length;
+extern int rl_byte_oriented;
 
 /* display.c */
 extern int rl_display_fixed;
@@ -72,26 +66,17 @@
  *									 *
  *************************************************************************/
 
-/* bind.c */
-extern char *rl_untranslate_keyseq __P((int));
-
 /* kill.c */
-extern int rl_set_retained_kills __P((int));
-
-/* readline.c */
-extern int rl_discard_argument __P((void));
-
-/* rltty.c */
-extern int rl_stop_output __P((int, int));
+extern int rl_set_retained_kills PARAMS((int));
 
 /* terminal.c */
-extern void _rl_set_screen_size __P((int, int));
+extern void _rl_set_screen_size PARAMS((int, int));
 
 /* undo.c */
-extern int _rl_fix_last_undo_of_type __P((int, int, int));
+extern int _rl_fix_last_undo_of_type PARAMS((int, int, int));
 
 /* util.c */
-extern char *_rl_savestring __P((char *));
+extern char *_rl_savestring PARAMS((const char *));
 
 /*************************************************************************
  *									 *
@@ -111,106 +96,135 @@
 #if defined(READLINE_CALLBACKS)
 
 /* readline.c */
-extern void readline_internal_setup __P((void));
-extern char *readline_internal_teardown __P((int));
-extern int readline_internal_char __P((void));
+extern void readline_internal_setup PARAMS((void));
+extern char *readline_internal_teardown PARAMS((int));
+extern int readline_internal_char PARAMS((void));
 
 #endif /* READLINE_CALLBACKS */
 
 /* bind.c */
-extern void _rl_bind_if_unbound __P((char *, Function *));
+extern void _rl_bind_if_unbound PARAMS((const char *, rl_command_func_t *));
+
+/* complete.c */
+extern char _rl_find_completion_word PARAMS((int *, int *));
+extern void _rl_free_match_list PARAMS((char **));
 
 /* display.c */
-extern char *_rl_strip_prompt __P((char *));
-extern void _rl_move_cursor_relative __P((int, char *));
-extern void _rl_move_vert __P((int));
-extern void _rl_save_prompt __P((void));
-extern void _rl_restore_prompt __P((void));
-extern char *_rl_make_prompt_for_search __P((int));
-extern void _rl_erase_at_end_of_line __P((int));
-extern void _rl_clear_to_eol __P((int));
-extern void _rl_clear_screen __P((void));
-extern void _rl_update_final __P((void));
-extern void _rl_redisplay_after_sigwinch __P((void));
-extern void _rl_clean_up_for_exit __P((void));
-extern void _rl_erase_entire_line __P((void));
-extern int _rl_currentb_display_line __P((void));
+extern char *_rl_strip_prompt PARAMS((char *));
+extern void _rl_move_cursor_relative PARAMS((int, const char *));
+extern void _rl_move_vert PARAMS((int));
+extern void _rl_save_prompt PARAMS((void));
+extern void _rl_restore_prompt PARAMS((void));
+extern char *_rl_make_prompt_for_search PARAMS((int));
+extern void _rl_erase_at_end_of_line PARAMS((int));
+extern void _rl_clear_to_eol PARAMS((int));
+extern void _rl_clear_screen PARAMS((void));
+extern void _rl_update_final PARAMS((void));
+extern void _rl_redisplay_after_sigwinch PARAMS((void));
+extern void _rl_clean_up_for_exit PARAMS((void));
+extern void _rl_erase_entire_line PARAMS((void));
+extern int _rl_current_display_line PARAMS((void));
 
 /* input.c */
-extern int _rl_any_typein __P((void));
-extern int _rl_input_available __P((void));
-extern void _rl_insert_typein __P((int));
+extern int _rl_any_typein PARAMS((void));
+extern int _rl_input_available PARAMS((void));
+extern int _rl_input_queued PARAMS((int));
+extern void _rl_insert_typein PARAMS((int));
+extern int _rl_unget_char PARAMS((int));
 
 /* macro.c */
-extern void _rl_with_macro_input __P((char *));
-extern int _rl_next_macro_key __P((void));
-extern void _rl_push_executing_macro __P((void));
-extern void _rl_pop_executing_macro __P((void));
-extern void _rl_add_macro_char __P((int));
-extern void _rl_kill_kbd_macro __P((void));
+extern void _rl_with_macro_input PARAMS((char *));
+extern int _rl_next_macro_key PARAMS((void));
+extern void _rl_push_executing_macro PARAMS((void));
+extern void _rl_pop_executing_macro PARAMS((void));
+extern void _rl_add_macro_char PARAMS((int));
+extern void _rl_kill_kbd_macro PARAMS((void));
+
+/* misc.c */
+extern int _rl_init_argument PARAMS((void));
+extern void _rl_start_using_history PARAMS((void));
+extern int _rl_free_saved_history_line PARAMS((void));
+extern void _rl_set_insert_mode PARAMS((int, int));
 
 /* nls.c */
-extern int _rl_init_eightbit __P((void));
+extern int _rl_init_eightbit PARAMS((void));
 
 /* parens.c */
-extern void _rl_enable_paren_matching __P((int));
+extern void _rl_enable_paren_matching PARAMS((int));
 
 /* readline.c */
-extern void _rl_init_line_state __P((void));
-extern void _rl_set_the_line __P((void));
-extern int _rl_dispatch __P((int, Keymap));
-extern int _rl_init_argument __P((void));
-extern void _rl_fix_point __P((int));
-extern void _rl_replace_text __P((char *, int, int));
-extern int _rl_char_search_internal __P((int, int, int));
-extern int _rl_set_mark_at_pos __P((int));
+extern void _rl_init_line_state PARAMS((void));
+extern void _rl_set_the_line PARAMS((void));
+extern int _rl_dispatch PARAMS((int, Keymap));
+extern int _rl_dispatch_subseq PARAMS((int, Keymap, int));
 
 /* rltty.c */
-extern int _rl_disable_tty_signals __P((void));
-extern int _rl_restore_tty_signals __P((void));
+extern int _rl_disable_tty_signals PARAMS((void));
+extern int _rl_restore_tty_signals PARAMS((void));
 
 /* terminal.c */
-extern void _rl_get_screen_size __P((int, int));
-extern int _rl_init_terminal_io __P((char *));
+extern void _rl_get_screen_size PARAMS((int, int));
+extern int _rl_init_terminal_io PARAMS((const char *));
 #ifdef _MINIX
-extern void _rl_output_character_function __P((int));
+extern void _rl_output_character_function PARAMS((int));
 #else
-extern int _rl_output_character_function __P((int));
+extern int _rl_output_character_function PARAMS((int));
 #endif
-extern void _rl_output_some_chars __P((char *, int));
-extern int _rl_backspace __P((int));
-extern void _rl_enable_meta_key __P((void));
-extern void _rl_control_keypad __P((int));
+extern void _rl_output_some_chars PARAMS((const char *, int));
+extern int _rl_backspace PARAMS((int));
+extern void _rl_enable_meta_key PARAMS((void));
+extern void _rl_control_keypad PARAMS((int));
+extern void _rl_set_cursor PARAMS((int, int));
+
+/* text.c */
+extern void _rl_fix_point PARAMS((int));
+extern int _rl_replace_text PARAMS((const char *, int, int));
+extern int _rl_insert_char PARAMS((int, int));
+extern int _rl_overwrite_char PARAMS((int, int));
+extern int _rl_overwrite_rubout PARAMS((int, int));
+extern int _rl_rubout_char PARAMS((int, int));
+#if defined (HANDLE_MULTIBYTE)
+extern int _rl_char_search_internal PARAMS((int, int, char *, int));
+#else
+extern int _rl_char_search_internal PARAMS((int, int, int));
+#endif
+extern int _rl_set_mark_at_pos PARAMS((int));
 
 /* util.c */
-extern int alphabetic __P((int));
-extern int _rl_abort_internal __P((void));
-extern char *_rl_strindex __P((char *, char *));
-extern int _rl_qsort_string_compare __P((char **, char **));
-extern int (_rl_uppercase_p) __P((int));
-extern int (_rl_lowercase_p) __P((int));
-extern int (_rl_pure_alphabetic) __P((int));
-extern int (_rl_digit_p) __P((int));
-extern int (_rl_to_lower) __P((int));
-extern int (_rl_to_upper) __P((int));
-extern int (_rl_digit_value) __P((int));
+extern int _rl_abort_internal PARAMS((void));
+extern char *_rl_strindex PARAMS((const char *, const char *));
+extern int _rl_qsort_string_compare PARAMS((char **, char **));
+extern int (_rl_uppercase_p) PARAMS((int));
+extern int (_rl_lowercase_p) PARAMS((int));
+extern int (_rl_pure_alphabetic) PARAMS((int));
+extern int (_rl_digit_p) PARAMS((int));
+extern int (_rl_to_lower) PARAMS((int));
+extern int (_rl_to_upper) PARAMS((int));
+extern int (_rl_digit_value) PARAMS((int));
 
 /* vi_mode.c */
-extern void _rl_vi_initialize_line __P((void));
-extern void _rl_vi_reset_last __P((void));
-extern void _rl_vi_set_last __P((int, int, int));
-extern int _rl_vi_textmod_command __P((int));
-extern void _rl_vi_done_inserting __P((void));
+extern void _rl_vi_initialize_line PARAMS((void));
+extern void _rl_vi_reset_last PARAMS((void));
+extern void _rl_vi_set_last PARAMS((int, int, int));
+extern int _rl_vi_textmod_command PARAMS((int));
+extern void _rl_vi_done_inserting PARAMS((void));
 
 /*************************************************************************
  * Undocumented private variables					 *
  *************************************************************************/
 
+/* bind.c */
+extern const char *_rl_possible_control_prefixes[];
+extern const char *_rl_possible_meta_prefixes[];
+
 /* complete.c */
 extern int _rl_complete_show_all;
 extern int _rl_complete_mark_directories;
+extern int _rl_complete_mark_symlink_dirs;
 extern int _rl_print_completions_horizontally;
 extern int _rl_completion_case_fold;
+extern int _rl_match_hidden_files;
+extern int _rl_page_completions;
 
 /* display.c */
 extern int _rl_vis_botlin;
@@ -218,17 +232,16 @@
 extern int _rl_suppress_redisplay;
 extern char *rl_display_prompt;
 
-/* funmap.c */
-extern char *possible_control_prefixes[];
-extern char *possible_meta_prefixes[];
-
 /* isearch.c */
-extern unsigned char *_rl_isearch_terminators;
+extern char *_rl_isearch_terminators;
 
 /* macro.c */
-extern int _rl_defining_kbd_macro;
 extern char *_rl_executing_macro;
 
+/* misc.c */
+extern int _rl_history_preserve_point;
+extern int _rl_history_saved_point;
+
 /* readline.c */
 extern int _rl_horizontal_scroll_mode;
 extern int _rl_mark_modified_lines;
@@ -248,20 +261,20 @@
 /* terminal.c */
 extern int _rl_enable_keypad;
 extern int _rl_enable_meta;
-extern char *term_clreol;
-extern char *term_clrpag;
-extern char *term_im;
-extern char *term_ic;
-extern char *term_ei;
-extern char *term_DC;
-extern char *term_up;
-extern char *term_dc;
-extern char *term_cr;
-extern char *term_IC;
-extern int screenheight;
-extern int screenwidth;
-extern int screenchars;
-extern int terminal_can_insert;
+extern char *_rl_term_clreol;
+extern char *_rl_term_clrpag;
+extern char *_rl_term_im;
+extern char *_rl_term_ic;
+extern char *_rl_term_ei;
+extern char *_rl_term_DC;
+extern char *_rl_term_up;
+extern char *_rl_term_dc;
+extern char *_rl_term_cr;
+extern char *_rl_term_IC;
+extern int _rl_screenheight;
+extern int _rl_screenwidth;
+extern int _rl_screenchars;
+extern int _rl_terminal_can_insert;
 extern int _rl_term_autowrap;
 
 /* undo.c */
diff --git a/readline/rlshell.h b/readline/rlshell.h
index 7a4e699..3c03fba 100644
--- a/readline/rlshell.h
+++ b/readline/rlshell.h
@@ -25,10 +25,10 @@
 
 #include "rlstdc.h"
 
-extern char *single_quote __P((char *));
-extern void set_lines_and_columns __P((int, int));
-extern char *get_env_value __P((char *));
-extern char *get_home_dir __P((void));
-extern int unset_nodelay_mode __P((int));
+extern char *sh_single_quote PARAMS((char *));
+extern void sh_set_lines_and_columns PARAMS((int, int));
+extern char *sh_get_env_value PARAMS((const char *));
+extern char *sh_get_home_dir PARAMS((void));
+extern int sh_unset_nodelay_mode PARAMS((int));
 
 #endif /* _RL_SHELL_H_ */
diff --git a/readline/rlstdc.h b/readline/rlstdc.h
index dac8e98..d6a22b3 100644
--- a/readline/rlstdc.h
+++ b/readline/rlstdc.h
@@ -26,13 +26,19 @@
 
 /* A function can be defined using prototypes and compile on both ANSI C
    and traditional C compilers with something like this:
-	extern char *func __P((char *, char *, int)); */
+	extern char *func PARAMS((char *, char *, int)); */
 
-#if !defined (__P)
+#if !defined (PARAMS)
 #  if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-#    define __P(protos) protos
+#    define PARAMS(protos) protos
 #  else
-#    define __P(protos) ()
+#    define PARAMS(protos) ()
+#  endif
+#endif
+
+#ifndef __attribute__
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+#    define __attribute__(x)
 #  endif
 #endif
 
diff --git a/readline/rltty.c b/readline/rltty.c
index b868b69..755efeb 100644
--- a/readline/rltty.c
+++ b/readline/rltty.c
@@ -49,8 +49,13 @@
 extern int errno;
 #endif /* !errno */
 
-VFunction *rl_prep_term_function = rl_prep_terminal;
-VFunction *rl_deprep_term_function = rl_deprep_terminal;
+rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal;
+rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal;
+
+static void block_sigint PARAMS((void));
+static void release_sigint PARAMS((void));
+
+static void set_winsize PARAMS((int));
 
 /* **************************************************************** */
 /*								    */
@@ -173,6 +178,14 @@
 
 static TIOTYPE otio;
 
+static void save_tty_chars PARAMS((TIOTYPE *));
+static int _get_tty_settings PARAMS((int, TIOTYPE *));
+static int get_tty_settings PARAMS((int, TIOTYPE *));
+static int _set_tty_settings PARAMS((int, TIOTYPE *));
+static int set_tty_settings PARAMS((int, TIOTYPE *));
+
+static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+
 static void
 save_tty_chars (tiop)
      TIOTYPE *tiop;
@@ -190,7 +203,7 @@
       _rl_tty_chars.t_intr = tiop->tchars.t_intrc;
       _rl_tty_chars.t_quit = tiop->tchars.t_quitc;
       _rl_tty_chars.t_start = tiop->tchars.t_startc;
-      _rl_tty_chars.t_stop = tiop->tchars.t_stopc
+      _rl_tty_chars.t_stop = tiop->tchars.t_stopc;
       _rl_tty_chars.t_eof = tiop->tchars.t_eofc;
       _rl_tty_chars.t_eol = '\n';
       _rl_tty_chars.t_eol2 = tiop->tchars.t_brkc;
@@ -218,22 +231,23 @@
 
   tiop->flags = tiop->lflag = 0;
 
-  ioctl (tty, TIOCGETP, &(tiop->sgttyb));
+  if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0)
+    return -1;
   tiop->flags |= SGTTY_SET;
 
 #if defined (TIOCLGET)
-  ioctl (tty, TIOCLGET, &(tiop->lflag));
-  tiop->flags |= LFLAG_SET;
+  if (ioctl (tty, TIOCLGET, &(tiop->lflag)) == 0)
+    tiop->flags |= LFLAG_SET;
 #endif
 
 #if defined (TIOCGETC)
-  ioctl (tty, TIOCGETC, &(tiop->tchars));
-  tiop->flags |= TCHARS_SET;
+  if (ioctl (tty, TIOCGETC, &(tiop->tchars)) == 0)
+    tiop->flags |= TCHARS_SET;
 #endif
 
 #if defined (TIOCGLTC)
-  ioctl (tty, TIOCGLTC, &(tiop->ltchars));
-  tiop->flags |= LTCHARS_SET;
+  if (ioctl (tty, TIOCGLTC, &(tiop->ltchars)) == 0)
+    tiop->flags |= LTCHARS_SET;
 #endif
 
   return 0;
@@ -279,23 +293,23 @@
 }
 
 static void
-prepare_terminal_settings (meta_flag, otio, tiop)
+prepare_terminal_settings (meta_flag, oldtio, tiop)
      int meta_flag;
-     TIOTYPE otio, *tiop;
+     TIOTYPE oldtio, *tiop;
 {
-  readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
+  readline_echoing_p = (oldtio.sgttyb.sg_flags & ECHO);
 
   /* Copy the original settings to the structure we're going to use for
      our settings. */
-  tiop->sgttyb = otio.sgttyb;
-  tiop->lflag = otio.lflag;
+  tiop->sgttyb = oldtio.sgttyb;
+  tiop->lflag = oldtio.lflag;
 #if defined (TIOCGETC)
-  tiop->tchars = otio.tchars;
+  tiop->tchars = oldtio.tchars;
 #endif
 #if defined (TIOCGLTC)
-  tiop->ltchars = otio.ltchars;
+  tiop->ltchars = oldtio.ltchars;
 #endif
-  tiop->flags = otio.flags;
+  tiop->flags = oldtio.flags;
 
   /* First, the basic settings to put us into character-at-a-time, no-echo
      input mode. */
@@ -308,8 +322,8 @@
 #if !defined (ANYP)
 #  define ANYP (EVENP | ODDP)
 #endif
-  if (((otio.sgttyb.sg_flags & ANYP) == ANYP) ||
-      ((otio.sgttyb.sg_flags & ANYP) == 0))
+  if (((oldtio.sgttyb.sg_flags & ANYP) == ANYP) ||
+      ((oldtio.sgttyb.sg_flags & ANYP) == 0))
     {
       tiop->sgttyb.sg_flags |= ANYP;
 
@@ -328,13 +342,13 @@
   tiop->tchars.t_startc = -1; /* C-q */
 
   /* If there is an XON character, bind it to restart the output. */
-  if (otio.tchars.t_startc != -1)
-    rl_bind_key (otio.tchars.t_startc, rl_restart_output);
+  if (oldtio.tchars.t_startc != -1)
+    rl_bind_key (oldtio.tchars.t_startc, rl_restart_output);
 #  endif /* USE_XON_XOFF */
 
   /* If there is an EOF char, bind _rl_eof_char to it. */
-  if (otio.tchars.t_eofc != -1)
-    _rl_eof_char = otio.tchars.t_eofc;
+  if (oldtio.tchars.t_eofc != -1)
+    _rl_eof_char = oldtio.tchars.t_eofc;
 
 #  if defined (NO_KILL_INTR)
   /* Get rid of terminal-generated SIGQUIT and SIGINT. */
@@ -373,11 +387,19 @@
 #  define TIOTYPE struct termio
 #  define DRAIN_OUTPUT(fd)
 #  define GETATTR(tty, tiop)	(ioctl (tty, TCGETA, tiop))
-#  define SETATTR(tty, tiop)	(ioctl (tty, TCSETA, tiop))
+#  define SETATTR(tty, tiop)	(ioctl (tty, TCSETAW, tiop))
 #endif /* !TERMIOS_TTY_DRIVER */
 
 static TIOTYPE otio;
 
+static void save_tty_chars PARAMS((TIOTYPE *));
+static int _get_tty_settings PARAMS((int, TIOTYPE *));
+static int get_tty_settings PARAMS((int, TIOTYPE *));
+static int _set_tty_settings PARAMS((int, TIOTYPE *));
+static int set_tty_settings PARAMS((int, TIOTYPE *));
+
+static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+
 #if defined (FLUSHO)
 #  define OUTPUT_BEING_FLUSHED(tp)  (tp->c_lflag & FLUSHO)
 #else
@@ -545,16 +567,16 @@
 }
 
 static void
-prepare_terminal_settings (meta_flag, otio, tiop)
+prepare_terminal_settings (meta_flag, oldtio, tiop)
      int meta_flag;
-     TIOTYPE otio, *tiop;
+     TIOTYPE oldtio, *tiop;
 {
-  readline_echoing_p = (otio.c_lflag & ECHO);
+  readline_echoing_p = (oldtio.c_lflag & ECHO);
 
   tiop->c_lflag &= ~(ICANON | ECHO);
 
-  if ((unsigned char) otio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE)
-    _rl_eof_char = otio.c_cc[VEOF];
+  if ((unsigned char) oldtio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE)
+    _rl_eof_char = oldtio.c_cc[VEOF];
 
 #if defined (USE_XON_XOFF)
 #if defined (IXANY)
@@ -585,7 +607,7 @@
   if (OUTPUT_BEING_FLUSHED (tiop))
     {
       tiop->c_lflag &= ~FLUSHO;
-      otio.c_lflag &= ~FLUSHO;
+      oldtio.c_lflag &= ~FLUSHO;
     }
 #endif
 
@@ -645,6 +667,7 @@
 
   fflush (rl_outstream);
   terminal_prepped = 1;
+  RL_SETSTATE(RL_STATE_TERMPREPPED);
 
   release_sigint ();
 }
@@ -675,6 +698,7 @@
     }
 
   terminal_prepped = 0;
+  RL_UNSETSTATE(RL_STATE_TERMPREPPED);
 
   release_sigint ();
 }
@@ -751,6 +775,9 @@
 /*			Default Key Bindings			    */
 /*								    */
 /* **************************************************************** */
+
+/* Set the system's default editing characters to their readline equivalents
+   in KMAP.  Should be static, now that we have rl_tty_set_default_bindings. */
 void
 rltty_set_default_bindings (kmap)
      Keymap kmap;
@@ -765,8 +792,8 @@
     { \
       int ic; \
       ic = sc; \
-      if (ic != -1 && kmap[ic].type == ISFUNC) \
-	kmap[ic].function = func; \
+      if (ic != -1 && kmap[(unsigned char)ic].type == ISFUNC) \
+	kmap[(unsigned char)ic].function = func; \
     } \
   while (0)
 
@@ -815,6 +842,15 @@
 #endif /* !NEW_TTY_DRIVER */
 }
 
+/* New public way to set the system default editing chars to their readline
+   equivalents. */
+void
+rl_tty_set_default_bindings (kmap)
+     Keymap kmap;
+{
+  rltty_set_default_bindings (kmap);
+}
+
 #if defined (HANDLE_SIGNALS)
 
 #if defined (NEW_TTY_DRIVER)
@@ -846,6 +882,7 @@
   nosigstty = sigstty;
 
   nosigstty.c_lflag &= ~ISIG;
+  nosigstty.c_iflag &= ~IXON;
 
   if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0)
     return (_set_tty_settings (fileno (rl_instream), &sigstty));
@@ -857,10 +894,17 @@
 int
 _rl_restore_tty_signals ()
 {
+  int r;
+
   if (tty_sigs_disabled == 0)
     return 0;
 
-  return (_set_tty_settings (fileno (rl_instream), &sigstty));
+  r = _set_tty_settings (fileno (rl_instream), &sigstty);
+
+  if (r == 0)
+    tty_sigs_disabled = 0;
+
+  return r;
 }
 #endif /* !NEW_TTY_DRIVER */
 
diff --git a/readline/rltypedefs.h b/readline/rltypedefs.h
new file mode 100644
index 0000000..f3280e9
--- /dev/null
+++ b/readline/rltypedefs.h
@@ -0,0 +1,88 @@
+/* rltypedefs.h -- Type declarations for readline functions. */
+
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#ifndef _RL_TYPEDEFS_H_
+#define _RL_TYPEDEFS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Old-style */
+
+#if !defined (_FUNCTION_DEF)
+#  define _FUNCTION_DEF
+
+typedef int Function ();
+typedef void VFunction ();
+typedef char *CPFunction ();
+typedef char **CPPFunction ();
+
+#endif /* _FUNCTION_DEF */
+
+/* New style. */
+
+#if !defined (_RL_FUNCTION_TYPEDEF)
+#  define _RL_FUNCTION_TYPEDEF
+
+/* Bindable functions */
+typedef int rl_command_func_t PARAMS((int, int));
+
+/* Typedefs for the completion system */
+typedef char *rl_compentry_func_t PARAMS((const char *, int));
+typedef char **rl_completion_func_t PARAMS((const char *, int, int));
+
+typedef char *rl_quote_func_t PARAMS((char *, int, char *));
+typedef char *rl_dequote_func_t PARAMS((char *, int));
+
+typedef int rl_compignore_func_t PARAMS((char **));
+
+typedef void rl_compdisp_func_t PARAMS((char **, int, int));
+
+/* Type for input and pre-read hook functions like rl_event_hook */
+typedef int rl_hook_func_t PARAMS((void));
+
+/* Input function type */
+typedef int rl_getc_func_t PARAMS((FILE *));
+
+/* Generic function that takes a character buffer (which could be the readline
+   line buffer) and an index into it (which could be rl_point) and returns
+   an int. */
+typedef int rl_linebuf_func_t PARAMS((char *, int));
+
+/* `Generic' function pointer typedefs */
+typedef int rl_intfunc_t PARAMS((int));
+#define rl_ivoidfunc_t rl_hook_func_t
+typedef int rl_icpfunc_t PARAMS((char *));
+typedef int rl_icppfunc_t PARAMS((char **));
+
+typedef void rl_voidfunc_t PARAMS((void));
+typedef void rl_vintfunc_t PARAMS((int));
+typedef void rl_vcpfunc_t PARAMS((char *));
+typedef void rl_vcppfunc_t PARAMS((char **));
+#endif /* _RL_FUNCTION_TYPEDEF */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RL_TYPEDEFS_H_ */
diff --git a/readline/savestring.c b/readline/savestring.c
index 485890e..c7ebeb1 100644
--- a/readline/savestring.c
+++ b/readline/savestring.c
@@ -20,14 +20,17 @@
    have a copy of the license, write to the Free Software Foundation,
    59 Temple Place, Suite 330, Boston, MA 02111 USA. */
 
-extern char *strcpy ();
-extern char *xmalloc ();
+#include <config.h>
+#ifdef HAVE_STRING_H
+#  include <string.h>
+#endif
+#include "xmalloc.h"
 
 /* Backwards compatibility, now that savestring has been removed from
    all `public' readline header files. */
 char *
 savestring (s)
-     char *s;
+     const char *s;
 {
-  return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s)));
+  return ((char *)strcpy ((char *)xmalloc (1 + strlen (s)), (s)));
 }
diff --git a/readline/search.c b/readline/search.c
index 112f807..7e0d60b 100644
--- a/readline/search.c
+++ b/readline/search.c
@@ -40,6 +40,8 @@
 #endif
 
 #include "rldefs.h"
+#include "rlmbutil.h"
+
 #include "readline.h"
 #include "history.h"
 
@@ -51,10 +53,10 @@
 #endif
 #define abs(x)		(((x) >= 0) ? (x) : -(x))
 
-extern HIST_ENTRY *saved_line_for_history;
+extern HIST_ENTRY *_rl_saved_line_for_history;
 
 /* Functions imported from the rest of the library. */
-extern int _rl_free_history_entry __P((HIST_ENTRY *));
+extern int _rl_free_history_entry PARAMS((HIST_ENTRY *));
 
 static char *noninc_search_string = (char *) NULL;
 static int noninc_history_pos;
@@ -66,6 +68,13 @@
 static char *history_search_string;
 static int history_string_size;
 
+static void make_history_line_current PARAMS((HIST_ENTRY *));
+static int noninc_search_from_pos PARAMS((char *, int, int));
+static void noninc_dosearch PARAMS((char *, int));
+static void noninc_search PARAMS((int, int));
+static int rl_history_search_internal PARAMS((int, int));
+static void rl_history_search_reinit PARAMS((void));
+
 /* Make the data from the history entry ENTRY be the contents of the
    current line.  This doesn't do anything with rl_point; the caller
    must set it. */
@@ -73,19 +82,12 @@
 make_history_line_current (entry)
      HIST_ENTRY *entry;
 {
-  int line_len;
-
-  line_len = strlen (entry->line);
-  if (line_len >= rl_line_buffer_len)
-    rl_extend_line_buffer (line_len);
-  strcpy (rl_line_buffer, entry->line);
-
+  rl_replace_line (entry->line, 0);
   rl_undo_list = (UNDO_LIST *)entry->data;
-  rl_end = line_len;
 
-  if (saved_line_for_history)
-    _rl_free_history_entry (saved_line_for_history);
-  saved_line_for_history = (HIST_ENTRY *)NULL;
+  if (_rl_saved_line_for_history)
+    _rl_free_history_entry (_rl_saved_line_for_history);
+  _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
 }
 
 /* Search the history list for STRING starting at absolute history position
@@ -100,13 +102,19 @@
 {
   int ret, old;
 
-  old = where_history ();
-  history_set_pos (pos);
+  if (pos < 0)
+    return -1;
 
+  old = where_history ();
+  if (history_set_pos (pos) == 0)
+    return -1;
+
+  RL_SETSTATE(RL_STATE_SEARCH);
   if (*string == '^')
     ret = history_search_prefix (string + 1, dir);
   else
     ret = history_search (string, dir);
+  RL_UNSETSTATE(RL_STATE_SEARCH);
 
   if (ret != -1)
     ret = where_history ();
@@ -128,7 +136,7 @@
 
   if (string == 0 || *string == '\0' || noninc_history_pos < 0)
     {
-      ding ();
+      rl_ding ();
       return;
     }
 
@@ -136,10 +144,10 @@
   if (pos == -1)
     {
       /* Search failed, current history position unchanged. */
-      maybe_unsave_line ();
+      rl_maybe_unsave_line ();
       rl_clear_message ();
       rl_point = 0;
-      ding ();
+      rl_ding ();
       return;
     }
 
@@ -156,6 +164,8 @@
   make_history_line_current (entry);
 
   rl_point = 0;
+  rl_mark = rl_end;
+
   rl_clear_message ();
 }
 
@@ -169,11 +179,15 @@
      int dir;
      int pchar;
 {
-  int saved_point, c;
+  int saved_point, saved_mark, c;
   char *p;
+#if defined (HANDLE_MULTIBYTE)
+  char mb[MB_LEN_MAX];
+#endif
 
-  maybe_save_line ();
+  rl_maybe_save_line ();
   saved_point = rl_point;
+  saved_mark = rl_mark;
 
   /* Use the line buffer to read the search string. */
   rl_line_buffer[0] = 0;
@@ -183,23 +197,37 @@
   rl_message (p, 0, 0);
   free (p);
 
-#define SEARCH_RETURN rl_restore_prompt (); return
+#define SEARCH_RETURN rl_restore_prompt (); RL_UNSETSTATE(RL_STATE_NSEARCH); return
 
+  RL_SETSTATE(RL_STATE_NSEARCH);
   /* Read the search string. */
-  while (c = rl_read_key ())
+  while (1)
     {
+      RL_SETSTATE(RL_STATE_MOREINPUT);
+      c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
+#endif
+
+      if (c == 0)
+	break;
+
       switch (c)
 	{
 	case CTRL('H'):
 	case RUBOUT:
 	  if (rl_point == 0)
 	    {
-	      maybe_unsave_line ();
+	      rl_maybe_unsave_line ();
 	      rl_clear_message ();
 	      rl_point = saved_point;
+	      rl_mark = saved_mark;
 	      SEARCH_RETURN;
 	    }
-	  rl_rubout (1, c);
+	  _rl_rubout_char (1, c);
 	  break;
 
 	case CTRL('W'):
@@ -218,20 +246,28 @@
 
 	case CTRL('C'):
 	case CTRL('G'):
-	  maybe_unsave_line ();
+	  rl_maybe_unsave_line ();
 	  rl_clear_message ();
 	  rl_point = saved_point;
-	  ding ();
+	  rl_mark = saved_mark;
+	  rl_ding ();
 	  SEARCH_RETURN;
 
 	default:
-	  rl_insert (1, c);
+#if defined (HANDLE_MULTIBYTE)
+	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	    rl_insert_text (mb);
+	  else
+#endif
+	    _rl_insert_char (1, c);
 	  break;
 	}
       (*rl_redisplay_function) ();
     }
 
  dosearch:
+  rl_mark = saved_mark;
+
   /* If rl_point == 0, we want to re-use the previous search string and
      start from the saved history position.  If there's no previous search
      string, punt. */
@@ -239,7 +275,7 @@
     {
       if (!noninc_search_string)
 	{
-	  ding ();
+	  rl_ding ();
 	  SEARCH_RETURN;
 	}
     }
@@ -253,6 +289,7 @@
 
   rl_restore_prompt ();
   noninc_dosearch (noninc_search_string, dir);
+  RL_UNSETSTATE(RL_STATE_NSEARCH);
 }
 
 /* Search forward through the history list for a string.  If the vi-mode
@@ -283,7 +320,7 @@
 {
   if (!noninc_search_string)
     {
-      ding ();
+      rl_ding ();
       return (-1);
     }
   noninc_dosearch (noninc_search_string, 1);
@@ -298,7 +335,7 @@
 {
   if (!noninc_search_string)
     {
-      ding ();
+      rl_ding ();
       return (-1);
     }
   noninc_dosearch (noninc_search_string, -1);
@@ -312,7 +349,7 @@
   HIST_ENTRY *temp;
   int ret, oldpos;
 
-  maybe_save_line ();
+  rl_maybe_save_line ();
   temp = (HIST_ENTRY *)NULL;
 
   /* Search COUNT times through the history for a line whose prefix
@@ -341,8 +378,8 @@
   /* If we didn't find anything at all, return. */
   if (temp == 0)
     {
-      maybe_unsave_line ();
-      ding ();
+      rl_maybe_unsave_line ();
+      rl_ding ();
       /* If you don't want the saved history line (last match) to show up
          in the line buffer after the search fails, change the #if 0 to
          #if 1 */
@@ -351,9 +388,11 @@
         {
           rl_point = rl_end = rl_history_search_len;
           rl_line_buffer[rl_end] = '\0';
+          rl_mark = 0;
         }
 #else
-      rl_point = rl_history_search_len;	/* maybe_unsave_line changes it */
+      rl_point = rl_history_search_len;	/* rl_maybe_unsave_line changes it */
+      rl_mark = rl_end;
 #endif
       return 1;
     }
@@ -362,6 +401,8 @@
   make_history_line_current (temp);
 
   rl_point = rl_history_search_len;
+  rl_mark = rl_end;
+
   return 0;
 }
 
@@ -376,12 +417,13 @@
       if (rl_history_search_len >= history_string_size - 2)
 	{
 	  history_string_size = rl_history_search_len + 2;
-	  history_search_string = xrealloc (history_search_string, history_string_size);
+	  history_search_string = (char *)xrealloc (history_search_string, history_string_size);
 	}
       history_search_string[0] = '^';
       strncpy (history_search_string + 1, rl_line_buffer, rl_point);
       history_search_string[rl_point + 1] = '\0';
     }
+  _rl_free_saved_history_line ();
 }
 
 /* Search forward in the history for the string of characters
diff --git a/readline/shell.c b/readline/shell.c
index 3daef69..ad27cc1 100644
--- a/readline/shell.c
+++ b/readline/shell.c
@@ -44,28 +44,49 @@
 #  include <strings.h>
 #endif /* !HAVE_STRING_H */
 
+#if defined (HAVE_LIMITS_H)
+#  include <limits.h>
+#endif
+
 #include <fcntl.h>
 #include <pwd.h>
 
 #include <stdio.h>
 
+#include "rlstdc.h"
 #include "rlshell.h"
 #include "xmalloc.h"
 
 #if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid ();
+extern struct passwd *getpwuid PARAMS((uid_t));
 #endif /* !HAVE_GETPW_DECLS */
 
 #ifndef NULL
 #  define NULL 0
 #endif
 
+#ifndef CHAR_BIT
+#  define CHAR_BIT 8
+#endif
+
+/* Nonzero if the integer type T is signed.  */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Bound on length of the string representing an integer value of type T.
+   Subtract one for the sign bit if T is signed;
+   302 / 1000 is log10 (2) rounded up;
+   add one for integer division truncation;
+   add one more for a minus sign if t is signed.  */
+#define INT_STRLEN_BOUND(t) \
+  ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \
+   + 1 + TYPE_SIGNED (t))
+
 /* All of these functions are resolved from bash if we are linking readline
    as part of bash. */
 
 /* Does shell-like quoting using single quotes. */
 char *
-single_quote (string)
+sh_single_quote (string)
      char *string;
 {
   register int c;
@@ -96,24 +117,24 @@
 /* Set the environment variables LINES and COLUMNS to lines and cols,
    respectively. */
 void
-set_lines_and_columns (lines, cols)
+sh_set_lines_and_columns (lines, cols)
      int lines, cols;
 {
   char *b;
 
 #if defined (HAVE_PUTENV)
-  b = xmalloc (24);
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
   sprintf (b, "LINES=%d", lines);
   putenv (b);
-  b = xmalloc (24);
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
   sprintf (b, "COLUMNS=%d", cols);
   putenv (b);
 #else /* !HAVE_PUTENV */
 #  if defined (HAVE_SETENV)
-  b = xmalloc (8);
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
   sprintf (b, "%d", lines);
   setenv ("LINES", b, 1);
-  b = xmalloc (8);
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
   sprintf (b, "%d", cols);
   setenv ("COLUMNS", b, 1);
 #  endif /* HAVE_SETENV */
@@ -121,14 +142,14 @@
 }
 
 char *
-get_env_value (varname)
-     char *varname;
+sh_get_env_value (varname)
+     const char *varname;
 {
   return ((char *)getenv (varname));
 }
 
 char *
-get_home_dir ()
+sh_get_home_dir ()
 {
   char *home_dir;
   struct passwd *entry;
@@ -147,7 +168,7 @@
 #endif
 
 int
-unset_nodelay_mode (fd)
+sh_unset_nodelay_mode (fd)
      int fd;
 {
   int flags, bflags;
diff --git a/readline/shlib/Makefile.in b/readline/shlib/Makefile.in
index b1f70de..0cba57e 100644
--- a/readline/shlib/Makefile.in
+++ b/readline/shlib/Makefile.in
@@ -36,6 +36,7 @@
 RM = rm -f
 CP = cp
 MV = mv
+LN = ln
 
 SHELL = @MAKE_SHELL@
 
@@ -43,8 +44,12 @@
 
 prefix = @prefix@
 exec_prefix = @exec_prefix@
+includedir = @includedir@
 libdir = @libdir@
 
+# Support an alternate destination root directory for package building
+DESTDIR =
+
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"'
 CPPFLAGS = @CPPFLAGS@
@@ -81,7 +86,7 @@
 SHLIB_MINOR=		.@SHLIB_MINOR@
 
 # For libraries which include headers from other libraries.
-INCLUDES = -I. -I.. -I$(topdir) -I$(includedir)
+INCLUDES = -I. -I.. -I$(topdir)
 
 CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS)
 
@@ -108,19 +113,23 @@
 	   $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c \
 	   $(topdir)/history.c $(topdir)/histsearch.c $(topdir)/histexpand.c \
 	   $(topdir)/histfile.c $(topdir)/nls.c $(topdir)/search.c \
-	   $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.c
+	   $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.c \
+	   $(topdir)/text.c $(topdir)/misc.c $(topdir)/compat.c \
+	   $(topdir)/mbutil.c
 
 # The header files for this library.
 HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
 	   posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
-	   ansi_stdlib.h tcap.h xmalloc.h rlprivate.h rlshell.h
+	   ansi_stdlib.h tcap.h xmalloc.h rlprivate.h rlshell.h rlmbutil.h
 
-SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so
+SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so \
+		 mbutil.so
 SHARED_TILDEOBJ = tilde.so
 SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \
 	  rltty.so complete.so bind.so isearch.so display.so signals.so \
 	  util.so kill.so undo.so macro.so input.so callback.so terminal.so \
-	  nls.so xmalloc.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ)
+	  text.so nls.so misc.so xmalloc.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) \
+	  compat.so
 
 ##########################################################################
 
@@ -144,17 +153,24 @@
 	$(RM) $@
 	$(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS)
 
+# Since tilde.c is shared between readline and bash, make sure we compile 
+# it with the right flags when it's built as part of readline
+tilde.so:        tilde.c
+	${RM} $@
+	$(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -DREADLINE_LIBRARY -c -o tilde.o $(topdir)/tilde.c
+	$(MV) tilde.o $@
+
 installdirs: $(topdir)/support/mkdirs
-	-$(SHELL) $(topdir)/support/mkdirs $(libdir)
+	-$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(libdir)
 
 install: installdirs $(SHLIB_STATUS)
-	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY)
-	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_READLINE)
+	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY)
+	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -i "$(INSTALL_DATA)" $(SHARED_READLINE)
 	@echo install: you may need to run ldconfig
 
 uninstall:
-	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_HISTORY)
-	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_READLINE)
+	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -U $(SHARED_HISTORY)
+	$(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -U $(SHARED_READLINE)
 	@echo uninstall: you may need to run ldconfig
 
 clean mostlyclean:	force
@@ -173,90 +189,114 @@
 bind.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h
 bind.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 bind.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+bind.so: $(topdir)/rltypedefs.h
 bind.so: $(topdir)/tilde.h $(topdir)/history.h
+compat.so: $(topdir)/rlstdc.h
 callback.so: $(topdir)/rlconf.h
 callback.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h
 callback.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+callback.so: $(topdir)/rltypedefs.h
 callback.so: $(topdir)/tilde.h
 complete.so: $(topdir)/ansi_stdlib.h posixdir.h $(topdir)/posixstat.h
 complete.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 complete.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+complete.so: $(topdir)/rltypedefs.h
 complete.so: $(topdir)/tilde.h
 display.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h
 display.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 display.so: $(topdir)/tcap.h
 display.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+display.so: $(topdir)/rltypedefs.h
 display.so: $(topdir)/tilde.h $(topdir)/history.h
 funmap.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+funmap.so: $(topdir)/rltypedefs.h
 funmap.so: $(topdir)/rlconf.h $(topdir)/ansi_stdlib.h
 funmap.so: ${BUILD_DIR}/config.h $(topdir)/tilde.h
 histexpand.so: $(topdir)/ansi_stdlib.h
-histexpand.so: $(topdir)/history.h histlib.h
+histexpand.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h
 histexpand.so: ${BUILD_DIR}/config.h
 histfile.so: $(topdir)/ansi_stdlib.h
-histfile.so: $(topdir)/history.h histlib.h
+histfile.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h
 histfile.so: ${BUILD_DIR}/config.h
 history.so: $(topdir)/ansi_stdlib.h
-history.so: $(topdir)/history.h histlib.h
+history.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h
 history.so: ${BUILD_DIR}/config.h
 histsearch.so: $(topdir)/ansi_stdlib.h
-histsearch.so: $(topdir)/history.h histlib.h
+histsearch.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h
 histsearch.so: ${BUILD_DIR}/config.h
 input.so: $(topdir)/ansi_stdlib.h
 input.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 input.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+input.so: $(topdir)/rltypedefs.h
 input.so: $(topdir)/tilde.h
 isearch.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 isearch.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+isearch.so: $(topdir)/rltypedefs.h
 isearch.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h
 keymaps.so: emacs_keymap.c vi_keymap.c
 keymaps.so: $(topdir)/keymaps.h $(topdir)/chardefs.h $(topdir)/rlconf.h
 keymaps.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+keymaps.so: $(topdir)/rltypedefs.h
 keymaps.so: ${BUILD_DIR}/config.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h
 kill.so: $(topdir)/ansi_stdlib.h
 kill.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 kill.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
-kill.so: $(topdir)/tilde.h $(topdir)/history.h
+kill.so: $(topdir)/tilde.h $(topdir)/history.h  $(topdir)/rltypedefs.h
 macro.so: $(topdir)/ansi_stdlib.h
 macro.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 macro.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
-macro.so: $(topdir)/tilde.h $(topdir)/history.h
+macro.so: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rltypedefs.h
+mbutil.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
+mbutil.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h
+mbutil.so: $(topdir)/chardefs.h $(topdir)/rlstdc.h
+misc.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+misc.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
+misc.so: $(topdir)/rltypedefs.h
+misc.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h
 nls.so: $(topdir)/ansi_stdlib.h
 nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 nls.o: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+nls.o: $(topdir)/rltypedefs.h
 nls.o: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rlstdc.h  
 parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h
 parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+parens.so: $(topdir)/rltypedefs.h
 parens.so: $(topdir)/tilde.h
-readline.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
-readline.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
-readline.so: $(topdir)/history.h $(topdir)/tilde.h
-readline.so: $(topdir)/posixstat.h $(topdir)/ansi_stdlib.h $(topdir)/posixjmp.h
 rltty.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 rltty.so: $(topdir)/rltty.h $(topdir)/tilde.h
 rltty.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+rltty.so: $(topdir)/rltypedefs.h
 search.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 search.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
 search.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h
+search.so: $(topdir)/rltypedefs.h
 signals.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 signals.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
 signals.so: $(topdir)/history.h $(topdir)/tilde.h
+signals.so: $(topdir)/rltypedefs.h
 terminal.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 terminal.so: $(topdir)/tcap.h
 terminal.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
 terminal.so: $(topdir)/tilde.h $(topdir)/history.h
+terminal.so: $(topdir)/rltypedefs.h
+text.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+text.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
+text.so: $(topdir)/rltypedefs.h
+text.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h
 tilde.so: $(topdir)/ansi_stdlib.h ${BUILD_DIR}/config.h $(topdir)/tilde.h
 undo.so: $(topdir)/ansi_stdlib.h
 undo.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 undo.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
+undo.so: $(topdir)/rltypedefs.h
 undo.so: $(topdir)/tilde.h $(topdir)/history.h
 util.so: $(topdir)/posixjmp.h $(topdir)/ansi_stdlib.h
 util.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 util.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
-util.so: $(topdir)/tilde.h
+util.so: $(topdir)/rltypedefs.h $(topdir)/tilde.h
 vi_mode.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
 vi_mode.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
 vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h
+vi_mode.so: $(topdir)/rltypedefs.h
 xmalloc.so: ${BUILD_DIR}/config.h
 xmalloc.so: $(topdir)/ansi_stdlib.h
 
@@ -276,6 +316,8 @@
 isearch.so: $(topdir)/rlprivate.h
 kill.so: $(topdir)/rlprivate.h
 macro.so: $(topdir)/rlprivate.h
+mbutil.so: $(topdir)/rlprivate.h
+misc.so: $(topdir)/rlprivate.h
 nls.so: $(topdir)/rlprivate.h   
 parens.so: $(topdir)/rlprivate.h
 readline.so: $(topdir)/rlprivate.h
@@ -283,6 +325,7 @@
 search.so: $(topdir)/rlprivate.h
 signals.so: $(topdir)/rlprivate.h
 terminal.so: $(topdir)/rlprivate.h
+text.so: $(topdir)/rlprivate.h
 undo.so: $(topdir)/rlprivate.h
 util.so: $(topdir)/rlprivate.h
 vi_mode.so: $(topdir)/rlprivate.h
@@ -299,69 +342,96 @@
 keymaps.so: $(topdir)/xmalloc.h
 kill.so: $(topdir)/xmalloc.h
 macro.so: $(topdir)/xmalloc.h
+mbutil.so: $(topdir)/xmalloc.h
+misc.so: $(topdir)/xmalloc.h
 readline.so: $(topdir)/xmalloc.h
 savestring.so: $(topdir)/xmalloc.h
 search.so: $(topdir)/xmalloc.h
 shell.so: $(topdir)/xmalloc.h
+terminal.so: $(topdir)/xmalloc.h
+text.so: $(topdir)/xmalloc.h
 tilde.so: $(topdir)/xmalloc.h
-tilde.so: $(topdir)/xmalloc.h
+undo.so: $(topdir)/xmalloc.h
 util.so: $(topdir)/xmalloc.h
 vi_mode.so: $(topdir)/xmalloc.h
+xmalloc.so: $(topdir)/xmalloc.h
 
-readline.so: $(topdir)/readline.c
-vi_mode.so: $(topdir)/vi_mode.c
-funmap.so: $(topdir)/funmap.c
-keymaps.so: $(topdir)/keymaps.c
-parens.so: $(topdir)/parens.c
-search.so: $(topdir)/search.c
-rltty.so: $(topdir)/rltty.c
-complete.so: $(topdir)/complete.c
+complete.o: $(topdir)/rlmbutil.h
+display.o: $(topdir)/rlmbutil.h
+histexpand.o: $(topdir)/rlmbutil.h
+input.o: $(topdir)/rlmbutil.h
+isearch.o: $(topdir)/rlmbutil.h
+mbutil.o: $(topdir)/rlmbutil.h
+misc.o: $(topdir)/rlmbutil.h
+readline.o: $(topdir)/rlmbutil.h
+search.o: $(topdir)/rlmbutil.h
+text.o: $(topdir)/rlmbutil.h
+vi_mode.o: $(topdir)/rlmbutil.h
+
 bind.so: $(topdir)/bind.c
-isearch.so: $(topdir)/isearch.c
-display.so: $(topdir)/display.c
-signals.so: $(topdir)/signals.c
-util.so: $(topdir)/util.c
-kill.so: $(topdir)/kill.c
-undo.so: $(topdir)/undo.c
-macro.so: $(topdir)/macro.c
-input.so: $(topdir)/input.c
 callback.so: $(topdir)/callback.c
-terminal.so: $(topdir)/terminal.c
+compat.so: $(topdir)/compat.c
+complete.so: $(topdir)/complete.c
+display.so: $(topdir)/display.c
+funmap.so: $(topdir)/funmap.c
+input.so: $(topdir)/input.c
+isearch.so: $(topdir)/isearch.c
+keymaps.so: $(topdir)/keymaps.c $(topdir)/emacs_keymap.c $(topdir)/vi_keymap.c
+kill.so: $(topdir)/kill.c
+macro.so: $(topdir)/macro.c
+mbutil.so: $(topdir)/mbutil.c
+misc.so: $(topdir)/mbutil.c
 nls.so: $(topdir)/nls.c
+parens.so: $(topdir)/parens.c
+readline.so: $(topdir)/readline.c
+rltty.so: $(topdir)/rltty.c
+savestring.so: $(topdir)/savestring.c
+search.so: $(topdir)/search.c
+shell.so: $(topdir)/shell.c
+signals.so: $(topdir)/signals.c
+terminal.so: $(topdir)/terminal.c
+text.so: $(topdir)/terminal.c
+tilde.so: $(topdir)/tilde.c
+undo.so: $(topdir)/undo.c
+util.so: $(topdir)/util.c
+vi_mode.so: $(topdir)/vi_mode.c
 xmalloc.so: $(topdir)/xmalloc.c
-history.so: $(topdir)/history.c
+
 histexpand.so: $(topdir)/histexpand.c
 histfile.so: $(topdir)/histfile.c
+history.so: $(topdir)/history.c
 histsearch.so: $(topdir)/histsearch.c
-savestring.so: $(topdir)/savestring.c
-shell.so: $(topdir)/shell.c
-tilde.so: $(topdir)/tilde.c
 
-readline.so: readline.c
-vi_mode.so: vi_mode.c
-funmap.so: funmap.c
-keymaps.so: keymaps.c
-parens.so: parens.c
-search.so: search.c
-rltty.so: rltty.c
-complete.so: complete.c
 bind.so: bind.c
-isearch.so: isearch.c
-display.so: display.c
-signals.so: signals.c
-util.so: util.c
-kill.so: kill.c
-undo.so: undo.c
-macro.so: macro.c
-input.so: input.c
 callback.so: callback.c
-terminal.so: terminal.c
+comapt.so: compat.c
+complete.so: complete.c
+display.so: display.c
+funmap.so: funmap.c
+input.so: input.c
+isearch.so: isearch.c
+keymaps.so: keymaps.c emacs_keymap.c vi_keymap.c
+kill.so: kill.c
+macro.so: macro.c
+mbutil.so: mbutil.c
+misc.so: misc.c
 nls.so: nls.c
+parens.so: parens.c
+readline.so: readline.c
+rltty.so: rltty.c
+savestring.so: savestring.c
+search.so: search.c
+signals.so: signals.c
+shell.so: shell.c
+terminal.so: terminal.c
+text.so: terminal.c
+tilde.so: tilde.c
+undo.so: undo.c
+util.so: util.c
+vi_mode.so: vi_mode.c
 xmalloc.so: xmalloc.c
-history.so: history.c
+
 histexpand.so: histexpand.c
 histfile.so: histfile.c
+history.so: history.c
 histsearch.so: histsearch.c
-savestring.so: savestring.c
-shell.so: shell.c
-tilde.so: tilde.c
diff --git a/readline/signals.c b/readline/signals.c
index 861019d..0a1468b 100644
--- a/readline/signals.c
+++ b/readline/signals.c
@@ -61,7 +61,7 @@
 #  define SIGHANDLER_RETURN return (0)
 #endif
 
-/* This typedef is equivalant to the one for Function; it allows us
+/* This typedef is equivalent to the one for Function; it allows us
    to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */
 typedef RETSIGTYPE SigHandler ();
 
@@ -73,7 +73,8 @@
 #  define sigemptyset(m)
 #endif /* !HAVE_POSIX_SIGNALS */
 
-static SigHandler *rl_set_sighandler __P((int, SigHandler *, sighandler_cxt *));
+static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *));
+static void rl_maybe_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *));
 
 /* Exported variables for use by applications. */
 
@@ -119,6 +120,8 @@
 #  endif /* !HAVE_BSD_SIGNALS */
 #endif /* !HAVE_POSIX_SIGNALS */
 
+  RL_SETSTATE(RL_STATE_SIGHANDLER);
+
 #if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS)
   /* Since the signal will not be blocked while we are in the signal
      handler, ignore it until rl_clear_signals resets the catcher. */
@@ -169,6 +172,7 @@
       rl_reset_after_signal ();
     }
 
+  RL_UNSETSTATE(RL_STATE_SIGHANDLER);
   SIGHANDLER_RETURN;
 }
 
@@ -189,6 +193,7 @@
   rl_set_sighandler (SIGWINCH, rl_sigwinch_handler, &dummy_winch);
 #endif
 
+  RL_SETSTATE(RL_STATE_SIGHANDLER);
   rl_resize_terminal ();
 
   /* If another sigwinch handler has been installed, call it. */
@@ -196,6 +201,7 @@
   if (oh &&  oh != (SigHandler *)SIG_IGN && oh != (SigHandler *)SIG_DFL)
     (*oh) (sig);
 
+  RL_UNSETSTATE(RL_STATE_SIGHANDLER);
   SIGHANDLER_RETURN;
 }
 #endif  /* SIGWINCH */
@@ -227,7 +233,7 @@
   struct sigaction act;
 
   act.sa_handler = handler;
-  act.sa_flags = 0;
+  act.sa_flags = 0;	/* XXX - should we set SA_RESTART for SIGWINCH? */
   sigemptyset (&act.sa_mask);
   sigemptyset (&ohandler->sa_mask);
   sigaction (sig, &act, &old_handler);
@@ -358,7 +364,7 @@
   _rl_clean_up_for_exit ();
   (*rl_deprep_term_function) ();
   rl_clear_signals ();
-  rl_pending_input = 0;
+  rl_clear_pending_input ();
 }
 
 /* Reset the terminal and readline state after a signal handler returns. */
@@ -378,7 +384,7 @@
 {
   register HIST_ENTRY *entry;
 
-  free_undo_list ();
+  rl_free_undo_list ();
 
   entry = current_history ();
   if (entry)
diff --git a/readline/support/config.guess b/readline/support/config.guess
index ad5983e..5668108 100755
--- a/readline/support/config.guess
+++ b/readline/support/config.guess
@@ -1,7 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
-#
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-03-20'
+
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
@@ -21,92 +24,113 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
-# Written by Per Bothner <bothner@cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
 # The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
+# don't specify an explicit build system type.
 
-# Use $HOST_CC if defined. $CC may point to a cross-compiler
-if test x"$CC_FOR_BUILD" = x; then
-  if test x"$HOST_CC" != x; then
-    CC_FOR_BUILD="$HOST_CC"
-  else
-    if test x"$CC" != x; then
-      CC_FOR_BUILD="$CC"
-    else
-      CC_FOR_BUILD=cc
-    fi
-  fi
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
 fi
 
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int dummy(){}" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+	  if test $? = 0 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	rm -f $dummy.c $dummy.o $dummy.rel ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
+# (ghazi@noc.rutgers.edu 1994-08-24)
 if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
 	PATH=$PATH:/.attbin ; export PATH
-elif (test -f /usr/5bin/uname) >/dev/null 2>&1 ; then
+elif (test -f /usr/5bin/uname) >/dev/null 2>&1 ; then	# bash
 	PATH=$PATH:/usr/5bin
 fi
 
-UNAME=`(uname) 2>/dev/null` || UNAME=unknown
+UNAME=`(uname) 2>/dev/null` || UNAME=unknown	# bash
 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-RELEASE=`expr "$UNAME_RELEASE" : '[^0-9]*\([0-9]*\)'` # 4
-case "$RELEASE" in
-"")	RELEASE=0 ;;
-*)	RELEASE=`expr "$RELEASE" + 0` ;;
-esac
-REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'`    # 1
-REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
-
-# Some versions of i386 SVR4.2 make `uname' equivalent to `uname -n', which
-# is contrary to all other versions of uname
-if [ -n "$UNAME" ] && [ "$UNAME_S" != "$UNAME" ] && [ "$UNAME_S" = UNIX_SV ]; then
-	UNAME=UNIX_SV
-fi
-
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    # Begin cases added for Bash
-    alpha:NetBSD:*:*)
-	echo alpha-dec-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    alpha:OpenBSD:*:*)
-	echo alpha-dec-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    i?86:NetBSD:*:*)
-	echo ${UNAME_MACHINE}-pc-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    i?86:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-pc-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    sparc:NetBSD:*:*)
-	echo sparc-unknown-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sparc:OpenBSD:*:*)
-	echo sparc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    vax:NetBSD:*:*)
-	echo vax-dec-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    vax:OpenBSD:*:*)
-	echo vax-dec-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+    # NOTE -- begin cases added for bash (mostly legacy) -- NOTE
     mac68k:machten:*:*)
 	echo mac68k-apple-machten${UNAME_RELEASE}
 	exit 0 ;;
@@ -132,20 +156,14 @@
     mips:4.4BSD:*:*)
 	echo mips-mips-bsd4.4
 	exit 0 ;;
-    MIServer-S:SMP_DC.OSx:*:dcosx)
-	echo mips-pyramid-sysv4
+    MIS*:SMP_DC.OSx:*:dcosx)	# not the same as below
+	echo pyramid-pyramid-sysv4
 	exit 0 ;;
     news*:NEWS*:*:*)
 	echo mips-sony-newsos${UNAME_RELEASE}
 	exit 0 ;;
-    i?86:NEXTSTEP:*:*)
-	echo i386-next-nextstep${RELEASE}
-	exit 0 ;;
-    *680?0:NEXTSTEP:*:*)
-	echo m68k-next-nextstep${RELEASE}
-	exit 0 ;;    
     *370:AIX:*:*)
-	echo ibm370-ibm-aix
+	echo ibm370-ibm-aix${UNAME_RELEASE}
 	exit 0 ;;
     ksr1:OSF*1:*:*)
 	echo ksr1-ksr-osf1
@@ -159,16 +177,102 @@
     *3b2*:*:*:*)
 	echo we32k-att-sysv3
 	exit 0 ;;
-    *:QNX:*:42*)
-	echo i386-qssl-qnx`echo ${UNAME_VERSION}`
-	exit 0 ;;
-    Alpha*:Windows:NT:*:SP*)
+    Alpha*:Windows_NT:*:SP*)
 	echo alpha-pc-opennt
 	exit 0 ;;
-    *:Windows:NT:*:SP*)
-	echo intel-pc-opennt
+    *:Windows_NT:*:SP*)
+	echo i386-pc-opennt
 	exit 0 ;;
-    # end cases added for Bash
+
+    # NOTE -- end legacy cases added for bash -- NOTE
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    vax:OpenBSD:*:*)	# bash
+	echo vax-dec-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
     alpha:OSF1:*:*)
 	if test $UNAME_RELEASE = "V4.0"; then
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -178,92 +282,85 @@
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	cat <<EOF >$dummy.s
+	.data
+\$Lformat:
+	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
+
+	.text
 	.globl main
+	.align 4
 	.ent main
 main:
-	.frame \$30,0,\$26,0
-	.prologue 0
-	.long 0x47e03d80 # implver $0
-	lda \$2,259
-	.long 0x47e20c21 # amask $2,$1
-	srl \$1,8,\$2
-	sll \$2,2,\$2
-	sll \$0,3,\$0
-	addl \$1,\$0,\$0
-	addl \$2,\$0,\$0
-	ret \$31,(\$26),1
+	.frame \$30,16,\$26,0
+	ldgp \$29,0(\$27)
+	.prologue 1
+	.long 0x47e03d80 # implver \$0
+	lda \$2,-1
+	.long 0x47e20c21 # amask \$2,\$1
+	lda \$16,\$Lformat
+	mov \$0,\$17
+	not \$1,\$18
+	jsr \$26,printf
+	ldgp \$29,0(\$26)
+	mov 0,\$16
+	jsr \$26,exit
 	.end main
 EOF
+	eval $set_cc_for_build
 	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
 	if test "$?" = 0 ; then
-		./$dummy
-		case "$?" in
-			7)
+		case `./$dummy` in
+			0-0)
 				UNAME_MACHINE="alpha"
 				;;
-			15)
+			1-0)
 				UNAME_MACHINE="alphaev5"
 				;;
-			14)
+			1-1)
 				UNAME_MACHINE="alphaev56"
 				;;
-			10)
+			1-101)
 				UNAME_MACHINE="alphapca56"
 				;;
-			16)
+			2-303)
 				UNAME_MACHINE="alphaev6"
 				;;
+			2-307)
+				UNAME_MACHINE="alphaev67"
+				;;
+			2-1307)
+				UNAME_MACHINE="alphaev68"
+				;;
 		esac
 	fi
 	rm -f $dummy.s $dummy
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 	exit 0 ;;
     Alpha\ *:Windows_NT*:*)
-        # How do we know it's Interix rather than the generic POSIX subsystem?
-        # Should we change UNAME_MACHINE based on the output of uname instead
-        # of the specific Alpha model?
-        echo alpha-pc-interix
-        exit 0 ;;
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
 	exit 0 ;;
     Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-cbm-sysv4
+	echo m68k-unknown-sysv4
 	exit 0;;
-    amiga:NetBSD:*:*)
-	echo m68k-cbm-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-cbm-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
 	exit 0 ;;
-    arc64:OpenBSD:*:*)
-	echo mips64el-unknown-openbsd${UNAME_RELEASE}
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
 	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hkmips:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
 	exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit 0;;
-    arm32:NetBSD:*:*)
-	echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    SR2?01:HI-UX/MPP:*:*)
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
 	exit 0;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@@ -274,12 +371,12 @@
 		echo pyramid-pyramid-bsd
 	fi
 	exit 0 ;;
-    NILE:*:*:*:dcosx)
+    NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
 	exit 0 ;;
     sun4H:SunOS:5.*:*)
-        echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-        exit 0 ;;
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit 0 ;;
@@ -305,7 +402,7 @@
 	echo m68k-sun-sunos${UNAME_RELEASE}
 	exit 0 ;;
     sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
@@ -319,29 +416,23 @@
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
 	exit 0 ;;
-    atari*:NetBSD:*:*)
-	echo m68k-atari-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor 
+    # "atarist" or "atariste" at least should have a processor
     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
     # to the lowercase version "mint" (or "freemint").  Finally
     # the system name "TOS" denotes a system which is actually not
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
         echo m68k-milan-mint${UNAME_RELEASE}
         exit 0 ;;
@@ -351,33 +442,9 @@
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
         exit 0 ;;
-    sun3*:NetBSD:*:*)
-	echo m68k-sun-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:NetBSD:*:*)
-	echo m68k-apple-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    *:"Mac OS":*:*)
-	echo `uname -p`-apple-macos${UNAME_RELEASE}
-	exit 0 ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
 	exit 0 ;;
-    macppc:NetBSD:*:*)
-        echo powerpc-apple-netbsd${UNAME_RELEASE}
-        exit 0 ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
 	exit 0 ;;
@@ -391,8 +458,10 @@
 	echo clipper-intergraph-clix${UNAME_RELEASE}
 	exit 0 ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 #ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
 	int main (int argc, char *argv[]) {
 #else
 	int main (argc, argv) int argc; char *argv[]; {
@@ -413,10 +482,13 @@
 EOF
 	$CC_FOR_BUILD $dummy.c -o $dummy \
 	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && rm $dummy.c $dummy && exit 0
+	  && rm -f $dummy.c $dummy && exit 0
 	rm -f $dummy.c $dummy
 	echo mips-mips-riscos${UNAME_RELEASE}
 	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
 	exit 0 ;;
@@ -430,17 +502,19 @@
 	echo m88k-motorola-sysv3
 	exit 0 ;;
     AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
-	  if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-	     -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
 		echo m88k-dg-dgux${UNAME_RELEASE}
-	  else
+	    else
 		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	  fi
+	    fi
 	else
-	  echo i586-dg-dgux${UNAME_RELEASE}
+	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
  	exit 0 ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
@@ -462,11 +536,20 @@
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
 	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
 	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i?86:AIX:*:*)
+    i*86:AIX:*:*)
 	echo i386-ibm-aix
 	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
 		sed 's/^		//' << EOF >$dummy.c
 		#include <sys/systemcfg.h>
 
@@ -478,7 +561,7 @@
 			exit(0);
 			}
 EOF
-		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
 		rm -f $dummy.c $dummy
 		echo rs6000-ibm-aix3.2.5
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
@@ -487,21 +570,17 @@
 		echo rs6000-ibm-aix3.2
 	fi
 	exit 0 ;;
-    *:AIX:*:4)
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
-	elif grep bos410 /usr/include/stdio.h >/dev/null 2>&1; then
-		IBM_REV=4.1
-	elif grep bos411 /usr/include/stdio.h >/dev/null 2>&1; then
-		IBM_REV=4.1.1
 	else
-		IBM_REV=4.${UNAME_RELEASE}
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
 	exit 0 ;;
@@ -511,7 +590,7 @@
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
 	exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
 	exit 0 ;;                           # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
@@ -527,11 +606,30 @@
 	echo m68k-hp-bsd4.4
 	exit 0 ;;
     9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
-	    9000/31? )		HP_ARCH=m68000 ;;
-	    9000/[34]?? )	HP_ARCH=m68k ;;
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
 	    9000/[678][0-9][0-9])
-              sed 's/^              //' << EOF >$dummy.c
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
               #include <stdlib.h>
               #include <unistd.h>
 
@@ -562,13 +660,19 @@
                   exit (0);
               }
 EOF
-	($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
-	rm -f $dummy.c $dummy
+		    (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
+		    if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+		    rm -f $dummy.c $dummy
+		fi ;;
 	esac
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
 	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
     3050*:HI-UX:*:*)
+	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#include <unistd.h>
 	int
@@ -594,7 +698,7 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
 	rm -f $dummy.c $dummy
 	echo unknown-hitachi-hiuxwe2
 	exit 0 ;;
@@ -604,16 +708,16 @@
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
 	exit 0 ;;
-    *9??*:MPE/iX:*:*)
-        echo hppa1.0-hp-mpeix
-        exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
 	exit 0 ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
 	exit 0 ;;
-    i?86:OSF1:*:*)
+    i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
@@ -623,9 +727,6 @@
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
 	exit 0 ;;
-    hppa*:OpenBSD:*:*)
-        echo hppa-unknown-openbsd
-        exit 0 ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
         exit 0 ;;
@@ -644,289 +745,235 @@
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
         exit 0 ;;
-    CRAY*X-MP:*:*:*)
-	echo xmp-cray-unicos
-        exit 0 ;;
     CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE}
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE}
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3D:*:*:*)
+	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*T3E:*:*:*)
-        echo alpha-cray-unicosmk${UNAME_RELEASE}
-        exit 0 ;;
-    CRAY-2:*:*:*)
-	echo cray2-cray-unicos
-        exit 0 ;;
-    F300:UNIX_System_V:*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
-    F301:UNIX_System_V:*:*)
-	echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
-    hp3[0-9][05]:NetBSD:*:*)
-	echo m68k-hp-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-        echo m68k-unknown-openbsd${UNAME_RELEASE}
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
         exit 0 ;;
-    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
 	exit 0 ;;
     sparc*:BSD/OS:*:*)
-        echo sparc-unknown-bsdi${UNAME_RELEASE}
-        exit 0 ;;
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
     *:BSD/OS:*:*)
-        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-        exit 0 ;;
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
     *:FreeBSD:*:*)
-	if test -x /usr/bin/objformat; then
-	    if test "elf" = "`/usr/bin/objformat`"; then
-		echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-		exit 0
-	    fi
-	fi
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-=(].*//'`
-	exit 0 ;;
-    *:NetBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit 0 ;;
     i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin32
+	echo ${UNAME_MACHINE}-pc-cygwin
 	exit 0 ;;
     i*:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:3*)
+	echo i386-pc-interix3
+	exit 0 ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-        # How do we know it's Interix rather than the generic POSIX subsystem?
-        # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-        # UNAME_MACHINE based on the output of uname instead of i386?
-        echo i386-pc-interix
-        exit 0 ;;
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i386-pc-interix
+	exit 0 ;;
     i*:UWIN*:*)
-        echo ${UNAME_MACHINE}-pc-uwin
-        exit 0 ;;
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit 0 ;;    
+	exit 0 ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit 0 ;;
     *:GNU:*:*)
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit 0 ;;
-    *:Linux:*:*)
-        # uname on the ARM produces all sorts of strangeness, and we need to
-        # filter it out.
-        case "$UNAME_MACHINE" in
-          armv*)                      UNAME_MACHINE=$UNAME_MACHINE ;;
-          arm* | sa110*)              UNAME_MACHINE="arm" ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	rm -f $dummy.c
+	test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
         esac
-
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us.  cd to the root directory to prevent
+	# first see if it will tell us. cd to the root directory to prevent
 	# problems with other programs or directories called `ld' in the path.
-	ld_help_string=`cd /; ld --help 2>&1`
-	ld_supported_emulations=`echo $ld_help_string \
-			 | sed -ne '/supported emulations:/!d
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
 				    s/[ 	][ 	]*/ /g
-				    s/.*supported emulations: *//
+				    s/.*supported targets: *//
 				    s/ .*//
 				    p'`
-	case "$ld_supported_emulations" in
-	  *ia64)      echo "${UNAME_MACHINE}-unknown-linux"         ; exit 0 ;;
-	  i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
-	  i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
-	  sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-	  elf32ppc | elf32ppclinux)
-		# Determine Lib Version
-		cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
-#if defined(__GLIBC__)
-  printf("%s %s\n", __libc_version, __libc_release);
-#else
-  printf("unkown\n");
-#endif
-  return 0;
-}
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;		
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
 EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy | grep 1\.99 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi	
-		rm -f $dummy.c $dummy
-		echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
- 	esac
-
-	if test "${UNAME_MACHINE}" = "alpha" ; then
-		sed 's/^	//'  <<EOF >$dummy.s
-		.globl main
-		.ent main
-	main:
-		.frame \$30,0,\$26,0
-		.prologue 0
-		.long 0x47e03d80 # implver $0
-		lda \$2,259
-		.long 0x47e20c21 # amask $2,$1
-		srl \$1,8,\$2
-		sll \$2,2,\$2
-		sll \$0,3,\$0
-		addl \$1,\$0,\$0
-		addl \$2,\$0,\$0
-		ret \$31,(\$26),1
-		.end main
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy
-			case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-			esac
-
-			objdump --private-headers $dummy | \
-			  grep ld.so.1 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi
-		rm -f $dummy.s $dummy
-		echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
-	elif test "${UNAME_MACHINE}" = "mips" ; then
-	  cat >$dummy.c <<EOF
-#ifdef __cplusplus
-int main (int argc, char *argv[]) {
-#else
-int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
-  printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
-  printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	else
-	  # Either a pre-BFD a.out linker (linux-gnuoldld)
-	  # or one that does not give us useful --help.
-	  # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
-	  # If ld does not provide *any* "supported emulations:"
-	  # that means it is gnuoldld.
-	  echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
-	  test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
-	  case "${UNAME_MACHINE}" in
-	  i?86)
-	    VENDOR=pc;
-	    ;;
-	  *)
-	    VENDOR=unknown;
-	    ;;
-	  esac
-	  # Determine whether the default compiler is a.out or elf
-	  cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-#  if __GLIBC__ >= 2
-    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-#  else
-    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-#  endif
-# else
-   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
-  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  ${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-# are messed up and put the nodename in both sysname and nodename.
-    i?86:DYNIX/ptx:4*:*)
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	rm -f $dummy.c
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
 	echo i386-sequent-sysv4
 	exit 0 ;;
-# added by chet for bash based on usenet posting from <hops@sco.com> and
-# documentation on SCO's web site -- UnixWare 7 (SVR5)
-#    i?86:UnixWare:5*:*)
-#	echo ${UNAME_MACHINE}-pc-sysv5uw${UNAME_VERSION}
-#	exit 0 ;;
-    i?86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
+        # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit 0 ;;
-    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:* | i?86:UNIX_SV:4.*:*)
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
 	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
 	exit 0 ;;
-    i?86:*:5:7*)
-        UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
-        (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-        (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
-        (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
-        (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
-        echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
-        exit 0 ;;
-    i?86:*:3.2:*)
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
 		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
@@ -944,11 +991,15 @@
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
 	exit 0 ;;
-    pc:*:*:*)
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
 	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit 0 ;;
@@ -968,7 +1019,7 @@
 	exit 0 ;;
     M68*:*:R3V[567]*:*)
 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -977,30 +1028,33 @@
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4 && exit 0 ;;
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit 0 ;;
-    m68*:LynxOS:2.*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
-	echo i386-pc-lynxos${UNAME_RELEASE}
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
-    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+    rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
-    *:LynxOS:*:*)
-	echo ${UNAME_MACHINE}-unknown-lynxos${UNAME_RELEASE}
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
 	exit 0 ;;
-    RM*:SINIX-*:*:* | RM*:ReliantUNIX-*:*:*)
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
 	exit 0 ;;
     *:SINIX-*:*:*)
@@ -1011,10 +1065,10 @@
 		echo ns32k-sni-sysv
 	fi
 	exit 0 ;;
-    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			   # says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1023,27 +1077,31 @@
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit 0 ;;              
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
 	exit 0 ;;
-    news*:NEWS-OS:*:6*)
+    news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
 	exit 0 ;;
-    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
+	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
-		echo mips-unknown-sysv${UNAME_RELEASE}
+	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
 	exit 0 ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
 	exit 0 ;;
-    BeMac:BeOS:*:*)
-	echo powerpc-apple-beos
-	exit 0 ;;
-    BePC:BeOS:*:*)
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
 	exit 0 ;;
     SX-4:SUPER-UX:*:*)
@@ -1058,11 +1116,78 @@
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 	exit 0 ;;
+    *:Darwin:*:*)
+	echo `uname -p`-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
 
+eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
 # include <sys/types.h>
@@ -1088,11 +1213,7 @@
 #endif
 
 #if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp9000) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
+  printf ("arm-acorn-riscix"); exit (0);
 #endif
 
 #if defined (hp300) && !defined (hpux)
@@ -1153,129 +1274,35 @@
 #endif
 
 #if defined (vax)
-#if !defined (ultrix)
-  printf ("vax-dec-bsd\n"); exit (0);
-#else
-  printf ("vax-dec-ultrix\n"); exit (0);
-#endif
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
 #endif
 
 #if defined (alliant) && defined (i860)
   printf ("i860-alliant-bsd\n"); exit (0);
 #endif
 
-/* Begin cases added for Bash */
-#if defined (tahoe)
-  printf ("tahoe-cci-bsd\n"); exit (0);
-#endif
-
-#if defined (nec_ews)
-#  if defined (SYSTYPE_SYSV)
-  printf ("ews4800-nec-sysv4\n"); exit 0;
-#  else
-  printf ("ews4800-nec-bsd\n"); exit (0);
-#  endif
-#endif
-
-#if defined (sony)
-#  if defined (SYSTYPE_SYSV)
-  printf ("mips-sony-sysv4\n"); exit 0;
-#  else
-  printf ("mips-sony-bsd\n"); exit (0);
-#  endif
-#endif
-
-#if defined (ardent)
-  printf ("titan-ardent-bsd\n"); exit (0);
-#endif
-
-#if defined (stardent)
-  printf ("stardent-stardent-sysv\n"); exit (0);
-#endif
-
-#if defined (ibm032)
-  printf ("ibmrt-ibm-bsd4.3\n"); exit (0);
-#endif
-
-#if defined (sequent) && defined (i386)
-  printf ("i386-sequent-bsd\n"); exit (0);
-#endif
-
-#if defined (qnx) && defined (i386)
-  printf ("i386-pc-qnx\n"); exit (0);
-#endif
-
-#if defined (gould)
-  printf ("gould-gould-bsd\n"); exit (0);
-#endif
-
-#if defined (unixpc)
-  printf ("unixpc-att-sysv\n"); exit (0);
-#endif
-
-#if defined (att386)
-  printf ("i386-att-sysv3\n"); exit (0);
-#endif
-
-#if defined (__m88k) && defined (__UMAXV__)
-  printf ("m88k-encore-sysv3\n"); exit (0);
-#endif
-
-#if defined (drs6000)
-  printf ("drs6000-icl-sysv4.2\n"); exit (0);
-#endif
-
-#if defined (clipper)
-  printf ("clipper-orion-bsd\n"); exit (0);
-#endif
-
-#if defined (is68k)
-  printf ("m68k-isi-bsd\n"); exit (0);
-#endif
-
-#if defined (luna88k)
-  printf ("luna88k-omron-bsd\n"); exit (0);
-#endif
-
-#if defined (butterfly) && defined (BFLY1)
-  printf ("butterfly-bbn-mach\n"); exit (0);
-#endif
-
-#if defined (tower32)
-  printf ("tower32-ncr-sysv4\n"); exit (0);
-#endif
-
-#if defined (MagicStation)
-  printf ("magicstation-unknown-bsd\n"); exit (0);
-#endif
-
-#if defined (scs)
-  printf ("symmetric-scs-bsd4.2\n"); exit (0);
-#endif
-
-#if defined (tandem)
-  printf ("tandem-tandem-sysv\n"); exit (0);
-#endif
-
-#if defined (cadmus)
-  printf ("cadmus-pcs-sysv\n"); exit (0);
-#endif
-
-#if defined (masscomp)
-  printf ("masscomp-masscomp-sysv3\n"); exit (0);
-#endif
-
-#if defined (hbullx20)
-  printf ("hbullx20-bull-sysv3\n"); exit (0);
-#endif
-
-/* End cases added for Bash */
-
   exit (1);
 }
 EOF
 
-${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
 rm -f $dummy.c $dummy
 
 # Apollos put the system type in the environment.
@@ -1308,21 +1335,59 @@
     esac
 fi
 
-# Begin cases added for Bash
+# NOTE -- Begin fallback cases added for bash -- NOTE
 case "$UNAME" in
 uts) echo uts-amdahl-sysv${UNAME_RELEASE}; exit 0 ;;
 esac
 
-if [ -d /usr/amiga ]; then
-	echo m68k-cbm-sysv${UNAME_RELEASE}; exit 0;
-fi
-
 if [ -f /bin/fxc.info ]; then
 	echo fxc-alliant-concentrix
 	exit 0
 fi
-# end cases added for Bash
+# NOTE -- End fallback cases added for bash -- NOTE
 
-#echo '(Unable to guess system type)' 1>&2
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
 
 exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/readline/support/config.sub b/readline/support/config.sub
index 7d0c026..538dc09 100755
--- a/readline/support/config.sub
+++ b/readline/support/config.sub
@@ -1,6 +1,10 @@
 #! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-#   Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-03-07'
+
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
 # can handle that machine.  It does not imply ALL GNU software can.
@@ -25,6 +29,9 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
@@ -45,30 +52,73 @@
 #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
-if [ x$1 = x ]
-then
-	echo Configuration name missing. 1>&2
-	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
-	echo "or     $0 ALIAS" 1>&2
-	echo where ALIAS is a recognized configuration type. 1>&2
-	exit 1
-fi
+me=`echo "$0" | sed -e 's,.*/,,'`
 
-# First pass through any local machine types.
-case $1 in
-	*local*)
-		echo $1
-		exit 0
-		;;
-	*)
-	;;
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
 esac
 
 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  linux-gnu*)
+  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -94,7 +144,7 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple )
+	-apple | -axis)
 		os=
 		basic_machine=$1
 		;;
@@ -105,9 +155,17 @@
 	-scout)
 		;;
 	-wrs)
-		os=vxworks
+		os=-vxworks
 		basic_machine=$1
 		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -156,33 +214,60 @@
 	-psos*)
 		os=-psos
 		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
 esac
 
 # Decode aliases for certain CPU-COMPANY combinations.
 case $basic_machine in
 	# Recognize the basic CPU types without company name.
 	# Some are omitted here because they have special meanings below.
-	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
-		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
-		| 580 | i960 | h8300 \
-		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
-		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
-		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
-		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
-		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
-		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
-		| mips64vr5000 | miprs64vr5000el | mcore \
-		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
-	        | thumb | d10v)
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dsp16xx \
+	| fr30 \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| m32r | m68000 | m68k | m88k | mcore \
+	| mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el | mips64vr4300 \
+	| mips64vr4300el | mips64vr5000 | mips64vr5000el \
+	| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
+	| mipsisa32 | mipsisa64 \
+	| mn10200 | mn10300 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
 
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
-	i[34567]86)
+	i*86 | x86_64)
 	  basic_machine=$basic_machine-pc
 	  ;;
 	# Object if more than one company name word.
@@ -191,33 +276,54 @@
 		exit 1
 		;;
 	# Recognize the basic CPU types with company name.
-	# FIXME: clean up the formatting here.
-	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
-	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
-	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
-	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
-	      | xmp-* | ymp-* \
-	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
-	      | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
-	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
-	      | clipper-* | orion-* \
-	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
-	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
-	      | mips64el-* | mips64orion-* | mips64orionel-* \
-	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
-	      | mipstx39-* | mipstx39el-* | mcore-* \
-	      | f301-* | armv*-* | t3e-* \
-	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
-	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c54x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| m32r-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
+	| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
+	| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
 		;;
-	# BEGIN cases added for Bash
-	butterfly-bbn* | cadmus-* | ews*-nec | ibmrt-ibm* | masscomp-masscomp \
-	      | tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \
-	      | concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \
-	      | *-convex | sx[45]*-nec )
-		;;
-	# END cases added for Bash
 
+	# NOTE -- BEGIN cases added for Bash -- NOTE
+	butterfly-bbn* | cadmus-* | ews*-nec | masscomp-masscomp \
+	| tandem-* | symmetric-* | drs6000-icl | *-*ardent | concurrent-* \
+	| ksr1-* | esa-ibm | fxc-alliant | *370-amdahl | sx[45]*-nec )
+		;;
+	# NOTE -- END cases added for Bash -- NOTE
+	
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
@@ -253,15 +359,14 @@
 		os=-sysv
 		;;
 	amiga | amiga-*)
-#		basic_machine=m68k-cbm
 		basic_machine=m68k-unknown
 		;;
 	amigaos | amigados)
-		basic_machine=m68k-cbm
+		basic_machine=m68k-unknown
 		os=-amigaos
 		;;
 	amigaunix | amix)
-		basic_machine=m68k-cbm
+		basic_machine=m68k-unknown
 		os=-sysv4
 		;;
 	apollo68)
@@ -280,6 +385,10 @@
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -300,27 +409,30 @@
 		basic_machine=c38-convex
 		os=-bsd
 		;;
-	cray | ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	cray2)
-		basic_machine=cray2-cray
-		os=-unicos
-		;;
-	[ctj]90-cray)
-		basic_machine=c90-cray
+	cray | j90)
+		basic_machine=j90-cray
 		os=-unicos
 		;;
 	crds | unos)
 		basic_machine=m68k-crds
 		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
 	da30 | da30-*)
 		basic_machine=m68k-da30
 		;;
 	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
 		basic_machine=mips-dec
 		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
 	delta | 3300 | motorola-3300 | motorola-delta \
 	      | 3300-motorola | delta-motorola)
 		basic_machine=m68k-motorola
@@ -337,9 +449,6 @@
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
-	hbullx20-bull)
-		basic_machine=m68k-bull
-		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -348,7 +457,7 @@
 		basic_machine=elxsi-elxsi
 		os=-bsd
 		;;
-	encore | umax | mmax | multimax)
+	encore | umax | mmax | multimax)	# bash
 		basic_machine=ns32k-encore
 		;;
 	es1800 | OSE68k | ose68k | ose | OSE)
@@ -365,6 +474,10 @@
 		basic_machine=tron-gmicro
 		os=-sysv
 		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
 	h3050r* | hiux*)
 		basic_machine=hppa1.1-hitachi
 		os=-hiuxwe2
@@ -385,6 +498,9 @@
 		basic_machine=m88k-harris
 		os=-sysv3
 		;;
+	hbullx20-bull)
+		basic_machine=m68k-bull		# bash
+		;;
 	hp300-*)
 		basic_machine=m68k-hp
 		;;
@@ -437,29 +553,36 @@
 		os=-proelf
 		;;
 	ibm032-*)
-		basic_machine=ibmrt-ibm
+		basic_machine=ibmrt-ibm		# bash
 		;;
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
-		os=-mvs
 		;;
 # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i[34567]86v32)
+	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
 		;;
-	i[34567]86v4*)
+	i*86v4*)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv4
 		;;
-	i[34567]86v)
+	i*86v)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv
 		;;
-	i[34567]86sol2)
+	i*86sol2)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-solaris2
 		;;
+	i386-go32)
+		basic_machine=i386-pc		# bash
+		os=-go32
+		;;
+	i386-mingw32)
+		basic_machine=i386-pc		# bash
+		os=-mingw32
+		;;
 	i386mach)
 		basic_machine=i386-mach
 		os=-mach
@@ -468,14 +591,6 @@
 		basic_machine=i386-unknown
 		os=-vsta
 		;;
-	i386-go32 | go32)
-		basic_machine=i386-unknown
-		os=-go32
-		;;
-	i386-mingw32 | mingw32)
-		basic_machine=i386-unknown
-		os=-mingw32
-		;;
 	iris | iris4d)
 		basic_machine=mips-sgi
 		case $os in
@@ -490,11 +605,11 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
-	luna88k-omron* | m88k-omron*)
+	luna88k-omron* | m88k-omron*)		# bash
 		basic_machine=m88k-omron
 		;;
 	magicstation*)
-		basic_machine=magicstation-unknown
+		basic_machine=magicstation-unknown	# bash
 		;;
 	magnum | m3230)
 		basic_machine=mips-mips
@@ -504,35 +619,43 @@
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
-	*mint | *MiNT)
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
 		basic_machine=m68k-atari
 		os=-mint
 		;;
-	mipsel*-linux*)
-		basic_machine=mipsel-unknown
-		os=-linux-gnu
-		;;
-	mips*-linux*)
-		basic_machine=mips-unknown
-		os=-linux-gnu
-		;;
 	mips3*-*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
 		;;
 	mips3*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
 	monitor)
 		basic_machine=m68k-rom68k
 		os=-coff
 		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
 	msdos)
-		basic_machine=i386-unknown
+		basic_machine=i386-pc
 		os=-msdos
 		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -542,7 +665,7 @@
 		os=-netbsd
 		;;
 	netwinder)
-		basic_machine=armv4l-corel
+		basic_machine=armv4l-rebel
 		os=-linux
 		;;
 	news | news700 | news800 | news900)
@@ -557,10 +680,10 @@
 		basic_machine=mips-sony
 		os=-newsos
 		;;
-        necv70)
-                basic_machine=v70-nec
-                os=-sysv
-                ;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
 	next | m*-next )
 		basic_machine=m68k-next
 		case $os in
@@ -586,33 +709,44 @@
 		basic_machine=i960-intel
 		os=-nindy
 		;;
-        mon960)
-                basic_machine=i960-intel
-                os=-mon960
-                ;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
 	np1)
 		basic_machine=np1-gould
 		;;
-	osr5 | sco5)	# SCO Open Server
-		basic_machine=i386-pc
-		os=-sco3.2v5
+	nsr-tandem)
+		basic_machine=nsr-tandem
 		;;
 	odt | odt3 | odt4)	# SCO Open Desktop
-		basic_machine=i386-pc
+		basic_machine=i386-pc		# bash
 		os=-sco3.2v4
 		;;
-        op50n-* | op60c-*)
-                basic_machine=hppa1.1-oki
-                os=-proelf
-                ;;
-        OSE68000 | ose68000)
-                basic_machine=m68000-ericsson
-                os=-ose
-                ;;
-        os68k)
-                basic_machine=m68k-none
-                os=-os68k
-                ;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	osr5 | sco5)		# SCO Open Server
+		basic_machine=i386-pc		# bash
+		os=-sco3.2v5
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
 	pa-hitachi)
 		basic_machine=hppa1.1-hitachi
 		os=-hiuxwe2
@@ -627,59 +761,79 @@
 	pbb)
 		basic_machine=m68k-tti
 		;;
-	pc532 | pc532-*)
+        pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
-	pentium | p5 | k5 | k6 | nexen)
-		basic_machine=i586-intel
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
 		;;
-        pentiumpro | p6 | 6x86)
-                basic_machine=i686-pc
-                ;;
+	pentiumpro | p6 | 6x86 | athlon)
+		basic_machine=i686-pc
+		;;
 	pentiumii | pentium2)
-		basic_machine=i786-pc
+		basic_machine=i686-pc
 		;;
-	pentium-* | p5-* | k5-* | k6-* | nexen-*)
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	pentiumpro-* | p6-* | 6x86*)
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pentiumii-* | pentium2-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pn)
 		basic_machine=pn-gould
 		;;
-	power)	basic_machine=rs6000-ibm
+	power)	basic_machine=power-ibm
 		;;
 	ppc)	basic_machine=powerpc-unknown
-		;;
+	        ;;
 	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
-		;;
+	        ;;
 	ppcle-* | powerpclittle-*)
 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
+	ppc64)	basic_machine=powerpc64-unknown
+	        ;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+	        ;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	ps2)
 		basic_machine=i386-ibm
 		;;
-        rom68k)
-                basic_machine=m68k-rom68k
-                os=-coff
-                ;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
 	rm[46]00)
 		basic_machine=mips-siemens
 		;;
 	rtpc | rtpc-*)
 		basic_machine=romp-ibm
 		;;
-        sa29200)
-                basic_machine=a29k-amd
-                os=-udi
-                ;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
 	sequent)
 		basic_machine=i386-sequent
 		;;
@@ -687,10 +841,10 @@
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
-        sparclite-wrs)
-                basic_machine=sparclite-wrs
-                os=-vxworks
-                ;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
 	sps7)
 		basic_machine=m68k-bull
 		os=-sysv2
@@ -698,13 +852,13 @@
 	spur)
 		basic_machine=spur-unknown
 		;;
-        st2000)
-                basic_machine=m68k-tandem
-                ;;
-        stratus)
-                basic_machine=i860-stratus
-                os=-sysv4
-                ;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -745,20 +899,40 @@
 	sun386 | sun386i | roadrunner)
 		basic_machine=i386-sun
 		;;
+        sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
 	symmetry)
 		basic_machine=i386-sequent
 		os=-dynix
 		;;
-        t3e)
-                basic_machine=t3e-cray
-                os=-unicos
-                ;;
-        tx39)
-                basic_machine=mipstx39-unknown
-                ;;
-        tx39el)
-                basic_machine=mipstx39el-unknown
-                ;;
+	t3d)
+		basic_machine=alpha-cray
+		os=-unicos
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
 	tower | tower-32)
 		basic_machine=m68k-ncr
 		;;
@@ -770,18 +944,18 @@
 		basic_machine=a29k-nyu
 		os=-sym1
 		;;
-	uw2 | unixware | unixware2)
+	uw2 | unixware | unixware2)		# bash
 		basic_machine=i386-pc
 		os=-sysv4.2uw2.1
 		;;
-	uw7 | unixware7)
+	uw7 | unixware7)			# bash
 		basic_machine=i386-pc
 		os=-sysv5uw7
 		;;
-        v810 | necv810)
-                basic_machine=v810-nec
-                os=-none
-                ;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
 	vaxv)
 		basic_machine=vax-dec
 		os=-sysv
@@ -791,8 +965,8 @@
 		os=-vms
 		;;
 	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
+               basic_machine=f301-fujitsu
+               ;;
 	vxworks960)
 		basic_machine=i960-wrs
 		os=-vxworks
@@ -805,25 +979,29 @@
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
-        w65*)
-                basic_machine=w65-wdc
-                os=-none
-                ;;
-        w89k-*)
-                basic_machine=hppa1.1-winbond
-                os=-proelf
-                ;;
-	xmp)
-		basic_machine=xmp-cray
-		os=-unicos
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
 		;;
-	xps | xps100)
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	windows32)
+		basic_machine=i386-pc
+		os=-windows32-msvcrt
+		;;
+        xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
-        z8k-*-coff)
-                basic_machine=z8k-unknown
-                os=-sim
-                ;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -831,21 +1009,14 @@
 
 # Here we handle the default manufacturer of certain CPU types.  It is in
 # some cases the only manufacturer, in others, it is the most popular.
-        w89k)
-                basic_machine=hppa1.1-winbond
-                ;;
-        op50n)
-                basic_machine=hppa1.1-oki
-                ;;
-        op60c)
-                basic_machine=hppa1.1-oki
-                ;;
-	mips)
-		if test "x$os" = "x-linux-gnu" ; then
-			basic_machine=mips-unknown
-		else
-			basic_machine=mips-mips
-		fi
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
 		;;
 	romp)
 		basic_machine=romp-ibm
@@ -856,16 +1027,26 @@
 	vax)
 		basic_machine=vax-dec
 		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
 	pdp11)
 		basic_machine=pdp11-dec
 		;;
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sparc | sparcv9)
+	sh3 | sh4 | sh3eb | sh4eb)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv9 | sparcv9b)
 		basic_machine=sparc-sun
 		;;
-	cydra)
+        cydra)
 		basic_machine=cydra-cydrome
 		;;
 	orion)
@@ -874,16 +1055,19 @@
 	orion105)
 		basic_machine=clipper-highlevel
 		;;
-        mac | mpw | mac-mpw)
-                basic_machine=m68k-apple
-                ;;
-        pmac | pmac-mpw)
-                basic_machine=powerpc-apple
-                ;;
-        c4x*)
-                basic_machine=c4x-none
-                os=-coff
-                ;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	c4x*)
+		basic_machine=c4x-none
+		os=-coff
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
 	*)
 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
 		exit 1
@@ -907,8 +1091,8 @@
 if [ x"$os" != x"" ]
 then
 case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
+        # First match some system type aliases
+        # that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -919,14 +1103,11 @@
 	-svr4*)
 		os=-sysv4
 		;;
-	-unixware | -uw | -unixware2* | -uw2*)
-		os=-sysv4.2uw2.1
-		;;
-	-unixware7* | -uw7*)
+	-unixware7*)			# bash
 		os=-sysv5uw7
 		;;
-        -unixware*)
-                os=-sysv4.2uw
+	-unixware*)
+		os=-sysv4.2uw
 		;;
 	-gnu/linux*)
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
@@ -946,23 +1127,39 @@
 	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
+	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
-	# BEGIN CASES ADDED FOR Bash
-	-qnx* | -powerux* | -superux* )
+	# NOTE -- BEGIN CASES ADDED FOR Bash -- NOTE
+	-powerux* | -superux*)
 		;;
-	# END CASES ADDED FOR Bash
-        -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-              | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-              | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
-                ;;
-        -mac*)
-                os=`echo $os | sed -e 's|mac|macos|'`
-                ;;
-
+	# NOTE -- END CASES ADDED FOR Bash -- NOTE
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto*)
+		os=-nto-qnx
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
 	-linux*)
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		;;
@@ -972,6 +1169,12 @@
 	-sunos6*)
 		os=`echo $os | sed -e 's|sunos6|solaris3|'`
 		;;
+	-opened*)
+		os=-openedition
+		;;
+	-wince*)
+		os=-wince
+		;;
 	-osfrose*)
 		os=-osfrose
 		;;
@@ -987,14 +1190,23 @@
 	-acis*)
 		os=-aos
 		;;
-        -386bsd)
-                os=-bsd
-                ;;
+	-atheos*)
+		os=-atheos
+		;;
+	-386bsd)
+		os=-bsd
+		;;
 	-ctix* | -uts*)
 		os=-sysv
 		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
 	-ns2 )
-		os=-nextstep2
+	        os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
 		;;
 	# Preserve the version number of sinix5.
 	-sinix5.*)
@@ -1018,24 +1230,24 @@
 	-sysvr4)
 		os=-sysv4
 		;;
-	-sysvr5)
+	-sysvr5)				# bash
 		os=-sysv5
 		;;
-	# This must come after -sysvr[45].
+	# This must come after -sysvr4.
 	-sysv*)
 		;;
-        -ose*)
-                os=-ose
-                ;;
-        -es1800*)
-                os=-ose
-                ;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
 	-xenix)
 		os=-xenix
 		;;
-        -*mint | -*MiNT)
-                os=-mint
-                ;;
+        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+	        os=-mint
+		;;
 	-none)
 		;;
 	*)
@@ -1061,10 +1273,17 @@
 	*-acorn)
 		os=-riscix1.2
 		;;
+	arm*-rebel)
+		os=-linux
+		;;
 	arm*-semi)
 		os=-aout
 		;;
-	pdp11-*)
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+        pdp11-*)
 		os=-none
 		;;
 	*-dec | vax-*)
@@ -1082,15 +1301,18 @@
 		# default.
 		# os=-sunos4
 		;;
-        m68*-cisco)
-                os=-aout
-                ;;
-        mips*-cisco)
-                os=-elf
-                ;;
-        mips*-*)
-                os=-elf
-                ;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
 	*-tti)	# must be before sparc entry or we get the wrong os.
 		os=-sysv3
 		;;
@@ -1103,15 +1325,15 @@
 	*-ibm)
 		os=-aix
 		;;
-        *-wec)
-                os=-proelf
-                ;;
-        *-winbond)
-                os=-proelf
-                ;;
-        *-oki)
-                os=-proelf
-                ;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
 	*-hp)
 		os=-hpux
 		;;
@@ -1154,39 +1376,39 @@
 	*-next)
 		os=-nextstep3
 		;;
-	*-gould)
+        *-gould)
 		os=-sysv
 		;;
-	*-highlevel)
+        *-highlevel)
 		os=-bsd
 		;;
 	*-encore)
 		os=-bsd
 		;;
-	*-sgi)
+        *-sgi)
 		os=-irix
 		;;
-	*-siemens)
+        *-siemens)
 		os=-sysv4
 		;;
 	*-masscomp)
 		os=-rtu
 		;;
-	f301-fujitsu)
+	f30[01]-fujitsu | f700-fujitsu)
 		os=-uxpv
 		;;
-        *-rom68k)
-                os=-coff
-                ;;
-        *-*bug)
-                os=-coff
-                ;;
-        *-apple)
-                os=-macos
-                ;;
-        *-atari*)
-                os=-mint
-                ;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
 	*)
 		os=-none
 		;;
@@ -1205,18 +1427,21 @@
 			-sunos*)
 				vendor=sun
 				;;
-			-lynxos*)
+			-lynxos*)			# bash
 				vendor=lynx
 				;;
 			-aix*)
 				vendor=ibm
 				;;
-                        -beos*)
-                                vendor=be
-                                ;;
+			-beos*)
+				vendor=be
+				;;
 			-hpux*)
 				vendor=hp
 				;;
+			-mpeix*)
+				vendor=hp
+				;;
 			-hiux*)
 				vendor=hitachi
 				;;
@@ -1232,7 +1457,7 @@
 			-genix*)
 				vendor=ns
 				;;
-			-mvs*)
+			-mvs* | -opened*)
 				vendor=ibm
 				;;
 			-ptx*)
@@ -1244,18 +1469,29 @@
 			-aux*)
 				vendor=apple
 				;;
-                        -hms*)
-                                vendor=hitachi
-                                ;;
-                        -mpw* | -macos*)
-                                vendor=apple
-                                ;;
-                        -*mint | -*MiNT)
-                                vendor=atari
-                                ;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
 		esac
 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
 		;;
 esac
 
 echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/readline/support/install.sh b/readline/support/install.sh
index ea88212..0cac004 100755
--- a/readline/support/install.sh
+++ b/readline/support/install.sh
@@ -5,6 +5,18 @@
 #
 # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
 #
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 #
diff --git a/readline/support/mkdirs b/readline/support/mkdirs
index b79d971..ce4fb23 100755
--- a/readline/support/mkdirs
+++ b/readline/support/mkdirs
@@ -5,6 +5,22 @@
 # Chet Ramey
 # chet@po.cwru.edu
 
+# Copyright (C) 1996-2002 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
 for dir
 do
 
diff --git a/readline/support/mkdist b/readline/support/mkdist
index a1e4eb1..06e6155 100755
--- a/readline/support/mkdist
+++ b/readline/support/mkdist
@@ -7,6 +7,24 @@
 # SRCDIR defaults to src
 # MANIFEST defaults to $SRCDIR/MANIFEST
 #
+# Chet Ramey
+# chet@po.cwru.edu
+
+# Copyright (C) 1996-2002 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
 
 SRCDIR=src
 ROOTNAME=bash
@@ -68,6 +86,8 @@
 	case "$type" in
 	d)	mkdir $newdir/$fname ;;
 	f)	cp -p $SRCDIR/$fname $newdir/$fname ;;
+	s)	ln -s $mode $newdir/$fname ; mode= ;;		# symlink
+	l)	ln $mode $newdir/$fname ; mode= ;;		# hard link
 	*)	echo "unknown file type $type" 1>&2 ;;
 	esac
 
diff --git a/readline/support/shlib-install b/readline/support/shlib-install
index 471fec7..654cfa9 100755
--- a/readline/support/shlib-install
+++ b/readline/support/shlib-install
@@ -63,10 +63,11 @@
 
 # post-install/uninstall
 
-# HP-UX requires that a shared library have execute permission
+# HP-UX and Darwin/MacOS X require that a shared library have execute permission
 case "$host_os" in
-hpux*)	if [ -z "$uninstall" ]; then
-		chmod 755 ${INSTALLDIR}/${LIBNAME}
+hpux*|darwin*|macosx*)
+	if [ -z "$uninstall" ]; then
+		chmod 555 ${INSTALLDIR}/${LIBNAME}
 	fi ;;
 *)	;;
 esac
@@ -82,54 +83,60 @@
 *.[0-9])		# libname.M
 	LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'`		# libname
 	;;
+*.[0-9].[0-9].dylib)	# libname.M.N.dylib
+	LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'`	# libname.M.dylib
+	LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'`	# libname.dylib
 esac
 
+INSTALL_LINK1='cd $INSTALLDIR ; ln -s $LIBNAME $LINK1'
+INSTALL_LINK2='cd $INSTALLDIR ; ln -s $LIBNAME $LINK2'
+
 #
 # Create symlinks to the installed library.  This section is incomplete.
 #
 case "$host_os" in
-*linux*|bsdi4*)
+*linux*|bsdi4*|*gnu*|darwin*|macosx*)
 	# libname.so.M -> libname.so.M.N
 	${echo} ${RM} ${INSTALLDIR}/$LINK2
 	if [ -z "$uninstall" ]; then
-		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2
+		${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK2
 	fi
 
 	# libname.so -> libname.so.M.N
 	${echo} ${RM} ${INSTALLDIR}/$LINK1
 	if [ -z "$uninstall" ]; then
-		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
+		${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK1
 	fi
 	;;
 
-solaris2*|aix4.[2-9]*|osf*|irix[56]*)
+solaris2*|aix4.[2-9]*|osf*|irix[56]*|sysv[45]*|dgux*)
 	# libname.so -> libname.so.M
 	${echo} ${RM} ${INSTALLDIR}/$LINK1
 	if [ -z "$uninstall" ]; then
-		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
+		${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK1
 	fi
 	;;
 
 
-# FreeBSD 3.x can have either a.out or ELF shared libraries
-freebsd3*)
+# FreeBSD 3.x and above can have either a.out or ELF shared libraries
+freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
 	if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
 		# libname.so -> libname.so.M
 		${echo} ${RM} ${INSTALLDIR}/$LINK1
 		if [ -z "$uninstall" ]; then
-			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
+			${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK1
 		fi
 	else
 		# libname.so.M -> libname.so.M.N
 		${echo} ${RM} ${INSTALLDIR}/$LINK2
 		if [ -z "$uninstall" ]; then
-			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2
+			${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK2
 		fi
 
 		# libname.so -> libname.so.M.N
 		${echo} ${RM} ${INSTALLDIR}/$LINK1
 		if [ -z "$uninstall" ]; then
-			${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
+			${echo} ln -s $LIBNAME ${INSTALLDIR}/$LINK1
 		fi
 	fi
 	;;
@@ -138,7 +145,8 @@
 	# libname.sl -> libname.M
 	${echo} ${RM} ${INSTALLDIR}/$LINK1.sl
 	if [ -z "$uninstall" ]; then
-		${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LINK1}.sl
+#		${echo} ln -s $LIBNAME ${INSTALLDIR}/${LINK1}.sl
+		${echo} ln -s $LIBNAME ${INSTALLDIR}/${LINK1}
 	fi
 	;;
 
diff --git a/readline/support/shobj-conf b/readline/support/shobj-conf
index 6649c70..6bd7fb1 100755
--- a/readline/support/shobj-conf
+++ b/readline/support/shobj-conf
@@ -10,6 +10,22 @@
 # Chet Ramey
 # chet@po.cwru.edu
 
+# Copyright (C) 1996-2002 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
 #
 # defaults
 #
@@ -43,7 +59,7 @@
 done
 
 case "${host_os}-${SHOBJ_CC}" in
-sunos4*-gcc*)
+sunos4*-*gcc*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD=/usr/bin/ld
 	SHOBJ_LDFLAGS='-assert pure-text'
@@ -59,10 +75,13 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
 	;;
 
-sunos5*-gcc*|solaris2*-gcc*)
+sunos5*-*gcc*|solaris2*-*gcc*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD='${CC}'
+	# This line works for the Solaris linker in /usr/ccs/bin/ld
 	SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@'
+	# This line works for the GNU ld
+#	SHOBJ_LDFLAGS='-shared -Wl,-h,$@'
 
 #	SHLIB_XLDFLAGS='-R $(libdir)'
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
@@ -77,7 +96,17 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 
-freebsd2* | netbsd* | openbsd*)
+# All versions of Linux or the semi-mythical GNU Hurd.
+linux*|gnu*)
+	SHOBJ_CFLAGS=-fPIC
+	SHOBJ_LD='${CC}'
+	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+
+	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
+	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
+	;;
+
+freebsd2* | netbsd*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD=ld
 	SHOBJ_LDFLAGS='-x -Bshareable'
@@ -86,18 +115,8 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
 	;;
 
-# FreeBSD-3.x can have either a.out or ELF object files
-#freebsd3*)
-#	SHOBJ_CFLAGS=-fpic
-#	SHOBJ_LD='${CC}'
-#	SHOBJ_LDFLAGS='-shared'
-#
-#	SHLIB_XLDFLAGS='-R$(libdir)'
-#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
-#	;;
-
 # FreeBSD-3.x ELF
-freebsd3*)
+freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD='${CC}'
 
@@ -114,12 +133,30 @@
 	fi
 	;;
 
-linux*)
+# Darwin/MacOS X
+darwin*|macosx*)
+	SHOBJ_STATUS=unsupported
+	SHLIB_STATUS=supported
+
+	SHOBJ_CFLAGS='-dynamic -fno-common'
+
+	SHOBJ_LD=/usr/bin/libtool
+
+	SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
+	SHLIB_LIBSUFF='dylib'
+
+	SHOBJ_LDFLAGS='-dynamic'
+	SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+
+	SHLIB_LIBS='-lSystem'
+	;;
+
+openbsd*)
 	SHOBJ_CFLAGS=-fPIC
 	SHOBJ_LD='${CC}'
-	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+	SHOBJ_LDFLAGS='-shared'
 
-	SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
+	SHLIB_XLDFLAGS='-R$(libdir)'
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
 	;;
 
@@ -158,10 +195,11 @@
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
 
+	SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
 	;;
 
-osf*-gcc*)
+osf*-*gcc*)
 	# Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
@@ -178,7 +216,7 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 
-aix4.[2-9]*-gcc*)		# lightly tested by jik@cisco.com
+aix4.[2-9]*-*gcc*)		# lightly tested by jik@cisco.com
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD='ld'
 	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
@@ -203,7 +241,7 @@
 #
 # THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface
 #
-irix[56]*-gcc*)
+irix[56]*-*gcc*)
 	SHOBJ_CFLAGS='-fpic'
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
@@ -216,14 +254,15 @@
 	SHOBJ_CFLAGS='-K PIC'
 	SHOBJ_LD=ld
 #	SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'
-#	Change from David Kaelbling <drk@sgi.com>
+#	Change from David Kaelbling <drk@sgi.com>.  If you have problems,
+#	remove the `-no_unresolved'
 	SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@'
 
 	SHLIB_XLDFLAGS='-rpath $(libdir)'
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 
-hpux9*-gcc*)
+hpux9*-*gcc*)
 	# must use gcc; the bundled cc cannot compile PIC code
 	SHOBJ_CFLAGS='-fpic'
 	SHOBJ_LD='${CC}'
@@ -237,9 +276,23 @@
 hpux9*)
 	SHOBJ_STATUS=unsupported
 	SHLIB_STATUS=unsupported
+
+	# If you are using the HP ANSI C compiler, you can uncomment and use
+	# this code (I have not tested it)
+#	SHOBJ_STATUS=supported
+#	SHLIB_STATUS=supported
+#
+#	SHOBJ_CFLAGS='+z'
+#	SHOBJ_LD='ld'
+#	SHOBJ_LDFLAGS='-b +s'
+#
+#	SHLIB_XLDFLAGS='+b $(libdir)'
+#	SHLIB_LIBSUFF='sl'
+#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
+
 	;;
 
-hpux10*-gcc*)
+hpux10*-*gcc*)
 	# must use gcc; the bundled cc cannot compile PIC code
 	SHOBJ_CFLAGS='-fpic'
 	SHOBJ_LD='${CC}'
@@ -253,14 +306,28 @@
 hpux10*)
 	SHOBJ_STATUS=unsupported
 	SHLIB_STATUS=unsupported
+
+	# If you are using the HP ANSI C compiler, you can uncomment and use
+	# this code (I have not tested it)
+#	SHOBJ_STATUS=supported
+#	SHLIB_STATUS=supported
+#
+#	SHOBJ_CFLAGS='+z'
+#	SHOBJ_LD='ld'
+#	SHOBJ_LDFLAGS='-b +s +h $@'
+#
+#	SHLIB_XLDFLAGS='+b $(libdir)'
+#	SHLIB_LIBSUFF='sl'
+#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
+
 	;;
 
-hpux11*-gcc*)
+hpux11*-*gcc*)
 	# must use gcc; the bundled cc cannot compile PIC code
 	SHOBJ_CFLAGS='-fpic'
 	SHOBJ_LD='${CC}'
 #	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@'
-	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s -Wl,+h,$@'
+	SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@'
 
 	SHLIB_XLDFLAGS='-Wl,+b,$(libdir)'
 	SHLIB_LIBSUFF='sl'
@@ -270,9 +337,23 @@
 hpux11*)
 	SHOBJ_STATUS=unsupported
 	SHLIB_STATUS=unsupported
+
+	# If you are using the HP ANSI C compiler, you can uncomment and use
+	# this code (I have not tested it)
+#	SHOBJ_STATUS=supported
+#	SHLIB_STATUS=supported
+#
+#	SHOBJ_CFLAGS='+z'
+#	SHOBJ_LD='ld'
+#	SHOBJ_LDFLAGS='-b +s +h $@'
+#
+#	SHLIB_XLDFLAGS='+b $(libdir)'
+#	SHLIB_LIBSUFF='sl'
+#	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'	
+
 	;;
 
-sysv4*-gcc*)
+sysv4*-*gcc*)
 	SHOBJ_CFLAGS=-shared
 	SHOBJ_LDFLAGS='-shared -h $@'
 	SHOBJ_LD='${CC}'
@@ -288,7 +369,7 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 
-sco3.2v5*-gcc*)
+sco3.2v5*-*gcc*)
 	SHOBJ_CFLAGS='-fpic'		# DEFAULTS TO ELF
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared'
@@ -304,7 +385,7 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 
-sysv5uw7*-gcc*)
+sysv5uw7*-*gcc*)
 	SHOBJ_CFLAGS='-fpic'
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared'
@@ -320,7 +401,7 @@
 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 	;;
 	
-dgux*-gcc*)
+dgux*-*gcc*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared'
@@ -344,7 +425,7 @@
 #
 # Rely on correct gcc configuration for everything else
 #
-*-gcc*)
+*-*gcc*)
 	SHOBJ_CFLAGS=-fpic
 	SHOBJ_LD='${CC}'
 	SHOBJ_LDFLAGS='-shared'
diff --git a/readline/support/wcwidth.c b/readline/support/wcwidth.c
new file mode 100644
index 0000000..ace9a3a
--- /dev/null
+++ b/readline/support/wcwidth.c
@@ -0,0 +1,236 @@
+/*
+ * This is an implementation of wcwidth() and wcswidth() as defined in
+ * "The Single UNIX Specification, Version 2, The Open Group, 1997"
+ * <http://www.UNIX-systems.org/online.html>
+ *
+ * Markus Kuhn -- 2001-09-08 -- public domain
+ */
+
+#include <wchar.h>
+
+struct interval {
+  unsigned short first;
+  unsigned short last;
+};
+
+/* auxiliary function for binary search in interval table */
+static int bisearch(wchar_t ucs, const struct interval *table, int max) {
+  int min = 0;
+  int mid;
+
+  if (ucs < table[0].first || ucs > table[max].last)
+    return 0;
+  while (max >= min) {
+    mid = (min + max) / 2;
+    if (ucs > table[mid].last)
+      min = mid + 1;
+    else if (ucs < table[mid].first)
+      max = mid - 1;
+    else
+      return 1;
+  }
+
+  return 0;
+}
+
+
+/* The following functions define the column width of an ISO 10646
+ * character as follows:
+ *
+ *    - The null character (U+0000) has a column width of 0.
+ *
+ *    - Other C0/C1 control characters and DEL will lead to a return
+ *      value of -1.
+ *
+ *    - Non-spacing and enclosing combining characters (general
+ *      category code Mn or Me in the Unicode database) have a
+ *      column width of 0.
+ *
+ *    - Other format characters (general category code Cf in the Unicode
+ *      database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
+ *
+ *    - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
+ *      have a column width of 0.
+ *
+ *    - Spacing characters in the East Asian Wide (W) or East Asian
+ *      FullWidth (F) category as defined in Unicode Technical
+ *      Report #11 have a column width of 2.
+ *
+ *    - All remaining characters (including all printable
+ *      ISO 8859-1 and WGL4 characters, Unicode control characters,
+ *      etc.) have a column width of 1.
+ *
+ * This implementation assumes that wchar_t characters are encoded
+ * in ISO 10646.
+ */
+
+int wcwidth(wchar_t ucs)
+{
+  /* sorted list of non-overlapping intervals of non-spacing characters */
+  static const struct interval combining[] = {
+    { 0x0300, 0x034E }, { 0x0360, 0x0362 }, { 0x0483, 0x0486 },
+    { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 },
+    { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
+    { 0x05C4, 0x05C4 }, { 0x064B, 0x0655 }, { 0x0670, 0x0670 },
+    { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
+    { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A },
+    { 0x07A6, 0x07B0 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C },
+    { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 },
+    { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC },
+    { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 },
+    { 0x0A02, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 },
+    { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 },
+    { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 },
+    { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0B01, 0x0B01 },
+    { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 },
+    { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 },
+    { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 },
+    { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 },
+    { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD },
+    { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA },
+    { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 },
+    { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 },
+    { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD },
+    { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 },
+    { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 },
+    { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC },
+    { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 },
+    { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 },
+    { 0x1160, 0x11FF }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 },
+    { 0x17C9, 0x17D3 }, { 0x180B, 0x180E }, { 0x18A9, 0x18A9 },
+    { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x206A, 0x206F },
+    { 0x20D0, 0x20E3 }, { 0x302A, 0x302F }, { 0x3099, 0x309A },
+    { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF },
+    { 0xFFF9, 0xFFFB }
+  };
+
+  /* test for 8-bit control characters */
+  if (ucs == 0)
+    return 0;
+  if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
+    return -1;
+
+  /* binary search in table of non-spacing characters */
+  if (bisearch(ucs, combining,
+	       sizeof(combining) / sizeof(struct interval) - 1))
+    return 0;
+
+  /* if we arrive here, ucs is not a combining or C0/C1 control character */
+
+  return 1 + 
+    (ucs >= 0x1100 &&
+     (ucs <= 0x115f ||                    /* Hangul Jamo init. consonants */
+      (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a &&
+       ucs != 0x303f) ||                  /* CJK ... Yi */
+      (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
+      (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
+      (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
+      (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */
+      (ucs >= 0xffe0 && ucs <= 0xffe6) ||
+      (ucs >= 0x20000 && ucs <= 0x2ffff)));
+}
+
+
+int wcswidth(const wchar_t *pwcs, size_t n)
+{
+  int w, width = 0;
+
+  for (;*pwcs && n-- > 0; pwcs++)
+    if ((w = wcwidth(*pwcs)) < 0)
+      return -1;
+    else
+      width += w;
+
+  return width;
+}
+
+
+/*
+ * The following function is the same as wcwidth(), except that
+ * spacing characters in the East Asian Ambiguous (A) category as
+ * defined in Unicode Technical Report #11 have a column width of 2.
+ * This experimental variant might be useful for users of CJK legacy
+ * encodings who want to migrate to UCS. It is not otherwise
+ * recommended for general use.
+ */
+static int wcwidth_cjk(wchar_t ucs)
+{
+  /* sorted list of non-overlapping intervals of East Asian Ambiguous
+   * characters */
+  static const struct interval ambiguous[] = {
+    { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 },
+    { 0x00AA, 0x00AA }, { 0x00AD, 0x00AE }, { 0x00B0, 0x00B4 },
+    { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 },
+    { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 },
+    { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED },
+    { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA },
+    { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 },
+    { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B },
+    { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 },
+    { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 },
+    { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 },
+    { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE },
+    { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 },
+    { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA },
+    { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 },
+    { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB },
+    { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB },
+    { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0300, 0x034E },
+    { 0x0360, 0x0362 }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 },
+    { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, { 0x0401, 0x0401 },
+    { 0x0410, 0x044F }, { 0x0451, 0x0451 }, { 0x2010, 0x2010 },
+    { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, { 0x201C, 0x201D },
+    { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, { 0x2030, 0x2030 },
+    { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, { 0x203B, 0x203B },
+    { 0x203E, 0x203E }, { 0x2074, 0x2074 }, { 0x207F, 0x207F },
+    { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, { 0x2103, 0x2103 },
+    { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, { 0x2113, 0x2113 },
+    { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, { 0x2126, 0x2126 },
+    { 0x212B, 0x212B }, { 0x2153, 0x2155 }, { 0x215B, 0x215E },
+    { 0x2160, 0x216B }, { 0x2170, 0x2179 }, { 0x2190, 0x2199 },
+    { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 },
+    { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, { 0x2202, 0x2203 },
+    { 0x2207, 0x2208 }, { 0x220B, 0x220B }, { 0x220F, 0x220F },
+    { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, { 0x221A, 0x221A },
+    { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, { 0x2225, 0x2225 },
+    { 0x2227, 0x222C }, { 0x222E, 0x222E }, { 0x2234, 0x2237 },
+    { 0x223C, 0x223D }, { 0x2248, 0x2248 }, { 0x224C, 0x224C },
+    { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, { 0x2264, 0x2267 },
+    { 0x226A, 0x226B }, { 0x226E, 0x226F }, { 0x2282, 0x2283 },
+    { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, { 0x2299, 0x2299 },
+    { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, { 0x2312, 0x2312 },
+    { 0x2329, 0x232A }, { 0x2460, 0x24BF }, { 0x24D0, 0x24E9 },
+    { 0x2500, 0x254B }, { 0x2550, 0x2574 }, { 0x2580, 0x258F },
+    { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 },
+    { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD },
+    { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB },
+    { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF },
+    { 0x2605, 0x2606 }, { 0x2609, 0x2609 }, { 0x260E, 0x260F },
+    { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 },
+    { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 },
+    { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F },
+    { 0x273D, 0x273D }, { 0x3008, 0x300B }, { 0x3014, 0x3015 },
+    { 0x3018, 0x301B }, { 0xFFFD, 0xFFFD }
+  };
+
+  /* binary search in table of non-spacing characters */
+  if (bisearch(ucs, ambiguous,
+	       sizeof(ambiguous) / sizeof(struct interval) - 1))
+    return 2;
+
+  return wcwidth(ucs);
+}
+
+
+int wcswidth_cjk(const wchar_t *pwcs, size_t n)
+{
+  int w, width = 0;
+
+  for (;*pwcs && n-- > 0; pwcs++)
+    if ((w = wcwidth_cjk(*pwcs)) < 0)
+      return -1;
+    else
+      width += w;
+
+  return width;
+}
diff --git a/readline/terminal.c b/readline/terminal.c
index 20ad126..f3f5b6c 100644
--- a/readline/terminal.c
+++ b/readline/terminal.c
@@ -64,6 +64,10 @@
 
 #include "rlprivate.h"
 #include "rlshell.h"
+#include "xmalloc.h"
+
+#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
+#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
 
 /* **************************************************************** */
 /*								    */
@@ -76,9 +80,6 @@
 
 static int tcap_initialized;
 
-/* Non-zero means this terminal can't really do anything. */
-static int dumb_term;
-
 #if !defined (__linux__)
 #  if defined (__EMX__) || defined (NEED_EXTERN_PC)
 extern 
@@ -87,27 +88,36 @@
 #endif /* __linux__ */
 
 /* Some strings to control terminal actions.  These are output by tputs (). */
-char *term_goto, *term_clreol, *term_cr, *term_clrpag, *term_backspace;
-char *term_pc;
+char *_rl_term_clreol;
+char *_rl_term_clrpag;
+char *_rl_term_cr;
+char *_rl_term_backspace;
+char *_rl_term_goto;
+char *_rl_term_pc;
 
 /* Non-zero if we determine that the terminal can do character insertion. */
-int terminal_can_insert = 0;
+int _rl_terminal_can_insert = 0;
 
 /* How to insert characters. */
-char *term_im, *term_ei, *term_ic, *term_ip, *term_IC;
+char *_rl_term_im;
+char *_rl_term_ei;
+char *_rl_term_ic;
+char *_rl_term_ip;
+char *_rl_term_IC;
 
 /* How to delete characters. */
-char *term_dc, *term_DC;
+char *_rl_term_dc;
+char *_rl_term_DC;
 
 #if defined (HACK_TERMCAP_MOTION)
-char *term_forward_char;
+char *_rl_term_forward_char;
 #endif  /* HACK_TERMCAP_MOTION */
 
 /* How to go up a line. */
-char *term_up;
+char *_rl_term_up;
 
-/* A visible bell, if the terminal can be made to flash the screen. */
-static char *visible_bell;
+/* A visible bell; char if the terminal can be made to flash the screen. */
+static char *_rl_visible_bell;
 
 /* Non-zero means the terminal can auto-wrap lines. */
 int _rl_term_autowrap;
@@ -116,20 +126,36 @@
 static int term_has_meta;
 
 /* The sequences to write to turn on and off the meta key, if this
-   terminal    has one. */
-static char *term_mm, *term_mo;
+   terminal has one. */
+static char *_rl_term_mm;
+static char *_rl_term_mo;
 
 /* The key sequences output by the arrow keys, if this terminal has any. */
-static char *term_ku, *term_kd, *term_kr, *term_kl;
+static char *_rl_term_ku;
+static char *_rl_term_kd;
+static char *_rl_term_kr;
+static char *_rl_term_kl;
 
 /* How to initialize and reset the arrow keys, if this terminal has any. */
-static char *term_ks, *term_ke;
+static char *_rl_term_ks;
+static char *_rl_term_ke;
 
 /* The key sequences sent by the Home and End keys, if any. */
-static char *term_kh, *term_kH;
+static char *_rl_term_kh;
+static char *_rl_term_kH;
+static char *_rl_term_at7;	/* @7 */
+
+/* Insert key */
+static char *_rl_term_kI;
+
+/* Cursor control */
+static char *_rl_term_vs;	/* very visible */
+static char *_rl_term_ve;	/* normal */
+
+static void bind_termcap_arrow_keys PARAMS((Keymap));
 
 /* Variables that hold the screen dimensions, used by the display code. */
-int screenwidth, screenheight, screenchars;
+int _rl_screenwidth, _rl_screenheight, _rl_screenchars;
 
 /* Non-zero means the user wants to enable the keypad. */
 int _rl_enable_keypad;
@@ -169,84 +195,107 @@
 #if defined (TIOCGWINSZ)
   if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
     {
-      screenwidth = (int) window_size.ws_col;
-      screenheight = (int) window_size.ws_row;
+      _rl_screenwidth = (int) window_size.ws_col;
+      _rl_screenheight = (int) window_size.ws_row;
     }
 #endif /* TIOCGWINSZ */
 
 #if defined (__EMX__)
-  _emx_get_screensize (&screenwidth, &screenheight);
+  _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
 #endif
 
   /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
      is unset. */
-  if (screenwidth <= 0)
+  if (_rl_screenwidth <= 0)
     {
-      if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
-	screenwidth = atoi (ss);
+      if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS")))
+	_rl_screenwidth = atoi (ss);
 
 #if !defined (__DJGPP__)
-      if (screenwidth <= 0 && term_string_buffer)
-	screenwidth = tgetnum ("co");
+      if (_rl_screenwidth <= 0 && term_string_buffer)
+	_rl_screenwidth = tgetnum ("co");
 #endif
     }
 
   /* Environment variable LINES overrides setting of "li" if IGNORE_ENV
      is unset. */
-  if (screenheight <= 0)
+  if (_rl_screenheight <= 0)
     {
-      if (ignore_env == 0 && (ss = get_env_value ("LINES")))
-	screenheight = atoi (ss);
+      if (ignore_env == 0 && (ss = sh_get_env_value ("LINES")))
+	_rl_screenheight = atoi (ss);
 
 #if !defined (__DJGPP__)
-      if (screenheight <= 0 && term_string_buffer)
-	screenheight = tgetnum ("li");
+      if (_rl_screenheight <= 0 && term_string_buffer)
+	_rl_screenheight = tgetnum ("li");
 #endif
     }
 
   /* If all else fails, default to 80x24 terminal. */
-  if (screenwidth <= 1)
-    screenwidth = 80;
+  if (_rl_screenwidth <= 1)
+    _rl_screenwidth = 80;
 
-  if (screenheight <= 0)
-    screenheight = 24;
+  if (_rl_screenheight <= 0)
+    _rl_screenheight = 24;
 
   /* If we're being compiled as part of bash, set the environment
      variables $LINES and $COLUMNS to new values.  Otherwise, just
      do a pair of putenv () or setenv () calls. */
-  set_lines_and_columns (screenheight, screenwidth);
+  sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth);
 
   if (_rl_term_autowrap == 0)
-    screenwidth--;
+    _rl_screenwidth--;
 
-  screenchars = screenwidth * screenheight;
+  _rl_screenchars = _rl_screenwidth * _rl_screenheight;
 }
 
 void
 _rl_set_screen_size (rows, cols)
      int rows, cols;
 {
-  screenheight = rows;
-  screenwidth = cols;
+  if (rows == 0 || cols == 0)
+    return;
+
+  _rl_screenheight = rows;
+  _rl_screenwidth = cols;
 
   if (_rl_term_autowrap == 0)
-    screenwidth--;
+    _rl_screenwidth--;
 
-  screenchars = screenwidth * screenheight;
+  _rl_screenchars = _rl_screenwidth * _rl_screenheight;
 }
 
 void
+rl_set_screen_size (rows, cols)
+     int rows, cols;
+{
+  _rl_set_screen_size (rows, cols);
+}
+
+void
+rl_get_screen_size (rows, cols)
+     int *rows, *cols;
+{
+  if (rows)
+    *rows = _rl_screenheight;
+  if (cols)
+    *cols = _rl_screenwidth;
+}
+     
+void
 rl_resize_terminal ()
 {
   if (readline_echoing_p)
     {
       _rl_get_screen_size (fileno (rl_instream), 1);
-      _rl_redisplay_after_sigwinch ();
+      if (CUSTOM_REDISPLAY_FUNC ())
+	rl_forced_update_display ();
+      else
+	_rl_redisplay_after_sigwinch ();
     }
 }
 
 struct _tc_string {
-     char *tc_var;
+     const char *tc_var;
      char **tc_value;
 };
 
@@ -254,32 +303,36 @@
    search algorithm to something smarter. */
 static struct _tc_string tc_strings[] =
 {
-  { "DC", &term_DC },
-  { "IC", &term_IC },
-  { "ce", &term_clreol },
-  { "cl", &term_clrpag },
-  { "cr", &term_cr },
-  { "dc", &term_dc },
-  { "ei", &term_ei },
-  { "ic", &term_ic },
-  { "im", &term_im },
-  { "kd", &term_kd },
-  { "kh", &term_kh },	/* home */
-  { "kH", &term_kH },	/* end */
-  { "kl", &term_kl },
-  { "kr", &term_kr },
-  { "ku", &term_ku },
-  { "ks", &term_ks },
-  { "ke", &term_ke },
-  { "le", &term_backspace },
-  { "mm", &term_mm },
-  { "mo", &term_mo },
+  { "@7", &_rl_term_at7 },
+  { "DC", &_rl_term_DC },
+  { "IC", &_rl_term_IC },
+  { "ce", &_rl_term_clreol },
+  { "cl", &_rl_term_clrpag },
+  { "cr", &_rl_term_cr },
+  { "dc", &_rl_term_dc },
+  { "ei", &_rl_term_ei },
+  { "ic", &_rl_term_ic },
+  { "im", &_rl_term_im },
+  { "kH", &_rl_term_kH },	/* home down ?? */
+  { "kI", &_rl_term_kI },	/* insert */
+  { "kd", &_rl_term_kd },
+  { "ke", &_rl_term_ke },	/* end keypad mode */
+  { "kh", &_rl_term_kh },	/* home */
+  { "kl", &_rl_term_kl },
+  { "kr", &_rl_term_kr },
+  { "ks", &_rl_term_ks },	/* start keypad mode */
+  { "ku", &_rl_term_ku },
+  { "le", &_rl_term_backspace },
+  { "mm", &_rl_term_mm },
+  { "mo", &_rl_term_mo },
 #if defined (HACK_TERMCAP_MOTION)
-  { "nd", &term_forward_char },
+  { "nd", &_rl_term_forward_char },
 #endif
-  { "pc", &term_pc },
-  { "up", &term_up },
-  { "vb", &visible_bell },
+  { "pc", &_rl_term_pc },
+  { "up", &_rl_term_up },
+  { "vb", &_rl_visible_bell },
+  { "vs", &_rl_term_vs },
+  { "ve", &_rl_term_ve },
 };
 
 #define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string))
@@ -294,26 +347,27 @@
   register int i;
 
   for (i = 0; i < NUM_TC_STRINGS; i++)
+#  ifdef __LCC__
+    *(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp);
+#  else
     *(tc_strings[i].tc_value) = tgetstr (tc_strings[i].tc_var, bp);
+#  endif
 #endif
   tcap_initialized = 1;
 }
 
-#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
-#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
-
 int
 _rl_init_terminal_io (terminal_name)
-     char *terminal_name;
+     const char *terminal_name;
 {
-  char *term, *buffer;
+  const char *term;
+  char *buffer;
   int tty, tgetent_ret;
-  Keymap xkeymap;
 
-  term = terminal_name ? terminal_name : get_env_value ("TERM");
-  term_clrpag = term_cr = term_clreol = (char *)NULL;
+  term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
+  _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL;
   tty = rl_instream ? fileno (rl_instream) : 0;
-  screenwidth = screenheight = 0;
+  _rl_screenwidth = _rl_screenheight = 0;
 
   if (term == 0)
     term = "dumb";
@@ -328,10 +382,10 @@
   else
     {
       if (term_string_buffer == 0)
-	term_string_buffer = xmalloc(2032);
+	term_string_buffer = (char *)xmalloc(2032);
 
       if (term_buffer == 0)
-	term_buffer = xmalloc(4080);
+	term_buffer = (char *)xmalloc(4080);
 
       buffer = term_string_buffer;
 
@@ -344,41 +398,43 @@
       FREE (term_buffer);
       buffer = term_buffer = term_string_buffer = (char *)NULL;
 
-      dumb_term = 1;
       _rl_term_autowrap = 0;	/* used by _rl_get_screen_size */
 
 #if defined (__EMX__)
-      _emx_get_screensize (&screenwidth, &screenheight);
-      screenwidth--;
+      _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
+      _rl_screenwidth--;
 #else /* !__EMX__ */
       _rl_get_screen_size (tty, 0);
 #endif /* !__EMX__ */
 
       /* Defaults. */
-      if (screenwidth <= 0 || screenheight <= 0)
+      if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
         {
-	  screenwidth = 79;
-	  screenheight = 24;
+	  _rl_screenwidth = 79;
+	  _rl_screenheight = 24;
         }
 
       /* Everything below here is used by the redisplay code (tputs). */
-      screenchars = screenwidth * screenheight;
-      term_cr = "\r";
-      term_im = term_ei = term_ic = term_IC = (char *)NULL;
-      term_up = term_dc = term_DC = visible_bell = (char *)NULL;
-      term_ku = term_kd = term_kl = term_kr = (char *)NULL;
-      term_mm = term_mo = (char *)NULL;
+      _rl_screenchars = _rl_screenwidth * _rl_screenheight;
+      _rl_term_cr = "\r";
+      _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
+      _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
+      _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;
+      _rl_term_kh = _rl_term_kH = _rl_term_kI = (char *)NULL;
+      _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL;
+      _rl_term_mm = _rl_term_mo = (char *)NULL;
+      _rl_term_ve = _rl_term_vs = (char *)NULL;
 #if defined (HACK_TERMCAP_MOTION)
       term_forward_char = (char *)NULL;
 #endif
-      terminal_can_insert = term_has_meta = 0;
+      _rl_terminal_can_insert = term_has_meta = 0;
 
       /* Reasonable defaults for tgoto().  Readline currently only uses
-         tgoto if term_IC or term_DC is defined, but just in case we
+         tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we
          change that later... */
       PC = '\0';
-      BC = term_backspace = "\b";
-      UP = term_up;
+      BC = _rl_term_backspace = "\b";
+      UP = _rl_term_up;
 
       return 0;
     }
@@ -387,12 +443,12 @@
 
   /* Set up the variables that the termcap library expects the application
      to provide. */
-  PC = term_pc ? *term_pc : 0;
-  BC = term_backspace;
-  UP = term_up;
+  PC = _rl_term_pc ? *_rl_term_pc : 0;
+  BC = _rl_term_backspace;
+  UP = _rl_term_up;
 
-  if (!term_cr)
-    term_cr = "\r";
+  if (!_rl_term_cr)
+    _rl_term_cr = "\r";
 
   _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
 
@@ -402,46 +458,51 @@
       character insertion if *any one of* the capabilities `IC',
       `im', `ic' or `ip' is provided."  But we can't do anything if
       only `ip' is provided, so... */
-  terminal_can_insert = (term_IC || term_im || term_ic);
+  _rl_terminal_can_insert = (_rl_term_IC || _rl_term_im || _rl_term_ic);
 
   /* Check to see if this terminal has a meta key and clear the capability
      variables if there is none. */
   term_has_meta = (tgetflag ("km") || tgetflag ("MT"));
   if (!term_has_meta)
-    term_mm = term_mo = (char *)NULL;
+    _rl_term_mm = _rl_term_mo = (char *)NULL;
 
   /* Attempt to find and bind the arrow keys.  Do not override already
      bound keys in an overzealous attempt, however. */
-  xkeymap = _rl_keymap;
 
-  _rl_keymap = emacs_standard_keymap;
-  _rl_bind_if_unbound (term_ku, rl_get_previous_history);
-  _rl_bind_if_unbound (term_kd, rl_get_next_history);
-  _rl_bind_if_unbound (term_kr, rl_forward);
-  _rl_bind_if_unbound (term_kl, rl_backward);
-
-  _rl_bind_if_unbound (term_kh, rl_beg_of_line);	/* Home */
-  _rl_bind_if_unbound (term_kH, rl_end_of_line);	/* End */
+  bind_termcap_arrow_keys (emacs_standard_keymap);
 
 #if defined (VI_MODE)
-  _rl_keymap = vi_movement_keymap;
-  _rl_bind_if_unbound (term_ku, rl_get_previous_history);
-  _rl_bind_if_unbound (term_kd, rl_get_next_history);
-  _rl_bind_if_unbound (term_kr, rl_forward);
-  _rl_bind_if_unbound (term_kl, rl_backward);
-
-  _rl_bind_if_unbound (term_kh, rl_beg_of_line);	/* Home */
-  _rl_bind_if_unbound (term_kH, rl_end_of_line);	/* End */
+  bind_termcap_arrow_keys (vi_movement_keymap);
+  bind_termcap_arrow_keys (vi_insertion_keymap);
 #endif /* VI_MODE */
 
-  _rl_keymap = xkeymap;
-
   return 0;
 }
 
+/* Bind the arrow key sequences from the termcap description in MAP. */
+static void
+bind_termcap_arrow_keys (map)
+     Keymap map;
+{
+  Keymap xkeymap;
+
+  xkeymap = _rl_keymap;
+  _rl_keymap = map;
+
+  _rl_bind_if_unbound (_rl_term_ku, rl_get_previous_history);
+  _rl_bind_if_unbound (_rl_term_kd, rl_get_next_history);
+  _rl_bind_if_unbound (_rl_term_kr, rl_forward);
+  _rl_bind_if_unbound (_rl_term_kl, rl_backward);
+
+  _rl_bind_if_unbound (_rl_term_kh, rl_beg_of_line);	/* Home */
+  _rl_bind_if_unbound (_rl_term_at7, rl_end_of_line);	/* End */
+
+  _rl_keymap = xkeymap;
+}
+
 char *
 rl_get_termcap (cap)
-     char *cap;
+     const char *cap;
 {
   register int i;
 
@@ -459,7 +520,7 @@
    has changed. */
 int
 rl_reset_terminal (terminal_name)
-     char *terminal_name;
+     const char *terminal_name;
 {
   _rl_init_terminal_io (terminal_name);
   return 0;
@@ -485,7 +546,7 @@
 /* Write COUNT characters from STRING to the output stream. */
 void
 _rl_output_some_chars (string, count)
-     char *string;
+     const char *string;
      int count;
 {
   fwrite (string, 1, count, _rl_out_stream);
@@ -498,9 +559,9 @@
 {
   register int i;
 
-  if (term_backspace)
+  if (_rl_term_backspace)
     for (i = 0; i < count; i++)
-      tputs (term_backspace, 1, _rl_output_character_function);
+      tputs (_rl_term_backspace, 1, _rl_output_character_function);
   else
     for (i = 0; i < count; i++)
       putc ('\b', _rl_out_stream);
@@ -509,11 +570,11 @@
 
 /* Move to the start of the next line. */
 int
-crlf ()
+rl_crlf ()
 {
 #if defined (NEW_TTY_DRIVER)
-  if (term_cr)
-    tputs (term_cr, 1, _rl_output_character_function);
+  if (_rl_term_cr)
+    tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif /* NEW_TTY_DRIVER */
   putc ('\n', _rl_out_stream);
   return 0;
@@ -521,7 +582,7 @@
 
 /* Ring the terminal bell. */
 int
-ding ()
+rl_ding ()
 {
   if (readline_echoing_p)
     {
@@ -531,9 +592,9 @@
 	default:
 	  break;
 	case VISIBLE_BELL:
-	  if (visible_bell)
+	  if (_rl_visible_bell)
 	    {
-	      tputs (visible_bell, 1, _rl_output_character_function);
+	      tputs (_rl_visible_bell, 1, _rl_output_character_function);
 	      break;
 	    }
 	  /* FALLTHROUGH */
@@ -557,8 +618,8 @@
 _rl_enable_meta_key ()
 {
 #if !defined (__DJGPP__)
-  if (term_has_meta && term_mm)
-    tputs (term_mm, 1, _rl_output_character_function);
+  if (term_has_meta && _rl_term_mm)
+    tputs (_rl_term_mm, 1, _rl_output_character_function);
 #endif
 }
 
@@ -567,9 +628,35 @@
      int on;
 {
 #if !defined (__DJGPP__)
-  if (on && term_ks)
-    tputs (term_ks, 1, _rl_output_character_function);
-  else if (!on && term_ke)
-    tputs (term_ke, 1, _rl_output_character_function);
+  if (on && _rl_term_ks)
+    tputs (_rl_term_ks, 1, _rl_output_character_function);
+  else if (!on && _rl_term_ke)
+    tputs (_rl_term_ke, 1, _rl_output_character_function);
 #endif
 }
+
+/* **************************************************************** */
+/*								    */
+/*	 		Controlling the Cursor			    */
+/*								    */
+/* **************************************************************** */
+
+/* Set the cursor appropriately depending on IM, which is one of the
+   insert modes (insert or overwrite).  Insert mode gets the normal
+   cursor.  Overwrite mode gets a very visible cursor.  Only does
+   anything if we have both capabilities. */
+void
+_rl_set_cursor (im, force)
+     int im, force;
+{
+  if (_rl_term_ve && _rl_term_vs)
+    {
+      if (force || im != rl_insert_mode)
+	{
+	  if (im == RL_IM_OVERWRITE)
+	    tputs (_rl_term_vs, 1, _rl_output_character_function);
+	  else
+	    tputs (_rl_term_ve, 1, _rl_output_character_function);
+	}
+    }
+}
diff --git a/readline/text.c b/readline/text.c
new file mode 100644
index 0000000..2a7b724
--- /dev/null
+++ b/readline/text.c
@@ -0,0 +1,1540 @@
+/* text.c -- text handling commands for readline. */
+
+/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library 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.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#if defined (HAVE_STDLIB_H)
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#if defined (HAVE_LOCALE_H)
+#  include <locale.h>
+#endif
+
+#include <stdio.h>
+
+/* System-specific feature definitions and include files. */
+#include "rldefs.h"
+#include "rlmbutil.h"
+
+#if defined (__EMX__)
+#  define INCL_DOSPROCESS
+#  include <os2.h>
+#endif /* __EMX__ */
+
+/* Some standard library routines. */
+#include "readline.h"
+#include "history.h"
+
+#include "rlprivate.h"
+#include "rlshell.h"
+#include "xmalloc.h"
+
+/* Forward declarations. */
+static int rl_change_case PARAMS((int, int));
+static int _rl_char_search PARAMS((int, int, int));
+
+/* **************************************************************** */
+/*								    */
+/*			Insert and Delete			    */
+/*								    */
+/* **************************************************************** */
+
+/* Insert a string of text into the line at point.  This is the only
+   way that you should do insertion.  _rl_insert_char () calls this
+   function.  Returns the number of characters inserted. */
+int
+rl_insert_text (string)
+     const char *string;
+{
+  register int i, l;
+
+  l = (string && *string) ? strlen (string) : 0;
+  if (l == 0)
+    return 0;
+
+  if (rl_end + l >= rl_line_buffer_len)
+    rl_extend_line_buffer (rl_end + l);
+
+  for (i = rl_end; i >= rl_point; i--)
+    rl_line_buffer[i + l] = rl_line_buffer[i];
+  strncpy (rl_line_buffer + rl_point, string, l);
+
+  /* Remember how to undo this if we aren't undoing something. */
+  if (_rl_doing_an_undo == 0)
+    {
+      /* If possible and desirable, concatenate the undos. */
+      if ((l == 1) &&
+	  rl_undo_list &&
+	  (rl_undo_list->what == UNDO_INSERT) &&
+	  (rl_undo_list->end == rl_point) &&
+	  (rl_undo_list->end - rl_undo_list->start < 20))
+	rl_undo_list->end++;
+      else
+	rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL);
+    }
+  rl_point += l;
+  rl_end += l;
+  rl_line_buffer[rl_end] = '\0';
+  return l;
+}
+
+/* Delete the string between FROM and TO.  FROM is inclusive, TO is not.
+   Returns the number of characters deleted. */
+int
+rl_delete_text (from, to)
+     int from, to;
+{
+  register char *text;
+  register int diff, i;
+
+  /* Fix it if the caller is confused. */
+  if (from > to)
+    SWAP (from, to);
+
+  /* fix boundaries */
+  if (to > rl_end)
+    {
+      to = rl_end;
+      if (from > to)
+	from = to;
+    }
+  if (from < 0)
+    from = 0;
+
+  text = rl_copy_text (from, to);
+
+  /* Some versions of strncpy() can't handle overlapping arguments. */
+  diff = to - from;
+  for (i = from; i < rl_end - diff; i++)
+    rl_line_buffer[i] = rl_line_buffer[i + diff];
+
+  /* Remember how to undo this delete. */
+  if (_rl_doing_an_undo == 0)
+    rl_add_undo (UNDO_DELETE, from, to, text);
+  else
+    free (text);
+
+  rl_end -= diff;
+  rl_line_buffer[rl_end] = '\0';
+  return (diff);
+}
+
+/* Fix up point so that it is within the line boundaries after killing
+   text.  If FIX_MARK_TOO is non-zero, the mark is forced within line
+   boundaries also. */
+
+#define _RL_FIX_POINT(x) \
+	do { \
+	if (x > rl_end) \
+	  x = rl_end; \
+	else if (x < 0) \
+	  x = 0; \
+	} while (0)
+
+void
+_rl_fix_point (fix_mark_too)
+     int fix_mark_too;
+{
+  _RL_FIX_POINT (rl_point);
+  if (fix_mark_too)
+    _RL_FIX_POINT (rl_mark);
+}
+#undef _RL_FIX_POINT
+
+int
+_rl_replace_text (text, start, end)
+     const char *text;
+     int start, end;
+{
+  int n;
+
+  rl_begin_undo_group ();
+  rl_delete_text (start, end + 1);
+  rl_point = start;
+  n = rl_insert_text (text);
+  rl_end_undo_group ();
+
+  return n;
+}
+
+/* Replace the current line buffer contents with TEXT.  If CLEAR_UNDO is
+   non-zero, we free the current undo list. */
+void
+rl_replace_line (text, clear_undo)
+     const char *text;
+     int clear_undo;
+{
+  int len;
+
+  len = strlen (text);
+  if (len >= rl_line_buffer_len)
+    rl_extend_line_buffer (len);
+  strcpy (rl_line_buffer, text);
+  rl_end = len;
+
+  if (clear_undo)
+    rl_free_undo_list ();
+
+  _rl_fix_point (1);
+}
+
+/* **************************************************************** */
+/*								    */
+/*			Readline character functions		    */
+/*								    */
+/* **************************************************************** */
+
+/* This is not a gap editor, just a stupid line input routine.  No hair
+   is involved in writing any of the functions, and none should be. */
+
+/* Note that:
+
+   rl_end is the place in the string that we would place '\0';
+   i.e., it is always safe to place '\0' there.
+
+   rl_point is the place in the string where the cursor is.  Sometimes
+   this is the same as rl_end.
+
+   Any command that is called interactively receives two arguments.
+   The first is a count: the numeric arg pased to this command.
+   The second is the key which invoked this command.
+*/
+
+/* **************************************************************** */
+/*								    */
+/*			Movement Commands			    */
+/*								    */
+/* **************************************************************** */
+
+/* Note that if you `optimize' the display for these functions, you cannot
+   use said functions in other functions which do not do optimizing display.
+   I.e., you will have to update the data base for rl_redisplay, and you
+   might as well let rl_redisplay do that job. */
+
+/* Move forward COUNT bytes. */
+int
+rl_forward_byte (count, key)
+     int count, key;
+{
+  if (count < 0)
+    return (rl_backward_byte (-count, key));
+
+  if (count > 0)
+    {
+      int end = rl_point + count;
+#if defined (VI_MODE)
+      int lend = rl_end > 0 ? rl_end - (rl_editing_mode == vi_mode) : rl_end;
+#else
+      int lend = rl_end;
+#endif
+
+      if (end > lend)
+	{
+	  rl_point = lend;
+	  rl_ding ();
+	}
+      else
+	rl_point = end;
+    }
+
+  if (rl_end < 0)
+    rl_end = 0;
+
+  return 0;
+}
+
+#if defined (HANDLE_MULTIBYTE)
+/* Move forward COUNT characters. */
+int
+rl_forward_char (count, key)
+     int count, key;
+{
+  int point;
+
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    return (rl_forward_byte (count, key));
+
+  if (count < 0)
+    return (rl_backward_char (-count, key));
+
+  if (count > 0)
+    {
+      point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);
+
+#if defined (VI_MODE)
+      if (rl_end <= point && rl_editing_mode == vi_mode)
+	point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO);
+#endif
+
+      if (rl_point == point)
+	rl_ding ();
+
+      rl_point = point;
+
+      if (rl_end < 0)
+	rl_end = 0;
+    }
+
+  return 0;
+}
+#else /* !HANDLE_MULTIBYTE */
+int
+rl_forward_char (count, key)
+     int count, key;
+{
+  return (rl_forward_byte (count, key));
+}
+#endif /* !HANDLE_MULTIBYTE */
+  
+/* Backwards compatibility. */
+int
+rl_forward (count, key)
+     int count, key;
+{
+  return (rl_forward_char (count, key));
+}
+
+/* Move backward COUNT bytes. */
+int
+rl_backward_byte (count, key)
+     int count, key;
+{
+  if (count < 0)
+    return (rl_forward_byte (-count, key));
+
+  if (count > 0)
+    {
+      if (rl_point < count)
+	{
+	  rl_point = 0;
+	  rl_ding ();
+	}
+      else
+	rl_point -= count;
+    }
+
+  if (rl_point < 0)
+    rl_point = 0;
+
+  return 0;
+}
+
+#if defined (HANDLE_MULTIBYTE)
+/* Move backward COUNT characters. */
+int
+rl_backward_char (count, key)
+     int count, key;
+{
+  int point;
+
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    return (rl_backward_byte (count, key));
+
+  if (count < 0)
+    return (rl_forward_char (-count, key));
+
+  if (count > 0)
+    {
+      point = rl_point;
+
+      while (count > 0 && point > 0)
+	{
+	  point = _rl_find_prev_mbchar (rl_line_buffer, point, MB_FIND_NONZERO);
+	  count--;
+	}
+      if (count > 0)
+	{
+	  rl_point = 0;
+	  rl_ding ();
+	}
+      else
+        rl_point = point;
+    }
+
+  return 0;
+}
+#else
+int
+rl_backward_char (count, key)
+     int count, key;
+{
+  return (rl_backward_byte (count, key));
+}
+#endif
+
+/* Backwards compatibility. */
+int
+rl_backward (count, key)
+     int count, key;
+{
+  return (rl_backward_char (count, key));
+}
+
+/* Move to the beginning of the line. */
+int
+rl_beg_of_line (count, key)
+     int count, key;
+{
+  rl_point = 0;
+  return 0;
+}
+
+/* Move to the end of the line. */
+int
+rl_end_of_line (count, key)
+     int count, key;
+{
+  rl_point = rl_end;
+  return 0;
+}
+
+/* XXX - these might need changes for multibyte characters */
+/* Move forward a word.  We do what Emacs does. */
+int
+rl_forward_word (count, key)
+     int count, key;
+{
+  int c;
+
+  if (count < 0)
+    return (rl_backward_word (-count, key));
+
+  while (count)
+    {
+      if (rl_point == rl_end)
+	return 0;
+
+      /* If we are not in a word, move forward until we are in one.
+	 Then, move forward until we hit a non-alphabetic character. */
+      c = rl_line_buffer[rl_point];
+      if (rl_alphabetic (c) == 0)
+	{
+	  while (++rl_point < rl_end)
+	    {
+	      c = rl_line_buffer[rl_point];
+	      if (rl_alphabetic (c))
+		break;
+	    }
+	}
+
+      if (rl_point == rl_end)
+	return 0;
+
+      while (++rl_point < rl_end)
+	{
+	  c = rl_line_buffer[rl_point];
+	  if (rl_alphabetic (c) == 0)
+	    break;
+	}
+      --count;
+    }
+
+  return 0;
+}
+
+/* Move backward a word.  We do what Emacs does. */
+int
+rl_backward_word (count, key)
+     int count, key;
+{
+  int c;
+
+  if (count < 0)
+    return (rl_forward_word (-count, key));
+
+  while (count)
+    {
+      if (!rl_point)
+	return 0;
+
+      /* Like rl_forward_word (), except that we look at the characters
+	 just before point. */
+
+      c = rl_line_buffer[rl_point - 1];
+      if (rl_alphabetic (c) == 0)
+	{
+	  while (--rl_point)
+	    {
+	      c = rl_line_buffer[rl_point - 1];
+	      if (rl_alphabetic (c))
+		break;
+	    }
+	}
+
+      while (rl_point)
+	{
+	  c = rl_line_buffer[rl_point - 1];
+	  if (rl_alphabetic (c) == 0)
+	    break;
+	  else
+	    --rl_point;
+	}
+
+      --count;
+    }
+
+  return 0;
+}
+
+/* Clear the current line.  Numeric argument to C-l does this. */
+int
+rl_refresh_line (ignore1, ignore2)
+     int ignore1, ignore2;
+{
+  int curr_line;
+
+  curr_line = _rl_current_display_line ();
+
+  _rl_move_vert (curr_line);
+  _rl_move_cursor_relative (0, rl_line_buffer);   /* XXX is this right */
+
+  _rl_clear_to_eol (0);		/* arg of 0 means to not use spaces */
+
+  rl_forced_update_display ();
+  rl_display_fixed = 1;
+
+  return 0;
+}
+
+/* C-l typed to a line without quoting clears the screen, and then reprints
+   the prompt and the current input line.  Given a numeric arg, redraw only
+   the current line. */
+int
+rl_clear_screen (count, key)
+     int count, key;
+{
+  if (rl_explicit_arg)
+    {
+      rl_refresh_line (count, key);
+      return 0;
+    }
+
+  _rl_clear_screen ();		/* calls termcap function to clear screen */
+  rl_forced_update_display ();
+  rl_display_fixed = 1;
+
+  return 0;
+}
+
+int
+rl_arrow_keys (count, c)
+     int count, c;
+{
+  int ch;
+
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  ch = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+  switch (_rl_to_upper (ch))
+    {
+    case 'A':
+      rl_get_previous_history (count, ch);
+      break;
+
+    case 'B':
+      rl_get_next_history (count, ch);
+      break;
+
+    case 'C':
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_forward_char (count, ch);
+      else
+	rl_forward_byte (count, ch);
+      break;
+
+    case 'D':
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_backward_char (count, ch);
+      else
+	rl_backward_byte (count, ch);
+      break;
+
+    default:
+      rl_ding ();
+    }
+
+  return 0;
+}
+
+/* **************************************************************** */
+/*								    */
+/*			Text commands				    */
+/*								    */
+/* **************************************************************** */
+
+#ifdef HANDLE_MULTIBYTE
+static char pending_bytes[MB_LEN_MAX];
+static int pending_bytes_length = 0;
+static mbstate_t ps = {0};
+#endif
+
+/* Insert the character C at the current location, moving point forward.
+   If C introduces a multibyte sequence, we read the whole sequence and
+   then insert the multibyte char into the line buffer. */
+int
+_rl_insert_char (count, c)
+     int count, c;
+{
+  register int i;
+  char *string;
+#ifdef HANDLE_MULTIBYTE
+  int string_size;
+  char incoming[MB_LEN_MAX + 1];
+  int incoming_length = 0;
+  mbstate_t ps_back;
+  static int stored_count = 0;
+#endif
+
+  if (count <= 0)
+    return 0;
+
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    {
+      incoming[0] = c;
+      incoming[1] = '\0';
+      incoming_length = 1;
+    }
+  else
+    {
+      wchar_t wc;
+      size_t ret;
+
+      if (stored_count <= 0)
+	stored_count = count;
+      else
+	count = stored_count;
+
+      ps_back = ps;
+      pending_bytes[pending_bytes_length++] = c;
+      ret = mbrtowc (&wc, pending_bytes, pending_bytes_length, &ps);
+
+      if (ret == (size_t)-2)
+	{
+	  /* Bytes too short to compose character, try to wait for next byte.
+	     Restore the state of the byte sequence, because in this case the
+	     effect of mbstate is undefined. */
+	  ps = ps_back;
+	  return 1;
+	}
+      else if (ret == (size_t)-1)
+	{
+	  /* Invalid byte sequence for the current locale.  Treat first byte
+	     as a single character. */
+	  incoming[0] = pending_bytes[0];
+	  incoming[1] = '\0';
+	  incoming_length = 1;
+	  pending_bytes_length--;
+	  memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);
+	  /* Clear the state of the byte sequence, because in this case the
+	     effect of mbstate is undefined. */
+	  memset (&ps, 0, sizeof (mbstate_t));
+	}
+      else if (ret == (size_t)0)
+	{
+	  incoming[0] = '\0';
+	  incoming_length = 0;
+	  pending_bytes_length--;
+	  /* Clear the state of the byte sequence, because in this case the
+	     effect of mbstate is undefined. */
+	  memset (&ps, 0, sizeof (mbstate_t));
+	}
+      else
+	{
+	  /* We successfully read a single multibyte character. */
+	  memcpy (incoming, pending_bytes, pending_bytes_length);
+	  incoming[pending_bytes_length] = '\0';
+	  incoming_length = pending_bytes_length;
+	  pending_bytes_length = 0;
+	}
+    }
+#endif /* HANDLE_MULTIBYTE */
+	  
+  /* If we can optimize, then do it.  But don't let people crash
+     readline because of extra large arguments. */
+  if (count > 1 && count <= 1024)
+    {
+#if defined (HANDLE_MULTIBYTE)
+      string_size = count * incoming_length;
+      string = (char *)xmalloc (1 + string_size);
+
+      i = 0;
+      while (i < string_size)
+	{
+	  strncpy (string + i, incoming, incoming_length);
+	  i += incoming_length;
+	}
+      incoming_length = 0;
+      stored_count = 0;
+#else /* !HANDLE_MULTIBYTE */
+      string = (char *)xmalloc (1 + count);
+
+      for (i = 0; i < count; i++)
+	string[i] = c;
+#endif /* !HANDLE_MULTIBYTE */
+
+      string[i] = '\0';
+      rl_insert_text (string);
+      free (string);
+
+      return 0;
+    }
+
+  if (count > 1024)
+    {
+      int decreaser;
+#if defined (HANDLE_MULTIBYTE)
+      string_size = incoming_length * 1024;
+      string = (char *)xmalloc (1 + string_size);
+
+      i = 0;
+      while (i < string_size)
+	{
+	  strncpy (string + i, incoming, incoming_length);
+	  i += incoming_length;
+	}
+
+      while (count)
+	{
+	  decreaser = (count > 1024) ? 1024 : count;
+	  string[decreaser*incoming_length] = '\0';
+	  rl_insert_text (string);
+	  count -= decreaser;
+	}
+
+      free (string);
+      incoming_length = 0;
+      stored_count = 0;
+#else /* !HANDLE_MULTIBYTE */
+      char str[1024+1];
+
+      for (i = 0; i < 1024; i++)
+	str[i] = c;
+
+      while (count)
+	{
+	  decreaser = (count > 1024 ? 1024 : count);
+	  str[decreaser] = '\0';
+	  rl_insert_text (str);
+	  count -= decreaser;
+	}
+#endif /* !HANDLE_MULTIBYTE */
+
+      return 0;
+    }
+
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    {
+#endif
+      /* We are inserting a single character.
+	 If there is pending input, then make a string of all of the
+	 pending characters that are bound to rl_insert, and insert
+	 them all. */
+      if (_rl_any_typein ())
+	_rl_insert_typein (c);
+      else
+	{
+	  /* Inserting a single character. */
+	  char str[2];
+
+	  str[1] = '\0';
+	  str[0] = c;
+	  rl_insert_text (str);
+	}
+#if defined (HANDLE_MULTIBYTE)
+    }
+  else
+    {
+      rl_insert_text (incoming);
+      stored_count = 0;
+    }
+#endif
+
+  return 0;
+}
+
+/* Overwrite the character at point (or next COUNT characters) with C.
+   If C introduces a multibyte character sequence, read the entire sequence
+   before starting the overwrite loop. */
+int
+_rl_overwrite_char (count, c)
+     int count, c;
+{
+  int i;
+#if defined (HANDLE_MULTIBYTE)
+  char mbkey[MB_LEN_MAX];
+  int k;
+
+  /* Read an entire multibyte character sequence to insert COUNT times. */
+  if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX);
+#endif
+
+  for (i = 0; i < count; i++)
+    {
+      rl_begin_undo_group ();
+
+      if (rl_point < rl_end)
+	rl_delete (1, c);
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_insert_text (mbkey);
+      else
+#endif
+	_rl_insert_char (1, c);
+
+      rl_end_undo_group ();
+    }
+
+  return 0;
+}
+
+int
+rl_insert (count, c)
+     int count, c;
+{
+  return (rl_insert_mode == RL_IM_INSERT ? _rl_insert_char (count, c)
+  					 : _rl_overwrite_char (count, c));
+}
+
+/* Insert the next typed character verbatim. */
+int
+rl_quoted_insert (count, key)
+     int count, key;
+{
+  int c;
+
+#if defined (HANDLE_SIGNALS)
+  _rl_disable_tty_signals ();
+#endif
+
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  c = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+#if defined (HANDLE_SIGNALS)
+  _rl_restore_tty_signals ();
+#endif
+
+  return (_rl_insert_char (count, c));  
+}
+
+/* Insert a tab character. */
+int
+rl_tab_insert (count, key)
+     int count, key;
+{
+  return (_rl_insert_char (count, '\t'));
+}
+
+/* What to do when a NEWLINE is pressed.  We accept the whole line.
+   KEY is the key that invoked this command.  I guess it could have
+   meaning in the future. */
+int
+rl_newline (count, key)
+     int count, key;
+{
+  rl_done = 1;
+
+  if (_rl_history_preserve_point)
+    _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
+  RL_SETSTATE(RL_STATE_DONE);
+
+#if defined (VI_MODE)
+  if (rl_editing_mode == vi_mode)
+    {
+      _rl_vi_done_inserting ();
+      _rl_vi_reset_last ();
+    }
+#endif /* VI_MODE */
+
+  /* If we've been asked to erase empty lines, suppress the final update,
+     since _rl_update_final calls rl_crlf(). */
+  if (rl_erase_empty_line && rl_point == 0 && rl_end == 0)
+    return 0;
+
+  if (readline_echoing_p)
+    _rl_update_final ();
+  return 0;
+}
+
+/* What to do for some uppercase characters, like meta characters,
+   and some characters appearing in emacs_ctlx_keymap.  This function
+   is just a stub, you bind keys to it and the code in _rl_dispatch ()
+   is special cased. */
+int
+rl_do_lowercase_version (ignore1, ignore2)
+     int ignore1, ignore2;
+{
+  return 0;
+}
+
+/* This is different from what vi does, so the code's not shared.  Emacs
+   rubout in overwrite mode has one oddity:  it replaces a control
+   character that's displayed as two characters (^X) with two spaces. */
+int
+_rl_overwrite_rubout (count, key)
+     int count, key;
+{
+  int opoint;
+  int i, l;
+
+  if (rl_point == 0)
+    {
+      rl_ding ();
+      return 1;
+    }
+
+  opoint = rl_point;
+
+  /* L == number of spaces to insert */
+  for (i = l = 0; i < count; i++)
+    {
+      rl_backward_char (1, key);
+      l += rl_character_len (rl_line_buffer[rl_point], rl_point);	/* not exactly right */
+    }
+
+  rl_begin_undo_group ();
+
+  if (count > 1 || rl_explicit_arg)
+    rl_kill_text (opoint, rl_point);
+  else
+    rl_delete_text (opoint, rl_point);
+
+  /* Emacs puts point at the beginning of the sequence of spaces. */
+  opoint = rl_point;
+  _rl_insert_char (l, ' ');
+  rl_point = opoint;
+
+  rl_end_undo_group ();
+
+  return 0;
+}
+  
+/* Rubout the character behind point. */
+int
+rl_rubout (count, key)
+     int count, key;
+{
+  if (count < 0)
+    return (rl_delete (-count, key));
+
+  if (!rl_point)
+    {
+      rl_ding ();
+      return -1;
+    }
+
+  if (rl_insert_mode == RL_IM_OVERWRITE)
+    return (_rl_overwrite_rubout (count, key));
+
+  return (_rl_rubout_char (count, key));
+}
+
+int
+_rl_rubout_char (count, key)
+     int count, key;
+{
+  int orig_point;
+  unsigned char c;
+
+  /* Duplicated code because this is called from other parts of the library. */
+  if (count < 0)
+    return (rl_delete (-count, key));
+
+  if (rl_point == 0)
+    {
+      rl_ding ();
+      return -1;
+    }
+
+  if (count > 1 || rl_explicit_arg)
+    {
+      orig_point = rl_point;
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_backward_char (count, key);
+      else
+#endif
+        rl_backward_byte (count, key);
+      rl_kill_text (orig_point, rl_point);
+    }
+  else
+    {
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX == 1 || rl_byte_oriented)
+	{
+#endif
+	  c = rl_line_buffer[--rl_point];
+	  rl_delete_text (rl_point, rl_point + 1);
+#if defined (HANDLE_MULTIBYTE)
+	}
+      else
+	{
+	  int orig_point;
+
+	  orig_point = rl_point;
+	  rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+	  c = rl_line_buffer[rl_point];
+	  rl_delete_text (rl_point, orig_point);
+	}
+#endif /* HANDLE_MULTIBYTE */
+
+      /* I don't think that the hack for end of line is needed for
+	 multibyte chars. */
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX == 1 || rl_byte_oriented)
+#endif
+      if (rl_point == rl_end && ISPRINT (c) && _rl_last_c_pos)
+	{
+	  int l;
+	  l = rl_character_len (c, rl_point);
+	  _rl_erase_at_end_of_line (l);
+	}
+    }
+
+  return 0;
+}
+
+/* Delete the character under the cursor.  Given a numeric argument,
+   kill that many characters instead. */
+int
+rl_delete (count, key)
+     int count, key;
+{
+  int r;
+
+  if (count < 0)
+    return (_rl_rubout_char (-count, key));
+
+  if (rl_point == rl_end)
+    {
+      rl_ding ();
+      return -1;
+    }
+
+  if (count > 1 || rl_explicit_arg)
+    {
+      int orig_point = rl_point;
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_forward_char (count, key);
+      else
+#endif
+	rl_forward_byte (count, key);
+
+      r = rl_kill_text (orig_point, rl_point);
+      rl_point = orig_point;
+      return r;
+    }
+  else
+    {
+      int new_point;
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	new_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+      else
+	new_point = rl_point + 1;
+	
+      return (rl_delete_text (rl_point, new_point));
+    }
+}
+
+/* Delete the character under the cursor, unless the insertion
+   point is at the end of the line, in which case the character
+   behind the cursor is deleted.  COUNT is obeyed and may be used
+   to delete forward or backward that many characters. */      
+int
+rl_rubout_or_delete (count, key)
+     int count, key;
+{
+  if (rl_end != 0 && rl_point == rl_end)
+    return (_rl_rubout_char (count, key));
+  else
+    return (rl_delete (count, key));
+}  
+
+/* Delete all spaces and tabs around point. */
+int
+rl_delete_horizontal_space (count, ignore)
+     int count, ignore;
+{
+  int start = rl_point;
+
+  while (rl_point && whitespace (rl_line_buffer[rl_point - 1]))
+    rl_point--;
+
+  start = rl_point;
+
+  while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
+    rl_point++;
+
+  if (start != rl_point)
+    {
+      rl_delete_text (start, rl_point);
+      rl_point = start;
+    }
+  return 0;
+}
+
+/* Like the tcsh editing function delete-char-or-list.  The eof character
+   is caught before this is invoked, so this really does the same thing as
+   delete-char-or-list-or-eof, as long as it's bound to the eof character. */
+int
+rl_delete_or_show_completions (count, key)
+     int count, key;
+{
+  if (rl_end != 0 && rl_point == rl_end)
+    return (rl_possible_completions (count, key));
+  else
+    return (rl_delete (count, key));
+}
+
+#ifndef RL_COMMENT_BEGIN_DEFAULT
+#define RL_COMMENT_BEGIN_DEFAULT "#"
+#endif
+
+/* Turn the current line into a comment in shell history.
+   A K*rn shell style function. */
+int
+rl_insert_comment (count, key)
+     int count, key;
+{
+  char *rl_comment_text;
+  int rl_comment_len;
+
+  rl_beg_of_line (1, key);
+  rl_comment_text = _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT;
+
+  if (rl_explicit_arg == 0)
+    rl_insert_text (rl_comment_text);
+  else
+    {
+      rl_comment_len = strlen (rl_comment_text);
+      if (STREQN (rl_comment_text, rl_line_buffer, rl_comment_len))
+	rl_delete_text (rl_point, rl_point + rl_comment_len);
+      else
+	rl_insert_text (rl_comment_text);
+    }
+
+  (*rl_redisplay_function) ();
+  rl_newline (1, '\n');
+
+  return (0);
+}
+
+/* **************************************************************** */
+/*								    */
+/*			Changing Case				    */
+/*								    */
+/* **************************************************************** */
+
+/* The three kinds of things that we know how to do. */
+#define UpCase 1
+#define DownCase 2
+#define CapCase 3
+
+/* Uppercase the word at point. */
+int
+rl_upcase_word (count, key)
+     int count, key;
+{
+  return (rl_change_case (count, UpCase));
+}
+
+/* Lowercase the word at point. */
+int
+rl_downcase_word (count, key)
+     int count, key;
+{
+  return (rl_change_case (count, DownCase));
+}
+
+/* Upcase the first letter, downcase the rest. */
+int
+rl_capitalize_word (count, key)
+     int count, key;
+{
+ return (rl_change_case (count, CapCase));
+}
+
+/* The meaty function.
+   Change the case of COUNT words, performing OP on them.
+   OP is one of UpCase, DownCase, or CapCase.
+   If a negative argument is given, leave point where it started,
+   otherwise, leave it where it moves to. */
+static int
+rl_change_case (count, op)
+     int count, op;
+{
+  register int start, end;
+  int inword, c;
+
+  start = rl_point;
+  rl_forward_word (count, 0);
+  end = rl_point;
+
+  if (count < 0)
+    SWAP (start, end);
+
+  /* We are going to modify some text, so let's prepare to undo it. */
+  rl_modifying (start, end);
+
+  for (inword = 0; start < end; start++)
+    {
+      c = rl_line_buffer[start];
+      switch (op)
+	{
+	case UpCase:
+	  rl_line_buffer[start] = _rl_to_upper (c);
+	  break;
+
+	case DownCase:
+	  rl_line_buffer[start] = _rl_to_lower (c);
+	  break;
+
+	case CapCase:
+	  rl_line_buffer[start] = (inword == 0) ? _rl_to_upper (c) : _rl_to_lower (c);
+	  inword = rl_alphabetic (rl_line_buffer[start]);
+	  break;
+
+	default:
+	  rl_ding ();
+	  return -1;
+	}
+    }
+  rl_point = end;
+  return 0;
+}
+
+/* **************************************************************** */
+/*								    */
+/*			Transposition				    */
+/*								    */
+/* **************************************************************** */
+
+/* Transpose the words at point.  If point is at the end of the line,
+   transpose the two words before point. */
+int
+rl_transpose_words (count, key)
+     int count, key;
+{
+  char *word1, *word2;
+  int w1_beg, w1_end, w2_beg, w2_end;
+  int orig_point = rl_point;
+
+  if (!count)
+    return 0;
+
+  /* Find the two words. */
+  rl_forward_word (count, key);
+  w2_end = rl_point;
+  rl_backward_word (1, key);
+  w2_beg = rl_point;
+  rl_backward_word (count, key);
+  w1_beg = rl_point;
+  rl_forward_word (1, key);
+  w1_end = rl_point;
+
+  /* Do some check to make sure that there really are two words. */
+  if ((w1_beg == w2_beg) || (w2_beg < w1_end))
+    {
+      rl_ding ();
+      rl_point = orig_point;
+      return -1;
+    }
+
+  /* Get the text of the words. */
+  word1 = rl_copy_text (w1_beg, w1_end);
+  word2 = rl_copy_text (w2_beg, w2_end);
+
+  /* We are about to do many insertions and deletions.  Remember them
+     as one operation. */
+  rl_begin_undo_group ();
+
+  /* Do the stuff at word2 first, so that we don't have to worry
+     about word1 moving. */
+  rl_point = w2_beg;
+  rl_delete_text (w2_beg, w2_end);
+  rl_insert_text (word1);
+
+  rl_point = w1_beg;
+  rl_delete_text (w1_beg, w1_end);
+  rl_insert_text (word2);
+
+  /* This is exactly correct since the text before this point has not
+     changed in length. */
+  rl_point = w2_end;
+
+  /* I think that does it. */
+  rl_end_undo_group ();
+  free (word1);
+  free (word2);
+
+  return 0;
+}
+
+/* Transpose the characters at point.  If point is at the end of the line,
+   then transpose the characters before point. */
+int
+rl_transpose_chars (count, key)
+     int count, key;
+{
+#if defined (HANDLE_MULTIBYTE)
+  char *dummy;
+  int i, prev_point;
+#else
+  char dummy[2];
+#endif
+  int char_length;
+
+  if (count == 0)
+    return 0;
+
+  if (!rl_point || rl_end < 2)
+    {
+      rl_ding ();
+      return -1;
+    }
+
+  rl_begin_undo_group ();
+
+  if (rl_point == rl_end)
+    {
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+      else
+	--rl_point;
+      count = 1;
+    }
+
+#if defined (HANDLE_MULTIBYTE)
+  prev_point = rl_point;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+  else
+#endif
+    rl_point--;
+
+#if defined (HANDLE_MULTIBYTE)
+  char_length = prev_point - rl_point;
+  dummy = (char *)xmalloc (char_length + 1);
+  for (i = 0; i < char_length; i++)
+    dummy[i] = rl_line_buffer[rl_point + i];
+  dummy[i] = '\0';
+#else
+  dummy[0] = rl_line_buffer[rl_point];
+  dummy[char_length = 1] = '\0';
+#endif
+
+  rl_delete_text (rl_point, rl_point + char_length);
+
+  rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);
+
+  _rl_fix_point (0);
+  rl_insert_text (dummy);
+  rl_end_undo_group ();
+
+#if defined (HANDLE_MULTIBYTE)
+  free (dummy);
+#endif
+
+  return 0;
+}
+
+/* **************************************************************** */
+/*								    */
+/*			Character Searching			    */
+/*								    */
+/* **************************************************************** */
+
+int
+#if defined (HANDLE_MULTIBYTE)
+_rl_char_search_internal (count, dir, smbchar, len)
+     int count, dir;
+     char *smbchar;
+     int len;
+#else
+_rl_char_search_internal (count, dir, schar)
+     int count, dir, schar;
+#endif
+{
+  int pos, inc;
+#if defined (HANDLE_MULTIBYTE)
+  int prepos;
+#endif
+
+  pos = rl_point;
+  inc = (dir < 0) ? -1 : 1;
+  while (count)
+    {
+      if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end))
+	{
+	  rl_ding ();
+	  return -1;
+	}
+
+#if defined (HANDLE_MULTIBYTE)
+      pos = (inc > 0) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)
+		      : _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY);
+#else
+      pos += inc;
+#endif
+      do
+	{
+#if defined (HANDLE_MULTIBYTE)
+	  if (_rl_is_mbchar_matched (rl_line_buffer, pos, rl_end, smbchar, len))
+#else
+	  if (rl_line_buffer[pos] == schar)
+#endif
+	    {
+	      count--;
+	      if (dir < 0)
+	        rl_point = (dir == BTO) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)
+					: pos;
+	      else
+		rl_point = (dir == FTO) ? _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)
+					: pos;
+	      break;
+	    }
+#if defined (HANDLE_MULTIBYTE)
+	  prepos = pos;
+#endif
+	}
+#if defined (HANDLE_MULTIBYTE)
+      while ((dir < 0) ? (pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)) != prepos
+		       : (pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos);
+#else
+      while ((dir < 0) ? pos-- : ++pos < rl_end);
+#endif
+    }
+  return (0);
+}
+
+/* Search COUNT times for a character read from the current input stream.
+   FDIR is the direction to search if COUNT is non-negative; otherwise
+   the search goes in BDIR.  So much is dependent on HANDLE_MULTIBYTE
+   that there are two separate versions of this function. */
+#if defined (HANDLE_MULTIBYTE)
+static int
+_rl_char_search (count, fdir, bdir)
+     int count, fdir, bdir;
+{
+  char mbchar[MB_LEN_MAX];
+  int mb_len;
+
+  mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
+
+  if (count < 0)
+    return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
+  else
+    return (_rl_char_search_internal (count, fdir, mbchar, mb_len));
+}
+#else /* !HANDLE_MULTIBYTE */
+static int
+_rl_char_search (count, fdir, bdir)
+     int count, fdir, bdir;
+{
+  int c;
+
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  c = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+  if (count < 0)
+    return (_rl_char_search_internal (-count, bdir, c));
+  else
+    return (_rl_char_search_internal (count, fdir, c));
+}
+#endif /* !HANDLE_MULTIBYTE */
+
+int
+rl_char_search (count, key)
+     int count, key;
+{
+  return (_rl_char_search (count, FFIND, BFIND));
+}
+
+int
+rl_backward_char_search (count, key)
+     int count, key;
+{
+  return (_rl_char_search (count, BFIND, FFIND));
+}
+
+/* **************************************************************** */
+/*								    */
+/*		   The Mark and the Region.			    */
+/*								    */
+/* **************************************************************** */
+
+/* Set the mark at POSITION. */
+int
+_rl_set_mark_at_pos (position)
+     int position;
+{
+  if (position > rl_end)
+    return -1;
+
+  rl_mark = position;
+  return 0;
+}
+
+/* A bindable command to set the mark. */
+int
+rl_set_mark (count, key)
+     int count, key;
+{
+  return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
+}
+
+/* Exchange the position of mark and point. */
+int
+rl_exchange_point_and_mark (count, key)
+     int count, key;
+{
+  if (rl_mark > rl_end)
+    rl_mark = -1;
+
+  if (rl_mark == -1)
+    {
+      rl_ding ();
+      return -1;
+    }
+  else
+    SWAP (rl_point, rl_mark);
+
+  return 0;
+}
diff --git a/readline/tilde.c b/readline/tilde.c
index 777b655..154f7f8 100644
--- a/readline/tilde.c
+++ b/readline/tilde.c
@@ -48,25 +48,18 @@
 #include "tilde.h"
 
 #if defined (TEST) || defined (STATIC_MALLOC)
-static char *xmalloc (), *xrealloc ();
+static void *xmalloc (), *xrealloc ();
 #else
-#  if defined __STDC__
-extern char *xmalloc (int);
-extern char *xrealloc (void *, int);
-#  else
-extern char *xmalloc (), *xrealloc ();
-#  endif /* !__STDC__ */
+#  include "xmalloc.h"
 #endif /* TEST || STATIC_MALLOC */
 
 #if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid (), *getpwnam ();
+extern struct passwd *getpwuid PARAMS((uid_t));
+extern struct passwd *getpwnam PARAMS((const char *));
 #endif /* !HAVE_GETPW_DECLS */
 
 #if !defined (savestring)
-#  ifndef strcpy
-extern char *strcpy ();
-#  endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
 #endif /* !savestring */
 
 #if !defined (NULL)
@@ -80,49 +73,54 @@
 /* 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 *get_home_dir __P((void));
-extern char *get_env_value __P((char *));
+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 char *default_prefixes[] =
-  { " ~", "\t~", (char *)NULL };
+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 char *default_suffixes[] =
-  { " ", "\n", (char *)NULL };
+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. */
-CPFunction *tilde_expansion_preexpansion_hook = (CPFunction *)NULL;
+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. */
-CPFunction *tilde_expansion_failure_hook = (CPFunction *)NULL;
+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 = default_prefixes;
+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 = default_suffixes;
+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)
-     char *string;
+     const char *string;
      int *len;
 {
   register int i, j, string_len;
@@ -157,7 +155,7 @@
    the character which ends the tilde definition.  */
 static int
 tilde_find_suffix (string)
-     char *string;
+     const char *string;
 {
   register int i, j, string_len;
   register char **suffixes;
@@ -186,16 +184,16 @@
 /* Return a new string which is the result of tilde expanding STRING. */
 char *
 tilde_expand (string)
-     char *string;
+     const char *string;
 {
   char *result;
   int result_size, result_index;
 
   result_index = result_size = 0;
   if (result = strchr (string, '~'))
-    result = xmalloc (result_size = (strlen (string) + 16));
+    result = (char *)xmalloc (result_size = (strlen (string) + 16));
   else
-    result = xmalloc (result_size = (strlen (string) + 1));
+    result = (char *)xmalloc (result_size = (strlen (string) + 1));
 
   /* Scan through STRING expanding tildes as we come to them. */
   while (1)
@@ -209,7 +207,7 @@
 
       /* Copy the skipped text into the result. */
       if ((result_index + start + 1) > result_size)
-	result = xrealloc (result, 1 + (result_size += (start + 20)));
+	result = (char *)xrealloc (result, 1 + (result_size += (start + 20)));
 
       strncpy (result + result_index, string, start);
       result_index += start;
@@ -226,7 +224,7 @@
 	break;
 
       /* Expand the entire tilde word, and copy it into RESULT. */
-      tilde_word = xmalloc (1 + end);
+      tilde_word = (char *)xmalloc (1 + end);
       strncpy (tilde_word, string, end);
       tilde_word[end] = '\0';
       string += end;
@@ -235,14 +233,14 @@
       free (tilde_word);
 
       len = strlen (expansion);
-#ifdef __CYGWIN32__
+#ifdef __CYGWIN__
       /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
-         $HOME for `user' is /.  On cygwin, // denotes a network drive. */
+	 $HOME for `user' is /.  On cygwin, // denotes a network drive. */
       if (len > 1 || *expansion != '/' || *string != '/')
 #endif
 	{
 	  if ((result_index + len + 1) > result_size)
-	    result = xrealloc (result, 1 + (result_size += (len + 20)));
+	    result = (char *)xrealloc (result, 1 + (result_size += (len + 20)));
 
 	  strcpy (result + result_index, expansion);
 	  result_index += len;
@@ -260,13 +258,13 @@
    the location it points to. */
 static char *
 isolate_tilde_prefix (fname, lenp)
-     char *fname;
+     const char *fname;
      int *lenp;
 {
   char *ret;
   int i;
 
-  ret = xmalloc (strlen (fname));
+  ret = (char *)xmalloc (strlen (fname));
 #if defined (__MSDOS__)
   for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
 #else
@@ -283,7 +281,8 @@
    SUFFIND. */
 static char *
 glue_prefix_and_suffix (prefix, suffix, suffind)
-     char *prefix, *suffix;
+     char *prefix;
+     const char *suffix;
      int suffind;
 {
   char *ret;
@@ -291,7 +290,7 @@
 
   plen = (prefix && *prefix) ? strlen (prefix) : 0;
   slen = strlen (suffix + suffind);
-  ret = xmalloc (plen + slen + 1);
+  ret = (char *)xmalloc (plen + slen + 1);
   if (plen)
     strcpy (ret, prefix);
   strcpy (ret + plen, suffix + suffind);
@@ -303,7 +302,7 @@
    This always returns a newly-allocated string, never static storage. */
 char *
 tilde_expand_word (filename)
-     char *filename;
+     const char *filename;
 {
   char *dirname, *expansion, *username;
   int user_len;
@@ -321,12 +320,12 @@
   if (filename[1] == '\0' || filename[1] == '/')
     {
       /* Prefix $HOME to the rest of the string. */
-      expansion = get_env_value ("HOME");
+      expansion = sh_get_env_value ("HOME");
 
       /* If there is no HOME variable, look up the directory in
 	 the password database. */
       if (expansion == 0)
-	expansion = get_home_dir ();
+	expansion = sh_get_home_dir ();
 
       return (glue_prefix_and_suffix (expansion, filename, 1));
     }
@@ -415,28 +414,28 @@
 
 static void memory_error_and_abort ();
 
-static char *
+static void *
 xmalloc (bytes)
-     int bytes;
+     size_t bytes;
 {
-  char *temp = (char *)malloc (bytes);
+  void *temp = (char *)malloc (bytes);
 
   if (!temp)
     memory_error_and_abort ();
   return (temp);
 }
 
-static char *
+static void *
 xrealloc (pointer, bytes)
-     char *pointer;
+     void *pointer;
      int bytes;
 {
-  char *temp;
+  void *temp;
 
   if (!pointer)
-    temp = (char *)malloc (bytes);
+    temp = malloc (bytes);
   else
-    temp = (char *)realloc (pointer, bytes);
+    temp = realloc (pointer, bytes);
 
   if (!temp)
     memory_error_and_abort ();
diff --git a/readline/tilde.h b/readline/tilde.h
index 7783fd6..f8182c9 100644
--- a/readline/tilde.h
+++ b/readline/tilde.h
@@ -30,36 +30,29 @@
 
 /* A function can be defined using prototypes and compile on both ANSI C
    and traditional C compilers with something like this:
-	extern char *func __P((char *, char *, int)); */
+	extern char *func PARAMS((char *, char *, int)); */
 
-#if !defined (__P)
+#if !defined (PARAMS)
 #  if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-#    define __P(protos) protos
+#    define PARAMS(protos) protos
 #  else
-#    define __P(protos) ()
+#    define PARAMS(protos) ()
 #  endif
 #endif
 
-/* Function pointers can be declared as (Function *)foo. */
-#if !defined (_FUNCTION_DEF)
-#  define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
-#endif /* _FUNCTION_DEF */
+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 CPFunction *tilde_expansion_preexpansion_hook;
+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 CPFunction *tilde_expansion_failure_hook;
+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
@@ -72,11 +65,11 @@
 extern char **tilde_additional_suffixes;
 
 /* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand __P((char *));
+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 __P((char *));
+extern char *tilde_expand_word PARAMS((const char *));
 
 #ifdef __cplusplus
 }
diff --git a/readline/undo.c b/readline/undo.c
index f7f30d1..25c287b 100644
--- a/readline/undo.c
+++ b/readline/undo.c
@@ -48,8 +48,7 @@
 #include "history.h"
 
 #include "rlprivate.h"
-
-#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
+#include "xmalloc.h"
 
 /* Non-zero tells rl_delete_text and rl_insert_text to not add to
    the undo list. */
@@ -86,7 +85,7 @@
 
 /* Free the existing undo list. */
 void
-free_undo_list ()
+rl_free_undo_list ()
 {
   while (rl_undo_list)
     {
@@ -107,17 +106,18 @@
 rl_do_undo ()
 {
   UNDO_LIST *release;
-  int waiting_for_begin = 0;
-  int start, end;
+  int waiting_for_begin, start, end;
 
 #define TRANS(i) ((i) == -1 ? rl_point : ((i) == -2 ? rl_end : (i)))
 
+  start = end = waiting_for_begin = 0;
   do
     {
       if (!rl_undo_list)
 	return (0);
 
       _rl_doing_an_undo = 1;
+      RL_SETSTATE(RL_STATE_UNDOING);
 
       /* To better support vi-mode, a start or end value of -1 means
 	 rl_point, and a value of -2 means rl_end. */
@@ -152,11 +152,12 @@
 	  if (waiting_for_begin)
 	    waiting_for_begin--;
 	  else
-	    ding ();
+	    rl_ding ();
 	  break;
 	}
 
       _rl_doing_an_undo = 0;
+      RL_UNSETSTATE(RL_STATE_UNDOING);
 
       release = rl_undo_list;
       rl_undo_list = rl_undo_list->next;
@@ -231,7 +232,7 @@
      int count, key;
 {
   if (!rl_undo_list)
-    ding ();
+    rl_ding ();
   else
     {
       while (rl_undo_list)
@@ -254,7 +255,7 @@
 	count--;
       else
 	{
-	  ding ();
+	  rl_ding ();
 	  break;
 	}
     }
diff --git a/readline/util.c b/readline/util.c
index be9e0a9..c7bd360 100644
--- a/readline/util.c
+++ b/readline/util.c
@@ -55,8 +55,6 @@
 #include "rlprivate.h"
 #include "xmalloc.h"
 
-#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
-
 /* **************************************************************** */
 /*								    */
 /*			Utility Functions			    */
@@ -67,10 +65,10 @@
    in words, or 1 if it is. */
 
 int _rl_allow_pathname_alphabetic_chars = 0;
-static char *pathname_alphabetic_chars = "/-_=~.#$";
+static const char *pathname_alphabetic_chars = "/-_=~.#$";
 
 int
-alphabetic (c)
+rl_alphabetic (c)
      int c;
 {
   if (ALPHABETIC (c))
@@ -84,16 +82,16 @@
 int
 _rl_abort_internal ()
 {
-  ding ();
+  rl_ding ();
   rl_clear_message ();
   _rl_init_argument ();
-  rl_pending_input = 0;
+  rl_clear_pending_input ();
 
-  _rl_defining_kbd_macro = 0;
-  while (_rl_executing_macro)
+  RL_UNSETSTATE (RL_STATE_MACRODEF);
+  while (rl_executing_macro)
     _rl_pop_executing_macro ();
 
-  rl_last_func = (Function *)NULL;
+  rl_last_func = (rl_command_func_t *)NULL;
   longjmp (readline_top_level, 1);
   return (0);
 }
@@ -113,7 +111,7 @@
   ioctl (1, TIOCSTAT, (char *)0);
   rl_refresh_line (count, key);
 #else
-  ding ();
+  rl_ding ();
 #endif
   return 0;
 }
@@ -132,7 +130,7 @@
     SWAP (from, to);
 
   length = to - from;
-  copy = xmalloc (1 + length);
+  copy = (char *)xmalloc (1 + length);
   strncpy (copy, rl_line_buffer + from, length);
   copy[length] = '\0';
   return (copy);
@@ -147,7 +145,7 @@
   while (len >= rl_line_buffer_len)
     {
       rl_line_buffer_len += DEFAULT_BUFFER_SIZE;
-      rl_line_buffer = xrealloc (rl_line_buffer, rl_line_buffer_len);
+      rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len);
     }
 
   _rl_set_the_line ();
@@ -193,7 +191,7 @@
   if (rl_line_buffer[start] == '~')
     {
       len = end - start + 1;
-      temp = xmalloc (len + 1);
+      temp = (char *)xmalloc (len + 1);
       strncpy (temp, rl_line_buffer + start, len);
       temp[len] = '\0';
       homedir = tilde_expand (temp);
@@ -215,16 +213,51 @@
    match in s1.  The compare is case insensitive. */
 char *
 _rl_strindex (s1, s2)
-     register char *s1, *s2;
+     register const char *s1, *s2;
 {
   register int i, l, len;
 
   for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++)
     if (_rl_strnicmp (s1 + i, s2, l) == 0)
-      return (s1 + i);
+      return ((char *) (s1 + i));
   return ((char *)NULL);
 }
 
+#ifndef HAVE_STRPBRK
+/* Find the first occurrence in STRING1 of any character from STRING2.
+   Return a pointer to the character in STRING1. */
+char *
+_rl_strpbrk (string1, string2)
+     const char *string1, *string2;
+{
+  register const char *scan;
+#if defined (HANDLE_MULTIBYTE)
+  mbstate_t ps;
+  register int i, v;
+
+  memset (&ps, 0, sizeof (mbstate_t));
+#endif
+
+  for (; *string1; string1++)
+    {
+      for (scan = string2; *scan; scan++)
+	{
+	  if (*string1 == *scan)
+	    return ((char *)string1);
+	}
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  v = _rl_get_char_len (string1, &ps);
+	  if (v > 1)
+	    string += v - 1;	/* -1 to account for auto-increment in loop */
+	}
+#endif
+    }
+  return ((char *)NULL);
+}
+#endif
+
 #if !defined (HAVE_STRCASECMP)
 /* Compare at most COUNT characters from string1 to string2.  Case
    doesn't matter. */
@@ -283,69 +316,23 @@
 #endif
 }
 
-/* Function equivalents for the macros defined in chartypes.h. */
-#undef _rl_uppercase_p
-int
-_rl_uppercase_p (c)
-     int c;
-{
-  return (isupper (c));
-}
+/* Function equivalents for the macros defined in chardefs.h. */
+#define FUNCTION_FOR_MACRO(f)	int (f) (c) int c; { return f (c); }
 
-#undef _rl_lowercase_p
-int
-_rl_lowercase_p (c)
-     int c;
-{
-  return (islower (c));
-}
-
-#undef _rl_pure_alphabetic
-int
-_rl_pure_alphabetic (c)
-     int c;
-{
-  return (isupper (c) || islower (c));
-}
-
-#undef _rl_digit_p
-int
-_rl_digit_p (c)
-     int c;
-{
-  return (isdigit (c));
-}
-
-#undef _rl_to_lower
-int
-_rl_to_lower (c)
-     int c;
-{
-  return (isupper (c) ? tolower (c) : c);
-}
-
-#undef _rl_to_upper
-int
-_rl_to_upper (c)
-     int c;
-{
-  return (islower (c) ? toupper (c) : c);
-}
-
-#undef _rl_digit_value
-int
-_rl_digit_value (c)
-     int c;
-{
-  return (isdigit (c) ? c - '0' : c);
-}
+FUNCTION_FOR_MACRO (_rl_digit_p)
+FUNCTION_FOR_MACRO (_rl_digit_value)
+FUNCTION_FOR_MACRO (_rl_lowercase_p)
+FUNCTION_FOR_MACRO (_rl_pure_alphabetic)
+FUNCTION_FOR_MACRO (_rl_to_lower)
+FUNCTION_FOR_MACRO (_rl_to_upper)
+FUNCTION_FOR_MACRO (_rl_uppercase_p)
 
 /* Backwards compatibility, now that savestring has been removed from
    all `public' readline header files. */
 #undef _rl_savestring
 char *
 _rl_savestring (s)
-     char *s;
+     const char *s;
 {
-  return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s)));
+  return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s)));
 }
diff --git a/readline/vi_keymap.c b/readline/vi_keymap.c
index cf6724c..53a67c6 100644
--- a/readline/vi_keymap.c
+++ b/readline/vi_keymap.c
@@ -33,429 +33,429 @@
 /* The keymap arrays for handling vi mode. */
 KEYMAP_ENTRY_ARRAY vi_movement_keymap = {
   /* The regular control keys come first. */
-  { ISFUNC, (Function *)0x0 },		/* Control-@ */
-  { ISFUNC, (Function *)0x0 },		/* Control-a */
-  { ISFUNC, (Function *)0x0 },		/* Control-b */
-  { ISFUNC, (Function *)0x0 },		/* Control-c */
-  { ISFUNC, rl_vi_eof_maybe },		/* Control-d */
-  { ISFUNC, rl_emacs_editing_mode },	/* Control-e */
-  { ISFUNC, (Function *)0x0 },		/* Control-f */
-  { ISFUNC, rl_abort },			/* Control-g */
-  { ISFUNC, rl_backward },		/* Control-h */
-  { ISFUNC, (Function *)0x0 },		/* Control-i */
-  { ISFUNC, rl_newline },		/* Control-j */
-  { ISFUNC, rl_kill_line },		/* Control-k */
-  { ISFUNC, rl_clear_screen },		/* Control-l */
-  { ISFUNC, rl_newline },		/* Control-m */
-  { ISFUNC, rl_get_next_history },	/* Control-n */
-  { ISFUNC, (Function *)0x0 },		/* Control-o */
-  { ISFUNC, rl_get_previous_history },	/* Control-p */
-  { ISFUNC, rl_quoted_insert },		/* Control-q */
-  { ISFUNC, rl_reverse_search_history }, /* Control-r */
-  { ISFUNC, rl_forward_search_history }, /* Control-s */
-  { ISFUNC, rl_transpose_chars },	/* Control-t */
-  { ISFUNC, rl_unix_line_discard },	/* Control-u */
-  { ISFUNC, rl_quoted_insert },		/* Control-v */
-  { ISFUNC, rl_unix_word_rubout },	/* Control-w */
-  { ISFUNC, (Function *)0x0 },		/* Control-x */
-  { ISFUNC, rl_yank },			/* Control-y */
-  { ISFUNC, (Function *)0x0 },		/* Control-z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-@ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-a */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-c */
+  { ISFUNC, rl_vi_eof_maybe },			/* Control-d */
+  { ISFUNC, rl_emacs_editing_mode },		/* Control-e */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-f */
+  { ISFUNC, rl_abort },				/* Control-g */
+  { ISFUNC, rl_backward_char },			/* Control-h */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-i */
+  { ISFUNC, rl_newline },			/* Control-j */
+  { ISFUNC, rl_kill_line },			/* Control-k */
+  { ISFUNC, rl_clear_screen },			/* Control-l */
+  { ISFUNC, rl_newline },			/* Control-m */
+  { ISFUNC, rl_get_next_history },		/* Control-n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-o */
+  { ISFUNC, rl_get_previous_history },		/* Control-p */
+  { ISFUNC, rl_quoted_insert },			/* Control-q */
+  { ISFUNC, rl_reverse_search_history },	/* Control-r */
+  { ISFUNC, rl_forward_search_history },	/* Control-s */
+  { ISFUNC, rl_transpose_chars },		/* Control-t */
+  { ISFUNC, rl_unix_line_discard },		/* Control-u */
+  { ISFUNC, rl_quoted_insert },			/* Control-v */
+  { ISFUNC, rl_unix_word_rubout },		/* Control-w */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-x */
+  { ISFUNC, rl_yank },				/* Control-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-z */
 
-  { ISFUNC, (Function *)0x0 },		/* Control-[ */	/* vi_escape_keymap */
-  { ISFUNC, (Function *)0x0 },		/* Control-\ */
-  { ISFUNC, (Function *)0x0 },		/* Control-] */
-  { ISFUNC, (Function *)0x0 },		/* Control-^ */
-  { ISFUNC, rl_vi_undo },		/* Control-_ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-[ */	/* vi_escape_keymap */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-\ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-^ */
+  { ISFUNC, rl_vi_undo },			/* Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, rl_forward },		/* SPACE */
-  { ISFUNC, (Function *)0x0 },		/* ! */
-  { ISFUNC, (Function *)0x0 },		/* " */
-  { ISFUNC, rl_insert_comment },	/* # */
-  { ISFUNC, rl_end_of_line },		/* $ */
-  { ISFUNC, rl_vi_match },		/* % */
-  { ISFUNC, rl_vi_tilde_expand },	/* & */
-  { ISFUNC, (Function *)0x0 },		/* ' */
-  { ISFUNC, (Function *)0x0 },		/* ( */
-  { ISFUNC, (Function *)0x0 },		/* ) */
-  { ISFUNC, rl_vi_complete },		/* * */
-  { ISFUNC, rl_get_next_history},	/* + */
-  { ISFUNC, rl_vi_char_search },	/* , */
-  { ISFUNC, rl_get_previous_history },	/* - */
-  { ISFUNC, rl_vi_redo },		/* . */
-  { ISFUNC, rl_vi_search },		/* / */
+  { ISFUNC, rl_forward_char },			/* SPACE */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ! */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* " */
+  { ISFUNC, rl_insert_comment },		/* # */
+  { ISFUNC, rl_end_of_line },			/* $ */
+  { ISFUNC, rl_vi_match },			/* % */
+  { ISFUNC, rl_vi_tilde_expand },		/* & */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ' */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ( */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ) */
+  { ISFUNC, rl_vi_complete },			/* * */
+  { ISFUNC, rl_get_next_history},		/* + */
+  { ISFUNC, rl_vi_char_search },		/* , */
+  { ISFUNC, rl_get_previous_history },		/* - */
+  { ISFUNC, rl_vi_redo },			/* . */
+  { ISFUNC, rl_vi_search },			/* / */
 
   /* Regular digits. */
-  { ISFUNC, rl_beg_of_line },		/* 0 */
-  { ISFUNC, rl_vi_arg_digit },		/* 1 */
-  { ISFUNC, rl_vi_arg_digit },		/* 2 */
-  { ISFUNC, rl_vi_arg_digit },		/* 3 */
-  { ISFUNC, rl_vi_arg_digit },		/* 4 */
-  { ISFUNC, rl_vi_arg_digit },		/* 5 */
-  { ISFUNC, rl_vi_arg_digit },		/* 6 */
-  { ISFUNC, rl_vi_arg_digit },		/* 7 */
-  { ISFUNC, rl_vi_arg_digit },		/* 8 */
-  { ISFUNC, rl_vi_arg_digit },		/* 9 */
+  { ISFUNC, rl_beg_of_line },			/* 0 */
+  { ISFUNC, rl_vi_arg_digit },			/* 1 */
+  { ISFUNC, rl_vi_arg_digit },			/* 2 */
+  { ISFUNC, rl_vi_arg_digit },			/* 3 */
+  { ISFUNC, rl_vi_arg_digit },			/* 4 */
+  { ISFUNC, rl_vi_arg_digit },			/* 5 */
+  { ISFUNC, rl_vi_arg_digit },			/* 6 */
+  { ISFUNC, rl_vi_arg_digit },			/* 7 */
+  { ISFUNC, rl_vi_arg_digit },			/* 8 */
+  { ISFUNC, rl_vi_arg_digit },			/* 9 */
 
   /* A little more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* : */
-  { ISFUNC, rl_vi_char_search },	/* ; */
-  { ISFUNC, (Function *)0x0 },		/* < */
-  { ISFUNC, rl_vi_complete },		/* = */
-  { ISFUNC, (Function *)0x0 },		/* > */
-  { ISFUNC, rl_vi_search },		/* ? */
-  { ISFUNC, (Function *)0x0 },		/* @ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* : */
+  { ISFUNC, rl_vi_char_search },		/* ; */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* < */
+  { ISFUNC, rl_vi_complete },			/* = */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* > */
+  { ISFUNC, rl_vi_search },			/* ? */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* @ */
 
   /* Uppercase alphabet. */
-  { ISFUNC, rl_vi_append_eol },		/* A */
-  { ISFUNC, rl_vi_prev_word},		/* B */
-  { ISFUNC, rl_vi_change_to },		/* C */
-  { ISFUNC, rl_vi_delete_to },		/* D */
-  { ISFUNC, rl_vi_end_word },		/* E */
-  { ISFUNC, rl_vi_char_search },	/* F */
-  { ISFUNC, rl_vi_fetch_history },	/* G */
-  { ISFUNC, (Function *)0x0 },		/* H */
-  { ISFUNC, rl_vi_insert_beg },		/* I */
-  { ISFUNC, (Function *)0x0 },		/* J */
-  { ISFUNC, (Function *)0x0 },		/* K */
-  { ISFUNC, (Function *)0x0 },		/* L */
-  { ISFUNC, (Function *)0x0 },		/* M */
-  { ISFUNC, rl_vi_search_again },	/* N */
-  { ISFUNC, (Function *)0x0 },		/* O */
-  { ISFUNC, rl_vi_put },		/* P */
-  { ISFUNC, (Function *)0x0 },		/* Q */
-  { ISFUNC, rl_vi_replace },		/* R */
-  { ISFUNC, rl_vi_subst },		/* S */
-  { ISFUNC, rl_vi_char_search },	/* T */
-  { ISFUNC, rl_revert_line },		/* U */
-  { ISFUNC, (Function *)0x0 },		/* V */
-  { ISFUNC, rl_vi_next_word },		/* W */
-  { ISFUNC, rl_rubout },		/* X */
-  { ISFUNC, rl_vi_yank_to },		/* Y */
-  { ISFUNC, (Function *)0x0 },		/* Z */
+  { ISFUNC, rl_vi_append_eol },			/* A */
+  { ISFUNC, rl_vi_prev_word},			/* B */
+  { ISFUNC, rl_vi_change_to },			/* C */
+  { ISFUNC, rl_vi_delete_to },			/* D */
+  { ISFUNC, rl_vi_end_word },			/* E */
+  { ISFUNC, rl_vi_char_search },		/* F */
+  { ISFUNC, rl_vi_fetch_history },		/* G */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* H */
+  { ISFUNC, rl_vi_insert_beg },			/* I */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* J */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* K */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* L */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* M */
+  { ISFUNC, rl_vi_search_again },		/* N */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* O */
+  { ISFUNC, rl_vi_put },			/* P */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Q */
+  { ISFUNC, rl_vi_replace },			/* R */
+  { ISFUNC, rl_vi_subst },			/* S */
+  { ISFUNC, rl_vi_char_search },		/* T */
+  { ISFUNC, rl_revert_line },			/* U */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* V */
+  { ISFUNC, rl_vi_next_word },			/* W */
+  { ISFUNC, rl_rubout },			/* X */
+  { ISFUNC, rl_vi_yank_to },			/* Y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Z */
 
   /* Some more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* [ */
-  { ISFUNC, rl_vi_complete },		/* \ */
-  { ISFUNC, (Function *)0x0 },		/* ] */
-  { ISFUNC, rl_vi_first_print },	/* ^ */
-  { ISFUNC, rl_vi_yank_arg },		/* _ */
-  { ISFUNC, rl_vi_goto_mark },		/* ` */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* [ */
+  { ISFUNC, rl_vi_complete },			/* \ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ] */
+  { ISFUNC, rl_vi_first_print },		/* ^ */
+  { ISFUNC, rl_vi_yank_arg },			/* _ */
+  { ISFUNC, rl_vi_goto_mark },			/* ` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, rl_vi_append_mode },	/* a */
-  { ISFUNC, rl_vi_prev_word },		/* b */
-  { ISFUNC, rl_vi_change_to },		/* c */
-  { ISFUNC, rl_vi_delete_to },		/* d */
-  { ISFUNC, rl_vi_end_word },		/* e */
-  { ISFUNC, rl_vi_char_search },	/* f */
-  { ISFUNC, (Function *)0x0 },		/* g */
-  { ISFUNC, rl_backward },		/* h */
-  { ISFUNC, rl_vi_insertion_mode },	/* i */
-  { ISFUNC, rl_get_next_history },	/* j */
-  { ISFUNC, rl_get_previous_history },	/* k */
-  { ISFUNC, rl_forward },		/* l */
-  { ISFUNC, rl_vi_set_mark },		/* m */
-  { ISFUNC, rl_vi_search_again },	/* n */
-  { ISFUNC, (Function *)0x0 },		/* o */
-  { ISFUNC, rl_vi_put },		/* p */
-  { ISFUNC, (Function *)0x0 },		/* q */
-  { ISFUNC, rl_vi_change_char },	/* r */
-  { ISFUNC, rl_vi_subst },		/* s */
-  { ISFUNC, rl_vi_char_search },	/* t */
-  { ISFUNC, rl_vi_undo },		/* u */
-  { ISFUNC, (Function *)0x0 },		/* v */
-  { ISFUNC, rl_vi_next_word },		/* w */
-  { ISFUNC, rl_vi_delete },		/* x */
-  { ISFUNC, rl_vi_yank_to },		/* y */
-  { ISFUNC, (Function *)0x0 },		/* z */
+  { ISFUNC, rl_vi_append_mode },		/* a */
+  { ISFUNC, rl_vi_prev_word },			/* b */
+  { ISFUNC, rl_vi_change_to },			/* c */
+  { ISFUNC, rl_vi_delete_to },			/* d */
+  { ISFUNC, rl_vi_end_word },			/* e */
+  { ISFUNC, rl_vi_char_search },		/* f */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* g */
+  { ISFUNC, rl_backward_char },			/* h */
+  { ISFUNC, rl_vi_insertion_mode },		/* i */
+  { ISFUNC, rl_get_next_history },		/* j */
+  { ISFUNC, rl_get_previous_history },		/* k */
+  { ISFUNC, rl_forward_char },			/* l */
+  { ISFUNC, rl_vi_set_mark },			/* m */
+  { ISFUNC, rl_vi_search_again },		/* n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* o */
+  { ISFUNC, rl_vi_put },			/* p */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* q */
+  { ISFUNC, rl_vi_change_char },		/* r */
+  { ISFUNC, rl_vi_subst },			/* s */
+  { ISFUNC, rl_vi_char_search },		/* t */
+  { ISFUNC, rl_vi_undo },			/* u */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* v */
+  { ISFUNC, rl_vi_next_word },			/* w */
+  { ISFUNC, rl_vi_delete },			/* x */
+  { ISFUNC, rl_vi_yank_to },			/* y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* z */
 
   /* Final punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* { */
-  { ISFUNC, rl_vi_column },		/* | */
-  { ISFUNC, (Function *)0x0 },		/* } */
-  { ISFUNC, rl_vi_change_case },	/* ~ */
-  { ISFUNC, (Function *)0x0 },		/* RUBOUT */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* { */
+  { ISFUNC, rl_vi_column },			/* | */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* } */
+  { ISFUNC, rl_vi_change_case },		/* ~ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* RUBOUT */
 
 #if KEYMAP_SIZE > 128
   /* Undefined keys. */
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 }
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 }
 #endif /* KEYMAP_SIZE > 128 */
 };
 
 
 KEYMAP_ENTRY_ARRAY vi_insertion_keymap = {
   /* The regular control keys come first. */
-  { ISFUNC, (Function *)0x0 },		/* Control-@ */
-  { ISFUNC, rl_insert },		/* Control-a */
-  { ISFUNC, rl_insert },		/* Control-b */
-  { ISFUNC, rl_insert },		/* Control-c */
-  { ISFUNC, rl_vi_eof_maybe },		/* Control-d */
-  { ISFUNC, rl_insert },		/* Control-e */
-  { ISFUNC, rl_insert },		/* Control-f */
-  { ISFUNC, rl_insert },		/* Control-g */
-  { ISFUNC, rl_rubout },		/* Control-h */
-  { ISFUNC, rl_complete },		/* Control-i */
-  { ISFUNC, rl_newline },		/* Control-j */
-  { ISFUNC, rl_insert },		/* Control-k */
-  { ISFUNC, rl_insert },		/* Control-l */
-  { ISFUNC, rl_newline },		/* Control-m */
-  { ISFUNC, rl_insert },		/* Control-n */
-  { ISFUNC, rl_insert },		/* Control-o */
-  { ISFUNC, rl_insert },		/* Control-p */
-  { ISFUNC, rl_insert },		/* Control-q */
-  { ISFUNC, rl_reverse_search_history }, /* Control-r */
-  { ISFUNC, rl_forward_search_history }, /* Control-s */
-  { ISFUNC, rl_transpose_chars },	/* Control-t */
-  { ISFUNC, rl_unix_line_discard },	/* Control-u */
-  { ISFUNC, rl_quoted_insert },		/* Control-v */
-  { ISFUNC, rl_unix_word_rubout },	/* Control-w */
-  { ISFUNC, rl_insert },		/* Control-x */
-  { ISFUNC, rl_yank },			/* Control-y */
-  { ISFUNC, rl_insert },		/* Control-z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-@ */
+  { ISFUNC, rl_insert },			/* Control-a */
+  { ISFUNC, rl_insert },			/* Control-b */
+  { ISFUNC, rl_insert },			/* Control-c */
+  { ISFUNC, rl_vi_eof_maybe },			/* Control-d */
+  { ISFUNC, rl_insert },			/* Control-e */
+  { ISFUNC, rl_insert },			/* Control-f */
+  { ISFUNC, rl_insert },			/* Control-g */
+  { ISFUNC, rl_rubout },			/* Control-h */
+  { ISFUNC, rl_complete },			/* Control-i */
+  { ISFUNC, rl_newline },			/* Control-j */
+  { ISFUNC, rl_insert },			/* Control-k */
+  { ISFUNC, rl_insert },			/* Control-l */
+  { ISFUNC, rl_newline },			/* Control-m */
+  { ISFUNC, rl_insert },			/* Control-n */
+  { ISFUNC, rl_insert },			/* Control-o */
+  { ISFUNC, rl_insert },			/* Control-p */
+  { ISFUNC, rl_insert },			/* Control-q */
+  { ISFUNC, rl_reverse_search_history },	/* Control-r */
+  { ISFUNC, rl_forward_search_history },	/* Control-s */
+  { ISFUNC, rl_transpose_chars },		/* Control-t */
+  { ISFUNC, rl_unix_line_discard },		/* Control-u */
+  { ISFUNC, rl_quoted_insert },			/* Control-v */
+  { ISFUNC, rl_unix_word_rubout },		/* Control-w */
+  { ISFUNC, rl_insert },			/* Control-x */
+  { ISFUNC, rl_yank },				/* Control-y */
+  { ISFUNC, rl_insert },			/* Control-z */
 
-  { ISFUNC, rl_vi_movement_mode },	/* Control-[ */
-  { ISFUNC, rl_insert },		/* Control-\ */
-  { ISFUNC, rl_insert },		/* Control-] */
-  { ISFUNC, rl_insert },		/* Control-^ */
-  { ISFUNC, rl_vi_undo },		/* Control-_ */
+  { ISFUNC, rl_vi_movement_mode },		/* Control-[ */
+  { ISFUNC, rl_insert },			/* Control-\ */
+  { ISFUNC, rl_insert },			/* Control-] */
+  { ISFUNC, rl_insert },			/* Control-^ */
+  { ISFUNC, rl_vi_undo },			/* Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, rl_insert },		/* SPACE */
-  { ISFUNC, rl_insert },		/* ! */
-  { ISFUNC, rl_insert },		/* " */
-  { ISFUNC, rl_insert },		/* # */
-  { ISFUNC, rl_insert },		/* $ */
-  { ISFUNC, rl_insert },		/* % */
-  { ISFUNC, rl_insert },		/* & */
-  { ISFUNC, rl_insert },		/* ' */
-  { ISFUNC, rl_insert },		/* ( */
-  { ISFUNC, rl_insert },		/* ) */
-  { ISFUNC, rl_insert },		/* * */
-  { ISFUNC, rl_insert },		/* + */
-  { ISFUNC, rl_insert },		/* , */
-  { ISFUNC, rl_insert },		/* - */
-  { ISFUNC, rl_insert },		/* . */
-  { ISFUNC, rl_insert },		/* / */
+  { ISFUNC, rl_insert },			/* SPACE */
+  { ISFUNC, rl_insert },			/* ! */
+  { ISFUNC, rl_insert },			/* " */
+  { ISFUNC, rl_insert },			/* # */
+  { ISFUNC, rl_insert },			/* $ */
+  { ISFUNC, rl_insert },			/* % */
+  { ISFUNC, rl_insert },			/* & */
+  { ISFUNC, rl_insert },			/* ' */
+  { ISFUNC, rl_insert },			/* ( */
+  { ISFUNC, rl_insert },			/* ) */
+  { ISFUNC, rl_insert },			/* * */
+  { ISFUNC, rl_insert },			/* + */
+  { ISFUNC, rl_insert },			/* , */
+  { ISFUNC, rl_insert },			/* - */
+  { ISFUNC, rl_insert },			/* . */
+  { ISFUNC, rl_insert },			/* / */
 
   /* Regular digits. */
-  { ISFUNC, rl_insert },		/* 0 */
-  { ISFUNC, rl_insert },		/* 1 */
-  { ISFUNC, rl_insert },		/* 2 */
-  { ISFUNC, rl_insert },		/* 3 */
-  { ISFUNC, rl_insert },		/* 4 */
-  { ISFUNC, rl_insert },		/* 5 */
-  { ISFUNC, rl_insert },		/* 6 */
-  { ISFUNC, rl_insert },		/* 7 */
-  { ISFUNC, rl_insert },		/* 8 */
-  { ISFUNC, rl_insert },		/* 9 */
+  { ISFUNC, rl_insert },			/* 0 */
+  { ISFUNC, rl_insert },			/* 1 */
+  { ISFUNC, rl_insert },			/* 2 */
+  { ISFUNC, rl_insert },			/* 3 */
+  { ISFUNC, rl_insert },			/* 4 */
+  { ISFUNC, rl_insert },			/* 5 */
+  { ISFUNC, rl_insert },			/* 6 */
+  { ISFUNC, rl_insert },			/* 7 */
+  { ISFUNC, rl_insert },			/* 8 */
+  { ISFUNC, rl_insert },			/* 9 */
 
   /* A little more punctuation. */
-  { ISFUNC, rl_insert },		/* : */
-  { ISFUNC, rl_insert },		/* ; */
-  { ISFUNC, rl_insert },		/* < */
-  { ISFUNC, rl_insert },		/* = */
-  { ISFUNC, rl_insert },		/* > */
-  { ISFUNC, rl_insert },		/* ? */
-  { ISFUNC, rl_insert },		/* @ */
+  { ISFUNC, rl_insert },			/* : */
+  { ISFUNC, rl_insert },			/* ; */
+  { ISFUNC, rl_insert },			/* < */
+  { ISFUNC, rl_insert },			/* = */
+  { ISFUNC, rl_insert },			/* > */
+  { ISFUNC, rl_insert },			/* ? */
+  { ISFUNC, rl_insert },			/* @ */
 
   /* Uppercase alphabet. */
-  { ISFUNC, rl_insert },		/* A */
-  { ISFUNC, rl_insert },		/* B */
-  { ISFUNC, rl_insert },		/* C */
-  { ISFUNC, rl_insert },		/* D */
-  { ISFUNC, rl_insert },		/* E */
-  { ISFUNC, rl_insert },		/* F */
-  { ISFUNC, rl_insert },		/* G */
-  { ISFUNC, rl_insert },		/* H */
-  { ISFUNC, rl_insert },		/* I */
-  { ISFUNC, rl_insert },		/* J */
-  { ISFUNC, rl_insert },		/* K */
-  { ISFUNC, rl_insert },		/* L */
-  { ISFUNC, rl_insert },		/* M */
-  { ISFUNC, rl_insert },		/* N */
-  { ISFUNC, rl_insert },		/* O */
-  { ISFUNC, rl_insert },		/* P */
-  { ISFUNC, rl_insert },		/* Q */
-  { ISFUNC, rl_insert },		/* R */
-  { ISFUNC, rl_insert },		/* S */
-  { ISFUNC, rl_insert },		/* T */
-  { ISFUNC, rl_insert },		/* U */
-  { ISFUNC, rl_insert },		/* V */
-  { ISFUNC, rl_insert },		/* W */
-  { ISFUNC, rl_insert },		/* X */
-  { ISFUNC, rl_insert },		/* Y */
-  { ISFUNC, rl_insert },		/* Z */
+  { ISFUNC, rl_insert },			/* A */
+  { ISFUNC, rl_insert },			/* B */
+  { ISFUNC, rl_insert },			/* C */
+  { ISFUNC, rl_insert },			/* D */
+  { ISFUNC, rl_insert },			/* E */
+  { ISFUNC, rl_insert },			/* F */
+  { ISFUNC, rl_insert },			/* G */
+  { ISFUNC, rl_insert },			/* H */
+  { ISFUNC, rl_insert },			/* I */
+  { ISFUNC, rl_insert },			/* J */
+  { ISFUNC, rl_insert },			/* K */
+  { ISFUNC, rl_insert },			/* L */
+  { ISFUNC, rl_insert },			/* M */
+  { ISFUNC, rl_insert },			/* N */
+  { ISFUNC, rl_insert },			/* O */
+  { ISFUNC, rl_insert },			/* P */
+  { ISFUNC, rl_insert },			/* Q */
+  { ISFUNC, rl_insert },			/* R */
+  { ISFUNC, rl_insert },			/* S */
+  { ISFUNC, rl_insert },			/* T */
+  { ISFUNC, rl_insert },			/* U */
+  { ISFUNC, rl_insert },			/* V */
+  { ISFUNC, rl_insert },			/* W */
+  { ISFUNC, rl_insert },			/* X */
+  { ISFUNC, rl_insert },			/* Y */
+  { ISFUNC, rl_insert },			/* Z */
 
   /* Some more punctuation. */
-  { ISFUNC, rl_insert },		/* [ */
-  { ISFUNC, rl_insert },		/* \ */
-  { ISFUNC, rl_insert },		/* ] */
-  { ISFUNC, rl_insert },		/* ^ */
-  { ISFUNC, rl_insert },		/* _ */
-  { ISFUNC, rl_insert },		/* ` */
+  { ISFUNC, rl_insert },			/* [ */
+  { ISFUNC, rl_insert },			/* \ */
+  { ISFUNC, rl_insert },			/* ] */
+  { ISFUNC, rl_insert },			/* ^ */
+  { ISFUNC, rl_insert },			/* _ */
+  { ISFUNC, rl_insert },			/* ` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, rl_insert },		/* a */
-  { ISFUNC, rl_insert },		/* b */
-  { ISFUNC, rl_insert },		/* c */
-  { ISFUNC, rl_insert },		/* d */
-  { ISFUNC, rl_insert },		/* e */
-  { ISFUNC, rl_insert },		/* f */
-  { ISFUNC, rl_insert },		/* g */
-  { ISFUNC, rl_insert },		/* h */
-  { ISFUNC, rl_insert },		/* i */
-  { ISFUNC, rl_insert },		/* j */
-  { ISFUNC, rl_insert },		/* k */
-  { ISFUNC, rl_insert },		/* l */
-  { ISFUNC, rl_insert },		/* m */
-  { ISFUNC, rl_insert },		/* n */
-  { ISFUNC, rl_insert },		/* o */
-  { ISFUNC, rl_insert },		/* p */
-  { ISFUNC, rl_insert },		/* q */
-  { ISFUNC, rl_insert },		/* r */
-  { ISFUNC, rl_insert },		/* s */
-  { ISFUNC, rl_insert },		/* t */
-  { ISFUNC, rl_insert },		/* u */
-  { ISFUNC, rl_insert },		/* v */
-  { ISFUNC, rl_insert },		/* w */
-  { ISFUNC, rl_insert },		/* x */
-  { ISFUNC, rl_insert },		/* y */
-  { ISFUNC, rl_insert },		/* z */
+  { ISFUNC, rl_insert },			/* a */
+  { ISFUNC, rl_insert },			/* b */
+  { ISFUNC, rl_insert },			/* c */
+  { ISFUNC, rl_insert },			/* d */
+  { ISFUNC, rl_insert },			/* e */
+  { ISFUNC, rl_insert },			/* f */
+  { ISFUNC, rl_insert },			/* g */
+  { ISFUNC, rl_insert },			/* h */
+  { ISFUNC, rl_insert },			/* i */
+  { ISFUNC, rl_insert },			/* j */
+  { ISFUNC, rl_insert },			/* k */
+  { ISFUNC, rl_insert },			/* l */
+  { ISFUNC, rl_insert },			/* m */
+  { ISFUNC, rl_insert },			/* n */
+  { ISFUNC, rl_insert },			/* o */
+  { ISFUNC, rl_insert },			/* p */
+  { ISFUNC, rl_insert },			/* q */
+  { ISFUNC, rl_insert },			/* r */
+  { ISFUNC, rl_insert },			/* s */
+  { ISFUNC, rl_insert },			/* t */
+  { ISFUNC, rl_insert },			/* u */
+  { ISFUNC, rl_insert },			/* v */
+  { ISFUNC, rl_insert },			/* w */
+  { ISFUNC, rl_insert },			/* x */
+  { ISFUNC, rl_insert },			/* y */
+  { ISFUNC, rl_insert },			/* z */
 
   /* Final punctuation. */
-  { ISFUNC, rl_insert },		/* { */
-  { ISFUNC, rl_insert },		/* | */
-  { ISFUNC, rl_insert },		/* } */
-  { ISFUNC, rl_insert },		/* ~ */
-  { ISFUNC, rl_rubout },		/* RUBOUT */
+  { ISFUNC, rl_insert },			/* { */
+  { ISFUNC, rl_insert },			/* | */
+  { ISFUNC, rl_insert },			/* } */
+  { ISFUNC, rl_insert },			/* ~ */
+  { ISFUNC, rl_rubout },			/* RUBOUT */
 
 #if KEYMAP_SIZE > 128
   /* Pure 8-bit characters (128 - 159).
@@ -598,280 +598,280 @@
 #if 0
 KEYMAP_ENTRY_ARRAY vi_escape_keymap = {
   /* The regular control keys come first. */
-  { ISFUNC, (Function *)0x0 },		/* Control-@ */
-  { ISFUNC, (Function *)0x0 },		/* Control-a */
-  { ISFUNC, (Function *)0x0 },		/* Control-b */
-  { ISFUNC, (Function *)0x0 },		/* Control-c */
-  { ISFUNC, (Function *)0x0 },		/* Control-d */
-  { ISFUNC, (Function *)0x0 },		/* Control-e */
-  { ISFUNC, (Function *)0x0 },		/* Control-f */
-  { ISFUNC, (Function *)0x0 },		/* Control-g */
-  { ISFUNC, (Function *)0x0 },		/* Control-h */
-  { ISFUNC, rl_tab_insert},		/* Control-i */
-  { ISFUNC, rl_emacs_editing_mode},	/* Control-j */
-  { ISFUNC, rl_kill_line },		/* Control-k */
-  { ISFUNC, (Function *)0x0 },		/* Control-l */
-  { ISFUNC, rl_emacs_editing_mode},	/* Control-m */
-  { ISFUNC, (Function *)0x0 },		/* Control-n */
-  { ISFUNC, (Function *)0x0 },		/* Control-o */
-  { ISFUNC, (Function *)0x0 },		/* Control-p */
-  { ISFUNC, (Function *)0x0 },		/* Control-q */
-  { ISFUNC, (Function *)0x0 },		/* Control-r */
-  { ISFUNC, (Function *)0x0 },		/* Control-s */
-  { ISFUNC, (Function *)0x0 },		/* Control-t */
-  { ISFUNC, (Function *)0x0 },		/* Control-u */
-  { ISFUNC, (Function *)0x0 },		/* Control-v */
-  { ISFUNC, (Function *)0x0 },		/* Control-w */
-  { ISFUNC, (Function *)0x0 },		/* Control-x */
-  { ISFUNC, (Function *)0x0 },		/* Control-y */
-  { ISFUNC, (Function *)0x0 },		/* Control-z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-@ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-a */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-c */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-d */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-e */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-f */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-g */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-h */
+  { ISFUNC, rl_tab_insert},			/* Control-i */
+  { ISFUNC, rl_emacs_editing_mode},		/* Control-j */
+  { ISFUNC, rl_kill_line },			/* Control-k */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-l */
+  { ISFUNC, rl_emacs_editing_mode},		/* Control-m */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-n */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-o */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-p */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-q */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-r */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-s */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-t */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-u */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-v */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-w */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-x */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-z */
 
-  { ISFUNC, rl_vi_movement_mode },	/* Control-[ */
-  { ISFUNC, (Function *)0x0 },		/* Control-\ */
-  { ISFUNC, (Function *)0x0 },		/* Control-] */
-  { ISFUNC, (Function *)0x0 },		/* Control-^ */
-  { ISFUNC, rl_vi_undo },		/* Control-_ */
+  { ISFUNC, rl_vi_movement_mode },		/* Control-[ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-\ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* Control-^ */
+  { ISFUNC, rl_vi_undo },			/* Control-_ */
 
   /* The start of printing characters. */
-  { ISFUNC, (Function *)0x0 },		/* SPACE */
-  { ISFUNC, (Function *)0x0 },		/* ! */
-  { ISFUNC, (Function *)0x0 },		/* " */
-  { ISFUNC, (Function *)0x0 },		/* # */
-  { ISFUNC, (Function *)0x0 },		/* $ */
-  { ISFUNC, (Function *)0x0 },		/* % */
-  { ISFUNC, (Function *)0x0 },		/* & */
-  { ISFUNC, (Function *)0x0 },		/* ' */
-  { ISFUNC, (Function *)0x0 },		/* ( */
-  { ISFUNC, (Function *)0x0 },		/* ) */
-  { ISFUNC, (Function *)0x0 },		/* * */
-  { ISFUNC, (Function *)0x0 },		/* + */
-  { ISFUNC, (Function *)0x0 },		/* , */
-  { ISFUNC, (Function *)0x0 },		/* - */
-  { ISFUNC, (Function *)0x0 },		/* . */
-  { ISFUNC, (Function *)0x0 },		/* / */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* SPACE */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ! */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* " */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* # */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* $ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* % */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* & */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ' */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ( */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ) */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* * */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* + */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* , */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* - */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* . */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* / */
 
   /* Regular digits. */
-  { ISFUNC, rl_vi_arg_digit },		/* 0 */
-  { ISFUNC, rl_vi_arg_digit },		/* 1 */
-  { ISFUNC, rl_vi_arg_digit },		/* 2 */
-  { ISFUNC, rl_vi_arg_digit },		/* 3 */
-  { ISFUNC, rl_vi_arg_digit },		/* 4 */
-  { ISFUNC, rl_vi_arg_digit },		/* 5 */
-  { ISFUNC, rl_vi_arg_digit },		/* 6 */
-  { ISFUNC, rl_vi_arg_digit },		/* 7 */
-  { ISFUNC, rl_vi_arg_digit },		/* 8 */
-  { ISFUNC, rl_vi_arg_digit },		/* 9 */
+  { ISFUNC, rl_vi_arg_digit },			/* 0 */
+  { ISFUNC, rl_vi_arg_digit },			/* 1 */
+  { ISFUNC, rl_vi_arg_digit },			/* 2 */
+  { ISFUNC, rl_vi_arg_digit },			/* 3 */
+  { ISFUNC, rl_vi_arg_digit },			/* 4 */
+  { ISFUNC, rl_vi_arg_digit },			/* 5 */
+  { ISFUNC, rl_vi_arg_digit },			/* 6 */
+  { ISFUNC, rl_vi_arg_digit },			/* 7 */
+  { ISFUNC, rl_vi_arg_digit },			/* 8 */
+  { ISFUNC, rl_vi_arg_digit },			/* 9 */
 
   /* A little more punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* : */
-  { ISFUNC, (Function *)0x0 },		/* ; */
-  { ISFUNC, (Function *)0x0 },		/* < */
-  { ISFUNC, (Function *)0x0 },		/* = */
-  { ISFUNC, (Function *)0x0 },		/* > */
-  { ISFUNC, (Function *)0x0 },		/* ? */
-  { ISFUNC, (Function *)0x0 },		/* @ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* : */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ; */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* < */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* = */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* > */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ? */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* @ */
 
   /* Uppercase alphabet. */
-  { ISFUNC, rl_do_lowercase_version },	/* A */
-  { ISFUNC, rl_do_lowercase_version },	/* B */
-  { ISFUNC, rl_do_lowercase_version },	/* C */
-  { ISFUNC, rl_do_lowercase_version },	/* D */
-  { ISFUNC, rl_do_lowercase_version },	/* E */
-  { ISFUNC, rl_do_lowercase_version },	/* F */
-  { ISFUNC, rl_do_lowercase_version },	/* G */
-  { ISFUNC, rl_do_lowercase_version },	/* H */
-  { ISFUNC, rl_do_lowercase_version },	/* I */
-  { ISFUNC, rl_do_lowercase_version },	/* J */
-  { ISFUNC, rl_do_lowercase_version },	/* K */
-  { ISFUNC, rl_do_lowercase_version },	/* L */
-  { ISFUNC, rl_do_lowercase_version },	/* M */
-  { ISFUNC, rl_do_lowercase_version },	/* N */
-  { ISFUNC, rl_do_lowercase_version },	/* O */
-  { ISFUNC, rl_do_lowercase_version },	/* P */
-  { ISFUNC, rl_do_lowercase_version },	/* Q */
-  { ISFUNC, rl_do_lowercase_version },	/* R */
-  { ISFUNC, rl_do_lowercase_version },	/* S */
-  { ISFUNC, rl_do_lowercase_version },	/* T */
-  { ISFUNC, rl_do_lowercase_version },	/* U */
-  { ISFUNC, rl_do_lowercase_version },	/* V */
-  { ISFUNC, rl_do_lowercase_version },	/* W */
-  { ISFUNC, rl_do_lowercase_version },	/* X */
-  { ISFUNC, rl_do_lowercase_version },	/* Y */
-  { ISFUNC, rl_do_lowercase_version },	/* Z */
+  { ISFUNC, rl_do_lowercase_version },		/* A */
+  { ISFUNC, rl_do_lowercase_version },		/* B */
+  { ISFUNC, rl_do_lowercase_version },		/* C */
+  { ISFUNC, rl_do_lowercase_version },		/* D */
+  { ISFUNC, rl_do_lowercase_version },		/* E */
+  { ISFUNC, rl_do_lowercase_version },		/* F */
+  { ISFUNC, rl_do_lowercase_version },		/* G */
+  { ISFUNC, rl_do_lowercase_version },		/* H */
+  { ISFUNC, rl_do_lowercase_version },		/* I */
+  { ISFUNC, rl_do_lowercase_version },		/* J */
+  { ISFUNC, rl_do_lowercase_version },		/* K */
+  { ISFUNC, rl_do_lowercase_version },		/* L */
+  { ISFUNC, rl_do_lowercase_version },		/* M */
+  { ISFUNC, rl_do_lowercase_version },		/* N */
+  { ISFUNC, rl_do_lowercase_version },		/* O */
+  { ISFUNC, rl_do_lowercase_version },		/* P */
+  { ISFUNC, rl_do_lowercase_version },		/* Q */
+  { ISFUNC, rl_do_lowercase_version },		/* R */
+  { ISFUNC, rl_do_lowercase_version },		/* S */
+  { ISFUNC, rl_do_lowercase_version },		/* T */
+  { ISFUNC, rl_do_lowercase_version },		/* U */
+  { ISFUNC, rl_do_lowercase_version },		/* V */
+  { ISFUNC, rl_do_lowercase_version },		/* W */
+  { ISFUNC, rl_do_lowercase_version },		/* X */
+  { ISFUNC, rl_do_lowercase_version },		/* Y */
+  { ISFUNC, rl_do_lowercase_version },		/* Z */
 
   /* Some more punctuation. */
-  { ISFUNC, rl_arrow_keys },		/* [ */
-  { ISFUNC, (Function *)0x0 },		/* \ */
-  { ISFUNC, (Function *)0x0 },		/* ] */
-  { ISFUNC, (Function *)0x0 },		/* ^ */
-  { ISFUNC, (Function *)0x0 },		/* _ */
-  { ISFUNC, (Function *)0x0 },		/* ` */
+  { ISFUNC, rl_arrow_keys },			/* [ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* \ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ] */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ^ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* _ */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ` */
 
   /* Lowercase alphabet. */
-  { ISFUNC, (Function *)0x0 },		/* a */
-  { ISFUNC, (Function *)0x0 },		/* b */
-  { ISFUNC, (Function *)0x0 },		/* c */
-  { ISFUNC, (Function *)0x0 },		/* d */
-  { ISFUNC, (Function *)0x0 },		/* e */
-  { ISFUNC, (Function *)0x0 },		/* f */
-  { ISFUNC, (Function *)0x0 },		/* g */
-  { ISFUNC, (Function *)0x0 },		/* h */
-  { ISFUNC, (Function *)0x0 },		/* i */
-  { ISFUNC, (Function *)0x0 },		/* j */
-  { ISFUNC, (Function *)0x0 },		/* k */
-  { ISFUNC, (Function *)0x0 },		/* l */
-  { ISFUNC, (Function *)0x0 },		/* m */
-  { ISFUNC, (Function *)0x0 },		/* n */
-  { ISFUNC, rl_arrow_keys },		/* o */
-  { ISFUNC, (Function *)0x0 },		/* p */
-  { ISFUNC, (Function *)0x0 },		/* q */
-  { ISFUNC, (Function *)0x0 },		/* r */
-  { ISFUNC, (Function *)0x0 },		/* s */
-  { ISFUNC, (Function *)0x0 },		/* t */
-  { ISFUNC, (Function *)0x0 },		/* u */
-  { ISFUNC, (Function *)0x0 },		/* v */
-  { ISFUNC, (Function *)0x0 },		/* w */
-  { ISFUNC, (Function *)0x0 },		/* x */
-  { ISFUNC, (Function *)0x0 },		/* y */
-  { ISFUNC, (Function *)0x0 },		/* z */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* a */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* b */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* c */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* d */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* e */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* f */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* g */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* h */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* i */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* j */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* k */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* l */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* m */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* n */
+  { ISFUNC, rl_arrow_keys },			/* o */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* p */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* q */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* r */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* s */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* t */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* u */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* v */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* w */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* x */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* y */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* z */
 
   /* Final punctuation. */
-  { ISFUNC, (Function *)0x0 },		/* { */
-  { ISFUNC, (Function *)0x0 },		/* | */
-  { ISFUNC, (Function *)0x0 },		/* } */
-  { ISFUNC, (Function *)0x0 },		/* ~ */
-  { ISFUNC, rl_backward_kill_word },	/* RUBOUT */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* { */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* | */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* } */
+  { ISFUNC, (rl_command_func_t *)0x0 },		/* ~ */
+  { ISFUNC, rl_backward_kill_word },		/* RUBOUT */
 
 #if KEYMAP_SIZE > 128
   /* Undefined keys. */
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 },
-  { ISFUNC, (Function *)0x0 }
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 },
+  { ISFUNC, (rl_command_func_t *)0x0 }
 #endif /* KEYMAP_SIZE > 128 */
 };
 #endif
diff --git a/readline/vi_mode.c b/readline/vi_mode.c
index be7f949..5d146b3f 100644
--- a/readline/vi_mode.c
+++ b/readline/vi_mode.c
@@ -51,37 +51,23 @@
 
 /* Some standard library routines. */
 #include "rldefs.h"
+#include "rlmbutil.h"
+
 #include "readline.h"
 #include "history.h"
 
 #include "rlprivate.h"
 #include "xmalloc.h"
 
-#ifndef _rl_digit_p
-#define _rl_digit_p(c)  ((c) >= '0' && (c) <= '9')
-#endif
-
-#ifndef _rl_digit_value
-#define _rl_digit_value(c) ((c) - '0')
-#endif
-
 #ifndef member
 #define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0)
 #endif
 
-#ifndef isident
-#define isident(c) ((_rl_pure_alphabetic (c) || _rl_digit_p (c) || c == '_'))
-#endif
-
-#ifndef exchange
-#define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0)
-#endif
-
 /* Non-zero means enter insertion mode. */
 static int _rl_vi_doing_insert;
 
 /* Command keys which do movement for xxx_to commands. */
-static char *vi_motion = " hl^$0ftFt;,%wbeWBE|";
+static const char *vi_motion = " hl^$0ftFT;,%wbeWBE|";
 
 /* Keymap used for vi replace characters.  Created dynamically since
    rarely used. */
@@ -101,7 +87,11 @@
 static int _rl_vi_last_repeat = 1;
 static int _rl_vi_last_arg_sign = 1;
 static int _rl_vi_last_motion;
+#if defined (HANDLE_MULTIBYTE)
+static char _rl_vi_last_search_mbchar[MB_LEN_MAX];
+#else
 static int _rl_vi_last_search_char;
+#endif
 static int _rl_vi_last_replacement;
 
 static int _rl_vi_last_key_before_insert;
@@ -109,12 +99,14 @@
 static int vi_redoing;
 
 /* Text modification commands.  These are the `redoable' commands. */
-static char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
+static const char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
 
 /* Arrays for the saved marks. */
-static int vi_mark_chars[27];
+static int vi_mark_chars['z' - 'a' + 1];
 
-static int rl_digit_loop1 __P((void));
+static void _rl_vi_stuff_insert PARAMS((int));
+static void _rl_vi_save_insert PARAMS((UNDO_LIST *));
+static int rl_digit_loop1 PARAMS((void));
 
 void
 _rl_vi_initialize_line ()
@@ -168,12 +160,15 @@
 rl_vi_redo (count, c)
      int count, c;
 {
+  int r;
+
   if (!rl_explicit_arg)
     {
       rl_numeric_arg = _rl_vi_last_repeat;
       rl_arg_sign = _rl_vi_last_arg_sign;
     }
 
+  r = 0;
   vi_redoing = 1;
   /* If we're redoing an insert with `i', stuff in the inserted text
      and do not go into insertion mode. */
@@ -185,10 +180,10 @@
 	rl_point--;
     }
   else
-    _rl_dispatch (_rl_vi_last_command, _rl_keymap);
+    r = _rl_dispatch (_rl_vi_last_command, _rl_keymap);
   vi_redoing = 0;
 
-  return (0);
+  return (r);
 }
 
 /* A placeholder for further expansion. */
@@ -274,7 +269,7 @@
       break;
 
     default:
-      ding ();
+      rl_ding ();
       break;
     }
   return (0);
@@ -330,7 +325,7 @@
 
   if (rl_point == 0)
     {
-      ding ();
+      rl_ding ();
       return (0);
     }
 
@@ -352,7 +347,7 @@
 
   if (rl_point >= (rl_end - 1))
     {
-      ding ();
+      rl_ding ();
       return (0);
     }
 
@@ -370,7 +365,7 @@
 {
   if (count < 0)
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
@@ -460,14 +455,14 @@
   while (count-- && rl_point < (rl_end - 1))
     {
       /* Move to white space (really non-identifer). */
-      if (isident (rl_line_buffer[rl_point]))
+      if (_rl_isident (rl_line_buffer[rl_point]))
 	{
-	  while (isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
+	  while (_rl_isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
 	    rl_point++;
 	}
       else /* if (!whitespace (rl_line_buffer[rl_point])) */
 	{
-	  while (!isident (rl_line_buffer[rl_point]) &&
+	  while (!_rl_isident (rl_line_buffer[rl_point]) &&
 		 !whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
 	    rl_point++;
 	}
@@ -497,9 +492,9 @@
 	 back so we don't get messed up by the rl_point++ down there in
 	 the while loop.  Without this code, words like `l;' screw up the
 	 function. */
-      last_is_ident = isident (rl_line_buffer[rl_point - 1]);
-      if ((isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
-	  (!isident (rl_line_buffer[rl_point]) && last_is_ident))
+      last_is_ident = _rl_isident (rl_line_buffer[rl_point - 1]);
+      if ((_rl_isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
+	  (!_rl_isident (rl_line_buffer[rl_point]) && last_is_ident))
 	rl_point--;
 
       while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
@@ -507,10 +502,10 @@
 
       if (rl_point > 0)
 	{
-	  if (isident (rl_line_buffer[rl_point]))
-	    while (--rl_point >= 0 && isident (rl_line_buffer[rl_point]));
+	  if (_rl_isident (rl_line_buffer[rl_point]))
+	    while (--rl_point >= 0 && _rl_isident (rl_line_buffer[rl_point]));
 	  else
-	    while (--rl_point >= 0 && !isident (rl_line_buffer[rl_point]) &&
+	    while (--rl_point >= 0 && !_rl_isident (rl_line_buffer[rl_point]) &&
 		   !whitespace (rl_line_buffer[rl_point]));
 	  rl_point++;
 	}
@@ -532,10 +527,10 @@
 
       if (rl_point < rl_end)
 	{
-	  if (isident (rl_line_buffer[rl_point]))
-	    while (++rl_point < rl_end && isident (rl_line_buffer[rl_point]));
+	  if (_rl_isident (rl_line_buffer[rl_point]))
+	    while (++rl_point < rl_end && _rl_isident (rl_line_buffer[rl_point]));
 	  else
-	    while (++rl_point < rl_end && !isident (rl_line_buffer[rl_point])
+	    while (++rl_point < rl_end && !_rl_isident (rl_line_buffer[rl_point])
 		   && !whitespace (rl_line_buffer[rl_point]));
 	}
       rl_point--;
@@ -557,7 +552,17 @@
      int count, key;
 {
   if (rl_point < rl_end)
-    rl_point++;
+    {
+      if (MB_CUR_MAX == 1 || rl_byte_oriented)
+	rl_point++;
+      else
+        {
+          int point = rl_point;
+          rl_forward_char (1, key);
+          if (point == rl_point)
+            rl_point = rl_end;
+        }
+    }
   rl_vi_insertion_mode (1, key);
   return (0);
 }
@@ -611,7 +616,7 @@
   if (len >= vi_insert_buffer_size)
     {
       vi_insert_buffer_size += (len + 32) - (len % 32);
-      vi_insert_buffer = xrealloc (vi_insert_buffer, vi_insert_buffer_size);
+      vi_insert_buffer = (char *)xrealloc (vi_insert_buffer, vi_insert_buffer_size);
     }
   strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1);
   vi_insert_buffer[len-1] = '\0';
@@ -622,6 +627,7 @@
 {
   if (_rl_vi_doing_insert)
     {
+      /* The `C', `s', and `S' commands set this. */
       rl_end_undo_group ();
       /* Now, the text between rl_undo_list->next->start and
 	 rl_undo_list->next->end is what was inserted while in insert
@@ -650,7 +656,7 @@
      int count, key;
 {
   if (rl_point > 0)
-    rl_backward (1, key);
+    rl_backward_char (1, key);
 
   _rl_keymap = vi_movement_keymap;
   _rl_vi_done_inserting ();
@@ -667,6 +673,51 @@
     return (rl_digit_argument (count, c));
 }
 
+/* Change the case of the next COUNT characters. */
+#if defined (HANDLE_MULTIBYTE)
+static int
+_rl_vi_change_mbchar_case (count)
+     int count;
+{
+  wchar_t wc;
+  char mb[MB_LEN_MAX];
+  mbstate_t ps;
+
+  memset (&ps, 0, sizeof (mbstate_t));
+  if (_rl_adjust_point (rl_line_buffer, rl_point, &ps) > 0)
+    count--;
+  while (count-- && rl_point < rl_end)
+    {
+      mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps);
+      if (iswupper (wc))
+	wc = towlower (wc);
+      else if (iswlower (wc))
+	wc = towupper (wc);
+      else
+	{
+	  /* Just skip over chars neither upper nor lower case */
+	  rl_forward_char (1, 0);
+	  continue;
+	}
+
+      /* Vi is kind of strange here. */
+      if (wc)
+	{
+	  wctomb (mb, wc);
+	  rl_begin_undo_group ();
+	  rl_delete (1, 0);
+	  rl_insert_text (mb);
+	  rl_end_undo_group ();
+	  rl_vi_check ();
+	}
+      else
+        rl_forward_char (1, 0);
+    }
+
+  return 0;
+}
+#endif
+
 int
 rl_vi_change_case (count, ignore)
      int count, ignore;
@@ -677,6 +728,11 @@
   if (rl_point >= rl_end)
     return (0);
 
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    return (_rl_vi_change_mbchar_case (count));
+#endif
+
   while (count-- && rl_point < rl_end)
     {
       if (_rl_uppercase_p (rl_line_buffer[rl_point]))
@@ -686,7 +742,7 @@
       else
 	{
 	  /* Just skip over characters neither upper nor lower case. */
-	  rl_forward (1, c);
+	  rl_forward_char (1, c);
 	  continue;
 	}
 
@@ -695,12 +751,12 @@
 	{
 	  rl_begin_undo_group ();
 	  rl_delete (1, c);
-	  rl_insert (1, c);
+	  _rl_insert_char (1, c);
 	  rl_end_undo_group ();
 	  rl_vi_check ();
         }
       else
-	rl_forward (1, c);
+	rl_forward_char (1, c);
     }
   return (0);
 }
@@ -710,10 +766,10 @@
      int count, key;
 {
   if (!_rl_uppercase_p (key) && (rl_point + 1 <= rl_end))
-    rl_point++;
+    rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
 
   rl_yank (1, key);
-  rl_backward (1, key);
+  rl_backward_char (1, key);
   return (0);
 }
 
@@ -721,7 +777,12 @@
 rl_vi_check ()
 {
   if (rl_point && rl_point == rl_end)
-    rl_point--;
+    {
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+      else
+        rl_point--;
+    }
   return (0);
 }
 
@@ -744,7 +805,9 @@
   int old_end;
 
   rl_mark = rl_point;
+  RL_SETSTATE(RL_STATE_MOREINPUT);
   c = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
   *nextkey = c;
 
   if (!member (c, vi_motion))
@@ -755,7 +818,9 @@
 	  rl_numeric_arg = _rl_digit_value (c);
 	  rl_digit_loop1 ();
 	  rl_numeric_arg *= save;
+	  RL_SETSTATE(RL_STATE_MOREINPUT);
 	  c = rl_read_key ();	/* real command */
+	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
 	  *nextkey = c;
 	}
       else if (key == c && (key == 'd' || key == 'y' || key == 'c'))
@@ -819,24 +884,36 @@
     }
 
   if (rl_mark < rl_point)
-    exchange (rl_point, rl_mark);
+    SWAP (rl_point, rl_mark);
 
   return (0);
 }
 
 /* A simplified loop for vi. Don't dispatch key at end.
-   Don't recognize minus sign? */
+   Don't recognize minus sign?
+   Should this do rl_save_prompt/rl_restore_prompt? */
 static int
 rl_digit_loop1 ()
 {
   int key, c;
 
+  RL_SETSTATE(RL_STATE_NUMERICARG);
   while (1)
     {
-      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg, 0);
+      if (rl_numeric_arg > 1000000)
+	{
+	  rl_explicit_arg = rl_numeric_arg = 0;
+	  rl_ding ();
+	  rl_clear_message ();
+	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
+	  return 1;
+	}
+      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+      RL_SETSTATE(RL_STATE_MOREINPUT);
       key = c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
-      if (_rl_keymap[c].type == ISFUNC &&
+      if (c >= 0 && _rl_keymap[c].type == ISFUNC &&
 	  _rl_keymap[c].function == rl_universal_argument)
 	{
 	  rl_numeric_arg *= 4;
@@ -859,6 +936,8 @@
 	  break;
 	}
     }
+
+  RL_UNSETSTATE(RL_STATE_NUMERICARG);
   return (0);
 }
 
@@ -875,7 +954,7 @@
 
   if (rl_vi_domove (key, &c))
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
@@ -903,7 +982,7 @@
 
   if (rl_vi_domove (key, &c))
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
@@ -953,7 +1032,7 @@
 
   if (rl_vi_domove (key, &c))
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
@@ -979,11 +1058,14 @@
 
   if (rl_end == 0)
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
-  end = rl_point + count;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    end = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);
+  else
+    end = rl_point + count;
 
   if (end >= rl_end)
     end = rl_end;
@@ -991,7 +1073,7 @@
   rl_kill_text (rl_point, end);
   
   if (rl_point > 0 && rl_point == rl_end)
-    rl_backward (1, key);
+    rl_backward_char (1, key);
   return (0);
 }
 
@@ -1016,7 +1098,12 @@
 rl_vi_char_search (count, key)
      int count, key;
 {
+#if defined (HANDLE_MULTIBYTE)
+  static char *target;
+  static int mb_len;
+#else
   static char target;
+#endif
   static int orig_dir, dir;
 
   if (key == ';' || key == ',')
@@ -1024,9 +1111,22 @@
   else
     {
       if (vi_redoing)
+#if defined (HANDLE_MULTIBYTE)
+	target = _rl_vi_last_search_mbchar;
+#else
 	target = _rl_vi_last_search_char;
+#endif
       else
-	_rl_vi_last_search_char = target = (*rl_getc_function) (rl_instream);
+	{
+#if defined (HANDLE_MULTIBYTE)
+	  mb_len = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+	  target = _rl_vi_last_search_mbchar;
+#else
+	  RL_SETSTATE(RL_STATE_MOREINPUT);
+	  _rl_vi_last_search_char = target = rl_read_key ();
+	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+#endif
+	}
 
       switch (key)
         {
@@ -1048,7 +1148,11 @@
         }
     }
 
+#if defined (HANDLE_MULTIBYTE)
+   return (_rl_char_search_internal (count, dir, target, mb_len));
+#else
   return (_rl_char_search_internal (count, dir, target));
+#endif
 }
 
 /* Match brackets */
@@ -1056,19 +1160,30 @@
 rl_vi_match (ignore, key)
      int ignore, key;
 {
-  int count = 1, brack, pos;
+  int count = 1, brack, pos, tmp, pre;
 
   pos = rl_point;
   if ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0)
     {
-      while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 &&
-	     rl_point < rl_end - 1)
-	rl_forward (1, key);
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	{
+	  while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0)
+	    {
+	      pre = rl_point;
+	      rl_forward_char (1, key);
+	      if (pre == rl_point)
+	        break;
+	    }
+	}
+      else
+	while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 &&
+		rl_point < rl_end - 1)
+	  rl_forward_char (1, key);
 
       if (brack <= 0)
 	{
 	  rl_point = pos;
-	  ding ();
+	  rl_ding ();
 	  return -1;
 	}
     }
@@ -1079,7 +1194,16 @@
     {
       while (count)
 	{
-	  if (--pos >= 0)
+	  tmp = pos;
+	  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+	    pos--;
+	  else
+	    {
+	      pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY);
+	      if (tmp == pos)
+	        pos--;
+	    }
+	  if (pos >= 0)
 	    {
 	      int b = rl_vi_bracktype (rl_line_buffer[pos]);
 	      if (b == -brack)
@@ -1089,7 +1213,7 @@
 	    }
 	  else
 	    {
-	      ding ();
+	      rl_ding ();
 	      return -1;
 	    }
 	}
@@ -1098,7 +1222,12 @@
     {			/* brack > 0 */
       while (count)
 	{
-	  if (++pos < rl_end)
+	  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+	    pos++;
+	  else
+	    pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY);
+
+	  if (pos < rl_end)
 	    {
 	      int b = rl_vi_bracktype (rl_line_buffer[pos]);
 	      if (b == -brack)
@@ -1108,7 +1237,7 @@
 	    }
 	  else
 	    {
-	      ding ();
+	      rl_ding ();
 	      return -1;
 	    }
 	}
@@ -1133,6 +1262,11 @@
     }
 }
 
+/* XXX - think about reading an entire mbchar with _rl_read_mbchar and
+   inserting it in one bunch instead of the loop below (like in
+   rl_vi_char_search or _rl_vi_change_mbchar_case.  Set c to mbchar[0]
+   for test against 033 or ^C.  Make sure that _rl_read_mbchar does
+   this right. */
 int
 rl_vi_change_char (count, key)
      int count, key;
@@ -1142,7 +1276,11 @@
   if (vi_redoing)
     c = _rl_vi_last_replacement;
   else
-    _rl_vi_last_replacement = c = (*rl_getc_function) (rl_instream);
+    {
+      RL_SETSTATE(RL_STATE_MOREINPUT);
+      _rl_vi_last_replacement = c = rl_read_key ();
+      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+    }
 
   if (c == '\033' || c == CTRL ('C'))
     return -1;
@@ -1152,9 +1290,19 @@
       rl_begin_undo_group ();
 
       rl_delete (1, c);
-      rl_insert (1, c);
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+	while (_rl_insert_char (1, c))
+	  {
+	    RL_SETSTATE (RL_STATE_MOREINPUT);
+	    c = rl_read_key ();
+	    RL_UNSETSTATE (RL_STATE_MOREINPUT);
+	  }
+      else
+#endif
+	_rl_insert_char (1, c);
       if (count == 0)
-	rl_backward (1, c);
+	rl_backward_char (1, c);
 
       rl_end_undo_group ();
     }
@@ -1165,66 +1313,29 @@
 rl_vi_subst (count, key)
      int count, key;
 {
-  rl_begin_undo_group ();
+  /* If we are redoing, rl_vi_change_to will stuff the last motion char */
+  if (vi_redoing == 0)
+    rl_stuff_char ((key == 'S') ? 'c' : ' ');	/* `S' == `cc', `s' == `c ' */
 
-  if (_rl_uppercase_p (key))
-    {
-      rl_beg_of_line (1, key);
-      rl_kill_line (1, key);
-    }
-  else
-    rl_delete_text (rl_point, rl_point+count);
-
-  rl_end_undo_group ();
-
-  _rl_vi_set_last (key, count, rl_arg_sign);
-
-  if (vi_redoing)
-    {
-      int o = _rl_doing_an_undo;
-
-      _rl_doing_an_undo = 1;
-      if (vi_insert_buffer && *vi_insert_buffer)
-	rl_insert_text (vi_insert_buffer);
-      _rl_doing_an_undo = o;
-    }
-  else
-    {
-      rl_begin_undo_group ();
-      _rl_vi_doing_insert = 1;
-      rl_vi_insertion_mode (1, key);
-    }
-
-  return (0);
+  return (rl_vi_change_to (count, 'c'));
 }
 
 int
 rl_vi_overstrike (count, key)
      int count, key;
 {
-  int i;
-
   if (_rl_vi_doing_insert == 0)
     {
       _rl_vi_doing_insert = 1;
       rl_begin_undo_group ();
     }
 
-  for (i = 0; i < count; i++)
+  if (count > 0)
     {
-      vi_replace_count++;
-      rl_begin_undo_group ();
-
-      if (rl_point < rl_end)
-	{
-	  rl_delete (1, key);
-	  rl_insert (1, key);
-	}
-      else
-	rl_insert (1, key);
-
-      rl_end_undo_group ();
+      _rl_overwrite_char (count, key);
+      vi_replace_count += count;
     }
+
   return (0);
 }
 
@@ -1238,7 +1349,7 @@
     {
       if (vi_replace_count == 0)
 	{
-	  ding ();
+	  rl_ding ();
 	  break;
 	}
       s = rl_point;
@@ -1247,7 +1358,7 @@
 	vi_replace_count--;
 
       if (rl_point == s)
-	rl_backward (1, key);
+	rl_backward_char (1, key);
     }
 
   if (vi_replace_count == 0 && _rl_vi_doing_insert)
@@ -1308,7 +1419,7 @@
     }
   else if (rl_line_buffer[rl_point - 1] == ';')
     {
-      ding ();
+      rl_ding ();
       return (0);
     }
 
@@ -1326,10 +1437,13 @@
 {
   int ch;
 
+  RL_SETSTATE(RL_STATE_MOREINPUT);
   ch = rl_read_key ();
-  if (_rl_lowercase_p (ch) == 0)
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+  if (ch < 'a' || ch > 'z')
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
   ch -= 'a';
@@ -1343,22 +1457,25 @@
 {
   int ch;
 
+  RL_SETSTATE(RL_STATE_MOREINPUT);
   ch = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
   if (ch == '`')
     {
       rl_point = rl_mark;
       return 0;
     }
-  else if (_rl_lowercase_p (ch) == 0)
+  else if (ch < 'a' || ch > 'z')
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
 
   ch -= 'a';
   if (vi_mark_chars[ch] == -1)
     {
-      ding ();
+      rl_ding ();
       return -1;
     }
   rl_point = vi_mark_chars[ch];
diff --git a/readline/xmalloc.c b/readline/xmalloc.c
index c0d0640..8985d34 100644
--- a/readline/xmalloc.c
+++ b/readline/xmalloc.c
@@ -51,26 +51,26 @@
 /* Return a pointer to free()able block of memory large enough
    to hold BYTES number of bytes.  If the memory cannot be allocated,
    print an error message and abort. */
-char *
+PTR_T
 xmalloc (bytes)
-     int bytes;
+     size_t bytes;
 {
-  char *temp;
+  PTR_T temp;
 
-  temp = (char *)malloc (bytes);
+  temp = malloc (bytes);
   if (temp == 0)
     memory_error_and_abort ("xmalloc");
   return (temp);
 }
 
-char *
+PTR_T
 xrealloc (pointer, bytes)
      PTR_T pointer;
-     int bytes;
+     size_t bytes;
 {
-  char *temp;
+  PTR_T temp;
 
-  temp = pointer ? (char *)realloc (pointer, bytes) : (char *)malloc (bytes);
+  temp = pointer ? realloc (pointer, bytes) : malloc (bytes);
 
   if (temp == 0)
     memory_error_and_abort ("xrealloc");
diff --git a/readline/xmalloc.h b/readline/xmalloc.h
index bdf251b..9cb08ba 100644
--- a/readline/xmalloc.h
+++ b/readline/xmalloc.h
@@ -39,8 +39,8 @@
 
 #endif /* !PTR_T */
 
-extern char *xmalloc __P((int));
-extern char *xrealloc __P((void *, int));
-extern void xfree __P((void *));
+extern PTR_T xmalloc PARAMS((size_t));
+extern PTR_T xrealloc PARAMS((void *, size_t));
+extern void xfree PARAMS((void *));
 
 #endif /* _XMALLOC_H_ */
