summaryrefslogtreecommitdiff
path: root/contrib/libreadline
diff options
context:
space:
mode:
authorcvs2svn <cvs2svn@FreeBSD.org>1997-03-17 04:05:04 +0000
committercvs2svn <cvs2svn@FreeBSD.org>1997-03-17 04:05:04 +0000
commit4894493155052a9d9af8a3b68c8b31e3b243a182 (patch)
tree5148bc9ca5168012f9ae26bcea7aa3b8b9394f50 /contrib/libreadline
parent274b8bdee754bb048d0267ee40ac9b784862ef31 (diff)
Diffstat (limited to 'contrib/libreadline')
-rw-r--r--contrib/libreadline/COPYING339
-rw-r--r--contrib/libreadline/ChangeLog403
-rw-r--r--contrib/libreadline/Makefile.in192
-rw-r--r--contrib/libreadline/README6
-rw-r--r--contrib/libreadline/STANDALONE32
-rw-r--r--contrib/libreadline/ansi_stdlib.h41
-rw-r--r--contrib/libreadline/bind.c1710
-rw-r--r--contrib/libreadline/callback.c144
-rw-r--r--contrib/libreadline/chardefs.h127
-rw-r--r--contrib/libreadline/display.c1503
-rw-r--r--contrib/libreadline/doc/Makefile69
-rw-r--r--contrib/libreadline/doc/hist.texinfo112
-rw-r--r--contrib/libreadline/doc/hstech.texinfo504
-rw-r--r--contrib/libreadline/doc/hsuser.texinfo304
-rw-r--r--contrib/libreadline/doc/rlman.texinfo110
-rw-r--r--contrib/libreadline/doc/rltech.texinfo1530
-rw-r--r--contrib/libreadline/doc/rluser.texinfo1166
-rw-r--r--contrib/libreadline/emacs_keymap.c885
-rw-r--r--contrib/libreadline/examples/Inputrc65
-rw-r--r--contrib/libreadline/examples/Makefile19
-rw-r--r--contrib/libreadline/examples/fileman.c426
-rw-r--r--contrib/libreadline/examples/histexamp.c82
-rw-r--r--contrib/libreadline/examples/manexamp.c94
-rw-r--r--contrib/libreadline/examples/rltest.c54
-rw-r--r--contrib/libreadline/funmap.c247
-rw-r--r--contrib/libreadline/histexpand.c1358
-rw-r--r--contrib/libreadline/histfile.c324
-rw-r--r--contrib/libreadline/histlib.h81
-rw-r--r--contrib/libreadline/history.c385
-rw-r--r--contrib/libreadline/history.h210
-rw-r--r--contrib/libreadline/histsearch.c197
-rw-r--r--contrib/libreadline/input.c449
-rw-r--r--contrib/libreadline/isearch.c410
-rw-r--r--contrib/libreadline/keymaps.c150
-rw-r--r--contrib/libreadline/keymaps.h95
-rw-r--r--contrib/libreadline/kill.c547
-rw-r--r--contrib/libreadline/macro.c277
-rw-r--r--contrib/libreadline/nls.c198
-rw-r--r--contrib/libreadline/parens.c156
-rw-r--r--contrib/libreadline/posixdir.h49
-rw-r--r--contrib/libreadline/posixstat.h142
-rw-r--r--contrib/libreadline/readline.c2003
-rw-r--r--contrib/libreadline/readline.h392
-rw-r--r--contrib/libreadline/rlconf.h63
-rw-r--r--contrib/libreadline/rldefs.h146
-rw-r--r--contrib/libreadline/rltty.c726
-rw-r--r--contrib/libreadline/rltty.h61
-rw-r--r--contrib/libreadline/search.c369
-rw-r--r--contrib/libreadline/signals.c334
-rw-r--r--contrib/libreadline/tcap.h57
-rw-r--r--contrib/libreadline/terminal.c554
-rw-r--r--contrib/libreadline/tilde.c390
-rw-r--r--contrib/libreadline/tilde.h59
-rw-r--r--contrib/libreadline/undo.c261
-rw-r--r--contrib/libreadline/util.c312
-rw-r--r--contrib/libreadline/vi_keymap.c877
-rw-r--r--contrib/libreadline/vi_mode.c1378
-rw-r--r--contrib/libreadline/xmalloc.c87
58 files changed, 0 insertions, 23261 deletions
diff --git a/contrib/libreadline/COPYING b/contrib/libreadline/COPYING
deleted file mode 100644
index a43ea2126fb6..000000000000
--- a/contrib/libreadline/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, 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.
-
- 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.)
-
-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.
-
- 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.
-
- 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
-
- 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., 675 Mass Ave, Cambridge, MA 02139, 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/libreadline/ChangeLog b/contrib/libreadline/ChangeLog
deleted file mode 100644
index 1cf0c004af56..000000000000
--- a/contrib/libreadline/ChangeLog
+++ /dev/null
@@ -1,403 +0,0 @@
-Tue Mar 23 14:36:51 1993 Brian Fox (bfox@eos.crseo.ucsb.edu)
-
- * readline.c (rl_copy): Changed name to rl_copy_text.
-
-Mon Mar 22 19:16:05 1993 Brian Fox (bfox@eos.crseo.ucsb.edu)
-
- * dispose_cmd.c, several other files. Declare dispose_xxx () as
- "void".
-
- * builtins/hashcom.h: Make declarations of hashed_filenames be
- "extern" to keep the SGI compiler happy.
-
- * readline.c (rl_initialize_everything): Assign values to
- out_stream and in_stream immediately, since
- output_character_function () can be called before
- readline_internal () is called.
-
-Tue Dec 8 09:30:56 1992 Brian Fox (bfox@cubit)
-
- * readline.c (rl_init_terminal) Set PC from BC, not from *buffer.
-
-Mon Nov 30 09:35:47 1992 Brian Fox (bfox@cubit)
-
- * readline.c (invoking_keyseqs_in_map, rl_parse_and_bind) Allow
- backslash to quote characters, such as backslash, double quote,
- and space. Backslash quotes all character indiscriminately.
-
- * funmap.c (vi_keymap) Fix type in "vi-replace" declaration.
-
-Fri Nov 20 10:55:05 1992 Brian Fox (bfox@cubit)
-
- * readline.c (init_terminal_io, rl_prep_terminal): FINALLY!
- Declare and use termcap variable `ospeed' when setting up terminal
- parameters.
-
-Thu Oct 8 08:53:07 1992 Brian J. Fox (bfox@helios)
-
- * Makefile, this directory: Include (as links to the canonical
- sources), tilde.c, tilde.h, posixstat.h and xmalloc.c.
-
-Tue Sep 29 13:07:21 1992 Brian J. Fox (bfox@helios)
-
- * readline.c (init_terminal_io) Don't set arrow keys if the key
- sequences that represent them are already set.
-
- * readline.c (rl_function_of_keyseq) New function returns the first
- function (or macro) found while searching a key sequence.
-
-Mon Sep 28 00:34:04 1992 Brian J. Fox (bfox@helios)
-
- * readline.c (LibraryVersion) New static char * contains current
- version number. Version is at 2.0.
-
- * readline.c (rl_complete_internal): Incorporated clean changes
- from gilmore (gnu@cygnus.com) to support quoted substrings within
- completion functions.
-
- * readline.c (many locations) Added support for the _GO32_,
- whatever that is. Patches supplied by Cygnus, typed in by hand,
- with cleanups.
-
-Sun Aug 16 12:46:24 1992 Brian Fox (bfox@cubit)
-
- * readline.c (init_terminal_io): Find out the values of the keypad
- arrows and bind them to appropriate RL functions if present.
-
-Mon Aug 10 18:13:24 1992 Brian Fox (bfox@cubit)
-
- * history.c (stifle_history): A negative argument to stifle
- becomes zero.
-
-Tue Jul 28 09:28:41 1992 Brian Fox (bfox@cubit)
-
- * readline.c (rl_variable_bind): New local structure describes
- booleans by name and address; code in rl_variable_bind () looks at
- structure to set simple variables.
-
- * parens.c (rl_insert_close): New variable rl_blink_matching_paren
- is non-zero if we want to blink the matching open when a close is
- inserted. If FD_SET is defined, rl_blink_matching_paren defaults
- to 1, else 0. If FD_SET is not defined, and
- rl_blink_matching_paren is non-zero, the close character(s) are/is
- simply inserted.
-
-Wed Jul 22 20:03:59 1992 Brian Fox (bfox@cubit)
-
- * history.c, readline.c, vi_mode.c: Cause the functions strchr ()
- and strrchr () to be used instead of index () and rindex ()
- throughout the source.
-
-Mon Jul 13 11:34:07 1992 Brian Fox (bfox@cubit)
-
- * readline.c: (rl_variable_bind) New variable "meta-flag" if "on"
- means force the use of the 8th bit as Meta bit. Internal variable
- is called meta_flag.
-
-Thu Jul 9 10:37:56 1992 Brian Fox (bfox@cubit)
-
- * history.c (get_history_event) Change INDEX to LOCAL_INDEX. If
- compiling for the shell, allow shell metacharacters to separate
- history tokens as they would for shell tokens.
-
-Sat Jul 4 19:29:12 1992 Brian Fox (bfox@cubit)
-
- * vi_keymap.c: According to Posix, TAB self-inserts instead of
- doing completion.
-
- * vi_mode.c: (rl_vi_yank_arg) Enter VI insert mode after yanking
- an arg from the previous line.
-
- * search.c: New file takes over vi style searching and implements
- non-incremental searching the history.
-
- Makefile: Add search.c and search.o.
-
- funmap.c: Add names for non-incremental-forward-search-history and
- non-incremental-reverse-search-history.
-
- readline.h: Add extern definitions for non-incremental searching.
-
- vi_mode.c: Remove old search code; add calls to code in search.c.
-
-Fri Jul 3 10:36:33 1992 Brian Fox (bfox@cubit)
-
- * readline.c (rl_delete_horizontal_space); New function deletes
- all whitespace surrounding point.
-
- funmap.c: Add "delete-horizontal-space".
- emacs_keymap.c: Put rl_delete_horizontal_space () on M-\.
-
- * readline.c (rl_set_signals, rl_clear_signals); New function
- rl_set_sighandler () is either defined in a Posix way (if
- HAVE_POSIX_SIGNALS is defined) or in a BSD way. Function is
- called from rl_set_signals () and rl_clear_signals ().
-
-Fri May 8 12:50:15 1992 Brian Fox (bfox@cubit)
-
- * readline.c: (readline_default_bindings) Do comparisons with
- _POSIX_VDISABLE casted to `unsigned char'. Change tty characters
- to be unsigned char.
-
-Thu Apr 30 12:36:35 1992 Brian Fox (bfox@cubit)
-
- * readline.c: (rl_getc) Handle "read would block" error on
- non-blocking IO streams.
-
- * readline.c: (rl_signal_handler): Unblock only the signal that we
- have caught, not all signals.
-
-Sun Feb 23 03:33:09 1992 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: Many functions. Use only the macros META_CHAR and
- UNMETA to deal with meta characters. Prior to this, we used
- numeric values and tests.
-
- * readline.c (rl_complete_internal) Report exactly the number of
- possible completions, not the number + 1.
-
- * vi_mode.c (rl_do_move) Do not change the cursor position when
- using `cw' or `cW'.
-
- * vi_mode.c (rl_vi_complete) Enter insert mode after completing
- with `*' or `\'.
-
-Fri Feb 21 05:58:18 1992 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (rl_dispatch) Increment rl_key_sequence_length for
- meta characters that map onto ESC map.
-
-Mon Feb 10 01:41:35 1992 Brian Fox (bfox at gnuwest.fsf.org)
-
- * history.c (history_do_write) Build a buffer of all of the lines
- to write and write them in one fell swoop (lower overhead than
- calling write () for each line). Suggested by Peter Ho.
-
- * readline.c: Include hbullx20 as well as hpux for determining
- USGr3ness.
-
- * readline.c (rl_unix_word_rubout) As per the "Now REMEMBER"
- comment, pass arguments to rl_kill_text () in the correct order to
- preserve prepending and appending of killed text.
-
- * readline.c (rl_search_history) malloc (), realloc (), and free
- () SEARCH_STRING so that there are no static limits on searching.
-
- * vi_mode.c (rl_vi_subst) Don't forget to end the undo group.
-
-Fri Jan 31 14:51:02 1992 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (rl_signal_handler): Zero the current history entry's
- pointer after freeing the undo_list when SIGINT received.
- Reformat a couple of functions.
-
-Sat Jan 25 13:47:35 1992 Brian Fox (bfox at bears)
-
- * readline.c (parser_if): free () TNAME after use.
-
-Tue Jan 21 01:01:35 1992 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (rl_redisplay) and (rl_character_len): Display
- Control characters as "^c" and Meta characters as "\234", instead
- of "C-C" and "M-C".
-
-Sun Dec 29 10:59:00 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (init_terminal_io) Default to environment variables
- LINES and COLUMNS before termcap entry values. If all else fails,
- then assume 80x24 terminal.
-
-Sat Dec 28 16:33:11 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: If this machine is USG and it is hpux, then define
- USGr3.
-
- * history.c: Cosmetic fixes.
-
-Thu Nov 21 00:10:12 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * vi_mode.c: (rl_do_move) Place cursor at end of line, never at
- next to last character.
-
-Thu Nov 14 05:08:01 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * history.c (get_history_event) Non-anchored searches can have a
- return index of greater than zero from get_history_event ().
-
-Fri Nov 1 07:02:13 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (rl_translate_keyseq) Make C-? translate to RUBOUT
- unconditionally.
-
-Mon Oct 28 11:34:52 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c; Use Posix directory routines and macros.
-
- * funmap.c; Add entry for call-last-kbd-macro.
-
- * readline.c (rl_prep_term); Use system EOF character on POSIX
- systems also.
-
-Thu Oct 3 16:19:53 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c; Make a distinction between having a TERMIOS tty
- driver, and having POSIX signal handling. You might one without
- the other. New defines used HAVE_POSIX_SIGNALS, and
- TERMIOS_TTY_DRIVER.
-
-Tue Jul 30 22:37:26 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: rl_getc () If a call to read () returns without an
- error, but with zero characters, the file is empty, so return EOF.
-
-Thu Jul 11 20:58:38 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: (rl_get_next_history, rl_get_previous_history)
- Reallocate the buffer space if the line being moved to is longer
- the the current space allocated. Amazing that no one has found
- this bug until now.
-
-Sun Jul 7 02:37:05 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c:(rl_parse_and_bind) Allow leading whitespace.
- Make sure TERMIO and TERMIOS systems treat CR and NL
- disctinctly.
-
-Tue Jun 25 04:09:27 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: Rework parsing conditionals to pay attention to the
- prior states of the conditional stack. This makes $if statements
- work correctly.
-
-Mon Jun 24 20:45:59 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: support for displaying key binding information
- includes the functions rl_list_funmap_names (),
- invoking_keyseqs_in_map (), rl_invoking_keyseqs (),
- rl_dump_functions (), and rl_function_dumper ().
-
- funmap.c: support for same includes rl_funmap_names ().
-
- readline.c, funmap.c: no longer define STATIC_MALLOC. However,
- update both version of xrealloc () to handle a null pointer.
-
-Thu Apr 25 12:03:49 1991 Brian Fox (bfox at gnuwest.fsf.org)
-
- * vi_mode.c (rl_vi_fword, fWord, etc. All functions use
- the macro `isident()'. Fixed movement bug which prevents
- continious movement through the text.
-
-Fri Jul 27 16:47:01 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (parser_if) Allow "$if term=foo" construct.
-
-Wed May 23 16:10:33 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c (rl_dispatch) Correctly remember the last command
- executed. Fixed typo in username_completion_function ().
-
-Mon Apr 9 19:55:48 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: username_completion_function (); For text passed in
- with a leading `~', remember that this could be a filename (after
- it is completed).
-
-Thu Apr 5 13:44:24 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: rl_search_history (): Correctly handle case of an
- unfound search string, but a graceful exit (as with ESC).
-
- * readline.c: rl_restart_output (); The Apollo passes the address
- of the file descriptor to TIOCSTART, not the descriptor itself.
-
-Tue Mar 20 05:38:55 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * readline.c: rl_complete (); second call in a row causes possible
- completions to be listed.
-
- * readline.c: rl_redisplay (), added prompt_this_line variable
- which is the first character character following \n in prompt.
-
-Sun Mar 11 04:32:03 1990 Brian Fox (bfox at gnuwest.fsf.org)
-
- * Signals are now supposedly handled inside of SYSV compilation.
-
-Wed Jan 17 19:24:09 1990 Brian Fox (bfox at sbphy.ucsb.edu)
-
- * history.c: history_expand (); fixed overwriting memory error,
- added needed argument to call to get_history_event ().
-
-Thu Jan 11 10:54:04 1990 Brian Fox (bfox at sbphy.ucsb.edu)
-
- * readline.c: added mark_modified_lines to control the
- display of an asterisk on modified history lines. Also
- added a user variable called mark-modified-lines to the
- `set' command.
-
-Thu Jan 4 10:38:05 1990 Brian Fox (bfox at sbphy.ucsb.edu)
-
- * readline.c: start_insert (). Only use IC if we don't have an im
- capability.
-
-Fri Sep 8 09:00:45 1989 Brian Fox (bfox at aurel)
-
- * readline.c: rl_prep_terminal (). Only turn on 8th bit
- as meta-bit iff the terminal is not using parity.
-
-Sun Sep 3 08:57:40 1989 Brian Fox (bfox at aurel)
-
- * readline.c: start_insert (). Uses multiple
- insertion call in cases where that makes sense.
-
- rl_insert (). Read type-ahead buffer for additional
- keys that are bound to rl_insert, and insert them
- all at once. Make insertion of single keys given
- with an argument much more efficient.
-
-Tue Aug 8 18:13:57 1989 Brian Fox (bfox at aurel)
-
- * readline.c: Changed handling of EOF. readline () returns
- (char *)EOF or consed string. The EOF character is read from the
- tty, or if the tty doesn't have one, defaults to C-d.
-
- * readline.c: Added support for event driven programs.
- rl_event_hook is the address of a function you want called
- while Readline is waiting for input.
-
- * readline.c: Cleanup time. Functions without type declarations
- do not use return with a value.
-
- * history.c: history_expand () has new variable which is the
- characters to ignore immediately following history_expansion_char.
-
-Sun Jul 16 08:14:00 1989 Brian Fox (bfox at aurel)
-
- * rl_prep_terminal ()
- BSD version turns off C-s, C-q, C-y, C-v.
-
- * readline.c -- rl_prep_terminal ()
- SYSV version hacks readline_echoing_p.
- BSD version turns on passing of the 8th bit for the duration
- of reading the line.
-
-Tue Jul 11 06:25:01 1989 Brian Fox (bfox at aurel)
-
- * readline.c: new variable rl_tilde_expander.
- If non-null, this contains the address of a function to call if
- the standard meaning for expanding a tilde fails. The function is
- called with the text sans tilde (as in "foo"), and returns a
- malloc()'ed string which is the expansion, or a NULL pointer if
- there is no expansion.
-
- * readline.h - new file chardefs.h
- Separates things that only readline.c needs from the standard
- header file publishing interesting things about readline.
-
- * readline.c:
- readline_default_bindings () now looks at terminal chararacters
- and binds those as well.
-
-Wed Jun 28 20:20:51 1989 Brian Fox (bfox at aurel)
-
- * Made readline and history into independent libraries.
-
diff --git a/contrib/libreadline/Makefile.in b/contrib/libreadline/Makefile.in
deleted file mode 100644
index c5ac183cf0cc..000000000000
--- a/contrib/libreadline/Makefile.in
+++ /dev/null
@@ -1,192 +0,0 @@
-## -*- text -*- ####################################################
-# #
-# Makefile for the GNU Readline and History Libraries. #
-# #
-####################################################################
-
-srcdir = @srcdir@
-VPATH = .:@srcdir@
-topdir = @top_srcdir@
-BUILD_DIR = @BUILD_DIR@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-
-CC = @CC@
-RANLIB = @RANLIB@
-AR = @AR@
-RM = rm -f
-CP = cp
-MV = mv
-
-# See the file STANDALONE for the -D defines that readline understands
-
-CFLAGS = @CFLAGS@
-LOCAL_CFLAGS = @LOCAL_CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-
-DEFS = @DEFS@
-
-INCLUDES = -I. -I$(BUILD_DIR) -I$(topdir) -I$(topdir)/lib
-
-CCFLAGS = $(DEFS) $(APP_CFLAGS) $(CPPFLAGS) ${INCLUDES} $(LOCAL_CFLAGS) $(CFLAGS)
-
-# Here is a rule for making .o files from .c files that doesn't force
-# the type of the machine (like -sun3) into the flags.
-.c.o:
- $(CC) -c $(CCFLAGS) $<
-
-# The name of the main library target.
-LIBRARY_NAME = libreadline.a
-
-# The C code source files for this library.
-CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \
- $(srcdir)/vi_mode.c $(srcdir)/parens.c $(srcdir)/rltty.c \
- $(srcdir)/complete.c $(srcdir)/bind.c $(srcdir)/isearch.c \
- $(srcdir)/display.c $(srcdir)/signals.c $(srcdir)/emacs_keymap.c \
- $(srcdir)/vi_keymap.c $(srcdir)/util.c $(srcdir)/kill.c \
- $(srcdir)/undo.c $(srcdir)/macro.c $(srcdir)/input.c \
- $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c \
- $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \
- $(srcdir)/histfile.c $(srcdir)/nls.c \
- $(srcdir)/tilde.c \
-
-# The header files for this library.
-HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
- posixstat.h tilde.h rlconf.h tcap.h
-
-HISTOBJ = history.o histexpand.o histfile.o histsearch.o
-TILDEOBJ= tilde.o
-OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \
- rltty.o complete.o bind.o isearch.o display.o signals.o \
- util.o kill.o undo.o macro.o input.o callback.o terminal.o \
- nls.o xmalloc.o \
- $(HISTOBJ) $(TILDEOBJ)
-
-# The texinfo files which document this library.
-DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo
-DOCOBJECT = doc/readline.dvi
-DOCSUPPORT = doc/Makefile
-DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT)
-
-SUPPORT = Makefile ChangeLog $(DOCSUPPORT) examples/[-a-z.]*
-
-SOURCES = $(CSOURCES) $(HSOURCES) $(DOCSOURCE)
-
-THINGS_TO_TAR = $(SOURCES) $(SUPPORT)
-
-INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h
-
-##########################################################################
-
-all: libreadline.a libhistory.a
-
-libreadline.a: $(OBJECTS)
- $(RM) -f $@
- $(AR) cr $@ $(OBJECTS)
- -test -n "$(RANLIB)" && $(RANLIB) $@
-
-libhistory.a: $(HISTOBJ) xmalloc.o
- $(RM) -f $@
- $(AR) cr $@ $(HISTOBJ) xmalloc.o
- -test -n "$(RANLIB)" && $(RANLIB) $@
-
-documentation: force
- test -d doc || mkdir doc
- -( cd doc && $(MAKE) $(MFLAGS) )
-
-force:
-
-# The rule for 'includes' is written funny so that the if statement
-# always returns TRUE unless there really was an error installing the
-# include files.
-install: installdirs libreadline.a
- for file in $(INSTALLED_HEADERS) ; do \
- $(INSTALL_DATA) $(srcdir)/$$file $(includedir)/readline ; \
- done
- -${MV} $(libdir)/libreadline.a $(libdir)/libreadline.old
- ${INSTALL_DATA} libreadline.a $(libdir)/libreadline.a
- -test -n "$(RANLIB)" && $(RANLIB) -t $(bindir)/libreadline.a
-
-installdirs: $(topdir)/support/mkdirs
- $(SHELL) $(topdir)/support/mkdirs $(includedir) \
- $(includedir)/readline $(libdir) $(infodir) $(man3dir)
-
-uninstall:
- cd $(includedir)/readline && ${RM} -f ${INSTALLED_HEADERS}
- cd $(libdir) && ${RM} -f libreadline.a libreadline.old
-
-tags: force
- etags $(CSOURCES) $(HSOURCES)
-
-TAGS: force
- ctags -x $(CSOURCES) $(HSOURCES) > $@
-
-readline: readline.h rldefs.h chardefs.h
-readline: $(OBJECTS)
- $(CC) $(CFLAGS) $(CPPFLAGS) $(READLINE_DEFINES) \
- $(LOCAL_INCLUDES) -DTEST -o readline readline.c vi_mode.o funmap.o \
- keymaps.o -ltermcap
-
-clean: force
- $(RM) $(OBJECTS) *.a
- -( cd doc && $(MAKE) $(MFLAGS) $@ )
-
-distclean realclean maintainer-clean: clean
- -( cd doc && $(MAKE) $(MFLAGS) $@ )
- $(RM) Makefile
-
-mostlyclean: clean
- -( cd doc && $(MAKE) $(MFLAGS) $@ )
-
-# Dependencies
-readline.o: readline.c readline.h rldefs.h rlconf.h chardefs.h tcap.h
-readline.o: keymaps.h history.h
-vi_mode.o: rldefs.h rlconf.h readline.h history.h
-funmap.o: funmap.c readline.h rlconf.h
-keymaps.o: keymaps.c emacs_keymap.c vi_keymap.c keymaps.h chardefs.h rlconf.h
-history.o: history.h histlib.h
-histexpand.o: history.h histlib.h
-histsearch.o: history.h histlib.h
-histfile.o: history.h histlib.h
-isearch.o: readline.h history.h
-search.o: readline.h history.h
-display.o: readline.h history.h rldefs.h rlconf.h tcap.h
-complete.o: readline.h rldefs.h rlconf.h posixdir.h posixstat.h
-rltty.o: rldefs.h rlconf.h readline.h rltty.h
-bind.o: rldefs.h rlconf.h readline.h history.h
-signals.o: rldefs.h rlconf.h readline.h history.h
-parens.o: readline.h
-kill.o: rldefs.h rlconf.h readline.h history.h
-macro.o: rldefs.h rlconf.h readline.h history.h
-undo.o: rldefs.h rlconf.h readline.h history.h
-input.o: rldefs.h rlconf.h readline.h history.h
-callback.o: rlconf.h rldefs.h readline.h
-terminal.o: rlconf.h rldefs.h readline.h tcap.h history.h
-
-bind.o: $(BUILD_DIR)/config.h
-callback.o: $(BUILD_DIR)/config.h
-complete.o: $(BUILD_DIR)/config.h
-display.o: $(BUILD_DIR)/config.h
-funmap.o: $(BUILD_DIR)/config.h
-histexpand.o: $(BUILD_DIR)/config.h
-histfile.o: $(BUILD_DIR)/config.h
-history.o: $(BUILD_DIR)/config.h
-histsearch.o: $(BUILD_DIR)/config.h
-input.o: $(BUILD_DIR)/config.h
-isearch.o: $(BUILD_DIR)/config.h
-keymaps.o: $(BUILD_DIR)/config.h
-kill.o: $(BUILD_DIR)/config.h
-macro.o: $(BUILD_DIR)/config.h
-parens.o: $(BUILD_DIR)/config.h
-readline.o: $(BUILD_DIR)/config.h
-rltty.o: $(BUILD_DIR)/config.h
-search.o: $(BUILD_DIR)/config.h
-signals.o: $(BUILD_DIR)/config.h
-tilde.o: $(BUILD_DIR)/config.h
-undo.o: $(BUILD_DIR)/config.h
-util.o: $(BUILD_DIR)/config.h
-vi_mode.o: $(BUILD_DIR)/config.h
-xmalloc.o: $(BUILD_DIR)/config.h
diff --git a/contrib/libreadline/README b/contrib/libreadline/README
deleted file mode 100644
index 131471ca8354..000000000000
--- a/contrib/libreadline/README
+++ /dev/null
@@ -1,6 +0,0 @@
-This is the distribution of the Gnu Readline library. See the file
-STANDALONE for a description of the #defines that can be passed via
-the makefile to build readline on different systems.
-
-The file rlconf.h contains defines that enable and disable certain
-readline features.
diff --git a/contrib/libreadline/STANDALONE b/contrib/libreadline/STANDALONE
deleted file mode 100644
index f999e8d268a7..000000000000
--- a/contrib/libreadline/STANDALONE
+++ /dev/null
@@ -1,32 +0,0 @@
-This is a description of C preprocessor defines that readline accepts.
-Most are passed in from the parent `make'; e.g. from the bash source
-directory.
-
-NO_SYS_FILE <sys/file.h> is not present
-HAVE_UNISTD_H <unistd.h> exists
-HAVE_STDLIB_H <stdlib.h> exists
-HAVE_VARARGS_H <varargs.h> exists and is usable
-HAVE_STRING_H <string.h> exists
-HAVE_ALLOCA_H <alloca.h> exists and is needed for alloca()
-HAVE_ALLOCA alloca(3) or a define for it exists
-PRAGMA_ALLOCA use of alloca() requires a #pragma, as in AIX 3.x
-VOID_SIGHANDLER signal handlers are void functions
-HAVE_DIRENT_H <dirent.h> exists and is usable
-HAVE_SYS_PTEM_H <sys/ptem.h> exists
-HAVE_SYS_PTE_H <sys/pte.h> exists
-HAVE_SYS_STREAM_H <sys/stream.h> exists
-HAVE_SYS_SELECT_H <sys/select.h> exists
-
-System-specific options:
-
-GWINSZ_IN_SYS_IOCTL need to include <sys/ioctl.h> for TIOCGWINSZ
-HAVE_GETPW_DECLS the getpw* functions are declared in <pwd.h> and cannot
- be redeclared without compiler errors
-HAVE_STRCASECMP the strcasecmp and strncasecmp functions are available
-
-USG Running a variant of System V
-USGr3 Running System V.3
-XENIX_22 Xenix 2.2
-Linux Linux
-CRAY running a recent version of Cray UNICOS
-SunOS4 Running SunOS 4.x
diff --git a/contrib/libreadline/ansi_stdlib.h b/contrib/libreadline/ansi_stdlib.h
deleted file mode 100644
index 52339da5d333..000000000000
--- a/contrib/libreadline/ansi_stdlib.h
+++ /dev/null
@@ -1,41 +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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_STDLIB_H_)
-#define _STDLIB_H_ 1
-
-/* String conversion functions. */
-extern int atoi ();
-extern long int atol ();
-
-/* Memory allocation functions. */
-extern char *malloc ();
-extern char *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/libreadline/bind.c b/contrib/libreadline/bind.c
deleted file mode 100644
index bd899ca9f883..000000000000
--- a/contrib/libreadline/bind.c
+++ /dev/null
@@ -1,1710 +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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#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 <signal.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"
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-extern int _rl_horizontal_scroll_mode;
-extern int _rl_mark_modified_lines;
-extern int _rl_bell_preference;
-extern int _rl_meta_flag;
-extern int _rl_convert_meta_chars_to_ascii;
-extern int _rl_output_meta_chars;
-extern int _rl_complete_show_all;
-extern int _rl_complete_mark_directories;
-extern int _rl_enable_keypad;
-#if defined (PAREN_MATCHING)
-extern int rl_blink_matching_paren;
-#endif /* PAREN_MATCHING */
-#if defined (VISIBLE_STATS)
-extern int rl_visible_stats;
-#endif /* VISIBLE_STATS */
-extern int rl_complete_with_tilde_expansion;
-extern int rl_completion_query_items;
-extern int rl_inhibit_completion;
-extern char *_rl_comment_begin;
-
-extern int rl_explicit_arg;
-extern int rl_editing_mode;
-extern unsigned char _rl_parsing_conditionalized_out;
-extern Keymap _rl_keymap;
-
-extern char *possible_control_prefixes[], *possible_meta_prefixes[];
-
-extern char **rl_funmap_names ();
-extern int rl_add_funmap_entry ();
-
-extern char *_rl_strindex ();
-
-/* Variables exported by this file. */
-Keymap rl_binding_keymap;
-
-/* Forward declarations */
-void rl_set_keymap_from_edit_mode ();
-
-static int glean_key_from_name ();
-static int substring_member_of_array ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Binding keys */
-/* */
-/* **************************************************************** */
-
-/* rl_add_defun (char *name, Function *function, int key)
- Add NAME to the list of named functions. Make FUNCTION be the function
- that gets called. If KEY is not -1, then bind it. */
-int
-rl_add_defun (name, function, key)
- char *name;
- Function *function;
- 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;
- Function *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;
- Function *function;
- Keymap map;
-{
- int result;
- Keymap oldmap;
-
- oldmap = _rl_keymap;
- _rl_keymap = map;
- result = rl_bind_key (key, function);
- _rl_keymap = oldmap;
- return (result);
-}
-
-/* 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, (Function *)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, (Function *)NULL, map));
-}
-
-/* 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_set_key (keyseq, function, map)
- char *keyseq;
- Function *function;
- Keymap map;
-{
- return (rl_generic_bind (ISFUNC, keyseq, function, map));
-}
-
-/* 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)
- 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;
- char *keyseq, *data;
- Keymap map;
-{
- char *keys;
- int keys_len;
- register int i;
-
- /* If no keys to bind to, exit right away. */
- if (!keyseq || !*keyseq)
- {
- if (type == ISMACR)
- free (data);
- return -1;
- }
-
- keys = 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++)
- {
- int ic = (int) ((unsigned char)keys[i]);
-
- 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)
- {
- if (map[ic].type == ISMACR)
- free ((char *)map[ic].function);
-
- map[ic].type = ISKMAP;
- map[ic].function = KEYMAP_TO_FUNCTION (rl_make_bare_keymap());
- }
- map = FUNCTION_TO_KEYMAP (map, ic);
- }
- else
- {
- if (map[ic].type == ISMACR)
- free ((char *)map[ic].function);
-
- 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)
- char *seq, *array;
- int *len;
-{
- register int i, c, l;
-
- for (i = l = 0; c = seq[i]; i++)
- {
- if (c == '\\')
- {
- c = seq[++i];
-
- if (c == 0)
- break;
-
- if (((c == 'C' || c == 'M') && seq[i + 1] == '-') || (c == 'e'))
- {
- /* Handle special case of backwards define. */
- if (strncmp (&seq[i], "C-\\M-", 5) == 0)
- {
- array[l++] = ESC;
- i += 5;
- array[l++] = CTRL (_rl_to_upper (seq[i]));
- if (!seq[i])
- i--;
- continue;
- }
-
- switch (c)
- {
- case 'M':
- i++;
- array[l++] = ESC; /* XXX */
- break;
-
- case 'C':
- i += 2;
- /* Special hack for C-?... */
- array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
- break;
-
- case 'e':
- array[l++] = ESC;
- }
-
- 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 = UNCTRL (c);
- }
- else if (c == RUBOUT)
- {
- kseq[i++] = '\\';
- kseq[i++] = 'C';
- kseq[i++] = '-';
- c = '?';
- }
-
- if (c == ESC)
- {
- kseq[i++] = '\\';
- kseq[i++] = 'e';
- }
- else if (c == '\\' || c == '"')
- {
- kseq[i++] = '\\';
- }
-
- kseq[i++] = (unsigned char) c;
- kseq[i] = '\0';
- return kseq;
-}
-
-/* Return a pointer to the function that STRING represents.
- If STRING doesn't have a matching function, then a NULL pointer
- is returned. */
-Function *
-rl_named_function (string)
- 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 ((Function *)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). */
-Function *
-rl_function_of_keyseq (keyseq, map, type)
- char *keyseq;
- Keymap map;
- int *type;
-{
- register int i;
-
- if (!map)
- map = _rl_keymap;
-
- for (i = 0; keyseq && keyseq[i]; i++)
- {
- int 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 ((Function *) NULL);
-}
-
-/* The last key bindings file read. */
-static char *last_readline_init_file = (char *)NULL;
-
-/* The file we're currently reading key bindings from. */
-static char *current_readline_init_file;
-static int current_readline_init_lineno;
-
-/* Re-read the current keybindings file. */
-int
-rl_re_read_init_file (count, ignore)
- int count, ignore;
-{
- int r;
- r = rl_read_init_file ((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)
- char *filename;
-{
- register int i;
- char *buffer, *openname, *line, *end;
- struct stat finfo;
- int file;
-
- /* Default the filename. */
- if (filename == 0)
- {
- filename = last_readline_init_file;
- if (filename == 0)
- filename = getenv ("INPUTRC");
- if (filename == 0)
- filename = DEFAULT_INPUTRC;
- }
-
- if (*filename == 0)
- filename = DEFAULT_INPUTRC;
-
- current_readline_init_file = filename;
- openname = tilde_expand (filename);
-
- if ((stat (openname, &finfo) < 0) ||
- (file = open (openname, O_RDONLY, 0666)) < 0)
- {
- free (openname);
- return (errno);
- }
- else
- free (openname);
-
- if (filename != last_readline_init_file)
- {
- if (last_readline_init_file)
- free (last_readline_init_file);
-
- last_readline_init_file = savestring (filename);
- }
-
- /* Read the file into BUFFER. */
- buffer = (char *)xmalloc ((int)finfo.st_size + 1);
- i = read (file, buffer, finfo.st_size);
- close (file);
-
- if (i != finfo.st_size)
- return (errno);
-
- /* 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 + finfo.st_size;
- while (line < end)
- {
- /* Find the end of this line. */
- for (i = 0; line + i != end && line[i] != '\n'; i++);
-
- /* 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);
- return (0);
-}
-
-static void
-_rl_init_file_error (msg)
- char *msg;
-{
- fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
- current_readline_init_lineno,
- msg);
-}
-
-/* **************************************************************** */
-/* */
-/* Parser Directives */
-/* */
-/* **************************************************************** */
-
-/* Conditionals. */
-
-/* Calling programs set this to have their argv[0]. */
-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)
- {
- /* Error message? */
- return 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++)
- 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
- {
- /* *** What, no error message? *** */
- }
- return 0;
-}
-
-/* Associate textual names with actual functions. */
-static struct {
- char *name;
- Function *function;
-} parser_directives [] = {
- { "if", parser_if },
- { "endif", parser_endif },
- { "else", parser_else },
- { (char *)0x0, (Function *)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);
- }
-
- /* *** Should an error message be output? */
- 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++];
- int passc = 0;
-
- for (; 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_set_key (). Otherwise, let the older code deal with it. */
- if (*string == '"')
- {
- char *seq = xmalloc (1 + strlen (string));
- register int j, k = 0;
- int passc = 0;
-
- for (j = 1; 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_set_key (seq, rl_named_function (funname), _rl_keymap);
-
- 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, possible_control_prefixes))
- key = CTRL (_rl_to_upper (key));
-
- if (substring_member_of_array (string, possible_meta_prefixes))
- key = META (key);
-
- /* Temporary. Handle old-style keyname with macro-binding. */
- if (*funname == '\'' || *funname == '"')
- {
- char seq[2];
- int fl = strlen (funname);
-
- seq[0] = key; seq[1] = '\0';
- if (fl && funname[fl - 1] == *funname)
- funname[fl - 1] = '\0';
-
- rl_macro_bind (seq, &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. */
-
-static struct {
- char *name;
- int *value;
-} boolean_varlist [] = {
-#if defined (PAREN_MATCHING)
- { "blink-matching-paren", &rl_blink_matching_paren },
-#endif
- { "convert-meta", &_rl_convert_meta_chars_to_ascii },
- { "disable-completion", &rl_inhibit_completion },
- { "enable-keypad", &_rl_enable_keypad },
- { "expand-tilde", &rl_complete_with_tilde_expansion },
- { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode },
- { "input-meta", &_rl_meta_flag },
- { "mark-directories", &_rl_complete_mark_directories },
- { "mark-modified-lines", &_rl_mark_modified_lines },
- { "meta-flag", &_rl_meta_flag },
- { "output-meta", &_rl_output_meta_chars },
- { "show-all-if-ambiguous", &_rl_complete_show_all },
-#if defined (VISIBLE_STATS)
- { "visible-stats", &rl_visible_stats },
-#endif /* VISIBLE_STATS */
- { (char *)NULL, (int *)NULL }
-};
-
-int
-rl_variable_bind (name, value)
- char *name, *value;
-{
- register int i;
-
- /* Check for simple variables first. */
- for (i = 0; boolean_varlist[i].name; i++)
- {
- if (_rl_stricmp (name, boolean_varlist[i].name) == 0)
- {
- /* A variable is TRUE if the "value" is "on", "1" or "". */
- *boolean_varlist[i].value = *value == 0 ||
- _rl_stricmp (value, "on") == 0 ||
- (value[0] == '1' && value[1] == '\0');
- return 0;
- }
- }
-
- /* Not a boolean variable, so check for specials. */
-
- /* Editing mode change? */
- if (_rl_stricmp (name, "editing-mode") == 0)
- {
- if (_rl_strnicmp (value, "vi", 2) == 0)
- {
-#if defined (VI_MODE)
- _rl_keymap = vi_insertion_keymap;
- rl_editing_mode = vi_mode;
-#endif /* VI_MODE */
- }
- else if (_rl_strnicmp (value, "emacs", 5) == 0)
- {
- _rl_keymap = emacs_standard_keymap;
- rl_editing_mode = emacs_mode;
- }
- }
-
- /* Comment string change? */
- else if (_rl_stricmp (name, "comment-begin") == 0)
- {
- if (*value)
- {
- if (_rl_comment_begin)
- free (_rl_comment_begin);
-
- _rl_comment_begin = savestring (value);
- }
- }
- else if (_rl_stricmp (name, "completion-query-items") == 0)
- {
- int nval = 100;
- if (*value)
- {
- nval = atoi (value);
- if (nval < 0)
- nval = 0;
- }
- rl_completion_query_items = nval;
- }
- else if (_rl_stricmp (name, "keymap") == 0)
- {
- Keymap kmap;
- kmap = rl_get_keymap_by_name (value);
- if (kmap)
- rl_set_keymap (kmap);
- }
- else if (_rl_stricmp (name, "bell-style") == 0)
- {
- if (!*value)
- _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 if (_rl_stricmp (name, "prefer-visible-bell") == 0)
- {
- /* Backwards compatibility. */
- if (*value && (_rl_stricmp (value, "on") == 0 ||
- (*value == '1' && !value[1])))
- _rl_bell_preference = VISIBLE_BELL;
- else
- _rl_bell_preference = AUDIBLE_BELL;
- }
-
- return 0;
-}
-
-/* Return the character which matches NAME.
- For example, `Space' returns ' '. */
-
-typedef struct {
- 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 {
- 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)
- char *name;
-{
- register int i;
-
- for (i = 0; keymap_names[i].name; i++)
- if (strcmp (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 (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;
- 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 0
- /* We might want to do this, but the old version of the code did not. */
-
- /* If this is an escape character, we don't want to do any more processing.
- Just add the special ESC key sequence and return. */
- if (c == ESC)
- {
- keyseq[0] = '\\';
- keyseq[1] = 'e';
- keyseq[2] = '\0';
- return keyseq;
- }
-#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));
- }
-
- /* 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)
- Function *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)
- sprintf (keyname, "\\e");
- 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)
- Function *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;
- char **names;
- char *name;
-
- names = rl_funmap_names ();
-
- fprintf (rl_outstream, "\n");
-
- for (i = 0; name = names[i]; i++)
- {
- Function *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;
-{
- 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 = (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);
- break;
- case ISFUNC:
- break;
- case ISKMAP:
- prefix_len = prefix ? strlen (prefix) : 0;
- if (key == ESC)
- {
- keyname = 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 = 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;
-{
- rl_macro_dumper (rl_explicit_arg);
- rl_on_new_line ();
- return (0);
-}
-
-void
-rl_variable_dumper (print_readably)
- int print_readably;
-{
- int i;
- 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 : "");
-
- /* 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");
-
- /* 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;
-{
- rl_variable_dumper (rl_explicit_arg);
- rl_on_new_line ();
- return (0);
-}
-
-/* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. */
-void
-_rl_bind_if_unbound (keyseq, default_func)
- char *keyseq;
- Function *default_func;
-{
- Function *func;
-
- if (keyseq)
- {
- func = rl_function_of_keyseq (keyseq, _rl_keymap, (int *)NULL);
- if (!func || func == rl_do_lowercase_version)
- rl_set_key (keyseq, default_func, _rl_keymap);
- }
-}
-
-/* Return non-zero if any members of ARRAY are a substring in STRING. */
-static int
-substring_member_of_array (string, array)
- char *string, **array;
-{
- while (*array)
- {
- if (_rl_strindex (string, *array))
- return (1);
- array++;
- }
- return (0);
-}
diff --git a/contrib/libreadline/callback.c b/contrib/libreadline/callback.c
deleted file mode 100644
index ad57f754b77a..000000000000
--- a/contrib/libreadline/callback.c
+++ /dev/null
@@ -1,144 +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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include "rlconf.h"
-
-#if defined (READLINE_CALLBACKS)
-
-#include <sys/types.h>
-#include <stdio.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-#include "readline.h"
-
-extern void readline_internal_startup ();
-extern char *readline_internal_teardown ();
-extern int readline_internal_char ();
-
-extern int _rl_meta_flag;
-extern char *rl_prompt;
-extern int rl_visible_prompt_length;
-
-/* **************************************************************** */
-/* */
-/* 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 readline_char() every time some input is available, and
- readline_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. */
-
-VFunction *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)
- char *prompt;
- VFunction *linefunc;
-{
- rl_prompt = prompt;
- rl_visible_prompt_length = rl_prompt ? rl_expand_prompt (rl_prompt) : 0;
- 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 ();
-
- 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);
-
- /* Redisplay the prompt if readline_handler_{install,remove} not called. */
- if (in_handler == 0 && rl_linefunc)
- _rl_callback_newline ();
- }
-}
-
-/* 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/libreadline/chardefs.h b/contrib/libreadline/chardefs.h
deleted file mode 100644
index 8e6f0efe890a..000000000000
--- a/contrib/libreadline/chardefs.h
+++ /dev/null
@@ -1,127 +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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _CHARDEFS_H_
-#define _CHARDEFS_H_
-
-#include <ctype.h>
-
-#if defined (HAVE_CONFIG_H)
-# if defined (HAVE_STRING_H)
-# include <string.h>
-# else
-# include <strings.h>
-# endif /* HAVE_STRING_H */
-#else
-# include <string.h>
-#endif /* !HAVE_CONFIG_H */
-
-#ifndef whitespace
-#define whitespace(c) (((c) == ' ') || ((c) == '\t'))
-#endif
-
-#ifdef CTRL
-#undef CTRL
-#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) >= 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))
-
-/* Old versions
-#define _rl_lowercase_p(c) (((c) > ('a' - 1) && (c) < ('z' + 1)))
-#define _rl_uppercase_p(c) (((c) > ('A' - 1) && (c) < ('Z' + 1)))
-#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-*/
-
-#define _rl_lowercase_p(c) (islower(c))
-#define _rl_uppercase_p(c) (isupper(c))
-#define _rl_digit_p(x) (isdigit (x))
-
-#define _rl_pure_alphabetic(c) (_rl_lowercase_p(c) || _rl_uppercase_p(c))
-#define ALPHABETIC(c) (_rl_lowercase_p(c) || _rl_uppercase_p(c) || _rl_digit_p(c))
-
-/* Old versions
-# define _rl_to_upper(c) (_rl_lowercase_p(c) ? ((c) - 32) : (c))
-# define _rl_to_lower(c) (_rl_uppercase_p(c) ? ((c) + 32) : (c))
-*/
-
-#ifndef _rl_to_upper
-# define _rl_to_upper(c) (islower(c) ? toupper(c) : (c))
-# define _rl_to_lower(c) (isupper(c) ? tolower(c) : (c))
-#endif
-
-#ifndef _rl_digit_value
-#define _rl_digit_value(x) ((x) - '0')
-#endif
-
-#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/libreadline/display.c b/contrib/libreadline/display.c
deleted file mode 100644
index c0dff1f5bed4..000000000000
--- a/contrib/libreadline/display.c
+++ /dev/null
@@ -1,1503 +0,0 @@
-/* display.c -- readline redisplay facility. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.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 "posixstat.h"
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Termcap library stuff. */
-#include "tcap.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-/* Global and pseudo-global variables and functions
- imported from readline.c. */
-extern char *rl_prompt;
-extern int readline_echoing_p;
-
-extern int _rl_output_meta_chars;
-extern int _rl_horizontal_scroll_mode;
-extern int _rl_mark_modified_lines;
-extern int _rl_prefer_visible_bell;
-
-/* Variables and functions imported from terminal.c */
-extern void _rl_output_some_chars ();
-extern int _rl_output_character_function ();
-extern int _rl_backspace ();
-
-extern char *term_clreol, *term_im, *term_ic, *term_ei, *term_DC;
-extern char *term_up, *term_dc, *term_cr, *term_IC;
-extern int screenheight, screenwidth, screenchars;
-extern int terminal_can_insert, _rl_term_autowrap;
-
-/* Pseudo-global functions (local to the readline library) exported
- by this file. */
-void _rl_move_cursor_relative (), _rl_output_some_chars ();
-void _rl_move_vert ();
-
-static void update_line (), clear_to_eol (), space_to_eol ();
-static void delete_chars (), insert_some_chars ();
-static void cr ();
-
-static int *inv_lbreaks, *vis_lbreaks;
-
-extern char *xmalloc (), *xrealloc ();
-
-/* 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. */
-VFunction *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;
-
-static char *local_prompt, *local_prompt_prefix;
-static int visible_length, prefix_length;
-
-/* The number of invisible characters in the line currently being
- displayed on the screen. */
-static int visible_wrap_offset;
-
-/* static so it can be shared between rl_redisplay and update_line */
-static int wrap_offset;
-
-/* The index of the last invisible_character in the prompt string. */
-static int 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;
-
-/* 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 ther eturned string. */
-
-/* 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)
- char *pmt;
- int *lp, *lip;
-{
- char *r, *ret, *p;
- int l, rl, last, ignoring;
-
- /* Short-circuit if we can. */
- if (strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
- {
- r = savestring (pmt);
- if (lp)
- *lp = strlen (r);
- return r;
- }
-
- l = strlen (pmt);
- r = ret = xmalloc (l + 1);
-
- for (rl = ignoring = last = 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
- {
- *r++ = *p;
- if (!ignoring)
- rl++;
- }
- }
-
- *r = '\0';
- if (lp)
- *lp = rl;
- if (lip)
- *lip = last;
- 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
- * visible_length = number of visible characters in local_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. */
- if (local_prompt)
- free (local_prompt);
- if (local_prompt_prefix)
- free (local_prompt_prefix);
- local_prompt = local_prompt_prefix = (char *)0;
- last_invisible = 0;
-
- if (prompt == 0 || *prompt == 0)
- return (0);
-
- p = strrchr (prompt, '\n');
- if (!p)
- {
- /* The prompt is only one line. */
- local_prompt = expand_prompt (prompt, &visible_length, &last_invisible);
- local_prompt_prefix = (char *)0;
- return (visible_length);
- }
- else
- {
- /* The prompt spans multiple lines. */
- t = ++p;
- local_prompt = expand_prompt (p, &visible_length, &last_invisible);
- c = *t; *t = '\0';
- /* The portion of the prompt string up to and including the
- final newline is now null-terminated. */
- local_prompt_prefix = expand_prompt (prompt, &prefix_length, (int *)NULL);
- *t = c;
- return (prefix_length);
- }
-}
-
-/* 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;
- char *prompt_this_line;
-
- if (!readline_echoing_p)
- return;
-
- if (!rl_display_prompt)
- rl_display_prompt = "";
-
- if (invisible_line == 0)
- {
- visible_line = xmalloc (line_size);
- invisible_line = xmalloc (line_size);
- for (in = 0; in < line_size; in++)
- {
- visible_line[in] = 0;
- invisible_line[in] = 1;
- }
-
- /* should be enough, but then again, this is just for testing. */
- inv_lbreaks = (int *)malloc (256 * sizeof (int));
- vis_lbreaks = (int *)malloc (256 * sizeof (int));
- inv_lbreaks[0] = vis_lbreaks[0] = 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. */
- if (_rl_mark_modified_lines && current_history () && rl_undo_list)
- {
- line[out++] = '*';
- line[out] = '\0';
- }
-
- /* 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)
- {
- strncpy (line + out, local_prompt, local_len);
- out += local_len;
- }
- line[out] = '\0';
- wrap_offset = local_len - 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++;
- if (forced_display)
- {
- _rl_output_some_chars (rl_display_prompt, prompt_this_line - rl_display_prompt);
- /* Make sure we are at column zero even after a newline,
- regardless of the state of terminal output processing. */
- if (prompt_this_line[-2] != '\r')
- cr ();
- }
- }
-
- pmtlen = strlen (prompt_this_line);
- strncpy (line + out, prompt_this_line, pmtlen);
- out += pmtlen;
- line[out] = '\0';
- wrap_offset = 0;
- }
-
-#define CHECK_LPOS() \
- do { \
- lpos++; \
- if (lpos >= screenwidth) \
- { \
- inv_lbreaks[++newlines] = out; \
- lpos = 0; \
- } \
- } while (0)
-
- /* inv_lbreaks[i] is where line i starts in the buffer. */
- inv_lbreaks[newlines = 0] = 0;
-
- for (in = 0, lpos = out - wrap_offset; in < rl_end; in++)
- {
- c = (unsigned char)rl_line_buffer[in];
-
- if (out + 8 >= line_size) /* XXX - 8 for \t */
- {
- line_size *= 2;
- visible_line = xrealloc (visible_line, line_size);
- invisible_line = xrealloc (invisible_line, line_size);
- line = invisible_line;
- }
-
- if (in == rl_point)
- {
- c_pos = out;
- lb_linenum = newlines;
- }
-
- if (META_CHAR (c))
- {
- if (_rl_output_meta_chars == 0)
- {
- sprintf (line + out, "\\%o", c);
-
- if (lpos + 4 >= screenwidth)
- {
- register int temp;
-
- temp = screenwidth - lpos;
- 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 temp, newout;
- newout = (out | (int)7) + 1;
- temp = newout - out;
- if (lpos + temp >= screenwidth)
- {
- register int temp2;
- temp2 = screenwidth - lpos;
- 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 && term_up && *term_up)
- {
- line[out++] = '\0'; /* XXX - sentinel */
- 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
- {
- line[out++] = c;
- CHECK_LPOS();
- }
- }
- line[out] = '\0';
- if (c_pos < 0)
- {
- c_pos = out;
- lb_linenum = newlines;
- }
-
- inv_botlin = lb_botlin = newlines;
- inv_lbreaks[newlines+1] = out;
- cursor_linenum = lb_linenum;
-
- /* C_POS == position in buffer where 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 && term_up && *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 >= screenchars)
- out = 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 = screenwidth + wrap_offset - _rl_last_c_pos;
- if (nleft)
- 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);
- clear_to_eol
- ((linenum == _rl_vis_botlin) ? strlen (tt) : 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 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 = visible_length + wrap_offset;
- if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
- _rl_last_c_pos <= last_invisible && local_prompt)
- {
- if (term_cr)
- tputs (term_cr, 1, _rl_output_character_function);
- _rl_output_some_chars (local_prompt, nleft);
- _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);
- _rl_last_c_pos = nleft;
- }
-
- 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 = visible_length + wrap_offset;
- /* Where the new cursor position will be on the screen. This can be
- longer than SCREENWIDTH; if it is, lmargin will be adjusted. */
- phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset);
- t = screenwidth / 3;
-
- /* 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 > 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 < 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 characters at the
- right edge of the screen. If LMARGIN is 0, we need to take the
- wrap offset into account. */
- t = lmargin + M_OFFSET (lmargin, wrap_offset) + screenwidth;
- 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,
- screenwidth + visible_wrap_offset,
- 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 = screenwidth - t;
- clear_to_eol (nleft);
- }
- visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset);
- if (visible_first_line_len > screenwidth)
- visible_first_line_len = screenwidth;
-
- _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
- last_lmargin = lmargin;
- }
- }
- fflush (rl_outstream);
-
- /* Swap visible and non-visible lines. */
- {
- char *temp = visible_line;
- int *itemp = vis_lbreaks;
- visible_line = invisible_line;
- invisible_line = temp;
- vis_lbreaks = inv_lbreaks;
- inv_lbreaks = itemp;
- 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 handeled.
-
- 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;
-
- /* 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 == screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
- && _rl_last_v_pos == current_line - 1)
- {
- 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. */
- 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 */
- ols = oe - 1; /* find last same */
- nls = ne - 1;
- while ((ols > ofd) && (nls > nfd) && (*ols == *nls))
- {
- if (*ols != ' ')
- wsatend = 0;
- ols--;
- nls--;
- }
-
- if (wsatend)
- {
- ols = oe;
- nls = ne;
- }
- else if (*ols != *nls)
- {
- if (*ols) /* don't step past the NUL */
- ols++;
- if (*nls)
- 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 &&
- term_cr && lendiff > visible_length && _rl_last_c_pos > 0 &&
- od > lendiff && _rl_last_c_pos < last_invisible)
- {
- tputs (term_cr, 1, _rl_output_character_function);
- _rl_output_some_chars (local_prompt, lendiff);
- _rl_last_c_pos = lendiff;
- }
-
- _rl_move_cursor_relative (od, old);
-
- /* if (len (new) > len (old)) */
- lendiff = (nls - nfd) - (ols - ofd);
-
- /* 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)
- {
- temp = visible_wrap_offset - current_invis_chars;
- lendiff += temp;
- }
-
- /* Insert (diff (len (old), len (new)) ch. */
- temp = ne - nfd;
- if (lendiff > 0)
- {
- /* 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 (terminal_can_insert && ((2 * temp) >= lendiff || term_IC) && (!_rl_term_autowrap || !gl))
- {
- /* If lendiff > visible_length and _rl_last_c_pos == 0 and
- _rl_horizontal_scroll_mode == 1, inserting the characters with
- term_IC or term_ic will screw up the screen because of the
- invisible characters. We need to just draw them. */
- if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 ||
- lendiff <= visible_length || !current_invis_chars))
- {
- insert_some_chars (nfd, lendiff);
- _rl_last_c_pos += lendiff;
- }
- else if (*ols == 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 += 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 += 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);
- _rl_last_c_pos += temp - lendiff;
- }
- }
- else
- {
- /* cannot insert chars, write to EOL */
- _rl_output_some_chars (nfd, temp);
- _rl_last_c_pos += temp;
- }
- }
- else /* Delete characters from line. */
- {
- /* If possible and inexpensive to use terminal deletion, then do so. */
- if (term_dc && (2 * temp) >= -lendiff)
- {
- /* If all we're doing is erasing the invisible characters in the
- prompt string, don't bother. It screws up the assumptions
- about what's on the screen. */
- if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 &&
- -lendiff == visible_wrap_offset)
- lendiff = 0;
-
- if (lendiff)
- delete_chars (-lendiff); /* delete (diff) characters */
-
- /* Copy (new) chars to screen from first diff to last match */
- temp = nls - nfd;
- if (temp > 0)
- {
- _rl_output_some_chars (nfd, temp);
- _rl_last_c_pos += temp;
- }
- }
- /* Otherwise, print over the existing material. */
- else
- {
- if (temp > 0)
- {
- _rl_output_some_chars (nfd, temp);
- _rl_last_c_pos += temp;
- }
- lendiff = (oe - old) - (ne - new);
- if (_rl_term_autowrap && current_line < inv_botlin)
- space_to_eol (lendiff);
- else
- clear_to_eol (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;
-}
-
-/* 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;
- char *data;
-{
- register int i;
-
- /* If we don't have to do anything, then return. */
- if (_rl_last_c_pos == new) return;
-
- /* It may be faster to output a CR, and then move forwards instead
- of moving backwards. */
- /* i == current physical cursor position. */
- i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
- if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
- (_rl_term_autowrap && i == screenwidth))
- {
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (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)
- extern char *term_forward_char;
-
- if (term_forward_char)
- for (i = _rl_last_c_pos; i < new; i++)
- tputs (term_forward_char, 1, _rl_output_character_function);
- else
- for (i = _rl_last_c_pos; i < new; i++)
- putc (data[i], rl_outstream);
-#else
- for (i = _rl_last_c_pos; i < new; i++)
- putc (data[i], rl_outstream);
-#endif /* HACK_TERMCAP_MOTION */
- }
- else if (_rl_last_c_pos != new)
- _rl_backspace (_rl_last_c_pos - new);
- _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 > screenheight)
- return;
-
-#if defined (__GO32__)
- {
- int row, col;
-
- ScreenGetCursor (&row, &col);
- ScreenSetCursor ((row + to - _rl_last_v_pos), col);
- }
-#else /* !__GO32__ */
-
- if ((delta = to - _rl_last_v_pos) > 0)
- {
- for (i = 0; i < delta; i++)
- putc ('\n', rl_outstream);
- tputs (term_cr, 1, _rl_output_character_function);
- _rl_last_c_pos = 0;
- }
- else
- { /* delta < 0 */
- if (term_up && *term_up)
- for (i = 0; i < -delta; i++)
- tputs (term_up, 1, _rl_output_character_function);
- }
-#endif /* !__GO32__ */
- _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
-
- vsprintf (msg_buf, format, args);
- 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);
- 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;
-}
-
-static char *saved_local_prompt;
-static char *saved_local_prefix;
-static int saved_last_invisible;
-static int saved_visible_length;
-
-void
-_rl_save_prompt ()
-{
- saved_local_prompt = local_prompt;
- saved_local_prefix = local_prompt_prefix;
- saved_last_invisible = last_invisible;
- saved_visible_length = visible_length;
-
- local_prompt = local_prompt_prefix = (char *)0;
- last_invisible = visible_length = 0;
-}
-
-void
-_rl_restore_prompt ()
-{
- if (local_prompt)
- free (local_prompt);
- if (local_prompt_prefix)
- free (local_prompt_prefix);
-
- local_prompt = saved_local_prompt;
- local_prompt_prefix = saved_local_prefix;
- last_invisible = saved_last_invisible;
- visible_length = saved_visible_length;
-}
-
-char *
-_rl_make_prompt_for_search (pchar)
- int pchar;
-{
- int len;
- char *pmt;
-
- _rl_save_prompt ();
-
- if (saved_local_prompt == 0)
- {
- len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
- pmt = xmalloc (len + 2);
- if (len)
- strcpy (pmt, rl_prompt);
- pmt[len] = pchar;
- pmt[len+1] = '\0';
- }
- else
- {
- len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
- pmt = xmalloc (len + 2);
- if (len)
- strcpy (pmt, saved_local_prompt);
- pmt[len] = pchar;
- pmt[len+1] = '\0';
- local_prompt = savestring (pmt);
- last_invisible = saved_last_invisible;
- visible_length = saved_visible_length + 1;
- }
- return pmt;
-}
-
-/* Quick redisplay hack when erasing characters at the end of the line. */
-void
-_rl_erase_at_end_of_line (l)
- int l;
-{
- register int i;
-
- _rl_backspace (l);
- for (i = 0; i < l; i++)
- putc (' ', rl_outstream);
- _rl_backspace (l);
- for (i = 0; i < l; i++)
- visible_line[--_rl_last_c_pos] = '\0';
- rl_display_fixed++;
-}
-
-/* Clear to the end of the line. COUNT is the minimum
- number of character spaces to clear, */
-static void
-clear_to_eol (count)
- int count;
-{
-#if !defined (__GO32__)
- if (term_clreol)
- {
- tputs (term_clreol, 1, _rl_output_character_function);
- }
- else
-#endif /* !__GO32__ */
- space_to_eol (count);
-}
-
-/* Clear to the end of the line using spaces. COUNT is the minimum
- number of character spaces to clear, */
-static void
-space_to_eol (count)
- int count;
-{
- register int i;
-
- for (i = 0; i < count; i++)
- putc (' ', rl_outstream);
-
- _rl_last_c_pos += count;
-}
-
-/* Insert COUNT characters from STRING to the output stream. */
-static void
-insert_some_chars (string, count)
- char *string;
- int count;
-{
-#if defined (__GO32__)
- int row, col, width;
- char *row_start;
-
- ScreenGetCursor (&row, &col);
- width = ScreenCols ();
- row_start = ScreenPrimary + (row * width);
-
- memcpy (row_start + col + count, row_start + col, width - col - count);
-
- /* Place the text on the screen. */
- _rl_output_some_chars (string, count);
-#else /* !_GO32 */
-
- /* If IC is defined, then we do not have to "enter" insert mode. */
- if (term_IC)
- {
- char *buffer;
- buffer = tgoto (term_IC, 0, count);
- tputs (buffer, 1, _rl_output_character_function);
- _rl_output_some_chars (string, count);
- }
- else
- {
- register int i;
-
- /* If we have to turn on insert-mode, then do so. */
- if (term_im && *term_im)
- tputs (term_im, 1, _rl_output_character_function);
-
- /* If there is a special command for inserting characters, then
- use that first to open up the space. */
- if (term_ic && *term_ic)
- {
- for (i = count; i--; )
- tputs (term_ic, 1, _rl_output_character_function);
- }
-
- /* Print the text. */
- _rl_output_some_chars (string, count);
-
- /* If there is a string to turn off insert mode, we had best use
- it now. */
- if (term_ei && *term_ei)
- tputs (term_ei, 1, _rl_output_character_function);
- }
-#endif /* !__GO32__ */
-}
-
-/* Delete COUNT characters from the display line. */
-static void
-delete_chars (count)
- int count;
-{
-#if defined (__GO32__)
- int row, col, width;
- char *row_start;
-
- ScreenGetCursor (&row, &col);
- width = ScreenCols ();
- row_start = ScreenPrimary + (row * width);
-
- memcpy (row_start + col, row_start + col + count, width - col - count);
- memset (row_start + width - count, 0, count * 2);
-#else /* !_GO32 */
-
- if (count > screenwidth) /* XXX */
- return;
-
- if (term_DC && *term_DC)
- {
- char *buffer;
- buffer = tgoto (term_DC, count, count);
- tputs (buffer, count, _rl_output_character_function);
- }
- else
- {
- if (term_dc && *term_dc)
- while (count--)
- tputs (term_dc, 1, _rl_output_character_function);
- }
-#endif /* !__GO32__ */
-}
-
-void
-_rl_update_final ()
-{
- int full_lines;
-
- full_lines = 0;
- /* If the cursor is the only thing on an otherwise-blank last line,
- compensate so we don't print an extra CRLF. */
- if (_rl_vis_botlin && _rl_last_c_pos == 0 &&
- visible_line[inv_lbreaks[_rl_vis_botlin]+1] == 0)
- {
- _rl_vis_botlin--;
- full_lines = 1;
- }
- _rl_move_vert (_rl_vis_botlin);
- /* If we've wrapped lines, remove the final xterm line-wrap flag. */
- if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == screenwidth))
- {
- char *last_line;
- last_line = &visible_line[inv_lbreaks[_rl_vis_botlin]];
- _rl_move_cursor_relative (screenwidth - 1, last_line);
- clear_to_eol (0);
- putc (last_line[screenwidth - 1], rl_outstream);
- }
- _rl_vis_botlin = 0;
- crlf ();
- fflush (rl_outstream);
- rl_display_fixed++;
-}
-
-/* Move to the start of the current line. */
-static void
-cr ()
-{
- if (term_cr)
- {
- tputs (term_cr, 1, _rl_output_character_function);
- _rl_last_c_pos = 0;
- }
-}
-
-/* Redisplay the current line after a SIGWINCH is received. */
-void
-_rl_redisplay_after_sigwinch ()
-{
- char *t, *oldp;
-
- /* Clear the current line and put the cursor at column 0. Make sure
- the right thing happens if we have wrapped to a new screen line. */
- if (term_cr)
- {
- tputs (term_cr, 1, _rl_output_character_function);
- _rl_last_c_pos = 0;
- if (term_clreol)
- tputs (term_clreol, 1, _rl_output_character_function);
- else
- {
- space_to_eol (screenwidth);
- tputs (term_cr, 1, _rl_output_character_function);
- }
- if (_rl_last_v_pos > 0)
- _rl_move_vert (0);
- }
- else
- crlf ();
-
- /* Redraw only the last line of a multi-line prompt. */
- t = strrchr (rl_display_prompt, '\n');
- if (t)
- {
- oldp = rl_display_prompt;
- rl_display_prompt = ++t;
- rl_forced_update_display ();
- rl_display_prompt = oldp;
- }
- else
- rl_forced_update_display ();
-}
-
-void
-_rl_clean_up_for_exit ()
-{
- if (readline_echoing_p)
- {
- _rl_move_vert (_rl_vis_botlin);
- _rl_vis_botlin = 0;
- fflush (rl_outstream);
- rl_restart_output ();
- }
-}
diff --git a/contrib/libreadline/doc/Makefile b/contrib/libreadline/doc/Makefile
deleted file mode 100644
index 9dbab24ba848..000000000000
--- a/contrib/libreadline/doc/Makefile
+++ /dev/null
@@ -1,69 +0,0 @@
-# This makefile for Readline library documentation is in -*- text -*- mode.
-# Emacs likes it that way.
-TEXI2DVI = texi2dvi
-
-RM = rm -f
-
-INSTALL_DATA = cp
-infodir = /usr/local/info
-
-RLSRC = rlman.texinfo rluser.texinfo rltech.texinfo
-HISTSRC = hist.texinfo hsuser.texinfo hstech.texinfo
-
-DVIOBJ = readline.dvi history.dvi
-INFOOBJ = readline.info history.info
-PSOBJ = readline.ps history.ps
-HTMLOBJ = readline.html history.html
-
-all: info dvi html
-
-readline.dvi: $(RLSRC)
- $(TEXI2DVI) rlman.texinfo
- mv rlman.dvi readline.dvi
-
-readline.info: $(RLSRC)
- makeinfo --no-split -o $@ rlman.texinfo
-
-history.dvi: ${HISTSRC}
- $(TEXI2DVI) hist.texinfo
- mv hist.dvi history.dvi
-
-history.info: ${HISTSRC}
- makeinfo --no-split -o $@ hist.texinfo
-
-readline.ps: readline.dvi
- dvips -D 300 -o $@ readline.dvi
-
-history.ps: history.dvi
- dvips -D 300 -o $@ history.dvi
-
-readline.html: ${RLSRC}
- texi2html rlman.texinfo
- sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman.html > readline.html
- sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman_toc.html > readline_toc.html
- rm -f rlman.html rlman_toc.html
-
-history.html: ${HISTSRC}
- texi2html hist.texinfo
- sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist.html > history.html
- sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist_toc.html > history_toc.html
- rm -f hist.html hist_toc.html
-
-info: $(INFOOBJ)
-dvi: $(DVIOBJ)
-ps: $(PSOBJ)
-html: $(HTMLOBJ)
-
-clean:
- $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
- *.fns *.kys *.tps *.vrs *.o core
-
-distclean: clean
-mostlyclean: clean
-
-maintainer-clean: clean
- $(RM) *.dvi *.info *.info-* *.ps *.html
-
-install: info
- ${INSTALL_DATA} readline.info $(infodir)/readline.info
- ${INSTALL_DATA} history.info $(infodir)/history.info
diff --git a/contrib/libreadline/doc/hist.texinfo b/contrib/libreadline/doc/hist.texinfo
deleted file mode 100644
index aa04553502ca..000000000000
--- a/contrib/libreadline/doc/hist.texinfo
+++ /dev/null
@@ -1,112 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename history.info
-@settitle GNU History Library
-@c %**end of header (This is for running Texinfo on a region.)
-
-@setchapternewpage odd
-
-@ignore
-last change: Thu Mar 21 16:07:29 EST 1996
-@end ignore
-
-@set EDITION 2.1
-@set VERSION 2.1
-@set UPDATED 21 March 1996
-@set UPDATE-MONTH March 1996
-
-@ifinfo
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-Copyright (C) 1988, 1991, 1993, 1995, 1996 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-pare preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@titlepage
-@title GNU History Library
-@subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}.
-@subtitle @value{UPDATE-MONTH}
-@author Brian Fox, Free Software Foundation
-@author Chet Ramey, Case Western Reserve University
-
-@page
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-@end titlepage
-
-@ifinfo
-@node Top
-@top GNU History Library
-
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-@menu
-* Using History Interactively:: GNU History User's Manual.
-* Programming with GNU History:: GNU History Programmer's Manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifinfo
-
-@syncodeindex fn vr
-
-@include hsuser.texinfo
-@include hstech.texinfo
-
-@node Concept Index
-@appendix Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@appendix Function and Variable Index
-@printindex vr
-
-@contents
-@bye
diff --git a/contrib/libreadline/doc/hstech.texinfo b/contrib/libreadline/doc/hstech.texinfo
deleted file mode 100644
index be4131843009..000000000000
--- a/contrib/libreadline/doc/hstech.texinfo
+++ /dev/null
@@ -1,504 +0,0 @@
-@ignore
-This file documents the user interface to the GNU History library.
-
-Copyright (C) 1988, 1991, 1994, 1996 Free Software Foundation, Inc.
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@node Programming with GNU History
-@chapter Programming with GNU History
-
-This chapter describes how to interface programs that you write
-with the GNU History Library.
-It should be considered a technical guide.
-For information on the interactive use of GNU History, @pxref{Using
-History Interactively}.
-
-@menu
-* Introduction to History:: What is the GNU History library for?
-* History Storage:: How information is stored.
-* History Functions:: Functions that you can use.
-* History Variables:: Variables that control behaviour.
-* History Programming Example:: Example of using the GNU History Library.
-@end menu
-
-@node Introduction to History
-@section Introduction to History
-
-Many programs read input from the user a line at a time. The GNU History
-library is able to keep track of those lines, associate arbitrary data with
-each line, and utilize information from previous lines in composing new
-ones.
-
-The programmer using the History library has available functions
-for remembering lines on a history list, associating arbitrary data
-with a line, removing lines from the list, searching through the list
-for a line containing an arbitrary text string, and referencing any line
-in the list directly. In addition, a history @dfn{expansion} function
-is available which provides for a consistent user interface across
-different programs.
-
-The user using programs written with the History library has the
-benefit of a consistent user interface with a set of well-known
-commands for manipulating the text of previous lines and using that text
-in new commands. The basic history manipulation commands are similar to
-the history substitution provided by @code{csh}.
-
-If the programmer desires, he can use the Readline library, which
-includes some history manipulation by default, and has the added
-advantage of command line editing.
-
-@node History Storage
-@section History Storage
-
-The history list is an array of history entries. A history entry is
-declared as follows:
-
-@example
-typedef struct _hist_entry @{
- char *line;
- char *data;
-@} HIST_ENTRY;
-@end example
-
-The history list itself might therefore be declared as
-
-@example
-HIST_ENTRY **the_history_list;
-@end example
-
-The state of the History library is encapsulated into a single structure:
-
-@example
-/* A structure used to pass the current state of the history stuff around. */
-typedef struct _hist_state @{
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
- int flags;
-@} HISTORY_STATE;
-@end example
-
-If the flags member includes @code{HS_STIFLED}, the history has been
-stifled.
-
-@node History Functions
-@section History Functions
-
-This section describes the calling sequence for the various functions
-present in GNU History.
-
-@menu
-* Initializing History and State Management:: Functions to call when you
- want to use history in a
- program.
-* History List Management:: Functions used to manage the list
- of history entries.
-* Information About the History List:: Functions returning information about
- the history list.
-* Moving Around the History List:: Functions used to change the position
- in the history list.
-* Searching the History List:: Functions to search the history list
- for entries containing a string.
-* Managing the History File:: Functions that read and write a file
- containing the history list.
-* History Expansion:: Functions to perform csh-like history
- expansion.
-@end menu
-
-@node Initializing History and State Management
-@subsection Initializing History and State Management
-
-This section describes functions used to initialize and manage
-the state of the History library when you want to use the history
-functions in your program.
-
-@deftypefun void using_history ()
-Begin a session in which the history functions might be used. This
-initializes the interactive variables.
-@end deftypefun
-
-@deftypefun {HISTORY_STATE *} history_get_history_state ()
-Return a structure describing the current state of the input history.
-@end deftypefun
-
-@deftypefun void history_set_history_state (HISTORY_STATE *state)
-Set the state of the history list according to @var{state}.
-@end deftypefun
-
-@node History List Management
-@subsection History List Management
-
-These functions manage individual entries on the history list, or set
-parameters managing the list itself.
-
-@deftypefun void add_history (char *string)
-Place @var{string} at the end of the history list. The associated data
-field (if any) is set to @code{NULL}.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} remove_history (int which)
-Remove history entry at offset @var{which} from the history. The
-removed element is returned so you can free the line, data,
-and containing structure.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} replace_history_entry (int which, char *line, char *data)
-Make the history entry at offset @var{which} have @var{line} and @var{data}.
-This returns the old entry so you can dispose of the data. In the case
-of an invalid @var{which}, a @code{NULL} pointer is returned.
-@end deftypefun
-
-@deftypefun void clear_history ()
-Clear the history list by deleting all the entries.
-@end deftypefun
-
-@deftypefun void stifle_history (int max)
-Stifle the history list, remembering only the last @var{max} entries.
-@end deftypefun
-
-@deftypefun int unstifle_history ()
-Stop stifling the history. This returns the previous amount the
-history was stifled. The value is positive if the history was
-stifled, negative if it wasn't.
-@end deftypefun
-
-@deftypefun int history_is_stifled ()
-Returns non-zero if the history is stifled, zero if it is not.
-@end deftypefun
-
-@node Information About the History List
-@subsection Information About the History List
-
-These functions return information about the entire history list or
-individual list entries.
-
-@deftypefun {HIST_ENTRY **} history_list ()
-Return a @code{NULL} terminated array of @code{HIST_ENTRY} which is the
-current input history. Element 0 of this list is the beginning of time.
-If there is no history, return @code{NULL}.
-@end deftypefun
-
-@deftypefun int where_history ()
-Returns the offset of the current history element.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} current_history ()
-Return the history entry at the current position, as determined by
-@code{where_history ()}. If there is no entry there, return a @code{NULL}
-pointer.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} history_get (int offset)
-Return the history entry at position @var{offset}, starting from
-@code{history_base}. If there is no entry there, or if @var{offset}
-is greater than the history length, return a @code{NULL} pointer.
-@end deftypefun
-
-@deftypefun int history_total_bytes ()
-Return the number of bytes that the primary history entries are using.
-This function returns the sum of the lengths of all the lines in the
-history.
-@end deftypefun
-
-@node Moving Around the History List
-@subsection Moving Around the History List
-
-These functions allow the current index into the history list to be
-set or changed.
-
-@deftypefun int history_set_pos (int pos)
-Set the position in the history list to @var{pos}, an absolute index
-into the list.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} previous_history ()
-Back up the current history offset to the previous history entry, and
-return a pointer to that entry. If there is no previous entry, return
-a @code{NULL} pointer.
-@end deftypefun
-
-@deftypefun {HIST_ENTRY *} next_history ()
-Move the current history offset forward to the next history entry, and
-return the a pointer to that entry. If there is no next entry, return
-a @code{NULL} pointer.
-@end deftypefun
-
-@node Searching the History List
-@subsection Searching the History List
-@cindex History Searching
-
-These functions allow searching of the history list for entries containing
-a specific string. Searching may be performed both forward and backward
-from the current history position. The search may be @dfn{anchored},
-meaning that the string must match at the beginning of the history entry.
-@cindex anchored search
-
-@deftypefun int history_search (char *string, int direction)
-Search the history for @var{string}, starting at the current history
-offset. If @var{direction} < 0, then the search is through previous entries,
-else through subsequent. If @var{string} is found, then
-the current history index is set to that history entry, and the value
-returned is the offset in the line of the entry where
-@var{string} was found. Otherwise, nothing is changed, and a -1 is
-returned.
-@end deftypefun
-
-@deftypefun int history_search_prefix (char *string, int direction)
-Search the history for @var{string}, starting at the current history
-offset. The search is anchored: matching lines must begin with
-@var{string}. If @var{direction} < 0, then the search is through previous
-entries, else through subsequent. If @var{string} is found, then the
-current history index is set to that entry, and the return value is 0.
-Otherwise, nothing is changed, and a -1 is returned.
-@end deftypefun
-
-@deftypefun int history_search_pos (char *string, int direction, int pos)
-Search for @var{string} in the history list, starting at @var{pos}, an
-absolute index into the list. If @var{direction} is negative, the search
-proceeds backward from @var{pos}, otherwise forward. Returns the absolute
-index of the history element where @var{string} was found, or -1 otherwise.
-@end deftypefun
-
-@node Managing the History File
-@subsection Managing the History File
-
-The History library can read the history from and write it to a file.
-This section documents the functions for managing a history file.
-
-@deftypefun int read_history (char *filename)
-Add the contents of @var{filename} to the history list, a line at a
-time. If @var{filename} is @code{NULL}, then read from
-@file{~/.history}. Returns 0 if successful, or errno if not.
-@end deftypefun
-
-@deftypefun int read_history_range (char *filename, int from, int to)
-Read a range of lines from @var{filename}, adding them to the history list.
-Start reading at line @var{from} and end at @var{to}. If
-@var{from} is zero, start at the beginning. If @var{to} is less than
-@var{from}, then read until the end of the file. If @var{filename} is
-@code{NULL}, then read from @file{~/.history}. Returns 0 if successful,
-or @code{errno} if not.
-@end deftypefun
-
-@deftypefun int write_history (char *filename)
-Write the current history to @var{filename}, overwriting @var{filename}
-if necessary. If @var{filename} is
-@code{NULL}, then write the history list to @file{~/.history}. Values
-returned are as in @code{read_history ()}.
-@end deftypefun
-
-@deftypefun int append_history (int nelements, char *filename)
-Append the last @var{nelements} of the history list to @var{filename}.
-@end deftypefun
-
-@deftypefun int history_truncate_file (char *filename, int nlines)
-Truncate the history file @var{filename}, leaving only the last
-@var{nlines} lines.
-@end deftypefun
-
-@node History Expansion
-@subsection History Expansion
-
-These functions implement @code{csh}-like history expansion.
-
-@deftypefun int history_expand (char *string, char **output)
-Expand @var{string}, placing the result into @var{output}, a pointer
-to a string (@pxref{History Interaction}). Returns:
-@table @code
-@item 0
-If no expansions took place (or, if the only change in
-the text was the de-slashifying of the history expansion
-character);
-@item 1
-if expansions did take place;
-@item -1
-if there was an error in expansion;
-@item 2
-if the returned line should only be displayed, but not executed,
-as with the @code{:p} modifier (@pxref{Modifiers}).
-@end table
-
-If an error ocurred in expansion, then @var{output} contains a descriptive
-error message.
-@end deftypefun
-
-@deftypefun {char *} history_arg_extract (int first, int last, char *string)
-Extract a string segment consisting of the @var{first} through @var{last}
-arguments present in @var{string}. Arguments are broken up as in Bash.
-@end deftypefun
-
-@deftypefun {char *} get_history_event (char *string, int *cindex, int qchar)
-Returns the text of the history event beginning at @var{string} +
-@var{*cindex}. @var{*cindex} is modified to point to after the event
-specifier. At function entry, @var{cindex} points to the index into
-@var{string} where the history event specification begins. @var{qchar}
-is a character that is allowed to end the event specification in addition
-to the ``normal'' terminating characters.
-@end deftypefun
-
-@deftypefun {char **} history_tokenize (char *string)
-Return an array of tokens parsed out of @var{string}, much as the
-shell might. The tokens are split on white space and on the
-characters @code{()<>;&|$}, and shell quoting conventions are
-obeyed.
-@end deftypefun
-
-@node History Variables
-@section History Variables
-
-This section describes the externally visible variables exported by
-the GNU History Library.
-
-@deftypevar int history_base
-The logical offset of the first entry in the history list.
-@end deftypevar
-
-@deftypevar int history_length
-The number of entries currently stored in the history list.
-@end deftypevar
-
-@deftypevar int max_input_history
-The maximum number of history entries. This must be changed using
-@code{stifle_history ()}.
-@end deftypevar
-
-@deftypevar char history_expansion_char
-The character that starts a history event. The default is @samp{!}.
-@end deftypevar
-
-@deftypevar char history_subst_char
-The character that invokes word substitution if found at the start of
-a line. The default is @samp{^}.
-@end deftypevar
-
-@deftypevar char history_comment_char
-During tokenization, if this character is seen as the first character
-of a word, then it and all subsequent characters up to a newline are
-ignored, suppressing history expansion for the remainder of the line.
-This is disabled by default.
-@end deftypevar
-
-@deftypevar {char *} history_no_expand_chars
-The list of characters which inhibit history expansion if found immediately
-following @var{history_expansion_char}. The default is whitespace and
-@samp{=}.
-@end deftypevar
-
-@deftypevar {char *} history_search_delimiter_chars
-The list of additional characters which can delimit a history search
-string, in addition to whitespace, @samp{:} and @samp{?} in the case of
-a substring search. The default is empty.
-@end deftypevar
-
-@deftypevar int history_quotes_inhibit_expansion
-If non-zero, single-quoted words are not scanned for the history expansion
-character. The default value is 0.
-@end deftypevar
-
-@node History Programming Example
-@section History Programming Example
-
-The following program demonstrates simple use of the GNU History Library.
-
-@smallexample
-main ()
-@{
- char line[1024], *t;
- int len, done = 0;
-
- line[0] = 0;
-
- using_history ();
- while (!done)
- @{
- printf ("history$ ");
- fflush (stdout);
- t = fgets (line, sizeof (line) - 1, stdin);
- if (t && *t)
- @{
- len = strlen (t);
- if (t[len - 1] == '\n')
- t[len - 1] = '\0';
- @}
-
- if (!t)
- strcpy (line, "quit");
-
- if (line[0])
- @{
- char *expansion;
- int result;
-
- result = history_expand (line, &expansion);
- if (result)
- fprintf (stderr, "%s\n", expansion);
-
- if (result < 0 || result == 2)
- @{
- free (expansion);
- continue;
- @}
-
- add_history (expansion);
- strncpy (line, expansion, sizeof (line) - 1);
- free (expansion);
- @}
-
- if (strcmp (line, "quit") == 0)
- done = 1;
- else if (strcmp (line, "save") == 0)
- write_history ("history_file");
- else if (strcmp (line, "read") == 0)
- read_history ("history_file");
- else if (strcmp (line, "list") == 0)
- @{
- register HIST_ENTRY **the_list;
- register int i;
-
- the_list = history_list ();
- if (the_list)
- for (i = 0; the_list[i]; i++)
- printf ("%d: %s\n", i + history_base, the_list[i]->line);
- @}
- else if (strncmp (line, "delete", 6) == 0)
- @{
- int which;
- if ((sscanf (line + 6, "%d", &which)) == 1)
- @{
- HIST_ENTRY *entry = remove_history (which);
- if (!entry)
- fprintf (stderr, "No such entry %d\n", which);
- else
- @{
- free (entry->line);
- free (entry);
- @}
- @}
- else
- @{
- fprintf (stderr, "non-numeric arg given to `delete'\n");
- @}
- @}
- @}
-@}
-@end smallexample
diff --git a/contrib/libreadline/doc/hsuser.texinfo b/contrib/libreadline/doc/hsuser.texinfo
deleted file mode 100644
index 6e956494cb99..000000000000
--- a/contrib/libreadline/doc/hsuser.texinfo
+++ /dev/null
@@ -1,304 +0,0 @@
-@ignore
-This file documents the user interface to the GNU History library.
-
-Copyright (C) 1988, 1991, 1996 Free Software Foundation, Inc.
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@node Using History Interactively
-@chapter Using History Interactively
-
-@ifset BashFeatures
-This chapter describes how to use the GNU History Library interactively,
-from a user's standpoint. It should be considered a user's guide. For
-information on using the GNU History Library in your own programs,
-see the GNU Readline Library Manual.
-@end ifset
-@ifclear BashFeatures
-This chapter describes how to use the GNU History Library interactively,
-from a user's standpoint. It should be considered a user's guide. For
-information on using the GNU History Library in your own programs,
-@pxref{Programming with GNU History}.
-@end ifclear
-
-@ifset BashFeatures
-@menu
-* Bash History Facilities:: How Bash lets you manipulate your command
- history.
-* History Interaction:: What it feels like using History as a user.
-@end menu
-@end ifset
-@ifclear BashFeatures
-@menu
-* History Interaction:: What it feels like using History as a user.
-@end menu
-@end ifclear
-
-@ifset BashFeatures
-@node Bash History Facilities
-@section Bash History Facilities
-@cindex command history
-@cindex history list
-
-When the @samp{-o history} option to the @code{set} builtin
-is enabled (@pxref{The Set Builtin}),
-the shell provides access to the @var{command history},
-the list of commands previously typed. The text of the last
-@code{HISTSIZE}
-commands (default 500) is saved in a history list. The shell
-stores each command in the history list prior to parameter and
-variable expansion
-but after history expansion is performed, subject to the
-values of the shell variables
-@code{HISTIGNORE} and @code{HISTCONTROL}.
-When the shell starts up, the history is initialized from the
-file named by the @code{HISTFILE} variable (default @file{~/.bash_history}).
-@code{HISTFILE} is truncated, if necessary, to contain no more than
-the number of lines specified by the value of the @code{HISTFILESIZE}
-variable. When an interactive shell exits, the last
-@code{HISTSIZE} lines are copied from the history list to @code{HISTFILE}.
-If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
-the lines are appended to the history file,
-otherwise the history file is overwritten.
-If @code{HISTFILE}
-is unset, or if the history file is unwritable, the history is
-not saved. After saving the history, the history file is truncated
-to contain no more than @code{$HISTFILESIZE}
-lines. If @code{HISTFILESIZE} is not set, no truncation is performed.
-
-The builtin command @code{fc} (@pxref{Korn Shell Builtins})
-may be used to list or edit and re-execute a portion of
-the history list. The @code{history} builtin (@pxref{C Shell Builtins})
-can be used to display or modify the history list and
-manipulate the history file.
-When using the command-line editing, search commands
-are available in each editing mode that provide access to the
-history list.
-
-The shell allows control over which commands are saved on the history
-list. The @code{HISTCONTROL} and @code{HISTIGNORE}
-variables may be set to cause the shell to save only a subset of the
-commands entered.
-The @code{cmdhist}
-shell option, if enabled, causes the shell to attempt to save each
-line of a multi-line command in the same history entry, adding
-semicolons where necessary to preserve syntactic correctness.
-The @code{lithist}
-shell option causes the shell to save the command with embedded newlines
-instead of semicolons.
-@xref{Bash Builtins} for a description of @code{shopt}.
-@end ifset
-
-@node History Interaction
-@section Interactive History Expansion
-@cindex history expansion
-
-The History library provides a history expansion feature that is similar
-to the history expansion provided by @code{csh}. This section
-describes the syntax used to manipulate the history information.
-
-History expansions introduce words from the history list into
-the input stream, making it easy to repeat commands, insert the
-arguments to a previous command into the current input line, or
-fix errors in previous commands quickly.
-
-History expansion takes place in two parts. The first is to determine
-which line from the previous history should be used during substitution.
-The second is to select portions of that line for inclusion into the
-current one. The line selected from the previous history is called the
-@dfn{event}, and the portions of that line that are acted upon are
-called @dfn{words}. Various @dfn{modifiers} are available to manipulate
-the selected words. The line is broken into words in the same fashion
-that Bash does, so that several English (or Unix) words
-surrounded by quotes are considered as one word.
-History expansions are introduced by the appearance of the
-history expansion character, which is @samp{!} by default.
-@ifset BashFeatures
-Only @samp{\} and @samp{'} may be used to escape the history expansion
-character.
-@end ifset
-
-@ifset BashFeatures
-Several shell options settable with the @code{shopt}
-builtin (@pxref{Bash Builtins}) may be used to tailor
-the behavior of history expansion. If the
-@code{histverify} shell option is enabled, and Readline
-is being used, history substitutions are not immediately passed to
-the shell parser.
-Instead, the expanded line is reloaded into the Readline
-editing buffer for further modification.
-If Readline is being used, and the @code{histreedit}
-shell option is enabled, a failed history expansion will be
-reloaded into the Readline editing buffer for correction.
-The @samp{-p} option to the @code{history} builtin command
-may be used to see what a history expansion will do before using it.
-The @samp{-s} option to the @code{history} builtin may be used to
-add commands to the end of the history list without actually executing
-them, so that they are available for subsequent recall.
-
-The shell allows control of the various characters used by the
-history expansion mechanism with the @code{histchars} variable.
-@end ifset
-
-@menu
-* Event Designators:: How to specify which history line to use.
-* Word Designators:: Specifying which words are of interest.
-* Modifiers:: Modifying the results of substitution.
-@end menu
-
-@node Event Designators
-@subsection Event Designators
-@cindex event designators
-
-An event designator is a reference to a command line entry in the
-history list.
-@cindex history events
-
-@table @asis
-
-@item @code{!}
-Start a history substitution, except when followed by a space, tab,
-the end of the line, @key{=} or @key{(}.
-
-@item @code{!@var{n}}
-Refer to command line @var{n}.
-
-@item @code{!-@var{n}}
-Refer to the command @var{n} lines back.
-
-@item @code{!!}
-Refer to the previous command. This is a synonym for @samp{!-1}.
-
-@item @code{!@var{string}}
-Refer to the most recent command starting with @var{string}.
-
-@item @code{!?@var{string}[?]}
-Refer to the most recent command containing @var{string}. The trailing
-@samp{?} may be omitted if the @var{string} is followed immediately by
-a newline.
-
-@item @code{^@var{string1}^@var{string2}^}
-Quick Substitution. Repeat the last command, replacing @var{string1}
-with @var{string2}. Equivalent to
-@code{!!:s/@var{string1}/@var{string2}/}.
-
-@item @code{!#}
-The entire command line typed so far.
-
-@end table
-
-@node Word Designators
-@subsection Word Designators
-
-Word designators are used to select desired words from the event.
-A @samp{:} separates the event specification from the word designator. It
-can be omitted if the word designator begins with a @samp{^}, @samp{$},
-@samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning
-of the line, with the first word being denoted by 0 (zero). Words are
-inserted into the current line separated by single spaces.
-
-@table @code
-
-@item 0 (zero)
-The @code{0}th word. For many applications, this is the command word.
-
-@item @var{n}
-The @var{n}th word.
-
-@item ^
-The first argument; that is, word 1.
-
-@item $
-The last argument.
-
-@item %
-The word matched by the most recent @samp{?@var{string}?} search.
-
-@item @var{x}-@var{y}
-A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}.
-
-@item *
-All of the words, except the @code{0}th. This is a synonym for @samp{1-$}.
-It is not an error to use @samp{*} if there is just one word in the event;
-the empty string is returned in that case.
-
-@item @var{x}*
-Abbreviates @samp{@var{x}-$}
-
-@item @var{x}-
-Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
-
-@end table
-
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-
-@node Modifiers
-@subsection Modifiers
-
-After the optional word designator, you can add a sequence of one or more
-of the following modifiers, each preceded by a @samp{:}.
-
-@table @code
-
-@item h
-Remove a trailing pathname component, leaving only the head.
-
-@item t
-Remove all leading pathname components, leaving the tail.
-
-@item r
-Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
-the basename.
-
-@item e
-Remove all but the trailing suffix.
-
-@item p
-Print the new command but do not execute it.
-
-@ifset BashFeatures
-@item q
-Quote the substituted words, escaping further substitutions.
-
-@item x
-Quote the substituted words as with @samp{q},
-but break into words at spaces, tabs, and newlines.
-@end ifset
-
-@item s/@var{old}/@var{new}/
-Substitute @var{new} for the first occurrence of @var{old} in the
-event line. Any delimiter may be used in place of @samp{/}.
-The delimiter may be quoted in @var{old} and @var{new}
-with a single backslash. If @samp{&} appears in @var{new},
-it is replaced by @var{old}. A single backslash will quote
-the @samp{&}. The final delimiter is optional if it is the last
-character on the input line.
-
-@item &
-Repeat the previous substitution.
-
-@item g
-Cause changes to be applied over the entire event line. Used in
-conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
-or with @samp{&}.
-
-@end table
diff --git a/contrib/libreadline/doc/rlman.texinfo b/contrib/libreadline/doc/rlman.texinfo
deleted file mode 100644
index 655f3db9b94c..000000000000
--- a/contrib/libreadline/doc/rlman.texinfo
+++ /dev/null
@@ -1,110 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename readline.info
-@settitle GNU Readline Library
-@comment %**end of header (This is for running Texinfo on a region.)
-@synindex vr fn
-@setchapternewpage odd
-
-@ignore
-last change: Thu Mar 21 16:06:39 EST 1996
-@end ignore
-
-@set EDITION 2.1
-@set VERSION 2.1
-@set UPDATED 21 March 1996
-@set UPDATE-MONTH March 1996
-
-@ifinfo
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-Copyright (C) 1988, 1991 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-pare preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@titlepage
-@title GNU Readline Library
-@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
-@subtitle @value{UPDATE-MONTH}
-@author Brian Fox, Free Software Foundation
-@author Chet Ramey, Case Western Reserve University
-
-@page
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-@end titlepage
-
-@ifinfo
-@node Top
-@top GNU Readline Library
-
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-@menu
-* Command Line Editing:: GNU Readline User's Manual.
-* Programming with GNU Readline:: GNU Readline Programmer's Manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifinfo
-
-@include rluser.texinfo
-@include rltech.texinfo
-
-@node Concept Index
-@unnumbered Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@unnumbered Function and Variable Index
-@printindex fn
-
-@contents
-@bye
diff --git a/contrib/libreadline/doc/rltech.texinfo b/contrib/libreadline/doc/rltech.texinfo
deleted file mode 100644
index 6704d0e27a78..000000000000
--- a/contrib/libreadline/doc/rltech.texinfo
+++ /dev/null
@@ -1,1530 +0,0 @@
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename rltech.info
-@comment %**end of header (This is for running Texinfo on a region.)
-@setchapternewpage odd
-
-@ifinfo
-This document describes the GNU Readline Library, a utility for aiding
-in the consitency of user interface across discrete programs that need
-to provide a command line interface.
-
-Copyright (C) 1988, 1994, 1996 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-pare preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@node Programming with GNU Readline
-@chapter Programming with GNU Readline
-
-This chapter describes the interface between the GNU Readline Library and
-other programs. If you are a programmer, and you wish to include the
-features found in GNU Readline
-such as completion, line editing, and interactive history manipulation
-in your own programs, this section is for you.
-
-@menu
-* Basic Behavior:: Using the default behavior of Readline.
-* Custom Functions:: Adding your own functions to Readline.
-* Readline Variables:: Variables accessible to custom
- functions.
-* Readline Convenience Functions:: Functions which Readline supplies to
- aid in writing your own
-* Custom Completers:: Supplanting or supplementing Readline's
- completion functions.
-@end menu
-
-@node Basic Behavior
-@section Basic Behavior
-
-Many programs provide a command line interface, such as @code{mail},
-@code{ftp}, and @code{sh}. For such programs, the default behaviour of
-Readline is sufficient. This section describes how to use Readline in
-the simplest way possible, perhaps to replace calls in your code to
-@code{gets()} or @code{fgets ()}.
-
-@findex readline
-@cindex readline, function
-The function @code{readline ()} prints a prompt and then reads and returns
-a single line of text from the user. The line @code{readline}
-returns is allocated with @code{malloc ()}; you should @code{free ()}
-the line when you are done with it. The declaration for @code{readline}
-in ANSI C is
-
-@example
-@code{char *readline (char *@var{prompt});}
-@end example
-
-@noindent
-So, one might say
-@example
-@code{char *line = readline ("Enter a line: ");}
-@end example
-@noindent
-in order to read a line of text from the user.
-The line returned has the final newline removed, so only the
-text remains.
-
-If @code{readline} encounters an @code{EOF} while reading the line, and the
-line is empty at that point, then @code{(char *)NULL} is returned.
-Otherwise, the line is ended just as if a newline had been typed.
-
-If you want the user to be able to get at the line later, (with
-@key{C-p} for example), you must call @code{add_history ()} to save the
-line away in a @dfn{history} list of such lines.
-
-@example
-@code{add_history (line)};
-@end example
-
-@noindent
-For full details on the GNU History Library, see the associated manual.
-
-It is preferable to avoid saving empty lines on the history list, since
-users rarely have a burning need to reuse a blank line. Here is
-a function which usefully replaces the standard @code{gets ()} library
-function, and has the advantage of no static buffer to overflow:
-
-@example
-/* A static variable for holding the line. */
-static char *line_read = (char *)NULL;
-
-/* Read a string, and return a pointer to it. Returns NULL on EOF. */
-char *
-rl_gets ()
-@{
- /* If the buffer has already been allocated, return the memory
- to the free pool. */
- if (line_read)
- @{
- free (line_read);
- line_read = (char *)NULL;
- @}
-
- /* Get a line from the user. */
- line_read = readline ("");
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-@}
-@end example
-
-This function gives the user the default behaviour of @key{TAB}
-completion: completion on file names. If you do not want Readline to
-complete on filenames, you can change the binding of the @key{TAB} key
-with @code{rl_bind_key ()}.
-
-@example
-@code{int rl_bind_key (int @var{key}, int (*@var{function})());}
-@end example
-
-@code{rl_bind_key ()} takes two arguments: @var{key} is the character that
-you want to bind, and @var{function} is the address of the function to
-call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert ()}
-makes @key{TAB} insert itself.
-@code{rl_bind_key ()} returns non-zero if @var{key} is not a valid
-ASCII character code (between 0 and 255).
-
-Thus, to disable the default @key{TAB} behavior, the following suffices:
-@example
-@code{rl_bind_key ('\t', rl_insert);}
-@end example
-
-This code should be executed once at the start of your program; you
-might write a function called @code{initialize_readline ()} which
-performs this and other desired initializations, such as installing
-custom completers (@pxref{Custom Completers}).
-
-@node Custom Functions
-@section Custom Functions
-
-Readline provides many functions for manipulating the text of
-the line, but it isn't possible to anticipate the needs of all
-programs. This section describes the various functions and variables
-defined within the Readline library which allow a user program to add
-customized functionality to Readline.
-
-@menu
-* The Function Type:: C declarations to make code readable.
-* Function Writing:: Variables and calling conventions.
-@end menu
-
-@node The Function Type
-@subsection The Function Type
-
-For readabilty, we declare a new type of object, called
-@dfn{Function}. A @code{Function} is a C function which
-returns an @code{int}. The type declaration for @code{Function} is:
-
-@noindent
-@code{typedef int Function ();}
-
-The reason for declaring this new type is to make it easier to write
-code describing pointers to C functions. Let us say we had a variable
-called @var{func} which was a pointer to a function. Instead of the
-classic C declaration
-
-@code{int (*)()func;}
-
-@noindent
-we may write
-
-@code{Function *func;}
-
-@noindent
-Similarly, there are
-
-@example
-typedef void VFunction ();
-typedef char *CPFunction (); @r{and}
-typedef char **CPPFunction ();
-@end example
-
-@noindent
-for functions returning no value, @code{pointer to char}, and
-@code{pointer to pointer to char}, respectively.
-
-@node Function Writing
-@subsection Writing a New Function
-
-In order to write new functions for Readline, you need to know the
-calling conventions for keyboard-invoked functions, and the names of the
-variables that describe the current state of the line read so far.
-
-The calling sequence for a command @code{foo} looks like
-
-@example
-@code{foo (int count, int key)}
-@end example
-
-@noindent
-where @var{count} is the numeric argument (or 1 if defaulted) and
-@var{key} is the key that invoked this function.
-
-It is completely up to the function as to what should be done with the
-numeric argument. Some functions use it as a repeat count, some
-as a flag, and others to choose alternate behavior (refreshing the current
-line as opposed to refreshing the screen, for example). Some choose to
-ignore it. In general, if a
-function uses the numeric argument as a repeat count, it should be able
-to do something useful with both negative and positive arguments.
-At the very least, it should be aware that it can be passed a
-negative argument.
-
-@node Readline Variables
-@section Readline Variables
-
-These variables are available to function writers.
-
-@deftypevar {char *} rl_line_buffer
-This is the line gathered so far. You are welcome to modify the
-contents of the line, but see @ref{Allowing Undoing}.
-@end deftypevar
-
-@deftypevar int rl_point
-The offset of the current cursor position in @code{rl_line_buffer}
-(the @emph{point}).
-@end deftypevar
-
-@deftypevar int rl_end
-The number of characters present in @code{rl_line_buffer}. When
-@code{rl_point} is at the end of the line, @code{rl_point} and
-@code{rl_end} are equal.
-@end deftypevar
-
-@deftypevar int rl_mark
-The mark (saved position) in the current line. If set, the mark
-and point define a @emph{region}.
-@end deftypevar
-
-@deftypevar int rl_done
-Setting this to a non-zero value causes Readline to return the current
-line immediately.
-@end deftypevar
-
-@deftypevar int rl_pending_input
-Setting this to a value makes it the next keystroke read. This is a
-way to stuff a single character into the input stream.
-@end deftypevar
-
-@deftypevar {char *} rl_prompt
-The prompt Readline uses. This is set from the argument to
-@code{readline ()}, and should not be assigned to directly.
-@end deftypevar
-
-@deftypevar {char *} rl_library_version
-The version number of this revision of the library.
-@end deftypevar
-
-@deftypevar {char *} rl_terminal_name
-The terminal type, used for initialization.
-@end deftypevar
-
-@deftypevar {char *} rl_readline_name
-This variable is set to a unique name by each application using Readline.
-The value allows conditional parsing of the inputrc file
-(@pxref{Conditional Init Constructs}).
-@end deftypevar
-
-@deftypevar {FILE *} rl_instream
-The stdio stream from which Readline reads input.
-@end deftypevar
-
-@deftypevar {FILE *} rl_outstream
-The stdio stream to which Readline performs output.
-@end deftypevar
-
-@deftypevar {Function *} rl_startup_hook
-If non-zero, this is the address of a function to call just
-before @code{readline} prints the first prompt.
-@end deftypevar
-
-@deftypevar {Function *} rl_event_hook
-If non-zero, this is the address of a function to call periodically
-when readline is waiting for terminal input.
-@end deftypevar
-
-@deftypevar {Function *} rl_getc_function
-If non-zero, @code{readline} will call indirectly through this pointer
-to get a character from the input stream. By default, it is set to
-@code{rl_getc}, the default @code{readline} character input function
-(@pxref{Utility Functions}).
-@end deftypevar
-
-@deftypevar {Function *} rl_redisplay_function
-If non-zero, @code{readline} will call indirectly through this pointer
-to update the display with the current contents of the editing buffer.
-By default, it is set to @code{rl_redisplay}, the default @code{readline}
-redisplay function (@pxref{Redisplay}).
-@end deftypevar
-
-@deftypevar {Keymap} rl_executing_keymap
-This variable is set to the keymap (@pxref{Keymaps}) in which the
-currently executing readline function was found.
-@end deftypevar
-
-@deftypevar {Keymap} rl_binding_keymap
-This variable is set to the keymap (@pxref{Keymaps}) in which the
-last key binding occurred.
-@end deftypevar
-
-@node Readline Convenience Functions
-@section Readline Convenience Functions
-
-@menu
-* Function Naming:: How to give a function you write a name.
-* Keymaps:: Making keymaps.
-* Binding Keys:: Changing Keymaps.
-* Associating Function Names and Bindings:: Translate function names to
- key sequences.
-* Allowing Undoing:: How to make your functions undoable.
-* Redisplay:: Functions to control line display.
-* Modifying Text:: Functions to modify @code{rl_line_buffer}.
-* Utility Functions:: Generally useful functions and hooks.
-* Alternate Interface:: Using Readline in a `callback' fashion.
-@end menu
-
-@node Function Naming
-@subsection Naming a Function
-
-The user can dynamically change the bindings of keys while using
-Readline. This is done by representing the function with a descriptive
-name. The user is able to type the descriptive name when referring to
-the function. Thus, in an init file, one might find
-
-@example
-Meta-Rubout: backward-kill-word
-@end example
-
-This binds the keystroke @key{Meta-Rubout} to the function
-@emph{descriptively} named @code{backward-kill-word}. You, as the
-programmer, should bind the functions you write to descriptive names as
-well. Readline provides a function for doing that:
-
-@deftypefun int rl_add_defun (char *name, Function *function, int key)
-Add @var{name} to the list of named functions. Make @var{function} be
-the function that gets called. If @var{key} is not -1, then bind it to
-@var{function} using @code{rl_bind_key ()}.
-@end deftypefun
-
-Using this function alone is sufficient for most applications. It is
-the recommended way to add a few functions to the default functions that
-Readline has built in. If you need to do something other
-than adding a function to Readline, you may need to use the
-underlying functions described below.
-
-@node Keymaps
-@subsection Selecting a Keymap
-
-Key bindings take place on a @dfn{keymap}. The keymap is the
-association between the keys that the user types and the functions that
-get run. You can make your own keymaps, copy existing keymaps, and tell
-Readline which keymap to use.
-
-@deftypefun Keymap rl_make_bare_keymap ()
-Returns a new, empty keymap. The space for the keymap is allocated with
-@code{malloc ()}; you should @code{free ()} it when you are done.
-@end deftypefun
-
-@deftypefun Keymap rl_copy_keymap (Keymap map)
-Return a new keymap which is a copy of @var{map}.
-@end deftypefun
-
-@deftypefun Keymap rl_make_keymap ()
-Return a new keymap with the printing characters bound to rl_insert,
-the lowercase Meta characters bound to run their equivalents, and
-the Meta digits bound to produce numeric arguments.
-@end deftypefun
-
-@deftypefun void rl_discard_keymap (Keymap keymap)
-Free the storage associated with @var{keymap}.
-@end deftypefun
-
-Readline has several internal keymaps. These functions allow you to
-change which keymap is active.
-
-@deftypefun Keymap rl_get_keymap ()
-Returns the currently active keymap.
-@end deftypefun
-
-@deftypefun void rl_set_keymap (Keymap keymap)
-Makes @var{keymap} the currently active keymap.
-@end deftypefun
-
-@deftypefun Keymap rl_get_keymap_by_name (char *name)
-Return the keymap matching @var{name}. @var{name} is one which would
-be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
-@end deftypefun
-
-@node Binding Keys
-@subsection Binding Keys
-
-You associate keys with functions through the keymap. Readline has
-several internal keymaps: @code{emacs_standard_keymap},
-@code{emacs_meta_keymap}, @code{emacs_ctlx_keymap},
-@code{vi_movement_keymap}, and @code{vi_insertion_keymap}.
-@code{emacs_standard_keymap} is the default, and the examples in
-this manual assume that.
-
-These functions manage key bindings.
-
-@deftypefun int rl_bind_key (int key, Function *function)
-Binds @var{key} to @var{function} in the currently active keymap.
-Returns non-zero in the case of an invalid @var{key}.
-@end deftypefun
-
-@deftypefun int rl_bind_key_in_map (int key, Function *function, Keymap map)
-Bind @var{key} to @var{function} in @var{map}. Returns non-zero in the case
-of an invalid @var{key}.
-@end deftypefun
-
-@deftypefun int rl_unbind_key (int key)
-Bind @var{key} to the null function in the currently active keymap.
-Returns non-zero in case of error.
-@end deftypefun
-
-@deftypefun int rl_unbind_key_in_map (int key, Keymap map)
-Bind @var{key} to the null function in @var{map}.
-Returns non-zero in case of error.
-@end deftypefun
-
-@deftypefun int rl_generic_bind (int type, char *keyseq, char *data, Keymap map)
-Bind the key sequence represented by the string @var{keyseq} to the arbitrary
-pointer @var{data}. @var{type} says what kind of data is pointed to by
-@var{data}; this can be a function (@code{ISFUNC}), a macro
-(@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as
-necessary. The initial keymap in which to do bindings is @var{map}.
-@end deftypefun
-
-@deftypefun int rl_parse_and_bind (char *line)
-Parse @var{line} as if it had been read from the @code{inputrc} file and
-perform any key bindings and variable assignments found
-(@pxref{Readline Init File}).
-@end deftypefun
-
-@deftypefun int rl_read_init_file (char *filename)
-Read keybindings and variable assignments from @var{filename}
-(@pxref{Readline Init File}).
-@end deftypefun
-
-@node Associating Function Names and Bindings
-@subsection Associating Function Names and Bindings
-
-These functions allow you to find out what keys invoke named functions
-and the functions invoked by a particular key sequence.
-
-@deftypefun {Function *} rl_named_function (char *name)
-Return the function with name @var{name}.
-@end deftypefun
-
-@deftypefun {Function *} rl_function_of_keyseq (char *keyseq, Keymap map, int *type)
-Return the function invoked by @var{keyseq} in keymap @var{map}.
-If @var{map} is NULL, the current keymap is used. If @var{type} is
-not NULL, the type of the object is returned in it (one of @code{ISFUNC},
-@code{ISKMAP}, or @code{ISMACR}).
-@end deftypefun
-
-@deftypefun {char **} rl_invoking_keyseqs (Function *function)
-Return an array of strings representing the key sequences used to
-invoke @var{function} in the current keymap.
-@end deftypefun
-
-@deftypefun {char **} rl_invoking_keyseqs_in_map (Function *function, Keymap map)
-Return an array of strings representing the key sequences used to
-invoke @var{function} in the keymap @var{map}.
-@end deftypefun
-
-@deftypefun void rl_function_dumper (int readable)
-Print the readline function names and the key sequences currently
-bound to them to @code{rl_outstream}. If @var{readable} is non-zero,
-the list is formatted in such a way that it can be made part of an
-@code{inputrc} file and re-read.
-@end deftypefun
-
-@deftypefun void rl_list_funmap_names ()
-Print the names of all bindable Readline functions to @code{rl_outstream}.
-@end deftypefun
-
-@node Allowing Undoing
-@subsection Allowing Undoing
-
-Supporting the undo command is a painless thing, and makes your
-functions much more useful. It is certainly easy to try
-something if you know you can undo it. I could use an undo function for
-the stock market.
-
-If your function simply inserts text once, or deletes text once, and
-uses @code{rl_insert_text ()} or @code{rl_delete_text ()} to do it, then
-undoing is already done for you automatically.
-
-If you do multiple insertions or multiple deletions, or any combination
-of these operations, you should group them together into one operation.
-This is done with @code{rl_begin_undo_group ()} and
-@code{rl_end_undo_group ()}.
-
-The types of events that can be undone are:
-
-@example
-enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @};
-@end example
-
-Notice that @code{UNDO_DELETE} means to insert some text, and
-@code{UNDO_INSERT} means to delete some text. That is, the undo code
-tells undo what to undo, not how to undo it. @code{UNDO_BEGIN} and
-@code{UNDO_END} are tags added by @code{rl_begin_undo_group ()} and
-@code{rl_end_undo_group ()}.
-
-@deftypefun int rl_begin_undo_group ()
-Begins saving undo information in a group construct. The undo
-information usually comes from calls to @code{rl_insert_text ()} and
-@code{rl_delete_text ()}, but could be the result of calls to
-@code{rl_add_undo ()}.
-@end deftypefun
-
-@deftypefun int rl_end_undo_group ()
-Closes the current undo group started with @code{rl_begin_undo_group
-()}. There should be one call to @code{rl_end_undo_group ()}
-for each call to @code{rl_begin_undo_group ()}.
-@end deftypefun
-
-@deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text)
-Remember how to undo an event (according to @var{what}). The affected
-text runs from @var{start} to @var{end}, and encompasses @var{text}.
-@end deftypefun
-
-@deftypefun void free_undo_list ()
-Free the existing undo list.
-@end deftypefun
-
-@deftypefun int rl_do_undo ()
-Undo the first thing on the undo list. Returns @code{0} if there was
-nothing to undo, non-zero if something was undone.
-@end deftypefun
-
-Finally, if you neither insert nor delete text, but directly modify the
-existing text (e.g., change its case), call @code{rl_modifying ()}
-once, just before you modify the text. You must supply the indices of
-the text range that you are going to modify.
-
-@deftypefun int rl_modifying (int start, int end)
-Tell Readline to save the text between @var{start} and @var{end} as a
-single undo unit. It is assumed that you will subsequently modify
-that text.
-@end deftypefun
-
-@node Redisplay
-@subsection Redisplay
-
-@deftypefun int rl_redisplay ()
-Change what's displayed on the screen to reflect the current contents
-of @code{rl_line_buffer}.
-@end deftypefun
-
-@deftypefun int rl_forced_update_display ()
-Force the line to be updated and redisplayed, whether or not
-Readline thinks the screen display is correct.
-@end deftypefun
-
-@deftypefun int rl_on_new_line ()
-Tell the update routines that we have moved onto a new (empty) line,
-usually after ouputting a newline.
-@end deftypefun
-
-@deftypefun int rl_reset_line_state ()
-Reset the display state to a clean state and redisplay the current line
-starting on a new line.
-@end deftypefun
-
-@deftypefun int rl_message (va_alist)
-The arguments are a string as would be supplied to @code{printf}. The
-resulting string is displayed in the @dfn{echo area}. The echo area
-is also used to display numeric arguments and search strings.
-@end deftypefun
-
-@deftypefun int rl_clear_message ()
-Clear the message in the echo area.
-@end deftypefun
-
-@node Modifying Text
-@subsection Modifying Text
-
-@deftypefun int rl_insert_text (char *text)
-Insert @var{text} into the line at the current cursor position.
-@end deftypefun
-
-@deftypefun int rl_delete_text (int start, int end)
-Delete the text between @var{start} and @var{end} in the current line.
-@end deftypefun
-
-@deftypefun {char *} rl_copy_text (int start, int end)
-Return a copy of the text between @var{start} and @var{end} in
-the current line.
-@end deftypefun
-
-@deftypefun int rl_kill_text (int start, int end)
-Copy the text between @var{start} and @var{end} in the current line
-to the kill ring, appending or prepending to the last kill if the
-last command was a kill command. The text is deleted.
-If @var{start} is less than @var{end},
-the text is appended, otherwise prepended. If the last command was
-not a kill, a new kill ring slot is used.
-@end deftypefun
-
-@node Utility Functions
-@subsection Utility Functions
-
-@deftypefun int rl_read_key ()
-Return the next character available. This handles input inserted into
-the input stream via @var{pending input} (@pxref{Readline Variables})
-and @code{rl_stuff_char ()}, macros, and characters read from the keyboard.
-@end deftypefun
-
-@deftypefun int rl_getc (FILE *)
-Return the next character available from the keyboard.
-@end deftypefun
-
-@deftypefun int rl_stuff_char (int c)
-Insert @var{c} into the Readline input stream. It will be "read"
-before Readline attempts to read characters from the terminal with
-@code{rl_read_key ()}.
-@end deftypefun
-
-@deftypefun int rl_initialize ()
-Initialize or re-initialize Readline's internal state.
-@end deftypefun
-
-@deftypefun int rl_reset_terminal (char *terminal_name)
-Reinitialize Readline's idea of the terminal settings using
-@var{terminal_name} as the terminal type (e.g., @code{vt100}).
-@end deftypefun
-
-@deftypefun int alphabetic (int c)
-Return 1 if @var{c} is an alphabetic character.
-@end deftypefun
-
-@deftypefun int numeric (int c)
-Return 1 if @var{c} is a numeric character.
-@end deftypefun
-
-@deftypefun int ding ()
-Ring the terminal bell, obeying the setting of @code{bell-style}.
-@end deftypefun
-
-The following are implemented as macros, defined in @code{chartypes.h}.
-
-@deftypefun int uppercase_p (int c)
-Return 1 if @var{c} is an uppercase alphabetic character.
-@end deftypefun
-
-@deftypefun int lowercase_p (int c)
-Return 1 if @var{c} is a lowercase alphabetic character.
-@end deftypefun
-
-@deftypefun int digit_p (int c)
-Return 1 if @var{c} is a numeric character.
-@end deftypefun
-
-@deftypefun int to_upper (int c)
-If @var{c} is a lowercase alphabetic character, return the corresponding
-uppercase character.
-@end deftypefun
-
-@deftypefun int to_lower (int c)
-If @var{c} is an uppercase alphabetic character, return the corresponding
-lowercase character.
-@end deftypefun
-
-@deftypefun int digit_value (int c)
-If @var{c} is a number, return the value it represents.
-@end deftypefun
-
-@node Alternate Interface
-@subsection Alternate Interface
-
-An alternate interface is available to plain @code{readline()}. Some
-applications need to interleave keyboard I/O with file, device, or
-window system I/O, typically by using a main loop to @code{select()}
-on various file descriptors. To accomodate this need, readline can
-also be invoked as a `callback' function from an event loop. There
-are functions available to make this easy.
-
-@deftypefun void rl_callback_handler_install (char *prompt, Vfunction *lhandler)
-Set up the terminal for readline I/O and display the initial
-expanded value of @var{prompt}. Save the value of @var{lhandler} to
-use as a callback when a complete line of input has been entered.
-@end deftypefun
-
-@deftypefun void rl_callback_read_char ()
-Whenever an application determines that keyboard input is available, it
-should call @code{rl_callback_read_char()}, which will read the next
-character from the current input source. If that character completes the
-line, @code{rl_callback_read_char} will invoke the @var{lhandler}
-function saved by @code{rl_callback_handler_install} to process the
-line. @code{EOF} is indicated by calling @var{lhandler} with a
-@code{NULL} line.
-@end deftypefun
-
-@deftypefun void rl_callback_handler_remove ()
-Restore the terminal to its initial state and remove the line handler.
-This may be called from within a callback as well as independently.
-@end deftypefun
-
-@subsection An Example
-
-Here is a function which changes lowercase characters to their uppercase
-equivalents, and uppercase characters to lowercase. If
-this function was bound to @samp{M-c}, then typing @samp{M-c} would
-change the case of the character under point. Typing @samp{M-1 0 M-c}
-would change the case of the following 10 characters, leaving the cursor on
-the last character changed.
-
-@example
-/* Invert the case of the COUNT following characters. */
-int
-invert_case_line (count, key)
- int count, key;
-@{
- register int start, end, i;
-
- start = rl_point;
-
- if (rl_point >= rl_end)
- return (0);
-
- if (count < 0)
- @{
- direction = -1;
- count = -count;
- @}
- else
- direction = 1;
-
- /* Find the end of the range to modify. */
- end = start + (count * direction);
-
- /* Force it to be within range. */
- if (end > rl_end)
- end = rl_end;
- else if (end < 0)
- end = 0;
-
- if (start == end)
- return (0);
-
- if (start > end)
- @{
- int temp = start;
- start = end;
- end = temp;
- @}
-
- /* Tell readline that we are modifying the line, so it will save
- the undo information. */
- rl_modifying (start, end);
-
- for (i = start; i != end; i++)
- @{
- if (uppercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
- else if (lowercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
- @}
- /* Move point to on top of the last character changed. */
- rl_point = (direction == 1) ? end - 1 : start;
- return (0);
-@}
-@end example
-
-@node Custom Completers
-@section Custom Completers
-
-Typically, a program that reads commands from the user has a way of
-disambiguating commands and data. If your program is one of these, then
-it can provide completion for commands, data, or both.
-The following sections describe how your program and Readline
-cooperate to provide this service.
-
-@menu
-* How Completing Works:: The logic used to do completion.
-* Completion Functions:: Functions provided by Readline.
-* Completion Variables:: Variables which control completion.
-* A Short Completion Example:: An example of writing completer subroutines.
-@end menu
-
-@node How Completing Works
-@subsection How Completing Works
-
-In order to complete some text, the full list of possible completions
-must be available. That is, it is not possible to accurately
-expand a partial word without knowing all of the possible words
-which make sense in that context. The Readline library provides
-the user interface to completion, and two of the most common
-completion functions: filename and username. For completing other types
-of text, you must write your own completion function. This section
-describes exactly what such functions must do, and provides an example.
-
-There are three major functions used to perform completion:
-
-@enumerate
-@item
-The user-interface function @code{rl_complete ()}. This function is
-called with the same arguments as other Readline
-functions intended for interactive use: @var{count} and
-@var{invoking_key}. It isolates the word to be completed and calls
-@code{completion_matches ()} to generate a list of possible completions.
-It then either lists the possible completions, inserts the possible
-completions, or actually performs the
-completion, depending on which behavior is desired.
-
-@item
-The internal function @code{completion_matches ()} uses your
-@dfn{generator} function to generate the list of possible matches, and
-then returns the array of these matches. You should place the address
-of your generator function in @code{rl_completion_entry_function}.
-
-@item
-The generator function is called repeatedly from
-@code{completion_matches ()}, returning a string each time. The
-arguments to the generator function are @var{text} and @var{state}.
-@var{text} is the partial word to be completed. @var{state} is zero the
-first time the function is called, allowing the generator to perform
-any necessary initialization, and a positive non-zero integer for
-each subsequent call. When the generator function returns
-@code{(char *)NULL} this signals @code{completion_matches ()} that there are
-no more possibilities left. Usually the generator function computes the
-list of possible completions when @var{state} is zero, and returns them
-one at a time on subsequent calls. Each string the generator function
-returns as a match must be allocated with @code{malloc()}; Readline
-frees the strings when it has finished with them.
-
-@end enumerate
-
-@deftypefun int rl_complete (int ignore, int invoking_key)
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-@code{completion_matches ()}). The default is to do filename completion.
-@end deftypefun
-
-@deftypevar {Function *} rl_completion_entry_function
-This is a pointer to the generator function for @code{completion_matches
-()}. If the value of @code{rl_completion_entry_function} is
-@code{(Function *)NULL} then the default filename generator function,
-@code{filename_entry_function ()}, is used.
-@end deftypevar
-
-@node Completion Functions
-@subsection Completion Functions
-
-Here is the complete list of callable completion functions present in
-Readline.
-
-@deftypefun int rl_complete_internal (int what_to_do)
-Complete the word at or before point. @var{what_to_do} says what to do
-with the completion. A value of @samp{?} means list the possible
-completions. @samp{TAB} means do standard completion. @samp{*} means
-insert all of the possible completions. @samp{!} means to display
-all of the possible completions, if there is more than one, as well as
-performing partial completion.
-@end deftypefun
-
-@deftypefun int rl_complete (int ignore, int invoking_key)
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-@code{completion_matches ()} and @code{rl_completion_entry_function}).
-The default is to do filename
-completion. This calls @code{rl_complete_internal ()} with an
-argument depending on @var{invoking_key}.
-@end deftypefun
-
-@deftypefun int rl_possible_completions (int count, int invoking_key))
-List the possible completions. See description of @code{rl_complete
-()}. This calls @code{rl_complete_internal ()} with an argument of
-@samp{?}.
-@end deftypefun
-
-@deftypefun int rl_insert_completions (int count, int invoking_key))
-Insert the list of possible completions into the line, deleting the
-partially-completed word. See description of @code{rl_complete ()}.
-This calls @code{rl_complete_internal ()} with an argument of @samp{*}.
-@end deftypefun
-
-@deftypefun {char **} completion_matches (char *text, CPFunction *entry_func)
-Returns an array of @code{(char *)} which is a list of completions for
-@var{text}. If there are no completions, returns @code{(char **)NULL}.
-The first entry in the returned array is the substitution for @var{text}.
-The remaining entries are the possible completions. The array is
-terminated with a @code{NULL} pointer.
-
-@var{entry_func} is a function of two args, and returns a
-@code{(char *)}. The first argument is @var{text}. The second is a
-state argument; it is zero on the first call, and non-zero on subsequent
-calls. @var{entry_func} returns a @code{NULL} pointer to the caller
-when there are no more matches.
-@end deftypefun
-
-@deftypefun {char *} filename_completion_function (char *text, int state)
-A generator function for filename completion in the general case. Note
-that completion in Bash is a little different because of all
-the pathnames that must be followed when looking up completions for a
-command. The Bash source is a useful reference for writing custom
-completion functions.
-@end deftypefun
-
-@deftypefun {char *} username_completion_function (char *text, int state)
-A completion generator for usernames. @var{text} contains a partial
-username preceded by a random character (usually @samp{~}). As with all
-completion generators, @var{state} is zero on the first call and non-zero
-for subsequent calls.
-@end deftypefun
-
-@node Completion Variables
-@subsection Completion Variables
-
-@deftypevar {Function *} rl_completion_entry_function
-A pointer to the generator function for @code{completion_matches ()}.
-@code{NULL} means to use @code{filename_entry_function ()}, the default
-filename completer.
-@end deftypevar
-
-@deftypevar {CPPFunction *} rl_attempted_completion_function
-A pointer to an alternative function to create matches.
-The function is called with @var{text}, @var{start}, and @var{end}.
-@var{start} and @var{end} are indices in @code{rl_line_buffer} saying
-what the boundaries of @var{text} are. If this function exists and
-returns @code{NULL}, or if this variable is set to @code{NULL}, then
-@code{rl_complete ()} will call the value of
-@code{rl_completion_entry_function} to generate matches, otherwise the
-array of strings returned will be used.
-@end deftypevar
-
-@deftypevar {CPFunction *} rl_filename_quoting_function
-A pointer to a function that will quote a filename in an application-
-specific fashion. This is called if filename completion is being
-attempted and one of the characters in @code{rl_filename_quote_characters}
-appears in a completed filename. The function is called with
-@var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text}
-is the filename to be quoted. The @var{match_type} is either
-@code{SINGLE_MATCH}, if there is only one completion match, or
-@code{MULT_MATCH}. Some functions use this to decide whether or not to
-insert a closing quote character. The @var{quote_pointer} is a pointer
-to any opening quote character the user typed. Some functions choose
-to reset this character.
-@end deftypevar
-
-@deftypevar {CPFunction *} rl_filename_dequoting_function
-A pointer to a function that will remove application-specific quoting
-characters from a filename before completion is attempted, so those
-characters do not interfere with matching the text against names in
-the filesystem. It is called with @var{text}, the text of the word
-to be dequoted, and @var{quote_char}, which is the quoting character
-that delimits the filename (usually @samp{'} or @samp{"}). If
-@var{quote_char} is zero, the filename was not in an embedded string.
-@end deftypevar
-
-@deftypevar {Function *} rl_char_is_quoted_p
-A pointer to a function to call that determines whether or not a specific
-character in the line buffer is quoted, according to whatever quoting
-mechanism the program calling readline uses. The function is called with
-two arguments: @var{text}, the text of the line, and @var{index}, the
-index of the character in the line. It is used to decide whether a
-character found in @code{rl_completer_word_break_characters} should be
-used to break words for the completer.
-@end deftypevar
-
-@deftypevar int rl_completion_query_items
-Up to this many items will be displayed in response to a
-possible-completions call. After that, we ask the user if she is sure
-she wants to see them all. The default value is 100.
-@end deftypevar
-
-@deftypevar {char *} rl_basic_word_break_characters
-The basic list of characters that signal a break between words for the
-completer routine. The default value of this variable is the characters
-which break words for completion in Bash, i.e.,
-@code{" \t\n\"\\'`@@$><=;|&@{("}.
-@end deftypevar
-
-@deftypevar {char *} rl_basic_quote_characters
-List of quote characters which can cause a word break.
-@end deftypevar
-
-@deftypevar {char *} rl_completer_word_break_characters
-The list of characters that signal a break between words for
-@code{rl_complete_internal ()}. The default list is the value of
-@code{rl_basic_word_break_characters}.
-@end deftypevar
-
-@deftypevar {char *} rl_completer_quote_characters
-List of characters which can be used to quote a substring of the line.
-Completion occurs on the entire substring, and within the substring
-@code{rl_completer_word_break_characters} are treated as any other character,
-unless they also appear within this list.
-@end deftypevar
-
-@deftypevar {char *} rl_filename_quote_characters
-A list of characters that cause a filename to be quoted by the completer
-when they appear in a completed filename. The default is empty.
-@end deftypevar
-
-@deftypevar {char *} rl_special_prefixes
-The list of characters that are word break characters, but should be
-left in @var{text} when it is passed to the completion function.
-Programs can use this to help determine what kind of completing to do.
-For instance, Bash sets this variable to "$@@" so that it can complete
-shell variables and hostnames.
-@end deftypevar
-
-@deftypevar {int} rl_completion_append_character
-When a single completion alternative matches at the end of the command
-line, this character is appended to the inserted completion text. The
-default is a space character (@samp{ }). Setting this to the null
-character (@samp{\0}) prevents anything being appended automatically.
-This can be changed in custom completion functions to
-provide the ``most sensible word separator character'' according to
-an application-specific command line syntax specification.
-@end deftypevar
-
-@deftypevar int rl_ignore_completion_duplicates
-If non-zero, then disallow duplicates in the matches. Default is 1.
-@end deftypevar
-
-@deftypevar int rl_filename_completion_desired
-Non-zero means that the results of the matches are to be treated as
-filenames. This is @emph{always} zero on entry, and can only be changed
-within a completion entry generator function. If it is set to a non-zero
-value, directory names have a slash appended and Readline attempts to
-quote completed filenames if they contain any embedded word break
-characters.
-@end deftypevar
-
-@deftypevar int rl_filename_quoting_desired
-Non-zero means that the results of the matches are to be quoted using
-double quotes (or an application-specific quoting mechanism) if the
-completed filename contains any characters in
-@code{rl_filename_quote_chars}. This is @emph{always} non-zero
-on entry, and can only be changed within a completion entry generator
-function. The quoting is effected via a call to the function pointed to
-by @code{rl_filename_quoting_function}.
-@end deftypevar
-
-@deftypevar int rl_inhibit_completion
-If this variable is non-zero, completion is inhibited. The completion
-character will be inserted as any other bound to @code{self-insert}.
-@end deftypevar
-
-@deftypevar {Function *} rl_ignore_some_completions_function
-This function, if defined, is called by the completer when real filename
-completion is done, after all the matching names have been generated.
-It is passed a @code{NULL} terminated array of matches.
-The first element (@code{matches[0]}) is the
-maximal substring common to all matches. This function can
-re-arrange the list of matches as required, but each element deleted
-from the array must be freed.
-@end deftypevar
-
-@deftypevar {Function *} rl_directory_completion_hook
-This function, if defined, is allowed to modify the directory portion
-of filenames Readline completes. It is called with the address of a
-string (the current directory name) as an argument. It could be used
-to expand symbolic links or shell variables in pathnames.
-@end deftypevar
-
-@node A Short Completion Example
-@subsection A Short Completion Example
-
-Here is a small application demonstrating the use of the GNU Readline
-library. It is called @code{fileman}, and the source code resides in
-@file{examples/fileman.c}. This sample application provides
-completion of command names, line editing features, and access to the
-history list.
-
-@page
-@smallexample
-/* fileman.c -- A tiny application which demonstrates how to use the
- GNU Readline library. This application interactively allows users
- to manipulate files and their modes. */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-
-#include <readline/readline.h>
-#include <readline/history.h>
-
-extern char *getwd ();
-extern char *xmalloc ();
-
-/* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
-
-/* A structure which contains information on the commands this program
- can understand. */
-
-typedef struct @{
- char *name; /* User printable name of the function. */
- Function *func; /* Function to call to do the job. */
- char *doc; /* Documentation for this function. */
-@} COMMAND;
-
-COMMAND commands[] = @{
- @{ "cd", com_cd, "Change to directory DIR" @},
- @{ "delete", com_delete, "Delete FILE" @},
- @{ "help", com_help, "Display this text" @},
- @{ "?", com_help, "Synonym for `help'" @},
- @{ "list", com_list, "List files in DIR" @},
- @{ "ls", com_list, "Synonym for `list'" @},
- @{ "pwd", com_pwd, "Print the current working directory" @},
- @{ "quit", com_quit, "Quit using Fileman" @},
- @{ "rename", com_rename, "Rename FILE to NEWNAME" @},
- @{ "stat", com_stat, "Print out statistics on FILE" @},
- @{ "view", com_view, "View the contents of FILE" @},
- @{ (char *)NULL, (Function *)NULL, (char *)NULL @}
-@};
-
-/* Forward declarations. */
-char *stripwhite ();
-COMMAND *find_command ();
-
-/* The name of this program, as taken from argv[0]. */
-char *progname;
-
-/* When non-zero, this global means the user is done using this program. */
-int done;
-
-char *
-dupstr (s)
- int s;
-@{
- char *r;
-
- r = xmalloc (strlen (s) + 1);
- strcpy (r, s);
- return (r);
-@}
-
-main (argc, argv)
- int argc;
- char **argv;
-@{
- char *line, *s;
-
- progname = argv[0];
-
- initialize_readline (); /* Bind our completer. */
-
- /* Loop reading and executing lines until the user quits. */
- for ( ; done == 0; )
- @{
- line = readline ("FileMan: ");
-
- if (!line)
- break;
-
- /* Remove leading and trailing whitespace from the line.
- Then, if there is anything left, add it to the history list
- and execute it. */
- s = stripwhite (line);
-
- if (*s)
- @{
- add_history (s);
- execute_line (s);
- @}
-
- free (line);
- @}
- exit (0);
-@}
-
-/* Execute a command line. */
-int
-execute_line (line)
- char *line;
-@{
- register int i;
- COMMAND *command;
- char *word;
-
- /* Isolate the command word. */
- i = 0;
- while (line[i] && whitespace (line[i]))
- i++;
- word = line + i;
-
- while (line[i] && !whitespace (line[i]))
- i++;
-
- if (line[i])
- line[i++] = '\0';
-
- command = find_command (word);
-
- if (!command)
- @{
- fprintf (stderr, "%s: No such command for FileMan.\n", word);
- return (-1);
- @}
-
- /* Get argument to command, if any. */
- while (whitespace (line[i]))
- i++;
-
- word = line + i;
-
- /* Call the function. */
- return ((*(command->func)) (word));
-@}
-
-/* Look up NAME as the name of a command, and return a pointer to that
- command. Return a NULL pointer if NAME isn't a command name. */
-COMMAND *
-find_command (name)
- char *name;
-@{
- register int i;
-
- for (i = 0; commands[i].name; i++)
- if (strcmp (name, commands[i].name) == 0)
- return (&commands[i]);
-
- return ((COMMAND *)NULL);
-@}
-
-/* Strip whitespace from the start and end of STRING. Return a pointer
- into STRING. */
-char *
-stripwhite (string)
- char *string;
-@{
- register char *s, *t;
-
- for (s = string; whitespace (*s); s++)
- ;
-
- if (*s == 0)
- return (s);
-
- t = s + strlen (s) - 1;
- while (t > s && whitespace (*t))
- t--;
- *++t = '\0';
-
- return s;
-@}
-
-/* **************************************************************** */
-/* */
-/* Interface to Readline Completion */
-/* */
-/* **************************************************************** */
-
-char *command_generator ();
-char **fileman_completion ();
-
-/* Tell the GNU Readline library how to complete. We want to try to complete
- on command names if this is the first word in the line, or on filenames
- if not. */
-initialize_readline ()
-@{
- /* Allow conditional parsing of the ~/.inputrc file. */
- rl_readline_name = "FileMan";
-
- /* Tell the completer that we want a crack first. */
- rl_attempted_completion_function = (CPPFunction *)fileman_completion;
-@}
-
-/* Attempt to complete on the contents of TEXT. START and END bound the
- region of rl_line_buffer that contains the word to complete. TEXT is
- the word to complete. We can use the entire contents of rl_line_buffer
- in case we want to do some simple parsing. Return the array of matches,
- or NULL if there aren't any. */
-char **
-fileman_completion (text, start, end)
- char *text;
- int start, end;
-@{
- char **matches;
-
- matches = (char **)NULL;
-
- /* If this word is at the start of the line, then it is a command
- to complete. Otherwise it is the name of a file in the current
- directory. */
- if (start == 0)
- matches = completion_matches (text, command_generator);
-
- return (matches);
-@}
-
-/* Generator function for command completion. STATE lets us know whether
- to start from scratch; without any state (i.e. STATE == 0), then we
- start at the top of the list. */
-char *
-command_generator (text, state)
- char *text;
- int state;
-@{
- static int list_index, len;
- char *name;
-
- /* If this is a new word to complete, initialize now. This includes
- saving the length of TEXT for efficiency, and initializing the index
- variable to 0. */
- if (!state)
- @{
- list_index = 0;
- len = strlen (text);
- @}
-
- /* Return the next name which partially matches from the command list. */
- while (name = commands[list_index].name)
- @{
- list_index++;
-
- if (strncmp (name, text, len) == 0)
- return (dupstr(name));
- @}
-
- /* If no names matched, then return NULL. */
- return ((char *)NULL);
-@}
-
-/* **************************************************************** */
-/* */
-/* FileMan Commands */
-/* */
-/* **************************************************************** */
-
-/* String to pass to system (). This is for the LIST, VIEW and RENAME
- commands. */
-static char syscom[1024];
-
-/* List the file(s) named in arg. */
-com_list (arg)
- char *arg;
-@{
- if (!arg)
- arg = "";
-
- sprintf (syscom, "ls -FClg %s", arg);
- return (system (syscom));
-@}
-
-com_view (arg)
- char *arg;
-@{
- if (!valid_argument ("view", arg))
- return 1;
-
- sprintf (syscom, "more %s", arg);
- return (system (syscom));
-@}
-
-com_rename (arg)
- char *arg;
-@{
- too_dangerous ("rename");
- return (1);
-@}
-
-com_stat (arg)
- char *arg;
-@{
- struct stat finfo;
-
- if (!valid_argument ("stat", arg))
- return (1);
-
- if (stat (arg, &finfo) == -1)
- @{
- perror (arg);
- return (1);
- @}
-
- printf ("Statistics for `%s':\n", arg);
-
- printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
- finfo.st_nlink,
- (finfo.st_nlink == 1) ? "" : "s",
- finfo.st_size,
- (finfo.st_size == 1) ? "" : "s");
- printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
- printf (" Last access at: %s", ctime (&finfo.st_atime));
- printf (" Last modified at: %s", ctime (&finfo.st_mtime));
- return (0);
-@}
-
-com_delete (arg)
- char *arg;
-@{
- too_dangerous ("delete");
- return (1);
-@}
-
-/* Print out help for ARG, or for all of the commands if ARG is
- not present. */
-com_help (arg)
- char *arg;
-@{
- register int i;
- int printed = 0;
-
- for (i = 0; commands[i].name; i++)
- @{
- if (!*arg || (strcmp (arg, commands[i].name) == 0))
- @{
- printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
- printed++;
- @}
- @}
-
- if (!printed)
- @{
- printf ("No commands match `%s'. Possibilties are:\n", arg);
-
- for (i = 0; commands[i].name; i++)
- @{
- /* Print in six columns. */
- if (printed == 6)
- @{
- printed = 0;
- printf ("\n");
- @}
-
- printf ("%s\t", commands[i].name);
- printed++;
- @}
-
- if (printed)
- printf ("\n");
- @}
- return (0);
-@}
-
-/* Change to the directory ARG. */
-com_cd (arg)
- char *arg;
-@{
- if (chdir (arg) == -1)
- @{
- perror (arg);
- return 1;
- @}
-
- com_pwd ("");
- return (0);
-@}
-
-/* Print out the current working directory. */
-com_pwd (ignore)
- char *ignore;
-@{
- char dir[1024], *s;
-
- s = getwd (dir);
- if (s == 0)
- @{
- printf ("Error getting pwd: %s\n", dir);
- return 1;
- @}
-
- printf ("Current directory is %s\n", dir);
- return 0;
-@}
-
-/* The user wishes to quit using this program. Just set DONE non-zero. */
-com_quit (arg)
- char *arg;
-@{
- done = 1;
- return (0);
-@}
-
-/* Function which tells you that you can't do this. */
-too_dangerous (caller)
- char *caller;
-@{
- fprintf (stderr,
- "%s: Too dangerous for me to distribute. Write it yourself.\n",
- caller);
-@}
-
-/* Return non-zero if ARG is a valid argument for CALLER, else print
- an error message and return zero. */
-int
-valid_argument (caller, arg)
- char *caller, *arg;
-@{
- if (!arg || !*arg)
- @{
- fprintf (stderr, "%s: Argument required.\n", caller);
- return (0);
- @}
-
- return (1);
-@}
-@end smallexample
diff --git a/contrib/libreadline/doc/rluser.texinfo b/contrib/libreadline/doc/rluser.texinfo
deleted file mode 100644
index 65111f333d9e..000000000000
--- a/contrib/libreadline/doc/rluser.texinfo
+++ /dev/null
@@ -1,1166 +0,0 @@
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename rluser.info
-@comment %**end of header (This is for running Texinfo on a region.)
-@setchapternewpage odd
-
-@ignore
-This file documents the end user interface to the GNU command line
-editing features. It is to be an appendix to manuals for programs which
-use these features. There is a document entitled "readline.texinfo"
-which contains both end-user and programmer documentation for the GNU
-Readline Library.
-
-Copyright (C) 1988, 1991, 1993, 1996 Free Software Foundation, Inc.
-
-Authored by Brian Fox and Chet Ramey.
-
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-Permission is granted to make and distribute verbatim copies of this manual
-provided the copyright notice and this permission notice are preserved on
-all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-GNU Copyright statement is available to the distributee, and provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ignore
-
-@comment If you are including this manual as an appendix, then set the
-@comment variable readline-appendix.
-
-@node Command Line Editing
-@chapter Command Line Editing
-
-This chapter describes the basic features of the @sc{GNU}
-command line editing interface.
-
-@menu
-* Introduction and Notation:: Notation used in this text.
-* Readline Interaction:: The minimum set of commands for editing a line.
-* Readline Init File:: Customizing Readline from a user's view.
-* Bindable Readline Commands:: A description of most of the Readline commands
- available for binding
-* Readline vi Mode:: A short description of how to make Readline
- behave like the vi editor.
-@end menu
-
-@node Introduction and Notation
-@section Introduction to Line Editing
-
-The following paragraphs describe the notation used to represent
-keystrokes.
-
-The text @key{C-k} is read as `Control-K' and describes the character
-produced when the @key{k} key is pressed while the Control key
-is depressed.
-
-The text @key{M-k} is read as `Meta-K' and describes the character
-produced when the meta key (if you have one) is depressed, and the @key{k}
-key is pressed. If you do not have a meta key, the identical keystroke
-can be generated by typing @key{ESC} @i{first}, and then typing @key{k}.
-Either process is known as @dfn{metafying} the @key{k} key.
-
-The text @key{M-C-k} is read as `Meta-Control-k' and describes the
-character produced by @dfn{metafying} @key{C-k}.
-
-In addition, several keys have their own names. Specifically,
-@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
-stand for themselves when seen in this text, or in an init file
-(@pxref{Readline Init File}).
-
-@node Readline Interaction
-@section Readline Interaction
-@cindex interaction, readline
-
-Often during an interactive session you type in a long line of text,
-only to notice that the first word on the line is misspelled. The
-Readline library gives you a set of commands for manipulating the text
-as you type it in, allowing you to just fix your typo, and not forcing
-you to retype the majority of the line. Using these editing commands,
-you move the cursor to the place that needs correction, and delete or
-insert the text of the corrections. Then, when you are satisfied with
-the line, you simply press @key{RETURN}. You do not have to be at the
-end of the line to press @key{RETURN}; the entire line is accepted
-regardless of the location of the cursor within the line.
-
-@menu
-* Readline Bare Essentials:: The least you need to know about Readline.
-* Readline Movement Commands:: Moving about the input line.
-* Readline Killing Commands:: How to delete text, and how to get it back!
-* Readline Arguments:: Giving numeric arguments to commands.
-* Searching:: Searching through previous lines.
- @end menu
-
-@node Readline Bare Essentials
-@subsection Readline Bare Essentials
-@cindex notation, readline
-@cindex command editing
-@cindex editing command lines
-
-In order to enter characters into the line, simply type them. The typed
-character appears where the cursor was, and then the cursor moves one
-space to the right. If you mistype a character, you can use your
-erase character to back up and delete the mistyped character.
-
-Sometimes you may miss typing a character that you wanted to type, and
-not notice your error until you have typed several other characters. In
-that case, you can type @key{C-b} to move the cursor to the left, and then
-correct your mistake. Afterwards, you can move the cursor to the right
-with @key{C-f}.
-
-When you add text in the middle of a line, you will notice that characters
-to the right of the cursor are `pushed over' to make room for the text
-that you have inserted. Likewise, when you delete text behind the cursor,
-characters to the right of the cursor are `pulled back' to fill in the
-blank space created by the removal of the text. A list of the basic bare
-essentials for editing the text of an input line follows.
-
-@table @asis
-@item @key{C-b}
-Move back one character.
-@item @key{C-f}
-Move forward one character.
-@item @key{DEL}
-Delete the character to the left of the cursor.
-@item @key{C-d}
-Delete the character underneath the cursor.
-@item @w{Printing characters}
-Insert the character into the line at the cursor.
-@item @key{C-_}
-Undo the last thing that you did. You can undo all the way back to an
-empty line.
-@end table
-
-@node Readline Movement Commands
-@subsection Readline Movement Commands
-
-
-The above table describes the most basic possible keystrokes that you need
-in order to do editing of the input line. For your convenience, many
-other commands have been added in addition to @key{C-b}, @key{C-f},
-@key{C-d}, and @key{DEL}. Here are some commands for moving more rapidly
-about the line.
-
-@table @key
-@item C-a
-Move to the start of the line.
-@item C-e
-Move to the end of the line.
-@item M-f
-Move forward a word.
-@item M-b
-Move backward a word.
-@item C-l
-Clear the screen, reprinting the current line at the top.
-@end table
-
-Notice how @key{C-f} moves forward a character, while @key{M-f} moves
-forward a word. It is a loose convention that control keystrokes
-operate on characters while meta keystrokes operate on words.
-
-@node Readline Killing Commands
-@subsection Readline Killing Commands
-
-@cindex killing text
-@cindex yanking text
-
-@dfn{Killing} text means to delete the text from the line, but to save
-it away for later use, usually by @dfn{yanking} (re-inserting)
-it back into the line.
-If the description for a command says that it `kills' text, then you can
-be sure that you can get the text back in a different (or the same)
-place later.
-
-When you use a kill command, the text is saved in a @dfn{kill-ring}.
-Any number of consecutive kills save all of the killed text together, so
-that when you yank it back, you get it all. The kill
-ring is not line specific; the text that you killed on a previously
-typed line is available to be yanked back later, when you are typing
-another line.
-@cindex kill ring
-
-Here is the list of commands for killing text.
-
-@table @key
-@item C-k
-Kill the text from the current cursor position to the end of the line.
-
-@item M-d
-Kill from the cursor to the end of the current word, or if between
-words, to the end of the next word.
-
-@item M-DEL
-Kill from the cursor the start of the previous word, or if between
-words, to the start of the previous word.
-
-@item C-w
-Kill from the cursor to the previous whitespace. This is different than
-@key{M-DEL} because the word boundaries differ.
-
-@end table
-
-And, here is how to @dfn{yank} the text back into the line. Yanking
-means to copy the most-recently-killed text from the kill buffer.
-
-@table @key
-@item C-y
-Yank the most recently killed text back into the buffer at the cursor.
-
-@item M-y
-Rotate the kill-ring, and yank the new top. You can only do this if
-the prior command is @key{C-y} or @key{M-y}.
-@end table
-
-@node Readline Arguments
-@subsection Readline Arguments
-
-You can pass numeric arguments to Readline commands. Sometimes the
-argument acts as a repeat count, other times it is the @i{sign} of the
-argument that is significant. If you pass a negative argument to a
-command which normally acts in a forward direction, that command will
-act in a backward direction. For example, to kill text back to the
-start of the line, you might type @w{@kbd{M-- C-k}}.
-
-The general way to pass numeric arguments to a command is to type meta
-digits before the command. If the first `digit' you type is a minus
-sign (@key{-}), then the sign of the argument will be negative. Once
-you have typed one meta digit to get the argument started, you can type
-the remainder of the digits, and then the command. For example, to give
-the @key{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}.
-
-@node Searching
-@subsection Searching for Commands in the History
-
-Readline provides commands for searching through the command history
-@ifset BashFeatures
-(@pxref{Bash History Facilities})
-@end ifset
-for lines containing a specified string.
-There are two search modes: @var{incremental} and @var{non-incremental}.
-
-Incremental searches begin before the user has finished typing the
-search string.
-As each character of the search string is typed, readline displays
-the next entry from the history matching the string typed so far.
-An incremental search requires only as many characters as needed to
-find the desired history entry.
-The Escape character is used to terminate an incremental search.
-Control-J will also terminate the search.
-Control-G will abort an incremental search and restore the original
-line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-To find other matching entries in the history list, type Control-S or
-Control-R as appropriate.
-This will search backward or forward in the history for the next
-entry matching the search string typed so far.
-Any other key sequence bound to a readline command will terminate
-the search and execute that command.
-For instance, a @code{newline} will terminate the search and accept
-the line, thereby executing the command from the history list.
-
-Non-incremental searches read the entire search string before starting
-to search for matching history lines. The search string may be
-typed by the user or part of the contents of the current line.
-
-@node Readline Init File
-@section Readline Init File
-@cindex initialization file, readline
-
-Although the Readline library comes with a set of @code{emacs}-like
-keybindings installed by default,
-it is possible that you would like to use a different set
-of keybindings. You can customize programs that use Readline by putting
-commands in an @dfn{inputrc} file in your home directory. The name of this
-@ifset BashFeatures
-file is taken from the value of the shell variable @code{INPUTRC}. If
-@end ifset
-@ifclear BashFeatures
-file is taken from the value of the environment variable @code{INPUTRC}. If
-@end ifclear
-that variable is unset, the default is @file{~/.inputrc}.
-
-When a program which uses the Readline library starts up, the
-init file is read, and the key bindings are set.
-
-In addition, the @code{C-x C-r} command re-reads this init file, thus
-incorporating any changes that you might have made to it.
-
-@menu
-* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
-
-* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
-
-* Sample Init File:: An example inputrc file.
-@end menu
-
-@node Readline Init File Syntax
-@subsection Readline Init File Syntax
-
-There are only a few basic constructs allowed in the
-Readline init file. Blank lines are ignored.
-Lines beginning with a @samp{#} are comments.
-Lines beginning with a @samp{$} indicate conditional
-constructs (@pxref{Conditional Init Constructs}). Other lines
-denote variable settings and key bindings.
-
-@table @asis
-@item Variable Settings
-You can change the state of a few variables in Readline by
-using the @code{set} command within the init file. Here is how you
-would specify that you wish to use @code{vi} line editing commands:
-
-@example
-set editing-mode vi
-@end example
-
-Right now, there are only a few variables which can be set;
-so few, in fact, that we just list them here:
-
-@table @code
-
-@item bell-style
-@vindex bell-style
-Controls what happens when Readline wants to ring the terminal bell.
-If set to @samp{none}, Readline never rings the bell. If set to
-@samp{visible}, Readline uses a visible bell if one is available.
-If set to @samp{audible} (the default), Readline attempts to ring
-the terminal's bell.
-
-@item comment-begin
-@vindex comment-begin
-The string to insert at the beginning of the line when the
-@code{insert-comment} command is executed. The default value
-is @code{"#"}.
-
-@item completion-query-items
-@vindex completion-query-items
-The number of possible completions that determines when the user is
-asked whether he wants to see the list of possibilities. If the
-number of possible completions is greater than this value,
-Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed. The default limit is
-@code{100}.
-
-@item convert-meta
-@vindex convert-meta
-If set to @samp{on}, Readline will convert characters with the
-eigth bit set to an ASCII key sequence by stripping the eigth
-bit and prepending an @key{ESC} character, converting them to a
-meta-prefixed key sequence. The default value is @samp{on}.
-
-@item disable-completion
-@vindex disable-completion
-If set to @samp{On}, readline will inhibit word completion.
-Completion characters will be inserted into the line as if they had
-been mapped to @code{self-insert}. The default is @samp{off}.
-
-@item editing-mode
-@vindex editing-mode
-The @code{editing-mode} variable controls which editing mode you are
-using. By default, Readline starts up in Emacs editing mode, where
-the keystrokes are most similar to Emacs. This variable can be
-set to either @samp{emacs} or @samp{vi}.
-
-@item enable-keypad
-@vindex enable-keypad
-When set to @samp{on}, readline will try to enable the application
-keypad when it is called. Some systems need this to enable the
-arrow keys. The default is @samp{off}.
-
-@item expand-tilde
-@vindex expand-tilde
-If set to @samp{on}, tilde expansion is performed when Readline
-attempts word completion. The default is @samp{off}.
-
-@item horizontal-scroll-mode
-@vindex horizontal-scroll-mode
-This variable can be set to either @samp{on} or @samp{off}. Setting it
-to @samp{on} means that the text of the lines that you edit will scroll
-horizontally on a single screen line when they are longer than the width
-of the screen, instead of wrapping onto a new screen line. By default,
-this variable is set to @samp{off}.
-
-@item keymap
-@vindex keymap
-Sets Readline's idea of the current keymap for key binding commands.
-Acceptable @code{keymap} names are
-@code{emacs},
-@code{emacs-standard},
-@code{emacs-meta},
-@code{emacs-ctlx},
-@code{vi},
-@code{vi-command}, and
-@code{vi-insert}.
-@code{vi} is equivalent to @code{vi-command}; @code{emacs} is
-equivalent to @code{emacs-standard}. The default value is @code{emacs}.
-The value of the @code{editing-mode} variable also affects the
-default keymap.
-
-@item mark-directories
-If set to @samp{on}, completed directory names have a slash
-appended. The default is @samp{on}.
-
-@item mark-modified-lines
-@vindex mark-modified-lines
-This variable, when set to @samp{on}, says to display an asterisk
-(@samp{*}) at the start of history lines which have been modified.
-This variable is @samp{off} by default.
-
-@item input-meta
-@vindex input-meta
-@vindex meta-flag
-If set to @samp{on}, Readline will enable eight-bit input (it
-will not strip the eighth bit from the characters it reads),
-regardless of what the terminal claims it can support. The
-default value is @samp{off}. The name @code{meta-flag} is a
-synonym for this variable.
-
-@item output-meta
-@vindex output-meta
-If set to @samp{on}, Readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence. The default is @samp{off}.
-
-@item show-all-if-ambiguous
-@vindex show-all-if-ambiguous
-This alters the default behavior of the completion functions. If
-set to @samp{on},
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-The default value is @samp{off}.
-
-@item visible-stats
-@vindex visible-stats
-If set to @samp{on}, a character denoting a file's type
-is appended to the filename when listing possible
-completions. The default is @samp{off}.
-
-@end table
-
-@item Key Bindings
-The syntax for controlling key bindings in the init file is
-simple. First you have to know the name of the command that you
-want to change. The following pages contain tables of the command name,
-the default keybinding, and a short description of what the command
-does.
-
-Once you know the name of the command, simply place the name of the key
-you wish to bind the command to, a colon, and then the name of the
-command on a line in the init file. The name of the key
-can be expressed in different ways, depending on which is most
-comfortable for you.
-
-@table @asis
-@item @w{@var{keyname}: @var{function-name} or @var{macro}}
-@var{keyname} is the name of a key spelled out in English. For example:
-@example
-Control-u: universal-argument
-Meta-Rubout: backward-kill-word
-Control-o: "> output"
-@end example
-
-In the above example, @samp{C-u} is bound to the function
-@code{universal-argument}, and @samp{C-o} is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-@samp{> output} into the line).
-
-@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
-@var{keyseq} differs from @var{keyname} above in that strings
-denoting an entire key sequence can be specified, by placing
-the key sequence in double quotes. Some GNU Emacs style key
-escapes can be used, as in the following example, but the
-special character names are not recognized.
-
-@example
-"\C-u": universal-argument
-"\C-x\C-r": re-read-init-file
-"\e[11~": "Function Key 1"
-@end example
-
-In the above example, @samp{C-u} is bound to the function
-@code{universal-argument} (just as it was in the first example),
-@samp{C-x C-r} is bound to the function @code{re-read-init-file}, and
-@samp{ESC [ 1 1 ~} is bound to insert the text @samp{Function Key 1}.
-The following escape sequences are available when specifying key
-sequences:
-
-@table @code
-@item @kbd{\C-}
-control prefix
-@item @kbd{\M-}
-meta prefix
-@item @kbd{\e}
-an escape character
-@item @kbd{\\}
-backslash
-@item @kbd{\"}
-@key{"}
-@item @kbd{\'}
-@key{'}
-@end table
-
-When entering the text of a macro, single or double quotes should
-be used to indicate a macro definition. Unquoted text
-is assumed to be a function name. Backslash
-will quote any character in the macro text, including @samp{"}
-and @samp{'}.
-For example, the following binding will make @samp{C-x \}
-insert a single @samp{\} into the line:
-@example
-"\C-x\\": "\\"
-@end example
-
-@end table
-@end table
-
-@node Conditional Init Constructs
-@subsection Conditional Init Constructs
-
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests. There are three parser directives used.
-
-@table @code
-@item $if
-The @code{$if} construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-Readline. The text of the test extends to the end of the line;
-no characters are required to isolate it.
-
-@table @code
-@item mode
-The @code{mode=} form of the @code{$if} directive is used to test
-whether Readline is in @code{emacs} or @code{vi} mode.
-This may be used in conjunction
-with the @samp{set keymap} command, for instance, to set bindings in
-the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if
-Readline is starting out in @code{emacs} mode.
-
-@item term
-The @code{term=} form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys. The word on the right side of the
-@samp{=} is tested against the full name of the terminal and the
-portion of the terminal name before the first @samp{-}. This
-allows @code{sun} to match both @code{sun} and @code{sun-cmd},
-for instance.
-
-@item application
-The @var{application} construct is used to include
-application-specific settings. Each program using the Readline
-library sets the @var{application name}, and you can test for it.
-This could be used to bind key sequences to functions useful for
-a specific program. For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
-@example
-$if Bash
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-$endif
-@end example
-@end table
-
-@item $endif
-This command, as you saw in the previous example, terminates an
-@code{$if} command.
-
-@item $else
-Commands in this branch of the @code{$if} directive are executed if
-the test fails.
-@end table
-
-@node Sample Init File
-@subsection Sample Init File
-
-Here is an example of an inputrc file. This illustrates key
-binding, variable assignment, and conditional syntax.
-
-@example
-@page
-# This file controls the behaviour of line input editing for
-# programs that use the Gnu Readline library. Existing programs
-# include FTP, Bash, and Gdb.
-#
-# You can re-read the inputrc file with C-x C-r.
-# Lines beginning with '#' are comments.
-#
-# Set various bindings for emacs mode.
-
-set editing-mode emacs
-
-$if mode=emacs
-
-Meta-Control-h: backward-kill-word Text after the function name is ignored
-
-#
-# Arrow keys in keypad mode
-#
-#"\M-OD" backward-char
-#"\M-OC" forward-char
-#"\M-OA" previous-history
-#"\M-OB" next-history
-#
-# Arrow keys in ANSI mode
-#
-"\M-[D" backward-char
-"\M-[C" forward-char
-"\M-[A" previous-history
-"\M-[B" next-history
-#
-# Arrow keys in 8 bit keypad mode
-#
-#"\M-\C-OD" backward-char
-#"\M-\C-OC" forward-char
-#"\M-\C-OA" previous-history
-#"\M-\C-OB" next-history
-#
-# Arrow keys in 8 bit ANSI mode
-#
-#"\M-\C-[D" backward-char
-#"\M-\C-[C" forward-char
-#"\M-\C-[A" previous-history
-#"\M-\C-[B" next-history
-
-C-q: quoted-insert
-
-$endif
-
-# An old-style binding. This happens to be the default.
-TAB: complete
-
-# Macros that are convenient for shell interaction
-$if Bash
-# edit the path
-"\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word -- insert open and close double quotes
-# and move to just after the open quote
-"\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes in sequences and macros)
-"\C-x\\": "\\"
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-# Add a binding to refresh the line, which is unbound
-"\C-xr": redraw-current-line
-# Edit variable on current line.
-"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
-$endif
-
-# use a visible bell if one is available
-set bell-style visible
-
-# don't strip characters to 7 bits when reading
-set input-meta on
-
-# allow iso-latin1 characters to be inserted rather than converted to
-# prefix-meta sequences
-set convert-meta off
-
-# display characters with the eighth bit set directly rather than
-# as meta-prefixed characters
-set output-meta on
-
-# if there are more than 150 possible completions for a word, ask the
-# user if he wants to see all of them
-set completion-query-items 150
-
-# For FTP
-$if Ftp
-"\C-xg": "get \M-?"
-"\C-xt": "put \M-?"
-"\M-.": yank-last-arg
-$endif
-@end example
-
-@node Bindable Readline Commands
-@section Bindable Readline Commands
-
-@menu
-* Commands For Moving:: Moving about the line.
-* Commands For History:: Getting at previous lines.
-* Commands For Text:: Commands for changing text.
-* Commands For Killing:: Commands for killing and yanking.
-* Numeric Arguments:: Specifying numeric arguments, repeat counts.
-* Commands For Completion:: Getting Readline to do the typing for you.
-* Keyboard Macros:: Saving and re-executing typed characters
-* Miscellaneous Commands:: Other miscellaneous commands.
-@end menu
-
-This section describes Readline commands that may be bound to key
-sequences.
-
-@node Commands For Moving
-@subsection Commands For Moving
-@ftable @code
-@item beginning-of-line (C-a)
-Move to the start of the current line.
-
-@item end-of-line (C-e)
-Move to the end of the line.
-
-@item forward-char (C-f)
-Move forward a character.
-
-@item backward-char (C-b)
-Move back a character.
-
-@item forward-word (M-f)
-Move forward to the end of the next word. Words are composed of
-letters and digits.
-
-@item backward-word (M-b)
-Move back to the start of this, or the previous, word. Words are
-composed of letters and digits.
-
-@item clear-screen (C-l)
-Clear the screen and redraw the current line,
-leaving the current line at the top of the screen.
-
-@item redraw-current-line ()
-Refresh the current line. By default, this is unbound.
-
-@end ftable
-
-@node Commands For History
-@subsection Commands For Manipulating The History
-
-@ftable @code
-@item accept-line (Newline, Return)
-@ifset BashFeatures
-Accept the line regardless of where the cursor is. If this line is
-non-empty, add it to the history list according to the setting of
-the @code{HISTCONTROL} variable. If this line was a history
-line, then restore the history line to its original state.
-@end ifset
-@ifclear BashFeatures
-Accept the line regardless of where the cursor is. If this line is
-non-empty, add it to the history list. If this line was a history
-line, then restore the history line to its original state.
-@end ifclear
-
-@item previous-history (C-p)
-Move `up' through the history list.
-
-@item next-history (C-n)
-Move `down' through the history list.
-
-@item beginning-of-history (M-<)
-Move to the first line in the history.
-
-@item end-of-history (M->)
-Move to the end of the input history, i.e., the line you are entering.
-
-@item reverse-search-history (C-r)
-Search backward starting at the current line and moving `up' through
-the history as necessary. This is an incremental search.
-
-@item forward-search-history (C-s)
-Search forward starting at the current line and moving `down' through
-the the history as necessary. This is an incremental search.
-
-@item non-incremental-reverse-search-history (M-p)
-Search backward starting at the current line and moving `up'
-through the history as necessary using a non-incremental search
-for a string supplied by the user.
-
-@item non-incremental-forward-search-history (M-n)
-Search forward starting at the current line and moving `down'
-through the the history as necessary using a non-incremental search
-for a string supplied by the user.
-
-@item history-search-forward ()
-Search forward through the history for the string of characters
-between the start of the current line and the current cursor
-position (the `point'). This is a non-incremental search. By
-default, this command is unbound.
-
-@item history-search-backward ()
-Search backward through the history for the string of characters
-between the start of the current line and the point. This
-is a non-incremental search. By default, this command is unbound.
-
-@item yank-nth-arg (M-C-y)
-Insert the first argument to the previous command (usually
-the second word on the previous line). With an argument @var{n},
-insert the @var{n}th word from the previous command (the words
-in the previous command begin with word 0). A negative argument
-inserts the @var{n}th word from the end of the previous command.
-
-@item yank-last-arg (M-., M-_)
-Insert last argument to the previous command (the last word of the
-previous history entry). With an
-argument, behave exactly like @code{yank-nth-arg}.
-
-@end ftable
-
-@node Commands For Text
-@subsection Commands For Changing Text
-
-@ftable @code
-@item delete-char (C-d)
-Delete the character under the cursor. If the cursor is at the
-beginning of the line, there are no characters in the line, and
-the last character typed was not @kbd{C-d}, then return @code{EOF}.
-
-@item backward-delete-char (Rubout)
-Delete the character behind the cursor. A numeric arg says to kill
-the characters instead of deleting them.
-
-@item quoted-insert (C-q, C-v)
-Add the next character that you type to the line verbatim. This is
-how to insert key sequences like @key{C-q}, for example.
-
-@item tab-insert (M-TAB)
-Insert a tab character.
-
-@item self-insert (a, b, A, 1, !, ...)
-Insert yourself.
-
-@item transpose-chars (C-t)
-Drag the character before the cursor forward over
-the character at the cursor, moving the
-cursor forward as well. If the insertion point
-is at the end of the line, then this
-transposes the last two characters of the line.
-Negative argumentss don't work.
-
-@item transpose-words (M-t)
-Drag the word behind the cursor past the word in front of the cursor
-moving the cursor over that word as well.
-
-@item upcase-word (M-u)
-Uppercase the current (or following) word. With a negative argument,
-do the previous word, but do not move the cursor.
-
-@item downcase-word (M-l)
-Lowercase the current (or following) word. With a negative argument,
-do the previous word, but do not move the cursor.
-
-@item capitalize-word (M-c)
-Capitalize the current (or following) word. With a negative argument,
-do the previous word, but do not move the cursor.
-
-@end ftable
-
-@node Commands For Killing
-@subsection Killing And Yanking
-
-@ftable @code
-
-@item kill-line (C-k)
-Kill the text from the current cursor position to the end of the line.
-
-@item backward-kill-line (C-x Rubout)
-Kill backward to the beginning of the line.
-
-@item unix-line-discard (C-u)
-Kill backward from the cursor to the beginning of the current line.
-Save the killed text on the kill-ring.
-
-@item kill-whole-line ()
-Kill all characters on the current line, no matter where the
-cursor is. By default, this is unbound.
-
-@item kill-word (M-d)
-Kill from the cursor to the end of the current word, or if between
-words, to the end of the next word. Word boundaries are the same
-as @code{forward-word}.
-
-@item backward-kill-word (M-DEL)
-Kill the word behind the cursor. Word boundaries are the same
-as @code{backward-word}.
-
-@item unix-word-rubout (C-w)
-Kill the word behind the cursor, using white space as a word
-boundary. The killed text is saved on the kill-ring.
-
-@item delete-horizontal-space ()
-Delete all spaces and tabs around point. By default, this is unbound.
-
-@item kill-region ()
-Kill the text between the point and the @emph{mark} (saved
-cursor position. This text is referred to as the @var{region}.
-By default, this command is unbound.
-
-@item copy-region-as-kill ()
-Copy the text in the region to the kill buffer, so you can yank it
-right away. By default, this command is unbound.
-
-@item copy-backward-word ()
-Copy the word before point to the kill buffer.
-By default, this command is unbound.
-
-@item copy-forward-word ()
-Copy the word following point to the kill buffer.
-By default, this command is unbound.
-
-@item yank (C-y)
-Yank the top of the kill ring into the buffer at the current
-cursor position.
-
-@item yank-pop (M-y)
-Rotate the kill-ring, and yank the new top. You can only do this if
-the prior command is yank or yank-pop.
-@end ftable
-
-@node Numeric Arguments
-@subsection Specifying Numeric Arguments
-@ftable @code
-
-@item digit-argument (M-0, M-1, ... M--)
-Add this digit to the argument already accumulating, or start a new
-argument. @key{M--} starts a negative argument.
-
-@item universal-argument ()
-Each time this is executed, the argument count is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four. By default, this is not
-bound to a key.
-@end ftable
-
-@node Commands For Completion
-@subsection Letting Readline Type For You
-
-@ftable @code
-@item complete (TAB)
-Attempt to do completion on the text before the cursor. This is
-application-specific. Generally, if you are typing a filename
-argument, you can do filename completion; if you are typing a command,
-you can do command completion, if you are typing in a symbol to GDB, you
-can do symbol name completion, if you are typing in a variable to Bash,
-you can do variable name completion, and so on.
-@ifset BashFeatures
-Bash attempts completion treating the text as a variable (if the
-text begins with @samp{$}), username (if the text begins with
-@samp{~}), hostname (if the text begins with @samp{@@}), or
-command (including aliases and functions) in turn. If none
-of these produces a match, filename completion is attempted.
-@end ifset
-
-@item possible-completions (M-?)
-List the possible completions of the text before the cursor.
-
-@item insert-completions (M-*)
-Insert all completions of the text before point that would have
-been generated by @code{possible-completions}.
-
-@ifset BashFeatures
-@item complete-filename (M-/)
-Attempt filename completion on the text before point.
-
-@item possible-filename-completions (C-x /)
-List the possible completions of the text before point,
-treating it as a filename.
-
-@item complete-username (M-~)
-Attempt completion on the text before point, treating
-it as a username.
-
-@item possible-username-completions (C-x ~)
-List the possible completions of the text before point,
-treating it as a username.
-
-@item complete-variable (M-$)
-Attempt completion on the text before point, treating
-it as a shell variable.
-
-@item possible-variable-completions (C-x $)
-List the possible completions of the text before point,
-treating it as a shell variable.
-
-@item complete-hostname (M-@@)
-Attempt completion on the text before point, treating
-it as a hostname.
-
-@item possible-hostname-completions (C-x @@)
-List the possible completions of the text before point,
-treating it as a hostname.
-
-@item complete-command (M-!)
-Attempt completion on the text before point, treating
-it as a command name. Command completion attempts to
-match the text against aliases, reserved words, shell
-functions, builtins, and finally executable filenames,
-in that order.
-
-@item possible-command-completions (C-x !)
-List the possible completions of the text before point,
-treating it as a command name.
-
-@item dynamic-complete-history (M-TAB)
-Attempt completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-
-@item complete-into-braces (M-@{)
-Perform filename completion and return the list of possible completions
-enclosed within braces so the list is available to the shell
-(@pxref{Brace Expansion}).
-
-@end ifset
-@end ftable
-
-@node Keyboard Macros
-@subsection Keyboard Macros
-@ftable @code
-
-@item start-kbd-macro (C-x ()
-Begin saving the characters typed into the current keyboard macro.
-
-@item end-kbd-macro (C-x ))
-Stop saving the characters typed into the current keyboard macro
-and save the definition.
-
-@item call-last-kbd-macro (C-x e)
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-
-@end ftable
-
-@node Miscellaneous Commands
-@subsection Some Miscellaneous Commands
-@ftable @code
-
-@item re-read-init-file (C-x C-r)
-Read in the contents of the inputrc file, and incorporate
-any bindings or variable assignments found there.
-
-@item abort (C-g)
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-@code{bell-style}).
-
-@item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{})
-If the metafied character @var{x} is lowercase, run the command
-that is bound to the corresponding uppercase character.
-
-@item prefix-meta (ESC)
-Make the next character that you type be metafied. This is for people
-without a meta key. Typing @samp{ESC f} is equivalent to typing
-@samp{M-f}.
-
-@item undo (C-_, C-x C-u)
-Incremental undo, separately remembered for each line.
-
-@item revert-line (M-r)
-Undo all changes made to this line. This is like typing the @code{undo}
-command enough times to get back to the beginning.
-
-@item tilde-expand (M-~)
-Perform tilde expansion on the current word.
-
-@item set-mark (C-@@)
-Set the mark to the current point. If a
-numeric argument is supplied, the mark is set to that position.
-
-@item exchange-point-and-mark (C-x C-x)
-Swap the point with the mark. The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-
-@item character-search (C-])
-A character is read and point is moved to the next occurrence of that
-character. A negative count searches for previous occurrences.
-
-@item character-search-backward (M-C-])
-A character is read and point is moved to the previous occurrence
-of that character. A negative count searches for subsequent
-occurrences.
-
-@item insert-comment (M-#)
-The value of the @code{comment-begin}
-variable is inserted at the beginning of the current line,
-and the line is accepted as if a newline had been typed.
-@ifset BashFeatures
-This makes the current line a shell comment.
-@end ifset
-
-@item dump-functions ()
-Print all of the functions and their key bindings to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@item dump-variables ()
-Print all of the settable variables and their values to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@item dump-macros ()
-Print all of the readline key sequences bound to macros and the
-strings they ouput. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an @var{inputrc} file. This command is unbound by default.
-
-@ifset BashFeatures
-@item glob-expand-word (C-x *)
-The word before point is treated as a pattern for pathname expansion,
-and the list of matching file names is inserted, replacing the word.
-
-@item glob-list-expansions (C-x g)
-The list of expansions that would have been generated by
-@code{glob-expand-word}
-is inserted into the line, replacing the word before point.
-
-@item display-shell-version (C-x C-v)
-Display version information about the current instance of Bash.
-
-@item shell-expand-line (M-C-e)
-Expand the line the way the shell does when it reads it. This
-performs alias and history expansion as well as all of the shell
-word expansions.
-
-@item history-expand-line (M-^)
-Perform history expansion on the current line.
-
-@item insert-last-argument (M-., M-_)
-A synonym for @code{yank-last-arg}.
-
-@item operate-and-get-next (C-o)
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing. Any
-argument is ignored.
-
-@item emacs-editing-mode (C-e)
-When in @code{vi} editing mode, this causes a switch back to
-@code{emacs} editing mode, as if the command @samp{set -o emacs} had
-been executed.
-
-@end ifset
-
-@end ftable
-
-@node Readline vi Mode
-@section Readline vi Mode
-
-While the Readline library does not have a full set of @code{vi}
-editing functions, it does contain enough to allow simple editing
-of the line. The Readline @code{vi} mode behaves as specified in
-the @sc{POSIX} 1003.2 standard.
-
-@ifset BashFeatures
-In order to switch interactively between @code{emacs} and @code{vi}
-editing modes, use the @samp{set -o emacs} and @samp{set -o vi}
-commands (@pxref{The Set Builtin}).
-@end ifset
-@ifclear BashFeatures
-In order to switch interactively between @code{emacs} and @code{vi}
-editing modes, use the command M-C-j (toggle-editing-mode).
-@end ifclear
-The Readline default is @code{emacs} mode.
-
-When you enter a line in @code{vi} mode, you are already placed in
-`insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC}
-switches you into `command' mode, where you can edit the text of the
-line with the standard @code{vi} movement keys, move to previous
-history lines with @samp{k} and subsequent lines with @samp{j}, and
-so forth.
diff --git a/contrib/libreadline/emacs_keymap.c b/contrib/libreadline/emacs_keymap.c
deleted file mode 100644
index 4ba385843f61..000000000000
--- a/contrib/libreadline/emacs_keymap.c
+++ /dev/null
@@ -1,885 +0,0 @@
-/* emacs_keymap.c -- the keymap for emacs_mode in readline (). */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (BUFSIZ)
-#include <stdio.h>
-#endif /* !BUFSIZ */
-
-#include "readline.h"
-
-/* An array of function pointers, one for each possible key.
- If the type byte is ISKMAP, then the pointer is the address of
- a keymap. */
-
-KEYMAP_ENTRY_ARRAY emacs_standard_keymap = {
-
- /* Control keys. */
- { ISFUNC, rl_set_mark }, /* Control-@ */
- { ISFUNC, rl_beg_of_line }, /* Control-a */
- { ISFUNC, rl_backward }, /* Control-b */
- { ISFUNC, (Function *)0x0 }, /* Control-c */
- { ISFUNC, rl_delete }, /* Control-d */
- { ISFUNC, rl_end_of_line }, /* Control-e */
- { ISFUNC, rl_forward }, /* Control-f */
- { ISFUNC, rl_abort }, /* Control-g */
- { ISFUNC, rl_rubout }, /* Control-h */
- { ISFUNC, rl_complete }, /* Control-i */
- { ISFUNC, rl_newline }, /* Control-j */
- { ISFUNC, rl_kill_line }, /* Control-k */
- { ISFUNC, rl_clear_screen }, /* Control-l */
- { ISFUNC, rl_newline }, /* Control-m */
- { ISFUNC, rl_get_next_history }, /* Control-n */
- { ISFUNC, (Function *)0x0 }, /* Control-o */
- { ISFUNC, rl_get_previous_history }, /* Control-p */
- { ISFUNC, rl_quoted_insert }, /* Control-q */
- { ISFUNC, rl_reverse_search_history }, /* Control-r */
- { ISFUNC, rl_forward_search_history }, /* Control-s */
- { ISFUNC, rl_transpose_chars }, /* Control-t */
- { ISFUNC, rl_unix_line_discard }, /* Control-u */
- { ISFUNC, rl_quoted_insert }, /* Control-v */
- { ISFUNC, rl_unix_word_rubout }, /* Control-w */
- { ISKMAP, (Function *)emacs_ctlx_keymap }, /* Control-x */
- { ISFUNC, rl_yank }, /* Control-y */
- { ISFUNC, (Function *)0x0 }, /* Control-z */
- { ISKMAP, (Function *)emacs_meta_keymap }, /* Control-[ */
- { ISFUNC, (Function *)0x0 }, /* Control-\ */
- { ISFUNC, rl_char_search }, /* Control-] */
- { ISFUNC, (Function *)0x0 }, /* Control-^ */
- { ISFUNC, rl_undo_command }, /* Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, rl_insert }, /* SPACE */
- { ISFUNC, rl_insert }, /* ! */
- { ISFUNC, rl_insert }, /* " */
- { ISFUNC, rl_insert }, /* # */
- { ISFUNC, rl_insert }, /* $ */
- { ISFUNC, rl_insert }, /* % */
- { ISFUNC, rl_insert }, /* & */
- { ISFUNC, rl_insert }, /* ' */
- { ISFUNC, rl_insert }, /* ( */
-#if defined (PAREN_MATCHING)
- { ISFUNC, rl_insert_close }, /* ) */
-#else
- { ISFUNC, rl_insert }, /* ) */
-#endif /* !PAREN_MATCHING */
- { ISFUNC, rl_insert }, /* * */
- { ISFUNC, rl_insert }, /* + */
- { ISFUNC, rl_insert }, /* , */
- { ISFUNC, rl_insert }, /* - */
- { ISFUNC, rl_insert }, /* . */
- { ISFUNC, rl_insert }, /* / */
-
- /* Regular digits. */
- { ISFUNC, rl_insert }, /* 0 */
- { ISFUNC, rl_insert }, /* 1 */
- { ISFUNC, rl_insert }, /* 2 */
- { ISFUNC, rl_insert }, /* 3 */
- { ISFUNC, rl_insert }, /* 4 */
- { ISFUNC, rl_insert }, /* 5 */
- { ISFUNC, rl_insert }, /* 6 */
- { ISFUNC, rl_insert }, /* 7 */
- { ISFUNC, rl_insert }, /* 8 */
- { ISFUNC, rl_insert }, /* 9 */
-
- /* A little more punctuation. */
- { ISFUNC, rl_insert }, /* : */
- { ISFUNC, rl_insert }, /* ; */
- { ISFUNC, rl_insert }, /* < */
- { ISFUNC, rl_insert }, /* = */
- { ISFUNC, rl_insert }, /* > */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* @ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_insert }, /* A */
- { ISFUNC, rl_insert }, /* B */
- { ISFUNC, rl_insert }, /* C */
- { ISFUNC, rl_insert }, /* D */
- { ISFUNC, rl_insert }, /* E */
- { ISFUNC, rl_insert }, /* F */
- { ISFUNC, rl_insert }, /* G */
- { ISFUNC, rl_insert }, /* H */
- { ISFUNC, rl_insert }, /* I */
- { ISFUNC, rl_insert }, /* J */
- { ISFUNC, rl_insert }, /* K */
- { ISFUNC, rl_insert }, /* L */
- { ISFUNC, rl_insert }, /* M */
- { ISFUNC, rl_insert }, /* N */
- { ISFUNC, rl_insert }, /* O */
- { ISFUNC, rl_insert }, /* P */
- { ISFUNC, rl_insert }, /* Q */
- { ISFUNC, rl_insert }, /* R */
- { ISFUNC, rl_insert }, /* S */
- { ISFUNC, rl_insert }, /* T */
- { ISFUNC, rl_insert }, /* U */
- { ISFUNC, rl_insert }, /* V */
- { ISFUNC, rl_insert }, /* W */
- { ISFUNC, rl_insert }, /* X */
- { ISFUNC, rl_insert }, /* Y */
- { ISFUNC, rl_insert }, /* Z */
-
- /* Some more punctuation. */
- { ISFUNC, rl_insert }, /* [ */
- { ISFUNC, rl_insert }, /* \ */
-#if defined (PAREN_MATCHING)
- { ISFUNC, rl_insert_close }, /* ] */
-#else
- { ISFUNC, rl_insert }, /* ] */
-#endif /* !PAREN_MATCHING */
- { ISFUNC, rl_insert }, /* ^ */
- { ISFUNC, rl_insert }, /* _ */
- { ISFUNC, rl_insert }, /* ` */
-
- /* Lowercase alphabet. */
- { ISFUNC, rl_insert }, /* a */
- { ISFUNC, rl_insert }, /* b */
- { ISFUNC, rl_insert }, /* c */
- { ISFUNC, rl_insert }, /* d */
- { ISFUNC, rl_insert }, /* e */
- { ISFUNC, rl_insert }, /* f */
- { ISFUNC, rl_insert }, /* g */
- { ISFUNC, rl_insert }, /* h */
- { ISFUNC, rl_insert }, /* i */
- { ISFUNC, rl_insert }, /* j */
- { ISFUNC, rl_insert }, /* k */
- { ISFUNC, rl_insert }, /* l */
- { ISFUNC, rl_insert }, /* m */
- { ISFUNC, rl_insert }, /* n */
- { ISFUNC, rl_insert }, /* o */
- { ISFUNC, rl_insert }, /* p */
- { ISFUNC, rl_insert }, /* q */
- { ISFUNC, rl_insert }, /* r */
- { ISFUNC, rl_insert }, /* s */
- { ISFUNC, rl_insert }, /* t */
- { ISFUNC, rl_insert }, /* u */
- { ISFUNC, rl_insert }, /* v */
- { ISFUNC, rl_insert }, /* w */
- { ISFUNC, rl_insert }, /* x */
- { ISFUNC, rl_insert }, /* y */
- { ISFUNC, rl_insert }, /* z */
-
- /* Final punctuation. */
- { ISFUNC, rl_insert }, /* { */
- { ISFUNC, rl_insert }, /* | */
-#if defined (PAREN_MATCHING)
- { ISFUNC, rl_insert_close }, /* } */
-#else
- { ISFUNC, rl_insert }, /* } */
-#endif /* !PAREN_MATCHING */
- { ISFUNC, rl_insert }, /* ~ */
- { ISFUNC, rl_rubout }, /* RUBOUT */
-
-#if KEYMAP_SIZE > 128
- /* Pure 8-bit characters (128 - 159).
- These might be used in some
- character sets. */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
-
- /* ISO Latin-1 characters (160 - 255) */
- { ISFUNC, rl_insert }, /* No-break space */
- { ISFUNC, rl_insert }, /* Inverted exclamation mark */
- { ISFUNC, rl_insert }, /* Cent sign */
- { ISFUNC, rl_insert }, /* Pound sign */
- { ISFUNC, rl_insert }, /* Currency sign */
- { ISFUNC, rl_insert }, /* Yen sign */
- { ISFUNC, rl_insert }, /* Broken bar */
- { ISFUNC, rl_insert }, /* Section sign */
- { ISFUNC, rl_insert }, /* Diaeresis */
- { ISFUNC, rl_insert }, /* Copyright sign */
- { ISFUNC, rl_insert }, /* Feminine ordinal indicator */
- { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */
- { ISFUNC, rl_insert }, /* Not sign */
- { ISFUNC, rl_insert }, /* Soft hyphen */
- { ISFUNC, rl_insert }, /* Registered sign */
- { ISFUNC, rl_insert }, /* Macron */
- { ISFUNC, rl_insert }, /* Degree sign */
- { ISFUNC, rl_insert }, /* Plus-minus sign */
- { ISFUNC, rl_insert }, /* Superscript two */
- { ISFUNC, rl_insert }, /* Superscript three */
- { ISFUNC, rl_insert }, /* Acute accent */
- { ISFUNC, rl_insert }, /* Micro sign */
- { ISFUNC, rl_insert }, /* Pilcrow sign */
- { ISFUNC, rl_insert }, /* Middle dot */
- { ISFUNC, rl_insert }, /* Cedilla */
- { ISFUNC, rl_insert }, /* Superscript one */
- { ISFUNC, rl_insert }, /* Masculine ordinal indicator */
- { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */
- { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */
- { ISFUNC, rl_insert }, /* Vulgar fraction one half */
- { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */
- { ISFUNC, rl_insert }, /* Inverted questionk mark */
- { ISFUNC, rl_insert }, /* Latin capital letter a with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter a with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */
- { ISFUNC, rl_insert }, /* Latin capital letter ae */
- { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */
- { ISFUNC, rl_insert }, /* Latin capital letter e with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter e with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter i with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter i with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter o with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter o with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */
- { ISFUNC, rl_insert }, /* Multiplication sign */
- { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */
- { ISFUNC, rl_insert }, /* Latin capital letter u with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter u with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */
- { ISFUNC, rl_insert }, /* Latin small letter a with grave */
- { ISFUNC, rl_insert }, /* Latin small letter a with acute */
- { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter a with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter a with ring above */
- { ISFUNC, rl_insert }, /* Latin small letter ae */
- { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */
- { ISFUNC, rl_insert }, /* Latin small letter e with grave */
- { ISFUNC, rl_insert }, /* Latin small letter e with acute */
- { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter i with grave */
- { ISFUNC, rl_insert }, /* Latin small letter i with acute */
- { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin small letter n with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter o with grave */
- { ISFUNC, rl_insert }, /* Latin small letter o with acute */
- { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter o with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */
- { ISFUNC, rl_insert }, /* Division sign */
- { ISFUNC, rl_insert }, /* Latin small letter o with stroke */
- { ISFUNC, rl_insert }, /* Latin small letter u with grave */
- { ISFUNC, rl_insert }, /* Latin small letter u with acute */
- { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter y with acute */
- { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */
- { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */
-#endif /* KEYMAP_SIZE > 128 */
-};
-
-KEYMAP_ENTRY_ARRAY emacs_meta_keymap = {
-
- /* Meta keys. Just like above, but the high bit is set. */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-@ */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-a */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-b */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-c */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-d */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-e */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-f */
- { ISFUNC, rl_abort }, /* Meta-Control-g */
- { ISFUNC, rl_backward_kill_word }, /* Meta-Control-h */
- { ISFUNC, rl_tab_insert }, /* Meta-Control-i */
- { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-j */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-k */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-l */
- { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-m */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-n */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-o */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-p */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-q */
- { ISFUNC, rl_revert_line }, /* Meta-Control-r */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-s */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-t */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-u */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-v */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-w */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-x */
- { ISFUNC, rl_yank_nth_arg }, /* Meta-Control-y */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-z */
-
- { ISFUNC, rl_complete }, /* Meta-Control-[ */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-\ */
- { ISFUNC, rl_backward_char_search }, /* Meta-Control-] */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-^ */
- { ISFUNC, (Function *)0x0 }, /* Meta-Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, rl_set_mark }, /* Meta-SPACE */
- { ISFUNC, (Function *)0x0 }, /* Meta-! */
- { ISFUNC, (Function *)0x0 }, /* Meta-" */
- { ISFUNC, rl_insert_comment },/* Meta-# */
- { ISFUNC, (Function *)0x0 }, /* Meta-$ */
- { ISFUNC, (Function *)0x0 }, /* Meta-% */
- { ISFUNC, rl_tilde_expand }, /* Meta-& */
- { ISFUNC, (Function *)0x0 }, /* Meta-' */
- { ISFUNC, (Function *)0x0 }, /* Meta-( */
- { ISFUNC, (Function *)0x0 }, /* Meta-) */
- { ISFUNC, rl_insert_completions }, /* Meta-* */
- { ISFUNC, (Function *)0x0 }, /* Meta-+ */
- { ISFUNC, (Function *)0x0 }, /* Meta-, */
- { ISFUNC, rl_digit_argument }, /* Meta-- */
- { ISFUNC, rl_yank_last_arg}, /* Meta-. */
- { ISFUNC, (Function *)0x0 }, /* Meta-/ */
-
- /* Regular digits. */
- { ISFUNC, rl_digit_argument }, /* Meta-0 */
- { ISFUNC, rl_digit_argument }, /* Meta-1 */
- { ISFUNC, rl_digit_argument }, /* Meta-2 */
- { ISFUNC, rl_digit_argument }, /* Meta-3 */
- { ISFUNC, rl_digit_argument }, /* Meta-4 */
- { ISFUNC, rl_digit_argument }, /* Meta-5 */
- { ISFUNC, rl_digit_argument }, /* Meta-6 */
- { ISFUNC, rl_digit_argument }, /* Meta-7 */
- { ISFUNC, rl_digit_argument }, /* Meta-8 */
- { ISFUNC, rl_digit_argument }, /* Meta-9 */
-
- /* A little more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* Meta-: */
- { ISFUNC, (Function *)0x0 }, /* Meta-; */
- { ISFUNC, rl_beginning_of_history }, /* Meta-< */
- { ISFUNC, rl_possible_completions }, /* Meta-= */
- { ISFUNC, rl_end_of_history }, /* Meta-> */
- { ISFUNC, rl_possible_completions }, /* Meta-? */
- { ISFUNC, (Function *)0x0 }, /* Meta-@ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-A */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-B */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-C */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-D */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-E */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-F */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-G */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-H */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-I */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-J */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-K */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-L */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-M */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-N */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-O */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-P */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-Q */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-R */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-S */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-T */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-U */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-V */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-W */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-X */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-Y */
- { ISFUNC, rl_do_lowercase_version }, /* Meta-Z */
-
- /* Some more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* Meta-[ */ /* was rl_arrow_keys */
- { ISFUNC, rl_delete_horizontal_space }, /* Meta-\ */
- { ISFUNC, (Function *)0x0 }, /* Meta-] */
- { ISFUNC, (Function *)0x0 }, /* Meta-^ */
- { ISFUNC, rl_yank_last_arg }, /* Meta-_ */
- { ISFUNC, (Function *)0x0 }, /* Meta-` */
-
- /* Lowercase alphabet. */
- { ISFUNC, (Function *)0x0 }, /* Meta-a */
- { ISFUNC, rl_backward_word }, /* Meta-b */
- { ISFUNC, rl_capitalize_word }, /* Meta-c */
- { ISFUNC, rl_kill_word }, /* Meta-d */
- { ISFUNC, (Function *)0x0 }, /* Meta-e */
- { ISFUNC, rl_forward_word }, /* Meta-f */
- { ISFUNC, (Function *)0x0 }, /* Meta-g */
- { ISFUNC, (Function *)0x0 }, /* Meta-h */
- { ISFUNC, (Function *)0x0 }, /* Meta-i */
- { ISFUNC, (Function *)0x0 }, /* Meta-j */
- { ISFUNC, (Function *)0x0 }, /* Meta-k */
- { ISFUNC, rl_downcase_word }, /* Meta-l */
- { ISFUNC, (Function *)0x0 }, /* Meta-m */
- { ISFUNC, rl_noninc_forward_search }, /* Meta-n */
- { ISFUNC, (Function *)0x0 }, /* Meta-o */ /* was rl_arrow_keys */
- { ISFUNC, rl_noninc_reverse_search }, /* Meta-p */
- { ISFUNC, (Function *)0x0 }, /* Meta-q */
- { ISFUNC, rl_revert_line }, /* Meta-r */
- { ISFUNC, (Function *)0x0 }, /* Meta-s */
- { ISFUNC, rl_transpose_words }, /* Meta-t */
- { ISFUNC, rl_upcase_word }, /* Meta-u */
- { ISFUNC, (Function *)0x0 }, /* Meta-v */
- { ISFUNC, (Function *)0x0 }, /* Meta-w */
- { ISFUNC, (Function *)0x0 }, /* Meta-x */
- { ISFUNC, rl_yank_pop }, /* Meta-y */
- { ISFUNC, (Function *)0x0 }, /* Meta-z */
-
- /* Final punctuation. */
- { ISFUNC, (Function *)0x0 }, /* Meta-{ */
- { ISFUNC, (Function *)0x0 }, /* Meta-| */
- { ISFUNC, (Function *)0x0 }, /* Meta-} */
- { ISFUNC, rl_tilde_expand }, /* Meta-~ */
- { ISFUNC, rl_backward_kill_word }, /* Meta-rubout */
-
-#if KEYMAP_SIZE > 128
- /* Undefined keys. */
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 }
-#endif /* KEYMAP_SIZE > 128 */
-};
-
-KEYMAP_ENTRY_ARRAY emacs_ctlx_keymap = {
-
- /* Control keys. */
- { ISFUNC, (Function *)0x0 }, /* Control-@ */
- { ISFUNC, (Function *)0x0 }, /* Control-a */
- { ISFUNC, (Function *)0x0 }, /* Control-b */
- { ISFUNC, (Function *)0x0 }, /* Control-c */
- { ISFUNC, (Function *)0x0 }, /* Control-d */
- { ISFUNC, (Function *)0x0 }, /* Control-e */
- { ISFUNC, (Function *)0x0 }, /* Control-f */
- { ISFUNC, rl_abort }, /* Control-g */
- { ISFUNC, (Function *)0x0 }, /* Control-h */
- { ISFUNC, (Function *)0x0 }, /* Control-i */
- { ISFUNC, (Function *)0x0 }, /* Control-j */
- { ISFUNC, (Function *)0x0 }, /* Control-k */
- { ISFUNC, (Function *)0x0 }, /* Control-l */
- { ISFUNC, (Function *)0x0 }, /* Control-m */
- { ISFUNC, (Function *)0x0 }, /* Control-n */
- { ISFUNC, (Function *)0x0 }, /* Control-o */
- { ISFUNC, (Function *)0x0 }, /* Control-p */
- { ISFUNC, (Function *)0x0 }, /* Control-q */
- { ISFUNC, rl_re_read_init_file }, /* Control-r */
- { ISFUNC, (Function *)0x0 }, /* Control-s */
- { ISFUNC, (Function *)0x0 }, /* Control-t */
- { ISFUNC, rl_undo_command }, /* Control-u */
- { ISFUNC, (Function *)0x0 }, /* Control-v */
- { ISFUNC, (Function *)0x0 }, /* Control-w */
- { ISFUNC, rl_exchange_point_and_mark },/* Control-x */
- { ISFUNC, (Function *)0x0 }, /* Control-y */
- { ISFUNC, (Function *)0x0 }, /* Control-z */
- { ISFUNC, (Function *)0x0 }, /* Control-[ */
- { ISFUNC, (Function *)0x0 }, /* Control-\ */
- { ISFUNC, (Function *)0x0 }, /* Control-] */
- { ISFUNC, (Function *)0x0 }, /* Control-^ */
- { ISFUNC, (Function *)0x0 }, /* Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, (Function *)0x0 }, /* SPACE */
- { ISFUNC, (Function *)0x0 }, /* ! */
- { ISFUNC, (Function *)0x0 }, /* " */
- { ISFUNC, (Function *)0x0 }, /* # */
- { ISFUNC, (Function *)0x0 }, /* $ */
- { ISFUNC, (Function *)0x0 }, /* % */
- { ISFUNC, (Function *)0x0 }, /* & */
- { ISFUNC, (Function *)0x0 }, /* ' */
- { ISFUNC, rl_start_kbd_macro }, /* ( */
- { ISFUNC, rl_end_kbd_macro }, /* ) */
- { ISFUNC, (Function *)0x0 }, /* * */
- { ISFUNC, (Function *)0x0 }, /* + */
- { ISFUNC, (Function *)0x0 }, /* , */
- { ISFUNC, (Function *)0x0 }, /* - */
- { ISFUNC, (Function *)0x0 }, /* . */
- { ISFUNC, (Function *)0x0 }, /* / */
-
- /* Regular digits. */
- { ISFUNC, (Function *)0x0 }, /* 0 */
- { ISFUNC, (Function *)0x0 }, /* 1 */
- { ISFUNC, (Function *)0x0 }, /* 2 */
- { ISFUNC, (Function *)0x0 }, /* 3 */
- { ISFUNC, (Function *)0x0 }, /* 4 */
- { ISFUNC, (Function *)0x0 }, /* 5 */
- { ISFUNC, (Function *)0x0 }, /* 6 */
- { ISFUNC, (Function *)0x0 }, /* 7 */
- { ISFUNC, (Function *)0x0 }, /* 8 */
- { ISFUNC, (Function *)0x0 }, /* 9 */
-
- /* A little more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* : */
- { ISFUNC, (Function *)0x0 }, /* ; */
- { ISFUNC, (Function *)0x0 }, /* < */
- { ISFUNC, (Function *)0x0 }, /* = */
- { ISFUNC, (Function *)0x0 }, /* > */
- { ISFUNC, (Function *)0x0 }, /* ? */
- { ISFUNC, (Function *)0x0 }, /* @ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_do_lowercase_version }, /* A */
- { ISFUNC, rl_do_lowercase_version }, /* B */
- { ISFUNC, rl_do_lowercase_version }, /* C */
- { ISFUNC, rl_do_lowercase_version }, /* D */
- { ISFUNC, rl_do_lowercase_version }, /* E */
- { ISFUNC, rl_do_lowercase_version }, /* F */
- { ISFUNC, rl_do_lowercase_version }, /* G */
- { ISFUNC, rl_do_lowercase_version }, /* H */
- { ISFUNC, rl_do_lowercase_version }, /* I */
- { ISFUNC, rl_do_lowercase_version }, /* J */
- { ISFUNC, rl_do_lowercase_version }, /* K */
- { ISFUNC, rl_do_lowercase_version }, /* L */
- { ISFUNC, rl_do_lowercase_version }, /* M */
- { ISFUNC, rl_do_lowercase_version }, /* N */
- { ISFUNC, rl_do_lowercase_version }, /* O */
- { ISFUNC, rl_do_lowercase_version }, /* P */
- { ISFUNC, rl_do_lowercase_version }, /* Q */
- { ISFUNC, rl_do_lowercase_version }, /* R */
- { ISFUNC, rl_do_lowercase_version }, /* S */
- { ISFUNC, rl_do_lowercase_version }, /* T */
- { ISFUNC, rl_do_lowercase_version }, /* U */
- { ISFUNC, rl_do_lowercase_version }, /* V */
- { ISFUNC, rl_do_lowercase_version }, /* W */
- { ISFUNC, rl_do_lowercase_version }, /* X */
- { ISFUNC, rl_do_lowercase_version }, /* Y */
- { ISFUNC, rl_do_lowercase_version }, /* Z */
-
- /* Some more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* [ */
- { ISFUNC, (Function *)0x0 }, /* \ */
- { ISFUNC, (Function *)0x0 }, /* ] */
- { ISFUNC, (Function *)0x0 }, /* ^ */
- { ISFUNC, (Function *)0x0 }, /* _ */
- { ISFUNC, (Function *)0x0 }, /* ` */
-
- /* Lowercase alphabet. */
- { ISFUNC, (Function *)0x0 }, /* a */
- { ISFUNC, (Function *)0x0 }, /* b */
- { ISFUNC, (Function *)0x0 }, /* c */
- { ISFUNC, (Function *)0x0 }, /* d */
- { ISFUNC, rl_call_last_kbd_macro }, /* e */
- { ISFUNC, (Function *)0x0 }, /* f */
- { ISFUNC, (Function *)0x0 }, /* g */
- { ISFUNC, (Function *)0x0 }, /* h */
- { ISFUNC, (Function *)0x0 }, /* i */
- { ISFUNC, (Function *)0x0 }, /* j */
- { ISFUNC, (Function *)0x0 }, /* k */
- { ISFUNC, (Function *)0x0 }, /* l */
- { ISFUNC, (Function *)0x0 }, /* m */
- { ISFUNC, (Function *)0x0 }, /* n */
- { ISFUNC, (Function *)0x0 }, /* o */
- { ISFUNC, (Function *)0x0 }, /* p */
- { ISFUNC, (Function *)0x0 }, /* q */
- { ISFUNC, (Function *)0x0 }, /* r */
- { ISFUNC, (Function *)0x0 }, /* s */
- { ISFUNC, (Function *)0x0 }, /* t */
- { ISFUNC, (Function *)0x0 }, /* u */
- { ISFUNC, (Function *)0x0 }, /* v */
- { ISFUNC, (Function *)0x0 }, /* w */
- { ISFUNC, (Function *)0x0 }, /* x */
- { ISFUNC, (Function *)0x0 }, /* y */
- { ISFUNC, (Function *)0x0 }, /* z */
-
- /* Final punctuation. */
- { ISFUNC, (Function *)0x0 }, /* { */
- { ISFUNC, (Function *)0x0 }, /* | */
- { ISFUNC, (Function *)0x0 }, /* } */
- { ISFUNC, (Function *)0x0 }, /* ~ */
- { ISFUNC, rl_backward_kill_line }, /* RUBOUT */
-
-#if KEYMAP_SIZE > 128
- /* Undefined keys. */
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 }
-#endif /* KEYMAP_SIZE > 128 */
-};
diff --git a/contrib/libreadline/examples/Inputrc b/contrib/libreadline/examples/Inputrc
deleted file mode 100644
index 5b71bd701c4e..000000000000
--- a/contrib/libreadline/examples/Inputrc
+++ /dev/null
@@ -1,65 +0,0 @@
-# My ~/.inputrc file is in -*- text -*- for easy editing with Emacs.
-#
-# Notice the various bindings which are conditionalized depending
-# on which program is running, or what terminal is active.
-#
-
-# In all programs, all terminals, make sure this is bound.
-"\C-x\C-r": re-read-init-file
-
-# Hp terminals (and some others) have ugly default behaviour for C-h.
-"\C-h": backward-delete-char
-"\e\C-h": backward-kill-word
-"\C-xd": dump-functions
-
-# In xterm windows, make the arrow keys do the right thing.
-$if TERM=xterm
-"\e[A": previous-history
-"\e[B": next-history
-"\e[C": forward-char
-"\e[D": backward-char
-
-# alternate arrow key prefix
-"\eOA": previous-history
-"\eOB": next-history
-"\eOC": forward-char
-"\eOD": backward-char
-
-# Under Xterm in Bash, we bind local Function keys to do something useful.
-$if Bash
-"\e[11~": "Function Key 1"
-"\e[12~": "Function Key 2"
-"\e[13~": "Function Key 3"
-"\e[14~": "Function Key 4"
-"\e[15~": "Function Key 5"
-
-# I know the following escape sequence numbers are 1 greater than
-# the function key. Don't ask me why, I didn't design the xterm terminal.
-"\e[17~": "Function Key 6"
-"\e[18~": "Function Key 7"
-"\e[19~": "Function Key 8"
-"\e[20~": "Function Key 9"
-"\e[21~": "Function Key 10"
-$endif
-$endif
-
-# For Bash, all terminals, add some Bash specific hacks.
-$if Bash
-"\C-xv": show-bash-version
-"\C-x\C-e": shell-expand-line
-
-# Here is one for editing my path.
-"\C-xp": "$PATH\C-x\C-e\C-e\"\C-aPATH=\":\C-b"
-
-# Make C-x r read my mail in emacs.
-# "\C-xr": "emacs -f rmail\C-j"
-$endif
-
-# For FTP, different hacks:
-$if Ftp
-"\C-xg": "get \M-?"
-"\C-xt": "put \M-?"
-"\M-.": yank-last-arg
-$endif
-
-" ": self-insert
diff --git a/contrib/libreadline/examples/Makefile b/contrib/libreadline/examples/Makefile
deleted file mode 100644
index cfa77457a7d1..000000000000
--- a/contrib/libreadline/examples/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# This is the Makefile for the examples subdirectory of readline. -*- text -*-
-#
-EXECUTABLES = fileman rltest
-CFLAGS = -g -I../.. -I..
-LDFLAGS = -g -L..
-
-.c.o:
- $(CC) $(CFLAGS) -c $<
-
-all: $(EXECUTABLES)
-
-fileman: fileman.o
- $(CC) $(LDFLAGS) -o $@ fileman.o -lreadline -ltermcap
-
-rltest: rltest.o
- $(CC) $(LDFLAGS) -o $@ rltest.o -lreadline -ltermcap
-
-fileman.o: fileman.c
-rltest.o: rltest.c
diff --git a/contrib/libreadline/examples/fileman.c b/contrib/libreadline/examples/fileman.c
deleted file mode 100644
index 8709120dfa14..000000000000
--- a/contrib/libreadline/examples/fileman.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/* fileman.c -- A tiny application which demonstrates how to use the
- GNU Readline library. This application interactively allows users
- to manipulate files and their modes. */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-
-#include <readline/readline.h>
-#include <readline/history.h>
-
-extern char *getwd ();
-extern char *xmalloc ();
-
-/* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
-
-/* A structure which contains information on the commands this program
- can understand. */
-
-typedef struct {
- char *name; /* User printable name of the function. */
- Function *func; /* Function to call to do the job. */
- char *doc; /* Documentation for this function. */
-} COMMAND;
-
-COMMAND commands[] = {
- { "cd", com_cd, "Change to directory DIR" },
- { "delete", com_delete, "Delete FILE" },
- { "help", com_help, "Display this text" },
- { "?", com_help, "Synonym for `help'" },
- { "list", com_list, "List files in DIR" },
- { "ls", com_list, "Synonym for `list'" },
- { "pwd", com_pwd, "Print the current working directory" },
- { "quit", com_quit, "Quit using Fileman" },
- { "rename", com_rename, "Rename FILE to NEWNAME" },
- { "stat", com_stat, "Print out statistics on FILE" },
- { "view", com_view, "View the contents of FILE" },
- { (char *)NULL, (Function *)NULL, (char *)NULL }
-};
-
-/* Forward declarations. */
-char *stripwhite ();
-COMMAND *find_command ();
-
-/* The name of this program, as taken from argv[0]. */
-char *progname;
-
-/* When non-zero, this global means the user is done using this program. */
-int done;
-
-char *
-dupstr (s)
- int s;
-{
- char *r;
-
- r = xmalloc (strlen (s) + 1);
- strcpy (r, s);
- return (r);
-}
-
-main (argc, argv)
- int argc;
- char **argv;
-{
- char *line, *s;
-
- progname = argv[0];
-
- initialize_readline (); /* Bind our completer. */
-
- /* Loop reading and executing lines until the user quits. */
- for ( ; done == 0; )
- {
- line = readline ("FileMan: ");
-
- if (!line)
- break;
-
- /* Remove leading and trailing whitespace from the line.
- Then, if there is anything left, add it to the history list
- and execute it. */
- s = stripwhite (line);
-
- if (*s)
- {
- add_history (s);
- execute_line (s);
- }
-
- free (line);
- }
- exit (0);
-}
-
-/* Execute a command line. */
-int
-execute_line (line)
- char *line;
-{
- register int i;
- COMMAND *command;
- char *word;
-
- /* Isolate the command word. */
- i = 0;
- while (line[i] && whitespace (line[i]))
- i++;
- word = line + i;
-
- while (line[i] && !whitespace (line[i]))
- i++;
-
- if (line[i])
- line[i++] = '\0';
-
- command = find_command (word);
-
- if (!command)
- {
- fprintf (stderr, "%s: No such command for FileMan.\n", word);
- return (-1);
- }
-
- /* Get argument to command, if any. */
- while (whitespace (line[i]))
- i++;
-
- word = line + i;
-
- /* Call the function. */
- return ((*(command->func)) (word));
-}
-
-/* Look up NAME as the name of a command, and return a pointer to that
- command. Return a NULL pointer if NAME isn't a command name. */
-COMMAND *
-find_command (name)
- char *name;
-{
- register int i;
-
- for (i = 0; commands[i].name; i++)
- if (strcmp (name, commands[i].name) == 0)
- return (&commands[i]);
-
- return ((COMMAND *)NULL);
-}
-
-/* Strip whitespace from the start and end of STRING. Return a pointer
- into STRING. */
-char *
-stripwhite (string)
- char *string;
-{
- register char *s, *t;
-
- for (s = string; whitespace (*s); s++)
- ;
-
- if (*s == 0)
- return (s);
-
- t = s + strlen (s) - 1;
- while (t > s && whitespace (*t))
- t--;
- *++t = '\0';
-
- return s;
-}
-
-/* **************************************************************** */
-/* */
-/* Interface to Readline Completion */
-/* */
-/* **************************************************************** */
-
-char *command_generator ();
-char **fileman_completion ();
-
-/* Tell the GNU Readline library how to complete. We want to try to complete
- on command names if this is the first word in the line, or on filenames
- if not. */
-initialize_readline ()
-{
- /* Allow conditional parsing of the ~/.inputrc file. */
- rl_readline_name = "FileMan";
-
- /* Tell the completer that we want a crack first. */
- rl_attempted_completion_function = (CPPFunction *)fileman_completion;
-}
-
-/* Attempt to complete on the contents of TEXT. START and END bound the
- region of rl_line_buffer that contains the word to complete. TEXT is
- the word to complete. We can use the entire contents of rl_line_buffer
- in case we want to do some simple parsing. Return the array of matches,
- or NULL if there aren't any. */
-char **
-fileman_completion (text, start, end)
- char *text;
- int start, end;
-{
- char **matches;
-
- matches = (char **)NULL;
-
- /* If this word is at the start of the line, then it is a command
- to complete. Otherwise it is the name of a file in the current
- directory. */
- if (start == 0)
- matches = completion_matches (text, command_generator);
-
- return (matches);
-}
-
-/* Generator function for command completion. STATE lets us know whether
- to start from scratch; without any state (i.e. STATE == 0), then we
- start at the top of the list. */
-char *
-command_generator (text, state)
- char *text;
- int state;
-{
- static int list_index, len;
- char *name;
-
- /* If this is a new word to complete, initialize now. This includes
- saving the length of TEXT for efficiency, and initializing the index
- variable to 0. */
- if (!state)
- {
- list_index = 0;
- len = strlen (text);
- }
-
- /* Return the next name which partially matches from the command list. */
- while (name = commands[list_index].name)
- {
- list_index++;
-
- if (strncmp (name, text, len) == 0)
- return (dupstr(name));
- }
-
- /* If no names matched, then return NULL. */
- return ((char *)NULL);
-}
-
-/* **************************************************************** */
-/* */
-/* FileMan Commands */
-/* */
-/* **************************************************************** */
-
-/* String to pass to system (). This is for the LIST, VIEW and RENAME
- commands. */
-static char syscom[1024];
-
-/* List the file(s) named in arg. */
-com_list (arg)
- char *arg;
-{
- if (!arg)
- arg = "";
-
- sprintf (syscom, "ls -FClg %s", arg);
- return (system (syscom));
-}
-
-com_view (arg)
- char *arg;
-{
- if (!valid_argument ("view", arg))
- return 1;
-
- sprintf (syscom, "more %s", arg);
- return (system (syscom));
-}
-
-com_rename (arg)
- char *arg;
-{
- too_dangerous ("rename");
- return (1);
-}
-
-com_stat (arg)
- char *arg;
-{
- struct stat finfo;
-
- if (!valid_argument ("stat", arg))
- return (1);
-
- if (stat (arg, &finfo) == -1)
- {
- perror (arg);
- return (1);
- }
-
- printf ("Statistics for `%s':\n", arg);
-
- printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
- finfo.st_nlink,
- (finfo.st_nlink == 1) ? "" : "s",
- finfo.st_size,
- (finfo.st_size == 1) ? "" : "s");
- printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
- printf (" Last access at: %s", ctime (&finfo.st_atime));
- printf (" Last modified at: %s", ctime (&finfo.st_mtime));
- return (0);
-}
-
-com_delete (arg)
- char *arg;
-{
- too_dangerous ("delete");
- return (1);
-}
-
-/* Print out help for ARG, or for all of the commands if ARG is
- not present. */
-com_help (arg)
- char *arg;
-{
- register int i;
- int printed = 0;
-
- for (i = 0; commands[i].name; i++)
- {
- if (!*arg || (strcmp (arg, commands[i].name) == 0))
- {
- printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
- printed++;
- }
- }
-
- if (!printed)
- {
- printf ("No commands match `%s'. Possibilties are:\n", arg);
-
- for (i = 0; commands[i].name; i++)
- {
- /* Print in six columns. */
- if (printed == 6)
- {
- printed = 0;
- printf ("\n");
- }
-
- printf ("%s\t", commands[i].name);
- printed++;
- }
-
- if (printed)
- printf ("\n");
- }
- return (0);
-}
-
-/* Change to the directory ARG. */
-com_cd (arg)
- char *arg;
-{
- if (chdir (arg) == -1)
- {
- perror (arg);
- return 1;
- }
-
- com_pwd ("");
- return (0);
-}
-
-/* Print out the current working directory. */
-com_pwd (ignore)
- char *ignore;
-{
- char dir[1024], *s;
-
- s = getwd (dir);
- if (s == 0)
- {
- printf ("Error getting pwd: %s\n", dir);
- return 1;
- }
-
- printf ("Current directory is %s\n", dir);
- return 0;
-}
-
-/* The user wishes to quit using this program. Just set DONE non-zero. */
-com_quit (arg)
- char *arg;
-{
- done = 1;
- return (0);
-}
-
-/* Function which tells you that you can't do this. */
-too_dangerous (caller)
- char *caller;
-{
- fprintf (stderr,
- "%s: Too dangerous for me to distribute. Write it yourself.\n",
- caller);
-}
-
-/* Return non-zero if ARG is a valid argument for CALLER, else print
- an error message and return zero. */
-int
-valid_argument (caller, arg)
- char *caller, *arg;
-{
- if (!arg || !*arg)
- {
- fprintf (stderr, "%s: Argument required.\n", caller);
- return (0);
- }
-
- return (1);
-}
diff --git a/contrib/libreadline/examples/histexamp.c b/contrib/libreadline/examples/histexamp.c
deleted file mode 100644
index eceb66df19e1..000000000000
--- a/contrib/libreadline/examples/histexamp.c
+++ /dev/null
@@ -1,82 +0,0 @@
-main ()
-{
- char line[1024], *t;
- int len, done = 0;
-
- line[0] = 0;
-
- using_history ();
- while (!done)
- {
- printf ("history$ ");
- fflush (stdout);
- t = fgets (line, sizeof (line) - 1, stdin);
- if (t && *t)
- {
- len = strlen (t);
- if (t[len - 1] == '\n')
- t[len - 1] = '\0';
- }
-
- if (!t)
- strcpy (line, "quit");
-
- if (line[0])
- {
- char *expansion;
- int result;
-
- using_history ();
-
- result = history_expand (line, &expansion);
- if (result)
- fprintf (stderr, "%s\n", expansion);
-
- if (result < 0 || result == 2)
- {
- free (expansion);
- continue;
- }
-
- add_history (expansion);
- strncpy (line, expansion, sizeof (line) - 1);
- free (expansion);
- }
-
- if (strcmp (line, "quit") == 0)
- done = 1;
- else if (strcmp (line, "save") == 0)
- write_history ("history_file");
- else if (strcmp (line, "read") == 0)
- read_history ("history_file");
- else if (strcmp (line, "list") == 0)
- {
- register HIST_ENTRY **the_list;
- register int i;
-
- the_list = history_list ();
- if (the_list)
- for (i = 0; the_list[i]; i++)
- printf ("%d: %s\n", i + history_base, the_list[i]->line);
- }
- else if (strncmp (line, "delete", 6) == 0)
- {
- int which;
- if ((sscanf (line + 6, "%d", &which)) == 1)
- {
- HIST_ENTRY *entry = remove_history (which);
- if (!entry)
- fprintf (stderr, "No such entry %d\n", which);
- else
- {
- free (entry->line);
- free (entry);
- }
- }
- else
- {
- fprintf (stderr, "non-numeric arg given to `delete'\n");
- }
- }
- }
-}
diff --git a/contrib/libreadline/examples/manexamp.c b/contrib/libreadline/examples/manexamp.c
deleted file mode 100644
index 3496efa00e76..000000000000
--- a/contrib/libreadline/examples/manexamp.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* manexamp.c -- The examples which appear in the documentation are here. */
-
-#include <stdio.h>
-#include <readline/readline.h>
-
-
-/* **************************************************************** */
-/* */
-* How to Emulate gets () */
-/* */
-/* **************************************************************** */
-
-/* A static variable for holding the line. */
-static char *line_read = (char *)NULL;
-
-/* Read a string, and return a pointer to it. Returns NULL on EOF. */
-char *
-rl_gets ()
-{
- /* If the buffer has already been allocated, return the memory
- to the free pool. */
- if (line_read)
- {
- free (line_read);
- line_read = (char *)NULL;
- }
-
- /* Get a line from the user. */
- line_read = readline ("");
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-}
-
-/* **************************************************************** */
-/* */
-/* Writing a Function to be Called by Readline. */
-/* */
-/* **************************************************************** */
-
-/* Invert the case of the COUNT following characters. */
-invert_case_line (count, key)
- int count, key;
-{
- register int start, end;
-
- start = rl_point;
-
- if (count < 0)
- {
- direction = -1;
- count = -count;
- }
- else
- direction = 1;
-
- /* Find the end of the range to modify. */
- end = start + (count * direction);
-
- /* Force it to be within range. */
- if (end > rl_end)
- end = rl_end;
- else if (end < 0)
- end = -1;
-
- if (start > end)
- {
- int temp = start;
- start = end;
- end = temp;
- }
-
- if (start == end)
- return;
-
- /* Tell readline that we are modifying the line, so save the undo
- information. */
- rl_modifying (start, end);
-
- for (; start != end; start += direction)
- {
- if (uppercase_p (rl_line_buffer[start]))
- rl_line_buffer[start] = to_lower (rl_line_buffer[start]);
- else if (lowercase_p (rl_line_buffer[start]))
- rl_line_buffer[start] = to_upper (rl_line_buffer[start]);
- }
-
- /* Move point to on top of the last character changed. */
- rl_point = end - direction;
-}
-
diff --git a/contrib/libreadline/examples/rltest.c b/contrib/libreadline/examples/rltest.c
deleted file mode 100644
index 311629f30ac0..000000000000
--- a/contrib/libreadline/examples/rltest.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* **************************************************************** */
-/* */
-/* Testing Readline */
-/* */
-/* **************************************************************** */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include "../readline.h"
-#include "../history.h"
-
-main ()
-{
- HIST_ENTRY **history_list ();
- char *temp = (char *)NULL;
- char *prompt = "readline$ ";
- int done = 0;
-
- while (!done)
- {
- temp = readline (prompt);
-
- /* Test for EOF. */
- if (!temp)
- exit (1);
-
- /* If there is anything on the line, print it and remember it. */
- if (*temp)
- {
- fprintf (stderr, "%s\r\n", temp);
- add_history (temp);
- }
-
- /* Check for `command' that we handle. */
- if (strcmp (temp, "quit") == 0)
- done = 1;
-
- if (strcmp (temp, "list") == 0)
- {
- HIST_ENTRY **list = history_list ();
- register int i;
- if (list)
- {
- for (i = 0; list[i]; i++)
- {
- fprintf (stderr, "%d: %s\r\n", i, list[i]->line);
- free (list[i]->line);
- }
- free (list);
- }
- }
- free (temp);
- }
-}
diff --git a/contrib/libreadline/funmap.c b/contrib/libreadline/funmap.c
deleted file mode 100644
index 6b7d351fa047..000000000000
--- a/contrib/libreadline/funmap.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/* funmap.c -- attach names to functions. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-extern char *xmalloc (), *xrealloc ();
-
-#if !defined (BUFSIZ)
-#include <stdio.h>
-#endif /* BUFSIZ */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include "rlconf.h"
-#include "readline.h"
-
-extern int _rl_qsort_string_compare ();
-
-FUNMAP **funmap;
-static int funmap_size;
-static int funmap_entry;
-
-/* After initializing the function map, this is the index of the first
- program specific function. */
-int funmap_program_specific_entry_start;
-
-static FUNMAP default_funmap[] = {
- { "abort", rl_abort },
- { "accept-line", rl_newline },
- { "arrow-key-prefix", rl_arrow_keys },
- { "backward-char", rl_backward },
- { "backward-delete-char", rl_rubout },
- { "backward-kill-line", rl_backward_kill_line },
- { "backward-kill-word", rl_backward_kill_word },
- { "backward-word", rl_backward_word },
- { "beginning-of-history", rl_beginning_of_history },
- { "beginning-of-line", rl_beg_of_line },
- { "call-last-kbd-macro", rl_call_last_kbd_macro },
- { "capitalize-word", rl_capitalize_word },
- { "character-search", rl_char_search },
- { "character-search-backward", rl_backward_char_search },
- { "clear-screen", rl_clear_screen },
- { "complete", rl_complete },
- { "copy-backward-word", rl_copy_backward_word },
- { "copy-forward-word", rl_copy_forward_word },
- { "copy-region-as-kill", rl_copy_region_to_kill },
- { "delete-char", rl_delete },
- { "delete-horizontal-space", rl_delete_horizontal_space },
- { "digit-argument", rl_digit_argument },
- { "do-lowercase-version", rl_do_lowercase_version },
- { "downcase-word", rl_downcase_word },
- { "dump-functions", rl_dump_functions },
- { "dump-variables", rl_dump_variables },
- { "emacs-editing-mode", rl_emacs_editing_mode },
- { "end-kbd-macro", rl_end_kbd_macro },
- { "end-of-history", rl_end_of_history },
- { "end-of-line", rl_end_of_line },
- { "exchange-point-and-mark", rl_exchange_point_and_mark },
- { "forward-char", rl_forward },
- { "forward-search-history", rl_forward_search_history },
- { "forward-word", rl_forward_word },
- { "history-search-backward", rl_history_search_backward },
- { "history-search-forward", rl_history_search_forward },
- { "insert-comment", rl_insert_comment },
- { "insert-completions", rl_insert_completions },
- { "kill-whole-line", rl_kill_full_line },
- { "kill-line", rl_kill_line },
- { "kill-region", rl_kill_region },
- { "kill-word", rl_kill_word },
- { "next-history", rl_get_next_history },
- { "non-incremental-forward-search-history", rl_noninc_forward_search },
- { "non-incremental-reverse-search-history", rl_noninc_reverse_search },
- { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again },
- { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again },
- { "possible-completions", rl_possible_completions },
- { "previous-history", rl_get_previous_history },
- { "quoted-insert", rl_quoted_insert },
- { "re-read-init-file", rl_re_read_init_file },
- { "redraw-current-line", rl_refresh_line},
- { "reverse-search-history", rl_reverse_search_history },
- { "revert-line", rl_revert_line },
- { "self-insert", rl_insert },
- { "set-mark", rl_set_mark },
- { "start-kbd-macro", rl_start_kbd_macro },
- { "tab-insert", rl_tab_insert },
- { "tilde-expand", rl_tilde_expand },
- { "transpose-chars", rl_transpose_chars },
- { "transpose-words", rl_transpose_words },
- { "tty-status", rl_tty_status },
- { "undo", rl_undo_command },
- { "universal-argument", rl_universal_argument },
- { "unix-line-discard", rl_unix_line_discard },
- { "unix-word-rubout", rl_unix_word_rubout },
- { "upcase-word", rl_upcase_word },
- { "yank", rl_yank },
- { "yank-last-arg", rl_yank_last_arg },
- { "yank-nth-arg", rl_yank_nth_arg },
- { "yank-pop", rl_yank_pop },
-
-#if defined (VI_MODE)
- { "vi-append-eol", rl_vi_append_eol },
- { "vi-append-mode", rl_vi_append_mode },
- { "vi-arg-digit", rl_vi_arg_digit },
- { "vi-back-to-indent", rl_vi_back_to_indent },
- { "vi-bWord", rl_vi_bWord },
- { "vi-bracktype", rl_vi_bracktype },
- { "vi-bword", rl_vi_bword },
- { "vi-change-case", rl_vi_change_case },
- { "vi-change-char", rl_vi_change_char },
- { "vi-change-to", rl_vi_change_to },
- { "vi-char-search", rl_vi_char_search },
- { "vi-column", rl_vi_column },
- { "vi-complete", rl_vi_complete },
- { "vi-delete", rl_vi_delete },
- { "vi-delete-to", rl_vi_delete_to },
- { "vi-eWord", rl_vi_eWord },
- { "vi-editing-mode", rl_vi_editing_mode },
- { "vi-end-word", rl_vi_end_word },
- { "vi-eof-maybe", rl_vi_eof_maybe },
- { "vi-eword", rl_vi_eword },
- { "vi-fWord", rl_vi_fWord },
- { "vi-fetch-history", rl_vi_fetch_history },
- { "vi-first-print", rl_vi_first_print },
- { "vi-fword", rl_vi_fword },
- { "vi-goto-mark", rl_vi_goto_mark },
- { "vi-insert-beg", rl_vi_insert_beg },
- { "vi-insertion-mode", rl_vi_insertion_mode },
- { "vi-match", rl_vi_match },
- { "vi-movement-mode", rl_vi_movement_mode },
- { "vi-next-word", rl_vi_next_word },
- { "vi-overstrike", rl_vi_overstrike },
- { "vi-overstrike-delete", rl_vi_overstrike_delete },
- { "vi-prev-word", rl_vi_prev_word },
- { "vi-put", rl_vi_put },
- { "vi-redo", rl_vi_redo },
- { "vi-replace", rl_vi_replace },
- { "vi-search", rl_vi_search },
- { "vi-search-again", rl_vi_search_again },
- { "vi-set-mark", rl_vi_set_mark },
- { "vi-subst", rl_vi_subst },
- { "vi-tilde-expand", rl_vi_tilde_expand },
- { "vi-yank-arg", rl_vi_yank_arg },
- { "vi-yank-to", rl_vi_yank_to },
-#endif /* VI_MODE */
-
- {(char *)NULL, (Function *)NULL }
-};
-
-int
-rl_add_funmap_entry (name, function)
- char *name;
- Function *function;
-{
- if (funmap_entry + 2 >= funmap_size)
- {
- funmap_size += 64;
- funmap = (FUNMAP **)xrealloc (funmap, funmap_size * sizeof (FUNMAP *));
- }
-
- funmap[funmap_entry] = (FUNMAP *)xmalloc (sizeof (FUNMAP));
- funmap[funmap_entry]->name = name;
- funmap[funmap_entry]->function = function;
-
- funmap[++funmap_entry] = (FUNMAP *)NULL;
- return funmap_entry;
-}
-
-static int funmap_initialized;
-
-/* Make the funmap contain all of the default entries. */
-void
-rl_initialize_funmap ()
-{
- register int i;
-
- if (funmap_initialized)
- return;
-
- for (i = 0; default_funmap[i].name; i++)
- rl_add_funmap_entry (default_funmap[i].name, default_funmap[i].function);
-
- funmap_initialized = 1;
- funmap_program_specific_entry_start = i;
-}
-
-/* Produce a NULL terminated array of known function names. The array
- is sorted. The array itself is allocated, but not the strings inside.
- You should free () the array when you done, but not the pointrs. */
-char **
-rl_funmap_names ()
-{
- char **result;
- int result_size, result_index;
-
- /* Make sure that the function map has been initialized. */
- rl_initialize_funmap ();
-
- for (result_index = result_size = 0, result = (char **)NULL; funmap[result_index]; result_index++)
- {
- if (result_index + 2 > result_size)
- {
- result_size += 20;
- result = (char **)xrealloc (result, result_size * sizeof (char *));
- }
-
- result[result_index] = funmap[result_index]->name;
- result[result_index + 1] = (char *)NULL;
- }
-
- qsort (result, result_index, sizeof (char *), _rl_qsort_string_compare);
- return (result);
-}
-
-/* Things that mean `Control'. */
-char *possible_control_prefixes[] = {
- "Control-", "C-", "CTRL-", (char *)NULL
-};
-
-char *possible_meta_prefixes[] = {
- "Meta", "M-", (char *)NULL
-};
diff --git a/contrib/libreadline/histexpand.c b/contrib/libreadline/histexpand.c
deleted file mode 100644
index d916c7441d7d..000000000000
--- a/contrib/libreadline/histexpand.c
+++ /dev/null
@@ -1,1358 +0,0 @@
-/* histexpand.c -- history expansion. */
-
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#include "history.h"
-#include "histlib.h"
-
-static char error_pointer;
-
-static char *subst_lhs;
-static char *subst_rhs;
-static int subst_lhs_len;
-static int subst_rhs_len;
-
-static char *get_history_word_specifier ();
-static char *history_find_word ();
-
-extern int history_offset;
-
-#if defined (SHELL)
-extern char *single_quote ();
-#else
-static char *single_quote ();
-#endif /* !SHELL */
-static char *quote_breaks ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* Variables exported by this file. */
-/* The character that represents the start of a history expansion
- request. This is usually `!'. */
-char history_expansion_char = '!';
-
-/* The character that invokes word substitution if found at the start of
- a line. This is usually `^'. */
-char history_subst_char = '^';
-
-/* During tokenization, if this character is seen as the first character
- of a word, then it, and all subsequent characters upto a newline are
- ignored. For a Bourne shell, this should be '#'. Bash special cases
- the interactive comment character to not be a comment delimiter. */
-char history_comment_char = '\0';
-
-/* The list of characters which inhibit the expansion of text if found
- immediately following history_expansion_char. */
-char *history_no_expand_chars = " \t\n\r=";
-
-/* If set to a non-zero value, single quotes inhibit history expansion.
- The default is 0. */
-int history_quotes_inhibit_expansion = 0;
-
-/* **************************************************************** */
-/* */
-/* History Expansion */
-/* */
-/* **************************************************************** */
-
-/* Hairy history expansion on text, not tokens. This is of general
- use, and thus belongs in this library. */
-
-/* The last string searched for by a !?string? search. */
-static char *search_string;
-
-/* The last string matched by a !?string? search. */
-static char *search_match;
-
-/* Return the event specified at TEXT + OFFSET modifying OFFSET to
- point to after the event specifier. Just a pointer to the history
- line is returned; NULL is returned in the event of a bad specifier.
- You pass STRING with *INDEX equal to the history_expansion_char that
- begins this specification.
- DELIMITING_QUOTE is a character that is allowed to end the string
- specification for what to search for in addition to the normal
- characters `:', ` ', `\t', `\n', and sometimes `?'.
- So you might call this function like:
- line = get_history_event ("!echo:p", &index, 0); */
-char *
-get_history_event (string, caller_index, delimiting_quote)
- char *string;
- int *caller_index;
- int delimiting_quote;
-{
- register int i;
- register char c;
- HIST_ENTRY *entry;
- int which, sign, local_index, substring_okay;
- Function *search_func;
- char *temp;
-
- /* The event can be specified in a number of ways.
-
- !! the previous command
- !n command line N
- !-n current command-line minus N
- !str the most recent command starting with STR
- !?str[?]
- the most recent command containing STR
-
- All values N are determined via HISTORY_BASE. */
-
- i = *caller_index;
-
- if (string[i] != history_expansion_char)
- return ((char *)NULL);
-
- /* Move on to the specification. */
- i++;
-
- sign = 1;
- substring_okay = 0;
-
-#define RETURN_ENTRY(e, w) \
- return ((e = history_get (w)) ? e->line : (char *)NULL)
-
- /* Handle !! case. */
- if (string[i] == history_expansion_char)
- {
- i++;
- which = history_base + (history_length - 1);
- *caller_index = i;
- RETURN_ENTRY (entry, which);
- }
-
- /* Hack case of numeric line specification. */
- if (string[i] == '-')
- {
- sign = -1;
- i++;
- }
-
- if (_rl_digit_p (string[i]))
- {
- /* Get the extent of the digits and compute the value. */
- for (which = 0; _rl_digit_p (string[i]); i++)
- which = (which * 10) + _rl_digit_value (string[i]);
-
- *caller_index = i;
-
- if (sign < 0)
- which = (history_length + history_base) - which;
-
- RETURN_ENTRY (entry, which);
- }
-
- /* This must be something to search for. If the spec begins with
- a '?', then the string may be anywhere on the line. Otherwise,
- the string must be found at the start of a line. */
- if (string[i] == '?')
- {
- substring_okay++;
- i++;
- }
-
- /* Only a closing `?' or a newline delimit a substring search string. */
- for (local_index = i; c = string[i]; i++)
- if ((!substring_okay && (whitespace (c) || c == ':' ||
- (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
- string[i] == delimiting_quote)) ||
- string[i] == '\n' ||
- (substring_okay && string[i] == '?'))
- break;
-
- which = i - local_index;
- temp = xmalloc (1 + which);
- if (which)
- strncpy (temp, string + local_index, which);
- temp[which] = '\0';
-
- if (substring_okay && string[i] == '?')
- i++;
-
- *caller_index = i;
-
-#define FAIL_SEARCH() \
- do { \
- history_offset = history_length; free (temp) ; return (char *)NULL; \
- } while (0)
-
- /* If there is no search string, try to use the previous search string,
- if one exists. If not, fail immediately. */
- if (*temp == '\0' && substring_okay)
- {
- if (search_string)
- {
- free (temp);
- temp = savestring (search_string);
- }
- else
- FAIL_SEARCH ();
- }
-
- search_func = substring_okay ? history_search : history_search_prefix;
- while (1)
- {
- local_index = (*search_func) (temp, -1);
-
- if (local_index < 0)
- FAIL_SEARCH ();
-
- if (local_index == 0 || substring_okay)
- {
- entry = current_history ();
- history_offset = history_length;
-
- /* If this was a substring search, then remember the
- string that we matched for word substitution. */
- if (substring_okay)
- {
- FREE (search_string);
- search_string = temp;
-
- FREE (search_match);
- search_match = history_find_word (entry->line, local_index);
- }
- else
- free (temp);
-
- return (entry->line);
- }
-
- if (history_offset)
- history_offset--;
- else
- FAIL_SEARCH ();
- }
-#undef FAIL_SEARCH
-#undef RETURN_ENTRY
-}
-
-/* Function for extracting single-quoted strings. Used for inhibiting
- history expansion within single quotes. */
-
-/* Extract the contents of STRING as if it is enclosed in single quotes.
- SINDEX, when passed in, is the offset of the character immediately
- following the opening single quote; on exit, SINDEX is left pointing
- to the closing single quote. */
-static void
-hist_string_extract_single_quoted (string, sindex)
- char *string;
- int *sindex;
-{
- register int i;
-
- for (i = *sindex; string[i] && string[i] != '\''; i++)
- ;
-
- *sindex = i;
-}
-
-#if !defined (SHELL)
-/* Does shell-like quoting using single quotes. */
-static char *
-single_quote (string)
- char *string;
-{
- register int c;
- char *result, *r, *s;
-
- result = (char *)xmalloc (3 + (3 * strlen (string)));
- r = result;
- *r++ = '\'';
-
- for (s = string; s && (c = *s); s++)
- {
- *r++ = c;
-
- if (c == '\'')
- {
- *r++ = '\\'; /* insert escaped single quote */
- *r++ = '\'';
- *r++ = '\''; /* start new quoted string */
- }
- }
-
- *r++ = '\'';
- *r = '\0';
-
- return (result);
-}
-#endif /* !SHELL */
-
-static char *
-quote_breaks (s)
- char *s;
-{
- register char *p, *r;
- char *ret;
- int len = 3;
-
- for (p = s; p && *p; p++, len++)
- {
- if (*p == '\'')
- len += 3;
- else if (whitespace (*p) || *p == '\n')
- len += 2;
- }
-
- r = ret = xmalloc (len);
- *r++ = '\'';
- for (p = s; p && *p; )
- {
- if (*p == '\'')
- {
- *r++ = '\'';
- *r++ = '\\';
- *r++ = '\'';
- *r++ = '\'';
- p++;
- }
- else if (whitespace (*p) || *p == '\n')
- {
- *r++ = '\'';
- *r++ = *p++;
- *r++ = '\'';
- }
- else
- *r++ = *p++;
- }
- *r++ = '\'';
- *r = '\0';
- return ret;
-}
-
-static char *
-hist_error(s, start, current, errtype)
- char *s;
- int start, current, errtype;
-{
- char *temp, *emsg;
- int ll, elen;
-
- ll = current - start;
-
- switch (errtype)
- {
- case EVENT_NOT_FOUND:
- emsg = "event not found";
- elen = 15;
- break;
- case BAD_WORD_SPEC:
- emsg = "bad word specifier";
- elen = 18;
- break;
- case SUBST_FAILED:
- emsg = "substitution failed";
- elen = 19;
- break;
- case BAD_MODIFIER:
- emsg = "unrecognized history modifier";
- elen = 29;
- break;
- default:
- emsg = "unknown expansion error";
- elen = 23;
- break;
- }
-
- temp = xmalloc (ll + elen + 3);
- strncpy (temp, s + start, ll);
- temp[ll] = ':';
- temp[ll + 1] = ' ';
- strcpy (temp + ll + 2, emsg);
- return (temp);
-}
-
-/* Get a history substitution string from STR starting at *IPTR
- and return it. The length is returned in LENPTR.
-
- A backslash can quote the delimiter. If the string is the
- empty string, the previous pattern is used. If there is
- no previous pattern for the lhs, the last history search
- string is used.
-
- If IS_RHS is 1, we ignore empty strings and set the pattern
- to "" anyway. subst_lhs is not changed if the lhs is empty;
- subst_rhs is allowed to be set to the empty string. */
-
-static char *
-get_subst_pattern (str, iptr, delimiter, is_rhs, lenptr)
- char *str;
- int *iptr, delimiter, is_rhs, *lenptr;
-{
- register int si, i, j, k;
- char *s = (char *) NULL;
-
- i = *iptr;
-
- for (si = i; str[si] && str[si] != delimiter; si++)
- if (str[si] == '\\' && str[si + 1] == delimiter)
- si++;
-
- if (si > i || is_rhs)
- {
- s = xmalloc (si - i + 1);
- for (j = 0, k = i; k < si; j++, k++)
- {
- /* Remove a backslash quoting the search string delimiter. */
- if (str[k] == '\\' && str[k + 1] == delimiter)
- k++;
- s[j] = str[k];
- }
- s[j] = '\0';
- if (lenptr)
- *lenptr = j;
- }
-
- i = si;
- if (str[i])
- i++;
- *iptr = i;
-
- return s;
-}
-
-static void
-postproc_subst_rhs ()
-{
- char *new;
- int i, j, new_size;
-
- new = xmalloc (new_size = subst_rhs_len + subst_lhs_len);
- for (i = j = 0; i < subst_rhs_len; i++)
- {
- if (subst_rhs[i] == '&')
- {
- if (j + subst_lhs_len >= new_size)
- new = xrealloc (new, (new_size = new_size * 2 + subst_lhs_len));
- strcpy (new + j, subst_lhs);
- j += subst_lhs_len;
- }
- else
- {
- /* a single backslash protects the `&' from lhs interpolation */
- if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&')
- i++;
- if (j >= new_size)
- new = xrealloc (new, new_size *= 2);
- new[j++] = subst_rhs[i];
- }
- }
- new[j] = '\0';
- free (subst_rhs);
- subst_rhs = new;
- subst_rhs_len = j;
-}
-
-/* Expand the bulk of a history specifier starting at STRING[START].
- Returns 0 if everything is OK, -1 if an error occurred, and 1
- if the `p' modifier was supplied and the caller should just print
- the returned string. Returns the new index into string in
- *END_INDEX_PTR, and the expanded specifier in *RET_STRING. */
-static int
-history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
- char *string;
- int start, *end_index_ptr;
- char **ret_string;
- char *current_line; /* for !# */
-{
- int i, n, starting_index;
- int substitute_globally, want_quotes, print_only;
- char *event, *temp, *result, *tstr, *t, c, *word_spec;
- int result_len;
-
- result = xmalloc (result_len = 128);
-
- i = start;
-
- /* If it is followed by something that starts a word specifier,
- then !! is implied as the event specifier. */
-
- if (member (string[i + 1], ":$*%^"))
- {
- char fake_s[3];
- int fake_i = 0;
- i++;
- fake_s[0] = fake_s[1] = history_expansion_char;
- fake_s[2] = '\0';
- event = get_history_event (fake_s, &fake_i, 0);
- }
- else if (string[i + 1] == '#')
- {
- i += 2;
- event = current_line;
- }
- else
- {
- int quoted_search_delimiter = 0;
-
- /* If the character before this `!' is a double or single
- quote, then this expansion takes place inside of the
- quoted string. If we have to search for some text ("!foo"),
- allow the delimiter to end the search string. */
- if (i && (string[i - 1] == '\'' || string[i - 1] == '"'))
- quoted_search_delimiter = string[i - 1];
- event = get_history_event (string, &i, quoted_search_delimiter);
- }
-
- if (event == 0)
- {
- *ret_string = hist_error (string, start, i, EVENT_NOT_FOUND);
- free (result);
- return (-1);
- }
-
- /* If a word specifier is found, then do what that requires. */
- starting_index = i;
- word_spec = get_history_word_specifier (string, event, &i);
-
- /* There is no such thing as a `malformed word specifier'. However,
- it is possible for a specifier that has no match. In that case,
- we complain. */
- if (word_spec == (char *)&error_pointer)
- {
- *ret_string = hist_error (string, starting_index, i, BAD_WORD_SPEC);
- free (result);
- return (-1);
- }
-
- /* If no word specifier, than the thing of interest was the event. */
- temp = word_spec ? savestring (word_spec) : savestring (event);
- FREE (word_spec);
-
- /* Perhaps there are other modifiers involved. Do what they say. */
- want_quotes = substitute_globally = print_only = 0;
- starting_index = i;
-
- while (string[i] == ':')
- {
- c = string[i + 1];
-
- if (c == 'g')
- {
- substitute_globally = 1;
- i++;
- c = string[i + 1];
- }
-
- switch (c)
- {
- default:
- *ret_string = hist_error (string, i+1, i+2, BAD_MODIFIER);
- free (result);
- free (temp);
- return -1;
-
- case 'q':
- want_quotes = 'q';
- break;
-
- case 'x':
- want_quotes = 'x';
- break;
-
- /* :p means make this the last executed line. So we
- return an error state after adding this line to the
- history. */
- case 'p':
- print_only++;
- break;
-
- /* :t discards all but the last part of the pathname. */
- case 't':
- tstr = strrchr (temp, '/');
- if (tstr)
- {
- tstr++;
- t = savestring (tstr);
- free (temp);
- temp = t;
- }
- break;
-
- /* :h discards the last part of a pathname. */
- case 'h':
- tstr = strrchr (temp, '/');
- if (tstr)
- *tstr = '\0';
- break;
-
- /* :r discards the suffix. */
- case 'r':
- tstr = strrchr (temp, '.');
- if (tstr)
- *tstr = '\0';
- break;
-
- /* :e discards everything but the suffix. */
- case 'e':
- tstr = strrchr (temp, '.');
- if (tstr)
- {
- t = savestring (tstr);
- free (temp);
- temp = t;
- }
- break;
-
- /* :s/this/that substitutes `that' for the first
- occurrence of `this'. :gs/this/that substitutes `that'
- for each occurrence of `this'. :& repeats the last
- substitution. :g& repeats the last substitution
- globally. */
-
- case '&':
- case 's':
- {
- char *new_event, *t;
- int delimiter, failed, si, l_temp;
-
- if (c == 's')
- {
- if (i + 2 < (int)strlen (string))
- delimiter = string[i + 2];
- else
- break; /* no search delimiter */
-
- i += 3;
-
- t = get_subst_pattern (string, &i, delimiter, 0, &subst_lhs_len);
- /* An empty substitution lhs with no previous substitution
- uses the last search string as the lhs. */
- if (t)
- {
- FREE (subst_lhs);
- subst_lhs = t;
- }
- else if (!subst_lhs)
- {
- if (search_string && *search_string)
- {
- subst_lhs = savestring (search_string);
- subst_lhs_len = strlen (subst_lhs);
- }
- else
- {
- subst_lhs = (char *) NULL;
- subst_lhs_len = 0;
- }
- }
-
- /* If there is no lhs, the substitution can't succeed. */
- if (subst_lhs_len == 0)
- {
- *ret_string = hist_error (string, starting_index, i, SUBST_FAILED);
- free (result);
- free (temp);
- return -1;
- }
-
- FREE (subst_rhs);
- subst_rhs = get_subst_pattern (string, &i, delimiter, 1, &subst_rhs_len);
-
- /* If `&' appears in the rhs, it's supposed to be replaced
- with the lhs. */
- if (member ('&', subst_rhs))
- postproc_subst_rhs ();
- }
- else
- i += 2;
-
- l_temp = strlen (temp);
- /* Ignore impossible cases. */
- if (subst_lhs_len > l_temp)
- {
- *ret_string = hist_error (string, starting_index, i, SUBST_FAILED);
- free (result);
- free (temp);
- return (-1);
- }
-
- /* Find the first occurrence of THIS in TEMP. */
- si = 0;
- for (failed = 1; (si + subst_lhs_len) <= l_temp; si++)
- if (STREQN (temp+si, subst_lhs, subst_lhs_len))
- {
- int len = subst_rhs_len - subst_lhs_len + l_temp;
- new_event = xmalloc (1 + len);
- strncpy (new_event, temp, si);
- strncpy (new_event + si, subst_rhs, subst_rhs_len);
- strncpy (new_event + si + subst_rhs_len,
- temp + si + subst_lhs_len,
- l_temp - (si + subst_lhs_len));
- new_event[len] = '\0';
- free (temp);
- temp = new_event;
-
- failed = 0;
-
- if (substitute_globally)
- {
- si += subst_rhs_len;
- l_temp = strlen (temp);
- substitute_globally++;
- continue;
- }
- else
- break;
- }
-
- if (substitute_globally > 1)
- {
- substitute_globally = 0;
- continue; /* don't want to increment i */
- }
-
- if (failed == 0)
- continue; /* don't want to increment i */
-
- *ret_string = hist_error (string, starting_index, i, SUBST_FAILED);
- free (result);
- free (temp);
- return (-1);
- }
- }
- i += 2;
- }
- /* Done with modfiers. */
- /* Believe it or not, we have to back the pointer up by one. */
- --i;
-
- if (want_quotes)
- {
- char *x;
-
- if (want_quotes == 'q')
- x = single_quote (temp);
- else if (want_quotes == 'x')
- x = quote_breaks (temp);
- else
- x = savestring (temp);
-
- free (temp);
- temp = x;
- }
-
- n = strlen (temp);
- if (n >= result_len)
- result = xrealloc (result, n + 2);
- strcpy (result, temp);
- free (temp);
-
- *end_index_ptr = i;
- *ret_string = result;
- return (print_only);
-}
-
-/* Expand the string STRING, placing the result into OUTPUT, a pointer
- to a string. Returns:
-
- -1) If there was an error in expansion.
- 0) If no expansions took place (or, if the only change in
- the text was the de-slashifying of the history expansion
- character)
- 1) If expansions did take place
- 2) If the `p' modifier was given and the caller should print the result
-
- If an error ocurred in expansion, then OUTPUT contains a descriptive
- error message. */
-
-#define ADD_STRING(s) \
- do \
- { \
- int sl = strlen (s); \
- j += sl; \
- if (j >= result_len) \
- { \
- while (j >= result_len) \
- result_len += 128; \
- result = xrealloc (result, result_len); \
- } \
- strcpy (result + j - sl, s); \
- } \
- while (0)
-
-#define ADD_CHAR(c) \
- do \
- { \
- if (j >= result_len - 1) \
- result = xrealloc (result, result_len += 64); \
- result[j++] = c; \
- result[j] = '\0'; \
- } \
- while (0)
-
-int
-history_expand (hstring, output)
- char *hstring;
- char **output;
-{
- register int j;
- int i, r, l, passc, cc, modified, eindex, only_printing;
- char *string;
-
- /* The output string, and its length. */
- int result_len;
- char *result;
-
- /* Used when adding the string. */
- char *temp;
-
- /* Setting the history expansion character to 0 inhibits all
- history expansion. */
- if (history_expansion_char == 0)
- {
- *output = savestring (hstring);
- return (0);
- }
-
- /* Prepare the buffer for printing error messages. */
- result = xmalloc (result_len = 256);
- result[0] = '\0';
-
- only_printing = modified = 0;
- l = strlen (hstring);
-
- /* Grovel the string. Only backslash can quote the history escape
- character. We also handle arg specifiers. */
-
- /* Before we grovel forever, see if the history_expansion_char appears
- anywhere within the text. */
-
- /* The quick substitution character is a history expansion all right. That
- is to say, "^this^that^" is equivalent to "!!:s^this^that^", and in fact,
- that is the substitution that we do. */
- if (hstring[0] == history_subst_char)
- {
- string = xmalloc (l + 5);
-
- string[0] = string[1] = history_expansion_char;
- string[2] = ':';
- string[3] = 's';
- strcpy (string + 4, hstring);
- l += 4;
- }
- else
- {
- string = hstring;
- /* If not quick substitution, still maybe have to do expansion. */
-
- /* `!' followed by one of the characters in history_no_expand_chars
- is NOT an expansion. */
- for (i = 0; string[i]; i++)
- {
- cc = string[i + 1];
- if (string[i] == history_expansion_char)
- {
- if (!cc || member (cc, history_no_expand_chars))
- continue;
-#if defined (SHELL)
- /* The shell uses ! as a pattern negation character
- in globbing [...] expressions, so let those pass
- without expansion. */
- else if (i > 0 && (string[i - 1] == '[') &&
- member (']', string + i + 1))
- continue;
- /* The shell uses ! as the indirect expansion character, so
- let those expansions pass as well. */
- else if (i > 1 && string[i - 1] == '{' && string[i - 2] == '$' &&
- member ('}', string + i + 1))
- continue;
-#endif /* SHELL */
- else
- break;
- }
- else if (history_quotes_inhibit_expansion && string[i] == '\'')
- {
- /* If this is bash, single quotes inhibit history expansion. */
- i++;
- hist_string_extract_single_quoted (string, &i);
- }
- else if (history_quotes_inhibit_expansion && string[i] == '\\')
- {
- /* If this is bash, allow backslashes to quote single
- quotes and the history expansion character. */
- if (cc == '\'' || cc == history_expansion_char)
- i++;
- }
- }
-
- if (string[i] != history_expansion_char)
- {
- free (result);
- *output = savestring (string);
- return (0);
- }
- }
-
- /* Extract and perform the substitution. */
- for (passc = i = j = 0; i < l; i++)
- {
- int tchar = string[i];
-
- if (passc)
- {
- passc = 0;
- ADD_CHAR (tchar);
- continue;
- }
-
- if (tchar == history_expansion_char)
- tchar = -3;
-
- switch (tchar)
- {
- default:
- ADD_CHAR (string[i]);
- break;
-
- case '\\':
- passc++;
- ADD_CHAR (tchar);
- break;
-
- case '\'':
- {
- /* If history_quotes_inhibit_expansion is set, single quotes
- inhibit history expansion. */
- if (history_quotes_inhibit_expansion)
- {
- int quote, slen;
-
- quote = i++;
- hist_string_extract_single_quoted (string, &i);
-
- slen = i - quote + 2;
- temp = xmalloc (slen);
- strncpy (temp, string + quote, slen);
- temp[slen - 1] = '\0';
- ADD_STRING (temp);
- free (temp);
- }
- else
- ADD_CHAR (string[i]);
- break;
- }
-
- case -3: /* history_expansion_char */
- cc = string[i + 1];
-
- /* If the history_expansion_char is followed by one of the
- characters in history_no_expand_chars, then it is not a
- candidate for expansion of any kind. */
- if (member (cc, history_no_expand_chars))
- {
- ADD_CHAR (string[i]);
- break;
- }
-
-#if defined (NO_BANG_HASH_MODIFIERS)
- /* There is something that is listed as a `word specifier' in csh
- documentation which means `the expanded text to this point'.
- That is not a word specifier, it is an event specifier. If we
- don't want to allow modifiers with `!#', just stick the current
- output line in again. */
- if (cc == '#')
- {
- if (result)
- {
- temp = xmalloc (1 + strlen (result));
- strcpy (temp, result);
- ADD_STRING (temp);
- free (temp);
- }
- i++;
- break;
- }
-#endif
-
- r = history_expand_internal (string, i, &eindex, &temp, result);
- if (r < 0)
- {
- *output = temp;
- free (result);
- if (string != hstring)
- free (string);
- return -1;
- }
- else
- {
- if (temp)
- {
- modified++;
- if (*temp)
- ADD_STRING (temp);
- free (temp);
- }
- only_printing = r == 1;
- i = eindex;
- }
- break;
- }
- }
-
- *output = result;
- if (string != hstring)
- free (string);
-
- if (only_printing)
- {
- add_history (result);
- return (2);
- }
-
- return (modified != 0);
-}
-
-/* Return a consed string which is the word specified in SPEC, and found
- in FROM. NULL is returned if there is no spec. The address of
- ERROR_POINTER is returned if the word specified cannot be found.
- CALLER_INDEX is the offset in SPEC to start looking; it is updated
- to point to just after the last character parsed. */
-static char *
-get_history_word_specifier (spec, from, caller_index)
- char *spec, *from;
- int *caller_index;
-{
- register int i = *caller_index;
- int first, last;
- int expecting_word_spec = 0;
- char *result;
-
- /* The range of words to return doesn't exist yet. */
- first = last = 0;
- result = (char *)NULL;
-
- /* If we found a colon, then this *must* be a word specification. If
- it isn't, then it is an error. */
- if (spec[i] == ':')
- {
- i++;
- expecting_word_spec++;
- }
-
- /* Handle special cases first. */
-
- /* `%' is the word last searched for. */
- if (spec[i] == '%')
- {
- *caller_index = i + 1;
- return (search_match ? savestring (search_match) : savestring (""));
- }
-
- /* `*' matches all of the arguments, but not the command. */
- if (spec[i] == '*')
- {
- *caller_index = i + 1;
- result = history_arg_extract (1, '$', from);
- return (result ? result : savestring (""));
- }
-
- /* `$' is last arg. */
- if (spec[i] == '$')
- {
- *caller_index = i + 1;
- return (history_arg_extract ('$', '$', from));
- }
-
- /* Try to get FIRST and LAST figured out. */
-
- if (spec[i] == '-')
- first = 0;
- else if (spec[i] == '^')
- first = 1;
- else if (_rl_digit_p (spec[i]) && expecting_word_spec)
- {
- for (first = 0; _rl_digit_p (spec[i]); i++)
- first = (first * 10) + _rl_digit_value (spec[i]);
- }
- else
- return ((char *)NULL); /* no valid `first' for word specifier */
-
- if (spec[i] == '^' || spec[i] == '*')
- {
- last = (spec[i] == '^') ? 1 : '$'; /* x* abbreviates x-$ */
- i++;
- }
- else if (spec[i] != '-')
- last = first;
- else
- {
- i++;
-
- if (_rl_digit_p (spec[i]))
- {
- for (last = 0; _rl_digit_p (spec[i]); i++)
- last = (last * 10) + _rl_digit_value (spec[i]);
- }
- else if (spec[i] == '$')
- {
- i++;
- last = '$';
- }
- else if (!spec[i] || spec[i] == ':') /* could be modifier separator */
- last = -1; /* x- abbreviates x-$ omitting word `$' */
- }
-
- *caller_index = i;
-
- if (last >= first || last == '$' || last < 0)
- result = history_arg_extract (first, last, from);
-
- return (result ? result : (char *)&error_pointer);
-}
-
-/* Extract the args specified, starting at FIRST, and ending at LAST.
- The args are taken from STRING. If either FIRST or LAST is < 0,
- then make that arg count from the right (subtract from the number of
- tokens, so that FIRST = -1 means the next to last token on the line).
- If LAST is `$' the last arg from STRING is used. */
-char *
-history_arg_extract (first, last, string)
- int first, last;
- char *string;
-{
- register int i, len;
- char *result;
- int size, offset;
- char **list;
-
- /* XXX - think about making history_tokenize return a struct array,
- each struct in array being a string and a length to avoid the
- calls to strlen below. */
- if ((list = history_tokenize (string)) == NULL)
- return ((char *)NULL);
-
- for (len = 0; list[len]; len++)
- ;
-
- if (last < 0)
- last = len + last - 1;
-
- if (first < 0)
- first = len + first - 1;
-
- if (last == '$')
- last = len - 1;
-
- if (first == '$')
- first = len - 1;
-
- last++;
-
- if (first >= len || last > len || first < 0 || last < 0 || first > last)
- result = ((char *)NULL);
- else
- {
- for (size = 0, i = first; i < last; i++)
- size += strlen (list[i]) + 1;
- result = xmalloc (size + 1);
- result[0] = '\0';
-
- for (i = first, offset = 0; i < last; i++)
- {
- strcpy (result + offset, list[i]);
- offset += strlen (list[i]);
- if (i + 1 < last)
- {
- result[offset++] = ' ';
- result[offset] = 0;
- }
- }
- }
-
- for (i = 0; i < len; i++)
- free (list[i]);
- free (list);
-
- return (result);
-}
-
-#define slashify_in_quotes "\\`\"$"
-
-/* Parse STRING into tokens and return an array of strings. If WIND is
- not -1 and INDP is not null, we also want the word surrounding index
- WIND. The position in the returned array of strings is returned in
- *INDP. */
-static char **
-history_tokenize_internal (string, wind, indp)
- char *string;
- int wind, *indp;
-{
- char **result;
- register int i, start, result_index, size;
- int len, delimiter;
-
- /* Get a token, and stuff it into RESULT. The tokens are split
- exactly where the shell would split them. */
- for (i = result_index = size = 0, result = (char **)NULL; string[i]; )
- {
- delimiter = 0;
-
- /* Skip leading whitespace. */
- for (; string[i] && whitespace (string[i]); i++)
- ;
- if (string[i] == 0 || string[i] == history_comment_char)
- return (result);
-
- start = i;
-
- if (member (string[i], "()\n"))
- {
- i++;
- goto got_token;
- }
-
- if (member (string[i], "<>;&|$"))
- {
- int peek = string[i + 1];
-
- if (peek == string[i] && peek != '$')
- {
- if (peek == '<' && string[i + 2] == '-')
- i++;
- i += 2;
- goto got_token;
- }
- else
- {
- if ((peek == '&' && (string[i] == '>' || string[i] == '<')) ||
- ((peek == '>') && (string[i] == '&')) ||
- ((peek == '(') && (string[i] == '$')))
- {
- i += 2;
- goto got_token;
- }
- }
- if (string[i] != '$')
- {
- i++;
- goto got_token;
- }
- }
-
- /* Get word from string + i; */
-
- if (member (string[i], "\"'`"))
- delimiter = string[i++];
-
- for (; string[i]; i++)
- {
- if (string[i] == '\\' && string[i + 1] == '\n')
- {
- i++;
- continue;
- }
-
- if (string[i] == '\\' && delimiter != '\'' &&
- (delimiter != '"' || member (string[i], slashify_in_quotes)))
- {
- i++;
- continue;
- }
-
- if (delimiter && string[i] == delimiter)
- {
- delimiter = 0;
- continue;
- }
-
- if (!delimiter && (member (string[i], " \t\n;&()|<>")))
- break;
-
- if (!delimiter && member (string[i], "\"'`"))
- delimiter = string[i];
- }
-
- got_token:
-
- /* If we are looking for the word in which the character at a
- particular index falls, remember it. */
- if (indp && wind != -1 && wind >= start && wind < i)
- *indp = result_index;
-
- len = i - start;
- if (result_index + 2 >= size)
- result = (char **)xrealloc (result, ((size += 10) * sizeof (char *)));
- result[result_index] = xmalloc (1 + len);
- strncpy (result[result_index], string + start, len);
- result[result_index][len] = '\0';
- result[++result_index] = (char *)NULL;
- }
-
- return (result);
-}
-
-/* Return an array of tokens, much as the shell might. The tokens are
- parsed out of STRING. */
-char **
-history_tokenize (string)
- char *string;
-{
- return (history_tokenize_internal (string, -1, (int *)NULL));
-}
-
-/* Find and return the word which contains the character at index IND
- in the history line LINE. Used to save the word matched by the
- last history !?string? search. */
-static char *
-history_find_word (line, ind)
- char *line;
- int ind;
-{
- char **words, *s;
- int i, wind;
-
- words = history_tokenize_internal (line, ind, &wind);
- if (wind == -1)
- return ((char *)NULL);
- s = words[wind];
- for (i = 0; i < wind; i++)
- free (words[i]);
- for (i = wind + 1; words[i]; i++)
- free (words[i]);
- free (words);
- return s;
-}
diff --git a/contrib/libreadline/histfile.c b/contrib/libreadline/histfile.c
deleted file mode 100644
index 355d46ea50f7..000000000000
--- a/contrib/libreadline/histfile.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/* histfile.c - functions to manipulate the history file. */
-
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* The goal is to make the implementation transparent, so that you
- don't have to know what data types are used, just what functions
- you can call. I think I have done that. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#include <errno.h>
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-#include "history.h"
-#include "histlib.h"
-
-extern char *xmalloc (), *xrealloc ();
-
-/* Return the string that should be used in the place of this
- filename. This only matters when you don't specify the
- filename to read_history (), or write_history (). */
-static char *
-history_filename (filename)
- char *filename;
-{
- char *return_val, *home;
- int home_len;
-
- return_val = filename ? savestring (filename) : (char *)NULL;
-
- if (return_val)
- return (return_val);
-
- home = getenv ("HOME");
-
- if (home == 0)
- {
- home = ".";
- home_len = 1;
- }
- else
- home_len = strlen (home);
-
- return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
- strcpy (return_val, home);
- return_val[home_len] = '/';
- strcpy (return_val + home_len + 1, ".history");
-
- return (return_val);
-}
-
-/* Add the contents of FILENAME to the history list, a line at a time.
- If FILENAME is NULL, then read from ~/.history. Returns 0 if
- successful, or errno if not. */
-int
-read_history (filename)
- char *filename;
-{
- return (read_history_range (filename, 0, -1));
-}
-
-/* Read a range of lines from FILENAME, adding them to the history list.
- Start reading at the FROM'th line and end at the TO'th. If FROM
- is zero, start at the beginning. If TO is less than FROM, read
- until the end of the file. If FILENAME is NULL, then read from
- ~/.history. Returns 0 if successful, or errno if not. */
-int
-read_history_range (filename, from, to)
- char *filename;
- int from, to;
-{
- register int line_start, line_end;
- char *input, *buffer = (char *)NULL;
- int file, current_line;
- struct stat finfo;
-
- input = history_filename (filename);
- file = open (input, O_RDONLY, 0666);
-
- if ((file < 0) || (fstat (file, &finfo) == -1))
- goto error_and_exit;
-
- buffer = xmalloc ((int)finfo.st_size + 1);
-
- if (read (file, buffer, finfo.st_size) != finfo.st_size)
- {
- error_and_exit:
- if (file >= 0)
- close (file);
-
- FREE (input);
- FREE (buffer);
-
- return (errno);
- }
-
- close (file);
-
- /* Set TO to larger than end of file if negative. */
- if (to < 0)
- to = finfo.st_size;
-
- /* Start at beginning of file, work to end. */
- line_start = line_end = current_line = 0;
-
- /* Skip lines until we are at FROM. */
- while (line_start < finfo.st_size && current_line < from)
- {
- for (line_end = line_start; line_end < finfo.st_size; line_end++)
- if (buffer[line_end] == '\n')
- {
- current_line++;
- line_start = line_end + 1;
- if (current_line == from)
- break;
- }
- }
-
- /* If there are lines left to gobble, then gobble them now. */
- for (line_end = line_start; line_end < finfo.st_size; line_end++)
- if (buffer[line_end] == '\n')
- {
- buffer[line_end] = '\0';
-
- if (buffer[line_start])
- add_history (buffer + line_start);
-
- current_line++;
-
- if (current_line >= to)
- break;
-
- line_start = line_end + 1;
- }
-
- FREE (input);
- FREE (buffer);
-
- return (0);
-}
-
-/* Truncate the history file FNAME, leaving only LINES trailing lines.
- If FNAME is NULL, then use ~/.history. */
-int
-history_truncate_file (fname, lines)
- char *fname;
- register int lines;
-{
- register int i;
- int file, chars_read;
- char *buffer = (char *)NULL, *filename;
- struct stat finfo;
-
- filename = history_filename (fname);
- file = open (filename, O_RDONLY, 0666);
-
- if (file == -1 || fstat (file, &finfo) == -1)
- goto truncate_exit;
-
- buffer = xmalloc ((int)finfo.st_size + 1);
- chars_read = read (file, buffer, finfo.st_size);
- close (file);
-
- if (chars_read <= 0)
- goto truncate_exit;
-
- /* Count backwards from the end of buffer until we have passed
- LINES lines. */
- for (i = chars_read - 1; lines && i; i--)
- {
- if (buffer[i] == '\n')
- lines--;
- }
-
- /* If this is the first line, then the file contains exactly the
- number of lines we want to truncate to, so we don't need to do
- anything. It's the first line if we don't find a newline between
- the current value of i and 0. Otherwise, write from the start of
- this line until the end of the buffer. */
- for ( ; i; i--)
- if (buffer[i] == '\n')
- {
- i++;
- break;
- }
-
- /* Write only if there are more lines in the file than we want to
- truncate to. */
- if (i && ((file = open (filename, O_WRONLY|O_TRUNC, 0666)) != -1))
- {
- write (file, buffer + i, finfo.st_size - i);
- close (file);
- }
-
- truncate_exit:
-
- FREE (buffer);
-
- free (filename);
- return 0;
-}
-
-/* Workhorse function for writing history. Writes NELEMENT entries
- from the history list to FILENAME. OVERWRITE is non-zero if you
- wish to replace FILENAME with the entries. */
-static int
-history_do_write (filename, nelements, overwrite)
- char *filename;
- int nelements, overwrite;
-{
- register int i;
- char *output = history_filename (filename);
- int file, mode;
-
- mode = overwrite ? O_WRONLY | O_CREAT | O_TRUNC : O_WRONLY | O_APPEND;
-
- if ((file = open (output, mode, 0666)) == -1)
- {
- FREE (output);
- return (errno);
- }
-
- if (nelements > history_length)
- nelements = history_length;
-
- /* Build a buffer of all the lines to write, and write them in one syscall.
- Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */
- {
- HIST_ENTRY **the_history; /* local */
- register int j;
- int buffer_size;
- char *buffer;
-
- the_history = history_list ();
- /* Calculate the total number of bytes to write. */
- for (buffer_size = 0, i = history_length - nelements; i < history_length; i++)
- buffer_size += 1 + strlen (the_history[i]->line);
-
- /* Allocate the buffer, and fill it. */
- buffer = xmalloc (buffer_size);
-
- for (j = 0, i = history_length - nelements; i < history_length; i++)
- {
- strcpy (buffer + j, the_history[i]->line);
- j += strlen (the_history[i]->line);
- buffer[j++] = '\n';
- }
-
- write (file, buffer, buffer_size);
- free (buffer);
- }
-
- close (file);
-
- FREE (output);
-
- return (0);
-}
-
-/* Append NELEMENT entries to FILENAME. The entries appended are from
- the end of the list minus NELEMENTs up to the end of the list. */
-int
-append_history (nelements, filename)
- int nelements;
- char *filename;
-{
- return (history_do_write (filename, nelements, HISTORY_APPEND));
-}
-
-/* Overwrite FILENAME with the current history. If FILENAME is NULL,
- then write the history list to ~/.history. Values returned
- are as in read_history ().*/
-int
-write_history (filename)
- char *filename;
-{
- return (history_do_write (filename, history_length, HISTORY_OVERWRITE));
-}
diff --git a/contrib/libreadline/histlib.h b/contrib/libreadline/histlib.h
deleted file mode 100644
index 10a40d7919b9..000000000000
--- a/contrib/libreadline/histlib.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* histlib.h -- internal definitions for the history library. */
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_HISTLIB_H_)
-#define _HISTLIB_H_
-
-/* Function pointers can be declared as (Function *)foo. */
-#if !defined (_FUNCTION_DEF)
-# define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
-#endif /* _FUNCTION_DEF */
-
-#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
-#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
-
-#ifndef savestring
-# ifndef strcpy
-extern char *strcpy ();
-# endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
-#endif
-
-#ifndef whitespace
-#define whitespace(c) (((c) == ' ') || ((c) == '\t'))
-#endif
-
-#ifndef _rl_digit_p
-#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-#endif
-
-#ifndef _rl_digit_value
-#define _rl_digit_value(c) ((c) - '0')
-#endif
-
-#ifndef member
-# ifndef strchr
-extern char *strchr ();
-# endif
-#define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0)
-#endif
-
-#ifndef FREE
-# define FREE(x) if (x) free (x)
-#endif
-
-/* Possible history errors passed to hist_error. */
-#define EVENT_NOT_FOUND 0
-#define BAD_WORD_SPEC 1
-#define SUBST_FAILED 2
-#define BAD_MODIFIER 3
-
-/* Possible definitions for history starting point specification. */
-#define ANCHORED_SEARCH 1
-#define NON_ANCHORED_SEARCH 0
-
-/* Possible definitions for what style of writing the history file we want. */
-#define HISTORY_APPEND 0
-#define HISTORY_OVERWRITE 1
-
-#endif /* !_HISTLIB_H_ */
diff --git a/contrib/libreadline/history.c b/contrib/libreadline/history.c
deleted file mode 100644
index fb9d68e7eccd..000000000000
--- a/contrib/libreadline/history.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/* History.c -- standalone history library */
-
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* The goal is to make the implementation transparent, so that you
- don't have to know what data types are used, just what functions
- you can call. I think I have done that. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#include "history.h"
-#include "histlib.h"
-
-extern char *xmalloc (), *xrealloc ();
-
-/* The number of slots to increase the_history by. */
-#define DEFAULT_HISTORY_GROW_SIZE 50
-
-/* **************************************************************** */
-/* */
-/* History Functions */
-/* */
-/* **************************************************************** */
-
-/* An array of HIST_ENTRY. This is where we store the history. */
-static HIST_ENTRY **the_history = (HIST_ENTRY **)NULL;
-
-/* Non-zero means that we have enforced a limit on the amount of
- history that we save. */
-static int history_stifled;
-
-/* If HISTORY_STIFLED is non-zero, then this is the maximum number of
- entries to remember. */
-int max_input_history;
-
-/* The current location of the interactive history pointer. Just makes
- life easier for outside callers. */
-int history_offset;
-
-/* The number of strings currently stored in the history list. */
-int history_length;
-
-/* The current number of slots allocated to the input_history. */
-static int history_size;
-
-/* The logical `base' of the history array. It defaults to 1. */
-int history_base = 1;
-
-/* Return the current HISTORY_STATE of the history. */
-HISTORY_STATE *
-history_get_history_state ()
-{
- HISTORY_STATE *state;
-
- state = (HISTORY_STATE *)xmalloc (sizeof (HISTORY_STATE));
- state->entries = the_history;
- state->offset = history_offset;
- state->length = history_length;
- state->size = history_size;
- state->flags = 0;
- if (history_stifled)
- state->flags |= HS_STIFLED;
-
- return (state);
-}
-
-/* Set the state of the current history array to STATE. */
-void
-history_set_history_state (state)
- HISTORY_STATE *state;
-{
- the_history = state->entries;
- history_offset = state->offset;
- history_length = state->length;
- history_size = state->size;
- if (state->flags & HS_STIFLED)
- history_stifled = 1;
-}
-
-/* Begin a session in which the history functions might be used. This
- initializes interactive variables. */
-void
-using_history ()
-{
- history_offset = history_length;
-}
-
-/* Return the number of bytes that the primary history entries are using.
- This just adds up the lengths of the_history->lines. */
-int
-history_total_bytes ()
-{
- register int i, result;
-
- result = 0;
-
- for (i = 0; the_history && the_history[i]; i++)
- result += strlen (the_history[i]->line);
-
- return (result);
-}
-
-/* Returns the magic number which says what history element we are
- looking at now. In this implementation, it returns history_offset. */
-int
-where_history ()
-{
- return (history_offset);
-}
-
-/* Make the current history item be the one at POS, an absolute index.
- Returns zero if POS is out of range, else non-zero. */
-int
-history_set_pos (pos)
- int pos;
-{
- if (pos > history_length || pos < 0 || !the_history)
- return (0);
- history_offset = pos;
- return (1);
-}
-
-/* Return the current history array. The caller has to be carefull, since this
- is the actual array of data, and could be bashed or made corrupt easily.
- The array is terminated with a NULL pointer. */
-HIST_ENTRY **
-history_list ()
-{
- return (the_history);
-}
-
-/* Return the history entry at the current position, as determined by
- history_offset. If there is no entry there, return a NULL pointer. */
-HIST_ENTRY *
-current_history ()
-{
- return ((history_offset == history_length) || the_history == 0)
- ? (HIST_ENTRY *)NULL
- : the_history[history_offset];
-}
-
-/* Back up history_offset to the previous history entry, and return
- a pointer to that entry. If there is no previous entry then return
- a NULL pointer. */
-HIST_ENTRY *
-previous_history ()
-{
- return history_offset ? the_history[--history_offset] : (HIST_ENTRY *)NULL;
-}
-
-/* Move history_offset forward to the next history entry, and return
- a pointer to that entry. If there is no next entry then return a
- NULL pointer. */
-HIST_ENTRY *
-next_history ()
-{
- return (history_offset == history_length) ? (HIST_ENTRY *)NULL : the_history[++history_offset];
-}
-
-/* Return the history entry which is logically at OFFSET in the history array.
- OFFSET is relative to history_base. */
-HIST_ENTRY *
-history_get (offset)
- int offset;
-{
- int local_index;
-
- local_index = offset - history_base;
- return (local_index >= history_length || local_index < 0 || !the_history)
- ? (HIST_ENTRY *)NULL
- : the_history[local_index];
-}
-
-/* Place STRING at the end of the history list. The data field
- is set to NULL. */
-void
-add_history (string)
- char *string;
-{
- HIST_ENTRY *temp;
-
- if (history_stifled && (history_length == max_input_history))
- {
- register int i;
-
- /* If the history is stifled, and history_length is zero,
- and it equals max_input_history, we don't save items. */
- if (history_length == 0)
- return;
-
- /* If there is something in the slot, then remove it. */
- if (the_history[0])
- {
- free (the_history[0]->line);
- free (the_history[0]);
- }
-
- /* Copy the rest of the entries, moving down one slot. */
- for (i = 0; i < history_length; i++)
- the_history[i] = the_history[i + 1];
-
- history_base++;
- }
- else
- {
- if (history_size == 0)
- {
- history_size = DEFAULT_HISTORY_GROW_SIZE;
- the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
- history_length = 1;
- }
- else
- {
- if (history_length == (history_size - 1))
- {
- history_size += DEFAULT_HISTORY_GROW_SIZE;
- the_history = (HIST_ENTRY **)
- xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
- }
- history_length++;
- }
- }
-
- temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
- temp->line = savestring (string);
- temp->data = (char *)NULL;
-
- the_history[history_length] = (HIST_ENTRY *)NULL;
- the_history[history_length - 1] = temp;
-}
-
-/* Make the history entry at WHICH have LINE and DATA. This returns
- the old entry so you can dispose of the data. In the case of an
- invalid WHICH, a NULL pointer is returned. */
-HIST_ENTRY *
-replace_history_entry (which, line, data)
- int which;
- char *line;
- char *data;
-{
- HIST_ENTRY *temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
- HIST_ENTRY *old_value;
-
- if (which >= history_length)
- return ((HIST_ENTRY *)NULL);
-
- old_value = the_history[which];
-
- temp->line = savestring (line);
- temp->data = data;
- the_history[which] = temp;
-
- return (old_value);
-}
-
-/* Remove history element WHICH from the history. The removed
- element is returned to you so you can free the line, data,
- and containing structure. */
-HIST_ENTRY *
-remove_history (which)
- int which;
-{
- HIST_ENTRY *return_value;
-
- if (which >= history_length || !history_length)
- return_value = (HIST_ENTRY *)NULL;
- else
- {
- register int i;
- return_value = the_history[which];
-
- for (i = which; i < history_length; i++)
- the_history[i] = the_history[i + 1];
-
- history_length--;
- }
-
- return (return_value);
-}
-
-/* Stifle the history list, remembering only MAX number of lines. */
-void
-stifle_history (max)
- int max;
-{
- if (max < 0)
- max = 0;
-
- if (history_length > max)
- {
- register int i, j;
-
- /* This loses because we cannot free the data. */
- for (i = 0, j = history_length - max; i < j; i++)
- {
- free (the_history[i]->line);
- free (the_history[i]);
- }
-
- history_base = i;
- for (j = 0, i = history_length - max; j < max; i++, j++)
- the_history[j] = the_history[i];
- the_history[j] = (HIST_ENTRY *)NULL;
- history_length = j;
- }
-
- history_stifled = 1;
- max_input_history = max;
-}
-
-/* Stop stifling the history. This returns the previous amount the
- history was stifled by. The value is positive if the history was
- stifled, negative if it wasn't. */
-int
-unstifle_history ()
-{
- if (history_stifled)
- {
- history_stifled = 0;
- return (-max_input_history);
- }
-
- return (max_input_history);
-}
-
-int
-history_is_stifled ()
-{
- return (history_stifled);
-}
-
-void
-clear_history ()
-{
- register int i;
-
- /* This loses because we cannot free the data. */
- for (i = 0; i < history_length; i++)
- {
- free (the_history[i]->line);
- free (the_history[i]);
- the_history[i] = (HIST_ENTRY *)NULL;
- }
-
- history_offset = history_length = 0;
-}
diff --git a/contrib/libreadline/history.h b/contrib/libreadline/history.h
deleted file mode 100644
index 17ec8775117a..000000000000
--- a/contrib/libreadline/history.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/* History.h -- the names of functions that you can call in history. */
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _HISTORY_H_
-#define _HISTORY_H_
-
-/* The structure used to store a history entry. */
-typedef struct _hist_entry {
- char *line;
- char *data;
-} HIST_ENTRY;
-
-/* A structure used to pass the current state of the history stuff around. */
-typedef struct _hist_state {
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
- int flags;
-} HISTORY_STATE;
-
-/* Flag values for the `flags' member of HISTORY_STATE. */
-#define HS_STIFLED 0x01
-
-/* Initialization and state management. */
-
-/* Begin a session in which the history functions might be used. This
- just initializes the interactive variables. */
-extern void using_history ();
-
-/* Return the current HISTORY_STATE of the history. */
-extern HISTORY_STATE *history_get_history_state ();
-
-/* Set the state of the current history array to STATE. */
-extern void history_set_history_state ();
-
-/* Manage the history list. */
-
-/* Place STRING at the end of the history list.
- The associated data field (if any) is set to NULL. */
-extern void add_history ();
-
-/* A reasonably useless function, only here for completeness. WHICH
- is the magic number that tells us which element to delete. The
- elements are numbered from 0. */
-extern HIST_ENTRY *remove_history ();
-
-/* Make the history entry at WHICH have LINE and DATA. This returns
- the old entry so you can dispose of the data. In the case of an
- invalid WHICH, a NULL pointer is returned. */
-extern HIST_ENTRY *replace_history_entry ();
-
-/* Clear the history list and start over. */
-extern void clear_history ();
-
-/* Stifle the history list, remembering only MAX number of entries. */
-extern void stifle_history ();
-
-/* Stop stifling the history. This returns the previous amount the
- history was stifled by. The value is positive if the history was
- stifled, negative if it wasn't. */
-extern int unstifle_history ();
-
-/* Return 1 if the history is stifled, 0 if it is not. */
-extern int history_is_stifled ();
-
-/* Information about the history list. */
-
-/* Return a NULL terminated array of HIST_ENTRY which is the current input
- history. Element 0 of this list is the beginning of time. If there
- is no history, return NULL. */
-extern HIST_ENTRY **history_list ();
-
-/* Returns the number which says what history element we are now
- looking at. */
-extern int where_history ();
-
-/* Return the history entry at the current position, as determined by
- history_offset. If there is no entry there, return a NULL pointer. */
-HIST_ENTRY *current_history ();
-
-/* Return the history entry which is logically at OFFSET in the history
- array. OFFSET is relative to history_base. */
-extern HIST_ENTRY *history_get ();
-
-/* Return the number of bytes that the primary history entries are using.
- This just adds up the lengths of the_history->lines. */
-extern int history_total_bytes ();
-
-/* Moving around the history list. */
-
-/* Set the position in the history list to POS. */
-int history_set_pos ();
-
-/* Back up history_offset to the previous history entry, and return
- a pointer to that entry. If there is no previous entry, return
- a NULL pointer. */
-extern HIST_ENTRY *previous_history ();
-
-/* Move history_offset forward to the next item in the input_history,
- and return the a pointer to that entry. If there is no next entry,
- return a NULL pointer. */
-extern HIST_ENTRY *next_history ();
-
-/* Searching the history list. */
-
-/* Search the history for STRING, starting at history_offset.
- If DIRECTION < 0, then the search is through previous entries,
- else through subsequent. If the string is found, then
- current_history () is the history entry, and the value of this function
- is the offset in the line of that history entry that the string was
- found in. Otherwise, nothing is changed, and a -1 is returned. */
-extern int history_search ();
-
-/* Search the history for STRING, starting at history_offset.
- The search is anchored: matching lines must begin with string. */
-extern int history_search_prefix ();
-
-/* Search for STRING in the history list, starting at POS, an
- absolute index into the list. DIR, if negative, says to search
- backwards from POS, else forwards.
- Returns the absolute index of the history element where STRING
- was found, or -1 otherwise. */
-extern int history_search_pos ();
-
-/* Managing the history file. */
-
-/* Add the contents of FILENAME to the history list, a line at a time.
- If FILENAME is NULL, then read from ~/.history. Returns 0 if
- successful, or errno if not. */
-extern int read_history ();
-
-/* Read a range of lines from FILENAME, adding them to the history list.
- Start reading at the FROM'th line and end at the TO'th. If FROM
- is zero, start at the beginning. If TO is less than FROM, read
- until the end of the file. If FILENAME is NULL, then read from
- ~/.history. Returns 0 if successful, or errno if not. */
-extern int read_history_range ();
-
-/* Write the current history to FILENAME. If FILENAME is NULL,
- then write the history list to ~/.history. Values returned
- are as in read_history (). */
-extern int write_history ();
-
-/* Append NELEMENT entries to FILENAME. The entries appended are from
- the end of the list minus NELEMENTs up to the end of the list. */
-int append_history ();
-
-/* Truncate the history file, leaving only the last NLINES lines. */
-extern int history_truncate_file ();
-
-/* History expansion. */
-
-/* Expand the string STRING, placing the result into OUTPUT, a pointer
- to a string. Returns:
-
- 0) If no expansions took place (or, if the only change in
- the text was the de-slashifying of the history expansion
- character)
- 1) If expansions did take place
- -1) If there was an error in expansion.
- 2) If the returned line should just be printed.
-
- If an error ocurred in expansion, then OUTPUT contains a descriptive
- error message. */
-extern int history_expand ();
-
-/* Extract a string segment consisting of the FIRST through LAST
- arguments present in STRING. Arguments are broken up as in
- the shell. */
-extern char *history_arg_extract ();
-
-/* Return the text of the history event beginning at the current
- offset into STRING. */
-extern char *get_history_event ();
-
-/* Return an array of tokens, much as the shell might. The tokens are
- parsed out of STRING. */
-extern char **history_tokenize ();
-
-/* Exported history variables. */
-extern int history_base;
-extern int history_length;
-extern int max_input_history;
-extern char history_expansion_char;
-extern char history_subst_char;
-extern char history_comment_char;
-extern char *history_no_expand_chars;
-extern char *history_search_delimiter_chars;
-extern int history_quotes_inhibit_expansion;
-
-#endif /* !_HISTORY_H_ */
diff --git a/contrib/libreadline/histsearch.c b/contrib/libreadline/histsearch.c
deleted file mode 100644
index a72a68bf7649..000000000000
--- a/contrib/libreadline/histsearch.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* histsearch.c -- searching the history list. */
-
-/* Copyright (C) 1989, 1992 Free Software Foundation, Inc.
-
- This file contains the GNU History Library (the Library), a set of
- routines for managing the text of previously typed lines.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#include "history.h"
-#include "histlib.h"
-
-/* Variables imported from other history library files. */
-extern int history_offset;
-
-/* The list of alternate characters that can delimit a history search
- string. */
-char *history_search_delimiter_chars = (char *)NULL;
-
-/* Search the history for STRING, starting at history_offset.
- If DIRECTION < 0, then the search is through previous entries, else
- through subsequent. If ANCHORED is non-zero, the string must
- appear at the beginning of a history line, otherwise, the string
- may appear anywhere in the line. If the string is found, then
- current_history () is the history entry, and the value of this
- function is the offset in the line of that history entry that the
- string was found in. Otherwise, nothing is changed, and a -1 is
- returned. */
-
-static int
-history_search_internal (string, direction, anchored)
- char *string;
- int direction, anchored;
-{
- register int i, reverse;
- register char *line;
- register int line_index;
- int string_len;
- HIST_ENTRY **the_history; /* local */
-
- i = history_offset;
- reverse = (direction < 0);
-
- /* Take care of trivial cases first. */
- if (string == 0 || *string == '\0')
- return (-1);
-
- if (!history_length || ((i == history_length) && !reverse))
- return (-1);
-
- if (reverse && (i == history_length))
- i--;
-
-#define NEXT_LINE() do { if (reverse) i--; else i++; } while (0)
-
- the_history = history_list ();
- string_len = strlen (string);
- while (1)
- {
- /* Search each line in the history list for STRING. */
-
- /* At limit for direction? */
- if ((reverse && i < 0) || (!reverse && i == history_length))
- return (-1);
-
- line = the_history[i]->line;
- line_index = strlen (line);
-
- /* If STRING is longer than line, no match. */
- if (string_len > line_index)
- {
- NEXT_LINE ();
- continue;
- }
-
- /* Handle anchored searches first. */
- if (anchored == ANCHORED_SEARCH)
- {
- if (STREQN (string, line, string_len))
- {
- history_offset = i;
- return (0);
- }
-
- NEXT_LINE ();
- continue;
- }
-
- /* Do substring search. */
- if (reverse)
- {
- line_index -= string_len;
-
- while (line_index >= 0)
- {
- if (STREQN (string, line + line_index, string_len))
- {
- history_offset = i;
- return (line_index);
- }
- line_index--;
- }
- }
- else
- {
- register int limit;
-
- limit = line_index - string_len + 1;
- line_index = 0;
-
- while (line_index < limit)
- {
- if (STREQN (string, line + line_index, string_len))
- {
- history_offset = i;
- return (line_index);
- }
- line_index++;
- }
- }
- NEXT_LINE ();
- }
-}
-
-/* Do a non-anchored search for STRING through the history in DIRECTION. */
-int
-history_search (string, direction)
- char *string;
- int direction;
-{
- return (history_search_internal (string, direction, NON_ANCHORED_SEARCH));
-}
-
-/* Do an anchored search for string through the history in DIRECTION. */
-int
-history_search_prefix (string, direction)
- char *string;
- int direction;
-{
- return (history_search_internal (string, direction, ANCHORED_SEARCH));
-}
-
-/* Search for STRING in the history list. DIR is < 0 for searching
- backwards. POS is an absolute index into the history list at
- which point to begin searching. */
-int
-history_search_pos (string, dir, pos)
- char *string;
- int dir, pos;
-{
- int ret, old;
-
- old = where_history ();
- history_set_pos (pos);
- if (history_search (string, dir) == -1)
- {
- history_set_pos (old);
- return (-1);
- }
- ret = where_history ();
- history_set_pos (old);
- return ret;
-}
diff --git a/contrib/libreadline/input.c b/contrib/libreadline/input.c
deleted file mode 100644
index 7e3c0feb5ce8..000000000000
--- a/contrib/libreadline/input.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* input.c -- character input functions 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,
- 675 Mass Ave, Cambridge, MA 02139, 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 /* 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 */
-
-#if defined (HAVE_SELECT)
-# if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX)
-# include <sys/time.h>
-# endif
-#endif /* HAVE_SELECT */
-#if defined (HAVE_SYS_SELECT_H)
-# include <sys/select.h>
-#endif
-
-#if defined (FIONREAD_IN_SYS_IOCTL)
-# include <sys/ioctl.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-
-/* What kind of non-blocking I/O do we have? */
-#if !defined (O_NDELAY) && defined (O_NONBLOCK)
-# define O_NDELAY O_NONBLOCK /* Posix style */
-#endif
-
-/* Functions imported from other files in the library. */
-extern char *xmalloc (), *xrealloc ();
-
-/* Variables and functions from macro.c. */
-extern void _rl_add_macro_char ();
-extern void _rl_with_macro_input ();
-extern int _rl_next_macro_key ();
-extern int _rl_defining_kbd_macro;
-
-#if defined (VI_MODE)
-extern void _rl_vi_set_last ();
-extern int _rl_vi_textmod_command ();
-#endif /* VI_MODE */
-
-extern FILE *rl_instream, *rl_outstream;
-extern Function *rl_last_func;
-extern int rl_key_sequence_length;
-extern int rl_pending_input;
-extern int rl_editing_mode;
-
-extern Keymap _rl_keymap;
-
-extern int _rl_convert_meta_chars_to_ascii;
-
-#if defined (__GO32__)
-# include <pc.h>
-#endif /* __GO32__ */
-
-/* Non-null means it is a pointer to a function to run while waiting for
- character input. */
-Function *rl_event_hook = (Function *)NULL;
-
-Function *rl_getc_function = rl_getc;
-
-/* **************************************************************** */
-/* */
-/* Character Input Buffering */
-/* */
-/* **************************************************************** */
-
-static int pop_index, push_index;
-static unsigned char ibuffer[512];
-static int ibuffer_len = sizeof (ibuffer) - 1;
-
-#define any_typein (push_index != pop_index)
-
-int
-_rl_any_typein ()
-{
- return any_typein;
-}
-
-/* Add KEY to the buffer of characters to be read. */
-int
-rl_stuff_char (key)
- int key;
-{
- if (key == EOF)
- {
- key = NEWLINE;
- rl_pending_input = EOF;
- }
- ibuffer[push_index++] = key;
- if (push_index >= ibuffer_len)
- push_index = 0;
- return push_index;
-}
-
-/* Make C be the next command to be executed. */
-int
-rl_execute_next (c)
- int c;
-{
- rl_pending_input = c;
- return 0;
-}
-
-/* Return the amount of space available in the
- buffer for stuffing characters. */
-static int
-ibuffer_space ()
-{
- if (pop_index > push_index)
- return (pop_index - push_index);
- else
- return (ibuffer_len - (push_index - pop_index));
-}
-
-/* Get a key from the buffer of characters to be read.
- Return the key in KEY.
- Result is KEY if there was a key, or 0 if there wasn't. */
-static int
-rl_get_char (key)
- int *key;
-{
- if (push_index == pop_index)
- return (0);
-
- *key = ibuffer[pop_index++];
-
- if (pop_index >= ibuffer_len)
- pop_index = 0;
-
- return (1);
-}
-
-/* Stuff KEY into the *front* of the input buffer.
- Returns non-zero if successful, zero if there is
- no space left in the buffer. */
-static int
-rl_unget_char (key)
- int key;
-{
- if (ibuffer_space ())
- {
- pop_index--;
- if (pop_index < 0)
- pop_index = ibuffer_len - 1;
- ibuffer[pop_index] = key;
- return (1);
- }
- return (0);
-}
-
-/* If a character is available to be read, then read it
- and stuff it into IBUFFER. Otherwise, just return. */
-static void
-rl_gather_tyi ()
-{
-#if defined (__GO32__)
- char input;
-
- if (isatty (0) && kbhit () && ibuffer_space ())
- {
- int i;
- i = (*rl_getc_function) (rl_instream);
- rl_stuff_char (i);
- }
-#else /* !__GO32__ */
-
- int tty;
- register int tem, result;
- int chars_avail;
- char input;
-#if defined(HAVE_SELECT)
- fd_set readfds, exceptfds;
- struct timeval timeout;
-#endif
-
- tty = fileno (rl_instream);
-
-#if defined (HAVE_SELECT)
- FD_ZERO (&readfds);
- FD_ZERO (&exceptfds);
- FD_SET (tty, &readfds);
- FD_SET (tty, &exceptfds);
- timeout.tv_sec = 0;
- timeout.tv_usec = 100000; /* 0.1 seconds */
- if (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) <= 0)
- return; /* Nothing to read. */
-#endif
-
- result = -1;
-#if defined (FIONREAD)
- result = ioctl (tty, FIONREAD, &chars_avail);
-#endif
-
-#if defined (O_NDELAY)
- if (result == -1)
- {
- tem = fcntl (tty, F_GETFL, 0);
-
- fcntl (tty, F_SETFL, (tem | O_NDELAY));
- chars_avail = read (tty, &input, 1);
-
- fcntl (tty, F_SETFL, tem);
- if (chars_avail == -1 && errno == EAGAIN)
- return;
- }
-#endif /* O_NDELAY */
-
- /* If there's nothing available, don't waste time trying to read
- something. */
- if (chars_avail <= 0)
- return;
-
- tem = ibuffer_space ();
-
- if (chars_avail > tem)
- chars_avail = tem;
-
- /* One cannot read all of the available input. I can only read a single
- character at a time, or else programs which require input can be
- thwarted. If the buffer is larger than one character, I lose.
- Damn! */
- if (tem < ibuffer_len)
- chars_avail = 0;
-
- if (result != -1)
- {
- while (chars_avail--)
- rl_stuff_char ((*rl_getc_function) (rl_instream));
- }
- else
- {
- if (chars_avail)
- rl_stuff_char (input);
- }
-#endif /* !__GO32__ */
-}
-
-/* Is there input available to be read on the readline input file
- descriptor? Only works if the system has select(2) or FIONREAD. */
-int
-_rl_input_available ()
-{
-#if defined(HAVE_SELECT)
- fd_set readfds, exceptfds;
- struct timeval timeout;
-#endif
-#if defined(FIONREAD)
- int chars_avail;
-#endif
- int tty;
-
- tty = fileno (rl_instream);
-
-#if defined (HAVE_SELECT)
- FD_ZERO (&readfds);
- FD_ZERO (&exceptfds);
- FD_SET (tty, &readfds);
- FD_SET (tty, &exceptfds);
- timeout.tv_sec = 0;
- timeout.tv_usec = 100000; /* 0.1 seconds */
- return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0);
-#endif
-
-#if defined (FIONREAD)
- if (ioctl (tty, FIONREAD, &chars_avail) == 0)
- return (chars_avail);
-#endif
-
- return 0;
-}
-
-void
-_rl_insert_typein (c)
- int c;
-{
- int key, t, i;
- char *string;
-
- i = key = 0;
- string = xmalloc (ibuffer_len + 1);
- string[i++] = (char) c;
-
- while ((t = rl_get_char (&key)) &&
- _rl_keymap[key].type == ISFUNC &&
- _rl_keymap[key].function == rl_insert)
- string[i++] = key;
-
- if (t)
- rl_unget_char (key);
-
- string[i] = '\0';
- rl_insert_text (string);
- free (string);
-}
-
-/* **************************************************************** */
-/* */
-/* Character Input */
-/* */
-/* **************************************************************** */
-
-/* Read a key, including pending input. */
-int
-rl_read_key ()
-{
- int c;
-
- rl_key_sequence_length++;
-
- if (rl_pending_input)
- {
- c = rl_pending_input;
- rl_pending_input = 0;
- }
- else
- {
- /* If input is coming from a macro, then use that. */
- if (c = _rl_next_macro_key ())
- return (c);
-
- /* If the user has an event function, then call it periodically. */
- if (rl_event_hook)
- {
- while (rl_event_hook && rl_get_char (&c) == 0)
- {
- (*rl_event_hook) ();
- rl_gather_tyi ();
- }
- }
- else
- {
- if (rl_get_char (&c) == 0)
- c = (*rl_getc_function) (rl_instream);
- }
- }
-
- return (c);
-}
-
-int
-rl_getc (stream)
- FILE *stream;
-{
- int result, flags;
- unsigned char c;
-
-#if defined (__GO32__)
- if (isatty (0))
- return (getkey () & 0x7F);
-#endif /* __GO32__ */
-
- while (1)
- {
- result = read (fileno (stream), &c, sizeof (unsigned char));
-
- if (result == sizeof (unsigned char))
- return (c);
-
- /* If zero characters are returned, then the file that we are
- reading from is empty! Return EOF in that case. */
- if (result == 0)
- return (EOF);
-
-#if defined (EWOULDBLOCK)
- if (errno == EWOULDBLOCK)
- {
- if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0)
- return (EOF);
- if (flags & O_NDELAY)
- {
- flags &= ~O_NDELAY;
- fcntl (fileno (stream), F_SETFL, flags);
- continue;
- }
- continue;
- }
-#endif /* EWOULDBLOCK */
-
-#if defined (_POSIX_VERSION) && defined (EAGAIN) && defined (O_NONBLOCK)
- if (errno == EAGAIN)
- {
- if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0)
- return (EOF);
- if (flags & O_NONBLOCK)
- {
- flags &= ~O_NONBLOCK;
- fcntl (fileno (stream), F_SETFL, flags);
- continue;
- }
- }
-#endif /* _POSIX_VERSION && EAGAIN && O_NONBLOCK */
-
-#if !defined (__GO32__)
- /* If the error that we received was SIGINT, then try again,
- this is simply an interrupted system call to read ().
- Otherwise, some error ocurred, also signifying EOF. */
- if (errno != EINTR)
- return (EOF);
-#endif /* !__GO32__ */
- }
-}
diff --git a/contrib/libreadline/isearch.c b/contrib/libreadline/isearch.c
deleted file mode 100644
index fa60fa498405..000000000000
--- a/contrib/libreadline/isearch.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/* **************************************************************** */
-/* */
-/* I-Search and Searching */
-/* */
-/* **************************************************************** */
-
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#include <sys/types.h>
-
-#include "rldefs.h"
-#include "readline.h"
-#include "history.h"
-
-/* Variables imported from other files in the readline library. */
-extern Keymap _rl_keymap;
-extern HIST_ENTRY *saved_line_for_history;
-extern int rl_line_buffer_len;
-extern int rl_point, rl_end;
-extern char *rl_line_buffer;
-
-extern void _rl_save_prompt ();
-extern void _rl_restore_prompt ();
-
-extern int rl_execute_next ();
-extern void rl_extend_line_buffer ();
-
-extern int _rl_input_available ();
-
-extern char *xmalloc (), *xrealloc ();
-
-static int rl_search_history ();
-
-/* Last line found by the current incremental search, so we don't `find'
- identical lines many times in a row. */
-static char *prev_line_found;
-
-/* Search backwards through the history looking for a string which is typed
- interactively. Start with the current line. */
-int
-rl_reverse_search_history (sign, key)
- int sign, key;
-{
- return (rl_search_history (-sign, key));
-}
-
-/* Search forwards through the history looking for a string which is typed
- interactively. Start with the current line. */
-int
-rl_forward_search_history (sign, key)
- int sign, key;
-{
- return (rl_search_history (sign, key));
-}
-
-/* Display the current state of the search in the echo-area.
- SEARCH_STRING contains the string that is being searched for,
- DIRECTION is zero for forward, or 1 for reverse,
- WHERE is the history list number of the current line. If it is
- -1, then this line is the starting one. */
-static void
-rl_display_search (search_string, reverse_p, where)
- char *search_string;
- int reverse_p, where;
-{
- char *message;
- int msglen, searchlen;
-
- searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
-
- message = xmalloc (searchlen + 33);
- msglen = 0;
-
-#if defined (NOTDEF)
- if (where != -1)
- {
- sprintf (message, "[%d]", where + history_base);
- msglen = strlen (message);
- }
-#endif /* NOTDEF */
-
- message[msglen++] = '(';
-
- if (reverse_p)
- {
- strcpy (message + msglen, "reverse-");
- msglen += 8;
- }
-
- strcpy (message + msglen, "i-search)`");
- msglen += 10;
-
- if (search_string)
- {
- strcpy (message + msglen, search_string);
- msglen += searchlen;
- }
-
- strcpy (message + msglen, "': ");
-
- rl_message ("%s", message, 0);
- free (message);
- (*rl_redisplay_function) ();
-}
-
-/* Search through the history looking for an interactively typed string.
- This is analogous to i-search. We start the search in the current line.
- DIRECTION is which direction to search; >= 0 means forward, < 0 means
- backwards. */
-static int
-rl_search_history (direction, invoking_key)
- int direction, invoking_key;
-{
- /* The string that the user types in to search for. */
- char *search_string;
-
- /* The current length of SEARCH_STRING. */
- int search_string_index;
-
- /* The amount of space that SEARCH_STRING has allocated to it. */
- int search_string_size;
-
- /* The list of lines to search through. */
- char **lines, *allocated_line;
-
- /* The length of LINES. */
- int hlen;
-
- /* Where we get LINES from. */
- HIST_ENTRY **hlist;
-
- register int i;
- int orig_point, orig_line, last_found_line;
- int c, found, failed, sline_len;
-
- /* The line currently being searched. */
- char *sline;
-
- /* Offset in that line. */
- int line_index;
-
- /* Non-zero if we are doing a reverse search. */
- int reverse;
-
- orig_point = rl_point;
- last_found_line = orig_line = where_history ();
- reverse = direction < 0;
- hlist = history_list ();
- allocated_line = (char *)NULL;
-
- /* Create an arrary of pointers to the lines that we want to search. */
- maybe_replace_line ();
- i = 0;
- if (hlist)
- for (i = 0; hlist[i]; i++);
-
- /* Allocate space for this many lines, +1 for the current input line,
- and remember those lines. */
- lines = (char **)xmalloc ((1 + (hlen = i)) * sizeof (char *));
- for (i = 0; i < hlen; i++)
- lines[i] = hlist[i]->line;
-
- if (saved_line_for_history)
- lines[i] = saved_line_for_history->line;
- else
- {
- /* Keep track of this so we can free it. */
- allocated_line = xmalloc (1 + strlen (rl_line_buffer));
- strcpy (allocated_line, &rl_line_buffer[0]);
- lines[i] = allocated_line;
- }
-
- hlen++;
-
- /* The line where we start the search. */
- i = orig_line;
-
- _rl_save_prompt ();
-
- /* Initialize search parameters. */
- search_string = xmalloc (search_string_size = 128);
- *search_string = '\0';
- search_string_index = 0;
- prev_line_found = (char *)0; /* XXX */
-
- /* Normalize DIRECTION into 1 or -1. */
- direction = (direction >= 0) ? 1 : -1;
-
- rl_display_search (search_string, reverse, -1);
-
- sline = rl_line_buffer;
- sline_len = strlen (sline);
- line_index = rl_point;
-
- found = failed = 0;
- for (;;)
- {
- Function *f = (Function *)NULL;
-
- /* Read a key and decide how to proceed. */
- c = rl_read_key ();
-
- if (_rl_keymap[c].type == ISFUNC)
- {
- f = _rl_keymap[c].function;
-
- if (f == rl_reverse_search_history)
- c = reverse ? -1 : -2;
- else if (f == rl_forward_search_history)
- c = !reverse ? -1 : -2;
- }
-
- /* Let NEWLINE (^J) terminate the search for people who don't like
- using ESC. ^M can still be used to terminate the search and
- immediately execute the command. */
- if (c == ESC || c == NEWLINE)
- {
- /* ESC still terminates the search, but if there is pending
- input or if input arrives within 0.1 seconds (on systems
- with select(2)) it is used as a prefix character
- with rl_execute_next. WATCH OUT FOR THIS! This is intended
- to allow the arrow keys to be used like ^F and ^B are used
- to terminate the search and execute the movement command. */
- if (c == ESC && _rl_input_available ()) /* XXX */
- rl_execute_next (ESC);
- break;
- }
-
- if (c >= 0 && (CTRL_CHAR (c) || META_CHAR (c) || c == RUBOUT))
- {
- rl_execute_next (c);
- break;
- }
-
- switch (c)
- {
- case -1:
- if (search_string_index == 0)
- continue;
- else if (reverse)
- --line_index;
- else if (line_index != sline_len)
- ++line_index;
- else
- ding ();
- break;
-
- /* switch directions */
- case -2:
- direction = -direction;
- reverse = direction < 0;
- break;
-
- case CTRL ('G'):
- strcpy (rl_line_buffer, lines[orig_line]);
- rl_point = orig_point;
- rl_end = strlen (rl_line_buffer);
- _rl_restore_prompt();
- rl_clear_message ();
- free (allocated_line);
- free (lines);
- return 0;
-
- default:
- /* Add character to search string and continue search. */
- if (search_string_index + 2 >= search_string_size)
- {
- search_string_size += 128;
- search_string = xrealloc (search_string, search_string_size);
- }
- search_string[search_string_index++] = c;
- search_string[search_string_index] = '\0';
- break;
- }
-
- for (found = failed = 0;;)
- {
- int limit = sline_len - search_string_index + 1;
-
- /* Search the current line. */
- while (reverse ? (line_index >= 0) : (line_index < limit))
- {
- if (STREQN (search_string, sline + line_index, search_string_index))
- {
- found++;
- break;
- }
- else
- line_index += direction;
- }
- if (found)
- break;
-
- /* Move to the next line, but skip new copies of the line
- we just found and lines shorter than the string we're
- searching for. */
- do
- {
- /* Move to the next line. */
- i += direction;
-
- /* At limit for direction? */
- if (reverse ? (i < 0) : (i == hlen))
- {
- failed++;
- break;
- }
-
- /* We will need these later. */
- sline = lines[i];
- sline_len = strlen (sline);
- }
- while ((prev_line_found && STREQ (prev_line_found, lines[i])) ||
- (search_string_index > sline_len));
-
- if (failed)
- break;
-
- /* Now set up the line for searching... */
- line_index = reverse ? sline_len - search_string_index : 0;
- }
-
- if (failed)
- {
- /* We cannot find the search string. Ding the bell. */
- ding ();
- i = last_found_line;
- continue; /* XXX - was break */
- }
-
- /* We have found the search string. Just display it. But don't
- actually move there in the history list until the user accepts
- the location. */
- if (found)
- {
- int line_len;
-
- prev_line_found = lines[i];
- line_len = strlen (lines[i]);
-
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
-
- strcpy (rl_line_buffer, lines[i]);
- rl_point = line_index;
- rl_end = line_len;
- last_found_line = i;
- rl_display_search (search_string, reverse, (i == orig_line) ? -1 : i);
- }
- }
-
- /* The searching is over. The user may have found the string that she
- was looking for, or else she may have exited a failing search. If
- LINE_INDEX is -1, then that shows that the string searched for was
- not found. We use this to determine where to place rl_point. */
-
- /* First put back the original state. */
- strcpy (rl_line_buffer, lines[orig_line]);
-
- _rl_restore_prompt ();
-
- /* Free the search string. */
- free (search_string);
-
- if (last_found_line < orig_line)
- rl_get_previous_history (orig_line - last_found_line);
- else
- rl_get_next_history (last_found_line - orig_line);
-
- /* If the string was not found, put point at the end of the line. */
- if (line_index < 0)
- line_index = strlen (rl_line_buffer);
- rl_point = line_index;
- rl_clear_message ();
-
- free (allocated_line);
- free (lines);
-
- return 0;
-}
diff --git a/contrib/libreadline/keymaps.c b/contrib/libreadline/keymaps.c
deleted file mode 100644
index 9359749ddc0c..000000000000
--- a/contrib/libreadline/keymaps.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* keymaps.c -- Functions and keymaps for the GNU Readline library. */
-
-/* Copyright (C) 1988,1989 Free Software Foundation, Inc.
-
- This file is part of GNU Readline, a library for reading lines
- of text with interactive input and history editing.
-
- Readline is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 1, or (at your option) any
- later version.
-
- Readline is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline; see the file COPYING. If not, write to the Free
- Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include "rlconf.h"
-#include "keymaps.h"
-#include "emacs_keymap.c"
-
-#if defined (VI_MODE)
-#include "vi_keymap.c"
-#endif
-
-extern int rl_do_lowercase_version ();
-extern int rl_rubout (), rl_insert ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Functions for manipulating Keymaps. */
-/* */
-/* **************************************************************** */
-
-
-/* Return a new, empty keymap.
- Free it with free() when you are done. */
-Keymap
-rl_make_bare_keymap ()
-{
- register int i;
- Keymap keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY));
-
- for (i = 0; i < KEYMAP_SIZE; i++)
- {
- keymap[i].type = ISFUNC;
- keymap[i].function = (Function *)NULL;
- }
-
- for (i = 'A'; i < ('Z' + 1); i++)
- {
- keymap[i].type = ISFUNC;
- keymap[i].function = rl_do_lowercase_version;
- }
-
- return (keymap);
-}
-
-/* Return a new keymap which is a copy of MAP. */
-Keymap
-rl_copy_keymap (map)
- Keymap map;
-{
- register int i;
- Keymap temp = rl_make_bare_keymap ();
-
- for (i = 0; i < KEYMAP_SIZE; i++)
- {
- temp[i].type = map[i].type;
- temp[i].function = map[i].function;
- }
- return (temp);
-}
-
-/* Return a new keymap with the printing characters bound to rl_insert,
- the uppercase Meta characters bound to run their lowercase equivalents,
- and the Meta digits bound to produce numeric arguments. */
-Keymap
-rl_make_keymap ()
-{
- register int i;
- Keymap newmap;
-
- newmap = rl_make_bare_keymap ();
-
- /* All ASCII printing characters are self-inserting. */
- for (i = ' '; i < 127; i++)
- newmap[i].function = rl_insert;
-
- newmap[TAB].function = rl_insert;
- newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */
- newmap[CTRL('H')].function = rl_rubout;
-
-#if KEYMAP_SIZE > 128
- /* Printing characters in some 8-bit character sets. */
- for (i = 128; i < 160; i++)
- newmap[i].function = rl_insert;
-
- /* ISO Latin-1 printing characters should self-insert. */
- for (i = 160; i < 256; i++)
- newmap[i].function = rl_insert;
-#endif /* KEYMAP_SIZE > 128 */
-
- return (newmap);
-}
-
-/* Free the storage associated with MAP. */
-void
-rl_discard_keymap (map)
- Keymap (map);
-{
- int i;
-
- if (!map)
- return;
-
- for (i = 0; i < KEYMAP_SIZE; i++)
- {
- switch (map[i].type)
- {
- case ISFUNC:
- break;
-
- case ISKMAP:
- rl_discard_keymap ((Keymap)map[i].function);
- break;
-
- case ISMACR:
- free ((char *)map[i].function);
- break;
- }
- }
-}
diff --git a/contrib/libreadline/keymaps.h b/contrib/libreadline/keymaps.h
deleted file mode 100644
index f8d0e2ef0ab2..000000000000
--- a/contrib/libreadline/keymaps.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* keymaps.h -- Manipulation of readline keymaps. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _KEYMAPS_H_
-#define _KEYMAPS_H_
-
-#if defined (READLINE_LIBRARY)
-# include "chardefs.h"
-#else
-# include <readline/chardefs.h>
-#endif
-
-#if !defined (_FUNCTION_DEF)
-# define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
-#endif
-
-/* A keymap contains one entry for each key in the ASCII set.
- Each entry consists of a type and a pointer.
- POINTER is the address of a function to run, or the
- address of a keymap to indirect through.
- TYPE says which kind of thing POINTER is. */
-typedef struct _keymap_entry {
- char type;
- Function *function;
-} KEYMAP_ENTRY;
-
-/* This must be large enough to hold bindings for all of the characters
- in a desired character set (e.g, 128 for ASCII, 256 for ISO Latin-x,
- and so on). */
-#define KEYMAP_SIZE 256
-
-/* I wanted to make the above structure contain a union of:
- union { Function *function; struct _keymap_entry *keymap; } value;
- but this made it impossible for me to create a static array.
- Maybe I need C lessons. */
-
-typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE];
-typedef KEYMAP_ENTRY *Keymap;
-
-/* The values that TYPE can have in a keymap entry. */
-#define ISFUNC 0
-#define ISKMAP 1
-#define ISMACR 2
-
-extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap;
-extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap;
-
-/* Return a new, empty keymap.
- Free it with free() when you are done. */
-extern Keymap rl_make_bare_keymap ();
-
-/* Return a new keymap which is a copy of MAP. */
-extern Keymap rl_copy_keymap ();
-
-/* Return a new keymap with the printing characters bound to rl_insert,
- the lowercase Meta characters bound to run their equivalents, and
- the Meta digits bound to produce numeric arguments. */
-extern Keymap rl_make_keymap ();
-
-extern void rl_discard_keymap ();
-
-/* Return the keymap corresponding to a given name. Names look like
- `emacs' or `emacs-meta' or `vi-insert'. */
-extern Keymap rl_get_keymap_by_name ();
-
-/* Return the current keymap. */
-extern Keymap rl_get_keymap ();
-
-/* Set the current keymap to MAP. */
-extern void rl_set_keymap ();
-
-#endif /* _KEYMAPS_H_ */
diff --git a/contrib/libreadline/kill.c b/contrib/libreadline/kill.c
deleted file mode 100644
index 89f6b5570384..000000000000
--- a/contrib/libreadline/kill.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/* kill.c -- kill ring management. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, 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> /* for _POSIX_VERSION */
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <stdio.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-extern int _rl_last_command_was_kill;
-extern int rl_editing_mode;
-extern int rl_explicit_arg;
-extern Function *rl_last_func;
-
-extern void _rl_init_argument ();
-extern int _rl_set_mark_at_pos ();
-extern void _rl_abort_internal ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Killing Mechanism */
-/* */
-/* **************************************************************** */
-
-/* What we assume for a max number of kills. */
-#define DEFAULT_MAX_KILLS 10
-
-/* The real variable to look at to find out when to flush kills. */
-static int rl_max_kills = DEFAULT_MAX_KILLS;
-
-/* Where to store killed text. */
-static char **rl_kill_ring = (char **)NULL;
-
-/* Where we are in the kill ring. */
-static int rl_kill_index;
-
-/* How many slots we have in the kill ring. */
-static int rl_kill_ring_length;
-
-/* How to say that you only want to save a certain amount
- of kill material. */
-int
-rl_set_retained_kills (num)
- int num;
-{
- return 0;
-}
-
-/* Add TEXT to the kill ring, allocating a new kill ring slot as necessary.
- This uses TEXT directly, so the caller must not free it. If APPEND is
- non-zero, and the last command was a kill, the text is appended to the
- current kill ring slot, otherwise prepended. */
-static int
-_rl_copy_to_kill_ring (text, append)
- char *text;
- int append;
-{
- char *old, *new;
- int slot;
-
- /* First, find the slot to work with. */
- if (_rl_last_command_was_kill == 0)
- {
- /* Get a new slot. */
- if (rl_kill_ring == 0)
- {
- /* If we don't have any defined, then make one. */
- rl_kill_ring = (char **)
- xmalloc (((rl_kill_ring_length = 1) + 1) * sizeof (char *));
- rl_kill_ring[slot = 0] = (char *)NULL;
- }
- else
- {
- /* We have to add a new slot on the end, unless we have
- exceeded the max limit for remembering kills. */
- slot = rl_kill_ring_length;
- if (slot == rl_max_kills)
- {
- register int i;
- free (rl_kill_ring[0]);
- for (i = 0; i < slot; i++)
- rl_kill_ring[i] = rl_kill_ring[i + 1];
- }
- else
- {
- slot = rl_kill_ring_length += 1;
- rl_kill_ring = (char **)xrealloc (rl_kill_ring, slot * sizeof (char *));
- }
- rl_kill_ring[--slot] = (char *)NULL;
- }
- }
- else
- slot = rl_kill_ring_length - 1;
-
- /* If the last command was a kill, prepend or append. */
- if (_rl_last_command_was_kill && rl_editing_mode != vi_mode)
- {
- old = rl_kill_ring[slot];
- new = xmalloc (1 + strlen (old) + strlen (text));
-
- if (append)
- {
- strcpy (new, old);
- strcat (new, text);
- }
- else
- {
- strcpy (new, text);
- strcat (new, old);
- }
- free (old);
- free (text);
- rl_kill_ring[slot] = new;
- }
- else
- rl_kill_ring[slot] = text;
-
- rl_kill_index = slot;
- return 0;
-}
-
-/* The way to kill something. This appends or prepends to the last
- kill, if the last command was a kill command. if FROM is less
- than TO, then the text is appended, otherwise prepended. If the
- last command was not a kill command, then a new slot is made for
- this kill. */
-int
-rl_kill_text (from, to)
- int from, to;
-{
- char *text;
-
- /* Is there anything to kill? */
- if (from == to)
- {
- _rl_last_command_was_kill++;
- return 0;
- }
-
- text = rl_copy_text (from, to);
-
- /* Delete the copied text from the line. */
- rl_delete_text (from, to);
-
- _rl_copy_to_kill_ring (text, from < to);
-
- _rl_last_command_was_kill++;
- return 0;
-}
-
-/* Now REMEMBER! In order to do prepending or appending correctly, kill
- commands always make rl_point's original position be the FROM argument,
- and rl_point's extent be the TO argument. */
-
-/* **************************************************************** */
-/* */
-/* Killing Commands */
-/* */
-/* **************************************************************** */
-
-/* Delete the word at point, saving the text in the kill ring. */
-int
-rl_kill_word (count, key)
- int count, key;
-{
- int orig_point = rl_point;
-
- if (count < 0)
- return (rl_backward_kill_word (-count, key));
- else
- {
- rl_forward_word (count, key);
-
- if (rl_point != orig_point)
- rl_kill_text (orig_point, rl_point);
-
- rl_point = orig_point;
- }
- return 0;
-}
-
-/* Rubout the word before point, placing it on the kill ring. */
-int
-rl_backward_kill_word (count, ignore)
- int count, ignore;
-{
- int orig_point = rl_point;
-
- if (count < 0)
- return (rl_kill_word (-count, ignore));
- else
- {
- rl_backward_word (count, ignore);
-
- if (rl_point != orig_point)
- rl_kill_text (orig_point, rl_point);
- }
- return 0;
-}
-
-/* Kill from here to the end of the line. If DIRECTION is negative, kill
- back to the line start instead. */
-int
-rl_kill_line (direction, ignore)
- int direction, ignore;
-{
- int orig_point = rl_point;
-
- if (direction < 0)
- return (rl_backward_kill_line (1, ignore));
- else
- {
- rl_end_of_line (1, ignore);
- if (orig_point != rl_point)
- rl_kill_text (orig_point, rl_point);
- rl_point = orig_point;
- }
- return 0;
-}
-
-/* Kill backwards to the start of the line. If DIRECTION is negative, kill
- forwards to the line end instead. */
-int
-rl_backward_kill_line (direction, ignore)
- int direction, ignore;
-{
- int orig_point = rl_point;
-
- if (direction < 0)
- return (rl_kill_line (1, ignore));
- else
- {
- if (!rl_point)
- ding ();
- else
- {
- rl_beg_of_line (1, ignore);
- rl_kill_text (orig_point, rl_point);
- }
- }
- return 0;
-}
-
-/* Kill the whole line, no matter where point is. */
-int
-rl_kill_full_line (count, ignore)
- int count, ignore;
-{
- rl_begin_undo_group ();
- rl_point = 0;
- rl_kill_text (rl_point, rl_end);
- rl_end_undo_group ();
- return 0;
-}
-
-/* The next two functions mimic unix line editing behaviour, except they
- save the deleted text on the kill ring. This is safer than not saving
- it, and since we have a ring, nobody should get screwed. */
-
-/* This does what C-w does in Unix. We can't prevent people from
- using behaviour that they expect. */
-int
-rl_unix_word_rubout (count, key)
- int count, key;
-{
- int orig_point;
-
- if (rl_point == 0)
- ding ();
- else
- {
- orig_point = rl_point;
- if (count <= 0)
- count = 1;
-
- while (count--)
- {
- while (rl_point && whitespace (rl_line_buffer[rl_point - 1]))
- rl_point--;
-
- while (rl_point && (whitespace (rl_line_buffer[rl_point - 1]) == 0))
- rl_point--;
- }
-
- rl_kill_text (orig_point, rl_point);
- }
- return 0;
-}
-
-/* Here is C-u doing what Unix does. You don't *have* to use these
- key-bindings. We have a choice of killing the entire line, or
- killing from where we are to the start of the line. We choose the
- latter, because if you are a Unix weenie, then you haven't backspaced
- into the line at all, and if you aren't, then you know what you are
- doing. */
-int
-rl_unix_line_discard (count, key)
- int count, key;
-{
- if (rl_point == 0)
- ding ();
- else
- {
- rl_kill_text (rl_point, 0);
- rl_point = 0;
- }
- return 0;
-}
-
-/* Copy the text in the `region' to the kill ring. If DELETE is non-zero,
- delete the text from the line as well. */
-static int
-region_kill_internal (delete)
- int delete;
-{
- char *text;
-
- if (rl_mark == rl_point)
- {
- _rl_last_command_was_kill++;
- return 0;
- }
-
- text = rl_copy_text (rl_point, rl_mark);
- if (delete)
- rl_delete_text (rl_point, rl_mark);
- _rl_copy_to_kill_ring (text, rl_point < rl_mark);
-
- _rl_last_command_was_kill++;
- return 0;
-}
-
-/* Copy the text in the region to the kill ring. */
-int
-rl_copy_region_to_kill (count, ignore)
- int count, ignore;
-{
- return (region_kill_internal (0));
-}
-
-/* Kill the text between the point and mark. */
-int
-rl_kill_region (count, ignore)
- int count, ignore;
-{
- return (region_kill_internal (1));
-}
-
-/* Copy COUNT words to the kill ring. DIR says which direction we look
- to find the words. */
-static int
-_rl_copy_word_as_kill (count, dir)
- int count, dir;
-{
- int om, op, r;
-
- om = rl_mark;
- op = rl_point;
-
- if (dir > 0)
- rl_forward_word (count, 0);
- else
- rl_backward_word (count, 0);
-
- rl_mark = rl_point;
-
- if (dir > 0)
- rl_backward_word (count, 0);
- else
- rl_forward_word (count, 0);
-
- r = region_kill_internal (0);
-
- rl_mark = om;
- rl_point = op;
-
- return r;
-}
-
-int
-rl_copy_forward_word (count, key)
- int count, key;
-{
- if (count < 0)
- return (rl_copy_backward_word (-count, key));
-
- return (_rl_copy_word_as_kill (count, 1));
-}
-
-int
-rl_copy_backward_word (count, key)
- int count, key;
-{
- if (count < 0)
- return (rl_copy_forward_word (-count, key));
-
- return (_rl_copy_word_as_kill (count, -1));
-}
-
-/* Yank back the last killed text. This ignores arguments. */
-int
-rl_yank (count, ignore)
- int count, ignore;
-{
- if (rl_kill_ring == 0)
- {
- _rl_abort_internal ();
- return -1;
- }
-
- _rl_set_mark_at_pos (rl_point);
- rl_insert_text (rl_kill_ring[rl_kill_index]);
- return 0;
-}
-
-/* If the last command was yank, or yank_pop, and the text just
- before point is identical to the current kill item, then
- delete that text from the line, rotate the index down, and
- yank back some other text. */
-int
-rl_yank_pop (count, key)
- int count, key;
-{
- int l, n;
-
- if (((rl_last_func != rl_yank_pop) && (rl_last_func != rl_yank)) ||
- !rl_kill_ring)
- {
- _rl_abort_internal ();
- return -1;
- }
-
- l = strlen (rl_kill_ring[rl_kill_index]);
- n = rl_point - l;
- if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l))
- {
- rl_delete_text (n, rl_point);
- rl_point = n;
- rl_kill_index--;
- if (rl_kill_index < 0)
- rl_kill_index = rl_kill_ring_length - 1;
- rl_yank (1, 0);
- return 0;
- }
- else
- {
- _rl_abort_internal ();
- return -1;
- }
-}
-
-/* Yank the COUNTth argument from the previous history line. */
-int
-rl_yank_nth_arg (count, ignore)
- int count, ignore;
-{
- register HIST_ENTRY *entry;
- char *arg;
-
- entry = previous_history ();
- if (entry)
- next_history ();
- else
- {
- ding ();
- return -1;
- }
-
- arg = history_arg_extract (count, count, entry->line);
- if (!arg || !*arg)
- {
- ding ();
- return -1;
- }
-
- rl_begin_undo_group ();
-
-#if defined (VI_MODE)
- /* Vi mode always inserts a space before yanking the argument, and it
- inserts it right *after* rl_point. */
- if (rl_editing_mode == vi_mode)
- {
- rl_vi_append_mode ();
- rl_insert_text (" ");
- }
-#endif /* VI_MODE */
-
- rl_insert_text (arg);
- free (arg);
-
- rl_end_undo_group ();
- return 0;
-}
-
-/* Yank the last argument from the previous history line. This `knows'
- how rl_yank_nth_arg treats a count of `$'. With an argument, this
- behaves the same as rl_yank_nth_arg. */
-int
-rl_yank_last_arg (count, key)
- int count, key;
-{
- if (rl_explicit_arg)
- return (rl_yank_nth_arg (count, key));
- else
- return (rl_yank_nth_arg ('$', key));
-}
diff --git a/contrib/libreadline/macro.c b/contrib/libreadline/macro.c
deleted file mode 100644
index f3c442b41c35..000000000000
--- a/contrib/libreadline/macro.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/* macro.c -- keyboard macros 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, 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> /* for _POSIX_VERSION */
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <stdio.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
-
-/* Forward definitions. */
-void _rl_push_executing_macro (), _rl_pop_executing_macro ();
-void _rl_add_macro_char ();
-
-/* Extern declarations. */
-extern int rl_explicit_arg;
-extern int rl_key_sequence_length;
-
-extern void _rl_abort_internal ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Hacking Keyboard Macros */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means to save keys that we dispatch on in a kbd macro. */
-int _rl_defining_kbd_macro = 0;
-
-/* The currently executing macro string. If this is non-zero,
- then it is a malloc ()'ed string where input is coming from. */
-char *_rl_executing_macro = (char *)NULL;
-
-/* The offset in the above string to the next character to be read. */
-static int executing_macro_index;
-
-/* The current macro string being built. Characters get stuffed
- in here by add_macro_char (). */
-static char *current_macro = (char *)NULL;
-
-/* The size of the buffer allocated to current_macro. */
-static int current_macro_size;
-
-/* The index at which characters are being added to current_macro. */
-static int current_macro_index;
-
-/* A structure used to save nested macro strings.
- It is a linked list of string/index for each saved macro. */
-struct saved_macro {
- struct saved_macro *next;
- char *string;
- int sindex;
-};
-
-/* The list of saved macros. */
-static struct saved_macro *macro_list = (struct saved_macro *)NULL;
-
-/* Set up to read subsequent input from STRING.
- STRING is free ()'ed when we are done with it. */
-void
-_rl_with_macro_input (string)
- char *string;
-{
- _rl_push_executing_macro ();
- _rl_executing_macro = string;
- executing_macro_index = 0;
-}
-
-/* Return the next character available from a macro, or 0 if
- there are no macro characters. */
-int
-_rl_next_macro_key ()
-{
- if (_rl_executing_macro == 0)
- return (0);
-
- if (_rl_executing_macro[executing_macro_index] == 0)
- {
- _rl_pop_executing_macro ();
- return (_rl_next_macro_key ());
- }
-
- return (_rl_executing_macro[executing_macro_index++]);
-}
-
-/* Save the currently executing macro on a stack of saved macros. */
-void
-_rl_push_executing_macro ()
-{
- struct saved_macro *saver;
-
- saver = (struct saved_macro *)xmalloc (sizeof (struct saved_macro));
- saver->next = macro_list;
- saver->sindex = executing_macro_index;
- saver->string = _rl_executing_macro;
-
- macro_list = saver;
-}
-
-/* Discard the current macro, replacing it with the one
- on the top of the stack of saved macros. */
-void
-_rl_pop_executing_macro ()
-{
- struct saved_macro *macro;
-
- if (_rl_executing_macro)
- free (_rl_executing_macro);
-
- _rl_executing_macro = (char *)NULL;
- executing_macro_index = 0;
-
- if (macro_list)
- {
- macro = macro_list;
- _rl_executing_macro = macro_list->string;
- executing_macro_index = macro_list->sindex;
- macro_list = macro_list->next;
- free (macro);
- }
-}
-
-/* Add a character to the macro being built. */
-void
-_rl_add_macro_char (c)
- int c;
-{
- if (current_macro_index + 1 >= current_macro_size)
- {
- if (current_macro == 0)
- current_macro = xmalloc (current_macro_size = 25);
- else
- current_macro = xrealloc (current_macro, current_macro_size += 25);
- }
-
- current_macro[current_macro_index++] = c;
- current_macro[current_macro_index] = '\0';
-}
-
-void
-_rl_kill_kbd_macro ()
-{
- if (current_macro)
- {
- free (current_macro);
- current_macro = (char *) NULL;
- }
- current_macro_size = current_macro_index = 0;
-
- if (_rl_executing_macro)
- {
- free (_rl_executing_macro);
- _rl_executing_macro = (char *) NULL;
- }
- executing_macro_index = 0;
-
- _rl_defining_kbd_macro = 0;
-}
-
-/* Begin defining a keyboard macro.
- Keystrokes are recorded as they are executed.
- End the definition with rl_end_kbd_macro ().
- If a numeric argument was explicitly typed, then append this
- definition to the end of the existing macro, and start by
- re-executing the existing macro. */
-int
-rl_start_kbd_macro (ignore1, ignore2)
- int ignore1, ignore2;
-{
- if (_rl_defining_kbd_macro)
- {
- _rl_abort_internal ();
- return -1;
- }
-
- if (rl_explicit_arg)
- {
- if (current_macro)
- _rl_with_macro_input (savestring (current_macro));
- }
- else
- current_macro_index = 0;
-
- _rl_defining_kbd_macro = 1;
- return 0;
-}
-
-/* Stop defining a keyboard macro.
- A numeric argument says to execute the macro right now,
- that many times, counting the definition as the first time. */
-int
-rl_end_kbd_macro (count, ignore)
- int count, ignore;
-{
- if (_rl_defining_kbd_macro == 0)
- {
- _rl_abort_internal ();
- return -1;
- }
-
- current_macro_index -= rl_key_sequence_length - 1;
- current_macro[current_macro_index] = '\0';
-
- _rl_defining_kbd_macro = 0;
-
- return (rl_call_last_kbd_macro (--count, 0));
-}
-
-/* Execute the most recently defined keyboard macro.
- COUNT says how many times to execute it. */
-int
-rl_call_last_kbd_macro (count, ignore)
- int count, ignore;
-{
- if (current_macro == 0)
- _rl_abort_internal ();
-
- if (_rl_defining_kbd_macro)
- {
- ding (); /* no recursive macros */
- current_macro[--current_macro_index] = '\0'; /* erase this char */
- return 0;
- }
-
- while (count--)
- _rl_with_macro_input (savestring (current_macro));
- return 0;
-}
-
-void
-rl_push_macro_input (macro)
- char *macro;
-{
- _rl_with_macro_input (macro);
-}
diff --git a/contrib/libreadline/nls.c b/contrib/libreadline/nls.c
deleted file mode 100644
index fad520197c41..000000000000
--- a/contrib/libreadline/nls.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* nls.c -- skeletal internationalization code. */
-
-/* Copyright (C) 1996 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_LOCALE_H)
-# include <locale.h>
-#endif
-
-#include <ctype.h>
-
-#include "rldefs.h"
-
-extern int _rl_convert_meta_chars_to_ascii;
-extern int _rl_output_meta_chars;
-extern int _rl_meta_flag;
-
-/* A list of legal values for the LANG or LC_CTYPE environment variables.
- If a locale name in this list is the value for the LC_ALL, LC_CTYPE,
- or LANG environment variable (using the first of those with a value),
- readline eight-bit mode is enabled. */
-static char *legal_lang_values[] =
-{
- "iso88591",
- "iso88592",
- "iso88593",
- "iso88594",
- "iso88595",
- "iso88596",
- "iso88597",
- "iso88598",
- "iso88599",
- "iso885910",
- "koi8r",
- 0
-};
-
-static char *normalize_codeset ();
-static char *find_codeset ();
-
-/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
- to decide the defaults for 8-bit character input and output. Returns
- 1 if we set eight-bit mode. */
-int
-_rl_init_eightbit ()
-{
- char *lspec, *t;
- int i;
-
- lspec = getenv ("LC_ALL");
- if (lspec == 0) lspec = getenv ("LC_CTYPE");
- if (lspec == 0) lspec = getenv ("LANG");
- if (lspec == 0 || (t = normalize_codeset (lspec)) == 0)
- return (0);
- for (i = 0; t && legal_lang_values[i]; i++)
- if (STREQ (t, legal_lang_values[i]))
- {
- _rl_meta_flag = 1;
- _rl_convert_meta_chars_to_ascii = 0;
- _rl_output_meta_chars = 1;
-#if defined (HAVE_SETLOCALE)
- setlocale (LC_CTYPE, lspec);
-#endif
- break;
- }
- free (t);
- return (legal_lang_values[i] ? 1 : 0);
-}
-
-static char *
-normalize_codeset (codeset)
- char *codeset;
-{
- size_t namelen, i;
- int len, all_digits;
- char *wp, *retval;
-
- codeset = find_codeset (codeset, &namelen);
-
- if (codeset == 0)
- return (codeset);
-
- all_digits = 1;
- for (len = 0, i = 0; i < namelen; i++)
- {
- if (isalnum (codeset[i]))
- {
- len++;
- all_digits &= isdigit (codeset[i]);
- }
- }
-
- retval = (char *)malloc ((all_digits ? 3 : 0) + len + 1);
- if (retval == 0)
- return ((char *)0);
-
- wp = retval;
- /* Add `iso' to beginning of an all-digit codeset */
- if (all_digits)
- {
- *wp++ = 'i';
- *wp++ = 's';
- *wp++ = 'o';
- }
-
- for (i = 0; i < namelen; i++)
- if (isalpha (codeset[i]))
- *wp++ = (isupper (codeset[i])) ? tolower (codeset[i]) : codeset[i];
- else if (isdigit (codeset[i]))
- *wp++ = codeset[i];
- *wp = '\0';
-
- return retval;
-}
-
-/* Isolate codeset portion of locale specification. */
-static char *
-find_codeset (name, lenp)
- char *name;
- size_t *lenp;
-{
- char *cp, *language, *result;
-
- cp = language = name;
- result = (char *)0;
-
- while (*cp && *cp != '_' && *cp != '@' && *cp != '+' && *cp != ',')
- cp++;
-
- /* This does not make sense: language has to be specified. As
- an exception we allow the variable to contain only the codeset
- name. Perhaps there are funny codeset names. */
- if (language == cp)
- {
- *lenp = strlen (language);
- result = language;
- }
- else
- {
- /* Next is the territory. */
- if (*cp == '_')
- do
- ++cp;
- while (*cp && *cp != '.' && *cp != '@' && *cp != '+' && *cp != ',' && *cp != '_');
-
- /* Now, finally, is the codeset. */
- result = cp;
- if (*cp == '.')
- do
- ++cp;
- while (*cp && *cp != '@');
-
- if (cp - result > 2)
- {
- result++;
- *lenp = cp - result;
- }
- else
- {
- *lenp = strlen (language);
- result = language;
- }
- }
-
- return result;
-}
diff --git a/contrib/libreadline/parens.c b/contrib/libreadline/parens.c
deleted file mode 100644
index 50683f95dc1b..000000000000
--- a/contrib/libreadline/parens.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* parens.c -- Implementation of matching parentheses feature. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#include "rlconf.h"
-
-#if !defined (PAREN_MATCHING)
-extern int rl_insert ();
-
-int
-rl_insert_close (count, invoking_key)
- int count, invoking_key;
-{
- return (rl_insert (count, invoking_key));
-}
-
-#else /* PAREN_MATCHING */
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#if defined (FD_SET) && !defined (HAVE_SELECT)
-# define HAVE_SELECT
-#endif
-
-#if defined (HAVE_SELECT)
-# include <sys/time.h>
-#endif /* HAVE_SELECT */
-#if defined (HAVE_SYS_SELECT_H)
-# include <sys/select.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-#include "readline.h"
-
-extern int rl_explicit_arg;
-
-/* Non-zero means try to blink the matching open parenthesis when the
- close parenthesis is inserted. */
-#if defined (HAVE_SELECT)
-int rl_blink_matching_paren = 1;
-#else /* !HAVE_SELECT */
-int rl_blink_matching_paren = 0;
-#endif /* !HAVE_SELECT */
-
-static int find_matching_open ();
-
-int
-rl_insert_close (count, invoking_key)
- int count, invoking_key;
-{
- if (rl_explicit_arg || !rl_blink_matching_paren)
- rl_insert (count, invoking_key);
- else
- {
-#if defined (HAVE_SELECT)
- int orig_point, match_point, ready;
- struct timeval timer;
- fd_set readfds;
-
- rl_insert (1, invoking_key);
- (*rl_redisplay_function) ();
- match_point =
- find_matching_open (rl_line_buffer, rl_point - 2, invoking_key);
-
- /* Emacs might message or ring the bell here, but I don't. */
- if (match_point < 0)
- return -1;
-
- FD_ZERO (&readfds);
- FD_SET (fileno (rl_instream), &readfds);
- timer.tv_sec = 1;
- timer.tv_usec = 500;
-
- orig_point = rl_point;
- rl_point = match_point;
- (*rl_redisplay_function) ();
- ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer);
- rl_point = orig_point;
-#else /* !HAVE_SELECT */
- rl_insert (count, invoking_key);
-#endif /* !HAVE_SELECT */
- }
- return 0;
-}
-
-static int
-find_matching_open (string, from, closer)
- char *string;
- int from, closer;
-{
- register int i;
- int opener, level, delimiter;
-
- switch (closer)
- {
- case ']': opener = '['; break;
- case '}': opener = '{'; break;
- case ')': opener = '('; break;
- default:
- return (-1);
- }
-
- level = 1; /* The closer passed in counts as 1. */
- delimiter = 0; /* Delimited state unknown. */
-
- for (i = from; i > -1; i--)
- {
- if (delimiter && (string[i] == delimiter))
- delimiter = 0;
- else if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, string[i]))
- delimiter = string[i];
- else if (!delimiter && (string[i] == closer))
- level++;
- else if (!delimiter && (string[i] == opener))
- level--;
-
- if (!level)
- break;
- }
- return (i);
-}
-
-#endif /* PAREN_MATCHING */
diff --git a/contrib/libreadline/posixdir.h b/contrib/libreadline/posixdir.h
deleted file mode 100644
index 8b0e5bcb6ce2..000000000000
--- a/contrib/libreadline/posixdir.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* posixdir.h -- Posix directory reading includes and defines. */
-
-/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
-
- This file is part of GNU Bash, the Bourne Again SHell.
-
- Bash is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
-
-#if !defined (_POSIXDIR_H_)
-#define _POSIXDIR_H_
-
-#if defined (HAVE_DIRENT_H)
-# include <dirent.h>
-# define D_NAMLEN(d) (strlen ((d)->d_name))
-#else
-# if defined (HAVE_SYS_NDIR_H)
-# include <sys/ndir.h>
-# endif
-# if defined (HAVE_SYS_DIR_H)
-# include <sys/dir.h>
-# endif
-# if defined (HAVE_NDIR_H)
-# include <ndir.h>
-# endif
-# if !defined (dirent)
-# define dirent direct
-# endif /* !dirent */
-# define D_NAMLEN(d) ((d)->d_namlen)
-#endif /* !HAVE_DIRENT_H */
-
-#if defined (STRUCT_DIRENT_HAS_D_INO)
-# define d_fileno d_ino
-#endif
-
-#endif /* !_POSIXDIR_H_ */
diff --git a/contrib/libreadline/posixstat.h b/contrib/libreadline/posixstat.h
deleted file mode 100644
index bfce8c04fef1..000000000000
--- a/contrib/libreadline/posixstat.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* posixstat.h -- Posix stat(2) definitions for systems that
- don't have them. */
-
-/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
-
- This file is part of GNU Bash, the Bourne Again SHell.
-
- Bash is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This file should be included instead of <sys/stat.h>.
- It relies on the local sys/stat.h to work though. */
-#if !defined (_POSIXSTAT_H_)
-#define _POSIXSTAT_H_
-
-#include <sys/stat.h>
-
-#if defined (STAT_MACROS_BROKEN)
-# undef S_ISBLK
-# undef S_ISCHR
-# undef S_ISDIR
-# undef S_ISFIFO
-# undef S_ISREG
-# undef S_ISLNK
-#endif /* STAT_MACROS_BROKEN */
-
-/* These are guaranteed to work only on isc386 */
-#if !defined (S_IFDIR) && !defined (S_ISDIR)
-# define S_IFDIR 0040000
-#endif /* !S_IFDIR && !S_ISDIR */
-#if !defined (S_IFMT)
-# define S_IFMT 0170000
-#endif /* !S_IFMT */
-
-/* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */
-
-/* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
- do not provide the S_IS* macros that Posix requires. */
-
-#if defined (_S_IFMT) && !defined (S_IFMT)
-#define S_IFMT _S_IFMT
-#endif
-#if defined (_S_IFIFO) && !defined (S_IFIFO)
-#define S_IFIFO _S_IFIFO
-#endif
-#if defined (_S_IFCHR) && !defined (S_IFCHR)
-#define S_IFCHR _S_IFCHR
-#endif
-#if defined (_S_IFDIR) && !defined (S_IFDIR)
-#define S_IFDIR _S_IFDIR
-#endif
-#if defined (_S_IFBLK) && !defined (S_IFBLK)
-#define S_IFBLK _S_IFBLK
-#endif
-#if defined (_S_IFREG) && !defined (S_IFREG)
-#define S_IFREG _S_IFREG
-#endif
-#if defined (_S_IFLNK) && !defined (S_IFLNK)
-#define S_IFLNK _S_IFLNK
-#endif
-#if defined (_S_IFSOCK) && !defined (S_IFSOCK)
-#define S_IFSOCK _S_IFSOCK
-#endif
-
-/* Test for each symbol individually and define the ones necessary (some
- systems claiming Posix compatibility define some but not all). */
-
-#if defined (S_IFBLK) && !defined (S_ISBLK)
-#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */
-#endif
-
-#if defined (S_IFCHR) && !defined (S_ISCHR)
-#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */
-#endif
-
-#if defined (S_IFDIR) && !defined (S_ISDIR)
-#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */
-#endif
-
-#if defined (S_IFREG) && !defined (S_ISREG)
-#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */
-#endif
-
-#if defined (S_IFIFO) && !defined (S_ISFIFO)
-#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */
-#endif
-
-#if defined (S_IFLNK) && !defined (S_ISLNK)
-#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */
-#endif
-
-#if defined (S_IFSOCK) && !defined (S_ISSOCK)
-#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */
-#endif
-
-/*
- * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes
- */
-
-#if !defined (S_IRWXU)
-# if !defined (S_IREAD)
-# define S_IREAD 00400
-# define S_IWRITE 00200
-# define S_IEXEC 00100
-# endif /* S_IREAD */
-
-# if !defined (S_IRUSR)
-# define S_IRUSR S_IREAD /* read, owner */
-# define S_IWUSR S_IWRITE /* write, owner */
-# define S_IXUSR S_IEXEC /* execute, owner */
-
-# define S_IRGRP (S_IREAD >> 3) /* read, group */
-# define S_IWGRP (S_IWRITE >> 3) /* write, group */
-# define S_IXGRP (S_IEXEC >> 3) /* execute, group */
-
-# define S_IROTH (S_IREAD >> 6) /* read, other */
-# define S_IWOTH (S_IWRITE >> 6) /* write, other */
-# define S_IXOTH (S_IEXEC >> 6) /* execute, other */
-# endif /* !S_IRUSR */
-
-# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
-# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
-# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
-#endif /* !S_IRWXU */
-
-/* These are non-standard, but are used in builtins.c$symbolic_umask() */
-#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
-#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
-#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
-
-#endif /* _POSIXSTAT_H_ */
diff --git a/contrib/libreadline/readline.c b/contrib/libreadline/readline.c
deleted file mode 100644
index d85789d59092..000000000000
--- a/contrib/libreadline/readline.c
+++ /dev/null
@@ -1,2003 +0,0 @@
-/* readline.c -- a general facility for reading lines of input
- with emacs style editing and completion. */
-
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
-
- 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include "posixstat.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 */
-
-#if defined (HAVE_LOCALE_H)
-# include <locale.h>
-#endif
-
-#include <signal.h>
-#include <stdio.h>
-#include <setjmp.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-#include "tcap.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
-
-/* NOTE: Functions and variables prefixed with `_rl_' are
- pseudo-global: they are global so they can be shared
- between files in the readline library, but are not intended
- to be visible to readline callers. */
-
-/* Variables and functions imported from terminal.c */
-extern int _rl_init_terminal_io ();
-extern void _rl_enable_meta_key ();
-extern int _rl_output_character_function ();
-extern void _rl_get_screen_size ();
-
-extern int _rl_enable_meta;
-extern int _rl_term_autowrap;
-extern char *term_backspace, *term_clreol, *term_clrpag;
-extern int screenwidth, screenheight, screenchars;
-
-/* Variables and functions imported from rltty.c. */
-extern void rl_prep_terminal (), rl_deprep_terminal ();
-extern void rltty_set_default_bindings ();
-
-/* Functions imported from util.c. */
-extern void _rl_abort_internal ();
-extern void rl_extend_line_buffer ();
-extern int alphabetic ();
-
-/* Functions imported from bind.c. */
-extern void _rl_bind_if_unbound ();
-extern int rl_set_keymap_from_edit_mode ();
-
-/* Functions imported from input.c. */
-extern int _rl_any_typein ();
-extern void _rl_insert_typein ();
-extern int rl_read_key ();
-
-/* Functions imported from nls.c */
-extern int _rl_init_eightbit ();
-
-/* External redisplay functions and variables from display.c */
-extern void _rl_move_vert ();
-extern void _rl_update_final ();
-
-extern void _rl_erase_at_end_of_line ();
-extern void _rl_move_cursor_relative ();
-
-extern int _rl_vis_botlin;
-extern int _rl_last_c_pos;
-extern int _rl_horizontal_scroll_mode;
-extern int rl_display_fixed;
-extern int _rl_suppress_redisplay;
-extern char *rl_display_prompt;
-
-/* Variables imported from complete.c. */
-extern char *rl_completer_word_break_characters;
-extern char *rl_basic_word_break_characters;
-extern int rl_completion_query_items;
-extern int rl_complete_with_tilde_expansion;
-
-/* Variables and functions from macro.c. */
-extern void _rl_add_macro_char ();
-extern void _rl_with_macro_input ();
-extern int _rl_next_macro_key ();
-extern int _rl_defining_kbd_macro;
-
-#if defined (VI_MODE)
-/* Functions imported from vi_mode.c. */
-extern void _rl_vi_set_last ();
-extern void _rl_vi_reset_last ();
-extern void _rl_vi_done_inserting ();
-extern int _rl_vi_textmod_command ();
-extern void _rl_vi_initialize_line ();
-#endif /* VI_MODE */
-
-extern UNDO_LIST *rl_undo_list;
-extern int _rl_doing_an_undo;
-
-/* Forward declarations used in this file. */
-void _rl_free_history_entry ();
-
-int _rl_dispatch ();
-int _rl_init_argument ();
-
-static char *readline_internal ();
-static void readline_initialize_everything ();
-static void start_using_history ();
-static void bind_arrow_keys ();
-
-#if !defined (__GO32__)
-static void readline_default_bindings ();
-#endif /* !__GO32__ */
-
-#if defined (__GO32__)
-# include <pc.h>
-# undef HANDLE_SIGNALS
-#endif /* __GO32__ */
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Line editing input utility */
-/* */
-/* **************************************************************** */
-
-char *rl_library_version = "2.1";
-
-/* A pointer to the keymap that is currently in use.
- By default, it is the standard emacs keymap. */
-Keymap _rl_keymap = emacs_standard_keymap;
-
-/* The current style of editing. */
-int rl_editing_mode = emacs_mode;
-
-/* Non-zero if the previous command was a kill command. */
-int _rl_last_command_was_kill = 0;
-
-/* The current value of the numeric argument specified by the user. */
-int rl_numeric_arg = 1;
-
-/* Non-zero if an argument was typed. */
-int rl_explicit_arg = 0;
-
-/* Temporary value used while generating the argument. */
-int rl_arg_sign = 1;
-
-/* Non-zero means we have been called at least once before. */
-static int rl_initialized;
-
-/* If non-zero, this program is running in an EMACS buffer. */
-static int running_in_emacs;
-
-/* The current offset in the current input line. */
-int rl_point;
-
-/* Mark in the current input line. */
-int rl_mark;
-
-/* Length of the current input line. */
-int rl_end;
-
-/* Make this non-zero to return the current input_line. */
-int rl_done;
-
-/* The last function executed by readline. */
-Function *rl_last_func = (Function *)NULL;
-
-/* Top level environment for readline_internal (). */
-jmp_buf readline_top_level;
-
-/* The streams we interact with. */
-FILE *_rl_in_stream, *_rl_out_stream;
-
-/* The names of the streams that we do input and output to. */
-FILE *rl_instream = (FILE *)NULL;
-FILE *rl_outstream = (FILE *)NULL;
-
-/* Non-zero means echo characters as they are read. */
-int readline_echoing_p = 1;
-
-/* Current prompt. */
-char *rl_prompt;
-int rl_visible_prompt_length = 0;
-
-/* The number of characters read in order to type this complete command. */
-int rl_key_sequence_length = 0;
-
-/* If non-zero, then this is the address of a function to call just
- before readline_internal () prints the first prompt. */
-Function *rl_startup_hook = (Function *)NULL;
-
-/* What we use internally. You should always refer to RL_LINE_BUFFER. */
-static char *the_line;
-
-/* The character that can generate an EOF. Really read from
- the terminal driver... just defaulted here. */
-int _rl_eof_char = CTRL ('D');
-
-/* Non-zero makes this the next keystroke to read. */
-int rl_pending_input = 0;
-
-/* Pointer to a useful terminal name. */
-char *rl_terminal_name = (char *)NULL;
-
-/* Non-zero means to always use horizontal scrolling in line display. */
-int _rl_horizontal_scroll_mode = 0;
-
-/* Non-zero means to display an asterisk at the starts of history lines
- which have been modified. */
-int _rl_mark_modified_lines = 0;
-
-/* The style of `bell' notification preferred. This can be set to NO_BELL,
- AUDIBLE_BELL, or VISIBLE_BELL. */
-int _rl_bell_preference = AUDIBLE_BELL;
-
-/* String inserted into the line by rl_insert_comment (). */
-char *_rl_comment_begin;
-
-/* Keymap holding the function currently being executed. */
-Keymap rl_executing_keymap;
-
-/* Line buffer and maintenence. */
-char *rl_line_buffer = (char *)NULL;
-int rl_line_buffer_len = 0;
-
-/* Forward declarations used by the display and termcap code. */
-
-/* **************************************************************** */
-/* */
-/* `Forward' declarations */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means do not parse any lines other than comments and
- parser directives. */
-unsigned char _rl_parsing_conditionalized_out = 0;
-
-/* Non-zero means to convert characters with the meta bit set to
- escape-prefixed characters so we can indirect through
- emacs_meta_keymap or vi_escape_keymap. */
-int _rl_convert_meta_chars_to_ascii = 1;
-
-/* Non-zero means to output characters with the meta bit set directly
- rather than as a meta-prefixed escape sequence. */
-int _rl_output_meta_chars = 0;
-
-/* **************************************************************** */
-/* */
-/* Top Level Functions */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means treat 0200 bit in terminal input as Meta bit. */
-int _rl_meta_flag = 0; /* Forward declaration */
-
-/* Read a line of input. Prompt with PROMPT. An empty PROMPT means
- none. A return value of NULL means that EOF was encountered. */
-char *
-readline (prompt)
- char *prompt;
-{
- char *value;
-
- rl_prompt = prompt;
-
- /* If we are at EOF return a NULL string. */
- if (rl_pending_input == EOF)
- {
- rl_pending_input = 0;
- return ((char *)NULL);
- }
-
- rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
-
- rl_initialize ();
- (*rl_prep_term_function) (_rl_meta_flag);
-
-#if defined (HANDLE_SIGNALS)
- rl_set_signals ();
-#endif
-
- value = readline_internal ();
- (*rl_deprep_term_function) ();
-
-#if defined (HANDLE_SIGNALS)
- rl_clear_signals ();
-#endif
-
- return (value);
-}
-
-#if defined (READLINE_CALLBACKS)
-# define STATIC_CALLBACK
-#else
-# define STATIC_CALLBACK static
-#endif
-
-STATIC_CALLBACK void
-readline_internal_setup ()
-{
- _rl_in_stream = rl_instream;
- _rl_out_stream = rl_outstream;
-
- if (rl_startup_hook)
- (*rl_startup_hook) ();
-
- if (readline_echoing_p == 0)
- {
- if (rl_prompt)
- {
- fprintf (_rl_out_stream, "%s", rl_prompt);
- fflush (_rl_out_stream);
- }
- }
- else
- {
- rl_on_new_line ();
- (*rl_redisplay_function) ();
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- rl_vi_insertion_mode ();
-#endif /* VI_MODE */
- }
-}
-
-STATIC_CALLBACK char *
-readline_internal_teardown (eof)
- int eof;
-{
- char *temp;
- HIST_ENTRY *entry;
-
- /* Restore the original of this history line, iff the line that we
- are editing was originally in the history, AND the line has changed. */
- entry = current_history ();
-
- if (entry && rl_undo_list)
- {
- temp = savestring (the_line);
- rl_revert_line (1, 0);
- entry = replace_history_entry (where_history (), the_line, (HIST_ENTRY *)NULL);
- _rl_free_history_entry (entry);
-
- strcpy (the_line, temp);
- free (temp);
- }
-
- /* At any rate, it is highly likely that this line has an undo list. Get
- rid of it now. */
- if (rl_undo_list)
- free_undo_list ();
-
- return (eof ? (char *)NULL : savestring (the_line));
-}
-
-STATIC_CALLBACK int
-#if defined (READLINE_CALLBACKS)
-readline_internal_char ()
-#else
-readline_internal_charloop ()
-#endif
-{
- static int lastc, eof_found;
- int c, code, lk;
-
- lastc = -1;
- eof_found = 0;
-
-#if !defined (READLINE_CALLBACKS)
- while (rl_done == 0)
- {
-#endif
- lk = _rl_last_command_was_kill;
-
- code = setjmp (readline_top_level);
-
- if (code)
- (*rl_redisplay_function) ();
-
- if (rl_pending_input == 0)
- {
- /* Then initialize the argument and number of keys read. */
- _rl_init_argument ();
- rl_key_sequence_length = 0;
- }
-
- c = rl_read_key ();
-
- /* EOF typed to a non-blank line is a <NL>. */
- if (c == EOF && rl_end)
- c = NEWLINE;
-
- /* The character _rl_eof_char typed to blank line, and not as the
- previous character is interpreted as EOF. */
- if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end)
- {
-#if defined (READLINE_CALLBACKS)
- return (rl_done = 1);
-#else
- eof_found = 1;
- break;
-#endif
- }
-
- lastc = c;
- _rl_dispatch (c, _rl_keymap);
-
- /* If there was no change in _rl_last_command_was_kill, then no kill
- has taken place. Note that if input is pending we are reading
- a prefix command, so nothing has changed yet. */
- if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
- _rl_last_command_was_kill = 0;
-
-#if defined (VI_MODE)
- /* In vi mode, when you exit insert mode, the cursor moves back
- over the previous character. We explicitly check for that here. */
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
- rl_vi_check ();
-#endif /* VI_MODE */
-
- if (rl_done == 0)
- (*rl_redisplay_function) ();
-
-#if defined (READLINE_CALLBACKS)
- return 0;
-#else
- }
-
- return (eof_found);
-#endif
-}
-
-#if defined (READLINE_CALLBACKS)
-static int
-readline_internal_charloop ()
-{
- int eof;
-
- while (rl_done == 0)
- eof = readline_internal_char ();
- return (eof);
-}
-#endif /* READLINE_CALLBACKS */
-
-/* Read a line of input from the global rl_instream, doing output on
- the global rl_outstream.
- If rl_prompt is non-null, then that is our prompt. */
-static char *
-readline_internal ()
-{
- int eof;
-
- readline_internal_setup ();
- eof = readline_internal_charloop ();
- return (readline_internal_teardown (eof));
-}
-
-void
-_rl_set_the_line ()
-{
- the_line = rl_line_buffer;
-}
-
-/* Do the command associated with KEY in MAP.
- If the associated command is really a keymap, then read
- another key, and dispatch into that map. */
-int
-_rl_dispatch (key, map)
- register int key;
- Keymap map;
-{
- int r, newkey;
- char *macro;
- Function *func;
-
- if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
- {
- if (map[ESC].type == ISKMAP)
- {
- if (_rl_defining_kbd_macro)
- _rl_add_macro_char (ESC);
- map = FUNCTION_TO_KEYMAP (map, ESC);
- key = UNMETA (key);
- rl_key_sequence_length += 2;
- return (_rl_dispatch (key, map));
- }
- else
- ding ();
- return 0;
- }
-
- if (_rl_defining_kbd_macro)
- _rl_add_macro_char (key);
-
- r = 0;
- switch (map[key].type)
- {
- case ISFUNC:
- func = map[key].function;
- if (func != (Function *)NULL)
- {
- /* Special case rl_do_lowercase_version (). */
- if (func == rl_do_lowercase_version)
- return (_rl_dispatch (_rl_to_lower (key), map));
-
- rl_executing_keymap = map;
-
-#if 0
- _rl_suppress_redisplay = (map[key].function == rl_insert) && _rl_input_available ();
-#endif
-
- r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
-
- /* If we have input pending, then the last command was a prefix
- command. Don't change the state of rl_last_func. Otherwise,
- remember the last command executed in this variable. */
- if (!rl_pending_input)
- rl_last_func = map[key].function;
- }
- else
- {
- _rl_abort_internal ();
- return -1;
- }
- break;
-
- case ISKMAP:
- if (map[key].function != (Function *)NULL)
- {
- rl_key_sequence_length++;
- newkey = rl_read_key ();
- r = _rl_dispatch (newkey, FUNCTION_TO_KEYMAP (map, key));
- }
- else
- {
- _rl_abort_internal ();
- return -1;
- }
- break;
-
- case ISMACR:
- if (map[key].function != (Function *)NULL)
- {
- macro = savestring ((char *)map[key].function);
- _rl_with_macro_input (macro);
- return 0;
- }
- break;
- }
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
-#endif
- return (r);
-}
-
-/* **************************************************************** */
-/* */
-/* Initializations */
-/* */
-/* **************************************************************** */
-
-/* Initliaze readline (and terminal if not already). */
-int
-rl_initialize ()
-{
- /* If we have never been called before, initialize the
- terminal and data structures. */
- if (!rl_initialized)
- {
- readline_initialize_everything ();
- rl_initialized++;
- }
-
- /* Initalize the current line information. */
- rl_point = rl_end = 0;
- the_line = rl_line_buffer;
- the_line[0] = 0;
-
- /* We aren't done yet. We haven't even gotten started yet! */
- rl_done = 0;
-
- /* Tell the history routines what is going on. */
- start_using_history ();
-
- /* Make the display buffer match the state of the line. */
- rl_reset_line_state ();
-
- /* No such function typed yet. */
- rl_last_func = (Function *)NULL;
-
- /* Parsing of key-bindings begins in an enabled state. */
- _rl_parsing_conditionalized_out = 0;
-
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- _rl_vi_initialize_line ();
-#endif
-
- return 0;
-}
-
-/* Initialize the entire state of the world. */
-static void
-readline_initialize_everything ()
-{
- /* Find out if we are running in Emacs. */
- running_in_emacs = getenv ("EMACS") != (char *)0;
-
- /* Set up input and output if they are not already set up. */
- if (!rl_instream)
- rl_instream = stdin;
-
- if (!rl_outstream)
- rl_outstream = stdout;
-
- /* Bind _rl_in_stream and _rl_out_stream immediately. These values
- may change, but they may also be used before readline_internal ()
- is called. */
- _rl_in_stream = rl_instream;
- _rl_out_stream = rl_outstream;
-
- /* Allocate data structures. */
- if (!rl_line_buffer)
- rl_line_buffer = xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
-
- /* Initialize the terminal interface. */
- _rl_init_terminal_io ((char *)NULL);
-
-#if !defined (__GO32__)
- /* Bind tty characters to readline functions. */
- readline_default_bindings ();
-#endif /* !__GO32__ */
-
- /* Initialize the function names. */
- rl_initialize_funmap ();
-
- /* Decide whether we should automatically go into eight-bit mode. */
- _rl_init_eightbit ();
-
- /* Read in the init file. */
- rl_read_init_file ((char *)NULL);
-
- /* XXX */
- if (_rl_horizontal_scroll_mode && _rl_term_autowrap)
- {
- screenwidth--;
- screenchars -= screenheight;
- }
-
- /* Override the effect of any `set keymap' assignments in the
- inputrc file. */
- rl_set_keymap_from_edit_mode ();
-
- /* Try to bind a common arrow key prefix, if not already bound. */
- bind_arrow_keys ();
-
- /* Enable the meta key, if this terminal has one. */
- if (_rl_enable_meta)
- _rl_enable_meta_key ();
-
- /* If the completion parser's default word break characters haven't
- been set yet, then do so now. */
- if (rl_completer_word_break_characters == (char *)NULL)
- rl_completer_word_break_characters = rl_basic_word_break_characters;
-}
-
-/* If this system allows us to look at the values of the regular
- input editing characters, then bind them to their readline
- equivalents, iff the characters are not bound to keymaps. */
-static void
-readline_default_bindings ()
-{
- rltty_set_default_bindings (_rl_keymap);
-}
-
-static void
-bind_arrow_keys_internal ()
-{
- Function *f;
-
- f = rl_function_of_keyseq ("\033[A", _rl_keymap, (int *)NULL);
- if (!f || f == rl_do_lowercase_version)
- {
- _rl_bind_if_unbound ("\033[A", rl_get_previous_history);
- _rl_bind_if_unbound ("\033[B", rl_get_next_history);
- _rl_bind_if_unbound ("\033[C", rl_forward);
- _rl_bind_if_unbound ("\033[D", rl_backward);
- }
-
- f = rl_function_of_keyseq ("\033OA", _rl_keymap, (int *)NULL);
- if (!f || f == rl_do_lowercase_version)
- {
- _rl_bind_if_unbound ("\033OA", rl_get_previous_history);
- _rl_bind_if_unbound ("\033OB", rl_get_next_history);
- _rl_bind_if_unbound ("\033OC", rl_forward);
- _rl_bind_if_unbound ("\033OD", rl_backward);
- }
-}
-
-/* Try and bind the common arrow key prefix after giving termcap and
- the inputrc file a chance to bind them and create `real' keymaps
- for the arrow key prefix. */
-static void
-bind_arrow_keys ()
-{
- Keymap xkeymap;
-
- xkeymap = _rl_keymap;
-
- _rl_keymap = emacs_standard_keymap;
- bind_arrow_keys_internal ();
-
-#if defined (VI_MODE)
- _rl_keymap = vi_movement_keymap;
- bind_arrow_keys_internal ();
-#endif
-
- _rl_keymap = xkeymap;
-}
-
-
-/* **************************************************************** */
-/* */
-/* Numeric Arguments */
-/* */
-/* **************************************************************** */
-
-/* Handle C-u style numeric args, as well as M--, and M-digits. */
-static int
-rl_digit_loop ()
-{
- int key, c, sawminus;
-
- _rl_save_prompt ();
-
- sawminus = 0;
- while (1)
- {
- rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
- key = c = rl_read_key ();
-
- if (_rl_keymap[c].type == ISFUNC &&
- _rl_keymap[c].function == rl_universal_argument)
- {
- rl_numeric_arg *= 4;
- continue;
- }
- c = UNMETA (c);
- if (_rl_digit_p (c))
- {
- rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + c - '0' : c - '0';
- rl_explicit_arg = 1;
- }
- else
- {
- if (c == '-' && rl_explicit_arg == 0)
- {
- rl_numeric_arg = sawminus = 1;
- rl_arg_sign = -1;
- }
- else
- {
- /* Make M-- command equivalent to M--1 command. */
- if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0)
- rl_explicit_arg = 1;
- _rl_restore_prompt ();
- rl_clear_message ();
- return (_rl_dispatch (key, _rl_keymap));
- }
- }
- }
-
- return 0;
-}
-
-/* Add the current digit to the argument in progress. */
-int
-rl_digit_argument (ignore, key)
- int ignore, key;
-{
- rl_pending_input = key;
- return (rl_digit_loop ());
-}
-
-/* What to do when you abort reading an argument. */
-int
-rl_discard_argument ()
-{
- ding ();
- rl_clear_message ();
- _rl_init_argument ();
- return 0;
-}
-
-/* Create a default argument. */
-int
-_rl_init_argument ()
-{
- rl_numeric_arg = rl_arg_sign = 1;
- rl_explicit_arg = 0;
- return 0;
-}
-
-/* C-u, universal argument. Multiply the current argument by 4.
- Read a key. If the key has nothing to do with arguments, then
- dispatch on it. If the key is the abort character then abort. */
-int
-rl_universal_argument (count, key)
- int count, key;
-{
- rl_numeric_arg *= 4;
- return (rl_digit_loop ());
-}
-
-/* **************************************************************** */
-/* */
-/* Insert and Delete */
-/* */
-/* **************************************************************** */
-
-/* Insert a string of text into the line at point. This is the only
- way that you should do insertion. rl_insert () calls this
- function. */
-int
-rl_insert_text (string)
- char *string;
-{
- register int i, l = strlen (string);
-
- if (rl_end + l >= rl_line_buffer_len)
- rl_extend_line_buffer (rl_end + l);
-
- for (i = rl_end; i >= rl_point; i--)
- the_line[i + l] = the_line[i];
- strncpy (the_line + rl_point, string, l);
-
- /* Remember how to undo this if we aren't undoing something. */
- if (!_rl_doing_an_undo)
- {
- /* If possible and desirable, concatenate the undos. */
- if ((l == 1) &&
- rl_undo_list &&
- (rl_undo_list->what == UNDO_INSERT) &&
- (rl_undo_list->end == rl_point) &&
- (rl_undo_list->end - rl_undo_list->start < 20))
- rl_undo_list->end++;
- else
- rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL);
- }
- rl_point += l;
- rl_end += l;
- the_line[rl_end] = '\0';
- return l;
-}
-
-/* Delete the string between FROM and TO. FROM is
- inclusive, TO is not. */
-int
-rl_delete_text (from, to)
- int from, to;
-{
- register char *text;
- register int diff, i;
-
- /* Fix it if the caller is confused. */
- if (from > to)
- SWAP (from, to);
-
- /* fix boundaries */
- if (to > rl_end)
- {
- to = rl_end;
- if (from > to)
- from = to;
- }
-
- text = rl_copy_text (from, to);
-
- /* Some versions of strncpy() can't handle overlapping arguments. */
- diff = to - from;
- for (i = from; i < rl_end - diff; i++)
- the_line[i] = the_line[i + diff];
-
- /* Remember how to undo this delete. */
- if (_rl_doing_an_undo == 0)
- rl_add_undo (UNDO_DELETE, from, to, text);
- else
- free (text);
-
- rl_end -= diff;
- the_line[rl_end] = '\0';
- return (diff);
-}
-
-/* **************************************************************** */
-/* */
-/* Readline character functions */
-/* */
-/* **************************************************************** */
-
-/* This is not a gap editor, just a stupid line input routine. No hair
- is involved in writing any of the functions, and none should be. */
-
-/* Note that:
-
- rl_end is the place in the string that we would place '\0';
- i.e., it is always safe to place '\0' there.
-
- rl_point is the place in the string where the cursor is. Sometimes
- this is the same as rl_end.
-
- Any command that is called interactively receives two arguments.
- The first is a count: the numeric arg pased to this command.
- The second is the key which invoked this command.
-*/
-
-/* **************************************************************** */
-/* */
-/* Movement Commands */
-/* */
-/* **************************************************************** */
-
-/* Note that if you `optimize' the display for these functions, you cannot
- use said functions in other functions which do not do optimizing display.
- I.e., you will have to update the data base for rl_redisplay, and you
- might as well let rl_redisplay do that job. */
-
-/* Move forward COUNT characters. */
-int
-rl_forward (count, key)
- int count, key;
-{
- if (count < 0)
- rl_backward (-count, key);
- else if (count > 0)
- {
- int end = rl_point + count;
-#if defined (VI_MODE)
- int lend = rl_end - (rl_editing_mode == vi_mode);
-#else
- int lend = rl_end;
-#endif
-
- if (end > lend)
- {
- rl_point = lend;
- ding ();
- }
- else
- rl_point = end;
- }
- return 0;
-}
-
-/* Move backward COUNT characters. */
-int
-rl_backward (count, key)
- int count, key;
-{
- if (count < 0)
- rl_forward (-count, key);
- else if (count > 0)
- {
- if (rl_point < count)
- {
- rl_point = 0;
- ding ();
- }
- else
- rl_point -= count;
- }
- return 0;
-}
-
-/* Move to the beginning of the line. */
-int
-rl_beg_of_line (count, key)
- int count, key;
-{
- rl_point = 0;
- return 0;
-}
-
-/* Move to the end of the line. */
-int
-rl_end_of_line (count, key)
- int count, key;
-{
- rl_point = rl_end;
- return 0;
-}
-
-/* Move forward a word. We do what Emacs does. */
-int
-rl_forward_word (count, key)
- int count, key;
-{
- int c;
-
- if (count < 0)
- {
- rl_backward_word (-count, key);
- return 0;
- }
-
- while (count)
- {
- if (rl_point == rl_end)
- return 0;
-
- /* If we are not in a word, move forward until we are in one.
- Then, move forward until we hit a non-alphabetic character. */
- c = the_line[rl_point];
- if (alphabetic (c) == 0)
- {
- while (++rl_point < rl_end)
- {
- c = the_line[rl_point];
- if (alphabetic (c))
- break;
- }
- }
- if (rl_point == rl_end)
- return 0;
- while (++rl_point < rl_end)
- {
- c = the_line[rl_point];
- if (alphabetic (c) == 0)
- break;
- }
- --count;
- }
- return 0;
-}
-
-/* Move backward a word. We do what Emacs does. */
-int
-rl_backward_word (count, key)
- int count, key;
-{
- int c;
-
- if (count < 0)
- {
- rl_forward_word (-count, key);
- return 0;
- }
-
- while (count)
- {
- if (!rl_point)
- return 0;
-
- /* Like rl_forward_word (), except that we look at the characters
- just before point. */
-
- c = the_line[rl_point - 1];
- if (alphabetic (c) == 0)
- {
- while (--rl_point)
- {
- c = the_line[rl_point - 1];
- if (alphabetic (c))
- break;
- }
- }
-
- while (rl_point)
- {
- c = the_line[rl_point - 1];
- if (alphabetic (c) == 0)
- break;
- else
- --rl_point;
- }
- --count;
- }
- return 0;
-}
-
-/* Clear the current line. Numeric argument to C-l does this. */
-int
-rl_refresh_line ()
-{
- int curr_line, nleft;
-
- /* Find out whether or not there might be invisible characters in the
- editing buffer. */
- if (rl_display_prompt == rl_prompt)
- nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length;
- else
- nleft = _rl_last_c_pos - screenwidth;
-
- if (nleft > 0)
- curr_line = 1 + nleft / screenwidth;
- else
- curr_line = 0;
-
- _rl_move_vert (curr_line);
- _rl_move_cursor_relative (0, the_line); /* XXX is this right */
-
-#if defined (__GO32__)
- {
- int row, col, width, row_start;
-
- ScreenGetCursor (&row, &col);
- width = ScreenCols ();
- row_start = ScreenPrimary + (row * width);
- memset (row_start + col, 0, (width - col) * 2);
- }
-#else /* !__GO32__ */
- if (term_clreol)
- tputs (term_clreol, 1, _rl_output_character_function);
-#endif /* !__GO32__ */
-
- rl_forced_update_display ();
- rl_display_fixed = 1;
-
- return 0;
-}
-
-/* C-l typed to a line without quoting clears the screen, and then reprints
- the prompt and the current input line. Given a numeric arg, redraw only
- the current line. */
-int
-rl_clear_screen (count, key)
- int count, key;
-{
- if (rl_explicit_arg)
- {
- rl_refresh_line ();
- return 0;
- }
-
-#if !defined (__GO32__)
- if (term_clrpag)
- tputs (term_clrpag, 1, _rl_output_character_function);
- else
-#endif /* !__GO32__ */
- crlf ();
-
- rl_forced_update_display ();
- rl_display_fixed = 1;
-
- return 0;
-}
-
-int
-rl_arrow_keys (count, c)
- int count, c;
-{
- int ch;
-
- ch = rl_read_key ();
-
- switch (_rl_to_upper (ch))
- {
- case 'A':
- rl_get_previous_history (count, ch);
- break;
-
- case 'B':
- rl_get_next_history (count, ch);
- break;
-
- case 'C':
- rl_forward (count, ch);
- break;
-
- case 'D':
- rl_backward (count, ch);
- break;
-
- default:
- ding ();
- }
- return 0;
-}
-
-
-/* **************************************************************** */
-/* */
-/* Text commands */
-/* */
-/* **************************************************************** */
-
-/* Insert the character C at the current location, moving point forward. */
-int
-rl_insert (count, c)
- int count, c;
-{
- register int i;
- char *string;
-
- if (count <= 0)
- return 0;
-
- /* If we can optimize, then do it. But don't let people crash
- readline because of extra large arguments. */
- if (count > 1 && count <= 1024)
- {
- string = xmalloc (1 + count);
-
- for (i = 0; i < count; i++)
- string[i] = c;
-
- string[i] = '\0';
- rl_insert_text (string);
- free (string);
-
- return 0;
- }
-
- if (count > 1024)
- {
- int decreaser;
- char str[1024+1];
-
- for (i = 0; i < 1024; i++)
- str[i] = c;
-
- while (count)
- {
- decreaser = (count > 1024 ? 1024 : count);
- str[decreaser] = '\0';
- rl_insert_text (str);
- count -= decreaser;
- }
-
- return 0;
- }
-
- /* We are inserting a single character.
- If there is pending input, then make a string of all of the
- pending characters that are bound to rl_insert, and insert
- them all. */
- if (_rl_any_typein ())
- _rl_insert_typein (c);
- else
- {
- /* Inserting a single character. */
- char str[2];
-
- str[1] = '\0';
- str[0] = c;
- rl_insert_text (str);
- }
- return 0;
-}
-
-/* Insert the next typed character verbatim. */
-int
-rl_quoted_insert (count, key)
- int count, key;
-{
- int c;
-
- c = rl_read_key ();
- return (rl_insert (count, c));
-}
-
-/* Insert a tab character. */
-int
-rl_tab_insert (count, key)
- int count, key;
-{
- return (rl_insert (count, '\t'));
-}
-
-/* What to do when a NEWLINE is pressed. We accept the whole line.
- KEY is the key that invoked this command. I guess it could have
- meaning in the future. */
-int
-rl_newline (count, key)
- int count, key;
-{
- rl_done = 1;
-
-#if defined (VI_MODE)
- _rl_vi_done_inserting ();
- _rl_vi_reset_last ();
-#endif /* VI_MODE */
-
- if (readline_echoing_p)
- _rl_update_final ();
- return 0;
-}
-
-/* What to do for some uppercase characters, like meta characters,
- and some characters appearing in emacs_ctlx_keymap. This function
- is just a stub, you bind keys to it and the code in _rl_dispatch ()
- is special cased. */
-int
-rl_do_lowercase_version (ignore1, ignore2)
- int ignore1, ignore2;
-{
- return 0;
-}
-
-/* Rubout the character behind point. */
-int
-rl_rubout (count, key)
- int count, key;
-{
- if (count < 0)
- {
- rl_delete (-count, key);
- return 0;
- }
-
- if (!rl_point)
- {
- ding ();
- return -1;
- }
-
- if (count > 1 || rl_explicit_arg)
- {
- int orig_point = rl_point;
- rl_backward (count, key);
- rl_kill_text (orig_point, rl_point);
- }
- else
- {
- int c = the_line[--rl_point];
- rl_delete_text (rl_point, rl_point + 1);
-
- if (rl_point == rl_end && isprint (c) && _rl_last_c_pos)
- {
- int l;
- l = rl_character_len (c, rl_point);
- _rl_erase_at_end_of_line (l);
- }
- }
- return 0;
-}
-
-/* Delete the character under the cursor. Given a numeric argument,
- kill that many characters instead. */
-int
-rl_delete (count, key)
- int count, key;
-{
- if (count < 0)
- return (rl_rubout (-count, key));
-
- if (rl_point == rl_end)
- {
- ding ();
- return -1;
- }
-
- if (count > 1 || rl_explicit_arg)
- {
- int orig_point = rl_point;
- rl_forward (count, key);
- rl_kill_text (orig_point, rl_point);
- rl_point = orig_point;
- return 0;
- }
- else
- return (rl_delete_text (rl_point, rl_point + 1));
-
-}
-
-/* Delete all spaces and tabs around point. */
-int
-rl_delete_horizontal_space (count, ignore)
- int count, ignore;
-{
- int start = rl_point;
-
- while (rl_point && whitespace (the_line[rl_point - 1]))
- rl_point--;
-
- start = rl_point;
-
- while (rl_point < rl_end && whitespace (the_line[rl_point]))
- rl_point++;
-
- if (start != rl_point)
- {
- rl_delete_text (start, rl_point);
- rl_point = start;
- }
- return 0;
-}
-
-#ifndef RL_COMMENT_BEGIN_DEFAULT
-#define RL_COMMENT_BEGIN_DEFAULT "#"
-#endif
-
-/* Turn the current line into a comment in shell history.
- A K*rn shell style function. */
-int
-rl_insert_comment (count, key)
- int count, key;
-{
- rl_beg_of_line (1, key);
- rl_insert_text (_rl_comment_begin ? _rl_comment_begin
- : RL_COMMENT_BEGIN_DEFAULT);
- (*rl_redisplay_function) ();
- rl_newline (1, '\n');
- return (0);
-}
-
-/* **************************************************************** */
-/* */
-/* Changing Case */
-/* */
-/* **************************************************************** */
-
-/* The three kinds of things that we know how to do. */
-#define UpCase 1
-#define DownCase 2
-#define CapCase 3
-
-static int rl_change_case ();
-
-/* Uppercase the word at point. */
-int
-rl_upcase_word (count, key)
- int count, key;
-{
- return (rl_change_case (count, UpCase));
-}
-
-/* Lowercase the word at point. */
-int
-rl_downcase_word (count, key)
- int count, key;
-{
- return (rl_change_case (count, DownCase));
-}
-
-/* Upcase the first letter, downcase the rest. */
-int
-rl_capitalize_word (count, key)
- int count, key;
-{
- return (rl_change_case (count, CapCase));
-}
-
-/* The meaty function.
- Change the case of COUNT words, performing OP on them.
- OP is one of UpCase, DownCase, or CapCase.
- If a negative argument is given, leave point where it started,
- otherwise, leave it where it moves to. */
-static int
-rl_change_case (count, op)
- int count, op;
-{
- register int start, end;
- int inword, c;
-
- start = rl_point;
- rl_forward_word (count, 0);
- end = rl_point;
-
- if (count < 0)
- SWAP (start, end);
-
- /* We are going to modify some text, so let's prepare to undo it. */
- rl_modifying (start, end);
-
- for (inword = 0; start < end; start++)
- {
- c = the_line[start];
- switch (op)
- {
- case UpCase:
- the_line[start] = _rl_to_upper (c);
- break;
-
- case DownCase:
- the_line[start] = _rl_to_lower (c);
- break;
-
- case CapCase:
- the_line[start] = (inword == 0) ? _rl_to_upper (c) : _rl_to_lower (c);
- inword = alphabetic (the_line[start]);
- break;
-
- default:
- ding ();
- return -1;
- }
- }
- rl_point = end;
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* Transposition */
-/* */
-/* **************************************************************** */
-
-/* Transpose the words at point. */
-int
-rl_transpose_words (count, key)
- int count, key;
-{
- char *word1, *word2;
- int w1_beg, w1_end, w2_beg, w2_end;
- int orig_point = rl_point;
-
- if (!count)
- return 0;
-
- /* Find the two words. */
- rl_forward_word (count, key);
- w2_end = rl_point;
- rl_backward_word (1, key);
- w2_beg = rl_point;
- rl_backward_word (count, key);
- w1_beg = rl_point;
- rl_forward_word (1, key);
- w1_end = rl_point;
-
- /* Do some check to make sure that there really are two words. */
- if ((w1_beg == w2_beg) || (w2_beg < w1_end))
- {
- ding ();
- rl_point = orig_point;
- return -1;
- }
-
- /* Get the text of the words. */
- word1 = rl_copy_text (w1_beg, w1_end);
- word2 = rl_copy_text (w2_beg, w2_end);
-
- /* We are about to do many insertions and deletions. Remember them
- as one operation. */
- rl_begin_undo_group ();
-
- /* Do the stuff at word2 first, so that we don't have to worry
- about word1 moving. */
- rl_point = w2_beg;
- rl_delete_text (w2_beg, w2_end);
- rl_insert_text (word1);
-
- rl_point = w1_beg;
- rl_delete_text (w1_beg, w1_end);
- rl_insert_text (word2);
-
- /* This is exactly correct since the text before this point has not
- changed in length. */
- rl_point = w2_end;
-
- /* I think that does it. */
- rl_end_undo_group ();
- free (word1);
- free (word2);
-
- return 0;
-}
-
-/* Transpose the characters at point. If point is at the end of the line,
- then transpose the characters before point. */
-int
-rl_transpose_chars (count, key)
- int count, key;
-{
- char dummy[2];
-
- if (!count)
- return 0;
-
- if (!rl_point || rl_end < 2)
- {
- ding ();
- return -1;
- }
-
- rl_begin_undo_group ();
-
- if (rl_point == rl_end)
- {
- --rl_point;
- count = 1;
- }
- rl_point--;
-
- dummy[0] = the_line[rl_point];
- dummy[1] = '\0';
-
- rl_delete_text (rl_point, rl_point + 1);
-
- rl_point += count;
- if (rl_point > rl_end)
- rl_point = rl_end;
- else if (rl_point < 0)
- rl_point = 0;
- rl_insert_text (dummy);
-
- rl_end_undo_group ();
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* Character Searching */
-/* */
-/* **************************************************************** */
-
-int
-_rl_char_search_internal (count, dir, schar)
- int count, dir, schar;
-{
- int pos, inc;
-
- pos = rl_point;
- inc = (dir < 0) ? -1 : 1;
- while (count)
- {
- if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end))
- {
- ding ();
- return -1;
- }
-
- pos += inc;
- do
- {
- if (rl_line_buffer[pos] == schar)
- {
- count--;
- if (dir < 0)
- rl_point = (dir == BTO) ? pos + 1 : pos;
- else
- rl_point = (dir == FTO) ? pos - 1 : pos;
- break;
- }
- }
- while ((dir < 0) ? pos-- : ++pos < rl_end);
- }
- return (0);
-}
-
-/* Search COUNT times for a character read from the current input stream.
- FDIR is the direction to search if COUNT is non-negative; otherwise
- the search goes in BDIR. */
-static int
-_rl_char_search (count, fdir, bdir)
- int count, fdir, bdir;
-{
- int c;
-
- c = rl_read_key ();
- if (count < 0)
- return (_rl_char_search_internal (-count, bdir, c));
- else
- return (_rl_char_search_internal (count, fdir, c));
-}
-
-int
-rl_char_search (count, key)
- int count, key;
-{
- return (_rl_char_search (count, FFIND, BFIND));
-}
-
-int
-rl_backward_char_search (count, key)
- int count, key;
-{
- return (_rl_char_search (count, BFIND, FFIND));
-}
-
-/* **************************************************************** */
-/* */
-/* History Utilities */
-/* */
-/* **************************************************************** */
-
-/* We already have a history library, and that is what we use to control
- the history features of readline. This is our local interface to
- the history mechanism. */
-
-/* While we are editing the history, this is the saved
- version of the original line. */
-HIST_ENTRY *saved_line_for_history = (HIST_ENTRY *)NULL;
-
-/* Set the history pointer back to the last entry in the history. */
-static void
-start_using_history ()
-{
- using_history ();
- if (saved_line_for_history)
- _rl_free_history_entry (saved_line_for_history);
-
- saved_line_for_history = (HIST_ENTRY *)NULL;
-}
-
-/* Free the contents (and containing structure) of a HIST_ENTRY. */
-void
-_rl_free_history_entry (entry)
- HIST_ENTRY *entry;
-{
- if (entry == 0)
- return;
- if (entry->line)
- free (entry->line);
- free (entry);
-}
-
-/* Perhaps put back the current line if it has changed. */
-int
-maybe_replace_line ()
-{
- HIST_ENTRY *temp;
-
- temp = current_history ();
- /* If the current line has changed, save the changes. */
- if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list))
- {
- temp = replace_history_entry (where_history (), the_line, rl_undo_list);
- free (temp->line);
- free (temp);
- }
- return 0;
-}
-
-/* Put back the saved_line_for_history if there is one. */
-int
-maybe_unsave_line ()
-{
- int line_len;
-
- if (saved_line_for_history)
- {
- line_len = strlen (saved_line_for_history->line);
-
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
-
- strcpy (the_line, saved_line_for_history->line);
- rl_undo_list = (UNDO_LIST *)saved_line_for_history->data;
- _rl_free_history_entry (saved_line_for_history);
- saved_line_for_history = (HIST_ENTRY *)NULL;
- rl_end = rl_point = strlen (the_line);
- }
- else
- ding ();
- return 0;
-}
-
-/* Save the current line in saved_line_for_history. */
-int
-maybe_save_line ()
-{
- if (saved_line_for_history == 0)
- {
- saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
- saved_line_for_history->line = savestring (the_line);
- saved_line_for_history->data = (char *)rl_undo_list;
- }
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* History Commands */
-/* */
-/* **************************************************************** */
-
-/* Meta-< goes to the start of the history. */
-int
-rl_beginning_of_history (count, key)
- int count, key;
-{
- return (rl_get_previous_history (1 + where_history (), key));
-}
-
-/* Meta-> goes to the end of the history. (The current line). */
-int
-rl_end_of_history (count, key)
- int count, key;
-{
- maybe_replace_line ();
- using_history ();
- maybe_unsave_line ();
- return 0;
-}
-
-/* Move down to the next history line. */
-int
-rl_get_next_history (count, key)
- int count, key;
-{
- HIST_ENTRY *temp;
- int line_len;
-
- if (count < 0)
- return (rl_get_previous_history (-count, key));
-
- if (count == 0)
- return 0;
-
- maybe_replace_line ();
-
- temp = (HIST_ENTRY *)NULL;
- while (count)
- {
- temp = next_history ();
- if (!temp)
- break;
- --count;
- }
-
- if (temp == 0)
- maybe_unsave_line ();
- else
- {
- line_len = strlen (temp->line);
-
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
-
- strcpy (the_line, temp->line);
- rl_undo_list = (UNDO_LIST *)temp->data;
- rl_end = rl_point = strlen (the_line);
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- rl_point = 0;
-#endif /* VI_MODE */
- }
- return 0;
-}
-
-/* Get the previous item out of our interactive history, making it the current
- line. If there is no previous history, just ding. */
-int
-rl_get_previous_history (count, key)
- int count, key;
-{
- HIST_ENTRY *old_temp, *temp;
- int line_len;
-
- if (count < 0)
- return (rl_get_next_history (-count, key));
-
- if (count == 0)
- return 0;
-
- /* If we don't have a line saved, then save this one. */
- maybe_save_line ();
-
- /* If the current line has changed, save the changes. */
- maybe_replace_line ();
-
- temp = old_temp = (HIST_ENTRY *)NULL;
- while (count)
- {
- temp = previous_history ();
- if (temp == 0)
- break;
-
- old_temp = temp;
- --count;
- }
-
- /* If there was a large argument, and we moved back to the start of the
- history, that is not an error. So use the last value found. */
- if (!temp && old_temp)
- temp = old_temp;
-
- if (temp == 0)
- ding ();
- else
- {
- line_len = strlen (temp->line);
-
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
-
- strcpy (the_line, temp->line);
- rl_undo_list = (UNDO_LIST *)temp->data;
- rl_end = rl_point = line_len;
-
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- rl_point = 0;
-#endif /* VI_MODE */
- }
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* The Mark and the Region. */
-/* */
-/* **************************************************************** */
-
-/* Set the mark at POSITION. */
-int
-_rl_set_mark_at_pos (position)
- int position;
-{
- if (position > rl_end)
- return -1;
-
- rl_mark = position;
- return 0;
-}
-
-/* A bindable command to set the mark. */
-int
-rl_set_mark (count, key)
- int count, key;
-{
- return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
-}
-
-/* Exchange the position of mark and point. */
-int
-rl_exchange_point_and_mark (count, key)
- int count, key;
-{
- if (rl_mark > rl_end)
- rl_mark = -1;
-
- if (rl_mark == -1)
- {
- ding ();
- return -1;
- }
- else
- SWAP (rl_point, rl_mark);
-
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* Editing Modes */
-/* */
-/* **************************************************************** */
-/* How to toggle back and forth between editing modes. */
-int
-rl_vi_editing_mode (count, key)
- int count, key;
-{
-#if defined (VI_MODE)
- rl_editing_mode = vi_mode;
- rl_vi_insertion_mode ();
-#endif /* VI_MODE */
- return 0;
-}
-
-int
-rl_emacs_editing_mode (count, key)
- int count, key;
-{
- rl_editing_mode = emacs_mode;
- _rl_keymap = emacs_standard_keymap;
- return 0;
-}
diff --git a/contrib/libreadline/readline.h b/contrib/libreadline/readline.h
deleted file mode 100644
index c6db3dfdbdd8..000000000000
--- a/contrib/libreadline/readline.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/* Readline.h -- the names of functions callable from within readline. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_READLINE_H_)
-#define _READLINE_H_
-
-#if defined (READLINE_LIBRARY)
-# include "keymaps.h"
-# include "tilde.h"
-#else
-# include <readline/keymaps.h>
-# include <readline/tilde.h>
-#endif
-
-/* Readline data structures. */
-
-/* Maintaining the state of undo. We remember individual deletes and inserts
- on a chain of things to do. */
-
-/* The actions that undo knows how to undo. Notice that UNDO_DELETE means
- to insert some text, and UNDO_INSERT means to delete some text. I.e.,
- the code tells undo what to undo, not how to undo it. */
-enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
-
-/* What an element of THE_UNDO_LIST looks like. */
-typedef struct undo_list {
- struct undo_list *next;
- int start, end; /* Where the change took place. */
- char *text; /* The text to insert, if undoing a delete. */
- enum undo_code what; /* Delete, Insert, Begin, End. */
-} UNDO_LIST;
-
-/* The current undo list for RL_LINE_BUFFER. */
-extern UNDO_LIST *rl_undo_list;
-
-/* The data structure for mapping textual names to code addresses. */
-typedef struct _funmap {
- char *name;
- Function *function;
-} FUNMAP;
-
-extern FUNMAP **funmap;
-
-/* Functions available to bind to key sequences. */
-extern int
- rl_tilde_expand (), rl_set_mark (), rl_exchange_point_and_mark (),
- rl_beg_of_line (), rl_backward (), rl_delete (), rl_end_of_line (),
- rl_forward (), ding (), rl_newline (), rl_kill_line (),
- rl_copy_region_to_kill (), rl_kill_region (), rl_char_search (),
- rl_clear_screen (), rl_get_next_history (), rl_get_previous_history (),
- rl_quoted_insert (), rl_reverse_search_history (), rl_transpose_chars (),
- rl_unix_line_discard (), rl_unix_word_rubout (),
- rl_yank (), rl_rubout (), rl_backward_word (), rl_kill_word (),
- rl_forward_word (), rl_tab_insert (), rl_yank_pop (), rl_yank_nth_arg (),
- rl_backward_kill_word (), rl_backward_kill_line (), rl_transpose_words (),
- rl_complete (), rl_possible_completions (), rl_insert_completions (),
- rl_do_lowercase_version (), rl_kill_full_line (),
- rl_digit_argument (), rl_universal_argument (), rl_abort (),
- rl_undo_command (), rl_revert_line (), rl_beginning_of_history (),
- rl_end_of_history (), rl_forward_search_history (), rl_insert (),
- rl_upcase_word (), rl_downcase_word (), rl_capitalize_word (),
- rl_restart_output (), rl_re_read_init_file (),
- rl_dump_functions (), rl_dump_variables (), rl_dump_macros (),
- rl_delete_horizontal_space (), rl_history_search_forward (),
- rl_history_search_backward (), rl_tty_status (), rl_yank_last_arg (),
- rl_insert_comment (), rl_backward_char_search (),
- rl_copy_forward_word (), rl_copy_backward_word ();
-
-/* Not available unless readline is compiled -DPAREN_MATCHING. */
-extern int rl_insert_close ();
-
-/* Not available unless READLINE_CALLBACKS is defined. */
-extern void rl_callback_handler_install ();
-extern void rl_callback_read_char ();
-extern void rl_callback_handler_remove ();
-
-/* These are *both* defined even when VI_MODE is not. */
-extern int rl_vi_editing_mode (), rl_emacs_editing_mode ();
-
-/* Non incremental history searching. */
-extern int
- rl_noninc_forward_search (), rl_noninc_reverse_search (),
- rl_noninc_forward_search_again (), rl_noninc_reverse_search_again ();
-
-/* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */
-extern int rl_vi_check (), rl_vi_textmod_command ();
-extern int
- rl_vi_undo (), rl_vi_redo (), rl_vi_tilde_expand (),
- rl_vi_movement_mode (), rl_vi_insertion_mode (), rl_vi_arg_digit (),
- rl_vi_prev_word (), rl_vi_next_word (), rl_vi_char_search (),
- rl_vi_eof_maybe (), rl_vi_append_mode (), rl_vi_put (),
- rl_vi_append_eol (), rl_vi_insert_beg (), rl_vi_delete (),
- rl_vi_first_print (), rl_vi_fword (), rl_vi_fWord (), rl_vi_bword (),
- rl_vi_bWord (), rl_vi_eword (), rl_vi_eWord (), rl_vi_end_word (),
- rl_vi_change_case (), rl_vi_match (), rl_vi_bracktype (),
- rl_vi_change_char (), rl_vi_yank_arg (), rl_vi_search (),
- rl_vi_search_again (), rl_vi_subst (), rl_vi_overstrike (),
- rl_vi_overstrike_delete (), rl_vi_replace(), rl_vi_column (),
- rl_vi_delete_to (), rl_vi_change_to (), rl_vi_yank_to (),
- rl_vi_complete (), rl_vi_fetch_history (), rl_vi_set_mark (),
- rl_vi_goto_mark (), rl_vi_back_to_indent ();
-
-/* Keyboard macro commands. */
-extern int rl_start_kbd_macro (), rl_end_kbd_macro ();
-extern int rl_call_last_kbd_macro ();
-extern void rl_push_macro_input ();
-
-extern int rl_arrow_keys(), rl_refresh_line ();
-
-/* **************************************************************** */
-/* */
-/* Well Published Functions */
-/* */
-/* **************************************************************** */
-
-/* Readline functions. */
-/* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */
-extern char *readline ();
-
-/* These functions are from bind.c. */
-/* rl_add_defun (char *name, Function *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. */
-extern int rl_add_defun ();
-
-extern Keymap rl_make_bare_keymap ();
-extern Keymap rl_copy_keymap ();
-extern Keymap rl_make_keymap ();
-extern void rl_discard_keymap ();
-extern Keymap rl_get_keymap (), rl_get_keymap_by_name ();
-extern void rl_set_keymap ();
-extern char *rl_get_keymap_name ();
-
-extern int rl_bind_key (), rl_bind_key_in_map ();
-extern int rl_unbind_key (), rl_unbind_key_in_map ();
-extern int rl_set_key ();
-extern int rl_generic_bind ();
-extern int rl_parse_and_bind ();
-/* Backwards compatibility, use rl_generic_bind instead. */
-extern int rl_macro_bind (), rl_variable_bind ();
-
-extern int rl_read_init_file ();
-
-extern Function *rl_named_function (), *rl_function_of_keyseq ();
-extern char **rl_invoking_keyseqs (), **rl_invoking_keyseqs_in_map ();
-extern void rl_function_dumper ();
-extern void rl_variable_dumper ();
-extern void rl_macro_dumper ();
-extern void rl_list_funmap_names ();
-
-/* Undocumented in the texinfo manual; not really useful to programs. */
-extern int rl_translate_keyseq ();
-extern void rl_initialize_funmap ();
-
-/* Functions for undoing. */
-extern int rl_begin_undo_group (), rl_end_undo_group ();
-extern void rl_add_undo (), free_undo_list ();
-extern int rl_do_undo ();
-extern int rl_modifying ();
-
-/* Functions for redisplay. */
-extern void rl_redisplay ();
-extern int rl_forced_update_display ();
-extern int rl_clear_message ();
-extern int rl_reset_line_state ();
-extern int rl_on_new_line ();
-
-#if defined (__STDC__) && defined (USE_VARARGS) && defined (PREFER_STDARG)
-extern int rl_message (const char *, ...);
-#else
-extern int rl_message ();
-#endif
-
-/* Undocumented in texinfo manual. */
-extern int rl_character_len ();
-extern int rl_show_char ();
-extern int crlf ();
-
-/* Modifying text. */
-extern int rl_insert_text (), rl_delete_text ();
-extern int rl_kill_text ();
-extern char *rl_copy_text ();
-
-/* `Public' utility functions. */
-extern int rl_reset_terminal ();
-extern int rl_stuff_char ();
-extern int rl_read_key (), rl_getc ();
-
-extern int rl_initialize ();
-
-/* Undocumented. */
-extern int rl_expand_prompt ();
-extern int rl_set_signals (), rl_clear_signals ();
-extern int maybe_save_line (), maybe_unsave_line (), maybe_replace_line ();
-
-/* Completion functions. */
-/* These functions are from complete.c. */
-extern int rl_complete_internal ();
-
-/* Return an array of strings which are the result of repeatadly calling
- FUNC with TEXT. */
-extern char **completion_matches ();
-extern char *username_completion_function ();
-extern char *filename_completion_function ();
-
-/* **************************************************************** */
-/* */
-/* Well Published Variables */
-/* */
-/* **************************************************************** */
-
-/* The version of this incarnation of the readline library. */
-extern char *rl_library_version;
-
-/* The name of the calling program. You should initialize this to
- whatever was in argv[0]. It is used when parsing conditionals. */
-extern char *rl_readline_name;
-
-/* The line buffer that is in use. */
-extern char *rl_line_buffer;
-
-/* The location of point, and end. */
-extern int rl_point, rl_end;
-
-extern int rl_mark;
-
-extern int rl_done;
-
-extern int rl_pending_input;
-
-/* The name of the terminal to use. */
-extern char *rl_terminal_name;
-
-/* The input and output streams. */
-extern FILE *rl_instream, *rl_outstream;
-
-/* If non-zero, then this is the address of a function to call just
- before readline_internal () prints the first prompt. */
-extern Function *rl_startup_hook;
-
-/* The address of a function to call periodically while Readline is
- awaiting character input, or NULL, for no event handling. */
-extern Function *rl_event_hook;
-
-extern Function *rl_getc_function;
-extern VFunction *rl_redisplay_function;
-extern VFunction *rl_prep_term_function;
-extern VFunction *rl_deprep_term_function;
-
-/* Dispatch variables. */
-extern Keymap rl_executing_keymap;
-extern Keymap rl_binding_keymap;
-
-/* Completion variables. */
-/* Pointer to the generator function for completion_matches ().
- NULL means to use filename_entry_function (), the default filename
- completer. */
-extern Function *rl_completion_entry_function;
-
-/* If rl_ignore_some_completions_function is non-NULL it is the address
- of a function to call after all of the possible matches have been
- generated, but before the actual completion is done to the input line.
- The function is called with one argument; a NULL terminated array
- of (char *). If your function removes any of the elements, they
- must be free()'ed. */
-extern Function *rl_ignore_some_completions_function;
-
-/* 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. */
-extern CPPFunction *rl_attempted_completion_function;
-
-/* The basic list of characters that signal a break between words for the
- completer routine. The initial contents of this variable is what
- breaks words in the shell, i.e. "n\"\\'`@$>". */
-extern char *rl_basic_word_break_characters;
-
-/* The list of characters that signal a break between words for
- rl_complete_internal. The default list is the contents of
- rl_basic_word_break_characters. */
-extern char *rl_completer_word_break_characters;
-
-/* List of characters which can be used to quote a substring of the line.
- Completion occurs on the entire substring, and within the substring
- rl_completer_word_break_characters are treated as any other character,
- unless they also appear within this list. */
-extern char *rl_completer_quote_characters;
-
-/* List of quote characters which cause a word break. */
-extern char *rl_basic_quote_characters;
-
-/* List of characters that need to be quoted in filenames by the completer. */
-extern char *rl_filename_quote_characters;
-
-/* List of characters that are word break characters, but should be left
- in TEXT when it is passed to the completion function. The shell uses
- this to help determine what kind of completing to do. */
-extern char *rl_special_prefixes;
-
-/* If non-zero, then this is the address of a function to call when
- completing on a directory name. The function is called with
- the address of a string (the current directory name) as an arg. */
-extern Function *rl_directory_completion_hook;
-
-/* Backwards compatibility with previous versions of readline. */
-#define rl_symbolic_link_hook rl_directory_completion_hook
-
-/* Non-zero means that the results of the matches are to be treated
- as filenames. This is ALWAYS zero on entry, and can only be changed
- within a completion entry finder function. */
-extern int rl_filename_completion_desired;
-
-/* Non-zero means that the results of the matches are to be quoted using
- double quotes (or an application-specific quoting mechanism) if the
- filename contains any characters in rl_word_break_chars. This is
- ALWAYS non-zero on entry, and can only be changed within a completion
- entry finder function. */
-extern int rl_filename_quoting_desired;
-
-/* 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. */
-extern CPFunction *rl_filename_quoting_function;
-
-/* Function to call to remove quoting characters from a filename. Called
- before completion is attempted, so the embedded quotes do not interfere
- with matching names in the file system. */
-extern CPFunction *rl_filename_dequoting_function;
-
-/* Function to call to decide whether or not a word break character is
- quoted. If a character is quoted, it does not break words for the
- completer. */
-extern Function *rl_char_is_quoted_p;
-
-/* Non-zero means to suppress normal filename completion after the
- user-specified completion function has been called. */
-extern int rl_attempted_completion_over;
-
-/* Set to a character describing the type of completion being attempted by
- rl_complete_internal; available for use by application completion
- functions. */
-extern int rl_completion_type;
-
-/* Character appended to completed words when at the end of the line. The
- default is a space. Nothing is added if this is '\0'. */
-extern int rl_completion_append_character;
-
-/* If this is non-zero, completion is (temporarily) inhibited, and the
- completion character will be inserted as any other. */
-extern int rl_inhibit_completion;
-
-/* Definitions available for use by readline clients. */
-#define RL_PROMPT_START_IGNORE '\001'
-#define RL_PROMPT_END_IGNORE '\002'
-
-/* Possible values for do_replace argument to rl_filename_quoting_function,
- called by rl_complete_internal. */
-#define NO_MATCH 0
-#define SINGLE_MATCH 1
-#define MULT_MATCH 2
-
-#if !defined (savestring)
-#define savestring rl_savestring
-extern char *savestring (); /* XXX backwards compatibility */
-#endif
-
-#endif /* _READLINE_H_ */
diff --git a/contrib/libreadline/rlconf.h b/contrib/libreadline/rlconf.h
deleted file mode 100644
index e5594ce27e99..000000000000
--- a/contrib/libreadline/rlconf.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* rlconf.h -- readline configuration definitions */
-
-/* Copyright (C) 1994 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_RLCONF_H_)
-#define _RLCONF_H_
-
-/* Define this if you want the vi-mode editing available. */
-#define VI_MODE
-
-/* Define this to get an indication of file type when listing completions. */
-#define VISIBLE_STATS
-
-/* If defined, readline shows opening parens and braces when closing
- paren or brace entered. */
-#define PAREN_MATCHING
-
-/* This definition is needed by readline.c, rltty.c, and signals.c. */
-/* If on, then readline handles signals in a way that doesn't screw. */
-#define HANDLE_SIGNALS
-
-/* Ugly but working hack for binding prefix meta. */
-#define PREFIX_META_HACK
-
-/* The final, last-ditch effort file name for an init file. */
-#define DEFAULT_INPUTRC "~/.inputrc"
-
-/* If defined, expand tabs to spaces. */
-#define DISPLAY_TABS
-
-/* If defined, use the terminal escape sequence to move the cursor forward
- over a character when updating the line rather than rewriting it. */
-/* #define HACK_TERMCAP_MOTION */
-
-/* The string inserted by the `insert comment' command. */
-#define RL_COMMENT_BEGIN_DEFAULT "#"
-
-/* Define this if you want code that allows readline to be used in an
- X `callback' style. */
-#if !defined (SHELL)
-# define READLINE_CALLBACKS
-#endif
-
-#endif /* _RLCONF_H_ */
diff --git a/contrib/libreadline/rldefs.h b/contrib/libreadline/rldefs.h
deleted file mode 100644
index 5a9e62a75031..000000000000
--- a/contrib/libreadline/rldefs.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* rldefs.h -- an attempt to isolate some of the system-specific defines
- for readline. This should be included after any files that define
- system-specific constants like _POSIX_VERSION or USG. */
-
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_RLDEFS_H_)
-#define _RLDEFS_H_
-
-#if defined (HAVE_CONFIG_H)
-# include "config.h"
-#endif
-
-#if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING)
-# define TERMIOS_TTY_DRIVER
-#else
-# if defined (HAVE_TERMIO_H)
-# define TERMIO_TTY_DRIVER
-# else
-# define NEW_TTY_DRIVER
-# endif
-#endif
-
-#if defined (HAVE_SYS_STREAM_H)
-# include <sys/stream.h>
-#endif /* HAVE_SYS_STREAM_H */
-#if defined (HAVE_SYS_PTEM_H)
-# include <sys/ptem.h>
-# define _IO_PTEM_H /* work around SVR4.2 1.1.4 bug */
-#endif /* HAVE_SYS_PTEM_H */
-#if defined (HAVE_SYS_PTE_H)
-# include <sys/pte.h>
-#endif /* HAVE_SYS_PTE_H */
-
-/* Posix macro to check file in statbuf for directory-ness.
- This requires that <sys/stat.h> be included before this test. */
-#if defined (S_IFDIR) && !defined (S_ISDIR)
-# define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
-#endif
-
-/* Decide which flavor of the header file describing the C library
- string functions to include and include it. */
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#if !defined (strchr) && !defined (__STDC__)
-extern char *strchr (), *strrchr ();
-#endif /* !strchr && !__STDC__ */
-
-#if defined (PREFER_STDARG)
-# include <stdarg.h>
-#else
-# if defined (PREFER_VARARGS)
-# include <varargs.h>
-# endif
-#endif
-
-#if defined (HAVE_STRCASECMP)
-#define _rl_stricmp strcasecmp
-#define _rl_strnicmp strncasecmp
-#else
-extern int _rl_stricmp (), _rl_strnicmp ();
-#endif
-
-#if !defined (emacs_mode)
-# define no_mode -1
-# define vi_mode 0
-# define emacs_mode 1
-#endif
-
-/* If you cast map[key].function to type (Keymap) on a Cray,
- the compiler takes the value of map[key].function and
- divides it by 4 to convert between pointer types (pointers
- to functions and pointers to structs are different sizes).
- This is not what is wanted. */
-#if defined (CRAY)
-# define FUNCTION_TO_KEYMAP(map, key) (Keymap)((int)map[key].function)
-# define KEYMAP_TO_FUNCTION(data) (Function *)((int)(data))
-#else
-# define FUNCTION_TO_KEYMAP(map, key) (Keymap)(map[key].function)
-# define KEYMAP_TO_FUNCTION(data) (Function *)(data)
-#endif
-
-#ifndef savestring
-extern char *xmalloc ();
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
-#endif
-
-/* Possible values for _rl_bell_preference. */
-#define NO_BELL 0
-#define AUDIBLE_BELL 1
-#define VISIBLE_BELL 2
-
-/* Definitions used when searching the line for characters. */
-/* NOTE: it is necessary that opposite directions are inverses */
-#define FTO 1 /* forward to */
-#define BTO -1 /* backward to */
-#define FFIND 2 /* forward find */
-#define BFIND -2 /* backward find */
-
-/* Possible values for the found_quote flags word used by the completion
- functions. It says what kind of (shell-like) quoting we found anywhere
- in the line. */
-#define RL_QF_SINGLE_QUOTE 0x1
-#define RL_QF_DOUBLE_QUOTE 0x2
-#define RL_QF_BACKSLASH 0x4
-
-/* Default readline line buffer length. */
-#define DEFAULT_BUFFER_SIZE 256
-
-#if !defined (STREQ)
-#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
-#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
-#endif
-
-#if !defined (FREE)
-# define FREE(x) if (x) free (x)
-#endif
-
-/* CONFIGURATION SECTION */
-#include "rlconf.h"
-
-#endif /* !_RLDEFS_H_ */
diff --git a/contrib/libreadline/rltty.c b/contrib/libreadline/rltty.c
deleted file mode 100644
index d35eb6ae6196..000000000000
--- a/contrib/libreadline/rltty.c
+++ /dev/null
@@ -1,726 +0,0 @@
-/* rltty.c -- functions to prepare and restore the terminal for readline's
- use. */
-
-/* Copyright (C) 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-#include <stdio.h>
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include "rldefs.h"
-
-#if !defined (SHELL) && defined (GWINSZ_IN_SYS_IOCTL)
-# include <sys/ioctl.h>
-#endif /* !SHELL && GWINSZ_IN_SYS_IOCTL */
-
-#include "rltty.h"
-#include "readline.h"
-
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-extern int readline_echoing_p;
-extern int _rl_eof_char;
-
-extern int _rl_enable_keypad, _rl_enable_meta;
-
-#if defined (__GO32__)
-# include <pc.h>
-# undef HANDLE_SIGNALS
-#endif /* __GO32__ */
-
-/* Indirect functions to allow apps control over terminal management. */
-extern void rl_prep_terminal (), rl_deprep_terminal ();
-
-VFunction *rl_prep_term_function = rl_prep_terminal;
-VFunction *rl_deprep_term_function = rl_deprep_terminal;
-
-/* **************************************************************** */
-/* */
-/* Signal Management */
-/* */
-/* **************************************************************** */
-
-#if defined (HAVE_POSIX_SIGNALS)
-static sigset_t sigint_set, sigint_oset;
-#else /* !HAVE_POSIX_SIGNALS */
-# if defined (HAVE_BSD_SIGNALS)
-static int sigint_oldmask;
-# endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-
-static int sigint_blocked;
-
-/* Cause SIGINT to not be delivered until the corresponding call to
- release_sigint(). */
-static void
-block_sigint ()
-{
- if (sigint_blocked)
- return;
-
-#if defined (HAVE_POSIX_SIGNALS)
- sigemptyset (&sigint_set);
- sigemptyset (&sigint_oset);
- sigaddset (&sigint_set, SIGINT);
- sigprocmask (SIG_BLOCK, &sigint_set, &sigint_oset);
-#else /* !HAVE_POSIX_SIGNALS */
-# if defined (HAVE_BSD_SIGNALS)
- sigint_oldmask = sigblock (sigmask (SIGINT));
-# else /* !HAVE_BSD_SIGNALS */
-# if defined (HAVE_USG_SIGHOLD)
- sighold (SIGINT);
-# endif /* HAVE_USG_SIGHOLD */
-# endif /* !HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
- sigint_blocked = 1;
-}
-
-/* Allow SIGINT to be delivered. */
-static void
-release_sigint ()
-{
- if (!sigint_blocked)
- return;
-
-#if defined (HAVE_POSIX_SIGNALS)
- sigprocmask (SIG_SETMASK, &sigint_oset, (sigset_t *)NULL);
-#else
-# if defined (HAVE_BSD_SIGNALS)
- sigsetmask (sigint_oldmask);
-# else /* !HAVE_BSD_SIGNALS */
-# if defined (HAVE_USG_SIGHOLD)
- sigrelse (SIGINT);
-# endif /* HAVE_USG_SIGHOLD */
-# endif /* !HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-
- sigint_blocked = 0;
-}
-
-/* **************************************************************** */
-/* */
-/* Saving and Restoring the TTY */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means that the terminal is in a prepped state. */
-static int terminal_prepped;
-
-/* If non-zero, means that this process has called tcflow(fd, TCOOFF)
- and output is suspended. */
-#if defined (__ksr1__)
-static int ksrflow;
-#endif
-
-#if !defined (SHELL) && defined (TIOCGWINSZ)
-/* Dummy call to force a backgrounded readline to stop before it tries
- to get the tty settings. */
-static void
-set_winsize (tty)
- int tty;
-{
- struct winsize w;
-
- if (ioctl (tty, TIOCGWINSZ, &w) == 0)
- (void) ioctl (tty, TIOCSWINSZ, &w);
-}
-#else /* SHELL || !TIOCGWINSZ */
-# define set_winsize(tty)
-#endif /* SHELL || !TIOCGWINSZ */
-
-#if defined (NEW_TTY_DRIVER)
-
-/* Values for the `flags' field of a struct bsdtty. This tells which
- elements of the struct bsdtty have been fetched from the system and
- are valid. */
-#define SGTTY_SET 0x01
-#define LFLAG_SET 0x02
-#define TCHARS_SET 0x04
-#define LTCHARS_SET 0x08
-
-struct bsdtty {
- struct sgttyb sgttyb; /* Basic BSD tty driver information. */
- int lflag; /* Local mode flags, like LPASS8. */
-#if defined (TIOCGETC)
- struct tchars tchars; /* Terminal special characters, including ^S and ^Q. */
-#endif
-#if defined (TIOCGLTC)
- struct ltchars ltchars; /* 4.2 BSD editing characters */
-#endif
- int flags; /* Bitmap saying which parts of the struct are valid. */
-};
-
-#define TIOTYPE struct bsdtty
-
-static TIOTYPE otio;
-
-static int
-get_tty_settings (tty, tiop)
- int tty;
- TIOTYPE *tiop;
-{
- set_winsize (tty);
-
- tiop->flags = tiop->lflag = 0;
-
- ioctl (tty, TIOCGETP, &(tiop->sgttyb));
- tiop->flags |= SGTTY_SET;
-
-#if defined (TIOCLGET)
- ioctl (tty, TIOCLGET, &(tiop->lflag));
- tiop->flags |= LFLAG_SET;
-#endif
-
-#if defined (TIOCGETC)
- ioctl (tty, TIOCGETC, &(tiop->tchars));
- tiop->flags |= TCHARS_SET;
-#endif
-
-#if defined (TIOCGLTC)
- ioctl (tty, TIOCGLTC, &(tiop->ltchars));
- tiop->flags |= LTCHARS_SET;
-#endif
-
- return 0;
-}
-
-static int
-set_tty_settings (tty, tiop)
- int tty;
- TIOTYPE *tiop;
-{
- if (tiop->flags & SGTTY_SET)
- {
- ioctl (tty, TIOCSETN, &(tiop->sgttyb));
- tiop->flags &= ~SGTTY_SET;
- }
- readline_echoing_p = 1;
-
-#if defined (TIOCLSET)
- if (tiop->flags & LFLAG_SET)
- {
- ioctl (tty, TIOCLSET, &(tiop->lflag));
- tiop->flags &= ~LFLAG_SET;
- }
-#endif
-
-#if defined (TIOCSETC)
- if (tiop->flags & TCHARS_SET)
- {
- ioctl (tty, TIOCSETC, &(tiop->tchars));
- tiop->flags &= ~TCHARS_SET;
- }
-#endif
-
-#if defined (TIOCSLTC)
- if (tiop->flags & LTCHARS_SET)
- {
- ioctl (tty, TIOCSLTC, &(tiop->ltchars));
- tiop->flags &= ~LTCHARS_SET;
- }
-#endif
-
- return 0;
-}
-
-static void
-prepare_terminal_settings (meta_flag, otio, tiop)
- int meta_flag;
- TIOTYPE otio, *tiop;
-{
-#if !defined (__GO32__)
- readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
-
- /* Copy the original settings to the structure we're going to use for
- our settings. */
- tiop->sgttyb = otio.sgttyb;
- tiop->lflag = otio.lflag;
-#if defined (TIOCGETC)
- tiop->tchars = otio.tchars;
-#endif
-#if defined (TIOCGLTC)
- tiop->ltchars = otio.ltchars;
-#endif
- tiop->flags = otio.flags;
-
- /* First, the basic settings to put us into character-at-a-time, no-echo
- input mode. */
- tiop->sgttyb.sg_flags &= ~(ECHO | CRMOD);
- tiop->sgttyb.sg_flags |= CBREAK;
-
- /* If this terminal doesn't care how the 8th bit is used, then we can
- use it for the meta-key. If only one of even or odd parity is
- specified, then the terminal is using parity, and we cannot. */
-#if !defined (ANYP)
-# define ANYP (EVENP | ODDP)
-#endif
- if (((otio.sgttyb.sg_flags & ANYP) == ANYP) ||
- ((otio.sgttyb.sg_flags & ANYP) == 0))
- {
- tiop->sgttyb.sg_flags |= ANYP;
-
- /* Hack on local mode flags if we can. */
-#if defined (TIOCLGET)
-# if defined (LPASS8)
- tiop->lflag |= LPASS8;
-# endif /* LPASS8 */
-#endif /* TIOCLGET */
- }
-
-#if defined (TIOCGETC)
-# if defined (USE_XON_XOFF)
- /* Get rid of terminal output start and stop characters. */
- tiop->tchars.t_stopc = -1; /* C-s */
- tiop->tchars.t_startc = -1; /* C-q */
-
- /* If there is an XON character, bind it to restart the output. */
- if (otio.tchars.t_startc != -1)
- rl_bind_key (otio.tchars.t_startc, rl_restart_output);
-# endif /* USE_XON_XOFF */
-
- /* If there is an EOF char, bind _rl_eof_char to it. */
- if (otio.tchars.t_eofc != -1)
- _rl_eof_char = otio.tchars.t_eofc;
-
-# if defined (NO_KILL_INTR)
- /* Get rid of terminal-generated SIGQUIT and SIGINT. */
- tiop->tchars.t_quitc = -1; /* C-\ */
- tiop->tchars.t_intrc = -1; /* C-c */
-# endif /* NO_KILL_INTR */
-#endif /* TIOCGETC */
-
-#if defined (TIOCGLTC)
- /* Make the interrupt keys go away. Just enough to make people happy. */
- tiop->ltchars.t_dsuspc = -1; /* C-y */
- tiop->ltchars.t_lnextc = -1; /* C-v */
-#endif /* TIOCGLTC */
-#endif /* !__GO32__ */
-}
-
-#else /* !defined (NEW_TTY_DRIVER) */
-
-#if !defined (VMIN)
-# define VMIN VEOF
-#endif
-
-#if !defined (VTIME)
-# define VTIME VEOL
-#endif
-
-#if defined (TERMIOS_TTY_DRIVER)
-# define TIOTYPE struct termios
-# define DRAIN_OUTPUT(fd) tcdrain (fd)
-# define GETATTR(tty, tiop) (tcgetattr (tty, tiop))
-# ifdef M_UNIX
-# define SETATTR(tty, tiop) (tcsetattr (tty, TCSANOW, tiop))
-# else
-# define SETATTR(tty, tiop) (tcsetattr (tty, TCSADRAIN, tiop))
-# endif /* !M_UNIX */
-#else
-# define TIOTYPE struct termio
-# define DRAIN_OUTPUT(fd)
-# define GETATTR(tty, tiop) (ioctl (tty, TCGETA, tiop))
-# define SETATTR(tty, tiop) (ioctl (tty, TCSETA, tiop))
-#endif /* !TERMIOS_TTY_DRIVER */
-
-static TIOTYPE otio;
-
-#if defined (FLUSHO)
-# define OUTPUT_BEING_FLUSHED(tp) (tp->c_lflag & FLUSHO)
-#else
-# define OUTPUT_BEING_FLUSHED(tp) 0
-#endif
-
-static void
-rltty_warning (msg)
- char *msg;
-{
- fprintf (stderr, "readline: warning: %s\n", msg);
-}
-
-#if defined (_AIX)
-void
-setopost(tp)
-TIOTYPE *tp;
-{
- if ((tp->c_oflag & OPOST) == 0)
- {
- rltty_warning ("turning on OPOST for terminal\r");
- tp->c_oflag |= OPOST|ONLCR;
- }
-}
-#endif
-
-static int
-get_tty_settings (tty, tiop)
- int tty;
- TIOTYPE *tiop;
-{
- int ioctl_ret;
- set_winsize (tty);
-
- while (1)
- {
- ioctl_ret = GETATTR (tty, tiop);
- if (ioctl_ret < 0)
- {
- if (errno != EINTR)
- return -1;
- else
- continue;
- }
- if (OUTPUT_BEING_FLUSHED (tiop))
- {
-#if defined (FLUSHO) && defined (_AIX41)
- rltty_warning ("turning off output flushing");
- tiop->c_lflag &= ~FLUSHO;
- break;
-#else
- continue;
-#endif
- }
- break;
- }
-
-#if defined (_AIX)
- setopost(tiop);
-#endif
-
- return 0;
-}
-
-static int
-set_tty_settings (tty, tiop)
- int tty;
- TIOTYPE *tiop;
-{
- while (SETATTR (tty, tiop) < 0)
- {
- if (errno != EINTR)
- return -1;
- errno = 0;
- }
-
-#if 0
-
-#if defined (TERMIOS_TTY_DRIVER)
-# if defined (__ksr1__)
- if (ksrflow)
- {
- ksrflow = 0;
- tcflow (tty, TCOON);
- }
-# else /* !ksr1 */
- tcflow (tty, TCOON); /* Simulate a ^Q. */
-# endif /* !ksr1 */
-#else
- ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */
-#endif /* !TERMIOS_TTY_DRIVER */
-
-#endif
-
- return 0;
-}
-
-static void
-prepare_terminal_settings (meta_flag, otio, tiop)
- int meta_flag;
- TIOTYPE otio, *tiop;
-{
- readline_echoing_p = (otio.c_lflag & ECHO);
-
- tiop->c_lflag &= ~(ICANON | ECHO);
-
- if ((unsigned char) otio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE)
- _rl_eof_char = otio.c_cc[VEOF];
-
-#if defined (USE_XON_XOFF)
-#if defined (IXANY)
- tiop->c_iflag &= ~(IXON | IXOFF | IXANY);
-#else
- /* `strict' Posix systems do not define IXANY. */
- tiop->c_iflag &= ~(IXON | IXOFF);
-#endif /* IXANY */
-#endif /* USE_XON_XOFF */
-
- /* Only turn this off if we are using all 8 bits. */
- if (((tiop->c_cflag & CSIZE) == CS8) || meta_flag)
- tiop->c_iflag &= ~(ISTRIP | INPCK);
-
- /* Make sure we differentiate between CR and NL on input. */
- tiop->c_iflag &= ~(ICRNL | INLCR);
-
-#if !defined (HANDLE_SIGNALS)
- tiop->c_lflag &= ~ISIG;
-#else
- tiop->c_lflag |= ISIG;
-#endif
-
- tiop->c_cc[VMIN] = 1;
- tiop->c_cc[VTIME] = 0;
-
-#if defined (FLUSHO)
- if (OUTPUT_BEING_FLUSHED (tiop))
- {
- tiop->c_lflag &= ~FLUSHO;
- otio.c_lflag &= ~FLUSHO;
- }
-#endif
-
- /* Turn off characters that we need on Posix systems with job control,
- just to be sure. This includes ^Y and ^V. This should not really
- be necessary. */
-#if defined (TERMIOS_TTY_DRIVER) && defined (_POSIX_VDISABLE)
-
-#if defined (VLNEXT)
- tiop->c_cc[VLNEXT] = _POSIX_VDISABLE;
-#endif
-
-#if defined (VDSUSP)
- tiop->c_cc[VDSUSP] = _POSIX_VDISABLE;
-#endif
-
-#endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */
-}
-#endif /* NEW_TTY_DRIVER */
-
-/* Put the terminal in CBREAK mode so that we can detect key presses. */
-void
-rl_prep_terminal (meta_flag)
- int meta_flag;
-{
-#if !defined (__GO32__)
- int tty;
- TIOTYPE tio;
-
- if (terminal_prepped)
- return;
-
- /* Try to keep this function from being INTerrupted. */
- block_sigint ();
-
- tty = fileno (rl_instream);
-
- if (get_tty_settings (tty, &tio) < 0)
- {
- release_sigint ();
- return;
- }
-
- otio = tio;
-
- prepare_terminal_settings (meta_flag, otio, &tio);
-
- if (set_tty_settings (tty, &tio) < 0)
- {
- release_sigint ();
- return;
- }
-
- if (_rl_enable_keypad)
- _rl_control_keypad (1);
-
- fflush (rl_outstream);
- terminal_prepped = 1;
-
- release_sigint ();
-#endif /* !__GO32__ */
-}
-
-/* Restore the terminal's normal settings and modes. */
-void
-rl_deprep_terminal ()
-{
-#if !defined (__GO32__)
- int tty;
-
- if (!terminal_prepped)
- return;
-
- /* Try to keep this function from being interrupted. */
- block_sigint ();
-
- tty = fileno (rl_instream);
-
- if (_rl_enable_keypad)
- _rl_control_keypad (0);
-
- fflush (rl_outstream);
-
- if (set_tty_settings (tty, &otio) < 0)
- {
- release_sigint ();
- return;
- }
-
- terminal_prepped = 0;
-
- release_sigint ();
-#endif /* !__GO32__ */
-}
-
-/* **************************************************************** */
-/* */
-/* Bogus Flow Control */
-/* */
-/* **************************************************************** */
-
-int
-rl_restart_output (count, key)
- int count, key;
-{
- int fildes = fileno (rl_outstream);
-#if defined (TIOCSTART)
-#if defined (apollo)
- ioctl (&fildes, TIOCSTART, 0);
-#else
- ioctl (fildes, TIOCSTART, 0);
-#endif /* apollo */
-
-#else /* !TIOCSTART */
-# if defined (TERMIOS_TTY_DRIVER)
-# if defined (__ksr1__)
- if (ksrflow)
- {
- ksrflow = 0;
- tcflow (fildes, TCOON);
- }
-# else /* !ksr1 */
- tcflow (fildes, TCOON); /* Simulate a ^Q. */
-# endif /* !ksr1 */
-# else /* !TERMIOS_TTY_DRIVER */
-# if defined (TCXONC)
- ioctl (fildes, TCXONC, TCOON);
-# endif /* TCXONC */
-# endif /* !TERMIOS_TTY_DRIVER */
-#endif /* !TIOCSTART */
-
- return 0;
-}
-
-int
-rl_stop_output (count, key)
- int count, key;
-{
- int fildes = fileno (rl_instream);
-
-#if defined (TIOCSTOP)
-# if defined (apollo)
- ioctl (&fildes, TIOCSTOP, 0);
-# else
- ioctl (fildes, TIOCSTOP, 0);
-# endif /* apollo */
-#else /* !TIOCSTOP */
-# if defined (TERMIOS_TTY_DRIVER)
-# if defined (__ksr1__)
- ksrflow = 1;
-# endif /* ksr1 */
- tcflow (fildes, TCOOFF);
-# else
-# if defined (TCXONC)
- ioctl (fildes, TCXONC, TCOON);
-# endif /* TCXONC */
-# endif /* !TERMIOS_TTY_DRIVER */
-#endif /* !TIOCSTOP */
-
- return 0;
-}
-
-/* **************************************************************** */
-/* */
-/* Default Key Bindings */
-/* */
-/* **************************************************************** */
-void
-rltty_set_default_bindings (kmap)
- Keymap kmap;
-{
- TIOTYPE ttybuff;
- int tty = fileno (rl_instream);
-
-#if defined (NEW_TTY_DRIVER)
-
-#define SET_SPECIAL(sc, func) \
- do \
- { \
- int ic; \
- ic = sc; \
- if (ic != -1 && kmap[ic].type == ISFUNC) \
- kmap[ic].function = func; \
- } \
- while (0)
-
- if (get_tty_settings (tty, &ttybuff) == 0)
- {
- if (ttybuff.flags & SGTTY_SET)
- {
- SET_SPECIAL (ttybuff.sgttyb.sg_erase, rl_rubout);
- SET_SPECIAL (ttybuff.sgttyb.sg_kill, rl_unix_line_discard);
- }
-
-# if defined (TIOCGLTC)
- if (ttybuff.flags & LTCHARS_SET)
- {
- SET_SPECIAL (ttybuff.ltchars.t_werasc, rl_unix_word_rubout);
- SET_SPECIAL (ttybuff.ltchars.t_lnextc, rl_quoted_insert);
- }
-# endif /* TIOCGLTC */
- }
-
-#else /* !NEW_TTY_DRIVER */
-
-#define SET_SPECIAL(sc, func) \
- do \
- { \
- unsigned char uc; \
- uc = ttybuff.c_cc[sc]; \
- if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) \
- kmap[uc].function = func; \
- } \
- while (0)
-
- if (get_tty_settings (tty, &ttybuff) == 0)
- {
- SET_SPECIAL (VERASE, rl_rubout);
- SET_SPECIAL (VKILL, rl_unix_line_discard);
-
-# if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER)
- SET_SPECIAL (VLNEXT, rl_quoted_insert);
-# endif /* VLNEXT && TERMIOS_TTY_DRIVER */
-
-# if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER)
- SET_SPECIAL (VWERASE, rl_unix_word_rubout);
-# endif /* VWERASE && TERMIOS_TTY_DRIVER */
- }
-#endif /* !NEW_TTY_DRIVER */
-}
diff --git a/contrib/libreadline/rltty.h b/contrib/libreadline/rltty.h
deleted file mode 100644
index 3ee6b3f28f80..000000000000
--- a/contrib/libreadline/rltty.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* rltty.h - tty driver-related definitions used by some library files. */
-
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_RLTTY_H_)
-#define _RLTTY_H
-
-/* Posix systems use termios and the Posix signal functions. */
-#if defined (TERMIOS_TTY_DRIVER)
-# include <termios.h>
-#endif /* TERMIOS_TTY_DRIVER */
-
-/* System V machines use termio. */
-#if defined (TERMIO_TTY_DRIVER)
-# include <termio.h>
-# if !defined (TCOON)
-# define TCOON 1
-# endif
-#endif /* TERMIO_TTY_DRIVER */
-
-/* Other (BSD) machines use sgtty. */
-#if defined (NEW_TTY_DRIVER)
-# include <sgtty.h>
-#endif
-
-/* Define _POSIX_VDISABLE if we are not using the `new' tty driver and
- it is not already defined. It is used both to determine if a
- special character is disabled and to disable certain special
- characters. Posix systems should set to 0, USG systems to -1. */
-#if !defined (NEW_TTY_DRIVER) && !defined (_POSIX_VDISABLE)
-# if defined (_SVR4_VDISABLE)
-# define _POSIX_VDISABLE _SVR4_VDISABLE
-# else
-# if defined (_POSIX_VERSION)
-# define _POSIX_VDISABLE 0
-# else /* !_POSIX_VERSION */
-# define _POSIX_VDISABLE -1
-# endif /* !_POSIX_VERSION */
-# endif /* !_SVR4_DISABLE */
-#endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */
-
-#endif /* _RLTTY_H_ */
diff --git a/contrib/libreadline/search.c b/contrib/libreadline/search.c
deleted file mode 100644
index 05641a19f462..000000000000
--- a/contrib/libreadline/search.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/* search.c - code for non-incremental searching in emacs and vi modes. */
-
-/* Copyright (C) 1992 Free Software Foundation, Inc.
-
- This file is part of the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <stdio.h>
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#include "rldefs.h"
-#include "readline.h"
-#include "history.h"
-
-#define abs(x) (((x) > 0) ? (x) : -(x))
-
-extern char *xmalloc (), *xrealloc ();
-
-/* Variables imported from readline.c */
-extern int rl_point, rl_end, rl_line_buffer_len;
-extern int rl_editing_mode;
-extern char *rl_prompt;
-extern char *rl_line_buffer;
-extern HIST_ENTRY *saved_line_for_history;
-extern Function *rl_last_func;
-
-/* Functions imported from the rest of the library. */
-extern int _rl_free_history_entry ();
-extern char *_rl_make_prompt_for_search ();
-extern void _rl_restore_prompt ();
-extern void rl_extend_line_buffer ();
-
-static char *noninc_search_string = (char *) NULL;
-static int noninc_history_pos;
-static char *prev_line_found = (char *) NULL;
-
-/* Search the history list for STRING starting at absolute history position
- POS. If STRING begins with `^', the search must match STRING at the
- beginning of a history line, otherwise a full substring match is performed
- for STRING. DIR < 0 means to search backwards through the history list,
- DIR >= 0 means to search forward. */
-static int
-noninc_search_from_pos (string, pos, dir)
- char *string;
- int pos, dir;
-{
- int ret, old;
-
- old = where_history ();
- history_set_pos (pos);
-
- if (*string == '^')
- ret = history_search_prefix (string + 1, dir);
- else
- ret = history_search (string, dir);
-
- if (ret != -1)
- ret = where_history ();
-
- history_set_pos (old);
- return (ret);
-}
-
-/* Search for a line in the history containing STRING. If DIR is < 0, the
- search is backwards through previous entries, else through subsequent
- entries. */
-static void
-noninc_dosearch (string, dir)
- char *string;
- int dir;
-{
- int oldpos, pos, line_len;
- HIST_ENTRY *entry;
-
- if (string == 0 || *string == '\0' || noninc_history_pos < 0)
- {
- ding ();
- return;
- }
-
- pos = noninc_search_from_pos (string, noninc_history_pos + dir, dir);
- if (pos == -1)
- {
- /* Search failed, current history position unchanged. */
- maybe_unsave_line ();
- rl_clear_message ();
- rl_point = 0;
- ding ();
- return;
- }
-
- noninc_history_pos = pos;
-
- oldpos = where_history ();
- history_set_pos (noninc_history_pos);
- entry = current_history ();
-#if defined (VI_MODE)
- if (rl_editing_mode != vi_mode)
-#endif
- history_set_pos (oldpos);
-
- line_len = strlen (entry->line);
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
- strcpy (rl_line_buffer, entry->line);
-
- rl_undo_list = (UNDO_LIST *)entry->data;
- rl_end = strlen (rl_line_buffer);
- rl_point = 0;
- rl_clear_message ();
-
- if (saved_line_for_history)
- _rl_free_history_entry (saved_line_for_history);
- saved_line_for_history = (HIST_ENTRY *)NULL;
-}
-
-/* Search non-interactively through the history list. DIR < 0 means to
- search backwards through the history of previous commands; otherwise
- the search is for commands subsequent to the current position in the
- history list. PCHAR is the character to use for prompting when reading
- the search string; if not specified (0), it defaults to `:'. */
-static void
-noninc_search (dir, pchar)
- int dir;
- int pchar;
-{
- int saved_point, c;
- char *p;
-
- maybe_save_line ();
- saved_point = rl_point;
-
- /* Use the line buffer to read the search string. */
- rl_line_buffer[0] = 0;
- rl_end = rl_point = 0;
-
- p = _rl_make_prompt_for_search (pchar ? pchar : ':');
- rl_message (p, 0, 0);
- free (p);
-
-#define SEARCH_RETURN _rl_restore_prompt (); return
-
- /* Read the search string. */
- while (c = rl_read_key ())
- {
- switch (c)
- {
- case CTRL('H'):
- case RUBOUT:
- if (rl_point == 0)
- {
- maybe_unsave_line ();
- rl_clear_message ();
- rl_point = saved_point;
- SEARCH_RETURN;
- }
- rl_rubout (1, c);
- break;
-
- case CTRL('W'):
- rl_unix_word_rubout (1, c);
- break;
-
- case CTRL('U'):
- rl_unix_line_discard (1, c);
- break;
-
- case RETURN:
- case NEWLINE:
- goto dosearch;
- /* NOTREACHED */
- break;
-
- case CTRL('C'):
- case CTRL('G'):
- maybe_unsave_line ();
- rl_clear_message ();
- rl_point = saved_point;
- ding ();
- SEARCH_RETURN;
-
- default:
- rl_insert (1, c);
- break;
- }
- (*rl_redisplay_function) ();
- }
-
- dosearch:
- /* If rl_point == 0, we want to re-use the previous search string and
- start from the saved history position. If there's no previous search
- string, punt. */
- if (rl_point == 0)
- {
- if (!noninc_search_string)
- {
- ding ();
- SEARCH_RETURN;
- }
- }
- else
- {
- /* We want to start the search from the current history position. */
- noninc_history_pos = where_history ();
- if (noninc_search_string)
- free (noninc_search_string);
- noninc_search_string = savestring (rl_line_buffer);
- }
-
- _rl_restore_prompt ();
- noninc_dosearch (noninc_search_string, dir);
-}
-
-/* Search forward through the history list for a string. If the vi-mode
- code calls this, KEY will be `?'. */
-int
-rl_noninc_forward_search (count, key)
- int count, key;
-{
- noninc_search (1, (key == '?') ? '?' : 0);
- return 0;
-}
-
-/* Reverse search the history list for a string. If the vi-mode code
- calls this, KEY will be `/'. */
-int
-rl_noninc_reverse_search (count, key)
- int count, key;
-{
- noninc_search (-1, (key == '/') ? '/' : 0);
- return 0;
-}
-
-/* Search forward through the history list for the last string searched
- for. If there is no saved search string, abort. */
-int
-rl_noninc_forward_search_again (count, key)
- int count, key;
-{
- if (!noninc_search_string)
- {
- ding ();
- return (-1);
- }
- noninc_dosearch (noninc_search_string, 1);
- return 0;
-}
-
-/* Reverse search in the history list for the last string searched
- for. If there is no saved search string, abort. */
-int
-rl_noninc_reverse_search_again (count, key)
- int count, key;
-{
- if (!noninc_search_string)
- {
- ding ();
- return (-1);
- }
- noninc_dosearch (noninc_search_string, -1);
- return 0;
-}
-
-static int
-rl_history_search_internal (count, direction)
- int count, direction;
-{
- HIST_ENTRY *temp, *old_temp;
- int line_len;
-
- maybe_save_line ();
-
- temp = old_temp = (HIST_ENTRY *)NULL;
- while (count)
- {
- temp = (direction < 0) ? previous_history () : next_history ();
- if (temp == 0)
- break;
- /* On an empty prefix, make this the same as previous-history. */
- if (rl_point == 0)
- {
- count--;
- continue;
- }
- if (STREQN (rl_line_buffer, temp->line, rl_point))
- {
- /* Don't find multiple instances of the same line. */
- if (prev_line_found && STREQ (prev_line_found, temp->line))
- continue;
- if (direction < 0)
- old_temp = temp;
- prev_line_found = temp->line;
- count--;
- }
- }
-
- if (temp == 0)
- {
- if (direction < 0 && old_temp)
- temp = old_temp;
- else
- {
- maybe_unsave_line ();
- ding ();
- return 1;
- }
- }
-
- line_len = strlen (temp->line);
- if (line_len >= rl_line_buffer_len)
- rl_extend_line_buffer (line_len);
- strcpy (rl_line_buffer, temp->line);
- rl_undo_list = (UNDO_LIST *)temp->data;
- rl_end = line_len;
- return 0;
-}
-
-/* Search forward in the history for the string of characters
- from the start of the line to rl_point. This is a non-incremental
- search. */
-int
-rl_history_search_forward (count, ignore)
- int count, ignore;
-{
- if (count == 0)
- return (0);
- if (rl_last_func != rl_history_search_forward)
- prev_line_found = (char *)NULL;
- return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1));
-}
-
-/* Search backward through the history for the string of characters
- from the start of the line to rl_point. This is a non-incremental
- search. */
-int
-rl_history_search_backward (count, ignore)
- int count, ignore;
-{
- if (count == 0)
- return (0);
- if (rl_last_func != rl_history_search_backward)
- prev_line_found = (char *)NULL;
- return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1));
-}
diff --git a/contrib/libreadline/signals.c b/contrib/libreadline/signals.c
deleted file mode 100644
index 2fe79532d8d1..000000000000
--- a/contrib/libreadline/signals.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/* signals.c -- signal handling support for readline. */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h> /* Just for NULL. Yuck. */
-#include <sys/types.h>
-#include <signal.h>
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-#if defined (GWINSZ_IN_SYS_IOCTL)
-# include <sys/ioctl.h>
-#endif /* GWINSZ_IN_SYS_IOCTL */
-
-#if defined (__GO32__)
-# undef HANDLE_SIGNALS
-#endif /* __GO32__ */
-
-#if defined (HANDLE_SIGNALS)
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-extern int readline_echoing_p;
-extern int rl_pending_input;
-extern int _rl_meta_flag;
-
-extern void free_undo_list ();
-extern void _rl_get_screen_size ();
-extern void _rl_redisplay_after_sigwinch ();
-extern void _rl_clean_up_for_exit ();
-extern void _rl_kill_kbd_macro ();
-extern void _rl_init_argument ();
-extern void rl_deprep_terminal (), rl_prep_terminal ();
-
-#if !defined (RETSIGTYPE)
-# if defined (VOID_SIGHANDLER)
-# define RETSIGTYPE void
-# else
-# define RETSIGTYPE int
-# endif /* !VOID_SIGHANDLER */
-#endif /* !RETSIGTYPE */
-
-#if defined (VOID_SIGHANDLER)
-# define SIGHANDLER_RETURN return
-#else
-# define SIGHANDLER_RETURN return (0)
-#endif
-
-/* This typedef is equivalant to the one for Function; it allows us
- to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */
-typedef RETSIGTYPE SigHandler ();
-
-static SigHandler *rl_set_sighandler ();
-
-/* **************************************************************** */
-/* */
-/* Signal Handling */
-/* */
-/* **************************************************************** */
-
-#if defined (HAVE_POSIX_SIGNALS)
-typedef struct sigaction sighandler_cxt;
-# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh)
-#else
-typedef struct { SigHandler *sa_handler; } sighandler_cxt;
-# define sigemptyset(m)
-#endif /* !HAVE_POSIX_SIGNALS */
-
-static sighandler_cxt old_int, old_alrm;
-
-#if !defined (SHELL)
-static sighandler_cxt old_tstp, old_ttou, old_ttin, old_term;
-#endif /* !SHELL */
-
-#if defined (SIGWINCH)
-static sighandler_cxt old_winch;
-#endif
-
-/* Readline signal handler functions. */
-
-static RETSIGTYPE
-rl_signal_handler (sig)
- int sig;
-{
-#if defined (HAVE_POSIX_SIGNALS)
- sigset_t set;
-#else /* !HAVE_POSIX_SIGNALS */
-# if defined (HAVE_BSD_SIGNALS)
- long omask;
-# endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-
-#if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS)
- /* Since the signal will not be blocked while we are in the signal
- handler, ignore it until rl_clear_signals resets the catcher. */
- if (sig == SIGINT || sig == SIGALRM)
- rl_set_sighandler (sig, SIG_IGN, (sighandler_cxt *)NULL);
-#endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */
-
- switch (sig)
- {
- case SIGINT:
- {
- register HIST_ENTRY *entry;
-
- free_undo_list ();
-
- entry = current_history ();
- if (entry)
- entry->data = (char *)NULL;
- }
- _rl_kill_kbd_macro ();
- rl_clear_message ();
- _rl_init_argument ();
-
-#if defined (SIGTSTP)
- case SIGTSTP:
- case SIGTTOU:
- case SIGTTIN:
-#endif /* SIGTSTP */
- case SIGALRM:
- case SIGTERM:
- _rl_clean_up_for_exit ();
- (*rl_deprep_term_function) ();
- rl_clear_signals ();
- rl_pending_input = 0;
-
-#if defined (HAVE_POSIX_SIGNALS)
- sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
- sigdelset (&set, sig);
-#else /* !HAVE_POSIX_SIGNALS */
-# if defined (HAVE_BSD_SIGNALS)
- omask = sigblock (0);
-# endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-
- kill (getpid (), sig);
-
- /* Let the signal that we just sent through. */
-#if defined (HAVE_POSIX_SIGNALS)
- sigprocmask (SIG_SETMASK, &set, (sigset_t *)NULL);
-#else /* !HAVE_POSIX_SIGNALS */
-# if defined (HAVE_BSD_SIGNALS)
- sigsetmask (omask & ~(sigmask (sig)));
-# endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-
- (*rl_prep_term_function) (_rl_meta_flag);
- rl_set_signals ();
- }
-
- SIGHANDLER_RETURN;
-}
-
-#if defined (SIGWINCH)
-static RETSIGTYPE
-rl_handle_sigwinch (sig)
- int sig;
-{
- SigHandler *oh;
-
- if (readline_echoing_p)
- {
- _rl_get_screen_size (fileno (rl_instream), 1);
- _rl_redisplay_after_sigwinch ();
- }
-
- /* If another sigwinch handler has been installed, call it. */
- oh = (SigHandler *)old_winch.sa_handler;
- if (oh && oh != (SigHandler *)SIG_IGN && oh != (SigHandler *)SIG_DFL)
- (*oh) (sig);
-
- SIGHANDLER_RETURN;
-}
-#endif /* SIGWINCH */
-
-/* Functions to manage signal handling. */
-
-#if !defined (HAVE_POSIX_SIGNALS)
-static int
-rl_sigaction (sig, nh, oh)
- int sig;
- sighandler_cxt *nh, *oh;
-{
- oh->sa_handler = signal (sig, nh->sa_handler);
- return 0;
-}
-#endif /* !HAVE_POSIX_SIGNALS */
-
-/* Set up a readline-specific signal handler, saving the old signal
- information in OHANDLER. Return the old signal handler, like
- signal(). */
-static SigHandler *
-rl_set_sighandler (sig, handler, ohandler)
- int sig;
- SigHandler *handler;
- sighandler_cxt *ohandler;
-{
-#if defined (HAVE_POSIX_SIGNALS)
- struct sigaction act;
-
- act.sa_handler = handler;
- act.sa_flags = 0;
- sigemptyset (&act.sa_mask);
- sigemptyset (&ohandler->sa_mask);
- sigaction (sig, &act, ohandler);
-#else
- ohandler->sa_handler = (SigHandler *)signal (sig, handler);
-#endif /* !HAVE_POSIX_SIGNALS */
- return (ohandler->sa_handler);
-}
-
-int
-rl_set_signals ()
-{
- sighandler_cxt dummy;
- SigHandler *oh;
-
-#if defined (HAVE_POSIX_SIGNALS)
- sigemptyset (&dummy.sa_mask);
-#endif
-
- oh = rl_set_sighandler (SIGINT, rl_signal_handler, &old_int);
- if (oh == (SigHandler *)SIG_IGN)
- rl_sigaction (SIGINT, &old_int, &dummy);
-
- oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm);
- if (oh == (SigHandler *)SIG_IGN)
- rl_sigaction (SIGALRM, &old_alrm, &dummy);
-#if defined (HAVE_POSIX_SIGNALS) && defined (SA_RESTART)
- /* If the application using readline has already installed a signal
- handler with SA_RESTART, SIGALRM will cause reads to be restarted
- automatically, so readline should just get out of the way. Since
- we tested for SIG_IGN above, we can just test for SIG_DFL here. */
- if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART))
- rl_sigaction (SIGALRM, &old_alrm, &dummy);
-#endif /* HAVE_POSIX_SIGNALS */
-
-#if !defined (SHELL)
-
-#if defined (SIGTSTP)
- oh = rl_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp);
- if (oh == (SigHandler *)SIG_IGN)
- rl_sigaction (SIGTSTP, &old_tstp, &dummy);
-#else
- oh = (SigHandler *)NULL;
-#endif /* SIGTSTP */
-
-#if defined (SIGTTOU)
- rl_set_sighandler (SIGTTOU, rl_signal_handler, &old_ttou);
- rl_set_sighandler (SIGTTIN, rl_signal_handler, &old_ttin);
-
- if (oh == (SigHandler *)SIG_IGN)
- {
- rl_set_sighandler (SIGTTOU, SIG_IGN, &dummy);
- rl_set_sighandler (SIGTTIN, SIG_IGN, &dummy);
- }
-#endif /* SIGTTOU */
-
- /* Handle SIGTERM if we're not being compiled as part of bash. */
- rl_set_sighandler (SIGTERM, rl_signal_handler, &old_term);
-#endif /* !SHELL */
-
-#if defined (SIGWINCH)
- rl_set_sighandler (SIGWINCH, rl_handle_sigwinch, &old_winch);
-#endif /* SIGWINCH */
-
- return 0;
-}
-
-int
-rl_clear_signals ()
-{
- sighandler_cxt dummy;
-
-#if defined (HAVE_POSIX_SIGNALS)
- sigemptyset (&dummy.sa_mask);
-#endif
-
- rl_sigaction (SIGINT, &old_int, &dummy);
- rl_sigaction (SIGALRM, &old_alrm, &dummy);
-
-#if !defined (SHELL)
-
-#if defined (SIGTSTP)
- rl_sigaction (SIGTSTP, &old_tstp, &dummy);
-#endif
-
-#if defined (SIGTTOU)
- rl_sigaction (SIGTTOU, &old_ttou, &dummy);
- rl_sigaction (SIGTTIN, &old_ttin, &dummy);
-#endif /* SIGTTOU */
-
- rl_sigaction (SIGTERM, &old_term, &dummy);
-
-#endif /* !SHELL */
-
-#if defined (SIGWINCH)
- sigemptyset (&dummy.sa_mask);
- rl_sigaction (SIGWINCH, &old_winch, &dummy);
-#endif
-
- return 0;
-}
-#endif /* HANDLE_SIGNALS */
diff --git a/contrib/libreadline/tcap.h b/contrib/libreadline/tcap.h
deleted file mode 100644
index 06732880e0e5..000000000000
--- a/contrib/libreadline/tcap.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* tcap.h -- termcap library functions and variables. */
-
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_RLTCAP_H_)
-#define _RLTCAP_H_
-
-#if defined (HAVE_CONFIG_H)
-# include "config.h"
-#endif
-
-#if defined (HAVE_TERMCAP_H)
-# include <termcap.h>
-#else
-
-/* On Solaris2, sys/types.h #includes sys/reg.h, which #defines PC.
- Unfortunately, PC is a global variable used by the termcap library. */
-#ifdef PC
-# undef PC
-#endif
-
-extern char PC;
-extern char *UP, *BC;
-
-extern short ospeed;
-
-extern int tgetent ();
-extern int tgetflag ();
-extern int tgetnum ();
-extern char *tgetstr ();
-
-extern int tputs ();
-
-extern char *tgoto ();
-
-#endif /* HAVE_TERMCAP_H */
-
-#endif /* !_RLTCAP_H_ */
diff --git a/contrib/libreadline/terminal.c b/contrib/libreadline/terminal.c
deleted file mode 100644
index 9ca9bc68ae10..000000000000
--- a/contrib/libreadline/terminal.c
+++ /dev/null
@@ -1,554 +0,0 @@
-/* terminal.c -- controlling the terminal with termcap. */
-
-/* Copyright (C) 1996 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include "posixstat.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 */
-
-#if defined (HAVE_LOCALE_H)
-# include <locale.h>
-#endif
-
-#include <signal.h>
-#include <stdio.h>
-#include <setjmp.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-#include "tcap.h"
-
-#if defined (GWINSZ_IN_SYS_IOCTL)
-# include <sys/ioctl.h>
-#endif /* GWINSZ_IN_SYS_IOCTL */
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-/* Variables and functions imported from readline.c */
-extern FILE *_rl_in_stream, *_rl_out_stream;
-extern int readline_echoing_p;
-extern int _rl_bell_preference;
-extern Keymap _rl_keymap;
-
-/* **************************************************************** */
-/* */
-/* Terminal and Termcap */
-/* */
-/* **************************************************************** */
-
-static char *term_buffer = (char *)NULL;
-static char *term_string_buffer = (char *)NULL;
-
-static int tcap_initialized;
-
-/* Non-zero means this terminal can't really do anything. */
-static int dumb_term;
-
-#if !defined (__linux__)
-/* If this causes problems, add back the `extern'. */
-/*extern*/ char PC, *BC, *UP;
-#endif /* __linux__ */
-
-/* Some strings to control terminal actions. These are output by tputs (). */
-char *term_goto, *term_clreol, *term_cr, *term_clrpag, *term_backspace;
-char *term_pc;
-
-/* Non-zero if we determine that the terminal can do character insertion. */
-int terminal_can_insert = 0;
-
-/* How to insert characters. */
-char *term_im, *term_ei, *term_ic, *term_ip, *term_IC;
-
-/* How to delete characters. */
-char *term_dc, *term_DC;
-
-#if defined (HACK_TERMCAP_MOTION)
-char *term_forward_char;
-#endif /* HACK_TERMCAP_MOTION */
-
-/* How to go up a line. */
-char *term_up;
-
-/* A visible bell, if the terminal can be made to flash the screen. */
-static char *visible_bell;
-
-/* Non-zero means the terminal can auto-wrap lines. */
-int _rl_term_autowrap;
-
-/* Non-zero means that this terminal has a meta key. */
-static int term_has_meta;
-
-/* The sequences to write to turn on and off the meta key, if this
- terminal has one. */
-static char *term_mm, *term_mo;
-
-/* The key sequences output by the arrow keys, if this terminal has any. */
-static char *term_ku, *term_kd, *term_kr, *term_kl;
-
-/* How to initialize and reset the arrow keys, if this terminal has any. */
-static char *term_ks, *term_ke;
-
-/* The key sequences sent by the Home and End keys, if any. */
-static char *term_kh, *term_kH;
-
-/* Variables that hold the screen dimensions, used by the display code. */
-int screenwidth, screenheight, screenchars;
-
-/* Non-zero means the user wants to enable the keypad. */
-int _rl_enable_keypad;
-
-/* Non-zero means the user wants to enable a meta key. */
-int _rl_enable_meta = 1;
-
-/* Re-initialize the terminal considering that the TERM/TERMCAP variable
- has changed. */
-int
-rl_reset_terminal (terminal_name)
- char *terminal_name;
-{
- _rl_init_terminal_io (terminal_name);
- return 0;
-}
-
-#if !defined (SHELL)
-static void
-set_lines_and_columns (lines, cols)
- int lines, cols;
-{
- char *b;
-
-#if defined (HAVE_PUTENV)
- b = xmalloc (24);
- sprintf (b, "LINES=%d", lines);
- putenv (b);
- b = xmalloc (24);
- sprintf (b, "COLUMNS=%d", cols);
- putenv (b);
-#else /* !HAVE_PUTENV */
-# if defined (HAVE_SETENV)
- b = xmalloc (8);
- sprintf (b, "%d", lines);
- setenv ("LINES", b, 1);
- b = xmalloc (8);
- sprintf (b, "%d", cols);
- setenv ("COLUMNS", b, 1);
-# endif /* HAVE_SETENV */
-#endif /* !HAVE_PUTENV */
-}
-#else /* SHELL */
-extern void set_lines_and_columns ();
-#endif /* SHELL */
-
-/* Get readline's idea of the screen size. TTY is a file descriptor open
- to the terminal. If IGNORE_ENV is true, we do not pay attention to the
- values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being
- non-null serve to check whether or not we have initialized termcap. */
-void
-_rl_get_screen_size (tty, ignore_env)
- int tty, ignore_env;
-{
- char *ss;
-#if defined (TIOCGWINSZ)
- struct winsize window_size;
-#endif /* TIOCGWINSZ */
-
-#if defined (TIOCGWINSZ)
- if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
- {
- screenwidth = (int) window_size.ws_col;
- screenheight = (int) window_size.ws_row;
- }
-#endif /* TIOCGWINSZ */
-
- /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
- is unset. */
- if (screenwidth <= 0)
- {
- if (ignore_env == 0 && (ss = getenv ("COLUMNS")))
- screenwidth = atoi (ss);
-
- if (screenwidth <= 0 && term_string_buffer)
- screenwidth = tgetnum ("co");
- }
-
- /* Environment variable LINES overrides setting of "li" if IGNORE_ENV
- is unset. */
- if (screenheight <= 0)
- {
- if (ignore_env == 0 && (ss = getenv ("LINES")))
- screenheight = atoi (ss);
-
- if (screenheight <= 0 && term_string_buffer)
- screenheight = tgetnum ("li");
- }
-
- /* If all else fails, default to 80x24 terminal. */
- if (screenwidth <= 1)
- screenwidth = 80;
-
- if (screenheight <= 0)
- screenheight = 24;
-
- /* If we're being compiled as part of bash, set the environment
- variables $LINES and $COLUMNS to new values. Otherwise, just
- do a pair of putenv () or setenv () calls. */
- set_lines_and_columns (screenheight, screenwidth);
-
- if (!_rl_term_autowrap)
- screenwidth--;
-
- screenchars = screenwidth * screenheight;
-}
-
-void
-_rl_set_screen_size (rows, cols)
- int rows, cols;
-{
- screenheight = rows;
- screenwidth = cols;
-
- if (_rl_term_autowrap == 0)
- screenwidth--;
-
- screenchars = screenwidth * screenheight;
-}
-
-struct _tc_string {
- char *tc_var;
- char **tc_value;
-};
-
-/* This should be kept sorted, just in case we decide to change the
- search algorithm to something smarter. */
-static struct _tc_string tc_strings[] =
-{
- "DC", &term_DC,
- "IC", &term_IC,
- "ce", &term_clreol,
- "cl", &term_clrpag,
- "cr", &term_cr,
- "dc", &term_dc,
- "ei", &term_ei,
- "ic", &term_ic,
- "im", &term_im,
- "kd", &term_kd,
- "kh", &term_kh, /* home */
- "kH", &term_kH, /* end */
- "kl", &term_kl,
- "kr", &term_kr,
- "ku", &term_ku,
- "ks", &term_ks,
- "ke", &term_ke,
- "le", &term_backspace,
- "mm", &term_mm,
- "mo", &term_mo,
-#if defined (HACK_TERMCAP_MOTION)
- "nd", &term_forward_char,
-#endif
- "pc", &term_pc,
- "up", &term_up,
- "vb", &visible_bell,
-};
-
-#define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string))
-
-/* Read the desired terminal capability strings into BP. The capabilities
- are described in the TC_STRINGS table. */
-static void
-get_term_capabilities (bp)
- char **bp;
-{
- register int i;
-
- for (i = 0; i < NUM_TC_STRINGS; i++)
- *(tc_strings[i].tc_value) = tgetstr (tc_strings[i].tc_var, bp);
- tcap_initialized = 1;
-}
-
-int
-_rl_init_terminal_io (terminal_name)
- char *terminal_name;
-{
-#if defined (__GO32__)
- screenwidth = ScreenCols ();
- screenheight = ScreenRows ();
- screenchars = screenwidth * screenheight;
- term_cr = "\r";
- term_im = term_ei = term_ic = term_IC = (char *)NULL;
- term_up = term_dc = term_DC = visible_bell = (char *)NULL;
-
- /* Does the __GO32__ have a meta key? I don't know. */
- term_has_meta = 0;
- term_mm = term_mo = (char *)NULL;
-
- /* It probably has arrow keys, but I don't know what they are. */
- term_ku = term_kd = term_kr = term_kl = (char *)NULL;
-
-#if defined (HACK_TERMCAP_MOTION)
- term_forward_char = (char *)NULL;
-#endif /* HACK_TERMCAP_MOTION */
- terminal_can_insert = _rl_term_autowrap = 0;
- return;
-#else /* !__GO32__ */
-
- char *term, *buffer;
- int tty;
- Keymap xkeymap;
-
- term = terminal_name ? terminal_name : getenv ("TERM");
-
- if (term_string_buffer == 0)
- term_string_buffer = xmalloc (2032);
-
- if (term_buffer == 0)
- term_buffer = xmalloc (4080);
-
- buffer = term_string_buffer;
-
- term_clrpag = term_cr = term_clreol = (char *)NULL;
-
- if (term == 0)
- term = "dumb";
-
- if (tgetent (term_buffer, term) <= 0)
- {
- dumb_term = 1;
- screenwidth = 79;
- screenheight = 24;
- screenchars = 79 * 24;
- term_cr = "\r";
- term_im = term_ei = term_ic = term_IC = (char *)NULL;
- term_up = term_dc = term_DC = visible_bell = (char *)NULL;
- term_ku = term_kd = term_kl = term_kr = (char *)NULL;
-#if defined (HACK_TERMCAP_MOTION)
- term_forward_char = (char *)NULL;
-#endif
- terminal_can_insert = 0;
- return 0;
- }
-
- get_term_capabilities (&buffer);
-
- /* Set up the variables that the termcap library expects the application
- to provide. */
- PC = term_pc ? *term_pc : 0;
- BC = term_backspace;
- UP = term_up;
-
- if (!term_cr)
- term_cr = "\r";
-
- tty = rl_instream ? fileno (rl_instream) : 0;
-
- screenwidth = screenheight = 0;
-
- _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
-
- _rl_get_screen_size (tty, 0);
-
- /* "An application program can assume that the terminal can do
- character insertion if *any one of* the capabilities `IC',
- `im', `ic' or `ip' is provided." But we can't do anything if
- only `ip' is provided, so... */
- terminal_can_insert = (term_IC || term_im || term_ic);
-
- /* Check to see if this terminal has a meta key and clear the capability
- variables if there is none. */
- term_has_meta = (tgetflag ("km") || tgetflag ("MT"));
- if (!term_has_meta)
- term_mm = term_mo = (char *)NULL;
-
- /* Attempt to find and bind the arrow keys. Do not override already
- bound keys in an overzealous attempt, however. */
- xkeymap = _rl_keymap;
-
- _rl_keymap = emacs_standard_keymap;
- _rl_bind_if_unbound (term_ku, rl_get_previous_history);
- _rl_bind_if_unbound (term_kd, rl_get_next_history);
- _rl_bind_if_unbound (term_kr, rl_forward);
- _rl_bind_if_unbound (term_kl, rl_backward);
-
- _rl_bind_if_unbound (term_kh, rl_beg_of_line); /* Home */
- _rl_bind_if_unbound (term_kH, rl_end_of_line); /* End */
-
-#if defined (VI_MODE)
- _rl_keymap = vi_movement_keymap;
- _rl_bind_if_unbound (term_ku, rl_get_previous_history);
- _rl_bind_if_unbound (term_kd, rl_get_next_history);
- _rl_bind_if_unbound (term_kr, rl_forward);
- _rl_bind_if_unbound (term_kl, rl_backward);
-
- _rl_bind_if_unbound (term_kh, rl_beg_of_line); /* Home */
- _rl_bind_if_unbound (term_kH, rl_end_of_line); /* End */
-#endif /* VI_MODE */
-
- _rl_keymap = xkeymap;
-
-#endif /* !__GO32__ */
- return 0;
-}
-
-char *
-rl_get_termcap (cap)
- char *cap;
-{
- register int i;
-
- if (tcap_initialized == 0)
- return ((char *)NULL);
- for (i = 0; i < NUM_TC_STRINGS; i++)
- {
- if (tc_strings[i].tc_var[0] == cap[0] && strcmp (tc_strings[i].tc_var, cap) == 0)
- return *(tc_strings[i].tc_value);
- }
- return ((char *)NULL);
-}
-
-/* A function for the use of tputs () */
-int
-_rl_output_character_function (c)
- int c;
-{
- return putc (c, _rl_out_stream);
-}
-
-/* Write COUNT characters from STRING to the output stream. */
-void
-_rl_output_some_chars (string, count)
- char *string;
- int count;
-{
- fwrite (string, 1, count, _rl_out_stream);
-}
-
-/* Move the cursor back. */
-int
-_rl_backspace (count)
- int count;
-{
- register int i;
-
-#if !defined (__GO32__)
- if (term_backspace)
- for (i = 0; i < count; i++)
- tputs (term_backspace, 1, _rl_output_character_function);
- else
-#endif /* !__GO32__ */
- for (i = 0; i < count; i++)
- putc ('\b', _rl_out_stream);
- return 0;
-}
-
-/* Move to the start of the next line. */
-int
-crlf ()
-{
-#if defined (NEW_TTY_DRIVER)
- if (term_cr)
- tputs (term_cr, 1, _rl_output_character_function);
-#endif /* NEW_TTY_DRIVER */
- putc ('\n', _rl_out_stream);
- return 0;
-}
-
-/* Ring the terminal bell. */
-int
-ding ()
-{
- if (readline_echoing_p)
- {
-#if !defined (__GO32__)
- switch (_rl_bell_preference)
- {
- case NO_BELL:
- default:
- break;
- case VISIBLE_BELL:
- if (visible_bell)
- {
- tputs (visible_bell, 1, _rl_output_character_function);
- break;
- }
- /* FALLTHROUGH */
- case AUDIBLE_BELL:
- fprintf (stderr, "\007");
- fflush (stderr);
- break;
- }
-#else /* __GO32__ */
- fprintf (stderr, "\007");
- fflush (stderr);
-#endif /* __GO32__ */
- return (0);
- }
- return (-1);
-}
-
-/* **************************************************************** */
-/* */
-/* Controlling the Meta Key and Keypad */
-/* */
-/* **************************************************************** */
-
-static int
-outchar (c)
- int c;
-{
- return putc (c, rl_outstream);
-}
-
-int
-_rl_enable_meta_key ()
-{
- if (term_has_meta && term_mm)
- tputs (term_mm, 1, outchar);
-}
-
-void
-_rl_control_keypad (on)
- int on;
-{
- if (on && term_ks)
- tputs (term_ks, 1, outchar);
- else if (!on && term_ke)
- tputs (term_ke, 1, outchar);
-}
diff --git a/contrib/libreadline/tilde.c b/contrib/libreadline/tilde.c
deleted file mode 100644
index 69f57688489e..000000000000
--- a/contrib/libreadline/tilde.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */
-
-/* Copyright (C) 1988,1989 Free Software Foundation, Inc.
-
- This file is part of GNU Readline, a library for reading lines
- of text with interactive input and history editing.
-
- Readline is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 1, or (at your option) any
- later version.
-
- Readline is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline; see the file COPYING. If not, write to the Free
- Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <sys/types.h>
-#include <pwd.h>
-
-#include "tilde.h"
-
-#if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid (), *getpwnam ();
-#endif /* !HAVE_GETPW_DECLS */
-
-#if !defined (savestring)
-extern char *xmalloc ();
-# ifndef strcpy
-extern char *strcpy ();
-# endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
-#endif /* !savestring */
-
-#if !defined (NULL)
-# if defined (__STDC__)
-# define NULL ((void *) 0)
-# else
-# define NULL 0x0
-# endif /* !__STDC__ */
-#endif /* !NULL */
-
-#if defined (TEST) || defined (STATIC_MALLOC)
-static char *xmalloc (), *xrealloc ();
-#else
-extern char *xmalloc (), *xrealloc ();
-#endif /* TEST || STATIC_MALLOC */
-
-/* The default value of tilde_additional_prefixes. This is set to
- whitespace preceding a tilde so that simple programs which do not
- perform any word separation get desired behaviour. */
-static char *default_prefixes[] =
- { " ~", "\t~", (char *)NULL };
-
-/* The default value of tilde_additional_suffixes. This is set to
- whitespace or newline so that simple programs which do not
- perform any word separation get desired behaviour. */
-static char *default_suffixes[] =
- { " ", "\n", (char *)NULL };
-
-/* If non-null, this contains the address of a function to call if the
- standard meaning for expanding a tilde fails. The function is called
- with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if there is no expansion. */
-CPFunction *tilde_expansion_failure_hook = (CPFunction *)NULL;
-
-/* When non-null, this is a NULL terminated array of strings which
- are duplicates for a tilde prefix. Bash uses this to expand
- `=~' and `:~'. */
-char **tilde_additional_prefixes = default_prefixes;
-
-/* When non-null, this is a NULL terminated array of strings which match
- the end of a username, instead of just "/". Bash sets this to
- `:' and `=~'. */
-char **tilde_additional_suffixes = default_suffixes;
-
-/* Find the start of a tilde expansion in STRING, and return the index of
- the tilde which starts the expansion. Place the length of the text
- which identified this tilde starter in LEN, excluding the tilde itself. */
-static int
-tilde_find_prefix (string, len)
- char *string;
- int *len;
-{
- register int i, j, string_len;
- register char **prefixes = tilde_additional_prefixes;
-
- string_len = strlen (string);
- *len = 0;
-
- if (!*string || *string == '~')
- return (0);
-
- if (prefixes)
- {
- for (i = 0; i < string_len; i++)
- {
- for (j = 0; prefixes[j]; j++)
- {
- if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0)
- {
- *len = strlen (prefixes[j]) - 1;
- return (i + *len);
- }
- }
- }
- }
- return (string_len);
-}
-
-/* Find the end of a tilde expansion in STRING, and return the index of
- the character which ends the tilde definition. */
-static int
-tilde_find_suffix (string)
- char *string;
-{
- register int i, j, string_len;
- register char **suffixes = tilde_additional_suffixes;
-
- string_len = strlen (string);
-
- for (i = 0; i < string_len; i++)
- {
- if (string[i] == '/' || !string[i])
- break;
-
- for (j = 0; suffixes && suffixes[j]; j++)
- {
- if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0)
- return (i);
- }
- }
- return (i);
-}
-
-/* Return a new string which is the result of tilde expanding STRING. */
-char *
-tilde_expand (string)
- char *string;
-{
- char *result, *tilde_expand_word ();
- int result_size, result_index;
-
- result_size = result_index = 0;
- result = (char *)NULL;
-
- /* Scan through STRING expanding tildes as we come to them. */
- while (1)
- {
- register int start, end;
- char *tilde_word, *expansion;
- int len;
-
- /* Make START point to the tilde which starts the expansion. */
- start = tilde_find_prefix (string, &len);
-
- /* Copy the skipped text into the result. */
- if ((result_index + start + 1) > result_size)
- result = xrealloc (result, 1 + (result_size += (start + 20)));
-
- strncpy (result + result_index, string, start);
- result_index += start;
-
- /* Advance STRING to the starting tilde. */
- string += start;
-
- /* Make END be the index of one after the last character of the
- username. */
- end = tilde_find_suffix (string);
-
- /* If both START and END are zero, we are all done. */
- if (!start && !end)
- break;
-
- /* Expand the entire tilde word, and copy it into RESULT. */
- tilde_word = xmalloc (1 + end);
- strncpy (tilde_word, string, end);
- tilde_word[end] = '\0';
- string += end;
-
- expansion = tilde_expand_word (tilde_word);
- free (tilde_word);
-
- len = strlen (expansion);
- if ((result_index + len + 1) > result_size)
- result = xrealloc (result, 1 + (result_size += (len + 20)));
-
- strcpy (result + result_index, expansion);
- result_index += len;
- free (expansion);
- }
-
- result[result_index] = '\0';
-
- return (result);
-}
-
-/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
- tilde. If there is no expansion, call tilde_expansion_failure_hook. */
-char *
-tilde_expand_word (filename)
- char *filename;
-{
- char *dirname;
- char *temp_name;
-
- if (filename == (char *)0)
- return ((char *)NULL);
-
- dirname = savestring (filename);
-
- if (*dirname != '~')
- return (dirname);
-
- if (!dirname[1] || dirname[1] == '/')
- {
- /* Prepend $HOME to the rest of the string. */
- char *temp_home = (char *)getenv ("HOME");
- int home_len;
-
- /* If there is no HOME variable, look up the directory in
- the password database. */
- if (!temp_home)
- {
- struct passwd *entry;
-
- entry = getpwuid (getuid ());
- if (entry)
- temp_home = entry->pw_dir;
- }
-
- home_len = temp_home ? strlen (temp_home) : 0;
- temp_name = xmalloc (1 + strlen (dirname + 1) + home_len);
-
- if (temp_home)
- strcpy (temp_name, temp_home);
- strcpy (temp_name + home_len, dirname + 1);
- free (dirname);
- dirname = temp_name;
- }
- else
- {
- char *username;
- struct passwd *user_entry;
- int i, len;
-
- username = xmalloc (strlen (dirname));
- for (i = 1; dirname[i] && dirname[i] != '/'; i++)
- username[i - 1] = dirname[i];
- username[i - 1] = '\0';
-
- if ((user_entry = getpwnam (username)) == (struct passwd *)0)
- {
- /* If the calling program has a special syntax for
- expanding tildes, and we couldn't find a standard
- expansion, then let them try. */
- if (tilde_expansion_failure_hook)
- {
- char *expansion;
-
- expansion = (*tilde_expansion_failure_hook) (username);
-
- if (expansion)
- {
- len = strlen (expansion);
- temp_name = xmalloc (1 + len + strlen (dirname + i));
- strcpy (temp_name, expansion);
- strcpy (temp_name + len, dirname + i);
- free (expansion);
- free (dirname);
- dirname = temp_name;
- }
- }
- /* We shouldn't report errors. */
- }
- else
- {
- len = strlen (user_entry->pw_dir);
- temp_name = xmalloc (1 + len + strlen (dirname + i));
- strcpy (temp_name, user_entry->pw_dir);
- strcpy (temp_name + len, dirname + i);
- free (dirname);
- dirname = temp_name;
- }
- endpwent ();
- free (username);
- }
-
- return (dirname);
-}
-
-
-#if defined (TEST)
-#undef NULL
-#include <stdio.h>
-
-main (argc, argv)
- int argc;
- char **argv;
-{
- char *result, line[512];
- int done = 0;
-
- while (!done)
- {
- printf ("~expand: ");
- fflush (stdout);
-
- if (!gets (line))
- strcpy (line, "done");
-
- if ((strcmp (line, "done") == 0) ||
- (strcmp (line, "quit") == 0) ||
- (strcmp (line, "exit") == 0))
- {
- done = 1;
- break;
- }
-
- result = tilde_expand (line);
- printf (" --> %s\n", result);
- free (result);
- }
- exit (0);
-}
-
-static void memory_error_and_abort ();
-
-static char *
-xmalloc (bytes)
- int bytes;
-{
- char *temp = (char *)malloc (bytes);
-
- if (!temp)
- memory_error_and_abort ();
- return (temp);
-}
-
-static char *
-xrealloc (pointer, bytes)
- char *pointer;
- int bytes;
-{
- char *temp;
-
- if (!pointer)
- temp = (char *)malloc (bytes);
- else
- temp = (char *)realloc (pointer, bytes);
-
- if (!temp)
- memory_error_and_abort ();
-
- return (temp);
-}
-
-static void
-memory_error_and_abort ()
-{
- fprintf (stderr, "readline: out of virtual memory\n");
- abort ();
-}
-
-/*
- * Local variables:
- * compile-command: "gcc -g -DTEST -o tilde tilde.c"
- * end:
- */
-#endif /* TEST */
diff --git a/contrib/libreadline/tilde.h b/contrib/libreadline/tilde.h
deleted file mode 100644
index 6f0898c73721..000000000000
--- a/contrib/libreadline/tilde.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* tilde.h: Externally available variables and function in libtilde.a. */
-
-/* Copyright (C) 1992 Free Software Foundation, Inc.
-
- This file contains the Readline Library (the Library), a set of
- routines for providing Emacs style line input to programs that ask
- for it.
-
- The 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 1, or (at your option)
- any later version.
-
- The 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_TILDE_H_)
-# define _TILDE_H_
-
-/* Function pointers can be declared as (Function *)foo. */
-#if !defined (_FUNCTION_DEF)
-# define _FUNCTION_DEF
-typedef int Function ();
-typedef void VFunction ();
-typedef char *CPFunction ();
-typedef char **CPPFunction ();
-#endif /* _FUNCTION_DEF */
-
-/* If non-null, this contains the address of a function to call if the
- standard meaning for expanding a tilde fails. The function is called
- with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
- which is the expansion, or a NULL pointer if there is no expansion. */
-extern CPFunction *tilde_expansion_failure_hook;
-
-/* When non-null, this is a NULL terminated array of strings which
- are duplicates for a tilde prefix. Bash uses this to expand
- `=~' and `:~'. */
-extern char **tilde_additional_prefixes;
-
-/* When non-null, this is a NULL terminated array of strings which match
- the end of a username, instead of just "/". Bash sets this to
- `:' and `=~'. */
-extern char **tilde_additional_suffixes;
-
-/* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand ();
-
-/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
- tilde. If there is no expansion, call tilde_expansion_failure_hook. */
-extern char *tilde_expand_word ();
-
-#endif /* _TILDE_H_ */
diff --git a/contrib/libreadline/undo.c b/contrib/libreadline/undo.c
deleted file mode 100644
index af7ccc35d7c2..000000000000
--- a/contrib/libreadline/undo.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* readline.c -- a general facility for reading lines of input
- with emacs style editing and completion. */
-
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
-
- 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, 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> /* for _POSIX_VERSION */
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include <setjmp.h>
-#include <stdio.h>
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
-
-/* Non-zero tells rl_delete_text and rl_insert_text to not add to
- the undo list. */
-int _rl_doing_an_undo = 0;
-
-/* How many unclosed undo groups we currently have. */
-int _rl_undo_group_level = 0;
-
-/* The current undo list for THE_LINE. */
-UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL;
-
-/* **************************************************************** */
-/* */
-/* Undo, and Undoing */
-/* */
-/* **************************************************************** */
-
-/* Remember how to undo something. Concatenate some undos if that
- seems right. */
-void
-rl_add_undo (what, start, end, text)
- enum undo_code what;
- int start, end;
- char *text;
-{
- UNDO_LIST *temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST));
- temp->what = what;
- temp->start = start;
- temp->end = end;
- temp->text = text;
- temp->next = rl_undo_list;
- rl_undo_list = temp;
-}
-
-/* Free the existing undo list. */
-void
-free_undo_list ()
-{
- while (rl_undo_list)
- {
- UNDO_LIST *release = rl_undo_list;
- rl_undo_list = rl_undo_list->next;
-
- if (release->what == UNDO_DELETE)
- free (release->text);
-
- free (release);
- }
- rl_undo_list = (UNDO_LIST *)NULL;
-}
-
-/* Undo the next thing in the list. Return 0 if there
- is nothing to undo, or non-zero if there was. */
-int
-rl_do_undo ()
-{
- UNDO_LIST *release;
- int waiting_for_begin = 0;
- int start, end;
-
-#define TRANS(i) ((i) == -1 ? rl_point : ((i) == -2 ? rl_end : (i)))
-
- do
- {
- if (!rl_undo_list)
- return (0);
-
- _rl_doing_an_undo = 1;
-
- /* To better support vi-mode, a start or end value of -1 means
- rl_point, and a value of -2 means rl_end. */
- if (rl_undo_list->what == UNDO_DELETE || rl_undo_list->what == UNDO_INSERT)
- {
- start = TRANS (rl_undo_list->start);
- end = TRANS (rl_undo_list->end);
- }
-
- switch (rl_undo_list->what)
- {
- /* Undoing deletes means inserting some text. */
- case UNDO_DELETE:
- rl_point = start;
- rl_insert_text (rl_undo_list->text);
- free (rl_undo_list->text);
- break;
-
- /* Undoing inserts means deleting some text. */
- case UNDO_INSERT:
- rl_delete_text (start, end);
- rl_point = start;
- break;
-
- /* Undoing an END means undoing everything 'til we get to a BEGIN. */
- case UNDO_END:
- waiting_for_begin++;
- break;
-
- /* Undoing a BEGIN means that we are done with this group. */
- case UNDO_BEGIN:
- if (waiting_for_begin)
- waiting_for_begin--;
- else
- ding ();
- break;
- }
-
- _rl_doing_an_undo = 0;
-
- release = rl_undo_list;
- rl_undo_list = rl_undo_list->next;
- free (release);
- }
- while (waiting_for_begin);
-
- return (1);
-}
-#undef TRANS
-
-int
-_rl_fix_last_undo_of_type (type, start, end)
- int type, start, end;
-{
- UNDO_LIST *rl;
-
- for (rl = rl_undo_list; rl; rl = rl->next)
- {
- if (rl->what == type)
- {
- rl->start = start;
- rl->end = end;
- return 0;
- }
- }
- return 1;
-}
-
-/* Begin a group. Subsequent undos are undone as an atomic operation. */
-int
-rl_begin_undo_group ()
-{
- rl_add_undo (UNDO_BEGIN, 0, 0, 0);
- _rl_undo_group_level++;
- return 0;
-}
-
-/* End an undo group started with rl_begin_undo_group (). */
-int
-rl_end_undo_group ()
-{
- rl_add_undo (UNDO_END, 0, 0, 0);
- _rl_undo_group_level--;
- return 0;
-}
-
-/* Save an undo entry for the text from START to END. */
-int
-rl_modifying (start, end)
- int start, end;
-{
- if (start > end)
- {
- SWAP (start, end);
- }
-
- if (start != end)
- {
- char *temp = rl_copy_text (start, end);
- rl_begin_undo_group ();
- rl_add_undo (UNDO_DELETE, start, end, temp);
- rl_add_undo (UNDO_INSERT, start, end, (char *)NULL);
- rl_end_undo_group ();
- }
- return 0;
-}
-
-/* Revert the current line to its previous state. */
-int
-rl_revert_line (count, key)
- int count, key;
-{
- if (!rl_undo_list)
- ding ();
- else
- {
- while (rl_undo_list)
- rl_do_undo ();
- }
- return 0;
-}
-
-/* Do some undoing of things that were done. */
-int
-rl_undo_command (count, key)
- int count, key;
-{
- if (count < 0)
- return 0; /* Nothing to do. */
-
- while (count)
- {
- if (rl_do_undo ())
- count--;
- else
- {
- ding ();
- break;
- }
- }
- return 0;
-}
diff --git a/contrib/libreadline/util.c b/contrib/libreadline/util.c
deleted file mode 100644
index 225e85cfc436..000000000000
--- a/contrib/libreadline/util.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* util.c -- readline utility functions */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <setjmp.h>
-#include <ctype.h>
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h> /* for _POSIX_VERSION */
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-
-#if defined (TIOCSTAT_IN_SYS_IOCTL)
-# include <sys/ioctl.h>
-#endif /* TIOCSTAT_IN_SYS_IOCTL */
-
-/* Some standard library routines. */
-#include "readline.h"
-
-#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
-
-/* Pseudo-globals imported from readline.c */
-extern int readline_echoing_p;
-extern jmp_buf readline_top_level;
-extern int rl_line_buffer_len;
-extern Function *rl_last_func;
-
-extern int _rl_defining_kbd_macro;
-extern char *_rl_executing_macro;
-
-/* Pseudo-global functions imported from other library files. */
-extern void _rl_pop_executing_macro ();
-extern void _rl_set_the_line ();
-extern void _rl_init_argument ();
-
-extern char *xmalloc (), *xrealloc ();
-
-/* **************************************************************** */
-/* */
-/* Utility Functions */
-/* */
-/* **************************************************************** */
-
-/* Return 0 if C is not a member of the class of characters that belong
- in words, or 1 if it is. */
-
-int _rl_allow_pathname_alphabetic_chars = 0;
-static char *pathname_alphabetic_chars = "/-_=~.#$";
-
-int
-alphabetic (c)
- int c;
-{
- if (ALPHABETIC (c))
- return (1);
-
- return (_rl_allow_pathname_alphabetic_chars &&
- strchr (pathname_alphabetic_chars, c) != NULL);
-}
-
-/* How to abort things. */
-int
-_rl_abort_internal ()
-{
- ding ();
- rl_clear_message ();
- _rl_init_argument ();
- rl_pending_input = 0;
-
- _rl_defining_kbd_macro = 0;
- while (_rl_executing_macro)
- _rl_pop_executing_macro ();
-
- rl_last_func = (Function *)NULL;
- longjmp (readline_top_level, 1);
- return (0);
-}
-
-int
-rl_abort (count, key)
- int count, key;
-{
- return (_rl_abort_internal ());
-}
-
-int
-rl_tty_status (count, key)
- int count, key;
-{
-#if defined (TIOCSTAT)
- ioctl (1, TIOCSTAT, (char *)0);
- rl_refresh_line ();
-#else
- ding ();
-#endif
- return 0;
-}
-
-/* Return a copy of the string between FROM and TO.
- FROM is inclusive, TO is not. */
-char *
-rl_copy_text (from, to)
- int from, to;
-{
- register int length;
- char *copy;
-
- /* Fix it if the caller is confused. */
- if (from > to)
- SWAP (from, to);
-
- length = to - from;
- copy = xmalloc (1 + length);
- strncpy (copy, rl_line_buffer + from, length);
- copy[length] = '\0';
- return (copy);
-}
-
-/* Increase the size of RL_LINE_BUFFER until it has enough space to hold
- LEN characters. */
-void
-rl_extend_line_buffer (len)
- int len;
-{
- while (len >= rl_line_buffer_len)
- {
- rl_line_buffer_len += DEFAULT_BUFFER_SIZE;
- rl_line_buffer = xrealloc (rl_line_buffer, rl_line_buffer_len);
- }
-
- _rl_set_the_line ();
-}
-
-/* **************************************************************** */
-/* */
-/* String Utility Functions */
-/* */
-/* **************************************************************** */
-
-/* Determine if s2 occurs in s1. If so, return a pointer to the
- match in s1. The compare is case insensitive. */
-char *
-_rl_strindex (s1, s2)
- register char *s1, *s2;
-{
- register int i, l, len;
-
- for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++)
- if (_rl_strnicmp (s1 + i, s2, l) == 0)
- return (s1 + i);
- return ((char *)NULL);
-}
-
-#if !defined (HAVE_STRCASECMP)
-/* Compare at most COUNT characters from string1 to string2. Case
- doesn't matter. */
-int
-_rl_strnicmp (string1, string2, count)
- char *string1, *string2;
- int count;
-{
- register char ch1, ch2;
-
- while (count)
- {
- ch1 = *string1++;
- ch2 = *string2++;
- if (_rl_to_upper(ch1) == _rl_to_upper(ch2))
- count--;
- else
- break;
- }
- return (count);
-}
-
-/* strcmp (), but caseless. */
-int
-_rl_stricmp (string1, string2)
- char *string1, *string2;
-{
- register char ch1, ch2;
-
- while (*string1 && *string2)
- {
- ch1 = *string1++;
- ch2 = *string2++;
- if (_rl_to_upper(ch1) != _rl_to_upper(ch2))
- return (1);
- }
- return (*string1 - *string2);
-}
-#endif /* !HAVE_STRCASECMP */
-
-/* Stupid comparison routine for qsort () ing strings. */
-int
-_rl_qsort_string_compare (s1, s2)
- char **s1, **s2;
-{
-#if defined (HAVE_STRCOLL)
- return (strcoll (*s1, *s2));
-#else
- int result;
-
- result = **s1 - **s2;
- if (result == 0)
- result = strcmp (*s1, *s2);
-
- return result;
-#endif
-}
-
-#if !defined (SHELL)
-/* Backwards compatibility, now that savestring has been removed from
- all `public' readline header files. */
-char *
-rl_savestring (s)
- char *s;
-{
- return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s)));
-}
-#endif /* !SHELL */
-
-/* Function equivalents for the macros defined in chartypes.h. */
-#undef _rl_uppercase_p
-int
-_rl_uppercase_p (c)
- int c;
-{
- return (isupper (c));
-}
-
-#undef _rl_lowercase_p
-int
-_rl_lowercase_p (c)
- int c;
-{
- return (islower (c));
-}
-
-#undef _rl_pure_alphabetic
-int
-_rl_pure_alphabetic (c)
- int c;
-{
- return (isupper (c) || islower (c));
-}
-
-#undef _rl_digit_p
-int
-_rl_digit_p (c)
- int c;
-{
- return (isdigit (c));
-}
-
-#undef _rl_to_lower
-int
-_rl_to_lower (c)
- int c;
-{
- return (isupper (c) ? tolower (c) : c);
-}
-
-#undef _rl_to_upper
-int
-_rl_to_upper (c)
- int c;
-{
- return (islower (c) ? toupper (c) : c);
-}
-
-#undef _rl_digit_value
-int
-_rl_digit_value (c)
- int c;
-{
- return (isdigit (c) ? c - '0' : c);
-}
diff --git a/contrib/libreadline/vi_keymap.c b/contrib/libreadline/vi_keymap.c
deleted file mode 100644
index 14929a319303..000000000000
--- a/contrib/libreadline/vi_keymap.c
+++ /dev/null
@@ -1,877 +0,0 @@
-/* vi_keymap.c -- the keymap for vi_mode in readline (). */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (BUFSIZ)
-#include <stdio.h>
-#endif /* !BUFSIZ */
-
-#include "readline.h"
-
-#if 0
-extern KEYMAP_ENTRY_ARRAY vi_escape_keymap;
-#endif
-
-/* The keymap arrays for handling vi mode. */
-KEYMAP_ENTRY_ARRAY vi_movement_keymap = {
- /* The regular control keys come first. */
- { ISFUNC, (Function *)0x0 }, /* Control-@ */
- { ISFUNC, (Function *)0x0 }, /* Control-a */
- { ISFUNC, (Function *)0x0 }, /* Control-b */
- { ISFUNC, (Function *)0x0 }, /* Control-c */
- { ISFUNC, rl_vi_eof_maybe }, /* Control-d */
- { ISFUNC, rl_emacs_editing_mode }, /* Control-e */
- { ISFUNC, (Function *)0x0 }, /* Control-f */
- { ISFUNC, rl_abort }, /* Control-g */
- { ISFUNC, rl_backward }, /* Control-h */
- { ISFUNC, (Function *)0x0 }, /* Control-i */
- { ISFUNC, rl_newline }, /* Control-j */
- { ISFUNC, rl_kill_line }, /* Control-k */
- { ISFUNC, rl_clear_screen }, /* Control-l */
- { ISFUNC, rl_newline }, /* Control-m */
- { ISFUNC, rl_get_next_history }, /* Control-n */
- { ISFUNC, (Function *)0x0 }, /* Control-o */
- { ISFUNC, rl_get_previous_history }, /* Control-p */
- { ISFUNC, rl_quoted_insert }, /* Control-q */
- { ISFUNC, rl_reverse_search_history }, /* Control-r */
- { ISFUNC, rl_forward_search_history }, /* Control-s */
- { ISFUNC, rl_transpose_chars }, /* Control-t */
- { ISFUNC, rl_unix_line_discard }, /* Control-u */
- { ISFUNC, rl_quoted_insert }, /* Control-v */
- { ISFUNC, rl_unix_word_rubout }, /* Control-w */
- { ISFUNC, (Function *)0x0 }, /* Control-x */
- { ISFUNC, rl_yank }, /* Control-y */
- { ISFUNC, (Function *)0x0 }, /* Control-z */
-
- { ISFUNC, (Function *)0x0 }, /* Control-[ */ /* vi_escape_keymap */
- { ISFUNC, (Function *)0x0 }, /* Control-\ */
- { ISFUNC, (Function *)0x0 }, /* Control-] */
- { ISFUNC, (Function *)0x0 }, /* Control-^ */
- { ISFUNC, rl_vi_undo }, /* Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, rl_forward }, /* SPACE */
- { ISFUNC, (Function *)0x0 }, /* ! */
- { ISFUNC, (Function *)0x0 }, /* " */
- { ISFUNC, rl_insert_comment }, /* # */
- { ISFUNC, rl_end_of_line }, /* $ */
- { ISFUNC, rl_vi_match }, /* % */
- { ISFUNC, rl_vi_tilde_expand }, /* & */
- { ISFUNC, (Function *)0x0 }, /* ' */
- { ISFUNC, (Function *)0x0 }, /* ( */
- { ISFUNC, (Function *)0x0 }, /* ) */
- { ISFUNC, rl_vi_complete }, /* * */
- { ISFUNC, rl_get_next_history}, /* + */
- { ISFUNC, rl_vi_char_search }, /* , */
- { ISFUNC, rl_get_previous_history }, /* - */
- { ISFUNC, rl_vi_redo }, /* . */
- { ISFUNC, rl_vi_search }, /* / */
-
- /* Regular digits. */
- { ISFUNC, rl_beg_of_line }, /* 0 */
- { ISFUNC, rl_vi_arg_digit }, /* 1 */
- { ISFUNC, rl_vi_arg_digit }, /* 2 */
- { ISFUNC, rl_vi_arg_digit }, /* 3 */
- { ISFUNC, rl_vi_arg_digit }, /* 4 */
- { ISFUNC, rl_vi_arg_digit }, /* 5 */
- { ISFUNC, rl_vi_arg_digit }, /* 6 */
- { ISFUNC, rl_vi_arg_digit }, /* 7 */
- { ISFUNC, rl_vi_arg_digit }, /* 8 */
- { ISFUNC, rl_vi_arg_digit }, /* 9 */
-
- /* A little more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* : */
- { ISFUNC, rl_vi_char_search }, /* ; */
- { ISFUNC, (Function *)0x0 }, /* < */
- { ISFUNC, rl_vi_complete }, /* = */
- { ISFUNC, (Function *)0x0 }, /* > */
- { ISFUNC, rl_vi_search }, /* ? */
- { ISFUNC, (Function *)0x0 }, /* @ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_vi_append_eol }, /* A */
- { ISFUNC, rl_vi_prev_word}, /* B */
- { ISFUNC, rl_vi_change_to }, /* C */
- { ISFUNC, rl_vi_delete_to }, /* D */
- { ISFUNC, rl_vi_end_word }, /* E */
- { ISFUNC, rl_vi_char_search }, /* F */
- { ISFUNC, rl_vi_fetch_history }, /* G */
- { ISFUNC, (Function *)0x0 }, /* H */
- { ISFUNC, rl_vi_insert_beg }, /* I */
- { ISFUNC, (Function *)0x0 }, /* J */
- { ISFUNC, (Function *)0x0 }, /* K */
- { ISFUNC, (Function *)0x0 }, /* L */
- { ISFUNC, (Function *)0x0 }, /* M */
- { ISFUNC, rl_vi_search_again }, /* N */
- { ISFUNC, (Function *)0x0 }, /* O */
- { ISFUNC, rl_vi_put }, /* P */
- { ISFUNC, (Function *)0x0 }, /* Q */
- { ISFUNC, rl_vi_replace }, /* R */
- { ISFUNC, rl_vi_subst }, /* S */
- { ISFUNC, rl_vi_char_search }, /* T */
- { ISFUNC, rl_revert_line }, /* U */
- { ISFUNC, (Function *)0x0 }, /* V */
- { ISFUNC, rl_vi_next_word }, /* W */
- { ISFUNC, rl_rubout }, /* X */
- { ISFUNC, rl_vi_yank_to }, /* Y */
- { ISFUNC, (Function *)0x0 }, /* Z */
-
- /* Some more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* [ */
- { ISFUNC, rl_vi_complete }, /* \ */
- { ISFUNC, (Function *)0x0 }, /* ] */
- { ISFUNC, rl_vi_first_print }, /* ^ */
- { ISFUNC, rl_vi_yank_arg }, /* _ */
- { ISFUNC, rl_vi_goto_mark }, /* ` */
-
- /* Lowercase alphabet. */
- { ISFUNC, rl_vi_append_mode }, /* a */
- { ISFUNC, rl_vi_prev_word }, /* b */
- { ISFUNC, rl_vi_change_to }, /* c */
- { ISFUNC, rl_vi_delete_to }, /* d */
- { ISFUNC, rl_vi_end_word }, /* e */
- { ISFUNC, rl_vi_char_search }, /* f */
- { ISFUNC, (Function *)0x0 }, /* g */
- { ISFUNC, rl_backward }, /* h */
- { ISFUNC, rl_vi_insertion_mode }, /* i */
- { ISFUNC, rl_get_next_history }, /* j */
- { ISFUNC, rl_get_previous_history }, /* k */
- { ISFUNC, rl_forward }, /* l */
- { ISFUNC, rl_vi_set_mark }, /* m */
- { ISFUNC, rl_vi_search_again }, /* n */
- { ISFUNC, (Function *)0x0 }, /* o */
- { ISFUNC, rl_vi_put }, /* p */
- { ISFUNC, (Function *)0x0 }, /* q */
- { ISFUNC, rl_vi_change_char }, /* r */
- { ISFUNC, rl_vi_subst }, /* s */
- { ISFUNC, rl_vi_char_search }, /* t */
- { ISFUNC, rl_vi_undo }, /* u */
- { ISFUNC, (Function *)0x0 }, /* v */
- { ISFUNC, rl_vi_next_word }, /* w */
- { ISFUNC, rl_vi_delete }, /* x */
- { ISFUNC, rl_vi_yank_to }, /* y */
- { ISFUNC, (Function *)0x0 }, /* z */
-
- /* Final punctuation. */
- { ISFUNC, (Function *)0x0 }, /* { */
- { ISFUNC, rl_vi_column }, /* | */
- { ISFUNC, (Function *)0x0 }, /* } */
- { ISFUNC, rl_vi_change_case }, /* ~ */
- { ISFUNC, (Function *)0x0 }, /* RUBOUT */
-
-#if KEYMAP_SIZE > 128
- /* Undefined keys. */
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 }
-#endif /* KEYMAP_SIZE > 128 */
-};
-
-
-KEYMAP_ENTRY_ARRAY vi_insertion_keymap = {
- /* The regular control keys come first. */
- { ISFUNC, (Function *)0x0 }, /* Control-@ */
- { ISFUNC, rl_insert }, /* Control-a */
- { ISFUNC, rl_insert }, /* Control-b */
- { ISFUNC, rl_insert }, /* Control-c */
- { ISFUNC, rl_vi_eof_maybe }, /* Control-d */
- { ISFUNC, rl_insert }, /* Control-e */
- { ISFUNC, rl_insert }, /* Control-f */
- { ISFUNC, rl_insert }, /* Control-g */
- { ISFUNC, rl_rubout }, /* Control-h */
- { ISFUNC, rl_complete }, /* Control-i */
- { ISFUNC, rl_newline }, /* Control-j */
- { ISFUNC, rl_insert }, /* Control-k */
- { ISFUNC, rl_insert }, /* Control-l */
- { ISFUNC, rl_newline }, /* Control-m */
- { ISFUNC, rl_insert }, /* Control-n */
- { ISFUNC, rl_insert }, /* Control-o */
- { ISFUNC, rl_insert }, /* Control-p */
- { ISFUNC, rl_insert }, /* Control-q */
- { ISFUNC, rl_reverse_search_history }, /* Control-r */
- { ISFUNC, rl_forward_search_history }, /* Control-s */
- { ISFUNC, rl_transpose_chars }, /* Control-t */
- { ISFUNC, rl_unix_line_discard }, /* Control-u */
- { ISFUNC, rl_quoted_insert }, /* Control-v */
- { ISFUNC, rl_unix_word_rubout }, /* Control-w */
- { ISFUNC, rl_insert }, /* Control-x */
- { ISFUNC, rl_yank }, /* Control-y */
- { ISFUNC, rl_insert }, /* Control-z */
-
- { ISFUNC, rl_vi_movement_mode }, /* Control-[ */
- { ISFUNC, rl_insert }, /* Control-\ */
- { ISFUNC, rl_insert }, /* Control-] */
- { ISFUNC, rl_insert }, /* Control-^ */
- { ISFUNC, rl_vi_undo }, /* Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, rl_insert }, /* SPACE */
- { ISFUNC, rl_insert }, /* ! */
- { ISFUNC, rl_insert }, /* " */
- { ISFUNC, rl_insert }, /* # */
- { ISFUNC, rl_insert }, /* $ */
- { ISFUNC, rl_insert }, /* % */
- { ISFUNC, rl_insert }, /* & */
- { ISFUNC, rl_insert }, /* ' */
- { ISFUNC, rl_insert }, /* ( */
- { ISFUNC, rl_insert }, /* ) */
- { ISFUNC, rl_insert }, /* * */
- { ISFUNC, rl_insert }, /* + */
- { ISFUNC, rl_insert }, /* , */
- { ISFUNC, rl_insert }, /* - */
- { ISFUNC, rl_insert }, /* . */
- { ISFUNC, rl_insert }, /* / */
-
- /* Regular digits. */
- { ISFUNC, rl_insert }, /* 0 */
- { ISFUNC, rl_insert }, /* 1 */
- { ISFUNC, rl_insert }, /* 2 */
- { ISFUNC, rl_insert }, /* 3 */
- { ISFUNC, rl_insert }, /* 4 */
- { ISFUNC, rl_insert }, /* 5 */
- { ISFUNC, rl_insert }, /* 6 */
- { ISFUNC, rl_insert }, /* 7 */
- { ISFUNC, rl_insert }, /* 8 */
- { ISFUNC, rl_insert }, /* 9 */
-
- /* A little more punctuation. */
- { ISFUNC, rl_insert }, /* : */
- { ISFUNC, rl_insert }, /* ; */
- { ISFUNC, rl_insert }, /* < */
- { ISFUNC, rl_insert }, /* = */
- { ISFUNC, rl_insert }, /* > */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* @ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_insert }, /* A */
- { ISFUNC, rl_insert }, /* B */
- { ISFUNC, rl_insert }, /* C */
- { ISFUNC, rl_insert }, /* D */
- { ISFUNC, rl_insert }, /* E */
- { ISFUNC, rl_insert }, /* F */
- { ISFUNC, rl_insert }, /* G */
- { ISFUNC, rl_insert }, /* H */
- { ISFUNC, rl_insert }, /* I */
- { ISFUNC, rl_insert }, /* J */
- { ISFUNC, rl_insert }, /* K */
- { ISFUNC, rl_insert }, /* L */
- { ISFUNC, rl_insert }, /* M */
- { ISFUNC, rl_insert }, /* N */
- { ISFUNC, rl_insert }, /* O */
- { ISFUNC, rl_insert }, /* P */
- { ISFUNC, rl_insert }, /* Q */
- { ISFUNC, rl_insert }, /* R */
- { ISFUNC, rl_insert }, /* S */
- { ISFUNC, rl_insert }, /* T */
- { ISFUNC, rl_insert }, /* U */
- { ISFUNC, rl_insert }, /* V */
- { ISFUNC, rl_insert }, /* W */
- { ISFUNC, rl_insert }, /* X */
- { ISFUNC, rl_insert }, /* Y */
- { ISFUNC, rl_insert }, /* Z */
-
- /* Some more punctuation. */
- { ISFUNC, rl_insert }, /* [ */
- { ISFUNC, rl_insert }, /* \ */
- { ISFUNC, rl_insert }, /* ] */
- { ISFUNC, rl_insert }, /* ^ */
- { ISFUNC, rl_insert }, /* _ */
- { ISFUNC, rl_insert }, /* ` */
-
- /* Lowercase alphabet. */
- { ISFUNC, rl_insert }, /* a */
- { ISFUNC, rl_insert }, /* b */
- { ISFUNC, rl_insert }, /* c */
- { ISFUNC, rl_insert }, /* d */
- { ISFUNC, rl_insert }, /* e */
- { ISFUNC, rl_insert }, /* f */
- { ISFUNC, rl_insert }, /* g */
- { ISFUNC, rl_insert }, /* h */
- { ISFUNC, rl_insert }, /* i */
- { ISFUNC, rl_insert }, /* j */
- { ISFUNC, rl_insert }, /* k */
- { ISFUNC, rl_insert }, /* l */
- { ISFUNC, rl_insert }, /* m */
- { ISFUNC, rl_insert }, /* n */
- { ISFUNC, rl_insert }, /* o */
- { ISFUNC, rl_insert }, /* p */
- { ISFUNC, rl_insert }, /* q */
- { ISFUNC, rl_insert }, /* r */
- { ISFUNC, rl_insert }, /* s */
- { ISFUNC, rl_insert }, /* t */
- { ISFUNC, rl_insert }, /* u */
- { ISFUNC, rl_insert }, /* v */
- { ISFUNC, rl_insert }, /* w */
- { ISFUNC, rl_insert }, /* x */
- { ISFUNC, rl_insert }, /* y */
- { ISFUNC, rl_insert }, /* z */
-
- /* Final punctuation. */
- { ISFUNC, rl_insert }, /* { */
- { ISFUNC, rl_insert }, /* | */
- { ISFUNC, rl_insert }, /* } */
- { ISFUNC, rl_insert }, /* ~ */
- { ISFUNC, rl_rubout }, /* RUBOUT */
-
-#if KEYMAP_SIZE > 128
- /* Pure 8-bit characters (128 - 159).
- These might be used in some
- character sets. */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
- { ISFUNC, rl_insert }, /* ? */
-
- /* ISO Latin-1 characters (160 - 255) */
- { ISFUNC, rl_insert }, /* No-break space */
- { ISFUNC, rl_insert }, /* Inverted exclamation mark */
- { ISFUNC, rl_insert }, /* Cent sign */
- { ISFUNC, rl_insert }, /* Pound sign */
- { ISFUNC, rl_insert }, /* Currency sign */
- { ISFUNC, rl_insert }, /* Yen sign */
- { ISFUNC, rl_insert }, /* Broken bar */
- { ISFUNC, rl_insert }, /* Section sign */
- { ISFUNC, rl_insert }, /* Diaeresis */
- { ISFUNC, rl_insert }, /* Copyright sign */
- { ISFUNC, rl_insert }, /* Feminine ordinal indicator */
- { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */
- { ISFUNC, rl_insert }, /* Not sign */
- { ISFUNC, rl_insert }, /* Soft hyphen */
- { ISFUNC, rl_insert }, /* Registered sign */
- { ISFUNC, rl_insert }, /* Macron */
- { ISFUNC, rl_insert }, /* Degree sign */
- { ISFUNC, rl_insert }, /* Plus-minus sign */
- { ISFUNC, rl_insert }, /* Superscript two */
- { ISFUNC, rl_insert }, /* Superscript three */
- { ISFUNC, rl_insert }, /* Acute accent */
- { ISFUNC, rl_insert }, /* Micro sign */
- { ISFUNC, rl_insert }, /* Pilcrow sign */
- { ISFUNC, rl_insert }, /* Middle dot */
- { ISFUNC, rl_insert }, /* Cedilla */
- { ISFUNC, rl_insert }, /* Superscript one */
- { ISFUNC, rl_insert }, /* Masculine ordinal indicator */
- { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */
- { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */
- { ISFUNC, rl_insert }, /* Vulgar fraction one half */
- { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */
- { ISFUNC, rl_insert }, /* Inverted questionk mark */
- { ISFUNC, rl_insert }, /* Latin capital letter a with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter a with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */
- { ISFUNC, rl_insert }, /* Latin capital letter ae */
- { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */
- { ISFUNC, rl_insert }, /* Latin capital letter e with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter e with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter i with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter i with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter o with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter o with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */
- { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */
- { ISFUNC, rl_insert }, /* Multiplication sign */
- { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */
- { ISFUNC, rl_insert }, /* Latin capital letter u with grave */
- { ISFUNC, rl_insert }, /* Latin capital letter u with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */
- { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */
- { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */
- { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */
- { ISFUNC, rl_insert }, /* Latin small letter a with grave */
- { ISFUNC, rl_insert }, /* Latin small letter a with acute */
- { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter a with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter a with ring above */
- { ISFUNC, rl_insert }, /* Latin small letter ae */
- { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */
- { ISFUNC, rl_insert }, /* Latin small letter e with grave */
- { ISFUNC, rl_insert }, /* Latin small letter e with acute */
- { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter i with grave */
- { ISFUNC, rl_insert }, /* Latin small letter i with acute */
- { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */
- { ISFUNC, rl_insert }, /* Latin small letter n with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter o with grave */
- { ISFUNC, rl_insert }, /* Latin small letter o with acute */
- { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter o with tilde */
- { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */
- { ISFUNC, rl_insert }, /* Division sign */
- { ISFUNC, rl_insert }, /* Latin small letter o with stroke */
- { ISFUNC, rl_insert }, /* Latin small letter u with grave */
- { ISFUNC, rl_insert }, /* Latin small letter u with acute */
- { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */
- { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */
- { ISFUNC, rl_insert }, /* Latin small letter y with acute */
- { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */
- { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */
-#endif /* KEYMAP_SIZE > 128 */
-};
-
-/* Unused for the time being. */
-#if 0
-KEYMAP_ENTRY_ARRAY vi_escape_keymap = {
- /* The regular control keys come first. */
- { ISFUNC, (Function *)0x0 }, /* Control-@ */
- { ISFUNC, (Function *)0x0 }, /* Control-a */
- { ISFUNC, (Function *)0x0 }, /* Control-b */
- { ISFUNC, (Function *)0x0 }, /* Control-c */
- { ISFUNC, (Function *)0x0 }, /* Control-d */
- { ISFUNC, (Function *)0x0 }, /* Control-e */
- { ISFUNC, (Function *)0x0 }, /* Control-f */
- { ISFUNC, (Function *)0x0 }, /* Control-g */
- { ISFUNC, (Function *)0x0 }, /* Control-h */
- { ISFUNC, rl_tab_insert}, /* Control-i */
- { ISFUNC, rl_emacs_editing_mode}, /* Control-j */
- { ISFUNC, rl_kill_line }, /* Control-k */
- { ISFUNC, (Function *)0x0 }, /* Control-l */
- { ISFUNC, rl_emacs_editing_mode}, /* Control-m */
- { ISFUNC, (Function *)0x0 }, /* Control-n */
- { ISFUNC, (Function *)0x0 }, /* Control-o */
- { ISFUNC, (Function *)0x0 }, /* Control-p */
- { ISFUNC, (Function *)0x0 }, /* Control-q */
- { ISFUNC, (Function *)0x0 }, /* Control-r */
- { ISFUNC, (Function *)0x0 }, /* Control-s */
- { ISFUNC, (Function *)0x0 }, /* Control-t */
- { ISFUNC, (Function *)0x0 }, /* Control-u */
- { ISFUNC, (Function *)0x0 }, /* Control-v */
- { ISFUNC, (Function *)0x0 }, /* Control-w */
- { ISFUNC, (Function *)0x0 }, /* Control-x */
- { ISFUNC, (Function *)0x0 }, /* Control-y */
- { ISFUNC, (Function *)0x0 }, /* Control-z */
-
- { ISFUNC, rl_vi_movement_mode }, /* Control-[ */
- { ISFUNC, (Function *)0x0 }, /* Control-\ */
- { ISFUNC, (Function *)0x0 }, /* Control-] */
- { ISFUNC, (Function *)0x0 }, /* Control-^ */
- { ISFUNC, rl_vi_undo }, /* Control-_ */
-
- /* The start of printing characters. */
- { ISFUNC, (Function *)0x0 }, /* SPACE */
- { ISFUNC, (Function *)0x0 }, /* ! */
- { ISFUNC, (Function *)0x0 }, /* " */
- { ISFUNC, (Function *)0x0 }, /* # */
- { ISFUNC, (Function *)0x0 }, /* $ */
- { ISFUNC, (Function *)0x0 }, /* % */
- { ISFUNC, (Function *)0x0 }, /* & */
- { ISFUNC, (Function *)0x0 }, /* ' */
- { ISFUNC, (Function *)0x0 }, /* ( */
- { ISFUNC, (Function *)0x0 }, /* ) */
- { ISFUNC, (Function *)0x0 }, /* * */
- { ISFUNC, (Function *)0x0 }, /* + */
- { ISFUNC, (Function *)0x0 }, /* , */
- { ISFUNC, (Function *)0x0 }, /* - */
- { ISFUNC, (Function *)0x0 }, /* . */
- { ISFUNC, (Function *)0x0 }, /* / */
-
- /* Regular digits. */
- { ISFUNC, rl_vi_arg_digit }, /* 0 */
- { ISFUNC, rl_vi_arg_digit }, /* 1 */
- { ISFUNC, rl_vi_arg_digit }, /* 2 */
- { ISFUNC, rl_vi_arg_digit }, /* 3 */
- { ISFUNC, rl_vi_arg_digit }, /* 4 */
- { ISFUNC, rl_vi_arg_digit }, /* 5 */
- { ISFUNC, rl_vi_arg_digit }, /* 6 */
- { ISFUNC, rl_vi_arg_digit }, /* 7 */
- { ISFUNC, rl_vi_arg_digit }, /* 8 */
- { ISFUNC, rl_vi_arg_digit }, /* 9 */
-
- /* A little more punctuation. */
- { ISFUNC, (Function *)0x0 }, /* : */
- { ISFUNC, (Function *)0x0 }, /* ; */
- { ISFUNC, (Function *)0x0 }, /* < */
- { ISFUNC, (Function *)0x0 }, /* = */
- { ISFUNC, (Function *)0x0 }, /* > */
- { ISFUNC, (Function *)0x0 }, /* ? */
- { ISFUNC, (Function *)0x0 }, /* @ */
-
- /* Uppercase alphabet. */
- { ISFUNC, rl_do_lowercase_version }, /* A */
- { ISFUNC, rl_do_lowercase_version }, /* B */
- { ISFUNC, rl_do_lowercase_version }, /* C */
- { ISFUNC, rl_do_lowercase_version }, /* D */
- { ISFUNC, rl_do_lowercase_version }, /* E */
- { ISFUNC, rl_do_lowercase_version }, /* F */
- { ISFUNC, rl_do_lowercase_version }, /* G */
- { ISFUNC, rl_do_lowercase_version }, /* H */
- { ISFUNC, rl_do_lowercase_version }, /* I */
- { ISFUNC, rl_do_lowercase_version }, /* J */
- { ISFUNC, rl_do_lowercase_version }, /* K */
- { ISFUNC, rl_do_lowercase_version }, /* L */
- { ISFUNC, rl_do_lowercase_version }, /* M */
- { ISFUNC, rl_do_lowercase_version }, /* N */
- { ISFUNC, rl_do_lowercase_version }, /* O */
- { ISFUNC, rl_do_lowercase_version }, /* P */
- { ISFUNC, rl_do_lowercase_version }, /* Q */
- { ISFUNC, rl_do_lowercase_version }, /* R */
- { ISFUNC, rl_do_lowercase_version }, /* S */
- { ISFUNC, rl_do_lowercase_version }, /* T */
- { ISFUNC, rl_do_lowercase_version }, /* U */
- { ISFUNC, rl_do_lowercase_version }, /* V */
- { ISFUNC, rl_do_lowercase_version }, /* W */
- { ISFUNC, rl_do_lowercase_version }, /* X */
- { ISFUNC, rl_do_lowercase_version }, /* Y */
- { ISFUNC, rl_do_lowercase_version }, /* Z */
-
- /* Some more punctuation. */
- { ISFUNC, rl_arrow_keys }, /* [ */
- { ISFUNC, (Function *)0x0 }, /* \ */
- { ISFUNC, (Function *)0x0 }, /* ] */
- { ISFUNC, (Function *)0x0 }, /* ^ */
- { ISFUNC, (Function *)0x0 }, /* _ */
- { ISFUNC, (Function *)0x0 }, /* ` */
-
- /* Lowercase alphabet. */
- { ISFUNC, (Function *)0x0 }, /* a */
- { ISFUNC, (Function *)0x0 }, /* b */
- { ISFUNC, (Function *)0x0 }, /* c */
- { ISFUNC, (Function *)0x0 }, /* d */
- { ISFUNC, (Function *)0x0 }, /* e */
- { ISFUNC, (Function *)0x0 }, /* f */
- { ISFUNC, (Function *)0x0 }, /* g */
- { ISFUNC, (Function *)0x0 }, /* h */
- { ISFUNC, (Function *)0x0 }, /* i */
- { ISFUNC, (Function *)0x0 }, /* j */
- { ISFUNC, (Function *)0x0 }, /* k */
- { ISFUNC, (Function *)0x0 }, /* l */
- { ISFUNC, (Function *)0x0 }, /* m */
- { ISFUNC, (Function *)0x0 }, /* n */
- { ISFUNC, rl_arrow_keys }, /* o */
- { ISFUNC, (Function *)0x0 }, /* p */
- { ISFUNC, (Function *)0x0 }, /* q */
- { ISFUNC, (Function *)0x0 }, /* r */
- { ISFUNC, (Function *)0x0 }, /* s */
- { ISFUNC, (Function *)0x0 }, /* t */
- { ISFUNC, (Function *)0x0 }, /* u */
- { ISFUNC, (Function *)0x0 }, /* v */
- { ISFUNC, (Function *)0x0 }, /* w */
- { ISFUNC, (Function *)0x0 }, /* x */
- { ISFUNC, (Function *)0x0 }, /* y */
- { ISFUNC, (Function *)0x0 }, /* z */
-
- /* Final punctuation. */
- { ISFUNC, (Function *)0x0 }, /* { */
- { ISFUNC, (Function *)0x0 }, /* | */
- { ISFUNC, (Function *)0x0 }, /* } */
- { ISFUNC, (Function *)0x0 }, /* ~ */
- { ISFUNC, rl_backward_kill_word }, /* RUBOUT */
-
-#if KEYMAP_SIZE > 128
- /* Undefined keys. */
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 },
- { ISFUNC, (Function *)0x0 }
-#endif /* KEYMAP_SIZE > 128 */
-};
-#endif
diff --git a/contrib/libreadline/vi_mode.c b/contrib/libreadline/vi_mode.c
deleted file mode 100644
index c730296d0a57..000000000000
--- a/contrib/libreadline/vi_mode.c
+++ /dev/null
@@ -1,1378 +0,0 @@
-/* vi_mode.c -- A vi emulation mode for Bash.
- Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */
-
-/* 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 1, 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,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
-#define READLINE_LIBRARY
-
-/* **************************************************************** */
-/* */
-/* VI Emulation Mode */
-/* */
-/* **************************************************************** */
-#include "rlconf.h"
-
-#if defined (VI_MODE)
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
-
-#include <stdio.h>
-
-/* Some standard library routines. */
-#include "rldefs.h"
-#include "readline.h"
-#include "history.h"
-
-#ifndef _rl_digit_p
-#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-#endif
-
-#ifndef _rl_digit_value
-#define _rl_digit_value(c) ((c) - '0')
-#endif
-
-#ifndef member
-#define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0)
-#endif
-
-#ifndef isident
-#define isident(c) ((_rl_pure_alphabetic (c) || _rl_digit_p (c) || c == '_'))
-#endif
-
-#ifndef exchange
-#define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0)
-#endif
-
-extern char *xmalloc (), *xrealloc ();
-
-/* Variables imported from readline.c */
-extern int rl_point, rl_end, rl_mark, rl_done;
-extern FILE *rl_instream;
-extern int rl_line_buffer_len, rl_explicit_arg, rl_numeric_arg;
-extern Keymap _rl_keymap;
-extern char *rl_prompt;
-extern char *rl_line_buffer;
-extern int rl_arg_sign;
-
-extern int _rl_doing_an_undo;
-extern int _rl_undo_group_level;
-
-extern void _rl_dispatch ();
-extern int _rl_char_search_internal ();
-
-extern void rl_extend_line_buffer ();
-extern int rl_vi_check ();
-
-/* Non-zero means enter insertion mode. */
-static int _rl_vi_doing_insert;
-
-/* Command keys which do movement for xxx_to commands. */
-static char *vi_motion = " hl^$0ftFt;,%wbeWBE|";
-
-/* Keymap used for vi replace characters. Created dynamically since
- rarely used. */
-static Keymap vi_replace_map;
-
-/* The number of characters inserted in the last replace operation. */
-static int vi_replace_count;
-
-/* If non-zero, we have text inserted after a c[motion] command that put
- us implicitly into insert mode. Some people want this text to be
- attached to the command so that it is `redoable' with `.'. */
-static int vi_continued_command;
-static char *vi_insert_buffer;
-static int vi_insert_buffer_size;
-
-static int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */
-static int _rl_vi_last_repeat = 1;
-static int _rl_vi_last_arg_sign = 1;
-static int _rl_vi_last_motion;
-static int _rl_vi_last_search_char;
-static int _rl_vi_last_replacement;
-
-static int _rl_vi_last_key_before_insert;
-
-static int vi_redoing;
-
-/* Text modification commands. These are the `redoable' commands. */
-static char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
-
-/* Arrays for the saved marks. */
-static int vi_mark_chars[27];
-
-static int rl_digit_loop1 ();
-
-void
-_rl_vi_initialize_line ()
-{
- register int i;
-
- for (i = 0; i < sizeof (vi_mark_chars) / sizeof (int); i++)
- vi_mark_chars[i] = -1;
-}
-
-void
-_rl_vi_reset_last ()
-{
- _rl_vi_last_command = 'i';
- _rl_vi_last_repeat = 1;
- _rl_vi_last_arg_sign = 1;
- _rl_vi_last_motion = 0;
-}
-
-void
-_rl_vi_set_last (key, repeat, sign)
- int key, repeat, sign;
-{
- _rl_vi_last_command = key;
- _rl_vi_last_repeat = repeat;
- _rl_vi_last_arg_sign = sign;
-}
-
-/* Is the command C a VI mode text modification command? */
-int
-_rl_vi_textmod_command (c)
- int c;
-{
- return (member (c, vi_textmod));
-}
-
-static void
-_rl_vi_stuff_insert (count)
- int count;
-{
- rl_begin_undo_group ();
- while (count--)
- rl_insert_text (vi_insert_buffer);
- rl_end_undo_group ();
-}
-
-/* Bound to `.'. Called from command mode, so we know that we have to
- redo a text modification command. The default for _rl_vi_last_command
- puts you back into insert mode. */
-int
-rl_vi_redo (count, c)
- int count, c;
-{
- if (!rl_explicit_arg)
- {
- rl_numeric_arg = _rl_vi_last_repeat;
- rl_arg_sign = _rl_vi_last_arg_sign;
- }
-
- vi_redoing = 1;
- /* If we're redoing an insert with `i', stuff in the inserted text
- and do not go into insertion mode. */
- if (_rl_vi_last_command == 'i' && vi_insert_buffer && *vi_insert_buffer)
- {
- _rl_vi_stuff_insert (count);
- /* And back up point over the last character inserted. */
- if (rl_point > 0)
- rl_point--;
- }
- else
- _rl_dispatch (_rl_vi_last_command, _rl_keymap);
- vi_redoing = 0;
-
- return (0);
-}
-
-/* A placeholder for further expansion. */
-int
-rl_vi_undo (count, key)
- int count, key;
-{
- return (rl_undo_command (count, key));
-}
-
-/* Yank the nth arg from the previous line into this line at point. */
-int
-rl_vi_yank_arg (count, key)
- int count, key;
-{
- /* Readline thinks that the first word on a line is the 0th, while vi
- thinks the first word on a line is the 1st. Compensate. */
- if (rl_explicit_arg)
- rl_yank_nth_arg (count - 1, 0);
- else
- rl_yank_nth_arg ('$', 0);
-
- return (0);
-}
-
-/* With an argument, move back that many history lines, else move to the
- beginning of history. */
-int
-rl_vi_fetch_history (count, c)
- int count, c;
-{
- int wanted;
-
- /* Giving an argument of n means we want the nth command in the history
- file. The command number is interpreted the same way that the bash
- `history' command does it -- that is, giving an argument count of 450
- to this command would get the command listed as number 450 in the
- output of `history'. */
- if (rl_explicit_arg)
- {
- wanted = history_base + where_history () - count;
- if (wanted <= 0)
- rl_beginning_of_history (0, 0);
- else
- rl_get_previous_history (wanted, c);
- }
- else
- rl_beginning_of_history (count, 0);
- return (0);
-}
-
-/* Search again for the last thing searched for. */
-int
-rl_vi_search_again (count, key)
- int count, key;
-{
- switch (key)
- {
- case 'n':
- rl_noninc_reverse_search_again (count, key);
- break;
-
- case 'N':
- rl_noninc_forward_search_again (count, key);
- break;
- }
- return (0);
-}
-
-/* Do a vi style search. */
-int
-rl_vi_search (count, key)
- int count, key;
-{
- switch (key)
- {
- case '?':
- rl_noninc_forward_search (count, key);
- break;
-
- case '/':
- rl_noninc_reverse_search (count, key);
- break;
-
- default:
- ding ();
- break;
- }
- return (0);
-}
-
-/* Completion, from vi's point of view. */
-int
-rl_vi_complete (ignore, key)
- int ignore, key;
-{
- if ((rl_point < rl_end) && (!whitespace (rl_line_buffer[rl_point])))
- {
- if (!whitespace (rl_line_buffer[rl_point + 1]))
- rl_vi_end_word (1, 'E');
- rl_point++;
- }
-
- if (key == '*')
- rl_complete_internal ('*'); /* Expansion and replacement. */
- else if (key == '=')
- rl_complete_internal ('?'); /* List possible completions. */
- else if (key == '\\')
- rl_complete_internal (TAB); /* Standard Readline completion. */
- else
- rl_complete (0, key);
-
- if (key == '*' || key == '\\')
- {
- _rl_vi_set_last (key, 1, rl_arg_sign);
- rl_vi_insertion_mode (1, key);
- }
- return (0);
-}
-
-/* Tilde expansion for vi mode. */
-int
-rl_vi_tilde_expand (ignore, key)
- int ignore, key;
-{
- rl_tilde_expand (0, key);
- _rl_vi_set_last (key, 1, rl_arg_sign); /* XXX */
- rl_vi_insertion_mode (1, key);
- return (0);
-}
-
-/* Previous word in vi mode. */
-int
-rl_vi_prev_word (count, key)
- int count, key;
-{
- if (count < 0)
- return (rl_vi_next_word (-count, key));
-
- if (rl_point == 0)
- {
- ding ();
- return (0);
- }
-
- if (_rl_uppercase_p (key))
- rl_vi_bWord (count);
- else
- rl_vi_bword (count);
-
- return (0);
-}
-
-/* Next word in vi mode. */
-int
-rl_vi_next_word (count, key)
- int count, key;
-{
- if (count < 0)
- return (rl_vi_prev_word (-count, key));
-
- if (rl_point >= (rl_end - 1))
- {
- ding ();
- return (0);
- }
-
- if (_rl_uppercase_p (key))
- rl_vi_fWord (count);
- else
- rl_vi_fword (count);
- return (0);
-}
-
-/* Move to the end of the ?next? word. */
-int
-rl_vi_end_word (count, key)
- int count, key;
-{
- if (count < 0)
- {
- ding ();
- return -1;
- }
-
- if (_rl_uppercase_p (key))
- rl_vi_eWord (count);
- else
- rl_vi_eword (count);
- return (0);
-}
-
-/* Move forward a word the way that 'W' does. */
-int
-rl_vi_fWord (count)
- int count;
-{
- while (count-- && rl_point < (rl_end - 1))
- {
- /* Skip until whitespace. */
- while (!whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
- rl_point++;
-
- /* Now skip whitespace. */
- while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
- rl_point++;
- }
- return (0);
-}
-
-int
-rl_vi_bWord (count)
- int count;
-{
- while (count-- && rl_point > 0)
- {
- /* If we are at the start of a word, move back to whitespace so
- we will go back to the start of the previous word. */
- if (!whitespace (rl_line_buffer[rl_point]) &&
- whitespace (rl_line_buffer[rl_point - 1]))
- rl_point--;
-
- while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
- rl_point--;
-
- if (rl_point > 0)
- {
- while (--rl_point >= 0 && !whitespace (rl_line_buffer[rl_point]));
- rl_point++;
- }
- }
- return (0);
-}
-
-int
-rl_vi_eWord (count)
- int count;
-{
- while (count-- && rl_point < (rl_end - 1))
- {
- if (!whitespace (rl_line_buffer[rl_point]))
- rl_point++;
-
- /* Move to the next non-whitespace character (to the start of the
- next word). */
- while (++rl_point < rl_end && whitespace (rl_line_buffer[rl_point]));
-
- if (rl_point && rl_point < rl_end)
- {
- /* Skip whitespace. */
- while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
- rl_point++;
-
- /* Skip until whitespace. */
- while (rl_point < rl_end && !whitespace (rl_line_buffer[rl_point]))
- rl_point++;
-
- /* Move back to the last character of the word. */
- rl_point--;
- }
- }
- return (0);
-}
-
-int
-rl_vi_fword (count)
- int count;
-{
- while (count-- && rl_point < (rl_end - 1))
- {
- /* Move to white space (really non-identifer). */
- if (isident (rl_line_buffer[rl_point]))
- {
- while (isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
- rl_point++;
- }
- else /* if (!whitespace (rl_line_buffer[rl_point])) */
- {
- while (!isident (rl_line_buffer[rl_point]) &&
- !whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
- rl_point++;
- }
-
- /* Move past whitespace. */
- while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
- rl_point++;
- }
- return (0);
-}
-
-int
-rl_vi_bword (count)
- int count;
-{
- while (count-- && rl_point > 0)
- {
- int last_is_ident;
-
- /* If we are at the start of a word, move back to whitespace
- so we will go back to the start of the previous word. */
- if (!whitespace (rl_line_buffer[rl_point]) &&
- whitespace (rl_line_buffer[rl_point - 1]))
- rl_point--;
-
- /* If this character and the previous character are `opposite', move
- back so we don't get messed up by the rl_point++ down there in
- the while loop. Without this code, words like `l;' screw up the
- function. */
- last_is_ident = isident (rl_line_buffer[rl_point - 1]);
- if ((isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
- (!isident (rl_line_buffer[rl_point]) && last_is_ident))
- rl_point--;
-
- while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
- rl_point--;
-
- if (rl_point > 0)
- {
- if (isident (rl_line_buffer[rl_point]))
- while (--rl_point >= 0 && isident (rl_line_buffer[rl_point]));
- else
- while (--rl_point >= 0 && !isident (rl_line_buffer[rl_point]) &&
- !whitespace (rl_line_buffer[rl_point]));
- rl_point++;
- }
- }
- return (0);
-}
-
-int
-rl_vi_eword (count)
- int count;
-{
- while (count-- && rl_point < rl_end - 1)
- {
- if (!whitespace (rl_line_buffer[rl_point]))
- rl_point++;
-
- while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
- rl_point++;
-
- if (rl_point < rl_end)
- {
- if (isident (rl_line_buffer[rl_point]))
- while (++rl_point < rl_end && isident (rl_line_buffer[rl_point]));
- else
- while (++rl_point < rl_end && !isident (rl_line_buffer[rl_point])
- && !whitespace (rl_line_buffer[rl_point]));
- }
- rl_point--;
- }
- return (0);
-}
-
-int
-rl_vi_insert_beg (count, key)
- int count, key;
-{
- rl_beg_of_line (1, key);
- rl_vi_insertion_mode (1, key);
- return (0);
-}
-
-int
-rl_vi_append_mode (count, key)
- int count, key;
-{
- if (rl_point < rl_end)
- rl_point++;
- rl_vi_insertion_mode (1, key);
- return (0);
-}
-
-int
-rl_vi_append_eol (count, key)
- int count, key;
-{
- rl_end_of_line (1, key);
- rl_vi_append_mode (1, key);
- return (0);
-}
-
-/* What to do in the case of C-d. */
-int
-rl_vi_eof_maybe (count, c)
- int count, c;
-{
- return (rl_newline (1, '\n'));
-}
-
-/* Insertion mode stuff. */
-
-/* Switching from one mode to the other really just involves
- switching keymaps. */
-int
-rl_vi_insertion_mode (count, key)
- int count, key;
-{
- _rl_keymap = vi_insertion_keymap;
- _rl_vi_last_key_before_insert = key;
- return (0);
-}
-
-static void
-_rl_vi_save_insert (up)
- UNDO_LIST *up;
-{
- int len, start, end;
-
- start = up->start;
- end = up->end;
- len = end - start + 1;
- if (len >= vi_insert_buffer_size)
- {
- vi_insert_buffer_size += (len + 32) - (len % 32);
- vi_insert_buffer = xrealloc (vi_insert_buffer, vi_insert_buffer_size);
- }
- strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1);
- vi_insert_buffer[len-1] = '\0';
-}
-
-void
-_rl_vi_done_inserting ()
-{
- if (_rl_vi_doing_insert)
- {
- rl_end_undo_group ();
- /* Now, the text between rl_undo_list->next->start and
- rl_undo_list->next->end is what was inserted while in insert
- mode. It gets copied to VI_INSERT_BUFFER because it depends
- on absolute indices into the line which may change (though they
- probably will not). */
- _rl_vi_doing_insert = 0;
- _rl_vi_save_insert (rl_undo_list->next);
- vi_continued_command = 1;
- }
- else
- {
- if (_rl_vi_last_key_before_insert == 'i' && rl_undo_list)
- _rl_vi_save_insert (rl_undo_list);
- /* XXX - Other keys probably need to be checked. */
- else if (_rl_vi_last_key_before_insert == 'C')
- rl_end_undo_group ();
- while (_rl_undo_group_level > 0)
- rl_end_undo_group ();
- vi_continued_command = 0;
- }
-}
-
-int
-rl_vi_movement_mode (count, key)
- int count, key;
-{
- if (rl_point > 0)
- rl_backward (1, key);
-
- _rl_keymap = vi_movement_keymap;
- _rl_vi_done_inserting ();
- return (0);
-}
-
-int
-rl_vi_arg_digit (count, c)
- int count, c;
-{
- if (c == '0' && rl_numeric_arg == 1 && !rl_explicit_arg)
- return (rl_beg_of_line (1, c));
- else
- return (rl_digit_argument (count, c));
-}
-
-int
-rl_vi_change_case (count, ignore)
- int count, ignore;
-{
- char c = 0;
-
- /* Don't try this on an empty line. */
- if (rl_point >= rl_end)
- return (0);
-
- while (count-- && rl_point < rl_end)
- {
- if (_rl_uppercase_p (rl_line_buffer[rl_point]))
- c = _rl_to_lower (rl_line_buffer[rl_point]);
- else if (_rl_lowercase_p (rl_line_buffer[rl_point]))
- c = _rl_to_upper (rl_line_buffer[rl_point]);
- else
- {
- /* Just skip over characters neither upper nor lower case. */
- rl_forward (1, c);
- continue;
- }
-
- /* Vi is kind of strange here. */
- if (c)
- {
- rl_begin_undo_group ();
- rl_delete (1, c);
- rl_insert (1, c);
- rl_end_undo_group ();
- rl_vi_check ();
- }
- else
- rl_forward (1, c);
- }
- return (0);
-}
-
-int
-rl_vi_put (count, key)
- int count, key;
-{
- if (!_rl_uppercase_p (key) && (rl_point + 1 <= rl_end))
- rl_point++;
-
- rl_yank ();
- rl_backward (1, key);
- return (0);
-}
-
-int
-rl_vi_check ()
-{
- if (rl_point && rl_point == rl_end)
- rl_point--;
- return (0);
-}
-
-int
-rl_vi_column (count, key)
- int count, key;
-{
- if (count > rl_end)
- rl_end_of_line (1, key);
- else
- rl_point = count - 1;
- return (0);
-}
-
-int
-rl_vi_domove (key, nextkey)
- int key, *nextkey;
-{
- int c, save;
- int old_end;
-
- rl_mark = rl_point;
- c = rl_read_key ();
- *nextkey = c;
-
- if (!member (c, vi_motion))
- {
- if (_rl_digit_p (c))
- {
- save = rl_numeric_arg;
- rl_numeric_arg = _rl_digit_value (c);
- rl_digit_loop1 ();
- rl_numeric_arg *= save;
- c = rl_read_key (); /* real command */
- *nextkey = c;
- }
- else if (key == c && (key == 'd' || key == 'y' || key == 'c'))
- {
- rl_mark = rl_end;
- rl_beg_of_line (1, c);
- _rl_vi_last_motion = c;
- return (0);
- }
- else
- return (-1);
- }
-
- _rl_vi_last_motion = c;
-
- /* Append a blank character temporarily so that the motion routines
- work right at the end of the line. */
- old_end = rl_end;
- rl_line_buffer[rl_end++] = ' ';
- rl_line_buffer[rl_end] = '\0';
-
- _rl_dispatch (c, _rl_keymap);
-
- /* Remove the blank that we added. */
- rl_end = old_end;
- rl_line_buffer[rl_end] = '\0';
- if (rl_point > rl_end)
- rl_point = rl_end;
-
- /* No change in position means the command failed. */
- if (rl_mark == rl_point)
- return (-1);
-
- /* rl_vi_f[wW]ord () leaves the cursor on the first character of the next
- word. If we are not at the end of the line, and we are on a
- non-whitespace character, move back one (presumably to whitespace). */
- if ((_rl_to_upper (c) == 'W') && rl_point < rl_end && rl_point > rl_mark &&
- !whitespace (rl_line_buffer[rl_point]))
- rl_point--;
-
- /* If cw or cW, back up to the end of a word, so the behaviour of ce
- or cE is the actual result. Brute-force, no subtlety. */
- if (key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W'))
- {
- /* Don't move farther back than where we started. */
- while (rl_point > rl_mark && whitespace (rl_line_buffer[rl_point]))
- rl_point--;
-
- /* Posix.2 says that if cw or cW moves the cursor towards the end of
- the line, the character under the cursor should be deleted. */
- if (rl_point == rl_mark)
- rl_point++;
- else
- {
- /* Move past the end of the word so that the kill doesn't
- remove the last letter of the previous word. Only do this
- if we are not at the end of the line. */
- if (rl_point >= 0 && rl_point < (rl_end - 1) && !whitespace (rl_line_buffer[rl_point]))
- rl_point++;
- }
- }
-
- if (rl_mark < rl_point)
- exchange (rl_point, rl_mark);
-
- return (0);
-}
-
-/* A simplified loop for vi. Don't dispatch key at end.
- Don't recognize minus sign? */
-static int
-rl_digit_loop1 ()
-{
- int key, c;
-
- while (1)
- {
- rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg, 0);
- key = c = rl_read_key ();
-
- if (_rl_keymap[c].type == ISFUNC &&
- _rl_keymap[c].function == rl_universal_argument)
- {
- rl_numeric_arg *= 4;
- continue;
- }
-
- c = UNMETA (c);
- if (_rl_digit_p (c))
- {
- if (rl_explicit_arg)
- rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
- else
- rl_numeric_arg = _rl_digit_value (c);
- rl_explicit_arg = 1;
- }
- else
- {
- rl_clear_message ();
- rl_stuff_char (key);
- break;
- }
- }
- return (0);
-}
-
-int
-rl_vi_delete_to (count, key)
- int count, key;
-{
- int c;
-
- if (_rl_uppercase_p (key))
- rl_stuff_char ('$');
- else if (vi_redoing)
- rl_stuff_char (_rl_vi_last_motion);
-
- if (rl_vi_domove (key, &c))
- {
- ding ();
- return -1;
- }
-
- /* These are the motion commands that do not require adjusting the
- mark. */
- if ((strchr (" l|h^0bB", c) == 0) && (rl_mark < rl_end))
- rl_mark++;
-
- rl_kill_text (rl_point, rl_mark);
- return (0);
-}
-
-int
-rl_vi_change_to (count, key)
- int count, key;
-{
- int c, start_pos;
-
- if (_rl_uppercase_p (key))
- rl_stuff_char ('$');
- else if (vi_redoing)
- rl_stuff_char (_rl_vi_last_motion);
-
- start_pos = rl_point;
-
- if (rl_vi_domove (key, &c))
- {
- ding ();
- return -1;
- }
-
- /* These are the motion commands that do not require adjusting the
- mark. c[wW] are handled by special-case code in rl_vi_domove(),
- and already leave the mark at the correct location. */
- if ((strchr (" l|hwW^0bB", c) == 0) && (rl_mark < rl_end))
- rl_mark++;
-
- /* The cursor never moves with c[wW]. */
- if ((_rl_to_upper (c) == 'W') && rl_point < start_pos)
- rl_point = start_pos;
-
- if (vi_redoing)
- {
- if (vi_insert_buffer && *vi_insert_buffer)
- rl_begin_undo_group ();
- rl_delete_text (rl_point, rl_mark);
- if (vi_insert_buffer && *vi_insert_buffer)
- {
- rl_insert_text (vi_insert_buffer);
- rl_end_undo_group ();
- }
- }
- else
- {
- rl_begin_undo_group (); /* to make the `u' command work */
- rl_kill_text (rl_point, rl_mark);
- /* `C' does not save the text inserted for undoing or redoing. */
- if (_rl_uppercase_p (key) == 0)
- _rl_vi_doing_insert = 1;
- _rl_vi_set_last (key, count, rl_arg_sign);
- rl_vi_insertion_mode (1, key);
- }
-
- return (0);
-}
-
-int
-rl_vi_yank_to (count, key)
- int count, key;
-{
- int c, save = rl_point;
-
- if (_rl_uppercase_p (key))
- rl_stuff_char ('$');
-
- if (rl_vi_domove (key, &c))
- {
- ding ();
- return -1;
- }
-
- /* These are the motion commands that do not require adjusting the
- mark. */
- if ((strchr (" l|h^0%bB", c) == 0) && (rl_mark < rl_end))
- rl_mark++;
-
- rl_begin_undo_group ();
- rl_kill_text (rl_point, rl_mark);
- rl_end_undo_group ();
- rl_do_undo ();
- rl_point = save;
-
- return (0);
-}
-
-int
-rl_vi_delete (count, key)
- int count, key;
-{
- int end;
-
- if (rl_end == 0)
- {
- ding ();
- return -1;
- }
-
- end = rl_point + count;
-
- if (end >= rl_end)
- end = rl_end;
-
- rl_kill_text (rl_point, end);
-
- if (rl_point > 0 && rl_point == rl_end)
- rl_backward (1, key);
- return (0);
-}
-
-int
-rl_vi_back_to_indent (count, key)
- int count, key;
-{
- rl_beg_of_line (1, key);
- while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
- rl_point++;
- return (0);
-}
-
-int
-rl_vi_first_print (count, key)
- int count, key;
-{
- return (rl_vi_back_to_indent (1, key));
-}
-
-int
-rl_vi_char_search (count, key)
- int count, key;
-{
- static char target;
- static int orig_dir, dir;
-
- if (key == ';' || key == ',')
- dir = key == ';' ? orig_dir : -orig_dir;
- else
- {
- if (vi_redoing)
- target = _rl_vi_last_search_char;
- else
- _rl_vi_last_search_char = target = rl_getc (rl_instream);
-
- switch (key)
- {
- case 't':
- orig_dir = dir = FTO;
- break;
-
- case 'T':
- orig_dir = dir = BTO;
- break;
-
- case 'f':
- orig_dir = dir = FFIND;
- break;
-
- case 'F':
- orig_dir = dir = BFIND;
- break;
- }
- }
-
- return (_rl_char_search_internal (count, dir, target));
-}
-
-/* Match brackets */
-int
-rl_vi_match (ignore, key)
- int ignore, key;
-{
- int count = 1, brack, pos;
-
- pos = rl_point;
- if ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0)
- {
- while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 &&
- rl_point < rl_end - 1)
- rl_forward (1, key);
-
- if (brack <= 0)
- {
- rl_point = pos;
- ding ();
- return -1;
- }
- }
-
- pos = rl_point;
-
- if (brack < 0)
- {
- while (count)
- {
- if (--pos >= 0)
- {
- int b = rl_vi_bracktype (rl_line_buffer[pos]);
- if (b == -brack)
- count--;
- else if (b == brack)
- count++;
- }
- else
- {
- ding ();
- return -1;
- }
- }
- }
- else
- { /* brack > 0 */
- while (count)
- {
- if (++pos < rl_end)
- {
- int b = rl_vi_bracktype (rl_line_buffer[pos]);
- if (b == -brack)
- count--;
- else if (b == brack)
- count++;
- }
- else
- {
- ding ();
- return -1;
- }
- }
- }
- rl_point = pos;
- return (0);
-}
-
-int
-rl_vi_bracktype (c)
- int c;
-{
- switch (c)
- {
- case '(': return 1;
- case ')': return -1;
- case '[': return 2;
- case ']': return -2;
- case '{': return 3;
- case '}': return -3;
- default: return 0;
- }
-}
-
-int
-rl_vi_change_char (count, key)
- int count, key;
-{
- int c;
-
- if (vi_redoing)
- c = _rl_vi_last_replacement;
- else
- _rl_vi_last_replacement = c = rl_getc (rl_instream);
-
- if (c == '\033' || c == CTRL ('C'))
- return -1;
-
- while (count-- && rl_point < rl_end)
- {
- rl_begin_undo_group ();
-
- rl_delete (1, c);
- rl_insert (1, c);
- if (count == 0)
- rl_backward (1, c);
-
- rl_end_undo_group ();
- }
- return (0);
-}
-
-int
-rl_vi_subst (count, key)
- int count, key;
-{
- rl_begin_undo_group ();
-
- if (_rl_uppercase_p (key))
- {
- rl_beg_of_line (1, key);
- rl_kill_line (1, key);
- }
- else
- rl_delete_text (rl_point, rl_point+count);
-
- rl_end_undo_group ();
-
- _rl_vi_set_last (key, count, rl_arg_sign);
-
- if (vi_redoing)
- {
- int o = _rl_doing_an_undo;
-
- _rl_doing_an_undo = 1;
- if (vi_insert_buffer && *vi_insert_buffer)
- rl_insert_text (vi_insert_buffer);
- _rl_doing_an_undo = o;
- }
- else
- {
- rl_begin_undo_group ();
- _rl_vi_doing_insert = 1;
- rl_vi_insertion_mode (1, key);
- }
-
- return (0);
-}
-
-int
-rl_vi_overstrike (count, key)
- int count, key;
-{
- int i;
-
- if (_rl_vi_doing_insert == 0)
- {
- _rl_vi_doing_insert = 1;
- rl_begin_undo_group ();
- }
-
- for (i = 0; i < count; i++)
- {
- vi_replace_count++;
- rl_begin_undo_group ();
-
- if (rl_point < rl_end)
- {
- rl_delete (1, key);
- rl_insert (1, key);
- }
- else
- rl_insert (1, key);
-
- rl_end_undo_group ();
- }
- return (0);
-}
-
-int
-rl_vi_overstrike_delete (count, key)
- int count, key;
-{
- int i, s;
-
- for (i = 0; i < count; i++)
- {
- if (vi_replace_count == 0)
- {
- ding ();
- break;
- }
- s = rl_point;
-
- if (rl_do_undo ())
- vi_replace_count--;
-
- if (rl_point == s)
- rl_backward (1, key);
- }
-
- if (vi_replace_count == 0 && _rl_vi_doing_insert)
- {
- rl_end_undo_group ();
- rl_do_undo ();
- _rl_vi_doing_insert = 0;
- }
- return (0);
-}
-
-int
-rl_vi_replace (count, key)
- int count, key;
-{
- int i;
-
- vi_replace_count = 0;
-
- if (!vi_replace_map)
- {
- vi_replace_map = rl_make_bare_keymap ();
-
- for (i = ' '; i < KEYMAP_SIZE; i++)
- vi_replace_map[i].function = rl_vi_overstrike;
-
- vi_replace_map[RUBOUT].function = rl_vi_overstrike_delete;
- vi_replace_map[ESC].function = rl_vi_movement_mode;
- vi_replace_map[RETURN].function = rl_newline;
- vi_replace_map[NEWLINE].function = rl_newline;
-
- /* If the normal vi insertion keymap has ^H bound to erase, do the
- same here. Probably should remove the assignment to RUBOUT up
- there, but I don't think it will make a difference in real life. */
- if (vi_insertion_keymap[CTRL ('H')].type == ISFUNC &&
- vi_insertion_keymap[CTRL ('H')].function == rl_rubout)
- vi_replace_map[CTRL ('H')].function = rl_vi_overstrike_delete;
-
- }
- _rl_keymap = vi_replace_map;
- return (0);
-}
-
-#if 0
-/* Try to complete the word we are standing on or the word that ends with
- the previous character. A space matches everything. Word delimiters are
- space and ;. */
-int
-rl_vi_possible_completions()
-{
- int save_pos = rl_point;
-
- if (rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';')
- {
- while (rl_point < rl_end && rl_line_buffer[rl_point] != ' ' &&
- rl_line_buffer[rl_point] != ';')
- rl_point++;
- }
- else if (rl_line_buffer[rl_point - 1] == ';')
- {
- ding ();
- return (0);
- }
-
- rl_possible_completions ();
- rl_point = save_pos;
-
- return (0);
-}
-#endif
-
-/* Functions to save and restore marks. */
-int
-rl_vi_set_mark (count, key)
- int count, key;
-{
- int ch;
-
- ch = rl_read_key ();
- if (_rl_lowercase_p (ch) == 0)
- {
- ding ();
- return -1;
- }
- ch -= 'a';
- vi_mark_chars[ch] = rl_point;
- return 0;
-}
-
-int
-rl_vi_goto_mark (count, key)
- int count, key;
-{
- int ch;
-
- ch = rl_read_key ();
- if (ch == '`')
- {
- rl_point = rl_mark;
- return 0;
- }
- else if (_rl_lowercase_p (ch) == 0)
- {
- ding ();
- return -1;
- }
-
- ch -= 'a';
- if (vi_mark_chars[ch] == -1)
- {
- ding ();
- return -1;
- }
- rl_point = vi_mark_chars[ch];
- return 0;
-}
-
-#endif /* VI_MODE */
diff --git a/contrib/libreadline/xmalloc.c b/contrib/libreadline/xmalloc.c
deleted file mode 100644
index 4160651191bb..000000000000
--- a/contrib/libreadline/xmalloc.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* xmalloc.c -- safe versions of malloc and realloc */
-
-/* Copyright (C) 1991 Free Software Foundation, Inc.
-
- This file is part of GNU Readline, a library for reading lines
- of text with interactive input and history editing.
-
- Readline is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 1, or (at your option) any
- later version.
-
- Readline is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline; see the file COPYING. If not, write to the Free
- Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if defined (HAVE_CONFIG_H)
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-static void memory_error_and_abort ();
-
-/* **************************************************************** */
-/* */
-/* Memory Allocation and Deallocation. */
-/* */
-/* **************************************************************** */
-
-/* Return a pointer to free()able block of memory large enough
- to hold BYTES number of bytes. If the memory cannot be allocated,
- print an error message and abort. */
-char *
-xmalloc (bytes)
- int bytes;
-{
- char *temp;
-
- temp = (char *)malloc (bytes);
- if (temp == 0)
- memory_error_and_abort ("xmalloc");
- return (temp);
-}
-
-char *
-xrealloc (pointer, bytes)
- char *pointer;
- int bytes;
-{
- char *temp;
-
- temp = pointer ? (char *)realloc (pointer, bytes) : (char *)malloc (bytes);
-
- if (temp == 0)
- memory_error_and_abort ("xrealloc");
- return (temp);
-}
-
-static void
-memory_error_and_abort (fname)
- char *fname;
-{
- fprintf (stderr, "%s: out of virtual memory\n", fname);
- exit (2);
-}
-
-/* Use this as the function to call when adding unwind protects so we
- don't need to know what free() returns. */
-void
-xfree (string)
- char *string;
-{
- if (string)
- free (string);
-}