Nuke libreadline, it's no longer being built.
authorSascha Wildner <swildner@dragonflybsd.org>
Thu, 10 Jul 2008 22:45:27 +0000 (22:45 +0000)
committerSascha Wildner <swildner@dragonflybsd.org>
Thu, 10 Jul 2008 22:45:27 +0000 (22:45 +0000)
83 files changed:
contrib/readline-5.0/CHANGELOG [deleted file]
contrib/readline-5.0/CHANGES [deleted file]
contrib/readline-5.0/COPYING [deleted file]
contrib/readline-5.0/INSTALL [deleted file]
contrib/readline-5.0/NEWS [deleted file]
contrib/readline-5.0/README [deleted file]
contrib/readline-5.0/README.DELETED [deleted file]
contrib/readline-5.0/README.DRAGONFLY [deleted file]
contrib/readline-5.0/USAGE [deleted file]
contrib/readline-5.0/ansi_stdlib.h [deleted file]
contrib/readline-5.0/bind.c [deleted file]
contrib/readline-5.0/callback.c [deleted file]
contrib/readline-5.0/chardefs.h [deleted file]
contrib/readline-5.0/compat.c [deleted file]
contrib/readline-5.0/complete.c [deleted file]
contrib/readline-5.0/display.c [deleted file]
contrib/readline-5.0/doc/fdl.texi [deleted file]
contrib/readline-5.0/doc/history.3 [deleted file]
contrib/readline-5.0/doc/history.texi [deleted file]
contrib/readline-5.0/doc/hstech.texi [deleted file]
contrib/readline-5.0/doc/hsuser.texi [deleted file]
contrib/readline-5.0/doc/readline.3 [deleted file]
contrib/readline-5.0/doc/rlman.texi [deleted file]
contrib/readline-5.0/doc/rltech.texi [deleted file]
contrib/readline-5.0/doc/rluser.texi [deleted file]
contrib/readline-5.0/doc/rluserman.texi [deleted file]
contrib/readline-5.0/doc/texinfo.tex [deleted file]
contrib/readline-5.0/doc/version.texi [deleted file]
contrib/readline-5.0/emacs_keymap.c [deleted file]
contrib/readline-5.0/funmap.c [deleted file]
contrib/readline-5.0/histexpand.c [deleted file]
contrib/readline-5.0/histfile.c [deleted file]
contrib/readline-5.0/histlib.h [deleted file]
contrib/readline-5.0/history.c [deleted file]
contrib/readline-5.0/history.h [deleted file]
contrib/readline-5.0/histsearch.c [deleted file]
contrib/readline-5.0/input.c [deleted file]
contrib/readline-5.0/isearch.c [deleted file]
contrib/readline-5.0/keymaps.c [deleted file]
contrib/readline-5.0/keymaps.h [deleted file]
contrib/readline-5.0/kill.c [deleted file]
contrib/readline-5.0/macro.c [deleted file]
contrib/readline-5.0/mbutil.c [deleted file]
contrib/readline-5.0/misc.c [deleted file]
contrib/readline-5.0/nls.c [deleted file]
contrib/readline-5.0/parens.c [deleted file]
contrib/readline-5.0/posixdir.h [deleted file]
contrib/readline-5.0/posixjmp.h [deleted file]
contrib/readline-5.0/posixstat.h [deleted file]
contrib/readline-5.0/readline.c [deleted file]
contrib/readline-5.0/readline.h [deleted file]
contrib/readline-5.0/rlconf.h [deleted file]
contrib/readline-5.0/rldefs.h [deleted file]
contrib/readline-5.0/rlmbutil.h [deleted file]
contrib/readline-5.0/rlprivate.h [deleted file]
contrib/readline-5.0/rlshell.h [deleted file]
contrib/readline-5.0/rlstdc.h [deleted file]
contrib/readline-5.0/rltty.c [deleted file]
contrib/readline-5.0/rltty.h [deleted file]
contrib/readline-5.0/rltypedefs.h [deleted file]
contrib/readline-5.0/rlwinsize.h [deleted file]
contrib/readline-5.0/savestring.c [deleted file]
contrib/readline-5.0/search.c [deleted file]
contrib/readline-5.0/shell.c [deleted file]
contrib/readline-5.0/signals.c [deleted file]
contrib/readline-5.0/tcap.h [deleted file]
contrib/readline-5.0/terminal.c [deleted file]
contrib/readline-5.0/text.c [deleted file]
contrib/readline-5.0/tilde.c [deleted file]
contrib/readline-5.0/tilde.h [deleted file]
contrib/readline-5.0/undo.c [deleted file]
contrib/readline-5.0/util.c [deleted file]
contrib/readline-5.0/vi_keymap.c [deleted file]
contrib/readline-5.0/vi_mode.c [deleted file]
contrib/readline-5.0/xmalloc.c [deleted file]
contrib/readline-5.0/xmalloc.h [deleted file]
gnu/lib/libreadline/Makefile [deleted file]
gnu/lib/libreadline/Makefile.inc [deleted file]
gnu/lib/libreadline/config.h [deleted file]
gnu/lib/libreadline/history/Makefile [deleted file]
gnu/lib/libreadline/history/doc/Makefile [deleted file]
gnu/lib/libreadline/readline/Makefile [deleted file]
gnu/lib/libreadline/readline/doc/Makefile [deleted file]

diff --git a/contrib/readline-5.0/CHANGELOG b/contrib/readline-5.0/CHANGELOG
deleted file mode 100644 (file)
index 0fc31fa..0000000
+++ /dev/null
@@ -1,810 +0,0 @@
-[Readline-specific changelog.  Descriptions of changes to the source are
- found in the bash changelog.]
-
-                                   6/9
-                                   ---
-Makefile.in
-       - quote value of ${INSTALL_DATA} when passing it to makes in
-         subdirectories
-
-                                   7/1
-                                   ---
-Makefile.in
-       - don't pass INSTALL_DATA to a make in the `doc' subdirectory; let
-         autoconf set the value itself in the Makefile
-       - removed a stray `-' before $(RANLIB) in the `install' recipe
-
-doc/Makefile.in
-       - add a VPATH assignment so the documentation is not remade if it's
-         already up-to-date in the distribution
-
-configure.in
-       - call AC_SUBST(LOCAL_LDFLAGS), since Makefile.in contains
-         @LOCAL_LDFLAGS@
-
-                                   7/9
-                                   ---
-
-config.h.in
-       - add define lines for STRUCT_WINSIZE_IN_SYS_IOCTL and
-         STRUCT_WINSIZE_IN_TERMIOS
-
-configure.in
-       - call BASH_STRUCT_WINSIZE to look for the definition of
-         `struct winsize'
-
-                                  7/17
-                                  ----
-configure.in
-       - call AC_MINIX
-
-config.h.in
-       - add define line for AC_MINIX
-
-                                  7/18
-                                  ----
-Makefile.in
-       - add `install-shared' and `uninstall-shared' targets
-
-                                   8/4
-                                   ---
-Makefile.in
-       - install and uninstall libhistory.a in the `install' and
-         `uninstall' targets
-
-                                   9/4
-                                   ---
-configure.in
-       - bumped LIBVERSION up to 2.1.1, indicating that this is patch
-         level 1 to release 2.1
-
-
-                                  9/16
-                                  ----
-Makefile.in
-       - `make distclean' now descends into the `examples' subdir
-
-doc/Makefile.in
-       - the `distclean' and `maintainer-clean' targets should remove
-         Makefile
-
-examples/Makefile.in
-       - added the various clean targets
-
-                                   4/2
-                                   ---
-configure.in
-       - bumped LIBVERSION up to 2.2
-
-                                  4/18
-                                  ----
-[readline-2.2 released]
-
-                                  4/20
-                                  ----
-Makefile.in
-       - make `libhistory.a' a dependency of `install'
-       - fixed a typo in the recipe for `install' that copied libreadline.a
-         to libhistory.old right after installing it
-
-                                  4/27
-                                  ----
-doc/Makefile.in
-       - install {readline,history}.info out of the source directory if
-         they are not found in the current (build) directory -- only an
-         issue if the libraries are built in a different directory than
-         the source directory
-
-                                   5/1
-                                   ---
-support/shobj-conf
-       - script from the bash distribution to do shared object and library
-         configuration
-
-shlib/Makefile.in
-       - new directory and makefile to handle building shared versions of
-         libreadline and libhistory, controlled by support/shobj-conf
-
-                                   5/7
-                                   ---
-doc/Makefile.in
-       - set SHELL to /bin/sh, rather than relying on make to be correct
-
-                                  5/14
-                                  ----
-savestring.c
-       - new file, moved from shell.c, for backwards compatibility
-
-Makefile.in, shlib/Makefile.in
-       - make sure savestring.c is compiled and added to libreadline and
-         libhistory
-
-[THERE ARE NO MORE #ifdef SHELL LINES IN THE C SOURCE FILES.]
-
-                                  5/15
-                                  ----
-README
-       - updated description of shared library creation for the new scheme
-
-[THERE ARE NO MORE #ifdef SHELL LINES IN ANY OF THE SOURCE FILES.]
-
-Makefile.in
-       - bumped SHLIB_MAJOR up to 4 since we've augmented the library
-         API
-       - rlconf.h is now one of the installed headers, so applications can
-         find out whether things like vi-mode are available in the installed
-         libreadline
-
-                                  5/20
-                                  ----
-configure.in
-       - changed RL_LIBRARY_VERSION to 4.0 to match the version of the
-         installed shared libraries
-
-                                   6/5
-                                   ---
-rlstdc.h
-       - new file
-
-Makefile.in
-       - rlstdc.h is now one of the installed headers
-
-                                   8/3
-                                   ---
-shlib/Makefile.in
-       - made the suffix rule that creates xx.so from xx.c write the
-         compiler output to `a.o', which is then mv'd to xx.so, because
-         some compilers (Sun WSpro 4.2, for example) don't allow any
-         suffixes other than `.o' for `cc -c' (not even `a.out')
-
-                                  9/15
-                                  ----
-
-Makefile.in
-       - AR and ARFLAGS are now substituted by configure, used in recipes
-         that build the libraries
-
-configure.in
-       - use AC_CHECK_PROG to check for ar
-       - set ARFLAGS if it has not already been set in the environment
-
-                                  10/5
-                                  ----
-Makefile.in
-       - removed savestring.o from object file list
-
-                                  10/28
-                                  -----
-shlib/Makefile.in
-       - don't use a fixed filename in the .c.so suffix rule to avoid
-         problems with parallel makes
-
-                                  12/21
-                                  -----
-support/shlib-install
-       - new script to install shared readline and history libraries
-
-shlib/Makefile.in
-       - changed to call shlib-install for install and uninstall targets
-
-[readline-4.0-beta1 frozen]
-
-                                  12/22
-                                  -----
-configure.in
-       - call AC_SUBST for SHOBJ_XLDFLAGS and SHLIB_LIBS
-
-shlib/Makefile.in
-       - SHOBJ_XLDFLAGS and SHLIB_LIBS are now substituted by configure
-       - add $(SHLIB_LIBS) at end of command line that builds the shared
-         libraries (currently needed only by AIX 4.2)
-
-                                  12/31
-                                  -----
-MANIFEST, MANIFEST.doc
-       - the TOC html files are no longer generated and no longer part of
-         the distribution
-
-                                2/18/1999
-                                ---------
-configure.in
-       - set MAKE_SHELL to /bin/sh and substitute into the Makefiles
-
-Makefile.in,{doc,examples,shlib}/Makefile.in
-       - set SHELL from @MAKE_SHELL@
-
-[readline-4.0 released]
-
-                                  3/11
-                                  ----
-doc/Makefile.in
-       - removed references to HTMLTOC, since separate HTML table-of-contents
-         files are no longer created
-
-examples/Makefile.in
-       - remove `*.exe' in clean target for MS-DOS
-
-Makefile.in
-       - make `readline' target depend on ./libreadline.a
-       - configure now substitutes TERMCAP_LIB into Makefile.in
-       - use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline'
-       - clean target now removes readline and readline.exe in case they
-         get built
-
-configure.in
-       - use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP
-
-                                  3/15
-                                  ----
-support/shlib-install
-       - Irix 5.x and Irix 6.x should install shared libraries like Solaris 2
-       - changes for installing on hp-ux 1[01].x
-
-                                  3/23
-                                  ----
-configure.in
-       - make sure that the $CC argument to shobj-conf is quoted
-
-                                   4/8
-                                   ---
-
-xmalloc.h, rlprivate.h, rlshell.h
-       - new files
-
-Makefile.in,shlib/Makefile.in
-       - add dependencies on xmalloc.h, rlshell.h
-       - add xmalloc.h, rlprivate.h, rlshell.h to list of header files
-
-MANIFEST
-       - add xmalloc.h, rlprivate.h, rlshell.h
-
-                                   4/9
-                                   ---
-Makefile.in,shlib/Makefile.in
-       - add dependencies on rlprivate.h
-
-                                  4/13
-                                  ----
-doc/Makefile.in
-       - add variable, PSDVI, which is the desired resolution of the
-         generated postscript files.  Set to 300 because I don't have
-         any 600-dpi printers
-       - set LANGUAGE= before calling makeinfo, so messages are in English
-       - add rluserman.{info,dvi,ps,html} to appropriate variables
-       - add rules to create rluserman.{info,dvi,ps,html}
-       - install and uninstall rluserman.info, but don't update the directory
-         file in $(infodir) yet
-
-MANIFEST
-       - add doc/rluserman.{texinfo,info,dvi,ps,html}
-
-                                  4/30
-                                  ----
-configure.in
-       - updated library version to 4.1
-
-                                   5/3
-                                   ---
-configure.in
-       - SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are
-         constructed from $LIBRARY_VERSION and substituted into Makefiles
-
-                                   5/5
-                                   ---
-support/shlib-install
-       - OSF/1 installs shared libraries like Solaris
-
-Makefile.in
-       - broke the header file install and uninstall into two new targets:
-         install-headers and uninstall-headers
-       - install and uninstall depend on install-headers and uninstall-headers
-         respectively
-       - changed install-shared and uninstall-shared targets to depend on
-         install-headers and uninstall-headers, respectively, so users may
-         choose to install only the shared libraries.  I'm not sure about
-         the uninstall one yet -- maybe it should check whether or not
-         the static libraries are installed and not remove the header files
-         if they are
-
-                                   9/3
-                                   ---
-configure.in, config.h.in
-       - added test for memmove (for later use)
-       - changed version to 4.1-beta1
-
-                                  9/13
-                                  ----
-examples/rlfe.c
-       - Per Bothner's `rlfe' readline front-end program
-
-examples/Makefile.in
-       - added rules to build rlfe
-
-                                  9/21
-                                  ----
-support/shlib-install
-       - changes to handle FreeBSD-3.x elf or a.out shared libraries, which
-         have different semantics and need different naming conventions
-
-                                1/24/2000
-                                ---------
-doc/Makefile.in
-       - remove *.bt and *.bts on `make clean'
-
-                                   2/4
-                                   ---
-
-
-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
-
-                                  7/17
-                                  ----
-[readline-4.3 released]
-
-                                  7/18
-                                  ----
-shlib/Makefile.in
-       - fix bad dependency: text.so: terminal.c, make it depend on text.c
-
-                                   8/7
-                                   ---
-support/shlib-install
-       - break `linux' out into its own stanza:  it seems that linux
-         distributions are all moving to the following scheme:
-
-               libreadline.so.4.3      installed version
-               libreadline.so.4 -> libreadline.so.4.3  symlink
-               libreadline.so -> libreadline.so.4      symlink
-
-                                  10/29
-                                  -----
-support/shlib-install
-       - change INSTALL_LINK[12] to use `&&' instead of `;' so it only
-         tries the link if the cd succeeds; put ${echo} in there, too
-       - use $LN instead of `ln -s' so it works on machines without symlinks
-       - change special linux stanza to use cd before ln also
-       - change to use $INSTALL_LINK1 and $INSTALL_LINK2 appropriately
-         instead of explicit commands in various stanzas
-
-                                   2/1
-                                   ---
-config.h.in
-       - add HAVE_MBRTOWC and HAVE_MBRLEN
-       - add NO_MULTIBYTE_SUPPORT for new configure argument
-       - add STDC_HEADERS
-
-configure.in
-       - new argument --enable-multibyte (enabled by default), allows
-         multibyte support to be turned off even on systems that support it
-       - add check for ansi stdc headers with call to AC_HEADER_STDC
-
-                                   2/3
-                                   ---
-configure.in
-       - add call to BASH_FUNC_CTYPE_NONASCII
-
-config.h.in
-       - add CTYPE_NON_ASCII
-
-                                  2/20
-                                  ----
-
-doc/manvers.texinfo
-        - renamed to version.texi to match other GNU software
-        - UPDATE-MONTH variable is now `UPDATED-MONTH'
-        
-doc/{hist,rlman,rluserman}.texinfo
-        - include version.texi
-        
-doc/{rltech,rluser,hstech,hsuser}.texi
-       - changed the suffix from `texinfo' to `texi'
-
-doc/Makefile.in
-       - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi
-
-doc/{rlman,rluserman}.texinfo
-       - changed the suffix from `texinfo' to `texi'
-
-doc/hist.texinfo
-       - renamed to history.texi to be more consistent
-
-                                  6/11
-                                  ----
-shlib/Makefile.in
-       - have configure substitute value of `@LDFLAGS@' into the assignment
-         to SHLIB_XLDFLAGS
-
-                                  6/16
-                                  ----
-configure.in
-       - readline and history libraries are now at version 5.0
-
-                                  8/18
-                                  ----
-support/shlib-install
-       - support for FreeBSD-gnu (from Robert Millan)
-
-                                  12/4
-                                  ----
-Makefile.in
-       - add variables for localedir and the PACKAGE_* variables, auto-set
-         by configure
-
-                                  12/9
-                                  ----
-Makefile.in
-       - use mkinstalldirs instead of mkdirs
-
-                                  4/22
-                                  ----
-Makefile.in
-       - separate doc install/uninstall out into two new targets:
-         install-doc and uninstall-doc
-       - make install-doc and uninstall-doc prerequisites of appropriate
-         install and uninstall targets
-
-examples/rl-fgets.c
-       - new example from Harold Levy that wraps fgets replacement functions
-         that call readline in a shared library that can be interposed with
-         LD_PRELOAD
diff --git a/contrib/readline-5.0/CHANGES b/contrib/readline-5.0/CHANGES
deleted file mode 100644 (file)
index 0c8450d..0000000
+++ /dev/null
@@ -1,792 +0,0 @@
-This document details the changes between this version, readline-5.0,
-and the previous version, readline-4.3.
-
-1.  Changes to Readline
-
-a.  Fixes to avoid core dumps because of null pointer references in the
-    multibyte character code.
-
-b.  Fix to avoid infinite recursion caused by certain key combinations.
-
-c.  Fixed a bug that caused the vi-mode `last command' to be set incorrectly.
-
-d.  Readline no longer tries to read ahead more than one line of input, even
-    when more is available.
-
-e.  Fixed the code that adjusts the point to not mishandle null wide
-    characters.
-
-f.  Fixed a bug in the history expansion `g' modifier that caused it to skip
-    every other match.
-
-g.  Fixed a bug that caused the prompt to overwrite previous output when the
-    output doesn't contain a newline and the locale supports multibyte
-    characters.  This same change fixes the problem of readline redisplay
-    slowing down dramatically as the line gets longer in multibyte locales.
-
-h.  History traversal with arrow keys in vi insertion mode causes the cursor
-    to be placed at the end of the new line, like in emacs mode.
-
-i.  The locale initialization code does a better job of using the right
-    precedence and defaulting when checking the appropriate environment
-    variables.
-
-j.  Fixed the history word tokenizer to handle <( and >( better when used as
-    part of bash.
-
-k.  The overwrite mode code received several bug fixes to improve undo.
-
-l.  Many speedups to the multibyte character redisplay code.
-
-m.  The callback character reading interface should not hang waiting to read
-    keyboard input.
-
-n.  Fixed a bug with redoing vi-mode `s' command.
-
-o.  The code that initializes the terminal tracks changes made to the terminal
-    special characters with stty(1) (or equivalent), so that these changes
-    are reflected in the readline bindings.  New application-callable function
-    to make it work:  rl_tty_unset_default_bindings().
-
-p.  Fixed a bug that could cause garbage to be inserted in the buffer when
-    changing character case in vi mode when using a multibyte locale.
-
-q.  Fixed a bug in the redisplay code that caused problems on systems
-    supporting multibyte characters when moving between history lines when the
-    new line has more glyphs but fewer bytes.
-
-r.  Undo and redo now work better after exiting vi insertion mode.
-
-s.  Make sure system calls are restarted after a SIGWINCH is received using
-    SA_RESTART.
-
-t.  Improvements to the code that displays possible completions when using
-    multibyte characters.
-
-u.  Fixed a problem when parsing nested if statements in inputrc files.
-
-v.  The completer now takes multibyte characters into account when looking for
-    quoted substrings on which to perform completion.
-
-w.  The history search functions now perform better bounds checking on the
-    history list.
-
-x.  Change to history expansion functions to treat `^' as equivalent to word 
-    one, as the documention states.
-
-y.  Some changes to the display code to improve display and redisplay of
-    multibyte characters.
-
-z.  Changes to speed up the multibyte character redisplay code.
-
-aa. Fixed a bug in the vi-mode `E' command that caused it to skip over the
-    last character of a word if invoked while point was on the word's
-    next-to-last character.
-
-bb. Fixed a bug that could cause incorrect filename quoting when
-    case-insensitive completion was enabled and the word being completed
-    contained backslashes quoting word break characters.
-
-cc. Fixed a bug in redisplay triggered when the prompt string contains
-    invisible characters.
-
-dd. Fixed some display (and other) bugs encountered in multibyte locales
-    when a non-ascii character was the last character on a line.
-
-ee. Fixed some display bugs caused by multibyte characters in prompt strings.
-
-ff. Fixed a problem with history expansion caused by non-whitespace characters
-    used as history word delimiters.
-
-gg. Fixed a problem that could cause readline to refer to freed memory when
-    moving between history lines while doing searches.
-
-hh. Improvements to the code that expands and displays prompt strings
-    containing multibyte characters.
-
-ii. Fixed a problem with vi-mode not correctly remembering the numeric argument
-    to the last `c'hange command for later use with `.'.
-
-jj. Fixed a bug in vi-mode that caused multi-digit count arguments to work   
-    incorrectly.
-
-kk. Fixed a problem in vi-mode that caused the last text modification command
-    to not be remembered across different command lines.
-
-ll. Fixed problems with changing characters and changing case at the end of
-    the line.
-
-mm. Fixed a problem with readline saving the contents of the current line
-    before beginning a non-interactive search.
-
-nn. Fixed a problem with EOF detection when using rl_event_hook.
-
-oo. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric
-    arguments.
-
-2.  New Features in Readline
-
-a.  History expansion has a new `a' modifier equivalent to the `g' modifier
-    for compatibility with the BSD csh.
-
-b.  History expansion has a new `G' modifier equivalent to the BSD csh `g'
-    modifier, which performs a substitution once per word.
-
-c.  All non-incremental search operations may now undo the operation of
-    replacing the current line with the history line.
-
-d.  The text inserted by an `a' command in vi mode can be reinserted with
-    `.'.
-
-e.  New bindable variable, `show-all-if-unmodified'.  If set, the readline
-    completer will list possible completions immediately if there is more
-    than one completion and partial completion cannot be performed.
-
-f.  There is a new application-callable `free_history_entry()' function.
-
-g.  History list entries now contain timestamp information; the history file
-    functions know how to read and write timestamp information associated
-    with each entry.
-
-h.  Four new key binding functions have been added:
-
-       rl_bind_key_if_unbound()
-       rl_bind_key_if_unbound_in_map()
-       rl_bind_keyseq_if_unbound()
-       rl_bind_keyseq_if_unbound_in_map()
-
-i.  New application variable, rl_completion_quote_character, set to any
-    quote character readline finds before it calls the application completion
-    function.
-
-j.  New application variable, rl_completion_suppress_quote, settable by an   
-    application completion function.  If set to non-zero, readline does not
-    attempt to append a closing quote to a completed word.
-    
-k.  New application variable, rl_completion_found_quote, set to a non-zero
-    value if readline determines that the word to be completed is quoted.
-    Set before readline calls any application completion function.
-
-l.  New function hook, rl_completion_word_break_hook, called when readline
-    needs to break a line into words when completion is attempted.  Allows
-    the word break characters to vary based on position in the line.
-
-m.  New bindable command: unix-filename-rubout.  Does the same thing as
-    unix-word-rubout, but adds `/' to the set of word delimiters.
-
-n.  When listing completions, directories have a `/' appended if the
-    `mark-directories' option has been enabled.
-
--------------------------------------------------------------------------------
-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.
-
-1.  Changes to Readline
-
-a.  Changed the HTML documents so that the table-of-contents is no longer
-    a separate file.
-
-b.  Changes to the shared object configuration for: Irix 5.x, Irix 6.x,
-    OSF/1.
-
-c.  The shared library major and minor versions are now constructed
-    automatically by configure and substituted into the makefiles.
-
-d.  It's now possible to install the shared libraries separately from the
-    static libraries.
-
-e.  The history library tries to truncate the history file only if it is a
-    regular file.
-
-f.  A bug that caused _rl_dispatch to address negative array indices on
-    systems with signed chars was fixed.
-
-g.  rl-yank-nth-arg now leaves the history position the same as when it was
-    called.
-
-h.  Changes to the completion code to handle MS-DOS drive-letter:pathname
-    filenames.
-
-i.  Completion is now case-insensitive by default on MS-DOS.
-
-j.  Fixes to the history file manipulation code for MS-DOS.
-
-k.  Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS.
-
-l.  Some fixes were made to the redisplay code for better operation on MS-DOS.
-
-m.  The quoted-insert code will now insert tty special chars like ^C.
-
-n.  A bug was fixed that caused the display code to reference memory before
-    the start of the prompt string.
-
-o.  More support for __EMX__ (OS/2).
-
-p.  A bug was fixed in readline's signal handling that could cause infinite
-    recursion in signal handlers.
-
-q.  A bug was fixed that caused the point to be less than zero when rl_forward
-    was given a very large numeric argument.
-
-r.  The vi-mode code now gets characters via the application-settable value
-    of rl_getc_function rather than calling rl_getc directly.
-
-s.  The history file code now uses O_BINARY mode when reading and writing
-    the history file on cygwin32.
-
-t.  Fixed a bug in the redisplay code for lines with more than 256 line
-    breaks.
-
-u.  A bug was fixed which caused invisible character markers to not be
-    stripped from the prompt string if the terminal was in no-echo mode.
-    
-v.  Readline no longer tries to get the variables it needs for redisplay 
-    from the termcap entry if the calling application has specified its
-    own redisplay function.  Readline treats the terminal as `dumb' in
-    this case.
-
-w.  Fixes to the SIGWINCH code so that a multiple-line prompt with escape
-    sequences is redrawn correctly.
-
-x.  Changes to the install and install-shared targets so that the libraries
-    and header files are installed separately.
-
-2.  New Features in Readline
-
-a.  A new Readline `user manual' is in doc/rluserman.texinfo.
-
-b.  Parentheses matching is now always compiled into readline, and enabled
-    or disabled when the value of the `blink-matching-paren' variable is
-    changed.
-
-c.  MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename.
-
-d.  MS-DOS systems now use ~/_history as the default history file.
-
-e.  history-search-{forward,backward} now leave the point at the end of the
-    line when the string to search for is empty, like
-    {reverse,forward}-search-history.
-
-f.  history-search-{forward,backward} now leave the last history line found
-    in the readline buffer if the second or subsequent search fails.
-
-g.  New function for use by applications:  rl_on_new_line_with_prompt, used
-    when an application displays the prompt itself before calling readline().
-
-h.  New variable for use by applications:  rl_already_prompted.  An application
-    that displays the prompt itself before calling readline() must set this to
-    a non-zero value.
-
-i.  A new variable, rl_gnu_readline_p, always 1.  The intent is that an
-    application can verify whether or not it is linked with the `real'
-    readline library or some substitute.
-
-j.  Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program
-    is included in the examples subdirectory, though it is not built
-    by default.
-
--------------------------------------------------------------------------------
-This document details the changes between this version, readline-4.0,
-and the previous version, readline-2.2.
-
-1.  Changes to Readline
-
-a.  The version number is now 4.0, to match the major and minor version
-    numbers on the shared readline and history libraries.  Future
-    releases will maintain the identical numbering.
-
-b.  Fixed a typo in the `make install' recipe that copied libreadline.a
-    to libhistory.old right after installing it.
-
-c.  The readline and history info files are now installed out of the source
-    directory if they are not found in the build directory.
-
-d.  The library no longer exports a function named `savestring' -- backwards
-    compatibility be damned.
-
-e.  There is no longer any #ifdef SHELL code in the source files.
-
-f.  Some changes were made to the key binding code to fix memory leaks and
-    better support Win32 systems.
-
-g.  Fixed a silly typo in the paren matching code -- it's microseconds, not
-    milliseconds.
-
-h.  The readline library should be compilable by C++ compilers.
-
-i.  The readline.h public header file now includes function prototypes for
-    all readline functions, and some changes were made to fix errors in the
-    source files uncovered by the use of prototypes.
-
-j.  The maximum numeric argument is now clamped at 1000000.
-
-k.  Fixes to rl_yank_last_arg to make it behave better.
-
-l.  Fixed a bug in the display code that caused core dumps if the prompt
-    string length exceeded 1024 characters.
-
-m.  The menu completion code was fixed to properly insert a single completion
-    if there is only one match.
-
-n.  A bug was fixed that caused the display code to improperly display tabs
-    after newlines.
-
-o.  A fix was made to the completion code in which a typo caused the wrong
-    value to be passed to the function that computed the longest common
-    prefix of the list of matches.
-
-p.  The completion code now checks the value of rl_filename_completion_desired,
-    which is set by application-supplied completion functions to indicate
-    that filename completion is being performed, to decide whether or not to
-    call an application-supplied `ignore completions' function.
-
-q.  Code was added to the history library to catch history substitutions
-    using `&' without a previous history substitution or search having been
-    performed.
-
-
-2.  New Features in Readline
-
-a.  There is a new script, support/shobj-conf, to do system-specific shared
-    object and library configuration.  It generates variables for configure
-    to substitute into makefiles.  The README file provides a detailed
-    explanation of the shared library creation process.
-
-b.  Shared libraries and objects are now built in the `shlib' subdirectory.
-    There is a shlib/Makefile.in to control the build process.  `make shared'
-    from the top-level directory is still the right way to build shared
-    versions of the libraries.
-
-c.  rlconf.h is now installed, so applications can find out which features
-    have been compiled into the installed readline and history libraries.
-
-d.  rlstdc.h is now an installed header file.
-
-e.  Many changes to the signal handling:
-        o Readline now catches SIGQUIT and cleans up the tty before returning;
-        o A new variable, rl_catch_signals, is available to application writers 
-          to indicate to readline whether or not it should install its own
-          signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP,
-          SIGTTIN, and SIGTTOU;
-        o A new variable, rl_catch_sigwinch, is available to application
-          writers to indicate to readline whether or not it should install its
-          own signal handler for SIGWINCH, which will chain to the calling
-          applications's SIGWINCH handler, if one is installed;
-        o There is a new function, rl_free_line_state, for application signal
-          handlers to call to free up the state associated with the current
-          line after receiving a signal;
-        o There is a new function, rl_cleanup_after_signal, to clean up the
-          display and terminal state after receiving a signal;
-        o There is a new function, rl_reset_after_signal, to reinitialize the
-          terminal and display state after an application signal handler
-          returns and readline continues
-
-f.  There is a new function, rl_resize_terminal, to reset readline's idea of
-    the screen size after a SIGWINCH.
-
-g.  New public functions: rl_save_prompt and rl_restore_prompt.  These were
-    previously private functions with a `_' prefix.  These functions are
-    used when an application wants to write a message to the `message area'
-    with rl_message and have the prompt restored correctly when the message
-    is erased.
-
-h.  New function hook: rl_pre_input_hook, called just before readline starts
-    reading input, after initialization.
-
-i.  New function hook: rl_display_matches_hook, called when readline would
-    display the list of completion matches.  The new function
-    rl_display_match_list is what readline uses internally, and is available
-    for use by application functions called via this hook.
-
-j.  New bindable function, delete-char-or-list, like tcsh.
-
-k.  A new variable, rl_erase_empty_line, which, if set by an application using
-    readline, will cause readline to erase, prompt and all, lines on which the
-    only thing typed was a newline.
-
-l.  There is a new script, support/shlib-install, to install and uninstall
-    the shared readline and history libraries.
-
-m.  A new bindable variable, `isearch-terminators', which is a string
-    containing the set of characters that should terminate an incremental
-    search without being executed as a command.
-
-n.  A new bindable function, forward-backward-delete-char.
-
--------------------------------------------------------------------------------
-This document details the changes between this version, readline-2.2,
-and the previous version, readline-2.1.
-
-1.  Changes to Readline
-
-a.  Added a missing `extern' to a declaration in readline.h that kept
-    readline from compiling cleanly on some systems.
-
-b.  The history file is now opened with mode 0600 when it is written for
-    better security.
-
-c.  Changes were made to the SIGWINCH handling code so that prompt redisplay
-    is done better.
-
-d.  ^G now interrupts incremental searches correctly.
-
-e.  A bug that caused a core dump when the set of characters to be quoted
-    when completing words was empty was fixed.
-
-f.  Fixed a problem in the readline test program rltest.c that caused a core
-    dump.
-
-g.  The code that handles parser directives in inputrc files now displays
-    more error messages.
-
-h.  The history expansion code was fixed so that the appearance of the
-    history comment character at the beginning of a word inhibits history
-    expansion for that word and the rest of the input line.
-
-i.  The code that prints completion listings now behaves better if one or
-    more of the filenames contains non-printable characters.
-
-j.  The time delay when showing matching parentheses is now 0.5 seconds.
-
-
-2.  New Features in Readline
-
-a.  There is now an option for `iterative' yank-last-arg handline, so a user
-    can keep entering `M-.', yanking the last argument of successive history
-    lines.
-
-b.  New variable, `print-completions-horizontally', which causes completion
-    matches to be displayed across the screen (like `ls -x') rather than up
-    and down the screen (like `ls').
-
-c.  New variable, `completion-ignore-case', which causes filename completion
-    and matching to be performed case-insensitively.
-
-d.  There is a new bindable command, `magic-space', which causes history
-    expansion to be performed on the current readline buffer and a space to
-    be inserted into the result.
-
-e.  There is a new bindable command, `menu-complete', which enables tcsh-like
-    menu completion (successive executions of menu-complete insert a single
-    completion match, cycling through the list of possible completions).
-
-f.  There is a new bindable command, `paste-from-clipboard', for use on Win32
-    systems, to insert the text from the Win32 clipboard into the editing
-    buffer.
-
-g.  The key sequence translation code now understands printf-style backslash
-    escape sequences, including \NNN octal escapes.  These escape sequences
-    may be used in key sequence definitions or macro values.
-
-h.  An `$include' inputrc file parser directive has been added.
diff --git a/contrib/readline-5.0/COPYING b/contrib/readline-5.0/COPYING
deleted file mode 100644 (file)
index 1bf1526..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                          59 Temple Place, Suite 330, Boston, MA 02111 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-       Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 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
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/contrib/readline-5.0/INSTALL b/contrib/readline-5.0/INSTALL
deleted file mode 100644 (file)
index cb4a06f..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-Basic Installation
-==================
-
-These are installation instructions for Readline-5.0.
-
-The simplest way to compile readline is:
-
-  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 some time.  While running, it prints some
-     messages telling which features it is checking for.
-
-  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. 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. 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 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
-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 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
-directory where you want the object files and executables to go and run
-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 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 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
-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 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.
-
-Sharing Defaults
-================
-
-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: 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
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`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/contrib/readline-5.0/NEWS b/contrib/readline-5.0/NEWS
deleted file mode 100644 (file)
index 754154b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-This is a terse description of the new features added to readline-5.0 since
-the release of readline-4.3.
-
-1.  New Features in Readline
-
-a.  History expansion has a new `a' modifier equivalent to the `g' modifier
-    for compatibility with the BSD csh.
-
-b.  History expansion has a new `G' modifier equivalent to the BSD csh `g'
-    modifier, which performs a substitution once per word.
-
-c.  All non-incremental search operations may now undo the operation of
-    replacing the current line with the history line.
-
-d.  The text inserted by an `a' command in vi mode can be reinserted with
-    `.'.
-
-e.  New bindable variable, `show-all-if-unmodified'.  If set, the readline
-    completer will list possible completions immediately if there is more
-    than one completion and partial completion cannot be performed.
-
-f.  There is a new application-callable `free_history_entry()' function.
-
-g.  History list entries now contain timestamp information; the history file
-    functions know how to read and write timestamp information associated
-    with each entry.
-
-h.  Four new key binding functions have been added:
-
-       rl_bind_key_if_unbound()
-       rl_bind_key_if_unbound_in_map()
-       rl_bind_keyseq_if_unbound()
-       rl_bind_keyseq_if_unbound_in_map()
-
-i.  New application variable, rl_completion_quote_character, set to any
-    quote character readline finds before it calls the application completion
-    function.
-
-j.  New application variable, rl_completion_suppress_quote, settable by an   
-    application completion function.  If set to non-zero, readline does not
-    attempt to append a closing quote to a completed word.
-    
-k.  New application variable, rl_completion_found_quote, set to a non-zero
-    value if readline determines that the word to be completed is quoted.
-    Set before readline calls any application completion function.
-
-l.  New function hook, rl_completion_word_break_hook, called when readline
-    needs to break a line into words when completion is attempted.  Allows
-    the word break characters to vary based on position in the line.
-
-m.  New bindable command: unix-filename-rubout.  Does the same thing as
-    unix-word-rubout, but adds `/' to the set of word delimiters.
-
-n.  When listing completions, directories have a `/' appended if the
-    `mark-directories' option has been enabled.
diff --git a/contrib/readline-5.0/README b/contrib/readline-5.0/README
deleted file mode 100644 (file)
index ac4e3a7..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-Introduction
-============
-
-This is the Gnu Readline library, version 5.0.
-
-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
-Emacs and vi editing modes are available.  The Readline library includes
-additional functions to maintain a list of previously-entered command
-lines, to recall and perhaps reedit those lines, and perform csh-like
-history expansion on previous commands.
-
-The history facilites are also placed into a separate library, the
-History library, as part of the build process.  The History library
-may be used without Readline in applications which desire its
-capabilities.
-
-The Readline library is free software, distributed under the terms of
-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
-be necessary.  Readline builds with `gcc' by default if it is
-available.  If you want to use `cc' instead, type
-
-        CC=cc ./configure
-
-if you are using a Bourne-style shell.  If you are not, the following
-may work:
-
-        env CC=cc ./configure
-
-Read the file INSTALL in this directory for more information about how
-to customize and control the build process.
-
-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
-========
-
-There are several example programs that use Readline features in the
-examples directory.  The `rl' program is of particular interest.  It
-is a command-line interface to Readline, suitable for use in shell
-scripts in place of `read'.
-
-Shared Libraries
-================
-
-There is skeletal 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.
-
-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'.  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'. 
-
-Documentation
-=============
-
-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
-==============
-
-Bug reports for Readline should be sent to:
-
-        bug-readline@gnu.org
-
-When reporting a bug, please include the following information:
-
-        * 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
-        * a description of the bug
-        * a recipe for recreating the bug reliably
-        * a fix for the bug if you have one!
-
-If you would like to contact the Readline maintainer directly, send mail
-to bash-maintainers@gnu.org.
-
-Since Readline is developed along with bash, the bug-bash@gnu.org mailing
-list (mirrored to the Usenet newsgroup gnu.bash.bug) often contains
-Readline bug reports and fixes. 
-
-Chet Ramey
-chet@po.cwru.edu
diff --git a/contrib/readline-5.0/README.DELETED b/contrib/readline-5.0/README.DELETED
deleted file mode 100644 (file)
index 4719db5..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-MANIFEST
-Makefile.in
-aclocal.m4
-config.h.in
-configure
-configure.in
-doc/Makefile.in
-doc/history.0
-doc/history.dvi
-doc/history.html
-doc/history.info
-doc/history.pdf
-doc/history.ps
-doc/history_3.ps
-doc/readline.0
-doc/readline.dvi
-doc/readline.html
-doc/readline.info
-doc/readline.pdf
-doc/readline.ps
-doc/readline_3.ps
-doc/rluserman.dvi
-doc/rluserman.html
-doc/rluserman.info
-doc/rluserman.pdf
-doc/rluserman.ps
-doc/texi2dvi
-doc/texi2html
-examples
-shlib
-support
diff --git a/contrib/readline-5.0/README.DRAGONFLY b/contrib/readline-5.0/README.DRAGONFLY
deleted file mode 100644 (file)
index 595c2a9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Original Source can be downloaded from:
-ftp://ftp.gnu.org/gnu/readline/readline-5.0.tar.gz
-MD5 (readline-5.0.tar.gz) = 9a39d15f1ed592883f8c6671e8c13120
-
-A list of files and directories removed is in README.DELETED
diff --git a/contrib/readline-5.0/USAGE b/contrib/readline-5.0/USAGE
deleted file mode 100644 (file)
index edc9f54..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-From rms@gnu.org Thu Jul 22 20:37:55 1999
-Flags: 10
-Return-Path: rms@gnu.org
-Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins)
-       id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for <chet@odin.INS.CWRU.Edu>)
-Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6)
-       id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for <chet@po.cwru.edu>)
-Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi)
-       id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for <chet@nike.ins.cwru.edu>)
-Received: from wijiji.santafe.edu (wijiji [192.12.12.5])
-       by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831
-       for <chet@nike.ins.cwru.edu>; Thu, 22 Jul 1999 18:37:47 -0600 (MDT)
-Received: (from rms@localhost)
-       by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089;
-       Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
-Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
-Message-Id: <199907230037.SAA01089@wijiji.santafe.edu>
-X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f
-From: Richard Stallman <rms@gnu.org>
-To: chet@nike.ins.cwru.edu
-Subject: Use of Readline
-Reply-to: rms@gnu.org
-
-I think Allbery's suggestion is a good one.  So please add this text
-in a suitable place.  Please don't put it in the GPL itself; that
-should be the same as the GPL everywhere else.  Putting it in the
-README and/or the documentation would be a good idea.
-
-
-======================================================================
-Our position on the use of Readline through a shared-library linking
-mechanism is that there is no legal difference between shared-library
-linking and static linking--either kind of linking combines various
-modules into a single larger work.  The conditions for using Readline
-in a larger work are stated in section 3 of the GNU GPL.
-
-
diff --git a/contrib/readline-5.0/ansi_stdlib.h b/contrib/readline-5.0/ansi_stdlib.h
deleted file mode 100644 (file)
index db13cd2..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ansi_stdlib.h -- An ANSI Standard stdlib.h. */
-/* A minimal stdlib.h containing extern declarations for those functions
-   that bash uses. */
-
-/* Copyright (C) 1993 Free Software Foundation, Inc.
-
-   This file is part of GNU Bash, the Bourne Again SHell.
-
-   Bash is free software; you can redistribute it and/or modify it under
-   the terms of the GNU General Public License as published by the Free
-   Software Foundation; either version 2, or (at your option) any later
-   version.
-
-   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or
-   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-   for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with Bash; see the file COPYING.  If not, write to the Free Software
-   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-
-#if !defined (_STDLIB_H_)
-#define        _STDLIB_H_ 1
-
-/* String conversion functions. */
-extern int atoi ();
-
-extern double atof ();
-extern double strtod ();
-
-/* Memory allocation functions. */
-/* Generic pointer type. */
-#ifndef PTR_T
-
-#if defined (__STDC__)
-#  define PTR_T        void *
-#else
-#  define PTR_T char *
-#endif
-
-#endif /* PTR_T */
-
-extern PTR_T malloc ();
-extern PTR_T realloc ();
-extern void free ();
-
-/* Other miscellaneous functions. */
-extern void abort ();
-extern void exit ();
-extern char *getenv ();
-extern void qsort ();
-
-#endif /* _STDLIB_H  */
diff --git a/contrib/readline-5.0/bind.c b/contrib/readline-5.0/bind.c
deleted file mode 100644 (file)
index 15d0e4e..0000000
+++ /dev/null
@@ -1,2223 +0,0 @@
-/* bind.c -- key binding and startup file support for the readline library. */
-
-/* Copyright (C) 1987, 1989, 1992 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 (__TANDEM)
-#  include <floss.h>
-#endif
-
-#if defined (HAVE_CONFIG_H)
-#  include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#if defined (HAVE_SYS_FILE_H)
-#  include <sys/file.h>
-#endif /* HAVE_SYS_FILE_H */
-
-#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 */
-
-#include <errno.h>
-
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-#include "posixstat.h"
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#include "rlprivate.h"
-#include "rlshell.h"
-#include "xmalloc.h"
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-/* Variables exported by this file. */
-Keymap rl_binding_keymap;
-
-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;
-
-/* used only in this file */
-static int _rl_prefer_visible_bell = 1;
-
-/* **************************************************************** */
-/*                                                                 */
-/*                     Binding keys                                */
-/*                                                                 */
-/* **************************************************************** */
-
-/* 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)
-     const char *name;
-     rl_command_func_t *function;
-     int key;
-{
-  if (key != -1)
-    rl_bind_key (key, function);
-  rl_add_funmap_entry (name, function);
-  return 0;
-}
-
-/* Bind KEY to FUNCTION.  Returns non-zero if KEY is out of range. */
-int
-rl_bind_key (key, function)
-     int key;
-     rl_command_func_t *function;
-{
-  if (key < 0)
-    return (key);
-
-  if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
-    {
-      if (_rl_keymap[ESC].type == ISKMAP)
-       {
-         Keymap escmap;
-
-         escmap = FUNCTION_TO_KEYMAP (_rl_keymap, ESC);
-         key = UNMETA (key);
-         escmap[key].type = ISFUNC;
-         escmap[key].function = function;
-         return (0);
-       }
-      return (key);
-    }
-
-  _rl_keymap[key].type = ISFUNC;
-  _rl_keymap[key].function = function;
-  rl_binding_keymap = _rl_keymap;
-  return (0);
-}
-
-/* Bind KEY to FUNCTION in MAP.  Returns non-zero in case of invalid
-   KEY. */
-int
-rl_bind_key_in_map (key, function, map)
-     int key;
-     rl_command_func_t *function;
-     Keymap map;
-{
-  int result;
-  Keymap oldmap;
-
-  oldmap = _rl_keymap;
-  _rl_keymap = map;
-  result = rl_bind_key (key, function);
-  _rl_keymap = oldmap;
-  return (result);
-}
-
-/* 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. */
-int
-rl_bind_key_if_unbound_in_map (key, default_func, kmap)
-     int key;
-     rl_command_func_t *default_func;
-     Keymap kmap;
-{
-  char keyseq[2];
-
-  keyseq[0] = (unsigned char)key;
-  keyseq[1] = '\0';
-  return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap));
-}
-
-int
-rl_bind_key_if_unbound (key, default_func)
-     int key;
-     rl_command_func_t *default_func;
-{
-  char keyseq[2];
-
-  keyseq[0] = (unsigned char)key;
-  keyseq[1] = '\0';
-  return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
-}
-
-/* Make KEY do nothing in the currently selected keymap.
-   Returns non-zero in case of error. */
-int
-rl_unbind_key (key)
-     int key;
-{
-  return (rl_bind_key (key, (rl_command_func_t *)NULL));
-}
-
-/* Make KEY do nothing in MAP.
-   Returns non-zero in case of error. */
-int
-rl_unbind_key_in_map (key, map)
-     int key;
-     Keymap 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)
-     rl_command_func_t *func;
-     Keymap map;
-{
-  register int i, rval;
-
-  for (i = rval = 0; i < KEYMAP_SIZE; i++)
-    {
-      if (map[i].type == ISFUNC && map[i].function == func)
-       {
-         map[i].function = (rl_command_func_t *)NULL;
-         rval = 1;
-       }
-    }
-  return rval;
-}
-
-int
-rl_unbind_command_in_map (command, map)
-     const char *command;
-     Keymap map;
-{
-  rl_command_func_t *func;
-
-  func = rl_named_function (command);
-  if (func == 0)
-    return 0;
-  return (rl_unbind_function_in_map (func, map));
-}
-
-/* Bind the key sequence represented by the string KEYSEQ to
-   FUNCTION, starting in the current keymap.  This makes new
-   keymaps as necessary. */
-int
-rl_bind_keyseq (keyseq, function)
-     const char *keyseq;
-     rl_command_func_t *function;
-{
-  return (rl_generic_bind (ISFUNC, keyseq, (char *)function, _rl_keymap));
-}
-
-/* Bind the key sequence represented by the string KEYSEQ to
-   FUNCTION.  This makes new keymaps as necessary.  The initial
-   place to do bindings is in MAP. */
-int
-rl_bind_keyseq_in_map (keyseq, function, map)
-     const char *keyseq;
-     rl_command_func_t *function;
-     Keymap map;
-{
-  return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map));
-}
-
-/* Backwards compatibility; equivalent to rl_bind_keyseq_in_map() */
-int
-rl_set_key (keyseq, function, map)
-     const char *keyseq;
-     rl_command_func_t *function;
-     Keymap map;
-{
-  return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map));
-}
-
-/* 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. */
-int
-rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap)
-     const char *keyseq;
-     rl_command_func_t *default_func;
-     Keymap kmap;
-{
-  rl_command_func_t *func;
-
-  if (keyseq)
-    {
-      func = rl_function_of_keyseq (keyseq, kmap, (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
-       return (rl_bind_keyseq_in_map (keyseq, default_func, kmap));
-      else
-       return 1;
-    }
-  return 0;
-}
-
-int
-rl_bind_keyseq_if_unbound (keyseq, default_func)
-     const char *keyseq;
-     rl_command_func_t *default_func;
-{
-  return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
-}
-
-/* Bind the key sequence represented by the string KEYSEQ to
-   the string of characters MACRO.  This makes new keymaps as
-   necessary.  The initial place to do bindings is in MAP. */
-int
-rl_macro_bind (keyseq, macro, map)
-     const char *keyseq, *macro;
-     Keymap map;
-{
-  char *macro_keys;
-  int macro_keys_len;
-
-  macro_keys = (char *)xmalloc ((2 * strlen (macro)) + 1);
-
-  if (rl_translate_keyseq (macro, macro_keys, &macro_keys_len))
-    {
-      free (macro_keys);
-      return -1;
-    }
-  rl_generic_bind (ISMACR, keyseq, macro_keys, map);
-  return 0;
-}
-
-/* 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, right now this can be a function (ISFUNC),
-   a macro (ISMACR), or a keymap (ISKMAP).  This makes new keymaps
-   as necessary.  The initial place to do bindings is in MAP. */
-int
-rl_generic_bind (type, keyseq, data, map)
-     int type;
-     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)
-    {
-      if (type == ISMACR)
-       free (data);
-      return -1;
-    }
-
-  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
-     KEYS into KEYS_LEN. */
-  if (rl_translate_keyseq (keyseq, keys, &keys_len))
-    {
-      free (keys);
-      return -1;
-    }
-
-  /* Bind keys, making new keymaps as necessary. */
-  for (i = 0; i < keys_len; 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))
-       {
-         ic = UNMETA (ic);
-         if (map[ESC].type == ISKMAP)
-           map = FUNCTION_TO_KEYMAP (map, ESC);
-       }
-
-      if ((i + 1) < keys_len)
-       {
-         if (map[ic].type != ISKMAP)
-           {
-             /* 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 && k.function != rl_do_lowercase_version) || k.type == ISMACR))
-           {
-             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;
-       }
-
-      rl_binding_keymap = map;
-    }
-  free (keys);
-  return 0;
-}
-
-/* Translate the ASCII representation of SEQ, stuffing the values into ARRAY,
-   an array of characters.  LEN gets the final length of ARRAY.  Return
-   non-zero if there was an error parsing SEQ. */
-int
-rl_translate_keyseq (seq, array, len)
-     const char *seq;
-     char *array;
-     int *len;
-{
-  register int i, c, l, temp;
-
-  for (i = l = 0; c = seq[i]; i++)
-    {
-      if (c == '\\')
-       {
-         c = seq[++i];
-
-         if (c == 0)
-           break;
-
-         /* Handle \C- and \M- prefixes. */
-         if ((c == 'C' || c == 'M') && seq[i + 1] == '-')
-           {
-             /* Handle special case of backwards define. */
-             if (strncmp (&seq[i], "C-\\M-", 5) == 0)
-               {
-                 array[l++] = ESC;     /* ESC is meta-prefix */
-                 i += 5;
-                 array[l++] = CTRL (_rl_to_upper (seq[i]));
-                 if (seq[i] == '\0')
-                   i--;
-               }
-             else if (c == 'M')
-               {
-                 i++;
-                 array[l++] = ESC;     /* ESC is meta-prefix */
-               }
-             else if (c == 'C')
-               {
-                 i += 2;
-                 /* Special hack for C-?... */
-                 array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
-               }
-             continue;
-           }         
-
-         /* Translate other backslash-escaped characters.  These are the
-            same escape sequences that bash's `echo' and `printf' builtins
-            handle, with the addition of \d -> RUBOUT.  A backslash
-            preceding a character that is not special is stripped. */
-         switch (c)
-           {
-           case 'a':
-             array[l++] = '\007';
-             break;
-           case 'b':
-             array[l++] = '\b';
-             break;
-           case 'd':
-             array[l++] = RUBOUT;      /* readline-specific */
-             break;
-           case 'e':
-             array[l++] = ESC;
-             break;
-           case 'f':
-             array[l++] = '\f';
-             break;
-           case 'n':
-             array[l++] = NEWLINE;
-             break;
-           case 'r':
-             array[l++] = RETURN;
-             break;
-           case 't':
-             array[l++] = TAB;
-             break;
-           case 'v':
-             array[l++] = 0x0B;
-             break;
-           case '\\':
-             array[l++] = '\\';
-             break;
-           case '0': case '1': case '2': case '3':
-           case '4': case '5': case '6': case '7':
-             i++;
-             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;
-             break;
-           case 'x':
-             i++;
-             for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++)
-               c = (c * 16) + HEXVALUE (seq[i]);
-             if (temp == 2)
-               c = 'x';
-             i--;      /* auto-increment in for loop */
-             array[l++] = c & largest_char;
-             break;
-           default:    /* backslashes before non-special chars just add the char */
-             array[l++] = c;
-             break;    /* the backslash is stripped */
-           }
-         continue;
-       }
-
-      array[l++] = c;
-    }
-
-  *len = l;
-  array[l] = '\0';
-  return (0);
-}
-
-char *
-rl_untranslate_keyseq (seq)
-     int seq;
-{
-  static char kseq[16];
-  int i, c;
-
-  i = 0;
-  c = seq;
-  if (META_CHAR (c))
-    {
-      kseq[i++] = '\\';
-      kseq[i++] = 'M';
-      kseq[i++] = '-';
-      c = UNMETA (c);
-    }
-  else if (CTRL_CHAR (c))
-    {
-      kseq[i++] = '\\';
-      kseq[i++] = 'C';
-      kseq[i++] = '-';
-      c = _rl_to_lower (UNCTRL (c));
-    }
-  else if (c == RUBOUT)
-    {
-      kseq[i++] = '\\';
-      kseq[i++] = 'C';
-      kseq[i++] = '-';
-      c = '?';
-    }
-
-  if (c == ESC)
-    {
-      kseq[i++] = '\\';
-      c = 'e';
-    }
-  else if (c == '\\' || c == '"')
-    {
-      kseq[i++] = '\\';
-    }
-
-  kseq[i++] = (unsigned char) c;
-  kseq[i] = '\0';
-  return kseq;
-}
-
-static char *
-_rl_untranslate_macro_value (seq)
-     char *seq;
-{
-  char *ret, *r, *s;
-  int c;
-
-  r = ret = (char *)xmalloc (7 * strlen (seq) + 1);
-  for (s = seq; *s; s++)
-    {
-      c = *s;
-      if (META_CHAR (c))
-       {
-         *r++ = '\\';
-         *r++ = 'M';
-         *r++ = '-';
-         c = UNMETA (c);
-       }
-      else if (CTRL_CHAR (c) && c != ESC)
-       {
-         *r++ = '\\';
-         *r++ = 'C';
-         *r++ = '-';
-         c = _rl_to_lower (UNCTRL (c));
-       }
-      else if (c == RUBOUT)
-       {
-         *r++ = '\\';
-         *r++ = 'C';
-         *r++ = '-';
-         c = '?';
-       }
-
-      if (c == ESC)
-       {
-         *r++ = '\\';
-         c = 'e';
-       }
-      else if (c == '\\' || c == '"')
-       *r++ = '\\';
-
-      *r++ = (unsigned char)c;
-    }
-  *r = '\0';
-  return ret;
-}
-
-/* Return a pointer to the function that STRING represents.
-   If STRING doesn't have a matching function, then a NULL pointer
-   is returned. */
-rl_command_func_t *
-rl_named_function (string)
-     const char *string;
-{
-  register int i;
-
-  rl_initialize_funmap ();
-
-  for (i = 0; funmap[i]; i++)
-    if (_rl_stricmp (funmap[i]->name, string) == 0)
-      return (funmap[i]->function);
-  return ((rl_command_func_t *)NULL);
-}
-
-/* Return the function (or macro) definition which would be invoked via
-   KEYSEQ if executed in MAP.  If MAP is NULL, then the current keymap is
-   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). */
-rl_command_func_t *
-rl_function_of_keyseq (keyseq, map, type)
-     const char *keyseq;
-     Keymap map;
-     int *type;
-{
-  register int i;
-
-  if (!map)
-    map = _rl_keymap;
-
-  for (i = 0; keyseq && keyseq[i]; i++)
-    {
-      unsigned char ic = keyseq[i];
-
-      if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
-       {
-         if (map[ESC].type != ISKMAP)
-           {
-             if (type)
-               *type = map[ESC].type;
-
-             return (map[ESC].function);
-           }
-         else
-           {
-             map = FUNCTION_TO_KEYMAP (map, ESC);
-             ic = UNMETA (ic);
-           }
-       }
-
-      if (map[ic].type == ISKMAP)
-       {
-         /* If this is the last key in the key sequence, return the
-            map. */
-         if (!keyseq[i + 1])
-           {
-             if (type)
-               *type = ISKMAP;
-
-             return (map[ic].function);
-           }
-         else
-           map = FUNCTION_TO_KEYMAP (map, ic);
-       }
-      else
-       {
-         if (type)
-           *type = map[ic].type;
-
-         return (map[ic].function);
-       }
-    }
-  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 const char *current_readline_init_file;
-static int current_readline_init_include_level;
-static int current_readline_init_lineno;
-
-/* Read FILENAME into a locally-allocated buffer and return the buffer.
-   The size of the buffer is returned in *SIZEP.  Returns NULL if any
-   errors were encountered. */
-static char *
-_rl_read_file (filename, sizep)
-     char *filename;
-     size_t *sizep;
-{
-  struct stat finfo;
-  size_t file_size;
-  char *buffer;
-  int i, file;
-
-  if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0)
-    return ((char *)NULL);
-
-  file_size = (size_t)finfo.st_size;
-
-  /* check for overflow on very large files */
-  if (file_size != finfo.st_size || file_size + 1 < file_size)
-    {
-      if (file >= 0)
-       close (file);
-#if defined (EFBIG)
-      errno = EFBIG;
-#endif
-      return ((char *)NULL);
-    }
-
-  /* Read the file into BUFFER. */
-  buffer = (char *)xmalloc (file_size + 1);
-  i = read (file, buffer, file_size);
-  close (file);
-
-  if (i < 0)
-    {
-      free (buffer);
-      return ((char *)NULL);
-    }
-
-  buffer[i] = '\0';
-  if (sizep)
-    *sizep = i;
-
-  return (buffer);
-}
-
-/* Re-read the current keybindings file. */
-int
-rl_re_read_init_file (count, ignore)
-     int count, ignore;
-{
-  int r;
-  r = rl_read_init_file ((const char *)NULL);
-  rl_set_keymap_from_edit_mode ();
-  return r;
-}
-
-/* Do key bindings from a file.  If FILENAME is NULL it defaults
-   to the first non-null filename from this list:
-     1. the filename used for the previous call
-     2. the value of the shell variable `INPUTRC'
-     3. ~/.inputrc
-   If the file existed and could be opened and read, 0 is returned,
-   otherwise errno is returned. */
-int
-rl_read_init_file (filename)
-     const char *filename;
-{
-  /* Default the filename. */
-  if (filename == 0)
-    {
-      filename = last_readline_init_file;
-      if (filename == 0)
-        filename = sh_get_env_value ("INPUTRC");
-      if (filename == 0)
-       filename = DEFAULT_INPUTRC;
-    }
-
-  if (*filename == 0)
-    filename = DEFAULT_INPUTRC;
-
-#if defined (__MSDOS__)
-  if (_rl_read_init_file (filename, 0) == 0)
-    return 0;
-  filename = "~/_inputrc";
-#endif
-  return (_rl_read_init_file (filename, 0));
-}
-
-static int
-_rl_read_init_file (filename, include_level)
-     const char *filename;
-     int include_level;
-{
-  register int i;
-  char *buffer, *openname, *line, *end;
-  size_t file_size;
-
-  current_readline_init_file = filename;
-  current_readline_init_include_level = include_level;
-
-  openname = tilde_expand (filename);
-  buffer = _rl_read_file (openname, &file_size);
-  free (openname);
-
-  if (buffer == 0)
-    return (errno);
-  
-  if (include_level == 0 && filename != last_readline_init_file)
-    {
-      FREE (last_readline_init_file);
-      last_readline_init_file = savestring (filename);
-    }
-
-  currently_reading_init_file = 1;
-
-  /* Loop over the lines in the file.  Lines that start with `#' are
-     comments; all other lines are commands for readline initialization. */
-  current_readline_init_lineno = 1;
-  line = buffer;
-  end = buffer + file_size;
-  while (line < end)
-    {
-      /* Find the end of this line. */
-      for (i = 0; line + i != end && line[i] != '\n'; i++);
-
-#if defined (__CYGWIN__)
-      /* ``Be liberal in what you accept.'' */
-      if (line[i] == '\n' && line[i-1] == '\r')
-       line[i - 1] = '\0';
-#endif
-
-      /* Mark end of line. */
-      line[i] = '\0';
-
-      /* Skip leading whitespace. */
-      while (*line && whitespace (*line))
-        {
-         line++;
-         i--;
-        }
-
-      /* If the line is not a comment, then parse it. */
-      if (*line && *line != '#')
-       rl_parse_and_bind (line);
-
-      /* Move to the next line. */
-      line += i + 1;
-      current_readline_init_lineno++;
-    }
-
-  free (buffer);
-  currently_reading_init_file = 0;
-  return (0);
-}
-
-static void
-_rl_init_file_error (msg)
-     const char *msg;
-{
-  if (currently_reading_init_file)
-    fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
-                    current_readline_init_lineno, msg);
-  else
-    fprintf (stderr, "readline: %s\n", msg);
-}
-
-/* **************************************************************** */
-/*                                                                 */
-/*                     Parser Directives                           */
-/*                                                                 */
-/* **************************************************************** */
-
-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]. */
-const char *rl_readline_name = "other";
-
-/* Stack of previous values of parsing_conditionalized_out. */
-static unsigned char *if_stack = (unsigned char *)NULL;
-static int if_stack_depth;
-static int if_stack_size;
-
-/* Push _rl_parsing_conditionalized_out, and set parser state based
-   on ARGS. */
-static int
-parser_if (args)
-     char *args;
-{
-  register int i;
-
-  /* Push parser state. */
-  if (if_stack_depth + 1 >= if_stack_size)
-    {
-      if (!if_stack)
-       if_stack = (unsigned char *)xmalloc (if_stack_size = 20);
-      else
-       if_stack = (unsigned char *)xrealloc (if_stack, if_stack_size += 20);
-    }
-  if_stack[if_stack_depth++] = _rl_parsing_conditionalized_out;
-
-  /* If parsing is turned off, then nothing can turn it back on except
-     for finding the matching endif.  In that case, return right now. */
-  if (_rl_parsing_conditionalized_out)
-    return 0;
-
-  /* Isolate first argument. */
-  for (i = 0; args[i] && !whitespace (args[i]); i++);
-
-  if (args[i])
-    args[i++] = '\0';
-
-  /* Handle "$if term=foo" and "$if mode=emacs" constructs.  If this
-     isn't term=foo, or mode=emacs, then check to see if the first
-     word in ARGS is the same as the value stored in rl_readline_name. */
-  if (rl_terminal_name && _rl_strnicmp (args, "term=", 5) == 0)
-    {
-      char *tem, *tname;
-
-      /* Terminals like "aaa-60" are equivalent to "aaa". */
-      tname = savestring (rl_terminal_name);
-      tem = strchr (tname, '-');
-      if (tem)
-       *tem = '\0';
-
-      /* Test the `long' and `short' forms of the terminal name so that
-        if someone has a `sun-cmd' and does not want to have bindings
-        that will be executed if the terminal is a `sun', they can put
-        `$if term=sun-cmd' into their .inputrc. */
-      _rl_parsing_conditionalized_out = _rl_stricmp (args + 5, tname) &&
-                                       _rl_stricmp (args + 5, rl_terminal_name);
-      free (tname);
-    }
-#if defined (VI_MODE)
-  else if (_rl_strnicmp (args, "mode=", 5) == 0)
-    {
-      int mode;
-
-      if (_rl_stricmp (args + 5, "emacs") == 0)
-       mode = emacs_mode;
-      else if (_rl_stricmp (args + 5, "vi") == 0)
-       mode = vi_mode;
-      else
-       mode = no_mode;
-
-      _rl_parsing_conditionalized_out = mode != rl_editing_mode;
-    }
-#endif /* VI_MODE */
-  /* Check to see if the first word in ARGS is the same as the
-     value stored in rl_readline_name. */
-  else if (_rl_stricmp (args, rl_readline_name) == 0)
-    _rl_parsing_conditionalized_out = 0;
-  else
-    _rl_parsing_conditionalized_out = 1;
-  return 0;
-}
-
-/* Invert the current parser state if there is anything on the stack. */
-static int
-parser_else (args)
-     char *args;
-{
-  register int i;
-
-  if (if_stack_depth == 0)
-    {
-      _rl_init_file_error ("$else found without matching $if");
-      return 0;
-    }
-
-#if 0
-  /* Check the previous (n - 1) levels of the stack to make sure that
-     we haven't previously turned off parsing. */
-  for (i = 0; i < if_stack_depth - 1; i++)
-#else
-  /* Check the previous (n) levels of the stack to make sure that
-     we haven't previously turned off parsing. */
-  for (i = 0; i < if_stack_depth; i++)
-#endif
-    if (if_stack[i] == 1)
-      return 0;
-
-  /* Invert the state of parsing if at top level. */
-  _rl_parsing_conditionalized_out = !_rl_parsing_conditionalized_out;
-  return 0;
-}
-
-/* Terminate a conditional, popping the value of
-   _rl_parsing_conditionalized_out from the stack. */
-static int
-parser_endif (args)
-     char *args;
-{
-  if (if_stack_depth)
-    _rl_parsing_conditionalized_out = if_stack[--if_stack_depth];
-  else
-    _rl_init_file_error ("$endif without matching $if");
-  return 0;
-}
-
-static int
-parser_include (args)
-     char *args;
-{
-  const char *old_init_file;
-  char *e;
-  int old_line_number, old_include_level, r;
-
-  if (_rl_parsing_conditionalized_out)
-    return (0);
-
-  old_init_file = current_readline_init_file;
-  old_line_number = current_readline_init_lineno;
-  old_include_level = current_readline_init_include_level;
-
-  e = strchr (args, '\n');
-  if (e)
-    *e = '\0';
-  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;
-  current_readline_init_include_level = old_include_level;
-
-  return r;
-}
-  
-/* Associate textual names with actual functions. */
-static struct {
-  const char *name;
-  _rl_parser_func_t *function;
-} parser_directives [] = {
-  { "if", parser_if },
-  { "endif", parser_endif },
-  { "else", parser_else },
-  { "include", parser_include },
-  { (char *)0x0, (_rl_parser_func_t *)0x0 }
-};
-
-/* Handle a parser directive.  STATEMENT is the line of the directive
-   without any leading `$'. */
-static int
-handle_parser_directive (statement)
-     char *statement;
-{
-  register int i;
-  char *directive, *args;
-
-  /* Isolate the actual directive. */
-
-  /* Skip whitespace. */
-  for (i = 0; whitespace (statement[i]); i++);
-
-  directive = &statement[i];
-
-  for (; statement[i] && !whitespace (statement[i]); i++);
-
-  if (statement[i])
-    statement[i++] = '\0';
-
-  for (; statement[i] && whitespace (statement[i]); i++);
-
-  args = &statement[i];
-
-  /* Lookup the command, and act on it. */
-  for (i = 0; parser_directives[i].name; i++)
-    if (_rl_stricmp (directive, parser_directives[i].name) == 0)
-      {
-       (*parser_directives[i].function) (args);
-       return (0);
-      }
-
-  /* display an error message about the unknown parser directive */
-  _rl_init_file_error ("unknown parser directive");
-  return (1);
-}
-
-/* Read the binding command from STRING and perform it.
-   A key binding command looks like: Keyname: function-name\0,
-   a variable binding command looks like: set variable value.
-   A new-style keybinding looks like "\C-x\C-x": exchange-point-and-mark. */
-int
-rl_parse_and_bind (string)
-     char *string;
-{
-  char *funname, *kname;
-  register int c, i;
-  int key, equivalency;
-
-  while (string && whitespace (*string))
-    string++;
-
-  if (!string || !*string || *string == '#')
-    return 0;
-
-  /* If this is a parser directive, act on it. */
-  if (*string == '$')
-    {
-      handle_parser_directive (&string[1]);
-      return 0;
-    }
-
-  /* If we aren't supposed to be parsing right now, then we're done. */
-  if (_rl_parsing_conditionalized_out)
-    return 0;
-
-  i = 0;
-  /* If this keyname is a complex key expression surrounded by quotes,
-     advance to after the matching close quote.  This code allows the
-     backslash to quote characters in the key expression. */
-  if (*string == '"')
-    {
-      int passc = 0;
-
-      for (i = 1; c = string[i]; i++)
-       {
-         if (passc)
-           {
-             passc = 0;
-             continue;
-           }
-
-         if (c == '\\')
-           {
-             passc++;
-             continue;
-           }
-
-         if (c == '"')
-           break;
-       }
-      /* If we didn't find a closing quote, abort the line. */
-      if (string[i] == '\0')
-        {
-          _rl_init_file_error ("no closing `\"' in key binding");
-          return 1;
-        }
-    }
-
-  /* Advance to the colon (:) or whitespace which separates the two objects. */
-  for (; (c = string[i]) && c != ':' && c != ' ' && c != '\t'; i++ );
-
-  equivalency = (c == ':' && string[i + 1] == '=');
-
-  /* Mark the end of the command (or keyname). */
-  if (string[i])
-    string[i++] = '\0';
-
-  /* If doing assignment, skip the '=' sign as well. */
-  if (equivalency)
-    string[i++] = '\0';
-
-  /* If this is a command to set a variable, then do that. */
-  if (_rl_stricmp (string, "set") == 0)
-    {
-      char *var = string + i;
-      char *value;
-
-      /* Make VAR point to start of variable name. */
-      while (*var && whitespace (*var)) var++;
-
-      /* Make VALUE point to start of value string. */
-      value = var;
-      while (*value && !whitespace (*value)) value++;
-      if (*value)
-       *value++ = '\0';
-      while (*value && whitespace (*value)) value++;
-
-      rl_variable_bind (var, value);
-      return 0;
-    }
-
-  /* Skip any whitespace between keyname and funname. */
-  for (; string[i] && whitespace (string[i]); i++);
-  funname = &string[i];
-
-  /* Now isolate funname.
-     For straight function names just look for whitespace, since
-     that will signify the end of the string.  But this could be a
-     macro definition.  In that case, the string is quoted, so skip
-     to the matching delimiter.  We allow the backslash to quote the
-     delimiter characters in the macro body. */
-  /* This code exists to allow whitespace in macro expansions, which
-     would otherwise be gobbled up by the next `for' loop.*/
-  /* XXX - it may be desirable to allow backslash quoting only if " is
-     the quoted string delimiter, like the shell. */
-  if (*funname == '\'' || *funname == '"')
-    {
-      int delimiter = string[i++], passc;
-
-      for (passc = 0; c = string[i]; i++)
-       {
-         if (passc)
-           {
-             passc = 0;
-             continue;
-           }
-
-         if (c == '\\')
-           {
-             passc = 1;
-             continue;
-           }
-
-         if (c == delimiter)
-           break;
-       }
-      if (c)
-       i++;
-    }
-
-  /* Advance to the end of the string.  */
-  for (; string[i] && !whitespace (string[i]); i++);
-
-  /* No extra whitespace at the end of the string. */
-  string[i] = '\0';
-
-  /* Handle equivalency bindings here.  Make the left-hand side be exactly
-     whatever the right-hand evaluates to, including keymaps. */
-  if (equivalency)
-    {
-      return 0;
-    }
-
-  /* If this is a new-style key-binding, then do the binding with
-     rl_bind_keyseq ().  Otherwise, let the older code deal with it. */
-  if (*string == '"')
-    {
-      char *seq;
-      register int j, k, passc;
-
-      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.
-            This allows a string to end with a backslash quoting another
-            backslash, or with a backslash quoting a double quote.  The
-            backslashes are left in place for rl_translate_keyseq (). */
-         if (passc || (string[j] == '\\'))
-           {
-             seq[k++] = string[j];
-             passc = !passc;
-             continue;
-           }
-
-         if (string[j] == '"')
-           break;
-
-         seq[k++] = string[j];
-       }
-      seq[k] = '\0';
-
-      /* Binding macro? */
-      if (*funname == '\'' || *funname == '"')
-       {
-         j = strlen (funname);
-
-         /* Remove the delimiting quotes from each end of FUNNAME. */
-         if (j && funname[j - 1] == *funname)
-           funname[j - 1] = '\0';
-
-         rl_macro_bind (seq, &funname[1], _rl_keymap);
-       }
-      else
-       rl_bind_keyseq (seq, rl_named_function (funname));
-
-      free (seq);
-      return 0;
-    }
-
-  /* Get the actual character we want to deal with. */
-  kname = strrchr (string, '-');
-  if (!kname)
-    kname = string;
-  else
-    kname++;
-
-  key = glean_key_from_name (kname);
-
-  /* Add in control and meta bits. */
-  if (substring_member_of_array (string, _rl_possible_control_prefixes))
-    key = CTRL (_rl_to_upper (key));
-
-  if (substring_member_of_array (string, _rl_possible_meta_prefixes))
-    key = META (key);
-
-  /* Temporary.  Handle old-style keyname with macro-binding. */
-  if (*funname == '\'' || *funname == '"')
-    {
-      char useq[2];
-      int fl = strlen (funname);
-
-      useq[0] = key; useq[1] = '\0';
-      if (fl && funname[fl - 1] == *funname)
-       funname[fl - 1] = '\0';
-
-      rl_macro_bind (useq, &funname[1], _rl_keymap);
-    }
-#if defined (PREFIX_META_HACK)
-  /* Ugly, but working hack to keep prefix-meta around. */
-  else if (_rl_stricmp (funname, "prefix-meta") == 0)
-    {
-      char seq[2];
-
-      seq[0] = key;
-      seq[1] = '\0';
-      rl_generic_bind (ISKMAP, seq, (char *)emacs_meta_keymap, _rl_keymap);
-    }
-#endif /* PREFIX_META_HACK */
-  else
-    rl_bind_key (key, rl_named_function (funname));
-  return 0;
-}
-
-/* Simple structure for boolean readline variables (i.e., those that can
-   have one of two values; either "On" or 1 for truth, or "Off" or 0 for
-   false. */
-
-#define V_SPECIAL      0x1
-
-static struct {
-  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 },
-  { "show-all-if-unmodified",  &_rl_complete_show_unmodified,  0 },
-#if defined (VISIBLE_STATS)
-  { "visible-stats",           &rl_visible_stats,              0 },
-#endif /* VISIBLE_STATS */
-  { (char *)NULL, (int *)NULL }
-};
-
-static int
-find_boolean_var (name)
-     const char *name;
-{
-  register int i;
-
-  for (i = 0; boolean_varlist[i].name; i++)
-    if (_rl_stricmp (name, boolean_varlist[i].name) == 0)
-      return i;
-  return -1;
-}
-
-/* Hooks for handling special boolean variables, where a
-   function needs to be called or another variable needs
-   to be changed when they're changed. */
-static void
-hack_special_boolean_var (i)
-     int i;
-{
-  const char *name;
-
-  name = boolean_varlist[i].name;
-
-  if (_rl_stricmp (name, "blink-matching-paren") == 0)
-    _rl_enable_paren_matching (rl_blink_matching_paren);
-  else if (_rl_stricmp (name, "prefer-visible-bell") == 0)
-    {
-      if (_rl_prefer_visible_bell)
-       _rl_bell_preference = VISIBLE_BELL;
-      else
-       _rl_bell_preference = AUDIBLE_BELL;
-    }
-}
-
-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
-#define V_COMBEGIN     1
-#define V_EDITMODE     2
-#define V_ISRCHTERM    3
-#define V_KEYMAP       4
-
-#define        V_STRING        1
-#define V_INT          2
-
-/* Forward declarations */
-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 {
-  const char *name;
-  int flags;
-  _rl_sv_func_t *set_func;
-} string_varlist[] = {
-  { "bell-style",      V_STRING,       sv_bell_style },
-  { "comment-begin",   V_STRING,       sv_combegin },
-  { "completion-query-items", V_INT,   sv_compquery },
-  { "editing-mode",    V_STRING,       sv_editmode },
-  { "isearch-terminators", V_STRING,   sv_isrchterm },
-  { "keymap",          V_STRING,       sv_keymap },
-  { (char *)NULL,      0 }
-};
-
-static int
-find_string_var (name)
-     const char *name;
-{
-  register int i;
-
-  for (i = 0; string_varlist[i].name; i++)
-    if (_rl_stricmp (name, string_varlist[i].name) == 0)
-      return i;
-  return -1;
-}
-
-/* A boolean value that can appear in a `set variable' command is true if
-   the value is null or empty, `on' (case-insenstive), or "1".  Any other
-   values result in 0 (false). */
-static int
-bool_to_int (value)
-     char *value;
-{
-  return (value == 0 || *value == '\0' ||
-               (_rl_stricmp (value, "on") == 0) ||
-               (value[0] == '1' && value[1] == '\0'));
-}
-
-int
-rl_variable_bind (name, value)
-     const char *name, *value;
-{
-  register int i;
-  int  v;
-
-  /* Check for simple variables first. */
-  i = find_boolean_var (name);
-  if (i >= 0)
-    {
-      *boolean_varlist[i].value = bool_to_int (value);
-      if (boolean_varlist[i].flags & V_SPECIAL)
-       hack_special_boolean_var (i);
-      return 0;
-    }
-
-  i = find_string_var (name);
-
-  /* For the time being, unknown variable names or string names without a
-     handler function are simply ignored. */
-  if (i < 0 || string_varlist[i].set_func == 0)
-    return 0;
-
-  v = (*string_varlist[i].set_func) (value);
-  return v;
-}
-
-static int
-sv_editmode (value)
-     const char *value;
-{
-  if (_rl_strnicmp (value, "vi", 2) == 0)
-    {
-#if defined (VI_MODE)
-      _rl_keymap = vi_insertion_keymap;
-      rl_editing_mode = vi_mode;
-#endif /* VI_MODE */
-      return 0;
-    }
-  else if (_rl_strnicmp (value, "emacs", 5) == 0)
-    {
-      _rl_keymap = emacs_standard_keymap;
-      rl_editing_mode = emacs_mode;
-      return 0;
-    }
-  return 1;
-}
-
-static int
-sv_combegin (value)
-     const char *value;
-{
-  if (value && *value)
-    {
-      FREE (_rl_comment_begin);
-      _rl_comment_begin = savestring (value);
-      return 0;
-    }
-  return 1;
-}
-
-static int
-sv_compquery (value)
-     const char *value;
-{
-  int nval = 100;
-
-  if (value && *value)
-    {
-      nval = atoi (value);
-      if (nval < 0)
-       nval = 0;
-    }
-  rl_completion_query_items = nval;
-  return 0;
-}
-
-static int
-sv_keymap (value)
-     const char *value;
-{
-  Keymap kmap;
-
-  kmap = rl_get_keymap_by_name (value);
-  if (kmap)
-    {
-      rl_set_keymap (kmap);
-      return 0;
-    }
-  return 1;
-}
-
-static int
-sv_bell_style (value)
-     const char *value;
-{
-  if (value == 0 || *value == '\0')
-    _rl_bell_preference = AUDIBLE_BELL;
-  else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0)
-    _rl_bell_preference = NO_BELL;
-  else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0)
-    _rl_bell_preference = AUDIBLE_BELL;
-  else if (_rl_stricmp (value, "visible") == 0)
-    _rl_bell_preference = VISIBLE_BELL;
-  else
-    return 1;
-  return 0;
-}
-
-static int
-sv_isrchterm (value)
-     const char *value;
-{
-  int beg, end, delim;
-  char *v;
-
-  if (value == 0)
-    return 1;
-
-  /* Isolate the value and translate it into a character string. */
-  v = savestring (value);
-  FREE (_rl_isearch_terminators);
-  if (v[0] == '"' || v[0] == '\'')
-    {
-      delim = v[0];
-      for (beg = end = 1; v[end] && v[end] != delim; end++)
-       ;
-    }
-  else
-    {
-      for (beg = end = 0; whitespace (v[end]) == 0; end++)
-       ;
-    }
-
-  v[end] = '\0';
-
-  /* The value starts at v + beg.  Translate it into a character string. */
-  _rl_isearch_terminators = (char *)xmalloc (2 * strlen (v) + 1);
-  rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
-  _rl_isearch_terminators[end] = '\0';
-
-  free (v);
-  return 0;
-}
-      
-/* Return the character which matches NAME.
-   For example, `Space' returns ' '. */
-
-typedef struct {
-  const char *name;
-  int value;
-} assoc_list;
-
-static assoc_list name_key_alist[] = {
-  { "DEL", 0x7f },
-  { "ESC", '\033' },
-  { "Escape", '\033' },
-  { "LFD", '\n' },
-  { "Newline", '\n' },
-  { "RET", '\r' },
-  { "Return", '\r' },
-  { "Rubout", 0x7f },
-  { "SPC", ' ' },
-  { "Space", ' ' },
-  { "Tab", 0x09 },
-  { (char *)0x0, 0 }
-};
-
-static int
-glean_key_from_name (name)
-     char *name;
-{
-  register int i;
-
-  for (i = 0; name_key_alist[i].name; i++)
-    if (_rl_stricmp (name, name_key_alist[i].name) == 0)
-      return (name_key_alist[i].value);
-
-  return (*(unsigned char *)name);     /* XXX was return (*name) */
-}
-
-/* Auxiliary functions to manage keymaps. */
-static struct {
-  const char *name;
-  Keymap map;
-} keymap_names[] = {
-  { "emacs", emacs_standard_keymap },
-  { "emacs-standard", emacs_standard_keymap },
-  { "emacs-meta", emacs_meta_keymap },
-  { "emacs-ctlx", emacs_ctlx_keymap },
-#if defined (VI_MODE)
-  { "vi", vi_movement_keymap },
-  { "vi-move", vi_movement_keymap },
-  { "vi-command", vi_movement_keymap },
-  { "vi-insert", vi_insertion_keymap },
-#endif /* VI_MODE */
-  { (char *)0x0, (Keymap)0x0 }
-};
-
-Keymap
-rl_get_keymap_by_name (name)
-     const char *name;
-{
-  register int i;
-
-  for (i = 0; keymap_names[i].name; i++)
-    if (_rl_stricmp (name, keymap_names[i].name) == 0)
-      return (keymap_names[i].map);
-  return ((Keymap) NULL);
-}
-
-char *
-rl_get_keymap_name (map)
-     Keymap map;
-{
-  register int i;
-  for (i = 0; keymap_names[i].name; i++)
-    if (map == keymap_names[i].map)
-      return ((char *)keymap_names[i].name);
-  return ((char *)NULL);
-}
-  
-void
-rl_set_keymap (map)
-     Keymap map;
-{
-  if (map)
-    _rl_keymap = map;
-}
-
-Keymap
-rl_get_keymap ()
-{
-  return (_rl_keymap);
-}
-
-void
-rl_set_keymap_from_edit_mode ()
-{
-  if (rl_editing_mode == emacs_mode)
-    _rl_keymap = emacs_standard_keymap;
-#if defined (VI_MODE)
-  else if (rl_editing_mode == vi_mode)
-    _rl_keymap = vi_insertion_keymap;
-#endif /* VI_MODE */
-}
-
-char *
-rl_get_keymap_name_from_edit_mode ()
-{
-  if (rl_editing_mode == emacs_mode)
-    return "emacs";
-#if defined (VI_MODE)
-  else if (rl_editing_mode == vi_mode)
-    return "vi";
-#endif /* VI_MODE */
-  else
-    return "none";
-}
-
-/* **************************************************************** */
-/*                                                                 */
-/*               Key Binding and Function Information              */
-/*                                                                 */
-/* **************************************************************** */
-
-/* Each of the following functions produces information about the
-   state of keybindings and functions known to Readline.  The info
-   is always printed to rl_outstream, and in such a way that it can
-   be read back in (i.e., passed to rl_parse_and_bind ()). */
-
-/* Print the names of functions known to Readline. */
-void
-rl_list_funmap_names ()
-{
-  register int i;
-  const char **funmap_names;
-
-  funmap_names = rl_funmap_names ();
-
-  if (!funmap_names)
-    return;
-
-  for (i = 0; funmap_names[i]; i++)
-    fprintf (rl_outstream, "%s\n", funmap_names[i]);
-
-  free (funmap_names);
-}
-
-static char *
-_rl_get_keyname (key)
-     int key;
-{
-  char *keyname;
-  int i, c;
-
-  keyname = (char *)xmalloc (8);
-
-  c = key;
-  /* Since this is going to be used to write out keysequence-function
-     pairs for possible inclusion in an inputrc file, we don't want to
-     do any special meta processing on KEY. */
-
-#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)
-    {
-      keyname[0] = '\\';
-      keyname[1] = 'e';
-      keyname[2] = '\0';
-      return keyname;
-    }
-#endif
-
-  /* RUBOUT is translated directly into \C-? */
-  if (key == RUBOUT)
-    {
-      keyname[0] = '\\';
-      keyname[1] = 'C';
-      keyname[2] = '-';
-      keyname[3] = '?';
-      keyname[4] = '\0';
-      return keyname;
-    }
-
-  i = 0;
-  /* Now add special prefixes needed for control characters.  This can
-     potentially change C. */
-  if (CTRL_CHAR (c))
-    {
-      keyname[i++] = '\\';
-      keyname[i++] = 'C';
-      keyname[i++] = '-';
-      c = _rl_to_lower (UNCTRL (c));
-    }
-
-  /* XXX experimental code.  Turn the characters that are not ASCII or
-     ISO Latin 1 (128 - 159) into octal escape sequences (\200 - \237).
-     This changes C. */
-  if (c >= 128 && c <= 159)
-    {
-      keyname[i++] = '\\';
-      keyname[i++] = '2';
-      c -= 128;
-      keyname[i++] = (c / 8) + '0';
-      c = (c % 8) + '0';
-    }
-
-  /* Now, if the character needs to be quoted with a backslash, do that. */
-  if (c == '\\' || c == '"')
-    keyname[i++] = '\\';
-
-  /* Now add the key, terminate the string, and return it. */
-  keyname[i++] = (char) c;
-  keyname[i] = '\0';
-
-  return keyname;
-}
-
-/* Return a NULL terminated array of strings which represent the key
-   sequences that are used to invoke FUNCTION in MAP. */
-char **
-rl_invoking_keyseqs_in_map (function, map)
-     rl_command_func_t *function;
-     Keymap map;
-{
-  register int key;
-  char **result;
-  int result_index, result_size;
-
-  result = (char **)NULL;
-  result_index = result_size = 0;
-
-  for (key = 0; key < KEYMAP_SIZE; key++)
-    {
-      switch (map[key].type)
-       {
-       case ISMACR:
-         /* Macros match, if, and only if, the pointers are identical.
-            Thus, they are treated exactly like functions in here. */
-       case ISFUNC:
-         /* If the function in the keymap is the one we are looking for,
-            then add the current KEY to the list of invoking keys. */
-         if (map[key].function == function)
-           {
-             char *keyname;
-
-             keyname = _rl_get_keyname (key);
-
-             if (result_index + 2 > result_size)
-               {
-                 result_size += 10;
-                 result = (char **)xrealloc (result, result_size * sizeof (char *));
-               }
-
-             result[result_index++] = keyname;
-             result[result_index] = (char *)NULL;
-           }
-         break;
-
-       case ISKMAP:
-         {
-           char **seqs;
-           register int i;
-
-           /* Find the list of keyseqs in this map which have FUNCTION as
-              their target.  Add the key sequences found to RESULT. */
-           if (map[key].function)
-             seqs =
-               rl_invoking_keyseqs_in_map (function, FUNCTION_TO_KEYMAP (map, key));
-           else
-             break;
-
-           if (seqs == 0)
-             break;
-
-           for (i = 0; seqs[i]; i++)
-             {
-               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)
-                 sprintf (keyname, "\\C-?");
-               else if (key == '\\' || key == '"')
-                 {
-                   keyname[0] = '\\';
-                   keyname[1] = (char) key;
-                   keyname[2] = '\0';
-                 }
-               else
-                 {
-                   keyname[0] = (char) key;
-                   keyname[1] = '\0';
-                 }
-               
-               strcat (keyname, seqs[i]);
-               free (seqs[i]);
-
-               if (result_index + 2 > result_size)
-                 {
-                   result_size += 10;
-                   result = (char **)xrealloc (result, result_size * sizeof (char *));
-                 }
-
-               result[result_index++] = keyname;
-               result[result_index] = (char *)NULL;
-             }
-
-           free (seqs);
-         }
-         break;
-       }
-    }
-  return (result);
-}
-
-/* Return a NULL terminated array of strings which represent the key
-   sequences that can be used to invoke FUNCTION using the current keymap. */
-char **
-rl_invoking_keyseqs (function)
-     rl_command_func_t *function;
-{
-  return (rl_invoking_keyseqs_in_map (function, _rl_keymap));
-}
-
-/* Print all of the functions and their bindings to rl_outstream.  If
-   PRINT_READABLY is non-zero, then print the output in such a way
-   that it can be read back in. */
-void
-rl_function_dumper (print_readably)
-     int print_readably;
-{
-  register int i;
-  const char **names;
-  const char *name;
-
-  names = rl_funmap_names ();
-
-  fprintf (rl_outstream, "\n");
-
-  for (i = 0; name = names[i]; i++)
-    {
-      rl_command_func_t *function;
-      char **invokers;
-
-      function = rl_named_function (name);
-      invokers = rl_invoking_keyseqs_in_map (function, _rl_keymap);
-
-      if (print_readably)
-       {
-         if (!invokers)
-           fprintf (rl_outstream, "# %s (not bound)\n", name);
-         else
-           {
-             register int j;
-
-             for (j = 0; invokers[j]; j++)
-               {
-                 fprintf (rl_outstream, "\"%s\": %s\n",
-                          invokers[j], name);
-                 free (invokers[j]);
-               }
-
-             free (invokers);
-           }
-       }
-      else
-       {
-         if (!invokers)
-           fprintf (rl_outstream, "%s is not bound to any keys\n",
-                    name);
-         else
-           {
-             register int j;
-
-             fprintf (rl_outstream, "%s can be found on ", name);
-
-             for (j = 0; invokers[j] && j < 5; j++)
-               {
-                 fprintf (rl_outstream, "\"%s\"%s", invokers[j],
-                          invokers[j + 1] ? ", " : ".\n");
-               }
-
-             if (j == 5 && invokers[j])
-               fprintf (rl_outstream, "...\n");
-
-             for (j = 0; invokers[j]; j++)
-               free (invokers[j]);
-
-             free (invokers);
-           }
-       }
-    }
-}
-
-/* Print all of the current functions and their bindings to
-   rl_outstream.  If an explicit argument is given, then print
-   the output in such a way that it can be read back in. */
-int
-rl_dump_functions (count, key)
-     int count, key;
-{
-  if (rl_dispatching)
-    fprintf (rl_outstream, "\r\n");
-  rl_function_dumper (rl_explicit_arg);
-  rl_on_new_line ();
-  return (0);
-}
-
-static void
-_rl_macro_dumper_internal (print_readably, map, prefix)
-     int print_readably;
-     Keymap map;
-     char *prefix;
-{
-  register int key;
-  char *keyname, *out;
-  int prefix_len;
-
-  for (key = 0; key < KEYMAP_SIZE; key++)
-    {
-      switch (map[key].type)
-       {
-       case ISMACR:
-         keyname = _rl_get_keyname (key);
-         out = _rl_untranslate_macro_value ((char *)map[key].function);
-
-         if (print_readably)
-           fprintf (rl_outstream, "\"%s%s\": \"%s\"\n", prefix ? prefix : "",
-                                                        keyname,
-                                                        out ? out : "");
-         else
-           fprintf (rl_outstream, "%s%s outputs %s\n", prefix ? prefix : "",
-                                                       keyname,
-                                                       out ? out : "");
-         free (keyname);
-         free (out);
-         break;
-       case ISFUNC:
-         break;
-       case ISKMAP:
-         prefix_len = prefix ? strlen (prefix) : 0;
-         if (key == ESC)
-           {
-             keyname = (char *)xmalloc (3 + prefix_len);
-             if (prefix)
-               strcpy (keyname, prefix);
-             keyname[prefix_len] = '\\';
-             keyname[prefix_len + 1] = 'e';
-             keyname[prefix_len + 2] = '\0';
-           }
-         else
-           {
-             keyname = _rl_get_keyname (key);
-             if (prefix)
-               {
-                 out = (char *)xmalloc (strlen (keyname) + prefix_len + 1);
-                 strcpy (out, prefix);
-                 strcpy (out + prefix_len, keyname);
-                 free (keyname);
-                 keyname = out;
-               }
-           }
-
-         _rl_macro_dumper_internal (print_readably, FUNCTION_TO_KEYMAP (map, key), keyname);
-         free (keyname);
-         break;
-       }
-    }
-}
-
-void
-rl_macro_dumper (print_readably)
-     int print_readably;
-{
-  _rl_macro_dumper_internal (print_readably, _rl_keymap, (char *)NULL);
-}
-
-int
-rl_dump_macros (count, key)
-     int count, key;
-{
-  if (rl_dispatching)
-    fprintf (rl_outstream, "\r\n");
-  rl_macro_dumper (rl_explicit_arg);
-  rl_on_new_line ();
-  return (0);
-}
-
-void
-rl_variable_dumper (print_readably)
-     int print_readably;
-{
-  int i;
-  const char *kname;
-
-  for (i = 0; boolean_varlist[i].name; i++)
-    {
-      if (print_readably)
-        fprintf (rl_outstream, "set %s %s\n", boolean_varlist[i].name,
-                              *boolean_varlist[i].value ? "on" : "off");
-      else
-        fprintf (rl_outstream, "%s is set to `%s'\n", boolean_varlist[i].name,
-                              *boolean_varlist[i].value ? "on" : "off");
-    }
-
-  /* bell-style */
-  switch (_rl_bell_preference)
-    {
-    case NO_BELL:
-      kname = "none"; break;
-    case VISIBLE_BELL:
-      kname = "visible"; break;
-    case AUDIBLE_BELL:
-    default:
-      kname = "audible"; break;
-    }
-  if (print_readably)
-    fprintf (rl_outstream, "set bell-style %s\n", kname);
-  else
-    fprintf (rl_outstream, "bell-style is set to `%s'\n", kname);
-
-  /* comment-begin */
-  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 : RL_COMMENT_BEGIN_DEFAULT);
-
-  /* completion-query-items */
-  if (print_readably)
-    fprintf (rl_outstream, "set completion-query-items %d\n", rl_completion_query_items);
-  else
-    fprintf (rl_outstream, "completion-query-items is set to `%d'\n", rl_completion_query_items);
-
-  /* editing-mode */
-  if (print_readably)
-    fprintf (rl_outstream, "set editing-mode %s\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
-  else
-    fprintf (rl_outstream, "editing-mode is set to `%s'\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
-
-  /* isearch-terminators */
-  if (_rl_isearch_terminators)
-    {
-      char *disp;
-
-      disp = _rl_untranslate_macro_value (_rl_isearch_terminators);
-
-      if (print_readably)
-       fprintf (rl_outstream, "set isearch-terminators \"%s\"\n", disp);
-      else
-       fprintf (rl_outstream, "isearch-terminators is set to \"%s\"\n", disp);
-
-      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
-   rl_outstream.  If an explicit argument is given, then print
-   the output in such a way that it can be read back in. */
-int
-rl_dump_variables (count, key)
-     int count, key;
-{
-  if (rl_dispatching)
-    fprintf (rl_outstream, "\r\n");
-  rl_variable_dumper (rl_explicit_arg);
-  rl_on_new_line ();
-  return (0);
-}
-
-/* Return non-zero if any members of ARRAY are a substring in STRING. */
-static int
-substring_member_of_array (string, array)
-     char *string;
-     const char **array;
-{
-  while (*array)
-    {
-      if (_rl_strindex (string, *array))
-       return (1);
-      array++;
-    }
-  return (0);
-}
diff --git a/contrib/readline-5.0/callback.c b/contrib/readline-5.0/callback.c
deleted file mode 100644 (file)
index 5b05ea5..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/* callback.c -- functions to use readline as an X `callback' mechanism. */
-
-/* Copyright (C) 1987, 1989, 1992 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 "rlconf.h"
-
-#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. */
-#include "rldefs.h"
-#include "readline.h"
-#include "rlprivate.h"
-
-/* **************************************************************** */
-/*                                                                 */
-/*                     Callback Readline Functions                 */
-/*                                                                 */
-/* **************************************************************** */
-
-/* Allow using readline in situations where a program may have multiple
-   things to handle at once, and dispatches them via select().  Call
-   rl_callback_handler_install() with the prompt and a function to call
-   whenever a complete line of input is ready.  The user must then
-   call rl_callback_read_char() every time some input is available, and 
-   rl_callback_read_char() will call the user's function with the complete
-   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. */
-
-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. */
-static void
-_rl_callback_newline ()
-{
-  rl_initialize ();
-
-  if (in_handler == 0)
-    {
-      in_handler = 1;
-
-      (*rl_prep_term_function) (_rl_meta_flag);
-
-#if defined (HANDLE_SIGNALS)
-      rl_set_signals ();
-#endif
-    }
-
-  readline_internal_setup ();
-}
-
-/* Install a readline handler, set up the terminal, and issue the prompt. */
-void
-rl_callback_handler_install (prompt, linefunc)
-     const char *prompt;
-     rl_vcpfunc_t *linefunc;
-{
-  rl_set_prompt (prompt);
-  rl_linefunc = linefunc;
-  _rl_callback_newline ();
-}
-
-/* Read one character, and dispatch to the handler if it ends the line. */
-void
-rl_callback_read_char ()
-{
-  char *line;
-  int eof;
-
-  if (rl_linefunc == NULL)
-    {
-      fprintf (stderr, "readline: readline_callback_read_char() called with no handler!\r\n");
-      abort ();
-    }
-
-  eof = readline_internal_char ();
-
-  /* We loop in case some function has pushed input back with rl_execute_next. */
-  for (;;)
-    {
-      if (rl_done)
-       {
-         line = readline_internal_teardown (eof);
-
-         (*rl_deprep_term_function) ();
-#if defined (HANDLE_SIGNALS)
-         rl_clear_signals ();
-#endif
-         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 ();
-
-         /* Redisplay the prompt if readline_handler_{install,remove}
-            not called. */
-         if (in_handler == 0 && rl_linefunc)
-           _rl_callback_newline ();
-       }
-      if (rl_pending_input || _rl_pushed_input_available ())
-       eof = readline_internal_char ();
-      else
-        break;
-    }
-}
-
-/* Remove the handler, and make sure the terminal is in its normal state. */
-void
-rl_callback_handler_remove ()
-{
-  rl_linefunc = NULL;
-  if (in_handler)
-    {
-      in_handler = 0;
-      (*rl_deprep_term_function) ();
-#if defined (HANDLE_SIGNALS)
-      rl_clear_signals ();
-#endif
-    }
-}
-
-#endif
diff --git a/contrib/readline-5.0/chardefs.h b/contrib/readline-5.0/chardefs.h
deleted file mode 100644 (file)
index cb04c98..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* chardefs.h -- Character definitions for readline. */
-
-/* Copyright (C) 1994 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 _CHARDEFS_H_
-#define _CHARDEFS_H_
-
-#include <ctype.h>
-
-#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>
-#  endif /* HAVE_STRING_H */
-#  if defined (HAVE_STRINGS_H)
-#    include <strings.h>
-#  endif /* HAVE_STRINGS_H */
-#else
-#  include <string.h>
-#endif /* !HAVE_CONFIG_H */
-
-#ifndef whitespace
-#define whitespace(c) (((c) == ' ') || ((c) == '\t'))
-#endif
-
-#ifdef CTRL
-#  undef CTRL
-#endif
-#ifdef UNCTRL
-#  undef UNCTRL
-#endif
-
-/* Some character stuff. */
-#define control_character_threshold 0x020   /* Smaller than this is control. */
-#define control_character_mask 0x1f        /* 0x20 - 1 */
-#define meta_character_threshold 0x07f     /* Larger than this is Meta. */
-#define control_character_bit 0x40         /* 0x000000, must be off. */
-#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) & 0x80) == 0))
-#define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char)
-
-#define CTRL(c) ((c) & control_character_mask)
-#define META(c) ((c) | meta_character_bit)
-
-#define UNMETA(c) ((c) & (~meta_character_bit))
-#define UNCTRL(c) _rl_to_upper(((c)|control_character_bit))
-
-#if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII))
-#  define IN_CTYPE_DOMAIN(c) 1
-#else
-#  define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT)
-#  define isxdigit(c)   (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-#endif
-
-#if defined (CTYPE_NON_ASCII)
-#  define NON_NEGATIVE(c) 1
-#else
-#  define NON_NEGATIVE(c) ((unsigned char)(c) == (c))
-#endif
-
-/* 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) (_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')
-#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
-
-#ifndef RETURN
-#define RETURN CTRL('M')
-#endif
-
-#ifndef RUBOUT
-#define RUBOUT 0x7f
-#endif
-
-#ifndef TAB
-#define TAB '\t'
-#endif
-
-#ifdef ABORT_CHAR
-#undef ABORT_CHAR
-#endif
-#define ABORT_CHAR CTRL('G')
-
-#ifdef PAGE
-#undef PAGE
-#endif
-#define PAGE CTRL('L')
-
-#ifdef SPACE
-#undef SPACE
-#endif
-#define SPACE ' '      /* XXX - was 0x20 */
-
-#ifdef ESC
-#undef ESC
-#endif
-#define ESC CTRL('[')
-
-#endif  /* _CHARDEFS_H_ */
diff --git a/contrib/readline-5.0/compat.c b/contrib/readline-5.0/compat.c
deleted file mode 100644 (file)
index a66d210..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* 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/contrib/readline-5.0/complete.c b/contrib/readline-5.0/complete.c
deleted file mode 100644 (file)
index d212f61..0000000
+++ /dev/null
@@ -1,2190 +0,0 @@
-/* complete.c -- filename completion for readline. */
-
-/* Copyright (C) 1987-2004 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>
-#if defined (HAVE_SYS_FILE_H)
-#  include <sys/file.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 */
-
-#include <stdio.h>
-
-#include <errno.h>
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-#include <pwd.h>
-
-#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"
-#include "xmalloc.h"
-#include "rlprivate.h"
-
-#ifdef __STDC__
-typedef int QSFUNC (const void *, const void *);
-#else
-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.
-   It takes three arguments: (char **matches, int num_matches, int max_length)
-   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. */
-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 PARAMS((char *));
-#endif
-
-static int path_isdir PARAMS((const char *));
-
-static char *rl_quote_filename PARAMS((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 fnwidth PARAMS((const char *));
-static int fnprint PARAMS((const 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 *));
-
-/* **************************************************************** */
-/*                                                                 */
-/*     Completion matching, from readline's point of view.         */
-/*                                                                 */
-/* **************************************************************** */
-
-/* Variables known only to the readline library. */
-
-/* If non-zero, non-unique completions always show the list of matches. */
-int _rl_complete_show_all = 0;
-
-/* If non-zero, non-unique completions show the list of matches, unless it
-   is not possible to do partial completion and modify the line. */
-int _rl_complete_show_unmodified = 0;
-
-/* 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;
-
-/* Non-zero means that case is not significant in filename completion. */
-#if defined (__MSDOS__) && !defined (__DJGPP__)
-int _rl_completion_case_fold = 1;
-#else
-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)
-/* Non-zero means add an additional character to each filename displayed
-   during listing completion iff rl_filename_completion_desired which helps
-   to indicate the type of file being listed. */
-int rl_visible_stats = 0;
-#endif /* VISIBLE_STATS */
-
-/* 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. */
-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 rl_filename_completion_function (), the default filename
-   completer. */
-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.
-   START and END are indices in RL_LINE_BUFFER saying what the boundaries
-   of TEXT are.
-   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. */
-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. */
-int rl_attempted_completion_over = 0;
-
-/* Set to a character indicating the type of completion being performed
-   by rl_complete_internal, available for use by application completion
-   functions. */
-int rl_completion_type = 0;
-
-/* 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. */
-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\"\\'`@$><=" */
-const char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{("; /* }) */
-
-/* List of basic quoting 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.  */
-/*const*/ char *rl_completer_word_break_characters = (/*const*/ char *)NULL;
-
-/* Hook function to allow an application to set the completion word
-   break characters before readline breaks up the line.  Allows
-   position-dependent word break characters. */
-rl_cpvfunc_t *rl_completion_word_break_hook = (rl_cpvfunc_t *)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. */
-const char *rl_completer_quote_characters = (const char *)NULL;
-
-/* List of characters that should be quoted in filenames by the completer. */
-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. */
-const char *rl_special_prefixes = (const char *)NULL;
-
-/* If non-zero, then disallow duplicates in the matches. */
-int rl_ignore_completion_duplicates = 1;
-
-/* 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 finder function. */
-int rl_filename_completion_desired = 0;
-
-/* Non-zero means that the results of the matches are to be quoted using
-   double quotes (or an application-specific quoting mechanism) if the
-   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 finder function. */
-int rl_filename_quoting_desired = 1;
-
-/* 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 (char**) known as matches in the code below.
-   It consists of a NULL-terminated array of pointers to potential
-   matching strings.  The 1st element (matches[0]) is the maximal
-   substring that is common to all matches. This function can re-arrange
-   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. */
-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. */
-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. */
-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. */
-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, the completion functions don't append any 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_quote = 0;
-
-/* Set to any quote character readline thinks it finds before any application
-   completion function is called. */
-int rl_completion_quote_character;
-
-/* Set to a non-zero value if readline found quoting anywhere in the word to
-   be completed; set before any application completion function is called. */
-int rl_completion_found_quote;
-
-/* 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;
-
-/* Variables local to this file. */
-
-/* Local variable states what happened during the last completion attempt. */
-static int completion_changed_buffer;
-
-/*************************************/
-/*                                  */
-/*    Bindable completion functions  */
-/*                                  */
-/*************************************/
-
-/* Complete the word at or before point.  You have supplied the function
-   that does the initial simple matching selection algorithm (see
-   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_char (ignore, invoking_key));
-  else if (rl_last_func == rl_complete && !completion_changed_buffer)
-    return (rl_complete_internal ('?'));
-  else if (_rl_complete_show_all)
-    return (rl_complete_internal ('!'));
-  else if (_rl_complete_show_unmodified)
-    return (rl_complete_internal ('@'));
-  else
-    return (rl_complete_internal (TAB));
-}
-
-/* List the possible completions.  See description of rl_complete (). */
-int
-rl_possible_completions (ignore, invoking_key)
-     int ignore, invoking_key;
-{
-  return (rl_complete_internal ('?'));
-}
-
-int
-rl_insert_completions (ignore, invoking_key)
-     int ignore, invoking_key;
-{
-  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 if (_rl_complete_show_unmodified)
-    return '@';
-  else
-    return TAB;
-}
-
-/************************************/
-/*                                 */
-/*    Completion utility functions  */
-/*                                 */
-/************************************/
-
-/* 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;
-{
-  /* 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 = rl_completion_suppress_quote = 0;
-
-  /* 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 (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 ();
-      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;
-}
-
-static int
-path_isdir (filename)
-     const char *filename;
-{
-  struct stat finfo;
-
-  return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode));
-}
-
-#if defined (VISIBLE_STATS)
-/* Return the character which best describes FILENAME.
-     `@' for symbolic links
-     `/' for directories
-     `*' for executables
-     `=' for sockets
-     `|' for FIFOs
-     `%' for character special devices
-     `#' for block special devices */
-static int
-stat_char (filename)
-     char *filename;
-{
-  struct stat finfo;
-  int character, r;
-
-#if defined (HAVE_LSTAT) && defined (S_ISLNK)
-  r = lstat (filename, &finfo);
-#else
-  r = stat (filename, &finfo);
-#endif
-
-  if (r == -1)
-    return (0);
-
-  character = 0;
-  if (S_ISDIR (finfo.st_mode))
-    character = '/';
-#if defined (S_ISCHR)
-  else if (S_ISCHR (finfo.st_mode))
-    character = '%';
-#endif /* S_ISCHR */
-#if defined (S_ISBLK)
-  else if (S_ISBLK (finfo.st_mode))
-    character = '#';
-#endif /* S_ISBLK */
-#if defined (S_ISLNK)
-  else if (S_ISLNK (finfo.st_mode))
-    character = '@';
-#endif /* S_ISLNK */
-#if defined (S_ISSOCK)
-  else if (S_ISSOCK (finfo.st_mode))
-    character = '=';
-#endif /* S_ISSOCK */
-#if defined (S_ISFIFO)
-  else if (S_ISFIFO (finfo.st_mode))
-    character = '|';
-#endif
-  else if (S_ISREG (finfo.st_mode))
-    {
-      if (access (filename, X_OK) == 0)
-       character = '*';
-    }
-  return (character);
-}
-#endif /* VISIBLE_STATS */
-
-/* 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.  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, *x;
-
-  if (rl_filename_completion_desired == 0)     /* don't need to do anything */
-    return (pathname);
-
-  temp = strrchr (pathname, '/');
-#if defined (__MSDOS__)
-  if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':')
-    temp = pathname + 1;
-#endif
-
-  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;
-}
-
-/* Compute width of STRING when displayed on screen by print_filename */
-static int
-fnwidth (string)
-     const char *string;
-{
-  int width, pos;
-#if defined (HANDLE_MULTIBYTE)
-  mbstate_t ps;
-  int left, w;
-  size_t clen;
-  wchar_t wc;
-
-  left = strlen (string) + 1;
-  memset (&ps, 0, sizeof (mbstate_t));
-#endif
-
-  width = pos = 0;
-  while (string[pos])
-    {
-      if (CTRL_CHAR (*string) || *string == RUBOUT)
-       {
-         width += 2;
-         pos++;
-       }
-      else
-       {
-#if defined (HANDLE_MULTIBYTE)
-         clen = mbrtowc (&wc, string + pos, left - pos, &ps);
-         if (MB_INVALIDCH (clen))
-           {
-             width++;
-             pos++;
-             memset (&ps, 0, sizeof (mbstate_t));
-           }
-         else if (MB_NULLWCH (clen))
-           break;
-         else
-           {
-             pos += clen;
-             w = wcwidth (wc);
-             width += (w >= 0) ? w : 1;
-           }
-#else
-         width++;
-         pos++;
-#endif
-       }
-    }
-
-  return width;
-}
-
-static int
-fnprint (to_print)
-     const char *to_print;
-{
-  int printed_len;
-  const char *s;
-#if defined (HANDLE_MULTIBYTE)
-  mbstate_t ps;
-  const char *end;
-  size_t tlen;
-
-  end = to_print + strlen (to_print) + 1;
-  memset (&ps, 0, sizeof (mbstate_t));
-#endif
-
-  printed_len = 0;
-  s = to_print;
-  while (*s)
-    {
-      if (CTRL_CHAR (*s))
-        {
-          putc ('^', rl_outstream);
-          putc (UNCTRL (*s), rl_outstream);
-          printed_len += 2;
-          s++;
-#if defined (HANDLE_MULTIBYTE)
-         memset (&ps, 0, sizeof (mbstate_t));
-#endif
-        }
-      else if (*s == RUBOUT)
-       {
-         putc ('^', rl_outstream);
-         putc ('?', rl_outstream);
-         printed_len += 2;
-         s++;
-#if defined (HANDLE_MULTIBYTE)
-         memset (&ps, 0, sizeof (mbstate_t));
-#endif
-       }
-      else
-       {
-#if defined (HANDLE_MULTIBYTE)
-         tlen = mbrlen (s, end - s, &ps);
-         if (MB_INVALIDCH (tlen))
-           {
-             tlen = 1;
-             memset (&ps, 0, sizeof (mbstate_t));
-           }
-         else if (MB_NULLWCH (tlen))
-           break;
-         fwrite (s, 1, tlen, rl_outstream);
-         s += tlen;
-#else
-         putc (*s, rl_outstream);
-         s++;
-#endif
-         printed_len++;
-       }
-    }
-
-  return printed_len;
-}
-
-/* Output TO_PRINT to rl_outstream.  If VISIBLE_STATS is defined and we
-   are using it, check for and output a single character for `special'
-   filenames.  Return the number of characters we output. */
-
-static int
-print_filename (to_print, full_pathname)
-     char *to_print, *full_pathname;
-{
-  int printed_len, extension_char, slen, tlen;
-  char *s, c, *new_full_pathname;
-
-  extension_char = 0;
-  printed_len = fnprint (to_print);
-
-#if defined (VISIBLE_STATS)
- if (rl_filename_completion_desired && (rl_visible_stats || _rl_complete_mark_directories))
-#else
- if (rl_filename_completion_desired && _rl_complete_mark_directories)
-#endif
-    {
-      /* If to_print != full_pathname, to_print is the basename of the
-        path passed.  In this case, we try to expand the directory
-        name before checking for the stat character. */
-      if (to_print != full_pathname)
-       {
-         /* Terminate the directory name. */
-         c = to_print[-1];
-         to_print[-1] = '\0';
-
-         /* If setting the last slash in full_pathname to a NUL results in
-            full_pathname being the empty string, we are trying to complete
-            files in the root directory.  If we pass a null string to the
-            bash directory completion hook, for example, it will expand it
-            to the current directory.  We just want the `/'. */
-         s = tilde_expand (full_pathname && *full_pathname ? full_pathname : "/");
-         if (rl_directory_completion_hook)
-           (*rl_directory_completion_hook) (&s);
-
-         slen = strlen (s);
-         tlen = strlen (to_print);
-         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);
-
-#if defined (VISIBLE_STATS)
-         if (rl_visible_stats)
-           extension_char = stat_char (new_full_pathname);
-         else
-#endif
-         if (path_isdir (new_full_pathname))
-           extension_char = '/';
-
-         free (new_full_pathname);
-         to_print[-1] = c;
-       }
-      else
-       {
-         s = tilde_expand (full_pathname);
-#if defined (VISIBLE_STATS)
-         if (rl_visible_stats)
-           extension_char = stat_char (s);
-         else
-#endif
-           if (path_isdir (s))
-             extension_char = '/';
-       }
-
-      free (s);
-      if (extension_char)
-       {
-         putc (extension_char, rl_outstream);
-         printed_len++;
-       }
-    }
-
-  return printed_len;
-}
-
-static char *
-rl_quote_filename (s, rtype, qcp)
-     char *s;
-     int rtype;
-     char *qcp;
-{
-  char *r;
-
-  r = (char *)xmalloc (strlen (s) + 2);
-  *r = *rl_completer_quote_characters;
-  strcpy (r + 1, s);
-  if (qcp)
-    *qcp = *rl_completer_quote_characters;
-  return r;
-}
-
-/* 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
-   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
-   particular word break character is quoted; if that function returns a
-   non-zero result, the character does not break a word.  This function
-   returns the opening quote character if we found an unclosed quoted
-   substring, '\0' otherwise.  FP, if non-null, is set to a value saying
-   which (shell-like) quote characters we found (single quote, double
-   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. */
-
-char
-_rl_find_completion_word (fp, dp)
-     int *fp, *dp;
-{
-  int scan, end, found_quote, delimiter, pass_next, isbrk;
-  char quote_char, *brkchars;
-
-  end = rl_point;
-  found_quote = delimiter = 0;
-  quote_char = '\0';
-
-  brkchars = 0;
-  if (rl_completion_word_break_hook)
-    brkchars = (*rl_completion_word_break_hook) ();
-  if (brkchars == 0)
-    brkchars = rl_completer_word_break_characters;
-
-  if (rl_completer_quote_characters)
-    {
-      /* We have a list of characters which can be used in pairs to
-        quote substrings for the completer.  Try to find the start
-        of an unclosed quoted substring. */
-      /* FOUND_QUOTE is set so we know what kind of quotes we found. */
-#if defined (HANDLE_MULTIBYTE)
-      for (scan = pass_next = 0; scan < end;
-               scan = ((MB_CUR_MAX == 1 || rl_byte_oriented)
-                       ? (scan + 1) 
-                       : _rl_find_next_mbchar (rl_line_buffer, scan, 1, MB_FIND_ANY)))
-#else
-      for (scan = pass_next = 0; scan < end; scan++)
-#endif
-       {
-         if (pass_next)
-           {
-             pass_next = 0;
-             continue;
-           }
-
-         /* 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;
-             continue;
-           }
-
-         if (quote_char != '\0')
-           {
-             /* Ignore everything until the matching close quote char. */
-             if (rl_line_buffer[scan] == quote_char)
-               {
-                 /* Found matching close.  Abandon this substring. */
-                 quote_char = '\0';
-                 rl_point = end;
-               }
-           }
-         else if (strchr (rl_completer_quote_characters, rl_line_buffer[scan]))
-           {
-             /* Found start of a quoted substring. */
-             quote_char = rl_line_buffer[scan];
-             rl_point = scan + 1;
-             /* Shell-like quoting conventions. */
-             if (quote_char == '\'')
-               found_quote |= RL_QF_SINGLE_QUOTE;
-             else if (quote_char == '"')
-               found_quote |= RL_QF_DOUBLE_QUOTE;
-             else
-               found_quote |= RL_QF_OTHER_QUOTE;      
-           }
-       }
-    }
-
-  if (rl_point == end && quote_char == '\0')
-    {
-      /* 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];
-
-         if (strchr (brkchars, scan) == 0)
-           continue;
-
-         /* Call the application-specific function to tell us whether
-            this word break character is quoted and should be skipped. */
-         if (rl_char_is_quoted_p && found_quote &&
-             (*rl_char_is_quoted_p) (rl_line_buffer, rl_point))
-           continue;
-
-         /* Convoluted code, but it avoids an n^2 algorithm with calls
-            to char_is_quoted. */
-         break;
-       }
-    }
-
-  /* If we are at an unquoted word break, then advance past it. */
-  scan = rl_line_buffer[rl_point];
-
-  /* If there is an application-specific function to say whether or not
-     a character is quoted and we found a quote character, let that
-     function decide whether or not a character is a word break, even
-     if it is found in rl_completer_word_break_characters.  Don't bother
-     if we're at the end of the line, though. */
-  if (scan)
-    {
-      if (rl_char_is_quoted_p)
-       isbrk = (found_quote == 0 ||
-               (*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) &&
-               strchr (brkchars, scan) != 0;
-      else
-       isbrk = strchr (brkchars, scan) != 0;
-
-      if (isbrk)
-       {
-         /* If the character that caused the word break was a quoting
-            character, then remember it as the delimiter. */
-         if (rl_basic_quote_characters &&
-             strchr (rl_basic_quote_characters, scan) &&
-             (end - rl_point) > 1)
-           delimiter = scan;
-
-         /* If the character isn't needed to determine something special
-            about what kind of completion to perform, then advance past it. */
-         if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0)
-           rl_point++;
-       }
-    }
-
-  if (fp)
-    *fp = found_quote;
-  if (dp)
-    *dp = delimiter;
-
-  return (quote_char);
-}
-
-static char **
-gen_completion_matches (text, start, end, our_func, found_quote, quote_char)
-     char *text;
-     int start, end;
-     rl_compentry_func_t *our_func;
-     int found_quote, quote_char;
-{
-  char **matches, *temp;
-
-  rl_completion_found_quote = found_quote;
-  rl_completion_quote_character = quote_char;
-
-  /* If the user wants to TRY to complete, but then wants to give
-     up and use the default completion function, they set the
-     variable rl_attempted_completion_function. */
-  if (rl_attempted_completion_function)
-    {
-      matches = (*rl_attempted_completion_function) (text, start, end);
-
-      if (matches || rl_attempted_completion_over)
-       {
-         rl_attempted_completion_over = 0;
-         return (matches);
-       }
-    }
-
-  /* Beware -- we're stripping the quotes here.  Do this only if we know
-     we are doing filename completion and the application has defined a
-     filename dequoting function. */
-  temp = (char *)NULL;
-
-  if (found_quote && our_func == rl_filename_completion_function &&
-      rl_filename_dequoting_function)
-    {
-      /* delete single and double quotes */
-      temp = (*rl_filename_dequoting_function) (text, quote_char);
-      text = temp;     /* not freeing text is not a memory leak */
-    }
-
-  matches = rl_completion_matches (text, our_func);
-  FREE (temp);
-  return matches;  
-}
-
-/* Filter out duplicates in MATCHES.  This frees up the strings in
-   MATCHES. */
-static char **
-remove_duplicate_matches (matches)
-     char **matches;
-{
-  char *lowest_common;
-  int i, j, newlen;
-  char dead_slot;
-  char **temp_array;
-
-  /* Sort the items. */
-  for (i = 0; matches[i]; i++)
-    ;
-
-  /* Sort the array without matches[0], since we need it to
-     stay in place no matter what. */
-  if (i)
-    qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
-
-  /* Remember the lowest common denominator for it may be unique. */
-  lowest_common = savestring (matches[0]);
-
-  for (i = newlen = 0; matches[i + 1]; i++)
-    {
-      if (strcmp (matches[i], matches[i + 1]) == 0)
-       {
-         free (matches[i]);
-         matches[i] = (char *)&dead_slot;
-       }
-      else
-       newlen++;
-    }
-
-  /* We have marked all the dead slots with (char *)&dead_slot.
-     Copy all the non-dead entries into a new array. */
-  temp_array = (char **)xmalloc ((3 + newlen) * sizeof (char *));
-  for (i = j = 1; matches[i]; i++)
-    {
-      if (matches[i] != (char *)&dead_slot)
-       temp_array[j++] = matches[i];
-    }
-  temp_array[j] = (char *)NULL;
-
-  if (matches[0] != (char *)&dead_slot)
-    free (matches[0]);
-
-  /* Place the lowest common denominator back in [0]. */
-  temp_array[0] = lowest_common;
-
-  /* If there is one string left, and it is identical to the
-     lowest common denominator, then the LCD is the string to
-     insert. */
-  if (j == 2 && strcmp (temp_array[0], temp_array[1]) == 0)
-    {
-      free (temp_array[1]);
-      temp_array[1] = (char *)NULL;
-    }
-  return (temp_array);
-}
-
-/* Find the common prefix of the list of matches, and put it into
-   matches[0]. */
-static int
-compute_lcd_of_matches (match_list, matches, text)
-     char **match_list;
-     int matches;
-     const char *text;
-{
-  register int i, c1, c2, si;
-  int low;             /* Count of max-matched characters. */
-  char *dtext;         /* dequoted TEXT, if needed */
-#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
-     stop matching. */
-  if (matches == 1)
-    {
-      match_list[0] = match_list[1];
-      match_list[1] = (char *)NULL;
-      return 1;
-    }
-
-  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;
-       }
-      else
-       {
-         for (si = 0;
-              (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;
-       }
-
-      if (low > si)
-       low = si;
-    }
-
-  /* If there were multiple matches, but none matched up to even the
-     first character, and the user typed something, use that as the
-     value of matches[0]. */
-  if (low == 0 && text && *text)
-    {
-      match_list[0] = (char *)xmalloc (strlen (text) + 1);
-      strcpy (match_list[0], text);
-    }
-  else
-    {
-      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)
-       {
-         /* We're making an assumption here:
-               IF we're completing filenames AND
-                  the application has defined a filename dequoting function AND
-                  we found a quote character AND
-                  the application has requested filename quoting
-               THEN
-                  we assume that TEXT was dequoted before checking against
-                  the file system and needs to be dequoted here before we
-                  check against the list of matches
-               FI */
-         dtext = (char *)NULL;
-         if (rl_filename_completion_desired &&
-             rl_filename_dequoting_function &&
-             rl_completion_found_quote &&
-             rl_filename_quoting_desired)
-           {
-             dtext = (*rl_filename_dequoting_function) (text, rl_completion_quote_character);
-             text = dtext;
-           }
-
-         /* 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);
-
-         FREE (dtext);
-       }
-      else
-        strncpy (match_list[0], match_list[1], low);
-
-      match_list[0][low] = '\0';
-    }
-
-  return matches;
-}
-
-static int
-postprocess_matches (matchesp, matching_filenames)
-     char ***matchesp;
-     int matching_filenames;
-{
-  char *t, **matches, **temp_matches;
-  int nmatch, i;
-
-  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. */
-  if (rl_ignore_completion_duplicates)
-    {
-      temp_matches = remove_duplicate_matches (matches);
-      free (matches);
-      matches = temp_matches;
-    }
-
-  /* If we are matching filenames, then here is our chance to
-     do clever processing by re-examining the list.  Call the
-     ignore function with the array as a parameter.  It can
-     munge the array, deleting matches as it desires. */
-  if (rl_ignore_some_completions_function && matching_filenames)
-    {
-      for (nmatch = 1; matches[nmatch]; nmatch++)
-       ;
-      (void)(*rl_ignore_some_completions_function) (matches);
-      if (matches == 0 || matches[0] == 0)
-       {
-         FREE (matches);
-         *matchesp = (char **)0;
-         return 0;
-        }
-      else
-       {
-         /* If we removed some matches, recompute the common prefix. */
-         for (i = 1; matches[i]; i++)
-           ;
-         if (i > 1 && i < nmatch)
-           {
-             t = matches[0];
-             compute_lcd_of_matches (matches, i - 1, t);
-             FREE (t);
-           }
-       }
-    }
-
-  *matchesp = matches;
-  return (1);
-}
-
-/* A convenience function for displaying a list of strings in
-   columnar format on readline's output stream.  MATCHES is the list
-   of strings, in argv format, LEN is the number of strings in MATCHES,
-   and MAX is the length of the longest string in MATCHES. */
-void
-rl_display_match_list (matches, len, max)
-     char **matches;
-     int len, max;
-{
-  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 = _rl_screenwidth / max;
-  if (limit != 1 && (limit * max == _rl_screenwidth))
-    limit--;
-
-  /* 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;
-
-  /* How many iterations of the printing loop? */
-  count = (len + (limit - 1)) / limit;
-
-  /* Watch out for special case.  If LEN is less than LIMIT, then
-     just do the inner printing loop.
-          0 < len <= limit  implies  count = 1. */
-
-  /* Sort the items if they are not already sorted. */
-  if (rl_ignore_completion_duplicates == 0)
-    qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
-
-  rl_crlf ();
-
-  lines = 0;
-  if (_rl_print_completions_horizontally == 0)
-    {
-      /* Print the sorted items, up-and-down alphabetically, like ls. */
-      for (i = 1; i <= count; i++)
-       {
-         for (j = 0, l = i; j < limit; j++)
-           {
-             if (l > len || matches[l] == 0)
-               break;
-             else
-               {
-                 temp = printable_part (matches[l]);
-                 printed_len = print_filename (temp, matches[l]);
-
-                 if (j + 1 < limit)
-                   for (k = 0; k < max - printed_len; k++)
-                     putc (' ', rl_outstream);
-               }
-             l += count;
-           }
-         rl_crlf ();
-         lines++;
-         if (_rl_page_completions && lines >= (_rl_screenheight - 1) && i < count)
-           {
-             lines = _rl_internal_pager (lines);
-             if (lines < 0)
-               return;
-           }
-       }
-    }
-  else
-    {
-      /* Print the sorted items, across alphabetically, like ls -x. */
-      for (i = 1; matches[i]; i++)
-       {
-         temp = printable_part (matches[i]);
-         printed_len = print_filename (temp, matches[i]);
-         /* Have we reached the end of this line? */
-         if (matches[i+1])
-           {
-             if (i && (limit > 1) && (i % limit) == 0)
-               {
-                 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);
-           }
-       }
-      rl_crlf ();
-    }
-}
-
-/* Display MATCHES, a list of matching filenames in argv format.  This
-   handles the simple case -- a single match -- first.  If there is more
-   than one match, we compute the number of strings in the list and the
-   length of the longest string, which will be needed by the display
-   function.  If the application wants to handle displaying the list of
-   matches itself, it sets RL_COMPLETION_DISPLAY_MATCHES_HOOK to the
-   address of a function, and we just call it.  If we're handling the
-   display ourselves, we just call rl_display_match_list.  We also check
-   that the list of matches doesn't exceed the user-settable threshold,
-   and ask the user if he wants to see the list if there are more matches
-   than RL_COMPLETION_QUERY_ITEMS. */
-static void
-display_matches (matches)
-     char **matches;
-{
-  int len, max, i;
-  char *temp;
-
-  /* Move to the last visible line of a possibly-multiple-line command. */
-  _rl_move_vert (_rl_vis_botlin);
-
-  /* Handle simple case first.  What if there is only one answer? */
-  if (matches[1] == 0)
-    {
-      temp = printable_part (matches[0]);
-      rl_crlf ();
-      print_filename (temp, matches[0]);
-      rl_crlf ();
-
-      rl_forced_update_display ();
-      rl_display_fixed = 1;
-
-      return;
-    }
-
-  /* There is more than one answer.  Find out how many there are,
-     and find the maximum printed length of a single entry. */
-  for (max = 0, i = 1; matches[i]; i++)
-    {
-      temp = printable_part (matches[i]);
-      len = fnwidth (temp);
-
-      if (len > max)
-       max = len;
-    }
-
-  len = i - 1;
-
-  /* If the caller has defined a display hook, then call that now. */
-  if (rl_completion_display_matches_hook)
-    {
-      (*rl_completion_display_matches_hook) (matches, len, max);
-      return;
-    }
-       
-  /* If there are many items, then ask the user if she really wants to
-     see them all. */
-  if (len >= rl_completion_query_items)
-    {
-      rl_crlf ();
-      fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len);
-      fflush (rl_outstream);
-      if (get_y_or_n (0) == 0)
-       {
-         rl_crlf ();
-
-         rl_forced_update_display ();
-         rl_display_fixed = 1;
-
-         return;
-       }
-    }
-
-  rl_display_match_list (matches, len, max);
-
-  rl_forced_update_display ();
-  rl_display_fixed = 1;
-}
-
-static char *
-make_quoted_replacement (match, mtype, qc)
-     char *match;
-     int mtype;
-     char *qc; /* Pointer to quoting character, if any */
-{
-  int should_quote, do_replace;
-  char *replacement;
-
-  /* If we are doing completion on quoted substrings, and any matches
-     contain any of the completer_word_break_characters, then auto-
-     matically prepend the substring with a quote character (just pick
-     the first one from the list of such) if it does not already begin
-     with a quote string.  FIXME: Need to remove any such automatically
-     inserted quote character when it no longer is necessary, such as
-     if we change the string we are completing on and the new set of
-     matches don't require a quoted substring. */
-  replacement = match;
-
-  should_quote = match && rl_completer_quote_characters &&
-                       rl_filename_completion_desired &&
-                       rl_filename_quoting_desired;
-
-  if (should_quote)
-    should_quote = should_quote && (!qc || !*qc ||
-                    (rl_completer_quote_characters && strchr (rl_completer_quote_characters, *qc)));
-
-  if (should_quote)
-    {
-      /* If there is a single match, see if we need to quote it.
-         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)
-                       : 0;
-
-      do_replace = should_quote ? mtype : NO_MATCH;
-      /* Quote the replacement, since we found an embedded
-        word break character in a potential match. */
-      if (do_replace != NO_MATCH && rl_filename_quoting_function)
-       replacement = (*rl_filename_quoting_function) (match, do_replace, qc);
-    }
-  return (replacement);
-}
-
-static void
-insert_match (match, start, mtype, qc)
-     char *match;
-     int start, mtype;
-     char *qc;
-{
-  char *replacement;
-  char oqc;
-
-  oqc = qc ? *qc : '\0';
-  replacement = make_quoted_replacement (match, mtype, qc);
-
-  /* Now insert the match. */
-  if (replacement)
-    {
-      /* Don't double an opening quote character. */
-      if (qc && *qc && start && rl_line_buffer[start - 1] == *qc &&
-           replacement[0] == *qc)
-       start--;
-      /* If make_quoted_replacement changed the quoting character, remove
-        the opening quote and insert the (fully-quoted) replacement. */
-      else if (qc && (*qc != oqc) && start && rl_line_buffer[start - 1] == oqc &&
-           replacement[0] != oqc)
-       start--;
-      _rl_replace_text (replacement, start, rl_point - 1);
-      if (replacement != match)
-        free (replacement);
-    }
-}
-
-/* Append any necessary closing quote and a separator character to the
-   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.  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, nontrivial_match)
-     char *text;
-     int delimiter, quote_char, nontrivial_match;
-{
-  char temp_string[4], *filename;
-  int temp_string_index, s;
-  struct stat finfo;
-
-  temp_string_index = 0;
-  if (quote_char && rl_point && rl_completion_suppress_quote == 0 &&
-      rl_line_buffer[rl_point - 1] != quote_char)
-    temp_string[temp_string_index++] = quote_char;
-
-  if (delimiter)
-    temp_string[temp_string_index++] = delimiter;
-  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';
-
-  if (rl_filename_completion_desired)
-    {
-      filename = tilde_expand (text);
-      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)
-           {
-             /* 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 && temp_string_index)
-           rl_insert_text (temp_string);
-       }
-      free (filename);
-    }
-  else
-    {
-      if (rl_point == rl_end && temp_string_index)
-       rl_insert_text (temp_string);
-    }
-
-  return (temp_string_index);
-}
-
-static void
-insert_all_matches (matches, point, qc)
-     char **matches;
-     int point;
-     char *qc;
-{
-  int i;
-  char *rp;
-
-  rl_begin_undo_group ();
-  /* remove any opening quote character; make_quoted_replacement will add
-     it back. */
-  if (qc && *qc && point && rl_line_buffer[point - 1] == *qc)
-    point--;
-  rl_delete_text (point, rl_point);
-  rl_point = point;
-
-  if (matches[1])
-    {
-      for (i = 1; matches[i]; i++)
-       {
-         rp = make_quoted_replacement (matches[i], SINGLE_MATCH, qc);
-         rl_insert_text (rp);
-         rl_insert_text (" ");
-         if (rp != matches[i])
-           free (rp);
-       }
-    }
-  else
-    {
-      rp = make_quoted_replacement (matches[0], SINGLE_MATCH, qc);
-      rl_insert_text (rp);
-      rl_insert_text (" ");
-      if (rp != matches[0])
-       free (rp);
-    }
-  rl_end_undo_group ();
-}
-
-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);
-}
-
-/* Complete the word at or before point.
-   WHAT_TO_DO says what to do with the completion.
-   `?' means list the possible completions.
-   TAB means do standard completion.
-   `*' means insert all of the possible completions.
-   `!' means to do standard completion, and list all possible completions if
-   there is more than one.
-   `@' means to do standard completion, and list all possible completions if
-   there is more than one and partial completion is not possible. */
-int
-rl_complete_internal (what_to_do)
-     int what_to_do;
-{
-  char **matches;
-  rl_compentry_func_t *our_func;
-  int start, end, delimiter, found_quote, i, nontrivial_lcd;
-  char *text, *saved_line_buffer;
-  char quote_char;
-
-  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
-               : rl_filename_completion_function;
-  /* We now look backwards for the start of a filename/variable word. */
-  end = rl_point;
-  found_quote = delimiter = 0;
-  quote_char = '\0';
-
-  if (rl_point)
-    /* This (possibly) changes rl_point.  If it returns a non-zero char,
-       we know we have an open quote. */
-    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)
-    {
-      rl_ding ();
-      FREE (saved_line_buffer);
-      completion_changed_buffer = 0;
-      RL_UNSETSTATE(RL_STATE_COMPLETING);
-      return (0);
-    }
-
-  /* If we are matching filenames, the attempted completion function will
-     have set rl_filename_completion_desired to a non-zero value.  The basic
-     rl_filename_completion_function does this. */
-  i = rl_filename_completion_desired;
-
-  if (postprocess_matches (&matches, i) == 0)
-    {
-      rl_ding ();
-      FREE (saved_line_buffer);
-      completion_changed_buffer = 0;
-      RL_UNSETSTATE(RL_STATE_COMPLETING);
-      return (0);
-    }
-
-  switch (what_to_do)
-    {
-    case TAB:
-    case '!':
-    case '@':
-      /* Insert the first match with proper quoting. */
-      if (*matches[0])
-       insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, &quote_char);
-
-      /* If there are more matches, ring the bell to indicate.
-        If we are in vi mode, Posix.2 says to not ring the bell.
-        If the `show-all-if-ambiguous' variable is set, display
-        all the matches immediately.  Otherwise, if this was the
-        only match, and we are hacking files, check the file to
-        see if it was a directory.  If so, and the `mark-directories'
-        variable is set, add a '/' to the name.  If not, and we
-        are at the end of the line, then add a space.  */
-      if (matches[1])
-       {
-         if (what_to_do == '!')
-           {
-             display_matches (matches);
-             break;
-           }
-         else if (what_to_do == '@')
-           {
-             if (nontrivial_lcd == 0)
-               display_matches (matches);
-             break;
-           }
-         else if (rl_editing_mode != vi_mode)
-           rl_ding (); /* There are other matches remaining. */
-       }
-      else
-       append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd);
-
-      break;
-
-    case '*':
-      insert_all_matches (matches, start, &quote_char);
-      break;
-
-    case '?':
-      display_matches (matches);
-      break;
-
-    default:
-      fprintf (stderr, "\r\nreadline: bad value %d for what_to_do in rl_complete\n", what_to_do);
-      rl_ding ();
-      FREE (saved_line_buffer);
-      RL_UNSETSTATE(RL_STATE_COMPLETING);
-      return 1;
-    }
-
-  _rl_free_match_list (matches);
-
-  /* Check to see if the line has changed through all of this manipulation. */
-  if (saved_line_buffer)
-    {
-      completion_changed_buffer = strcmp (rl_line_buffer, saved_line_buffer) != 0;
-      free (saved_line_buffer);
-    }
-
-  RL_UNSETSTATE(RL_STATE_COMPLETING);
-  return 0;
-}
-
-/***************************************************************/
-/*                                                            */
-/*  Application-callable completion match generator functions  */
-/*                                                            */
-/***************************************************************/
-
-/* Return an array of (char *) which is a list of completions for TEXT.
-   If there are no completions, return a NULL pointer.
-   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_FUNCTION is a function of two args, and returns a (char *).
-     The first argument is TEXT.
-     The second is a state argument; it should be zero on the first call, and
-     non-zero on subsequent calls.  It returns a NULL pointer to the caller
-     when there are no more matches.
- */
-char **
-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;
-
-  /* The list of matches. */
-  char **match_list;
-
-  /* Number of matches actually found. */
-  int matches;
-
-  /* Temporary string binder. */
-  char *string;
-
-  matches = 0;
-  match_list_size = 10;
-  match_list = (char **)xmalloc ((match_list_size + 1) * sizeof (char *));
-  match_list[1] = (char *)NULL;
-
-  while (string = (*entry_function) (text, matches))
-    {
-      if (matches + 1 == match_list_size)
-       match_list = (char **)xrealloc
-         (match_list, ((match_list_size += 10) + 1) * sizeof (char *));
-
-      match_list[++matches] = string;
-      match_list[matches + 1] = (char *)NULL;
-    }
-
-  /* If there were any matches, then look through them finding out the
-     lowest common denominator.  That then becomes match_list[0]. */
-  if (matches)
-    compute_lcd_of_matches (match_list, matches, text);
-  else                         /* There were no matches. */
-    {
-      free (match_list);
-      match_list = (char **)NULL;
-    }
-  return (match_list);
-}
-
-/* A completion function for usernames.
-   TEXT contains a partial username preceded by a random
-   character (usually `~').  */
-char *
-rl_username_completion_function (text, state)
-     const char *text;
-     int state;
-{
-#if defined (__WIN32__) || defined (__OPENNT)
-  return (char *)NULL;
-#else /* !__WIN32__ && !__OPENNT) */
-  static char *username = (char *)NULL;
-  static struct passwd *entry;
-  static int namelen, first_char, first_char_loc;
-  char *value;
-
-  if (state == 0)
-    {
-      FREE (username);
-
-      first_char = *text;
-      first_char_loc = first_char == '~';
-
-      username = savestring (&text[first_char_loc]);
-      namelen = strlen (username);
-      setpwent ();
-    }
-
-  while (entry = getpwent ())
-    {
-      /* Null usernames should result in all users as possible completions. */
-      if (namelen == 0 || (STREQN (username, entry->pw_name, namelen)))
-       break;
-    }
-
-  if (entry == 0)
-    {
-      endpwent ();
-      return ((char *)NULL);
-    }
-  else
-    {
-      value = (char *)xmalloc (2 + strlen (entry->pw_name));
-
-      *value = *text;
-
-      strcpy (value + first_char_loc, entry->pw_name);
-
-      if (first_char == '~')
-       rl_filename_completion_desired = 1;
-
-      return (value);
-    }
-#endif /* !__WIN32__ && !__OPENNT */
-}
-
-/* Okay, now we write the entry_function for filename completion.  In the
-   general case.  Note that completion in the shell is a little different
-   because of all the pathnames that must be followed when looking up the
-   completion for a command. */
-char *
-rl_filename_completion_function (text, state)
-     const char *text;
-     int state;
-{
-  static DIR *directory = (DIR *)NULL;
-  static char *filename = (char *)NULL;
-  static char *dirname = (char *)NULL;
-  static char *users_dirname = (char *)NULL;
-  static int filename_len;
-  char *temp;
-  int dirlen;
-  struct dirent *entry;
-
-  /* If we don't have any state, then do some initialization. */
-  if (state == 0)
-    {
-      /* If we were interrupted before closing the directory or reading
-        all of its contents, close it. */
-      if (directory)
-       {
-         closedir (directory);
-         directory = (DIR *)NULL;
-       }
-      FREE (dirname);
-      FREE (filename);
-      FREE (users_dirname);
-
-      filename = savestring (text);
-      if (*text == 0)
-       text = ".";
-      dirname = savestring (text);
-
-      temp = strrchr (dirname, '/');
-
-#if defined (__MSDOS__)
-      /* special hack for //X/... */
-      if (dirname[0] == '/' && dirname[1] == '/' && ISALPHA ((unsigned char)dirname[2]) && dirname[3] == '/')
-        temp = strrchr (dirname + 3, '/');
-#endif
-
-      if (temp)
-       {
-         strcpy (filename, ++temp);
-         *temp = '\0';
-       }
-#if defined (__MSDOS__)
-      /* searches from current directory on the drive */
-      else if (ISALPHA ((unsigned char)dirname[0]) && dirname[1] == ':')
-        {
-          strcpy (filename, dirname + 2);
-          dirname[2] = '\0';
-        }
-#endif
-      else
-       {
-         dirname[0] = '.';
-         dirname[1] = '\0';
-       }
-
-      /* We aren't done yet.  We also support the "~user" syntax. */
-
-      /* Save the version of the directory that the user typed. */
-      users_dirname = savestring (dirname);
-
-      if (*dirname == '~')
-       {
-         temp = tilde_expand (dirname);
-         free (dirname);
-         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);
-         users_dirname = savestring (dirname);
-       }
-
-      directory = opendir (dirname);
-      filename_len = strlen (filename);
-
-      rl_filename_completion_desired = 1;
-    }
-
-  /* At this point we should entertain the possibility of hacking wildcarded
-     filenames, like /usr/man/man<WILD>/te<TAB>.  If the directory name
-     contains globbing characters, then build an array of directories, and
-     then map over that list while completing. */
-  /* *** UNIMPLEMENTED *** */
-
-  /* Now that we have some state, we can read the directory. */
-
-  entry = (struct dirent *)NULL;
-  while (directory && (entry = readdir (directory)))
-    {
-      /* 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])))
-           break;
-       }
-      else
-       {
-         /* Otherwise, if these match up to the length of filename, then
-            it is a match. */
-         if (_rl_completion_case_fold)
-           {
-             if ((_rl_to_lower (entry->d_name[0]) == _rl_to_lower (filename[0])) &&
-                 (((int)D_NAMLEN (entry)) >= filename_len) &&
-                 (_rl_strnicmp (filename, entry->d_name, filename_len) == 0))
-               break;
-           }
-         else
-           {
-             if ((entry->d_name[0] == filename[0]) &&
-                 (((int)D_NAMLEN (entry)) >= filename_len) &&
-                 (strncmp (filename, entry->d_name, filename_len) == 0))
-               break;
-           }
-       }
-    }
-
-  if (entry == 0)
-    {
-      if (directory)
-       {
-         closedir (directory);
-         directory = (DIR *)NULL;
-       }
-      if (dirname)
-       {
-         free (dirname);
-         dirname = (char *)NULL;
-       }
-      if (filename)
-       {
-         free (filename);
-         filename = (char *)NULL;
-       }
-      if (users_dirname)
-       {
-         free (users_dirname);
-         users_dirname = (char *)NULL;
-       }
-
-      return (char *)NULL;
-    }
-  else
-    {
-      /* dirname && (strcmp (dirname, ".") != 0) */
-      if (dirname && (dirname[0] != '.' || dirname[1]))
-       {
-         if (rl_complete_with_tilde_expansion && *users_dirname == '~')
-           {
-             dirlen = strlen (dirname);
-             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. */
-             if (dirname[dirlen - 1] != '/')
-               {
-                 temp[dirlen++] = '/';
-                 temp[dirlen] = '\0';
-               }
-           }
-         else
-           {
-             dirlen = strlen (users_dirname);
-             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);
-       }
-      else
-       temp = savestring (entry->d_name);
-
-      return (temp);
-    }
-}
-
-/* An initial implementation of a menu completion function a la tcsh.  The
-   first time (if the last readline command was not rl_menu_complete), we
-   generate the list of matches.  This code is very similar to the code in
-   rl_complete_internal -- there should be a way to combine the two.  Then,
-   for each item in the list of matches, we insert the match in an undoable
-   fashion, with the appropriate character appended (this happens on the
-   second and subsequent consecutive calls to rl_menu_complete).  When we
-   hit the end of the match list, we restore the original unmatched text,
-   ring the bell, and reset the counter to zero. */
-int
-rl_menu_complete (count, ignore)
-     int count, ignore;
-{
-  rl_compentry_func_t *our_func;
-  int matching_filenames, found_quote;
-
-  static char *orig_text;
-  static char **matches = (char **)0;
-  static int match_list_index = 0;
-  static int match_list_size = 0;
-  static int orig_start, orig_end;
-  static char quote_char;
-  static int delimiter;
-
-  /* The first time through, we generate the list of matches and set things
-     up to insert them. */
-  if (rl_last_func != rl_menu_complete)
-    {
-      /* Clean up from previous call, if any. */
-      FREE (orig_text);
-      if (matches)
-       _rl_free_match_list (matches);
-
-      match_list_index = match_list_size = 0;
-      matches = (char **)NULL;
-
-      /* Only the completion entry function can change these. */
-      set_completion_defaults ('%');
-
-      our_func = rl_completion_entry_function
-                       ? rl_completion_entry_function
-                       : rl_filename_completion_function;
-
-      /* We now look backwards for the start of a filename/variable word. */
-      orig_end = rl_point;
-      found_quote = delimiter = 0;
-      quote_char = '\0';
-
-      if (rl_point)
-       /* This (possibly) changes rl_point.  If it returns a non-zero char,
-          we know we have an open quote. */
-       quote_char = _rl_find_completion_word (&found_quote, &delimiter);
-
-      orig_start = rl_point;
-      rl_point = orig_end;
-
-      orig_text = rl_copy_text (orig_start, orig_end);
-      matches = gen_completion_matches (orig_text, orig_start, orig_end,
-                                       our_func, found_quote, quote_char);
-
-      /* If we are matching filenames, the attempted completion function will
-        have set rl_filename_completion_desired to a non-zero value.  The basic
-        rl_filename_completion_function does this. */
-      matching_filenames = rl_filename_completion_desired;
-
-      if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0)
-       {
-         rl_ding ();
-         FREE (matches);
-         matches = (char **)0;
-         FREE (orig_text);
-         orig_text = (char *)0;
-         completion_changed_buffer = 0;
-          return (0);
-       }
-
-      for (match_list_size = 0; matches[match_list_size]; match_list_size++)
-        ;
-      /* matches[0] is lcd if match_list_size > 1, but the circular buffer
-        code below should take care of it. */
-    }
-
-  /* Now we have the list of matches.  Replace the text between
-     rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with
-     matches[match_list_index], and add any necessary closing char. */
-
-  if (matches == 0 || match_list_size == 0) 
-    {
-      rl_ding ();
-      FREE (matches);
-      matches = (char **)0;
-      completion_changed_buffer = 0;
-      return (0);
-    }
-
-  match_list_index = (match_list_index + count) % match_list_size;
-  if (match_list_index < 0)
-    match_list_index += match_list_size;
-
-  if (match_list_index == 0 && match_list_size > 1)
-    {
-      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,
-                      strcmp (orig_text, matches[match_list_index]));
-    }
-
-  completion_changed_buffer = 1;
-  return (0);
-}
diff --git a/contrib/readline-5.0/display.c b/contrib/readline-5.0/display.c
deleted file mode 100644 (file)
index 0ff428e..0000000
+++ /dev/null
@@ -1,2282 +0,0 @@
-/* display.c -- readline redisplay facility. */
-
-/* Copyright (C) 1987-2004 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>
-
-#if defined (HAVE_UNISTD_H)
-#  include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include "posixstat.h"
-
-#if defined (HAVE_STDLIB_H)
-#  include <stdlib.h>
-#else
-#  include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <stdio.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-#include "rlmbutil.h"
-
-/* Termcap library stuff. */
-#include "tcap.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#include "rlprivate.h"
-#include "xmalloc.h"
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-#if defined (HACK_TERMCAP_MOTION)
-extern char *_rl_term_forward_char;
-#endif
-
-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((const 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;
-
-/* Heuristic used to decide whether it is faster to move from CUR to NEW
-   by backing up or outputting a carriage return and moving forward. */
-#define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new)))
-
-/* **************************************************************** */
-/*                                                                 */
-/*                     Display stuff                               */
-/*                                                                 */
-/* **************************************************************** */
-
-/* This is the stuff that is hard for me.  I never seem to write good
-   display routines in C.  Let's see how I do this time. */
-
-/* (PWP) Well... Good for a simple line updater, but totally ignores
-   the problems of input lines longer than the screen width.
-
-   update_line and the code that calls it makes a multiple line,
-   automatically wrapping line update.  Careful attention needs
-   to be paid to the vertical position variables. */
-
-/* Keep two buffers; one which reflects the current contents of the
-   screen, and the other to draw what we think the new contents should
-   be.  Then compare the buffers, and make whatever changes to the
-   screen itself that we should.  Finally, make the buffer that we
-   just drew into be the one which reflects the current contents of the
-   screen, and place the cursor where it belongs.
-
-   Commands that want to can fix the display themselves, and then let
-   this function know that the display has been fixed by setting the
-   RL_DISPLAY_FIXED variable.  This is good for efficiency. */
-
-/* Application-specific redisplay function. */
-rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
-
-/* Global variables declared here. */
-/* What YOU turn on when you have handled all redisplay yourself. */
-int rl_display_fixed = 0;
-
-int _rl_suppress_redisplay = 0;
-
-/* The stuff that gets printed out before the actual text of the line.
-   This is usually pointing to rl_prompt. */
-char *rl_display_prompt = (char *)NULL;
-
-/* Pseudo-global variables declared here. */
-/* The visible cursor position.  If you print some text, adjust this. */
-int _rl_last_c_pos = 0;
-int _rl_last_v_pos = 0;
-
-/* Number of lines currently on screen minus 1. */
-int _rl_vis_botlin = 0;
-
-/* Variables used only in this file. */
-/* The last left edge of text that was displayed.  This is used when
-   doing horizontal scrolling.  It shifts in thirds of a screenwidth. */
-static int last_lmargin;
-
-/* The line display buffers.  One is the line currently displayed on
-   the screen.  The other is the line about to be displayed. */
-static char *visible_line = (char *)NULL;
-static char *invisible_line = (char *)NULL;
-
-/* A buffer for `modeline' messages. */
-static char msg_buf[128];
-
-/* Non-zero forces the redisplay even if we thought it was unnecessary. */
-static int forced_display;
-
-/* 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 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;
-
-/* 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 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;
-
-static int prompt_physical_chars;
-
-/* 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. NIFLP,
-   if non-zero, is a place to store the number of invisible characters in
-   the first prompt line.  The previous are used as byte counts -- indexes
-   into a character buffer. */
-
-/* Current implementation:
-       \001 (^A) start non-visible characters
-       \002 (^B) end non-visible characters
-   all characters except \001 and \002 (following a \001) are copied to
-   the returned string; all characters except those between \001 and
-   \002 are assumed to be `visible'. */        
-
-static char *
-expand_prompt (pmt, lp, lip, niflp, vlp)
-     char *pmt;
-     int *lp, *lip, *niflp, *vlp;
-{
-  char *r, *ret, *p;
-  int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
-
-  /* Short-circuit if we can. */
-  if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
-    {
-      r = savestring (pmt);
-      if (lp)
-       *lp = strlen (r);
-      if (lip)
-       *lip = 0;
-      if (niflp)
-       *niflp = 0;
-      if (vlp)
-       *vlp = lp ? *lp : strlen (r);
-      return r;
-    }
-
-  l = strlen (pmt);
-  r = ret = (char *)xmalloc (l + 1);
-
-  invfl = 0;   /* invisible chars in first line of prompt */
-
-  for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
-    {
-      /* This code strips the invisible character string markers
-        RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */
-      if (*p == RL_PROMPT_START_IGNORE)
-       {
-         ignoring++;
-         continue;
-       }
-      else if (ignoring && *p == RL_PROMPT_END_IGNORE)
-       {
-         ignoring = 0;
-         last = r - ret - 1;
-         continue;
-       }
-      else
-       {
-#if defined (HANDLE_MULTIBYTE)
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {
-             pind = p - pmt;
-             ind = _rl_find_next_mbchar (pmt, pind, 1, MB_FIND_NONZERO);
-             l = ind - pind;
-             while (l--)
-               *r++ = *p++;
-             if (!ignoring)
-               rl += ind - pind;
-             else
-               ninvis += ind - pind;
-             p--;                      /* compensate for later increment */
-           }
-         else
-#endif
-           {
-             *r++ = *p;
-             if (!ignoring)
-               rl++;                   /* visible length byte counter */
-             else
-               ninvis++;               /* invisible chars byte counter */
-           }
-
-         if (rl >= _rl_screenwidth)
-           invfl = ninvis;
-
-         if (ignoring == 0)
-           physchars++;
-       }
-    }
-
-  if (rl < _rl_screenwidth)
-    invfl = ninvis;
-
-  *r = '\0';
-  if (lp)
-    *lp = rl;
-  if (lip)
-    *lip = last;
-  if (niflp)
-    *niflp = invfl;
-  if  (vlp)
-    *vlp = physchars;
-  return ret;
-}
-
-/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from
-   PMT and return the rest of PMT. */
-char *
-_rl_strip_prompt (pmt)
-     char *pmt;
-{
-  char *ret;
-
-  ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL);
-  return ret;
-}
-
-/*
- * Expand the prompt string into the various display components, if
- * necessary.
- *
- * local_prompt = expanded last line of string in rl_display_prompt
- *               (portion after the final newline)
- * local_prompt_prefix = portion before last newline of rl_display_prompt,
- *                      expanded via expand_prompt
- * 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.
- *
- * The return value is the number of visible characters on the last line
- * of the (possibly multi-line) prompt.
- */
-int
-rl_expand_prompt (prompt)
-     char *prompt;
-{
-  char *p, *t;
-  int c;
-
-  /* Clear out any saved values. */
-  FREE (local_prompt);
-  FREE (local_prompt_prefix);
-
-  local_prompt = local_prompt_prefix = (char *)0;
-  prompt_last_invisible = prompt_visible_length = 0;
-
-  if (prompt == 0 || *prompt == 0)
-    return (0);
-
-  p = strrchr (prompt, '\n');
-  if (!p)
-    {
-      /* 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,
-                                           &prompt_physical_chars);
-      local_prompt_prefix = (char *)0;
-      return (prompt_visible_length);
-    }
-  else
-    {
-      /* The prompt spans multiple lines. */
-      t = ++p;
-      local_prompt = expand_prompt (p, &prompt_visible_length,
-                                      &prompt_last_invisible,
-                                      (int *)NULL,
-                                      (int *)NULL);
-      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, &prompt_prefix_length,
-                                                  (int *)NULL,
-                                                  &prompt_invis_chars_first_line,
-                                                  &prompt_physical_chars);
-      *t = c;
-      return (prompt_prefix_length);
-    }
-}
-
-/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated
-   arrays of line break markers.  MINSIZE is the minimum size of VISIBLE_LINE
-   and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is
-   increased.  If the lines have already been allocated, this ensures that
-   they can hold at least MINSIZE characters. */
-static void
-init_line_structures (minsize)
-      int minsize;
-{
-  register int n;
-
-  if (invisible_line == 0)     /* initialize it */
-    {
-      if (line_size < minsize)
-       line_size = minsize;
-      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 = (char *)xrealloc (visible_line, line_size);
-      invisible_line = (char *)xrealloc (invisible_line, line_size);
-    }
-
-  for (n = minsize; n < line_size; n++)
-    {
-      visible_line[n] = 0;
-      invisible_line[n] = 1;
-    }
-
-  if (vis_lbreaks == 0)
-    {
-      /* should be enough. */
-      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;
-    }
-}
-  
-/* Basic redisplay algorithm. */
-void
-rl_redisplay ()
-{
-  register int in, out, c, linenum, cursor_linenum;
-  register char *line;
-  int c_pos, inv_botlin, lb_botlin, lb_linenum;
-  int newlines, lpos, temp, modmark;
-  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;
-
-  if (!rl_display_prompt)
-    rl_display_prompt = "";
-
-  if (invisible_line == 0)
-    {
-      init_line_structures (0);
-      rl_on_new_line ();
-    }
-
-  /* Draw the line into the buffer. */
-  c_pos = -1;
-
-  line = invisible_line;
-  out = inv_botlin = 0;
-
-  /* Mark the line as modified or not.  We only do this for history
-     lines. */
-  modmark = 0;
-  if (_rl_mark_modified_lines && current_history () && rl_undo_list)
-    {
-      line[out++] = '*';
-      line[out] = '\0';
-      modmark = 1;
-    }
-
-  /* If someone thought that the redisplay was handled, but the currently
-     visible line has a different modification state than the one about
-     to become visible, then correct the caller's misconception. */
-  if (visible_line[0] != invisible_line[0])
-    rl_display_fixed = 0;
-
-  /* If the prompt to be displayed is the `primary' readline prompt (the
-     one passed to readline()), use the values we have already expanded.
-     If not, use what's already in rl_display_prompt.  WRAP_OFFSET is the
-     number of non-visible characters in the prompt string. */
-  if (rl_display_prompt == rl_prompt || local_prompt)
-    {
-      int local_len = local_prompt ? strlen (local_prompt) : 0;
-      if (local_prompt_prefix && forced_display)
-       _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix));
-
-      if (local_len > 0)
-       {
-         temp = local_len + out + 2;
-         if (temp >= line_size)
-           {
-             line_size = (temp + 1024) - (temp % 1024);
-             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 - prompt_visible_length;
-    }
-  else
-    {
-      int pmtlen;
-      prompt_this_line = strrchr (rl_display_prompt, '\n');
-      if (!prompt_this_line)
-       prompt_this_line = rl_display_prompt;
-      else
-       {
-         prompt_this_line++;
-         pmtlen = prompt_this_line - rl_display_prompt;        /* temp var */
-         if (forced_display)
-           {
-             _rl_output_some_chars (rl_display_prompt, pmtlen);
-             /* Make sure we are at column zero even after a newline,
-                regardless of the state of terminal output processing. */
-             if (pmtlen < 2 || prompt_this_line[-2] != '\r')
-               cr ();
-           }
-       }
-
-      prompt_physical_chars = pmtlen = strlen (prompt_this_line);
-      temp = pmtlen + out + 2;
-      if (temp >= line_size)
-       {
-         line_size = (temp + 1024) - (temp % 1024);
-         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 = prompt_invis_chars_first_line = 0;
-    }
-
-#define CHECK_INV_LBREAKS() \
-      do { \
-       if (newlines >= (inv_lbsize - 2)) \
-         { \
-           inv_lbsize *= 2; \
-           inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
-         } \
-      } while (0)
-
-#if defined (HANDLE_MULTIBYTE)   
-#define CHECK_LPOS() \
-      do { \
-       lpos++; \
-       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)) \
-             { \
-               inv_lbsize *= 2; \
-               inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
-             } \
-           inv_lbreaks[++newlines] = out; \
-           lpos = 0; \
-         } \
-      } while (0)
-#endif
-
-  /* inv_lbreaks[i] is where line i starts in the buffer. */
-  inv_lbreaks[newlines = 0] = 0;
-#if 0
-  lpos = out - wrap_offset;
-#else
-  lpos = prompt_physical_chars + modmark;
-#endif
-
-#if defined (HANDLE_MULTIBYTE)
-  memset (_rl_wrapped_line, 0, vis_lbsize);
-#endif
-
-  /* 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 >= _rl_screenwidth)
-    {
-      /* 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?
-         Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
-      temp = ((newlines + 1) * _rl_screenwidth) +
-             ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
-                                                           : ((newlines == 1) ? wrap_offset : 0))
-                                        : ((newlines == 0) ? wrap_offset :0));
-             
-      inv_lbreaks[++newlines] = temp;
-      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 (MB_INVALIDCH (wc_bytes))
-           {
-             /* 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 (MB_NULLWCH (wc_bytes))
-           break;                      /* Found '\0' */
-         else
-           {
-             temp = wcwidth (wc);
-             wc_width = (temp >= 0) ? temp : 1;
-           }
-       }
-#endif
-
-      if (out + 8 >= line_size)                /* XXX - 8 for \t */
-       {
-         line_size *= 2;
-         visible_line = (char *)xrealloc (visible_line, line_size);
-         invisible_line = (char *)xrealloc (invisible_line, line_size);
-         line = invisible_line;
-       }
-
-      if (in == rl_point)
-       {
-         c_pos = out;
-         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 >= _rl_screenwidth)
-               {
-                 temp = _rl_screenwidth - lpos;
-                 CHECK_INV_LBREAKS ();
-                 inv_lbreaks[++newlines] = out + temp;
-                 lpos = 4 - temp;
-               }
-             else
-               lpos += 4;
-
-             out += 4;
-           }
-         else
-           {
-             line[out++] = c;
-             CHECK_LPOS();
-           }
-       }
-#if defined (DISPLAY_TABS)
-      else if (c == '\t')
-       {
-         register int newout;
-
-#if 0
-         newout = (out | (int)7) + 1;
-#else
-         newout = out + 8 - lpos % 8;
-#endif
-         temp = newout - out;
-         if (lpos + temp >= _rl_screenwidth)
-           {
-             register int temp2;
-             temp2 = _rl_screenwidth - lpos;
-             CHECK_INV_LBREAKS ();
-             inv_lbreaks[++newlines] = out + temp2;
-             lpos = temp - temp2;
-             while (out < newout)
-               line[out++] = ' ';
-           }
-         else
-           {
-             while (out < newout)
-               line[out++] = ' ';
-             lpos += temp;
-           }
-       }
-#endif
-      else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
-       {
-         line[out++] = '\0';   /* XXX - sentinel */
-         CHECK_INV_LBREAKS ();
-         inv_lbreaks[++newlines] = out;
-         lpos = 0;
-       }
-      else if (CTRL_CHAR (c) || c == RUBOUT)
-       {
-         line[out++] = '^';
-         CHECK_LPOS();
-         line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?';
-         CHECK_LPOS();
-       }
-      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)
-    {
-      c_pos = out;
-      lb_linenum = newlines;
-    }
-
-  inv_botlin = lb_botlin = newlines;
-  CHECK_INV_LBREAKS ();
-  inv_lbreaks[newlines+1] = out;
-  cursor_linenum = lb_linenum;
-
-  /* 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
-     (screenwidth - 1) characters.  Go through each in turn, finding
-     the changed region and updating it.  The line order is top to bottom. */
-
-  /* If we can move the cursor up and down, then use multiple lines,
-     otherwise, let long lines display in a single terminal line, and
-     horizontally scroll it. */
-
-  if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
-    {
-      int nleft, pos, changed_screen_line;
-
-      if (!rl_display_fixed || forced_display)
-       {
-         forced_display = 0;
-
-         /* 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 >= _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
-            OFFSET (which has already been calculated above).  */
-
-#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0)
-#define VIS_LLEN(l)    ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
-#define INV_LLEN(l)    (inv_lbreaks[l+1] - inv_lbreaks[l])
-#define VIS_CHARS(line) (visible_line + vis_lbreaks[line])
-#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line)
-#define INV_LINE(line) (invisible_line + inv_lbreaks[line])
-
-         /* For each line in the buffer, do the updating display. */
-         for (linenum = 0; linenum <= inv_botlin; linenum++)
-           {
-             update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
-                          VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
-
-             /* If this is the line with the prompt, we might need to
-                compensate for invisible characters in the new line. Do
-                this only if there is not more than one new line (which
-                implies that we completely overwrite the old visible line)
-                and the new line is shorter than the old.  Make sure we are
-                at the end of the new line before clearing. */
-             if (linenum == 0 &&
-                 inv_botlin == 0 && _rl_last_c_pos == out &&
-                 (wrap_offset > visible_wrap_offset) &&
-                 (_rl_last_c_pos < visible_first_line_len))
-               {
-                 nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
-                 if (nleft)
-                   _rl_clear_to_eol (nleft);
-               }
-
-             /* Since the new first line is now visible, save its length. */
-             if (linenum == 0)
-               visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset;
-           }
-
-         /* We may have deleted some lines.  If so, clear the left over
-            blank ones at the bottom out. */
-         if (_rl_vis_botlin > inv_botlin)
-           {
-             char *tt;
-             for (; linenum <= _rl_vis_botlin; linenum++)
-               {
-                 tt = VIS_CHARS (linenum);
-                 _rl_move_vert (linenum);
-                 _rl_move_cursor_relative (0, tt);
-                 _rl_clear_to_eol
-                   ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
-               }
-           }
-         _rl_vis_botlin = inv_botlin;
-
-         /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a
-            different screen line during this redisplay. */
-         changed_screen_line = _rl_last_v_pos != cursor_linenum;
-         if (changed_screen_line)
-           {
-             _rl_move_vert (cursor_linenum);
-             /* 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. */
-             if (cursor_linenum == 0 && wrap_offset)
-               _rl_last_c_pos += wrap_offset;
-           }
-
-         /* We have to reprint the prompt if it contains invisible
-            characters, since it's not generally OK to just reprint
-            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 = prompt_visible_length + wrap_offset;
-         if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
-             _rl_last_c_pos <= prompt_last_invisible && local_prompt)
-           {
-#if defined (__MSDOS__)
-             putc ('\r', rl_outstream);
-#else
-             if (_rl_term_cr)
-               tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
-             _rl_output_some_chars (local_prompt, 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
-            in the buffer? */
-         pos = inv_lbreaks[cursor_linenum];
-         /* nleft == number of characters in the line buffer between the
-            start of the line and the cursor position. */
-         nleft = c_pos - pos;
-
-         /* Since _rl_backspace() doesn't know about invisible characters in the
-            prompt, and there's no good way to tell it, we compensate for
-            those characters here and call _rl_backspace() directly. */
-         if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
-           {
-             _rl_backspace (_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 (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]);
-       }
-    }
-  else                         /* Do horizontal scrolling. */
-    {
-#define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0)
-      int lmargin, ndisp, nleft, phys_c_pos, t;
-
-      /* Always at top line. */
-      _rl_last_v_pos = 0;
-
-      /* Compute where in the buffer the displayed line should start.  This
-        will be LMARGIN. */
-
-      /* The number of characters that will be displayed before the cursor. */
-      ndisp = c_pos - 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 = _rl_screenwidth / 3;
-
-      /* If the number of characters had already exceeded the screenwidth,
-        last_lmargin will be > 0. */
-
-      /* 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 > _rl_screenwidth - 2)
-       {
-         lmargin = c_pos - (2 * t);
-         if (lmargin < 0)
-           lmargin = 0;
-         /* If the left margin would be in the middle of a prompt with
-            invisible characters, don't display the prompt at all. */
-         if (wrap_offset && lmargin > 0 && lmargin < nleft)
-           lmargin = nleft;
-       }
-      else if (ndisp < _rl_screenwidth - 2)            /* XXX - was -1 */
-       lmargin = 0;
-      else if (phys_c_pos < 1)
-       {
-         /* If we are moving back towards the beginning of the line and
-            the last margin is no longer correct, compute a new one. */
-         lmargin = ((c_pos - 1) / t) * t;      /* XXX */
-         if (wrap_offset && lmargin > 0 && lmargin < nleft)
-           lmargin = nleft;
-       }
-      else
-       lmargin = last_lmargin;
-
-      /* If the first character on the screen isn't the first character
-        in the display line, indicate this with a special character. */
-      if (lmargin > 0)
-       line[lmargin] = '<';
-
-      /* If SCREENWIDTH characters starting at LMARGIN do not encompass
-        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) + _rl_screenwidth;
-      if (t < out)
-       line[t - 1] = '>';
-
-      if (!rl_display_fixed || forced_display || lmargin != last_lmargin)
-       {
-         forced_display = 0;
-         update_line (&visible_line[last_lmargin],
-                      &invisible_line[lmargin],
-                      0,
-                      _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
-            of invisible characters is greater, and we are at the end of
-            the new line, we need to clear to eol. */
-         t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset);
-         if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) &&
-             (_rl_last_c_pos == out) &&
-             t < visible_first_line_len)
-           {
-             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 > _rl_screenwidth)
-           visible_first_line_len = _rl_screenwidth;
-
-         _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
-         last_lmargin = lmargin;
-       }
-    }
-  fflush (rl_outstream);
-
-  /* Swap visible and non-visible lines. */
-  {
-    char *vtemp = visible_line;
-    int *itemp = vis_lbreaks, ntemp = vis_lbsize;
-
-    visible_line = invisible_line;
-    invisible_line = vtemp;
-
-    vis_lbreaks = inv_lbreaks;
-    inv_lbreaks = itemp;
-
-    vis_lbsize = inv_lbsize;
-    inv_lbsize = ntemp;
-
-    rl_display_fixed = 0;
-    /* If we are displaying on a single line, and last_lmargin is > 0, we
-       are not displaying any invisible characters, so set visible_wrap_offset
-       to 0. */
-    if (_rl_horizontal_scroll_mode && last_lmargin)
-      visible_wrap_offset = 0;
-    else
-      visible_wrap_offset = wrap_offset;
-  }
-}
-
-/* PWP: update_line() is based on finding the middle difference of each
-   line on the screen; vis:
-
-                            /old first difference
-       /beginning of line   |        /old last same       /old EOL
-       v                    v        v             v
-old:   eddie> Oh, my little gruntle-buggy is to me, as lurgid as
-new:   eddie> Oh, my little buggy says to me, as lurgid as
-       ^                    ^  ^                          ^
-       \beginning of line   |  \new last same     \new end of line
-                            \new first difference
-
-   All are character pointers for the sake of speed.  Special cases for
-   no differences, as well as for end of line additions must be handled.
-
-   Could be made even smarter, but this works well enough */
-static void
-update_line (old, new, current_line, omax, nmax, inv_botlin)
-     register char *old, *new;
-     int current_line, omax, nmax, inv_botlin;
-{
-  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
-     the exact cursor position and cut-and-paste with certain terminal
-     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 == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
-       && _rl_last_v_pos == current_line - 1)
-    {
-#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 (MB_INVALIDCH (ret))
-           {
-             tempwidth = 1;
-             ret = 1;
-           }
-         else if (MB_NULLWCH (ret))
-           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 (MB_INVALIDCH (ret))
-                   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
-#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)
-    {
-      /* See if the old line is a subset of the new line, so that the
-        only change is adding characters. */
-      temp = (omax < nmax) ? omax : nmax;
-      if (memcmp (old, new, temp) == 0)
-       {
-         ofd = old + temp;
-         nfd = new + temp;
-       }
-      else
-       {      
-         memset (&ps_new, 0, sizeof(mbstate_t));
-         memset (&ps_old, 0, sizeof(mbstate_t));
-
-         if (omax == nmax && STREQN (new, old, omax))
-           {
-             ofd = old + omax;
-             nfd = new + nmax;
-           }
-         else
-           {
-             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++)
-    ;
-
-  /* Move to the end of the screen line.  ND and OD are used to keep track
-     of the distance between ne and new and oe and old, respectively, to
-     move a subtraction out of each loop. */
-  for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++);
-  for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++);
-
-  /* If no difference, continue to next line. */
-  if (ofd == oe && nfd == ne)
-    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));
-
-#if 0
-         /* On advice from jir@yamato.ibm.com */
-         _rl_adjust_point (old, ols - old, &ps_old);
-         _rl_adjust_point (new, nls - new, &ps_new);
-#endif
-
-         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))
-    {
-      if (*ols != ' ')
-       wsatend = 0;
-      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 */
-       {
-         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)
-       {
-         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. */
-  current_invis_chars = W_OFFSET (current_line, wrap_offset);
-  if (_rl_last_v_pos != current_line)
-    {
-      _rl_move_vert (current_line);
-      if (current_line == 0 && visible_wrap_offset)
-       _rl_last_c_pos += visible_wrap_offset;
-    }
-
-  /* If this is the first line and there are invisible characters in the
-     prompt string, and the prompt string has not changed, and the current
-     cursor position is before the last invisible character in the prompt,
-     and the index of the character to move to is past the end of the prompt
-     string, then redraw the entire prompt string.  We can only do this
-     reliably if the terminal supports a `cr' capability.
-
-     This is not an efficiency hack -- there is a problem with redrawing
-     portions of the prompt string if they contain terminal escape
-     sequences (like drawing the `unbold' sequence without a corresponding
-     `bold') that manifests itself on certain terminals. */
-
-  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 &&
-      _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 (_rl_term_cr, 1, _rl_output_character_function);
-#endif
-      _rl_output_some_chars (local_prompt, 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))
-     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)
-    {
-      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 (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;
-      /* Sometimes it is cheaper to print the characters rather than
-        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 (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
-       {
-         /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
-            _rl_horizontal_scroll_mode == 1, inserting the characters with
-            _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 <= prompt_visible_length || !current_invis_chars))
-           {
-             insert_some_chars (nfd, lendiff, col_lendiff);
-             _rl_last_c_pos += col_lendiff;
-           }
-         else if (*ols == 0 && lendiff > 0)
-           {
-             /* At the end of a line the characters do not have to
-                be "inserted".  They can just be placed on the screen. */
-             /* 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 += col_lendiff;
-           }
-         else
-           {
-             /* We have horizontal scrolling and we are not inserting at
-                the end.  We have invisible characters in this line.  This
-                is a dumb update. */
-             _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
-             return;
-           }
-         /* Copy (new) chars to screen from first diff to last match. */
-         temp = nls - nfd;
-         if ((temp - lendiff) > 0)
-           {
-             _rl_output_some_chars (nfd + lendiff, temp - lendiff);
-#if 1
-            /* XXX -- this bears closer inspection.  Fixes a redisplay bug
-               reported against bash-3.0-alpha by Andreas Schwab involving
-               multibyte characters and prompt strings with invisible
-               characters, but was previously disabled. */
-             _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
-#else
-             _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff);
-#endif
-           }
-       }
-      else
-       {
-         /* cannot insert chars, write to EOL */
-         _rl_output_some_chars (nfd, temp);
-         _rl_last_c_pos += col_temp;
-       }
-    }
-  else                         /* Delete characters from line. */
-    {
-      /* If possible and inexpensive to use terminal deletion, then do so. */
-      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)
-           col_lendiff = 0;
-
-         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 += _rl_col_width (nfd, 0, temp);;
-           }
-       }
-      /* Otherwise, print over the existing material. */
-      else
-       {
-         if (temp > 0)
-           {
-             _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
-           }
-         lendiff = (oe - old) - (ne - new);
-         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 (col_lendiff);
-             else
-               _rl_clear_to_eol (col_lendiff);
-           }
-       }
-    }
-}
-
-/* Tell the update routines that we have moved onto a new (empty) line. */
-int
-rl_on_new_line ()
-{
-  if (visible_line)
-    visible_line[0] = '\0';
-
-  _rl_last_c_pos = _rl_last_v_pos = 0;
-  _rl_vis_botlin = last_lmargin = 0;
-  if (vis_lbreaks)
-    vis_lbreaks[0] = vis_lbreaks[1] = 0;
-  visible_wrap_offset = 0;
-  return 0;
-}
-
-/* Tell the update routines that we have moved onto a new line with the
-   prompt already displayed.  Code originally from the version of readline
-   distributed with CLISP.  rl_expand_prompt must have already been called
-   (explicitly or implicitly).  This still doesn't work exactly right. */
-int
-rl_on_new_line_with_prompt ()
-{
-  int prompt_size, i, l, real_screenwidth, newlines;
-  char *prompt_last_line, *lprompt;
-
-  /* Initialize visible_line and invisible_line to ensure that they can hold
-     the already-displayed prompt. */
-  prompt_size = strlen (rl_prompt) + 1;
-  init_line_structures (prompt_size);
-
-  /* Make sure the line structures hold the already-displayed prompt for
-     redisplay. */
-  lprompt = local_prompt ? local_prompt : rl_prompt;
-  strcpy (visible_line, lprompt);
-  strcpy (invisible_line, lprompt);
-
-  /* If the prompt contains newlines, take the last tail. */
-  prompt_last_line = strrchr (rl_prompt, '\n');
-  if (!prompt_last_line)
-    prompt_last_line = rl_prompt;
-
-  l = strlen (prompt_last_line);
-  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 = _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
-     beginning of the next line. Output a newline just to be safe. */
-  if (l > 0 && (l % real_screenwidth) == 0)
-    _rl_output_some_chars ("\n", 1);
-  last_lmargin = 0;
-
-  newlines = 0; i = 0;
-  while (i <= l)
-    {
-      _rl_vis_botlin = newlines;
-      vis_lbreaks[newlines++] = i;
-      i += real_screenwidth;
-    }
-  vis_lbreaks[newlines] = l;
-  visible_wrap_offset = 0;
-
-  rl_display_prompt = rl_prompt;       /* XXX - make sure it's set */
-
-  return 0;
-}
-
-/* Actually update the display, period. */
-int
-rl_forced_update_display ()
-{
-  if (visible_line)
-    {
-      register char *temp = visible_line;
-
-      while (*temp)
-       *temp++ = '\0';
-    }
-  rl_on_new_line ();
-  forced_display++;
-  (*rl_redisplay_function) ();
-  return 0;
-}
-
-/* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
-   DATA is the contents of the screen line of interest; i.e., where
-   the movement is being done. */
-void
-_rl_move_cursor_relative (new, data)
-     int new;
-     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 and must be
-     calculated. */
-  if (MB_CUR_MAX == 1 || rl_byte_oriented)
-    {
-      if (_rl_last_c_pos == new)
-       return;
-    }
-  else if (_rl_last_c_pos == _rl_col_width (data, 0, 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 == _rl_screenwidth))
-    {
-#if defined (__MSDOS__)
-      putc ('\r', rl_outstream);
-#else
-      tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif /* !__MSDOS__ */
-      _rl_last_c_pos = 0;
-    }
-
-  if (_rl_last_c_pos < new)
-    {
-      /* Move the cursor forward.  We do it by printing the command
-        to move the cursor forward if there is one, else print that
-        portion of the output buffer again.  Which is cheaper? */
-
-      /* The above comment is left here for posterity.  It is faster
-        to print one character (non-control) than to print a control
-        sequence telling the terminal to move forward one character.
-        That kind of control is for people who don't know what the
-        data is underneath the cursor. */
-#if defined (HACK_TERMCAP_MOTION)
-      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 /* !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)
-#endif
-    {
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
-      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. */
-void
-_rl_move_vert (to)
-     int to;
-{
-  register int delta, i;
-
-  if (_rl_last_v_pos == to || to > _rl_screenheight)
-    return;
-
-  if ((delta = to - _rl_last_v_pos) > 0)
-    {
-      for (i = 0; i < delta; i++)
-       putc ('\n', rl_outstream);
-#if defined (__MSDOS__)
-      putc ('\r', rl_outstream);
-#else
-      tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
-      _rl_last_c_pos = 0;
-    }
-  else
-    {                  /* delta < 0 */
-      if (_rl_term_up && *_rl_term_up)
-       for (i = 0; i < -delta; i++)
-         tputs (_rl_term_up, 1, _rl_output_character_function);
-    }
-
-  _rl_last_v_pos = to;         /* Now TO is here */
-}
-
-/* Physically print C on rl_outstream.  This is for functions which know
-   how to optimize the display.  Return the number of characters output. */
-int
-rl_show_char (c)
-     int c;
-{
-  int n = 1;
-  if (META_CHAR (c) && (_rl_output_meta_chars == 0))
-    {
-      fprintf (rl_outstream, "M-");
-      n += 2;
-      c = UNMETA (c);
-    }
-
-#if defined (DISPLAY_TABS)
-  if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT)
-#else
-  if (CTRL_CHAR (c) || c == RUBOUT)
-#endif /* !DISPLAY_TABS */
-    {
-      fprintf (rl_outstream, "C-");
-      n += 2;
-      c = CTRL_CHAR (c) ? UNCTRL (c) : '?';
-    }
-
-  putc (c, rl_outstream);
-  fflush (rl_outstream);
-  return n;
-}
-
-int
-rl_character_len (c, pos)
-     register int c, pos;
-{
-  unsigned char uc;
-
-  uc = (unsigned char)c;
-
-  if (META_CHAR (uc))
-    return ((_rl_output_meta_chars == 0) ? 4 : 1);
-
-  if (uc == '\t')
-    {
-#if defined (DISPLAY_TABS)
-      return (((pos | 7) + 1) - pos);
-#else
-      return (2);
-#endif /* !DISPLAY_TABS */
-    }
-
-  if (CTRL_CHAR (c) || c == RUBOUT)
-    return (2);
-
-  return ((ISPRINT (uc)) ? 1 : 2);
-}
-
-/* How to print things in the "echo-area".  The prompt is treated as a
-   mini-modeline. */
-
-#if defined (USE_VARARGS)
-int
-#if defined (PREFER_STDARG)
-rl_message (const char *format, ...)
-#else
-rl_message (va_alist)
-     va_dcl
-#endif
-{
-  va_list args;
-#if defined (PREFER_VARARGS)
-  char *format;
-#endif
-
-#if defined (PREFER_STDARG)
-  va_start (args, format);
-#else
-  va_start (args);
-  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;
-  (*rl_redisplay_function) ();
-  return 0;
-}
-#else /* !USE_VARARGS */
-int
-rl_message (format, arg1, arg2)
-     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;
-}
-#endif /* !USE_VARARGS */
-
-/* How to clear things from the "echo-area". */
-int
-rl_clear_message ()
-{
-  rl_display_prompt = rl_prompt;
-  (*rl_redisplay_function) ();
-  return 0;
-}
-
-int
-rl_reset_line_state ()
-{
-  rl_on_new_line ();
-
-  rl_display_prompt = rl_prompt ? rl_prompt : "";
-  forced_display = 1;
-  return 0;
-}
-
-/* These are getting numerous enough that it's time to create a struct. */
-
-static char *saved_local_prompt;
-static char *saved_local_prefix;
-static int saved_last_invisible;
-static int saved_visible_length;
-static int saved_invis_chars_first_line;
-static int saved_physical_chars;
-
-void
-rl_save_prompt ()
-{
-  saved_local_prompt = local_prompt;
-  saved_local_prefix = local_prompt_prefix;
-  saved_last_invisible = prompt_last_invisible;
-  saved_visible_length = prompt_visible_length;
-  saved_invis_chars_first_line = prompt_invis_chars_first_line;
-  saved_physical_chars = prompt_physical_chars;
-
-  local_prompt = local_prompt_prefix = (char *)0;
- &nb