diff options
author | 2001-03-28 13:52:41 +0000 | |
---|---|---|
committer | 2001-03-28 13:52:41 +0000 | |
commit | 74224e71617421b48cfbd336401d06319cfa49a7 (patch) | |
tree | 46009cfed4844a7e6ddd45525c82d14b3ef065b3 | |
parent | Kill remaining references to binutils's readline. (diff) | |
download | wireguard-openbsd-74224e71617421b48cfbd336401d06319cfa49a7.tar.xz wireguard-openbsd-74224e71617421b48cfbd336401d06319cfa49a7.zip |
Goodbye, gdb uses src/gnu/lib/libreadline now.
62 files changed, 0 insertions, 20065 deletions
diff --git a/gnu/usr.bin/binutils/readline/COPYING b/gnu/usr.bin/binutils/readline/COPYING deleted file mode 100644 index a43ea2126fb..00000000000 --- a/gnu/usr.bin/binutils/readline/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/gnu/usr.bin/binutils/readline/ChangeLog b/gnu/usr.bin/binutils/readline/ChangeLog deleted file mode 100644 index 79bb97b6ff5..00000000000 --- a/gnu/usr.bin/binutils/readline/ChangeLog +++ /dev/null @@ -1,819 +0,0 @@ -Tue Oct 8 08:59:24 1996 Stu Grossman (grossman@critters.cygnus.com) - - * tilde.c (tilde_word_expand): __MSDOS___ -> __MSDOS__ - -Sat Oct 05 11:24:34 1996 Mark Alexander <marka@cygnus.com> - - * rldefs.h: On Linux, include <termios.h> to fix compile error - in <termcap.h>. - -Wed Sep 4 18:06:51 1996 Stu Grossman (grossman@critters.cygnus.com) - - * rldefs.h: Enable HANDLE_SIGNALS for cygwin32. - -Thu Aug 29 16:59:45 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * configure.in (i[345]86-*-*): Recognize i686 for pentium pro. - -Fri Aug 16 17:49:57 1996 Stu Grossman (grossman@critters.cygnus.com) - - * complete.c: Include <pwd.h> if not DOS, and if cygwin32 or not - win32. - * configure.in: Add test for *-*-cygwin32* to use config/mh-posix. - * readline.c: Move decl of tgetstr to rldefs.h. - * (_rl_set_screen_size): Remove redundant ifdef MINIMALs. - * rldefs.h: Don't do MINIMAL for cygwin32. Cygwin32 now uses - full-blown readline, except for termcap. - -Sun Aug 11 21:06:26 1996 Stu Grossman (grossman@critters.cygnus.com) - - * rldefs.c: Get rid of define of SIGALRM if _WIN32 or __MSDOS__. - * Don't define ScreenCols/ScreenRows/... if cygwin32. - * sysdep-norm.h: Don't include <malloc.h> if cygwin32. - -Sun Aug 11 14:59:09 1996 Fred Fish <fnf@cygnus.com> - - * rldefs.h: If __osf__is defined, include <termio.h> instead of - <sgtty.h>. - -Fri Aug 9 08:54:26 1996 Stu Grossman (grossman@critters.cygnus.com) - - * bind.c complete.c history.c readline.c: Don't include sys/file.h. - * complete.c display.c parens.c readline.c rldefs.h rltty.c - signals.c tilde.c: Change refs to _MSC_VER and __WIN32__ to _WIN32. - * signals.c (rl_signal_handler): Ifdef out kill if _WIN32. - * sysdep-norm.h: Ifdef out include of dirent.h if _WIN32. - Include malloc.h if _WIN32. - -Thu Jul 18 15:59:35 1996 Michael Meissner <meissner@tiktok.cygnus.com> - - * rldefs.h (sys/uio.h) Before sys/stream.h is included under AIX, - include sys/uio.h, which prevents an undefined structure used in a - prototype message from being generated. - -Tue Jun 25 23:05:55 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (datadir): Set to $(prefix)/share. - (docdir): Removed. - -Sun May 26 15:14:42 1996 Fred Fish <fnf@cygnus.com> - - From: David Mosberger-Tang <davidm@azstarnet.com> - - * sysdep-linux.h: New file. - * display.c: Add include of "sysdep.h" to get HAVE_VARARGS_H. - * configure.in: Change pattern i[345]86-*-linux* into *-*-linux* to - support non-x86 based Linux platforms. - -Sun Apr 7 22:06:11 1996 Fred Fish <fnf@cygnus.com> - - From: Miles Bader <miles@gnu.ai.mit.edu> - * config/mh-gnu: New file. - * configure.in (*-*-gnu*): New host. - -Sun Apr 7 13:21:51 1996 Fred Fish <fnf@cygnus.com> - - From: Robert Lipe <robertl@dgii.com> - * configure.in: SCO OpenServer 5 (a.k.a 3.2v5*) is more like - SCO 3.2v4 than 3.2v2. - -Wed Jan 3 18:22:10 1996 steve chamberlain <sac@slash.cygnus.com> - - * readline.c, display.c, complete.c: Add _MSC_VER to list of - things which can't do most things. - -Thu Nov 16 15:39:05 1995 Geoffrey Noer <noer@cygnus.com> - - * complete.c: Change WIN32 to __WIN32__, added #else return NULL - to end of that define. - -Tue Oct 31 10:38:58 1995 steve chamberlain <sac@slash.cygnus.com> - - * display.c, parens.c, readline.c, rldefs.h: Change use of - WIN32 to __WIN32__. - -Tue Oct 10 11:07:23 1995 Fred Fish <fnf@cygnus.com> - - * Makefile.in (BISON): Remove macro. - -Tue Oct 10 08:49:00 1995 steve chamberlain <sac@slash.cygnus.com> - - * complete.c (filename_completion_function): Enable for - win32 when not MSC. - -Sun Oct 8 04:17:19 1995 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * configure.in: Handle powerpc-ibm-aix* like rs6000-ibm-aix*. - -Sat Oct 7 20:36:16 1995 Michael Meissner <meissner@cygnus.com> - - * rltty.c (outchar): Return an int, like tputs expects. - * signals.c (_rl_output_character_function): Ditto. - -Fri Sep 29 15:19:23 1995 steve chamberlain <sac@slash.cygnus.com> - - Fixes for when the host WIN32, but not MSC. - * complete.c: Sometimes have pwd.h - * parens.c: WIN32 has similar restrictions to __GO32__. - * readline.c (__GO32__): Some of this moved into rldefs.h - * signals.c (__GO32__): Likewise. - * rldefs.h (MSDOS||WIN32) becomes MSDOS||MSC. - (WIN32&&!WIN32): New definitions. - -Wed Sep 20 12:57:17 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (maintainer-clean): New synonym for realclean. - -Wed Mar 1 13:33:43 1995 Michael Meissner <meissner@tiktok.cygnus.com> - - * rltty.c (outchar): Provide prototype for outchar, to silence - type warnings in passing outchar to tputs on systems like Linux - that have full prototypes. - - * signals.c (_rl_output_character_function): Provide prototype to - silence type warnings. - -Sun Jan 15 14:10:37 1995 Steve Chamberlain <sac@splat> - - * rldefs.h: Define MINIMAL for __GO32__ and WIN32. - * complete.c, display.c, readline.c, rltty.c: Test MINIMAL - instead of __GO32__. - -Wed Aug 24 13:04:47 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * configure.in: Change i[34]86 to i[345]86. - -Sat Jul 16 13:26:31 1994 Stan Shebs (shebs@andros.cygnus.com) - - * configure.in (m88*-harris-cxux7*): Recognize. - * sysdep-cxux7.h: New file. - -Fri Jul 8 13:18:33 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * rttty.c (control_meta_key_on): Remove superfluous testing of - __GO32__. - -Thu Jun 30 15:21:54 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * rltty.c (control_meta_key_on): Don't compile if __GO32__ is - defined. - (rltty_set_default_bindings): Likewise. - * display.c (insert_some_chars, delete_chars): row_start should be - a short. - * parens.c (rl_insert_close): No FD_SET if using __GO32__. - * readline.c (rl_gather_tyi): Strip off spurious high bits. - -Sun Jun 12 03:51:52 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * history.c: Swap inclusion of rldefs.h and chardefs.h to avoid - CTRL macro redefinition. - -Mon May 9 18:29:42 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * readline.c (readline_default_bindings): Don't compile if - __GO32__ is defined. - (_rl_set_screen_size): Likewise. - * rltty.c (rltty_set_default_bindings): Likewise. - (control_meta_key): Likewise. - * display.c: If __GO32__ is defined, include <sys/pc.h>. - * parens.c: If __GO32__ is defined, undefine FD_SET. - * signals.c: Include SIGWINCH handling in the set of things which - is not done if HANDLE_SIGNALS is not set. - -Fri May 6 13:38:39 1994 Steve Chamberlain (sac@cygnus.com) - - * config/mh-go32: New fragment. - * configure.in (host==go32): Use go32 fragment. - -Wed May 4 14:36:53 1994 Stu Grossman (grossman@cygnus.com) - - * chardefs.h, rldefs.h: Move decls of string funcs from chardefs.h - to rldefs.h so that they don't pollute apps that include - readline.h. - * history.c: include rldefs.h to get decls of string funcs. - -Wed May 4 12:15:11 1994 Stan Shebs (shebs@andros.cygnus.com) - - * configure.in (rs6000-bull-bosx*): New configuration, RS/6000 - variant. - -Wed Apr 20 10:43:52 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * configure.in: Use mh-posix for sunos4.1*. - -Wed Apr 13 21:28:44 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * rltty.c (set_tty_settings): Don't set readline_echoing_p. - (rl_deprep_terminal) [NEW_TTY_DRIVER]: Set readline_echoing_p. - -Sun Mar 13 09:13:12 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * Makefile.in: Add TAGS target. - -Wed Mar 9 18:01:31 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * isearch.c, search.c: Include sysdep.h. - -Thu Mar 3 17:40:03 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * configure.in: For ISC, use mh-sysv, not mh-isc. - -Thu Feb 24 04:13:53 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * Merge in changes from bash-1.13.5. Merge changes from glob/tilde.c - into tilde.c and use it. Add system function declarations where - necessary. Check for __GO32__, not _GO32_ consistently. - * Makefile.in: Update dependencies. - * rltty.c: Include <sys/file.h> to match include file setup - in readline.c for rldefs.h. Otherwise we get inconsistent - TTY_DRIVER definitions in readline.c and rltty.c. - * bind.c, complete.c: Do not include <sys/types.h>, it is already - included via sysdep.h, which causes problems if <sys/types.h> has - no multiple inclusion protection. - * readline.c (_rl_set_screen_size): Reestablish test for - TIOCGWINSZ_BROKEN. - * rldefs.h: Define S_ISREG if necessary. - -Fri Feb 18 08:56:35 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * Makefile.in: Add search.o rule for Sun make. - -Wed Feb 16 16:35:49 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * rltty.c: #if out some code if __GO32__. - -Tue Feb 15 14:07:08 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * readline.c (_rl_output_character_function), display.c: - Return int, not void, to conform with the expected arg of tputs. - * readline.c (init_terminal_io): tgetflag only takes 1 arg. - * readline.c (_rl_savestring): New function. - * chardefs.h: To avoid conflicts and/or warnings, define - savestring as a macro wrapper for _rl_savestring. - * display.c (extern term_xn): It's an int flag, not a string. - * charsdefs.h, rldefs.h: Remove HAVE_STRING_H-related junk. - -Sat Feb 5 08:32:30 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * Makefile.in: Remove obsolete rules for history.info and - readline.info. - -Thu Jan 27 17:04:01 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * chardefs.h: Only declare strrchr if it is not #define'd. - -Tue Jan 25 11:30:06 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * rldefs.h: Accept __hpux as well as hpux for HP compiler in ANSI mode. - -Fri Jan 21 17:31:26 1994 Jim Kingdon (kingdon@lisa.cygnus.com) - - * chardefs.h, tilde.c: Just declare strrchr rather than trying to - include a system header. - -Fri Jan 21 14:40:43 1994 Fred Fish (fnf@cygnus.com) - - * Makefile.in (distclean, realclean): Expand local-distclean - inline after doing recursion. You can't recurse after removing - Makefile. Make them depend on local-clean. - * Makefile.in (local-distclean): Remove now superfluous target. - -Mon Jan 17 12:42:07 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * readline.c (doing_an_undo): Delete second declaration, since it - confuses the alpha-osf1 native compiler. - -Sun Jan 16 12:33:11 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * complete.c, bind.c: Include <sys/stat.h>. - * complete.c: Define X_OK if not defined by a system header. - - * chardefs.h: Don't declare xmalloc. - - * keymaps.h: Include "chardefs.h" not <readline/chardefs.h>. - - * Makefile.in (clean mostlyclean distclean realclean): Recurse - into subdirectories as well as doing this directory. Add clean-dvi - target. - -Sat Jan 15 19:36:12 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * readline.c, display.c: Patches to allow use of all 80 - columns on most terminals (those with am and xn). - - Merge in changes from bash-1.13. The most obvious one is - that the file readline.c has been split into multiple files. - * bind.c, complete.c, dispay.c, isearch.c, parens.c, rldefs.h, - rltty.c, search.c signals.c, tilde.c, tilde.h, xmalloc.c: New files. - -Sat Dec 11 16:29:17 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * readline.c (rl_getc): If GO32, trim high bit from getkey, - otherwise fancy PC keys cause grief. - -Fri Nov 5 11:49:47 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * configure.in: Add doc to configdirs. - * Makefile.in (info dvi install-info clean-info): Recurse into doc. - -Fri Oct 22 07:55:08 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * configure.in: Add * to end of all OS names. - -Tue Oct 5 12:33:51 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * readline.c: Add stuff for HIUX to place where we detect termio - vs. sgtty (ugh, but I don't see a simple better way). - -Wed Sep 29 11:02:58 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * readline.c (parser_if): Free tname when done with it (change - imported from from bash 1.12 readline). - -Tue Sep 7 17:15:37 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * configure.in (m88k-*-sysvr4*): Comment out previous change. - -Fri Jul 2 11:05:34 1993 Ian Lance Taylor (ian@cygnus.com) - - * configure.in (*-*-riscos*): New entry; use mh-sysv. - -Wed Jun 23 13:00:12 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * configure.in: Add comment. - -Mon Jun 14 14:28:55 1993 Jim Kingdon (kingdon@eric) - - * configure.in (m88k-*-sysvr4*): Use sysdep-norm.h. - -Sun Jun 13 13:04:09 1993 Jim Kingdon (kingdon@cygnus.com) - - * Makefile.in ({real,dist}clean): Remove sysdep.h. - -Thu Jun 10 11:22:41 1993 Jim Kingdon (kingdon@cygnus.com) - - * Makefile.in: Add mostlyclean, distclean, and realclean targets. - -Fri May 21 17:09:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * config/mh-isc: New file. - * configure.in: Use it. - -Sat Apr 17 00:40:12 1993 Jim Kingdon (kingdon at calvin) - - * readline.c, history.c: Don't include sys/types.h; sysdep.h does. - - * config/mh-sysv: Define TIOCGWINSZ_BROKEN. - readline.c: Check it. - -Wed Mar 24 02:06:15 1993 david d `zoo' zuhn (zoo at poseidon.cygnus.com) - - * Makefile.in: add installcheck & dvi targets - -Fri Mar 12 18:36:53 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: recognize *-*-solaris2* instead of *-*-solaris* (a - number of people want to call SunOS 4.1.2 "solaris1.0" - and get it right) - -Tue Mar 2 21:25:36 1993 Fred Fish (fnf@cygnus.com) - - * sysdep-sysv4.h: New file for SVR4. - * configure.in (*-*-sysv4*): Use sysdep-sysv4.h. - - * configure.in (*-*-ultrix2): Add triplet from Michael Rendell - (michael@mercury.cs.mun.ca) - -Tue Dec 15 12:38:16 1992 Ian Lance Taylor (ian@cygnus.com) - - * configure.in (i[34]86-*-sco3.2v4*): use mh-sco4. - * config/mh-sco4: New file, like mh-sco but without defining - _POSIX_SOURCE. - -Wed Nov 11 21:20:14 1992 John Gilmore (gnu@cygnus.com) - - * configure.in: Reformat to one-case-per-line. - Handle SunOS 3.5, as per Karl Berry, <karl@claude.cs.umb.edu>. - -Wed Nov 4 15:32:31 1992 Stu Grossman (grossman at cygnus.com) - - * sysdep-norm.h: Remove some crud, install dire warning. - -Thu Oct 22 01:08:13 1992 Stu Grossman (grossman at cygnus.com) - - * configure.in: Make SCO work again... - -Mon Oct 12 15:04:07 1992 Ian Lance Taylor (ian@cygnus.com) - - * readline.c (init_terminal_io): if tgetent returns 0, the - terminal type is unknown. - -Thu Oct 1 23:44:14 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: use cpu-vendor-os triple instead of nested cases - -Wed Sep 30 12:58:57 1992 Stu Grossman (grossman at cygnus.com) - - * readline.c (rl_complete_internal): Cast alloca to (char *) to - avoid warning. - -Fri Sep 25 12:45:05 1992 Stu Grossman (grossman at cygnus.com) - - * readline.c (clear_to_eol, rl_generic_bind): Make static. - (rl_digit_loop): Add arg to call to rl_message(). - * vi_mode.c (rl_vi_first_print): Add arg to call to - rl_back_to_indent(). - -Wed Aug 19 14:59:07 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: always create installation directories, use full - file name for install target. - -Wed Aug 12 15:50:57 1992 John Gilmore (gnu@cygnus.com) - - * readline.c (last_readline_init_file): Fix typo made by Steve - Chamberlain/DJ Delorie. Proper control file name is ~/.inputrc, - not ~/inputrc. - -Thu Jun 25 16:15:27 1992 Stu Grossman (grossman at cygnus.com) - - * configure.in: Make bsd based systems use sysdep-obsd.h. - -Tue Jun 23 23:22:53 1992 Per Bothner (bothner@cygnus.com) - - * config/mh-posix: New file, for Posix-compliant systems. - * configure.in: Use mh-posix for Linux (free Unix clone). - -Tue Jun 23 21:59:20 1992 Fred Fish (fnf@cygnus.com) - - * sysdep-norm.h (alloca): Protect against previous definition as - a macro with arguments. - -Fri Jun 19 15:48:54 1992 Stu Grossman (grossman at cygnus.com) - - * sysdep-obsd.h: #include <sys/types.h> to make this more Kosher. - -Fri Jun 19 12:53:28 1992 John Gilmore (gnu at cygnus.com) - - * config/mh-apollo68v, mh-sco, mh-sysv, mh-sysv4}: RANLIB=true. - -Mon Jun 15 13:50:34 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: use mh-sysv4 on solaris2 - -Mon Jun 15 12:28:24 1992 Fred Fish (fnf@cygnus.com) - - * config/mh-ncr3000 (INSTALL): Don't use /usr/ucb/install, - it is broken on ncr 3000's. - * config/mh-ncr3000 (RANLIB): Use RANLIB=true. - -Mon Jun 15 01:35:55 1992 John Gilmore (gnu at cygnus.com) - - * readline.c: Make new SIGNALS_* macros to parameterize the - ugly changes in signal blocking. Use them throughout, - reducing #ifdef HAVE_POSIX_SIGNALS and HAVE_BSD_SIGNALS clutter - significantly. Make all such places use POSIX if available, - to avoid losing with poor `sigsetmask' emulation from libiberty. - -Sun Jun 14 15:19:51 1992 Stu Grossman (grossman at cygnus.com) - - * readline.c (insert_some_chars): Return void. - -Thu Jun 11 01:27:45 1992 John Gilmore (gnu at cygnus.com) - - * readline.c: #undef PC, which Solaris2 defines in sys/types.h, - clobbering the termcap global variable PC. - -Tue Jun 9 17:30:23 1992 Fred Fish (fnf@cygnus.com) - - * config/{mh-ncr3000, mh-sysv4}: Change INSTALL to use - /usr/ucb/install. - -Mon Jun 8 23:10:07 1992 Fred Fish (fnf@cygnus.com) - - * readline.h (rl_completer_quote_characters): Add declaration. - * readline.c (rl_completer_quote_characters): Add global var. - * readline.c (strpbrk): Add prototype and function. - * readline.c (rl_complete_internal): Add code to handle - expansion of quoted strings. - -Mon May 11 12:39:30 1992 John Gilmore (gnu at cygnus.com) - - * readline.c: Can't initialize FILE *'s with stdin and stdout, - because they might not be constant. Patch from Tom Quinn, - trq@dinoysos.thphys.ox.ac.uk. - -Tue Apr 28 21:52:34 1992 John Gilmore (gnu at cygnus.com) - - * readline.h: Declare rl_event_hook (which already existed). - Suggested by Christoph Tietz <tietz@zi.gmd.dbp.de>. - -Wed Apr 22 18:08:01 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * configure.in: remove subdirs declaration. The obsolete semantic - for subdirs has been usurped by per's new meaning. - -Tue Apr 21 11:54:23 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: rework CFLAGS so that they can be set on the - command line to make. Remove MINUS_G. Default CFLAGS to -g. - -Fri Apr 10 23:02:27 1992 Fred Fish (fnf@cygnus.com) - - * configure.in: Recognize new ncr3000 config. - * config/mh-ncr3000: New NCR 3000 config file. - -Wed Mar 25 10:46:30 1992 John Gilmore (gnu at cygnus.com) - - * history.c (stifle_history): Negative arg treated as zero. - -Tue Mar 24 23:46:20 1992 K. Richard Pixley (rich@cygnus.com) - - * config/mh-sysv: INSTALL_PROG -> INSTALL. - -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. - - * vi_mode.c (rl_vi_subst) Don't forget to end the undo group. - -Sat Mar 7 00:15:36 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * Makefile.in: remove FIXME's on info and install-info targets. - -Fri Mar 6 22:02:04 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: added check target. - -Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in, configure.in: removed traces of namesubdir, - -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced - copyrights to '92, changed some from Cygnus to FSF. - -Fri Feb 21 14:37:32 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * readline.c, examples/fileman.c: patches from DJ to support DOS - -Thu Feb 20 23:23:16 1992 Stu Grossman (grossman at cygnus.com) - - * readline.c (rl_read_init_file): Make sure that null filename is - not passed to open() or else we end up opening the directory, and - read a bunch of garbage into keymap[]. - -Mon Feb 17 17:15:09 1992 Fred Fish (fnf at cygnus.com) - - * readline.c (readline_default_bindings): Only make use of VLNEXT - when both VLNEXT and TERMIOS_TTY_DRIVER is defined. On SVR4 - <termio.h> includes <termios.h>, so VLNEXT is always defined. - - * sysdep-norm.h (_POSIX_VERSION): Define this for all SVR4 - systems so that <termios.h> gets used, instead of <termio.h>. - -Fri Dec 20 12:04:31 1991 Fred Fish (fnf at cygnus.com) - - * configure.in: Change svr4 references to sysv4. - -Tue Dec 10 04:07:20 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: infodir belongs in datadir. - -Fri Dec 6 23:23:14 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: remove spaces following hyphens, bsd make can't - cope. added clean-info. added standards.text support. Don't - know how to make info anymore. - - * configure.in: commontargets is no longer a recognized hook, so - remove it. new subdir called doc. - -Thu Dec 5 22:46:10 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: idestdir and ddestdir go away. Added copyrights - and shift gpl to v2. Added ChangeLog if it didn't exist. docdir - and mandir now keyed off datadir by default. - -Fri Nov 22 09:02:32 1991 John Gilmore (gnu at cygnus.com) - - * sysdep-obsd.h: Rename from sysdep-newsos.h. - * configure.in: Use sysdep-obsd for Mach as well as NEWs. - - * sysdep-norm.h, sysdep-aix.h: Add <sys/types.h>, which POSIX - requires to make <dirent.h> work. Improve Sun alloca decl. - -Thu Nov 21 18:48:08 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Clean up ../glob/tilde.c -> tilde.o path. - Clean up makefile a bit in general. - -Thu Nov 21 14:40:29 1991 Stu Grossman (grossman at cygnus.com) - - * configure.in, config/mh-svr4: Make SVR4 work. - - * readline.c: Move config stuff to sysdep.h, use typedef dirent - consistently, remove refs to d_namlen (& D_NAMLEN) to improve - portability. Also, update copyright notice. - readline.h: remove config stuff that I added erroneously in the - first place. - - * emacs_keymap.c, funmap.c, history.c, keymaps.c, vi_keymap.c, - vi_mode.c: move config stuff to sysdep.h, update copyright notices. - -Tue Nov 19 15:02:13 1991 Stu Grossman (grossman at cygnus.com) - - * history.c: #include "sysdep.h". - -Tue Nov 19 10:49:17 1991 Fred Fish (fnf at cygnus.com) - - * Makefile.in, config/hm-sysv, config/hm-sco: Change SYSV to - USG to match current usage. - - * readline.c: Add USGr4 to list of defined things to check for - to use <dirent.h> style directory access. - - * config/hm-svr4: New file for System V Release 4 (USGr4). - -Mon Nov 18 23:59:52 1991 Stu Grossman (grossman at cygnus.com) - - * readline.c (filename_completion_function): use struct dirent - instead of struct direct. - -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/gnu/usr.bin/binutils/readline/Makefile.in b/gnu/usr.bin/binutils/readline/Makefile.in deleted file mode 100644 index aba8e8eda3a..00000000000 --- a/gnu/usr.bin/binutils/readline/Makefile.in +++ /dev/null @@ -1,254 +0,0 @@ -# -# Makefile -# Copyright (C) 1990, 1991, 1992 Free Software Foundation -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (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. */ -# - -# -# Makefile for readline and history libraries. -# - -srcdir = . - -prefix = /usr/local - -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(exec_prefix)/lib - -datadir = $(prefix)/share -mandir = $(prefix)/man -man1dir = $(mandir)/man1 -man2dir = $(mandir)/man2 -man3dir = $(mandir)/man3 -man4dir = $(mandir)/man4 -man5dir = $(mandir)/man5 -man6dir = $(mandir)/man6 -man7dir = $(mandir)/man7 -man8dir = $(mandir)/man8 -man9dir = $(mandir)/man9 -infodir = $(prefix)/share/info -includedir = $(prefix)/include - -DESTDIR = - -SHELL = /bin/sh - -INSTALL = install -c -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) - -AR = ar -AR_FLAGS = qv -CFLAGS = -g -MAKEINFO = makeinfo -RANLIB = ranlib - -# Define TYPES as -DVOID_SIGHANDLER if your operating system uses -# a return type of "void" for signal handlers. -TYPES = -DVOID_SIGHANDLER - -# HP-UX compilation requires the BSD library. -#LOCAL_LIBS = -lBSD - -# Xenix compilation requires -ldir -lx -#LOCAL_LIBS = -ldir -lx - -# Comment out "-DVI_MODE" if you don't think that anyone will ever desire -# the vi line editing mode and features. -READLINE_DEFINES = $(TYPES) -DVI_MODE - -DEBUG_FLAGS = $(MINUS_G) -LDFLAGS = $(DEBUG_FLAGS) - -# A good alternative is gcc -traditional. -#CC = gcc -traditional -RM = rm -CP = cp - -LOCAL_INCLUDES = -I$(srcdir)/../ - -# The name of the main library target. -LIBRARY_NAME = libreadline.a - -# The C code source files for this library. -CSOURCES = readline.c funmap.c keymaps.c vi_mode.c parens.c search.c \ - rltty.c complete.c bind.c isearch.c display.c signals.c \ - emacs_keymap.c vi_keymap.c history.c tilde.c xmalloc.c - -# The header files for this library. -HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h \ - posixstat.h tilde.h - -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 \ - history.o tilde.o xmalloc.o - -SOURCES = $(CSOURCES) $(HSOURCES) - -DOCUMENTATION = readline.texi inc-read.texi \ - history.texi inc-hist.texi - -SUPPORT = COPYING Makefile $(DOCUMENTATION) ChangeLog - -THINGS_TO_TAR = $(SOURCES) $(SUPPORT) - -FLAGS_TO_PASS = \ - "infodir=$(infodir)" \ - "bindir=$(bindir)" \ - "prefix=$(prefix)" \ - "exec_prefix=$(exec_prefix)" \ - "against=$(against)" \ - "MAKEINFO=$(MAKEINFO)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_DATA=$(INSTALL_DATA)" - -SUBDIRS = doc - -#### Host, target, and site specific Makefile fragments come in here. -### - -.c.o: - $(CC) -c $(CFLAGS) $(H_CFLAGS) $(DEBUG_FLAGS) $(USG) -I. $(LOCAL_INCLUDES) $(CPPFLAGS) $(READLINE_DEFINES) $< - -STAGESTUFF = *.o - -all: libreadline.a - -check: -installcheck: - -info dvi install-info clean-info clean-dvi: force - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -TAGS: force - etags $(srcdir)/*.h $(srcdir)/*.c - -subdir_do: force - @for i in $(DODIRS); do \ - if [ -f ./$$i/Makefile ] ; then \ - if (cd ./$$i; \ - $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \ - else exit 1 ; fi ; \ - else true ; fi ; \ - done - -libreadline.a: $(OBJECTS) - $(RM) -f libreadline.a - $(AR) $(AR_FLAGS) libreadline.a $(OBJECTS) - $(RANLIB) libreadline.a - -bind.o: bind.c sysdep.h rldefs.h readline.h keymaps.h chardefs.h history.h -complete.o: complete.c sysdep.h rldefs.h readline.h keymaps.h chardefs.h -display.o: display.c rldefs.h readline.h keymaps.h chardefs.h history.h -funmap.o: funmap.c sysdep.h readline.h keymaps.h chardefs.h -history.o: history.c sysdep.h history.h chardefs.h -isearch.o: isearch.c readline.h keymaps.h chardefs.h history.h -keymaps.o: keymaps.c sysdep.h readline.h keymaps.h chardefs.h emacs_keymap.c vi_keymap.c -parens.o: parens.c readline.h keymaps.h chardefs.h -readline.o: readline.c sysdep.h rldefs.h readline.h keymaps.h chardefs.h history.h -rltty.o: rltty.c rldefs.h readline.h keymaps.h chardefs.h -search.o: search.c readline.h keymaps.h chardefs.h history.h -signals.o: signals.c rldefs.h readline.h keymaps.h chardefs.h history.h -tilde.o: tilde.c sysdep.h tilde.h chardefs.h -vi_mode.o: vi_mode.c rldefs.h readline.h keymaps.h chardefs.h history.h -xmalloc.o: xmalloc.c - -libtest: libreadline.a libtest.c - $(CC) -o libtest $(CFLAGS) $(H_CFLAGS) $(DEBUG_FLAGS) $(USG) -I. $(LOCAL_INCLUDES) $(CPPFLAGS) $(READLINE_DEFINES) -L. libtest.c -lreadline -ltermcap - -readline: readline.c history.o keymaps.o funmap.o readline.h chardefs.h vi_mode.o - $(CC) $(CFLAGS) $(CPPFLAGS) $(READLINE_DEFINES) \ - $(LOCAL_INCLUDES) -DTEST -o readline readline.c funmap.o \ - keymaps.o history.o vi_mode.o -L. -ltermcap - -readline.tar: $(THINGS_TO_TAR) - tar -cf readline.tar $(THINGS_TO_TAR) - -readline.tar.Z: readline.tar - compress -f readline.tar - -install: - $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a - $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a - $(INSTALL_DATA) $(srcdir)/readline.h $(DESTDIR)$(includedir)/readline/readline.h - $(INSTALL_DATA) $(srcdir)/keymaps.h $(DESTDIR)$(includedir)/readline/keymaps.h - $(INSTALL_DATA) $(srcdir)/chardefs.h $(DESTDIR)$(includedir)/readline/chardefs.h - $(INSTALL_DATA) $(srcdir)/history.h $(DESTDIR)$(includedir)/readline/history.h - -includes: - $(INSTALL_FILE) $(srcdir)/readline.h $(DESTDIR)$(includedir)/readline/readline.h - $(INSTALL_FILE) $(srcdir)/keymaps.h $(DESTDIR)$(includedir)/readline/keymaps.h - $(INSTALL_FILE) $(srcdir)/chardefs.h $(DESTDIR)$(includedir)/readline/chardefs.h - $(INSTALL_FILE) $(srcdir)/history.h $(DESTDIR)$(includedir)/readline/history.h - -local-clean: - rm -f $(STAGESTUFF) *.a *.log *.cp *.tp *.vr *.fn - rm -f *.aux *.pg *.toc - -mostlyclean: local-clean - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -clean: local-clean - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -distclean: local-clean - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - rm -f Makefile config.status sysdep.h - -realclean maintainer-clean: local-clean - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - rm -f Makefile config.status sysdep.h - -$(DESTDIR)/libreadline.a: libreadline.a - -# Copy the object files from a particular stage into a subdirectory. -stage1: force - -mkdir stage1 - -mv $(STAGESTUFF) stage1 - -stage2: force - -mkdir stage2 - -mv $(STAGESTUFF) stage2 - -stage3: force - -mkdir stage3 - -mv $(STAGESTUFF) stage3 - -against=stage2 - -comparison: force - for i in $(STAGESTUFF) ; do cmp $$i $(against)/$$i ; done - -de-stage1: force - -(cd stage1 ; mv -f * ..) - -rmdir stage1 - -de-stage2: force - -(cd stage2 ; mv -f * ..) - -rmdir stage2 - -de-stage3: force - -(cd stage3 ; mv -f * ..) - -rmdir stage3 - -force: - -# with the gnu make, this is done automatically. - -Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) - $(SHELL) ./config.status diff --git a/gnu/usr.bin/binutils/readline/bind.c b/gnu/usr.bin/binutils/readline/bind.c deleted file mode 100644 index 493f1b72b70..00000000000 --- a/gnu/usr.bin/binutils/readline/bind.c +++ /dev/null @@ -1,1415 +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. */ - -#include "sysdep.h" -#include <stdio.h> -#include <fcntl.h> - -#include <errno.h> -/* Not all systems declare ERRNO in errno.h... and some systems #define it! */ -#if !defined (errno) -extern int errno; -#endif /* !errno */ - -/* Included by <fcntl.h> on some systems, but not SCO, so include it here. */ -#include <sys/stat.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 char *tilde_expand (); - -extern int _rl_horizontal_scroll_mode; -extern int _rl_mark_modified_lines; -extern int _rl_prefer_visible_bell; -extern int _rl_meta_flag; -extern int rl_blink_matching_paren; -extern int _rl_convert_meta_chars_to_ascii; -#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_explicit_arg; -extern int rl_editing_mode; -extern unsigned short _rl_parsing_conditionalized_out; -extern Keymap _rl_keymap; - -extern char *possible_control_prefixes[], *possible_meta_prefixes[]; - -extern char **rl_funmap_names (); - -static int glean_key_from_name (); -static int stricmp (), strnicmp (); - -#if defined (STATIC_MALLOC) -static char *xmalloc (), *xrealloc (); -#else -extern char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - -/* **************************************************************** */ -/* */ -/* 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. */ -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); -} - -/* 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) - { -#if defined (CRAY) - Keymap escmap = (Keymap)((int)_rl_keymap[ESC].function); -#else - Keymap escmap = (Keymap)_rl_keymap[ESC].function; -#endif - - 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; - 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 = _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. */ -rl_set_key (keyseq, function, map) - char *keyseq; - Function *function; - Keymap map; -{ - 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. */ -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, ¯o_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. */ -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 = (Keymap) map[ESC].function; - } - - 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 = (Function *)rl_make_bare_keymap (); - } - map = (Keymap)map[ic].function; - } - else - { - if (map[ic].type == ISMACR) - free ((char *)map[ic].function); - - map[ic].function = (Function *)data; - map[ic].type = type; - } - } - 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. */ -rl_translate_keyseq (seq, array, len) - char *seq, *array; - int *len; -{ - register int i, c, l = 0; - - for (i = 0; c = seq[i]; i++) - { - if (c == '\\') - { - c = seq[++i]; - - if (!c) - 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 (to_upper (seq[i])); - if (!seq[i]) - i--; - continue; - } - - switch (c) - { - case 'M': - i++; - array[l++] = ESC; - break; - - case 'C': - i += 2; - /* Special hack for C-?... */ - if (seq[i] == '?') - array[l++] = RUBOUT; - else - array[l++] = CTRL (to_upper (seq[i])); - break; - - case 'e': - array[l++] = ESC; - } - - continue; - } - } - array[l++] = c; - } - - *len = l; - array[l] = '\0'; - return (0); -} - -/* 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 (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 = (Keymap)map[ESC].function; - 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 = (Keymap)map[ic].function; - } - else - { - if (type) - *type = map[ic].type; - - return (map[ic].function); - } - } -} - -/* The last key bindings file read. */ -static char *last_readline_init_file = (char *)NULL; - -/* Re-read the current keybindings file. */ -rl_re_read_init_file (count, ignore) - int count, ignore; -{ - return (rl_read_init_file ((char *)NULL)); -} - -/* The final, last-ditch effort file name for an init file. */ -#ifdef __MSDOS__ -/* Don't know what to do, but this is a guess */ -#define DEFAULT_INPUTRC "/INPUTRC"; -#else -#define DEFAULT_INPUTRC "~/.inputrc" -#endif - -/* Do key bindings from a file. If FILENAME is NULL it defaults - to `~/.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) - { - if (last_readline_init_file) - filename = last_readline_init_file; - else - filename = DEFAULT_INPUTRC; - } - - openname = tilde_expand (filename); - - if (!openname || *openname == '\000') - return ENOENT; - - if ((stat (openname, &finfo) < 0) || - (file = open (openname, O_RDONLY, 0666)) < 0) - { - free (openname); - return (errno); - } - else - free (openname); - - 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. */ - 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'; - - /* 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; - } - free (buffer); - return (0); -} - -/* **************************************************************** */ -/* */ -/* 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 = 0; -static int if_stack_size = 0; - -/* 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 && strnicmp (args, "term=", 5) == 0) - { - char *tem, *tname; - - /* Terminals like "aaa-60" are equivalent to "aaa". */ - tname = savestring (rl_terminal_name); - tem = strrchr (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. */ - if ((stricmp (args + 5, tname) == 0) || - (stricmp (args + 5, rl_terminal_name) == 0)) - _rl_parsing_conditionalized_out = 0; - else - _rl_parsing_conditionalized_out = 1; - - free (tname); - } -#if defined (VI_MODE) - else if (strnicmp (args, "mode=", 5) == 0) - { - int mode; - - if (stricmp (args + 5, "emacs") == 0) - mode = emacs_mode; - else if (stricmp (args + 5, "vi") == 0) - mode = vi_mode; - else - mode = no_mode; - - if (mode == rl_editing_mode) - _rl_parsing_conditionalized_out = 0; - else - _rl_parsing_conditionalized_out = 1; - } -#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 (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 (stricmp (directive, parser_directives[i].name) == 0) - { - (*parser_directives[i].function) (args); - return (0); - } - - /* *** Should an error message be output? */ - return (1); -} - -/* Ugly but working hack for binding prefix meta. */ -#define PREFIX_META_HACK - -static int substring_member_of_array (); - -/* 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. */ -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; - } - } - - /* 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 (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 (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 (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 [] = { - { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode }, - { "mark-modified-lines", &_rl_mark_modified_lines }, - { "prefer-visible-bell", &_rl_prefer_visible_bell }, - { "meta-flag", &_rl_meta_flag }, - { "blink-matching-paren", &rl_blink_matching_paren }, - { "convert-meta", &_rl_convert_meta_chars_to_ascii }, -#if defined (VISIBLE_STATS) - { "visible-stats", &rl_visible_stats }, -#endif /* VISIBLE_STATS */ - { "expand-tilde", &rl_complete_with_tilde_expansion }, - { (char *)NULL, (int *)NULL } -}; - -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 (stricmp (name, boolean_varlist[i].name) == 0) - { - /* A variable is TRUE if the "value" is "on", "1" or "". */ - if ((!*value) || - (stricmp (value, "On") == 0) || - (value[0] == '1' && value[1] == '\0')) - *boolean_varlist[i].value = 1; - else - *boolean_varlist[i].value = 0; - return 0; - } - } - - /* Not a boolean variable, so check for specials. */ - - /* Editing mode change? */ - if (stricmp (name, "editing-mode") == 0) - { - if (strnicmp (value, "vi", 2) == 0) - { -#if defined (VI_MODE) - _rl_keymap = vi_insertion_keymap; - rl_editing_mode = vi_mode; -#else -#if defined (NOTDEF) - /* What state is the terminal in? I'll tell you: - non-determinate! That means we cannot do any output. */ - ding (); -#endif /* NOTDEF */ -#endif /* VI_MODE */ - } - else if (strnicmp (value, "emacs", 5) == 0) - { - _rl_keymap = emacs_standard_keymap; - rl_editing_mode = emacs_mode; - } - } - - /* Comment string change? */ - else if (stricmp (name, "comment-begin") == 0) - { -#if defined (VI_MODE) - extern char *rl_vi_comment_begin; - - if (*value) - { - if (rl_vi_comment_begin) - free (rl_vi_comment_begin); - - rl_vi_comment_begin = savestring (value); - } -#endif /* VI_MODE */ - } - else if (stricmp (name, "completion-query-items") == 0) - { - int nval = 100; - if (*value) - { - nval = atoi (value); - if (nval < 0) - nval = 0; - } - rl_completion_query_items = nval; - } - 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 (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); -} - -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 */ -} - -/* **************************************************************** */ -/* */ -/* 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 (ignore) - int ignore; -{ - 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); -} - -/* Return a NULL terminated array of strings which represent the key - sequences that are used to invoke FUNCTION in MAP. */ -static char ** -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 < 128; 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 = (char *)xmalloc (5); - - if (CTRL_P (key)) - sprintf (keyname, "\\C-%c", 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'; - } - - if (result_index + 2 > result_size) - result = (char **) xrealloc - (result, (result_size += 10) * sizeof (char *)); - - result[result_index++] = keyname; - result[result_index] = (char *)NULL; - } - break; - - case ISKMAP: - { - char **seqs = (char **)NULL; - - /* 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 = -#if defined (CRAY) - invoking_keyseqs_in_map (function, (Keymap)((int)map[key].function)); -#else - invoking_keyseqs_in_map (function, (Keymap)map[key].function); -#endif - - if (seqs) - { - register int i; - - for (i = 0; seqs[i]; i++) - { - char *keyname = (char *)xmalloc (6 + strlen (seqs[i])); - - if (key == ESC) - sprintf (keyname, "\\e"); - else if (CTRL_P (key)) - sprintf (keyname, "\\C-%c", 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 = (char **) xrealloc - (result, (result_size += 10) * 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 (invoking_keyseqs_in_map (function, _rl_keymap)); -} - -/* 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) - int count; -{ - void rl_function_dumper (); - - rl_function_dumper (rl_explicit_arg); - rl_on_new_line (); - return (0); -} - -/* 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 = 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); - } - } - } -} - - -/* **************************************************************** */ -/* */ -/* String Utility Functions */ -/* */ -/* **************************************************************** */ - -static char *strindex (); - -/* 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 (strindex (string, *array)) - return (1); - array++; - } - return (0); -} - -/* Whoops, Unix doesn't have strnicmp. */ - -/* Compare at most COUNT characters from string1 to string2. Case - doesn't matter. */ -static int -strnicmp (string1, string2, count) - char *string1, *string2; - int count; -{ - register char ch1, ch2; - - while (count) - { - ch1 = *string1++; - ch2 = *string2++; - if (to_upper(ch1) == to_upper(ch2)) - count--; - else break; - } - return (count); -} - -/* strcmp (), but caseless. */ -static int -stricmp (string1, string2) - char *string1, *string2; -{ - register char ch1, ch2; - - while (*string1 && *string2) - { - ch1 = *string1++; - ch2 = *string2++; - if (to_upper(ch1) != to_upper(ch2)) - return (1); - } - return (*string1 | *string2); -} - -/* Determine if s2 occurs in s1. If so, return a pointer to the - match in s1. The compare is case insensitive. */ -static char * -strindex (s1, s2) - register char *s1, *s2; -{ - register int i, l = strlen (s2); - register int len = strlen (s1); - - for (i = 0; (len - i) >= l; i++) - if (strnicmp (&s1[i], s2, l) == 0) - return (s1 + i); - return ((char *)NULL); -} diff --git a/gnu/usr.bin/binutils/readline/chardefs.h b/gnu/usr.bin/binutils/readline/chardefs.h deleted file mode 100644 index 06dbd9f477f..00000000000 --- a/gnu/usr.bin/binutils/readline/chardefs.h +++ /dev/null @@ -1,84 +0,0 @@ -/* chardefs.h -- Character definitions for readline. */ -#ifndef _CHARDEFS_ -#define _CHARDEFS_ - -#include <ctype.h> - -#ifndef savestring -#define savestring(X) _rl_savestring(X) -extern char * _rl_savestring (); -#endif - -#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 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 META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char) -#define CTRL(c) ((c) & (~control_character_bit)) -#define META(c) ((c) | meta_character_bit) - -#define UNMETA(c) ((c) & (~meta_character_bit)) -#define UNCTRL(c) to_upper(((c)|control_character_bit)) - -#define lowercase_p(c) (((c) > ('a' - 1) && (c) < ('z' + 1))) -#define uppercase_p(c) (((c) > ('A' - 1) && (c) < ('Z' + 1))) - -#define pure_alphabetic(c) (lowercase_p(c) || uppercase_p(c)) - -#ifndef to_upper -#define to_upper(c) (lowercase_p(c) ? ((c) - 32) : (c)) -#define to_lower(c) (uppercase_p(c) ? ((c) + 32) : (c)) -#endif - -#define CTRL_P(c) ((c) < control_character_threshold) -#define META_P(c) ((c) > meta_character_threshold) - -#ifndef NEWLINE -#define NEWLINE '\n' -#endif - -#ifndef RETURN -#define RETURN CTRL('M') -#endif - -#ifndef RUBOUT -#define RUBOUT 0x07f -#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 0x020 - -#ifdef ESC -#undef ESC -#endif - -#define ESC CTRL('[') - -#endif /* _CHARDEFS_ */ diff --git a/gnu/usr.bin/binutils/readline/complete.c b/gnu/usr.bin/binutils/readline/complete.c deleted file mode 100644 index 80ae9b83bb8..00000000000 --- a/gnu/usr.bin/binutils/readline/complete.c +++ /dev/null @@ -1,1318 +0,0 @@ -/* complete.c -- filename completion 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. */ - -#include "sysdep.h" -#include <stdio.h> -#include <fcntl.h> - -#include <errno.h> -/* Not all systems declare ERRNO in errno.h... and some systems #define it! */ -#if !defined (errno) -extern int errno; -#endif /* !errno */ - -/* These next are for filename completion. Perhaps this belongs - in a different place. */ -#if !defined __MSDOS__ && (defined __CYGWIN32__ || ! defined _WIN32) -#include <pwd.h> -#endif /* __MSDOS__ */ -#if defined (USG) && !defined (isc386) && !defined (sgi) -extern struct passwd *getpwuid (), *getpwent (); -#endif -#if defined (isc386) && !defined (__STDC__) && defined (_POSIX_SOURCE) -extern struct passwd *getpwent (); -#endif - -/* Included by <fcntl.h> on some systems, but not SCO, so include it here. */ -#include <sys/stat.h> - -/* System-specific feature definitions and include files. */ -#include "rldefs.h" - -/* Some standard library routines. */ -#include "readline.h" - -/* Possible values for do_replace in rl_complete_internal. */ -#define NO_MATCH 0 -#define SINGLE_MATCH 1 -#define MULT_MATCH 2 - -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - -extern char *tilde_expand (); -extern char *rl_copy_text (); - -extern Function *rl_last_func; -extern int rl_editing_mode; -extern int screenwidth; - -/* Forward declarations for functions defined and used in this file. */ -char *filename_completion_function (); -char **completion_matches (); - -static int compare_strings (); -static char *rl_strpbrk (); - -#if defined (STATIC_MALLOC) -static char *xmalloc (), *xrealloc (); -#else -extern char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - -/* If non-zero, then this is the address of a function to call when - completing on a directory name. The function is called with - the address of a string (the current directory name) as an arg. */ -Function *rl_symbolic_link_hook = (Function *)NULL; - -/* Non-zero means readline completion functions perform tilde expansion. */ -int rl_complete_with_tilde_expansion = 0; - -#define VISIBLE_STATS - -#if defined (VISIBLE_STATS) -# if !defined (X_OK) -# define X_OK 1 -# endif - -static int stat_char (); - -/* Non-zero means add an additional character to each filename displayed - during listing completion iff rl_filename_completion_desired which helps - to indicate the type of file being listed. */ -int rl_visible_stats = 0; -#endif /* VISIBLE_STATS */ - -/* **************************************************************** */ -/* */ -/* Completion matching, from readline's point of view. */ -/* */ -/* **************************************************************** */ - -/* Pointer to the generator function for completion_matches (). - NULL means to use filename_entry_function (), the default filename - completer. */ -Function *rl_completion_entry_function = (Function *)NULL; - -/* Pointer to alternative function to create matches. - Function is called with TEXT, START, and END. - START and END are indices in RL_LINE_BUFFER saying what the boundaries - of TEXT are. - If this function exists and returns NULL then call the value of - rl_completion_entry_function to try to match, otherwise use the - array of strings returned. */ -CPPFunction *rl_attempted_completion_function = (CPPFunction *)NULL; - -/* Local variable states what happened during the last completion attempt. */ -static int completion_changed_buffer = 0; - -/* Complete the word at or before point. You have supplied the function - that does the initial simple matching selection algorithm (see - completion_matches ()). The default is to do filename completion. */ - -rl_complete (ignore, invoking_key) - int ignore, invoking_key; -{ - if (rl_last_func == rl_complete && !completion_changed_buffer) - rl_complete_internal ('?'); - else - rl_complete_internal (TAB); -} - -/* List the possible completions. See description of rl_complete (). */ -rl_possible_completions (ignore, invoking_key) - int ignore, invoking_key; -{ - rl_complete_internal ('?'); -} - -rl_insert_completions (ignore, invoking_key) - int ignore, invoking_key; -{ - rl_complete_internal ('*'); -} - -/* The user must press "y" or "n". Non-zero return means "y" pressed. */ -get_y_or_n () -{ - int c; - - for (;;) - { - c = rl_read_key (); - if (c == 'y' || c == 'Y') - return (1); - if (c == 'n' || c == 'N') - return (0); - if (c == ABORT_CHAR) - rl_abort (); - ding (); - } -} - -/* Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if - she is sure she wants to see them all. */ -int rl_completion_query_items = 100; - -/* The basic list of characters that signal a break between words for the - completer routine. The contents of this variable is what breaks words - in the shell, i.e. " \t\n\"\\'`@$><=" */ -char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{("; - -/* The list of characters that signal a break between words for - rl_complete_internal. The default list is the contents of - rl_basic_word_break_characters. */ -char *rl_completer_word_break_characters = (char *)NULL; - -/* List of characters which can be used to quote a substring of the line. - Completion occurs on the entire substring, and within the substring - rl_completer_word_break_characters are treated as any other character, - unless they also appear within this list. */ -char *rl_completer_quote_characters = (char *)NULL; - -/* List of characters that are word break characters, but should be left - in TEXT when it is passed to the completion function. The shell uses - this to help determine what kind of completing to do. */ -char *rl_special_prefixes = (char *)NULL; - -/* If non-zero, then disallow duplicates in the matches. */ -int rl_ignore_completion_duplicates = 1; - -/* Non-zero means that the results of the matches are to be treated - as filenames. This is ALWAYS zero on entry, and can only be changed - within a completion entry finder function. */ -int rl_filename_completion_desired = 0; - -/* This function, if defined, is called by the completer when real - filename completion is done, after all the matching names have been - generated. It is passed a (char**) known as matches in the code below. - It consists of a NULL-terminated array of pointers to potential - matching strings. The 1st element (matches[0]) is the maximal - substring that is common to all matches. This function can re-arrange - the list of matches as required, but all elements of the array must be - free()'d if they are deleted. The main intent of this function is - to implement FIGNORE a la SunOS csh. */ -Function *rl_ignore_some_completions_function = (Function *)NULL; - -#if defined (SHELL) -/* A function to strip quotes that are not protected by backquotes. It - allows single quotes to appear within double quotes, and vice versa. - It should be smarter. It's fairly shell-specific, hence the SHELL - definition wrapper. */ -static char * -_delete_quotes (text) - char *text; -{ - char *ret, *p, *r; - int l, quoted; - - l = strlen (text); - ret = xmalloc (l + 1); - for (quoted = 0, p = text, r = ret; p && *p; p++) - { - /* Allow backslash-quoted characters to pass through unscathed. */ - if (*p == '\\') - continue; - /* Close quote. */ - if (quoted && *p == quoted) - { - quoted = 0; - continue; - } - /* Open quote. */ - if (quoted == 0 && (*p == '\'' || *p == '"')) - { - quoted = *p; - continue; - } - *r++ = *p; - } - *r = '\0'; - return ret; -} -#endif /* SHELL */ - -/* Complete the word at or before point. - WHAT_TO_DO says what to do with the completion. - `?' means list the possible completions. - TAB means do standard completion. - `*' means insert all of the possible completions. */ -rl_complete_internal (what_to_do) - int what_to_do; -{ - char **matches; - Function *our_func; - int start, scan, end, delimiter = 0, pass_next; - char *text, *saved_line_buffer; - char *replacement; - char quote_char = '\0'; -#if defined (SHELL) - int found_quote = 0; -#endif - - if (rl_line_buffer) - saved_line_buffer = savestring (rl_line_buffer); - else - saved_line_buffer = (char *)NULL; - - if (rl_completion_entry_function) - our_func = rl_completion_entry_function; - else - our_func = (Function *)filename_completion_function; - - /* Only the completion entry function can change this. */ - rl_filename_completion_desired = 0; - - /* We now look backwards for the start of a filename/variable word. */ - end = rl_point; - - if (rl_point) - { - if (rl_completer_quote_characters) - { - /* We have a list of characters which can be used in pairs to - quote substrings for the completer. Try to find the start - of an unclosed quoted substring. */ - /* FOUND_QUOTE is set so we know what kind of quotes we found. */ - for (scan = pass_next = 0; scan < end; scan++) - { - if (pass_next) - { - pass_next = 0; - continue; - } - - if (rl_line_buffer[scan] == '\\') - { - pass_next = 1; - continue; - } - - if (quote_char != '\0') - { - /* Ignore everything until the matching close quote char. */ - if (rl_line_buffer[scan] == quote_char) - { - /* Found matching close. Abandon this substring. */ - quote_char = '\0'; - rl_point = end; - } - } - else if (strchr (rl_completer_quote_characters, rl_line_buffer[scan])) - { - /* Found start of a quoted substring. */ - quote_char = rl_line_buffer[scan]; - rl_point = scan + 1; -#if defined (SHELL) - if (quote_char == '\'') - found_quote |= 1; - else if (quote_char == '"') - found_quote |= 2; -#endif - } - } - } - - if (rl_point == end) - { - int quoted = 0; - /* We didn't find an unclosed quoted substring up which to do - completion, so use the word break characters to find the - substring on which to complete. */ - while (--rl_point) - { -#if defined (SHELL) - /* Don't let word break characters in quoted substrings break - words for the completer. */ - if (found_quote) - { - if (strchr (rl_completer_quote_characters, rl_line_buffer[rl_point])) - { - quoted = !quoted; - continue; - } - if (quoted) - continue; - } -#endif /* SHELL */ - if (strchr (rl_completer_word_break_characters, rl_line_buffer[rl_point])) - break; - } - } - - /* If we are at a word break, then advance past it. */ - if (strchr (rl_completer_word_break_characters, rl_line_buffer[rl_point])) - { - /* If the character that caused the word break was a quoting - character, then remember it as the delimiter. */ - if (strchr ("\"'", rl_line_buffer[rl_point]) && (end - rl_point) > 1) - delimiter = rl_line_buffer[rl_point]; - - /* If the character isn't needed to determine something special - about what kind of completion to perform, then advance past it. */ - if (!rl_special_prefixes || - !strchr (rl_special_prefixes, rl_line_buffer[rl_point])) - rl_point++; - } - } - - /* At this point, we know we have an open quote if quote_char != '\0'. */ - start = rl_point; - rl_point = end; - text = rl_copy_text (start, end); - - /* If the user wants to TRY to complete, but then wants to give - up and use the default completion function, they set the - variable rl_attempted_completion_function. */ - if (rl_attempted_completion_function) - { - matches = (*rl_attempted_completion_function) (text, start, end); - - if (matches) - { - /* XXX - This is questionable code. - XXX */ - if (matches == (char **)-1) - matches = (char **)NULL; - our_func = (Function *)NULL; - goto after_usual_completion; - } - } - -#if defined (SHELL) - /* Beware -- we're stripping the quotes here. Do this only if we know - we are doing filename completion. */ - if (found_quote && our_func == (Function *)filename_completion_function) - { - /* delete single and double quotes */ - replacement = _delete_quotes (text); - free (text); - text = replacement; - replacement = (char *)0; - } -#endif /* SHELL */ - - matches = completion_matches (text, our_func); - - after_usual_completion: - free (text); - - if (!matches) - ding (); - else - { - register int i; - - /* It seems to me that in all the cases we handle we would like - to ignore duplicate possiblilities. Scan for the text to - insert being identical to the other completions. */ - if (rl_ignore_completion_duplicates) - { - char *lowest_common; - int j, newlen = 0; - char dead_slot; - - /* Sort the items. */ - /* It is safe to sort this array, because the lowest common - denominator found in matches[0] will remain in place. */ - for (i = 0; matches[i]; i++); - qsort (matches, i, sizeof (char *), compare_strings); - - /* Remember the lowest common denominator for it may be unique. */ - lowest_common = savestring (matches[0]); - - for (i = 0; matches[i + 1]; i++) - { - if (strcmp (matches[i], matches[i + 1]) == 0) - { - free (matches[i]); - matches[i] = (char *)&dead_slot; - } - else - newlen++; - } - - /* We have marked all the dead slots with (char *)&dead_slot. - Copy all the non-dead entries into a new array. */ - { - char **temp_array = - (char **)xmalloc ((3 + newlen) * sizeof (char *)); - - for (i = 1, j = 1; matches[i]; i++) - { - if (matches[i] != (char *)&dead_slot) - temp_array[j++] = matches[i]; - } - - temp_array[j] = (char *)NULL; - - if (matches[0] != (char *)&dead_slot) - free (matches[0]); - - free (matches); - - matches = temp_array; - } - - /* Place the lowest common denominator back in [0]. */ - matches[0] = lowest_common; - - /* If there is one string left, and it is identical to the - lowest common denominator, then the LCD is the string to - insert. */ - if (j == 2 && strcmp (matches[0], matches[1]) == 0) - { - free (matches[1]); - matches[1] = (char *)NULL; - } - } - - switch (what_to_do) - { - case TAB: - /* If we are matching filenames, then here is our chance to - do clever processing by re-examining the list. Call the - ignore function with the array as a parameter. It can - munge the array, deleting matches as it desires. */ - if (rl_ignore_some_completions_function && - our_func == (Function *)filename_completion_function) - (void)(*rl_ignore_some_completions_function)(matches); - - /* If we are doing completion on quoted substrings, and any matches - contain any of the completer_word_break_characters, then auto- - matically prepend the substring with a quote character (just pick - the first one from the list of such) if it does not already begin - with a quote string. FIXME: Need to remove any such automatically - inserted quote character when it no longer is necessary, such as - if we change the string we are completing on and the new set of - matches don't require a quoted substring. */ - replacement = matches[0]; - - if (matches[0] && rl_completer_quote_characters && !quote_char && - rl_filename_completion_desired) - { - int do_replace; - - do_replace = NO_MATCH; - - /* If there is a single match, see if we need to quote it. - This also checks whether the common prefix of several - matches needs to be quoted. If the common prefix should - not be checked, add !matches[1] to the if clause. */ - if (rl_strpbrk (matches[0], rl_completer_word_break_characters)) - do_replace = matches[1] ? MULT_MATCH : SINGLE_MATCH; - - if (do_replace != NO_MATCH) - { -#if defined (SHELL) - /* XXX - experimental */ - /* Quote the replacement, since we found an - embedded word break character in a potential - match. */ - char *rtext, *mtext; - int rlen; - extern char *double_quote (); /* in builtins/common.c */ - - /* If DO_REPLACE == MULT_MATCH, it means that there is - more than one match. In this case, we do not add - the closing quote or attempt to perform tilde - expansion. If DO_REPLACE == SINGLE_MATCH, we try - to perform tilde expansion, because double quotes - inhibit tilde expansion by the shell. */ - - mtext = matches[0]; - if (mtext[0] == '~' && do_replace == SINGLE_MATCH) - mtext = tilde_expand (matches[0]); - rtext = double_quote (mtext); - if (mtext != matches[0]) - free (mtext); - - rlen = strlen (rtext); - replacement = (char *)alloca (rlen + 1); - strcpy (replacement, rtext); - if (do_replace == MULT_MATCH) - replacement[rlen - 1] = '\0'; - free (rtext); -#else /* !SHELL */ - /* Found an embedded word break character in a potential - match, so we need to prepend a quote character if we - are replacing the completion string. */ - replacement = (char *)alloca (strlen (matches[0]) + 2); - quote_char = *rl_completer_quote_characters; - *replacement = quote_char; - strcpy (replacement + 1, matches[0]); -#endif /* SHELL */ - } - } - - if (replacement) - { - rl_delete_text (start, rl_point); - rl_point = start; - rl_insert_text (replacement); - } - - /* If there are more matches, ring the bell to indicate. - If this was the only match, and we are hacking files, - check the file to see if it was a directory. If so, - add a '/' to the name. If not, and we are at the end - of the line, then add a space. */ - if (matches[1]) - { - if (rl_editing_mode != vi_mode) - ding (); /* There are other matches remaining. */ - } - else - { - char temp_string[4]; - int temp_string_index = 0; - - if (quote_char) - temp_string[temp_string_index++] = quote_char; - - temp_string[temp_string_index++] = delimiter ? delimiter : ' '; - temp_string[temp_string_index++] = '\0'; - - if (rl_filename_completion_desired) - { - struct stat finfo; - char *filename = tilde_expand (matches[0]); - - if ((stat (filename, &finfo) == 0) && - S_ISDIR (finfo.st_mode)) - { - if (rl_line_buffer[rl_point] != '/') - rl_insert_text ("/"); - } - else - { - if (rl_point == rl_end) - rl_insert_text (temp_string); - } - free (filename); - } - else - { - if (rl_point == rl_end) - rl_insert_text (temp_string); - } - } - break; - - case '*': - { - int i = 1; - - rl_delete_text (start, rl_point); - rl_point = start; - rl_begin_undo_group (); - if (matches[1]) - { - while (matches[i]) - { - rl_insert_text (matches[i++]); - rl_insert_text (" "); - } - } - else - { - rl_insert_text (matches[0]); - rl_insert_text (" "); - } - rl_end_undo_group (); - } - break; - - case '?': - { - int len, count, limit, max = 0; - int j, k, l; - - /* Handle simple case first. What if there is only one answer? */ - if (!matches[1]) - { - char *temp = (char *)NULL; - - if (rl_filename_completion_desired) - temp = strrchr (matches[0], '/'); - - if (!temp) - temp = matches[0]; - else - temp++; - - crlf (); - fprintf (rl_outstream, "%s", temp); -#if defined (VISIBLE_STATS) - if (rl_filename_completion_desired && rl_visible_stats) - { - int extension_char; - - extension_char = stat_char (matches[0]); - if (extension_char) - putc (extension_char, rl_outstream); - } -#endif /* VISIBLE_STATS */ - crlf (); - goto restart; - } - - /* There is more than one answer. Find out how many there are, - and find out what the maximum printed length of a single entry - is. */ - for (i = 1; matches[i]; i++) - { - char *temp; - int name_length; - - /* If we are hacking filenames, then only count the characters - after the last slash in the pathname. */ - if (rl_filename_completion_desired) - temp = strrchr (matches[i], '/'); - else - temp = (char *)NULL; - - if (!temp) - temp = matches[i]; - else - temp++; - - name_length = strlen (temp); - - if (name_length > max) - max = name_length; - } - - len = i - 1; - - /* If there are many items, then ask the user if she - really wants to see them all. */ - if (len >= rl_completion_query_items) - { - crlf (); - fprintf (rl_outstream, - "There are %d possibilities. Do you really", len); - crlf (); - fprintf (rl_outstream, "wish to see them all? (y or n)"); - fflush (rl_outstream); - if (!get_y_or_n ()) - { - crlf (); - goto restart; - } - } - - /* How many items of MAX length can we fit in the screen window? */ - max += 2; - limit = screenwidth / max; - if (limit != 1 && (limit * max == screenwidth)) - limit--; - - /* Avoid a possible floating exception. If max > screenwidth, - limit will be 0 and a divide-by-zero fault will result. */ - if (limit == 0) - limit = 1; - - /* How many iterations of the printing loop? */ - count = (len + (limit - 1)) / limit; - - /* Watch out for special case. If LEN is less than LIMIT, then - just do the inner printing loop. */ - if (len < limit) - count = 1; - - /* Sort the items if they are not already sorted. */ - if (!rl_ignore_completion_duplicates) - qsort (matches, len, sizeof (char *), compare_strings); - - /* Print the sorted items, up-and-down alphabetically, like - ls might. */ - crlf (); - - for (i = 1; i < count + 1; i++) - { - for (j = 0, l = i; j < limit; j++) - { - if (l > len || !matches[l]) - { - break; - } - else - { - char *temp = (char *)NULL; - int printed_length; - - if (rl_filename_completion_desired) - temp = strrchr (matches[l], '/'); - - if (!temp) - temp = matches[l]; - else - temp++; - - printed_length = strlen (temp); - fprintf (rl_outstream, "%s", temp); - -#if defined (VISIBLE_STATS) - if (rl_filename_completion_desired && - rl_visible_stats) - { - int extension_char; - - extension_char = stat_char (matches[l]); - - if (extension_char) - { - putc (extension_char, rl_outstream); - printed_length++; - } - } -#endif /* VISIBLE_STATS */ - - if (j + 1 < limit) - { - for (k = 0; k < max - printed_length; k++) - putc (' ', rl_outstream); - } - } - l += count; - } - crlf (); - } - restart: - - rl_on_new_line (); - } - break; - - default: - fprintf (stderr, "\r\nreadline: bad value for what_to_do in rl_complete\n"); - abort (); - } - - for (i = 0; matches[i]; i++) - free (matches[i]); - free (matches); - } - - /* Check to see if the line has changed through all of this manipulation. */ - if (saved_line_buffer) - { - if (strcmp (rl_line_buffer, saved_line_buffer) != 0) - completion_changed_buffer = 1; - else - completion_changed_buffer = 0; - - free (saved_line_buffer); - } -} - -#if defined (VISIBLE_STATS) -/* Return the character which best describes FILENAME. - `@' for symbolic links - `/' for directories - `*' for executables - `=' for sockets */ -static int -stat_char (filename) - char *filename; -{ - struct stat finfo; - int character = 0; - - if (stat (filename, &finfo) == -1) - return (character); - - if (S_ISDIR (finfo.st_mode)) - character = '/'; -#if defined (S_ISLNK) - else if (S_ISLNK (finfo.st_mode)) - character = '@'; -#endif /* S_ISLNK */ -#if defined (S_ISSOCK) - else if (S_ISSOCK (finfo.st_mode)) - character = '='; -#endif /* S_ISSOCK */ - else if (S_ISREG (finfo.st_mode)) - { - if (access (filename, X_OK) == 0) - character = '*'; - } - return (character); -} -#endif /* VISIBLE_STATS */ - -/* Stupid comparison routine for qsort () ing strings. */ -static int -compare_strings (s1, s2) - char **s1, **s2; -{ - return (strcmp (*s1, *s2)); -} - -/* A completion function for usernames. - TEXT contains a partial username preceded by a random - character (usually `~'). */ -char * -username_completion_function (text, state) - int state; - char *text; -{ -#if defined (MINIMAL) - return (char *)NULL; -#else /* !MINIMAL */ - static char *username = (char *)NULL; - static struct passwd *entry; - static int namelen, first_char, first_char_loc; - - if (!state) - { - if (username) - free (username); - - first_char = *text; - - if (first_char == '~') - first_char_loc = 1; - else - first_char_loc = 0; - - username = savestring (&text[first_char_loc]); - namelen = strlen (username); - setpwent (); - } - - while (entry = getpwent ()) - { - if (strncmp (username, entry->pw_name, namelen) == 0) - break; - } - - if (!entry) - { - endpwent (); - return ((char *)NULL); - } - else - { - char *value = (char *)xmalloc (2 + strlen (entry->pw_name)); - - *value = *text; - - strcpy (value + first_char_loc, entry->pw_name); - - if (first_char == '~') - rl_filename_completion_desired = 1; - - return (value); - } -#endif /* !MINIMAL */ -} - -/* **************************************************************** */ -/* */ -/* Completion */ -/* */ -/* **************************************************************** */ - -/* Non-zero means that case is not significant in completion. */ -int completion_case_fold = 0; - -/* Return an array of (char *) which is a list of completions for TEXT. - If there are no completions, return a NULL pointer. - The first entry in the returned array is the substitution for TEXT. - The remaining entries are the possible completions. - The array is terminated with a NULL pointer. - - ENTRY_FUNCTION is a function of two args, and returns a (char *). - The first argument is TEXT. - The second is a state argument; it should be zero on the first call, and - non-zero on subsequent calls. It returns a NULL pointer to the caller - when there are no more matches. - */ -char ** -completion_matches (text, entry_function) - char *text; - CPFunction *entry_function; -{ - /* Number of slots in match_list. */ - int match_list_size; - - /* The list of matches. */ - char **match_list = - (char **)xmalloc (((match_list_size = 10) + 1) * sizeof (char *)); - - /* Number of matches actually found. */ - int matches = 0; - - /* Temporary string binder. */ - char *string; - - match_list[1] = (char *)NULL; - - while (string = (*entry_function) (text, matches)) - { - if (matches + 1 == match_list_size) - match_list = (char **)xrealloc - (match_list, ((match_list_size += 10) + 1) * sizeof (char *)); - - match_list[++matches] = string; - match_list[matches + 1] = (char *)NULL; - } - - /* If there were any matches, then look through them finding out the - lowest common denominator. That then becomes match_list[0]. */ - if (matches) - { - register int i = 1; - int low = 100000; /* Count of max-matched characters. */ - - /* If only one match, just use that. */ - if (matches == 1) - { - match_list[0] = match_list[1]; - match_list[1] = (char *)NULL; - } - else - { - /* Otherwise, compare each member of the list with - the next, finding out where they stop matching. */ - - while (i < matches) - { - register int c1, c2, si; - - if (completion_case_fold) - { - for (si = 0; - (c1 = to_lower(match_list[i][si])) && - (c2 = to_lower(match_list[i + 1][si])); - si++) - if (c1 != c2) break; - } - else - { - for (si = 0; - (c1 = match_list[i][si]) && - (c2 = match_list[i + 1][si]); - si++) - if (c1 != c2) break; - } - - if (low > si) low = si; - i++; - } - match_list[0] = (char *)xmalloc (low + 1); - strncpy (match_list[0], match_list[1], low); - match_list[0][low] = '\0'; - } - } - else /* There were no matches. */ - { - free (match_list); - match_list = (char **)NULL; - } - return (match_list); -} - -/* Okay, now we write the entry_function for filename completion. In the - general case. Note that completion in the shell is a little different - because of all the pathnames that must be followed when looking up the - completion for a command. */ -char * -filename_completion_function (text, state) - int state; - char *text; -{ -#if !defined(_WIN32) - static DIR *directory; - static char *filename = (char *)NULL; - static char *dirname = (char *)NULL; - static char *users_dirname = (char *)NULL; - static int filename_len; - - dirent *entry = (dirent *)NULL; - - /* If we don't have any state, then do some initialization. */ - if (!state) - { - char *temp; - - if (dirname) free (dirname); - if (filename) free (filename); - if (users_dirname) free (users_dirname); - - filename = savestring (text); - if (!*text) text = "."; - dirname = savestring (text); - - temp = strrchr (dirname, '/'); - - if (temp) - { - strcpy (filename, ++temp); - *temp = '\0'; - } - else - strcpy (dirname, "."); - - /* We aren't done yet. We also support the "~user" syntax. */ - - /* Save the version of the directory that the user typed. */ - users_dirname = savestring (dirname); - { - char *temp_dirname; - - temp_dirname = tilde_expand (dirname); - free (dirname); - dirname = temp_dirname; - - if (rl_symbolic_link_hook) - (*rl_symbolic_link_hook) (&dirname); - } - directory = opendir (dirname); - filename_len = strlen (filename); - - rl_filename_completion_desired = 1; - } - - /* At this point we should entertain the possibility of hacking wildcarded - filenames, like /usr/man/man<WILD>/te<TAB>. If the directory name - contains globbing characters, then build an array of directories, and - then map over that list while completing. */ - /* *** UNIMPLEMENTED *** */ - - /* Now that we have some state, we can read the directory. */ - - while (directory && (entry = readdir (directory))) - { - /* Special case for no filename. - All entries except "." and ".." match. */ - if (!filename_len) - { - if ((strcmp (entry->d_name, ".") != 0) && - (strcmp (entry->d_name, "..") != 0)) - break; - } - else - { - /* Otherwise, if these match upto the length of filename, then - it is a match. */ - if (((int)D_NAMLEN (entry)) >= filename_len && - (entry->d_name[0] == filename[0]) && - (strncmp (filename, entry->d_name, filename_len) == 0)) - { - break; - } - } - } - - if (!entry) - { - if (directory) - { - closedir (directory); - directory = (DIR *)NULL; - } - - if (dirname) - { - free (dirname); - dirname = (char *)NULL; - } - if (filename) - { - free (filename); - filename = (char *)NULL; - } - if (users_dirname) - { - free (users_dirname); - users_dirname = (char *)NULL; - } - - return (char *)NULL; - } - else - { - char *temp; - - if (dirname && (strcmp (dirname, ".") != 0)) - { - if (rl_complete_with_tilde_expansion && *users_dirname == '~') - { - int dirlen = strlen (dirname); - temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry)); - strcpy (temp, dirname); - /* Canonicalization cuts off any final slash present. We need - to add it back. */ - if (dirname[dirlen - 1] != '/') - { - temp[dirlen] = '/'; - temp[dirlen + 1] = '\0'; - } - } - else - { - temp = (char *) - xmalloc (1 + strlen (users_dirname) + D_NAMLEN (entry)); - strcpy (temp, users_dirname); - } - - strcat (temp, entry->d_name); - } - else - { - temp = (savestring (entry->d_name)); - } - return (temp); - } -#else - return NULL; -#endif -} - -/* A function for simple tilde expansion. */ -int -rl_tilde_expand (ignore, key) - int ignore, key; -{ - register int start, end; - char *homedir; - - end = rl_point; - start = end - 1; - - if (rl_point == rl_end && rl_line_buffer[rl_point] == '~') - { - homedir = tilde_expand ("~"); - goto insert; - } - else if (rl_line_buffer[start] != '~') - { - for (; !whitespace (rl_line_buffer[start]) && start >= 0; start--); - start++; - } - - end = start; - do - { - end++; - } - while (!whitespace (rl_line_buffer[end]) && end < rl_end); - - if (whitespace (rl_line_buffer[end]) || end >= rl_end) - end--; - - /* If the first character of the current word is a tilde, perform - tilde expansion and insert the result. If not a tilde, do - nothing. */ - if (rl_line_buffer[start] == '~') - { - char *temp; - int len; - - len = end - start + 1; - temp = (char *)alloca (len + 1); - strncpy (temp, rl_line_buffer + start, len); - temp[len] = '\0'; - homedir = tilde_expand (temp); - - insert: - rl_begin_undo_group (); - rl_delete_text (start, end + 1); - rl_point = start; - rl_insert_text (homedir); - rl_end_undo_group (); - } - - return (0); -} - -/* Find the first occurrence in STRING1 of any character from STRING2. - Return a pointer to the character in STRING1. */ -static char * -rl_strpbrk (string1, string2) - char *string1, *string2; -{ - register char *scan; - - for (; *string1; string1++) - { - for (scan = string2; *scan; scan++) - { - if (*string1 == *scan) - { - return (string1); - } - } - } - return ((char *)NULL); -} - -#if defined (STATIC_MALLOC) - -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -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 (); -} -#endif /* STATIC_MALLOC */ diff --git a/gnu/usr.bin/binutils/readline/config/mh-apollo68v b/gnu/usr.bin/binutils/readline/config/mh-apollo68v deleted file mode 100644 index 34c53cd05ad..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-apollo68v +++ /dev/null @@ -1,4 +0,0 @@ -RANLIB=true -CC= cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_SYS_FILE -USG = -DUSG -INSTALL_PROG = cp diff --git a/gnu/usr.bin/binutils/readline/config/mh-gnu b/gnu/usr.bin/binutils/readline/config/mh-gnu deleted file mode 100644 index dfd9d7aade5..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-gnu +++ /dev/null @@ -1,3 +0,0 @@ -# This is probably in the wrong place, but readline configuration stuff is so -# messed up that it will have to do. -USG = -DHAVE_UNISTD_H diff --git a/gnu/usr.bin/binutils/readline/config/mh-go32 b/gnu/usr.bin/binutils/readline/config/mh-go32 deleted file mode 100644 index ff7282f7c99..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-go32 +++ /dev/null @@ -1,3 +0,0 @@ -CC=i386-go32-gcc -O2 -fno-omit-frame-pointer -AR=i386-go32-ar -RANLIB=i386-go32-ranlib diff --git a/gnu/usr.bin/binutils/readline/config/mh-isc b/gnu/usr.bin/binutils/readline/config/mh-isc deleted file mode 100644 index 89b0de7232f..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-isc +++ /dev/null @@ -1,4 +0,0 @@ -# Interactive System V release 3.2 -RANLIB = true -INSTALL = cp -USG = -DUSG -D_POSIX_SOURCE=1 -D_POSIX_VERSION=1 diff --git a/gnu/usr.bin/binutils/readline/config/mh-ncr3000 b/gnu/usr.bin/binutils/readline/config/mh-ncr3000 deleted file mode 100644 index b2725d68e0a..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-ncr3000 +++ /dev/null @@ -1,20 +0,0 @@ -# The NCR 3000 ships with a MetaWare compiler installed as /bin/cc. -# This compiler not only emits obnoxious copyright messages every time -# you run it, but it chokes and dies on a whole bunch of GNU source -# files. Default to using the AT&T compiler installed in /usr/ccs/ATT/cc. -# Unfortunately though, the AT&T compiler sometimes generates code that -# the assembler barfs on if -g is used, so disable it by default as well. -CC = /usr/ccs/ATT/cc -CFLAGS = - -# Define USG as -DUSG if you are using a System V operating system. -# Define USGr4 also if you are on an SVR4 system. -USG = -DUSG -DUSGr4 -RANLIB = true - -# The /usr/ucb/install program is incompatible (complains about unknown -# group staff). Use good old cp... -INSTALL = cp - -# The l flag generates a warning from the SVR4 archiver, remove it. -AR_FLAGS = cq diff --git a/gnu/usr.bin/binutils/readline/config/mh-posix b/gnu/usr.bin/binutils/readline/config/mh-posix deleted file mode 100644 index 5dc0732969d..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-posix +++ /dev/null @@ -1,3 +0,0 @@ -# Define USG as -DUSG if you are using a System V operating system. -USG = -D_POSIX_VERSION -INSTALL_PROG = cp diff --git a/gnu/usr.bin/binutils/readline/config/mh-sco b/gnu/usr.bin/binutils/readline/config/mh-sco deleted file mode 100644 index 1db9eb7130a..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-sco +++ /dev/null @@ -1,4 +0,0 @@ -# Define USG as -DUSG if you are using a System V operating system. -USG = -DUSG -D_POSIX_SOURCE=1 -RANLIB = true -INSTALL_PROG = cp diff --git a/gnu/usr.bin/binutils/readline/config/mh-sco4 b/gnu/usr.bin/binutils/readline/config/mh-sco4 deleted file mode 100644 index f905bd053d6..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-sco4 +++ /dev/null @@ -1,4 +0,0 @@ -# Define USG as -DUSG if you are using a System V operating system. -USG = -DUSG -RANLIB = true -INSTALL_PROG = cp diff --git a/gnu/usr.bin/binutils/readline/config/mh-sysv b/gnu/usr.bin/binutils/readline/config/mh-sysv deleted file mode 100644 index 26585037c40..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-sysv +++ /dev/null @@ -1,6 +0,0 @@ -# Define USG as -DUSG if you are using a System V operating system. -# No version of System V release 3 has TIOCGWINSZ, but release 3.2 -# defines it anyway. -USG = -DUSG -DTIOCGWINSZ_BROKEN -RANLIB = true -INSTALL = cp diff --git a/gnu/usr.bin/binutils/readline/config/mh-sysv4 b/gnu/usr.bin/binutils/readline/config/mh-sysv4 deleted file mode 100644 index a696306fd7b..00000000000 --- a/gnu/usr.bin/binutils/readline/config/mh-sysv4 +++ /dev/null @@ -1,8 +0,0 @@ -# Define USG as -DUSG if you are using a System V operating system. -# Define USGr4 also if you are on an SVR4 system. -USG = -DUSG -DUSGr4 -RANLIB = true -INSTALL_PROG = /usr/ucb/install -c - -# The l flag generates a warning from the SVR4 archiver, remove it. -AR_FLAGS = cq diff --git a/gnu/usr.bin/binutils/readline/configure.bat b/gnu/usr.bin/binutils/readline/configure.bat deleted file mode 100644 index b5d615e82b6..00000000000 --- a/gnu/usr.bin/binutils/readline/configure.bat +++ /dev/null @@ -1,22 +0,0 @@ -@echo off -if "%1" == "go32" goto h8300 -if "%1" == "h8/300" goto h8300 -echo Specify one of [ go32 h8/300 ] on command line -goto exit - -:go32 -echo Configuring readline for go32 -copy Makefile.dos Makefile -copy sysdep-norm.h sysdep.h -goto exit - -:h8300 -echo Configuring readline for H8/300 -copy Makefile.dos Makefile -copy sysdep-norm.h sysdep.h - -:exit - -cd examples -call configure %1 -cd .. diff --git a/gnu/usr.bin/binutils/readline/configure.in b/gnu/usr.bin/binutils/readline/configure.in deleted file mode 100644 index 560f3535e76..00000000000 --- a/gnu/usr.bin/binutils/readline/configure.in +++ /dev/null @@ -1,58 +0,0 @@ -# This file is a shell script fragment that supplies the information -# necessary to tailor a template configure script into the configure -# script appropriate for this directory. For more information, check -# any existing configure script. - -configdirs=doc -srctrigger=readline.c -srcname="the readline library" - -# per-host: - -files=sysdep-norm.h -links=sysdep.h - -case "${host}" in - *-*-cygwin32*) host_makefile_frag=config/mh-posix ;; - *-*-irix*) host_makefile_frag=config/mh-sysv; files=sysdep-irix.h;; - i[3456]86-ncr-sysv4*) host_makefile_frag=config/mh-ncr3000 ;; -# Using sysdep-norm.h is harmful because termio.h defines VWERASE even though -# c_cc is too small for it (VWERASE is for termios). -# The problem with _POSIX_SOURCE is said not to be a problem after all. -# m88k-*-sysv4*) host_makefile_frag=config/mh-sysv ; - # defining POSIX_SOURCE causes stack_t to be undefined - # even though it's used in <setjmp.h> -# files=sysdep-norm.h ;; - m88*-harris-cxux7*) host_makefile_frag=config/mh-sysv4 ; files=sysdep-cxux7.h ;; - *-*-sysv4*) host_makefile_frag=config/mh-sysv4 ; files=sysdep-sysv4.h ;; - *-*-solaris2*) host_makefile_frag=config/mh-sysv4 ;; - i[3456]86-*-sco3.2v[45]*) host_makefile_frag=config/mh-sco4; files=sysdep-sco.h ;; - i[3456]86-*-sco*) host_makefile_frag=config/mh-sco; files=sysdep-sco.h ;; -# Don't use this; ISC 4.0 only supports POSIX features if you link with -# -lcposix. No thanks. -# i[3456]86-*-isc*) host_makefile_frag=config/mh-isc ;; - i[3456]86-*-isc*) host_makefile_frag=config/mh-sysv ;; - *-*-go32) host_makefile_frag=config/mh-go32 ;; - m68k-apollo-sysv*) host_makefile_frag=config/mh-apollo68v ;; - *-*-sysv*) host_makefile_frag=config/mh-sysv ;; - *-*-m88kbcs*) host_makefile_frag=config/mh-sysv ;; - *-*-linux*) host_makefile_frag=config/mh-posix ;; - powerpc-ibm-aix*) host_makefile_frag=config/mh-sysv; files=sysdep-aix.h ;; - rs6000-ibm-aix*) host_makefile_frag=config/mh-sysv; files=sysdep-aix.h ;; - rs6000-bull-bosx*) host_makefile_frag=config/mh-sysv; files=sysdep-aix.h ;; - *-ibm-aix*) host_makefile_frag=config/mh-sysv ;; - m68k-sony-news*) files=sysdep-obsd.h ;; - *-*-bsd*) files=sysdep-obsd.h ;; - *-*-mach*) files=sysdep-obsd.h ;; - *-*-gnu*) host_makefile_frag=config/mh-gnu ;; - *-*-sunos3*) files=sysdep-obsd.h ;; -# Using termios on SunOS is necessary to save and restore cs7 versus cs8. - *-*-sunos4.1*) host_makefile_frag=config/mh-posix ;; - *-*-ultrix2*) files=sysdep-obsd.h ;; - *-*-riscos*) host_makefile_frag=config/mh-sysv ;; - *-*-openbsd*) files=sysdep-openbsd.h ;; -esac - -# per-target: - - diff --git a/gnu/usr.bin/binutils/readline/display.c b/gnu/usr.bin/binutils/readline/display.c deleted file mode 100644 index f25bb6ea6d3..00000000000 --- a/gnu/usr.bin/binutils/readline/display.c +++ /dev/null @@ -1,826 +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. */ - -#include "sysdep.h" -#include <stdio.h> -#include <sys/types.h> - -/* System-specific feature definitions and include files. */ -#include "rldefs.h" - -/* Some standard library routines. */ -#include "readline.h" -#include "history.h" - -#if defined (__GO32__) -# include <sys/pc.h> -#endif /* __GO32__ */ - -#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 char *term_clreol, *term_im, *term_ic, *term_ei, *term_DC; -/* Termcap variables. */ -extern char *term_up, *term_dc, *term_cr, *term_IC; -extern int screenheight, screenwidth, terminal_can_insert, term_xn; - -extern void _rl_output_some_chars (); -extern int _rl_output_character_function (); - -extern int _rl_convert_meta_chars_to_ascii; -extern int _rl_horizontal_scroll_mode; -extern int _rl_mark_modified_lines; -extern int _rl_prefer_visible_bell; - -/* 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 (); -static void delete_chars (), insert_some_chars (); - -extern char *xmalloc (), *xrealloc (); - -/* **************************************************************** */ -/* */ -/* 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. Carefull 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. */ - -/* Global variables declared here. */ -/* What YOU turn on when you have handled all redisplay yourself. */ -int rl_display_fixed = 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 = 0; - -/* 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 = 0; - -/* Default and initial buffer size. Can grow. */ -static int line_size = 1024; - -/* Basic redisplay algorithm. */ -void -rl_redisplay () -{ - register int in, out, c, linenum; - register char *line = invisible_line; - char *prompt_this_line; - int c_pos = 0; - int inv_botlin = 0; /* Number of lines in newly drawn buffer. */ - - if (!readline_echoing_p) - return; - - if (!rl_display_prompt) - rl_display_prompt = ""; - - if (!invisible_line) - { - visible_line = (char *)xmalloc (line_size); - invisible_line = (char *)xmalloc (line_size); - line = invisible_line; - for (in = 0; in < line_size; in++) - { - visible_line[in] = 0; - invisible_line[in] = 1; - } - rl_on_new_line (); - } - - /* Draw the line into the buffer. */ - c_pos = -1; - - /* Mark the line as modified or not. We only do this for history - lines. */ - out = 0; - 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; - - 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); - } - - strncpy (line + out, prompt_this_line, strlen (prompt_this_line)); - out += strlen (prompt_this_line); - line[out] = '\0'; - - for (in = 0; 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 = (char *)xrealloc (visible_line, line_size); - invisible_line = (char *)xrealloc (invisible_line, line_size); - line = invisible_line; - } - - if (in == rl_point) - c_pos = out; - - if (META_CHAR (c)) - { - if (_rl_convert_meta_chars_to_ascii) - { - sprintf (line + out, "\\%o", c); - out += 4; - } - else - line[out++] = c; - } -#define DISPLAY_TABS -#if defined (DISPLAY_TABS) - else if (c == '\t') - { - register int newout = (out | (int)7) + 1; - while (out < newout) - line[out++] = ' '; - } -#endif - else if (c < ' ') - { - line[out++] = '^'; - line[out++] = UNCTRL (c); /* XXX was c ^ 0x40 */ - } - else if (c == 127) - { - line[out++] = '^'; - line[out++] = '?'; - } - else - line[out++] = c; - } - line[out] = '\0'; - if (c_pos < 0) - c_pos = out; - - /* PWP: now is when things get a bit hairy. The visible and invisible - line buffers are really multiple lines, which would wrap every - screenwidth 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 && term_up && *term_up) - { - int total_screen_chars = (screenwidth * screenheight); - - 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. I'll fix this in a minute. */ - if (out >= total_screen_chars) - out = total_screen_chars - 1; - - /* Number of screen lines to display. */ - inv_botlin = out / screenwidth; - - /* For each line in the buffer, do the updating display. */ - for (linenum = 0; linenum <= inv_botlin; linenum++) - update_line (linenum > _rl_vis_botlin ? "" - : &visible_line[linenum * screenwidth], - &invisible_line[linenum * screenwidth], - linenum); - - /* 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 = &visible_line[linenum * screenwidth]; - _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; - - /* Move the cursor where it should be. */ - _rl_move_vert (c_pos / screenwidth); - _rl_move_cursor_relative (c_pos % screenwidth, - &invisible_line[(c_pos / screenwidth) * screenwidth]); - } - } - else /* Do horizontal scrolling. */ - { - int lmargin; - - /* Always at top line. */ - _rl_last_v_pos = 0; - - /* If the display position of the cursor would be off the edge - of the screen, start the display of this line at an offset that - leaves the cursor on the screen. */ - if (c_pos - last_lmargin > screenwidth - 2) - lmargin = (c_pos / (screenwidth / 3) - 2) * (screenwidth / 3); - else if (c_pos - last_lmargin < 1) - lmargin = ((c_pos - 1) / (screenwidth / 3)) * (screenwidth / 3); - 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 (lmargin + screenwidth < out) - line[lmargin + screenwidth - 1] = '>'; - - if (!rl_display_fixed || forced_display || lmargin != last_lmargin) - { - forced_display = 0; - update_line (&visible_line[last_lmargin], - &invisible_line[lmargin], 0); - - _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; - visible_line = invisible_line; - invisible_line = temp; - rl_display_fixed = 0; - } -} - -/* 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) - register char *old, *new; - int current_line; -{ - register char *ofd, *ols, *oe, *nfd, *nls, *ne; - int lendiff, wsatend; - - if (_rl_last_c_pos == screenwidth && term_xn && new[0]) - { - putc (new[0], rl_outstream); - _rl_last_c_pos = 1; - _rl_last_v_pos++; - if (old[0]) - old[0] = new[0]; - } - - /* Find first difference. */ - for (ofd = old, nfd = new; - (ofd - old < screenwidth) && *ofd && (*ofd == *nfd); - ofd++, nfd++) - ; - - /* Move to the end of the screen line. */ - for (oe = ofd; ((oe - old) < screenwidth) && *oe; oe++); - for (ne = nfd; ((ne - new) < screenwidth) && *ne; ne++); - - /* 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++; - } - - _rl_move_vert (current_line); - _rl_move_cursor_relative (ofd - old, old); - - /* if (len (new) > len (old)) */ - lendiff = (nls - nfd) - (ols - ofd); - - /* Insert (diff (len (old), len (new)) ch. */ - if (lendiff > 0) - { - if (terminal_can_insert) - { - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. */ - if ((2 * (ne - nfd)) < lendiff && !term_IC) - { - _rl_output_some_chars (nfd, (ne - nfd)); - _rl_last_c_pos += (ne - nfd); - } - else - { - if (*ols) - { - insert_some_chars (nfd, lendiff); - _rl_last_c_pos += lendiff; - } - else - { - /* At the end of a line the characters do not have to - be "inserted". They can just be placed on the screen. */ - _rl_output_some_chars (nfd, lendiff); - _rl_last_c_pos += lendiff; - } - /* Copy (new) chars to screen from first diff to last match. */ - if (((nls - nfd) - lendiff) > 0) - { - _rl_output_some_chars (&nfd[lendiff], ((nls - nfd) - lendiff)); - _rl_last_c_pos += ((nls - nfd) - lendiff); - } - } - } - else - { /* cannot insert chars, write to EOL */ - _rl_output_some_chars (nfd, (ne - nfd)); - _rl_last_c_pos += (ne - nfd); - } - } - else /* Delete characters from line. */ - { - /* If possible and inexpensive to use terminal deletion, then do so. */ - if (term_dc && (2 * (ne - nfd)) >= (-lendiff)) - { - if (lendiff) - delete_chars (-lendiff); /* delete (diff) characters */ - - /* Copy (new) chars to screen from first diff to last match */ - if ((nls - nfd) > 0) - { - _rl_output_some_chars (nfd, (nls - nfd)); - _rl_last_c_pos += (nls - nfd); - } - } - /* Otherwise, print over the existing material. */ - else - { - _rl_output_some_chars (nfd, (ne - nfd)); - _rl_last_c_pos += (ne - nfd); - clear_to_eol ((oe - old) - (ne - new)); - } - } -} - -/* Tell the update routines that we have moved onto a new (empty) line. */ -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; -} - -/* Actually update the display, period. */ -rl_forced_update_display () -{ - if (visible_line) - { - register char *temp = visible_line; - - while (*temp) *temp++ = '\0'; - } - rl_on_new_line (); - forced_display++; - rl_redisplay (); -} - -/* 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; - - /* It may be faster to output a CR, and then move forwards instead - of moving backwards. */ - if (new + 1 < _rl_last_c_pos - new) - { -#if defined(__MSDOS__) || defined(_WIN32) - putc('\r', rl_outstream); -#else - tputs (term_cr, 1, _rl_output_character_function); -#endif - _rl_last_c_pos = 0; - } - - if (_rl_last_c_pos == new) return; - - 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 - 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 (MINIMAL) - { - int row, col; - - ScreenGetCursor (&row, &col); - ScreenSetCursor ((row + to - _rl_last_v_pos), col); - } -#else /* !MINIMAL */ - - 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 /* !MINIMAL */ - _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. */ -rl_show_char (c) - int c; -{ - if (META_CHAR (c) && _rl_convert_meta_chars_to_ascii) - { - fprintf (rl_outstream, "M-"); - c = UNMETA (c); - } - -#if defined (DISPLAY_TABS) - if (c < 32 && c != '\t') -#else - if (c < 32) -#endif /* !DISPLAY_TABS */ - { - c += 64; - } - - putc (c, rl_outstream); - fflush (rl_outstream); -} - -int -rl_character_len (c, pos) - register int c, pos; -{ - if (META_CHAR (c)) - return (_rl_convert_meta_chars_to_ascii ? 4 : 1); - - if (c == '\t') - { -#if defined (DISPLAY_TABS) - return (((pos | (int)7) + 1) - pos); -#else - return (2); -#endif /* !DISPLAY_TABS */ - } - - if (isprint (c)) - return (1); - else - return (2); -} - -/* How to print things in the "echo-area". The prompt is treated as a - mini-modeline. */ - -#if defined (HAVE_VARARGS_H) -rl_message (va_alist) - va_dcl -{ - char *format; - va_list args; - - va_start (args); - format = va_arg (args, char *); - vsprintf (msg_buf, format, args); - va_end (args); - - rl_display_prompt = msg_buf; - rl_redisplay (); -} -#else /* !HAVE_VARARGS_H */ -rl_message (format, arg1, arg2) - char *format; -{ - sprintf (msg_buf, format, arg1, arg2); - rl_display_prompt = msg_buf; - rl_redisplay (); -} -#endif /* !HAVE_VARARGS_H */ - -/* How to clear things from the "echo-area". */ -rl_clear_message () -{ - rl_display_prompt = rl_prompt; - rl_redisplay (); -} - -rl_reset_line_state () -{ - rl_on_new_line (); - - rl_display_prompt = rl_prompt ? rl_prompt : ""; - forced_display = 1; -} - -/* 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; - - backspace (l); - for (i = 0; i < l; i++) - putc (' ', rl_outstream); - 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 (MINIMAL) - if (term_clreol) - { - tputs (term_clreol, 1, _rl_output_character_function); - } - else -#endif /* !__GO32__ */ - { - register int i; - - /* Do one more character space. */ - count++; - - for (i = 0; i < count; i++) - putc (' ', rl_outstream); - - backspace (count); - } -} - -/* Insert COUNT characters from STRING to the output stream. */ -static void -insert_some_chars (string, count) - char *string; - int count; -{ -#if defined(_WIN32) -#else -#if defined (__GO32__) - int row, col, width; - short *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 *tgoto (), *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__ */ -#endif -} - -/* Delete COUNT characters from the display line. */ -static void -delete_chars (count) - int count; -{ -#if defined(_WIN32) - -#else -#if defined (__GO32__) - int row, col, width; - short *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) - return; - - if (term_DC && *term_DC) - { - char *tgoto (), *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__ */ -#endif -} diff --git a/gnu/usr.bin/binutils/readline/doc/ChangeLog b/gnu/usr.bin/binutils/readline/doc/ChangeLog deleted file mode 100644 index 2520a8522cd..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/ChangeLog +++ /dev/null @@ -1,12 +0,0 @@ -Wed Sep 20 12:57:29 1995 Ian Lance Taylor <ian@cygnus.com> - - * Makefile.in (maintainer-clean): New synonym for realclean. - -Tue Feb 2 11:40:04 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * Makefile.in: configurable (and useable) Makefile template - * Makefile: removed, replaced with configurable Makefile.in - * texindex.c texinfo.tex: remove, replacing w/refs to tools - elsewhere in distribution tree - * configure.in: pro forma configure stub - * ChangeLog: new file diff --git a/gnu/usr.bin/binutils/readline/doc/Makefile.in b/gnu/usr.bin/binutils/readline/doc/Makefile.in deleted file mode 100644 index 95da19c34d1..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/Makefile.in +++ /dev/null @@ -1,94 +0,0 @@ -## Copyright (C) 1993 Free Software Foundation, Inc. - -# Makefile for Readline documentation. - -# 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. - -srcdir = . - -prefix = /usr/local - -infodir = $(prefix)/share/info - -SHELL = /bin/sh - -INSTALL = install -c -INSTALL_DATA = $(INSTALL) - -# where to find texinfo -TEXIDIR=$(srcdir)/../../texinfo - -# where to find makeinfo, preferably one designed for texinfo-2 -MAKEINFO=makeinfo - -# auxiliary program for sorting Texinfo indices -TEXINDEX=texindex - -# Don Knuth's TeX formatter -TEX=tex - -#### Host, target, and site specific Makefile fragments come in here. -### - -all: info dvi - -install: install-info - -info: history.info readline.info - -dvi: history.dvi readline.dvi - -install-info: info - -parent=`echo $(DESTDIR)$(infodir)|sed -e 's@/[^/]*$$@@'`; \ - if [ -d $$parent ] ; then true ; else mkdir $$parent ; fi - -if [ -d $(DESTDIR)$(infodir) ] ; then true ; else mkdir $(DESTDIR)$(infodir) ; fi - for i in *.info* ; do \ - $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i ; \ - done - -history.info: hist.texinfo hsuser.texinfo hstech.texinfo - $(MAKEINFO) -I $(srcdir) -o ./history.info $(srcdir)/hist.texinfo - -history.dvi: hist.texinfo hsuser.texinfo hstech.texinfo $(TEXIDIR)/texinfo.tex - TEXINPUTS=${TEXIDIR}:$(srcdir):$$TEXINPUTS $(TEX) hist.texinfo - $(TEXINDEX) hist.?? - TEXINPUTS=${TEXIDIR}:$(srcdir):$$TEXINPUTS $(TEX) hist.texinfo - -readline.info: rlman.texinfo rluser.texinfo rltech.texinfo - $(MAKEINFO) -I $(srcdir) -o ./readline.info $(srcdir)/rlman.texinfo - -readline.dvi: rlman.texinfo rluser.texinfo rltech.texinfo - TEXINPUTS=${TEXIDIR}:$(srcdir):$$TEXINPUTS $(TEX) rlman.texinfo - $(TEXINDEX) rlman.?? - TEXINPUTS=${TEXIDIR}:$(srcdir):$$TEXINPUTS $(TEX) rlman.texinfo - -distclean: clean - rm -f Makefile config.status - -mostlyclean: clean - -realclean maintainer-clean: distclean - -clean: clean-info clean-dvi - -clean-info: - rm -f history.info* readline.info* - -clean-dvi: - rm -f hist.?? hist.??? - rm -f rlman.?? rlman.??? - -Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) - $(SHELL) ./config.status diff --git a/gnu/usr.bin/binutils/readline/doc/configure.in b/gnu/usr.bin/binutils/readline/doc/configure.in deleted file mode 100644 index c082c568c65..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/configure.in +++ /dev/null @@ -1,8 +0,0 @@ -srcname="READLINE doc" -srctrigger=rlman.texinfo -# per-host: - -# per-target: - -files="" -links="" diff --git a/gnu/usr.bin/binutils/readline/doc/hist.texinfo b/gnu/usr.bin/binutils/readline/doc/hist.texinfo deleted file mode 100644 index 62927381044..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/hist.texinfo +++ /dev/null @@ -1,106 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename history.info -@settitle GNU Readline Library -@comment %**end of header (This is for running Texinfo on a region.) -@synindex vr fn -@setchapternewpage odd - -@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 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 -@sp 10 -@center @titlefont{GNU History Library} -@center Brian Fox -@center Free Software Foundation -@center Version 1.1 -@center April 1991 - -@c Include the Distribution inside the titlepage environment so -@c that headings are turned off. - -@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 - -@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/gnu/usr.bin/binutils/readline/doc/hstech.texinfo b/gnu/usr.bin/binutils/readline/doc/hstech.texinfo deleted file mode 100644 index c3fe3f6a11f..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/hstech.texinfo +++ /dev/null @@ -1,311 +0,0 @@ -@ignore -This file documents the user interface to the GNU History library. - -Copyright (C) 1988, 1991 Free Software Foundation, Inc. -Authored by Brian Fox. - -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 the GNU History Library with -programs that you write. 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 making up new -ones. - -The programmer using the History library has available to him functions -for remembering lines on a history stack, associating arbitrary data -with a line, removing lines from the stack, searching through the stack -for a line containing an arbitrary text string, and referencing any line -on the stack directly. In addition, a history @dfn{expansion} function -is available which provides for a consistent user interface across many -different programs. - -The end-user using programs written with the History library has the -benifit 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 used 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 Emacs style command line editing. - -@node History Storage -@section History Storage - -@example -typedef struct _hist_entry @{ - char *line; - char *data; -@} HIST_ENTRY; -@end example - -@node History Functions -@section History Functions - -This section describes the calling sequence for the various functions -present in GNU History. - -@defun {void using_history} () -Begin a session in which the history functions might be used. This -just initializes the interactive variables. -@end defun - -@defun {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 defun - -@defun {int where_history} () -Returns the number which says what history element we are now looking -at. -@end defun - -@defun {int history_set_pos} (int pos) -Set the position in the history list to @var{pos}. -@end defun - -@defun {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. @var{direction}, if negative, says to search -backwards from @var{pos}, else forwards. Returns the absolute index of -the history element where @var{string} was found, or -1 otherwise. -@end defun - -@defun {HIST_ENTRY *remove_history} (); -Remove history element @var{which} from the history. The removed -element is returned to you so you can free the line, data, -and containing structure. -@end defun - -@defun {void stifle_history} (int max) -Stifle the history list, remembering only @var{max} number of entries. -@end defun - -@defun {int unstifle_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. -@end defun - -@defun {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 defun - -@defun {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 the @var{from}'th line and end at the @var{to}'th. 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 defun - -@defun {int write_history} (char *filename) -Append the current history to @var{filename}. If @var{filename} is -@code{NULL}, then append the history list to @file{~/.history}. Values -returned are as in @code{read_history ()}. -@end defun - -@defun {int append_history} (int nelements, char *filename) -Append @var{nelement} entries to @var{filename}. The entries appended -are from the end of the list minus @var{nelements} up to the end of the -list. -@end defun - -@defun {HIST_ENTRY *replace_history_entry} () -Make the history entry at @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 defun - -@defun {HIST_ENTRY *current_history} () -Return the history entry at the current position, as determined by -@code{history_offset}. If there is no entry there, return a @code{NULL} -pointer. -@end defun - -@defun {HIST_ENTRY *previous_history} () -Back up @var{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 defun - -@defun {HIST_ENTRY *next_history} () -Move @code{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 defun - -@defun {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 defun - -@defun {int history_search} (char *string, int direction) -Search the history for @var{string}, starting at @code{history_offset}. -If @var{direction} < 0, then the search is through previous entries, -else through subsequent. If @var{string} is found, then -@code{current_history ()} is the history entry, and the value of this -function is the offset in the line of that history entry that the -@var{string} was found in. Otherwise, nothing is changed, and a -1 is -returned. -@end defun - -@defun {int history_expand} (char *string, char **output) -Expand @var{string}, placing the result into @var{output}, a pointer -to a string. 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, or -@item -1 -if there was an error in expansion. -@end table - -If an error ocurred in expansion, then @var{output} contains a descriptive -error message. -@end defun - -@defun {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 -the GNU Bash shell. -@end defun - -@defun {int history_total_bytes} (); -Return the number of bytes that the primary history entries are using. -This just adds up the lengths of @code{the_history->lines}. -@end defun - -@node History Variables -@section History Variables - -This section describes the variables in GNU History that are externally -visible. - -@defvar {int history_base} -For convenience only. You set this when interpreting history commands. -It is the logical offset of the first history element. -@end defvar - -@node History Programming Example -@section History Programming Example - -The following snippet of code demonstrates simple use of the GNU History -Library. - -@smallexample -main () -@{ - char line[1024], *t; - int done = 0; - - line[0] = 0; - - while (!done) - @{ - fprintf (stdout, "history%% "); - t = gets (line); - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - @{ - char *expansion; - int result; - - using_history (); - - result = history_expand (line, &expansion); - strcpy (line, expansion); - free (expansion); - if (result) - fprintf (stderr, "%s\n", line); - - if (result < 0) - continue; - - add_history (line); - @} - - if (strcmp (line, "quit") == 0) done = 1; - if (strcmp (line, "save") == 0) write_history (0); - if (strcmp (line, "read") == 0) read_history (0); - if (strcmp (line, "list") == 0) - @{ - register HIST_ENTRY **the_list = history_list (); - register int i; - - if (the_list) - for (i = 0; the_list[i]; i++) - fprintf (stdout, "%d: %s\n", - i + history_base, the_list[i]->line); - @} - if (strncmp (line, "delete", strlen ("delete")) == 0) - @{ - int which; - if ((sscanf (line + strlen ("delete"), "%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/gnu/usr.bin/binutils/readline/doc/hsuser.texinfo b/gnu/usr.bin/binutils/readline/doc/hsuser.texinfo deleted file mode 100644 index cda0a688c74..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/hsuser.texinfo +++ /dev/null @@ -1,153 +0,0 @@ -@ignore -This file documents the user interface to the GNU History library. - -Copyright (C) 1988, 1991 Free Software Foundation, Inc. -Authored by Brian Fox. - -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 - -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}. - -@menu -* History Interaction:: What it feels like using History as a user. -@end menu - -@node History Interaction -@section History Interaction -@cindex expansion - -The History library provides a history expansion feature that is similar -to the history expansion in Csh. The following text describes the sytax -that you use to manipulate the history information. - -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}. The line is broken into words in the same fashion -that the Bash shell does, so that several English (or Unix) words -surrounded by quotes are considered as one word. - -@menu -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of susbstitution. -@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. - -@table @asis - -@item @code{!} -Start a history subsititution, except when followed by a space, tab, or -the end of the line... @key{=} or @key{(}. - -@item @code{!!} -Refer to the previous command. This is a synonym for @code{!-1}. - -@item @code{!n} -Refer to command line @var{n}. - -@item @code{!-n} -Refer to the command line @var{n} lines back. - -@item @code{!string} -Refer to the most recent command starting with @var{string}. - -@item @code{!?string}[@code{?}] -Refer to the most recent command containing @var{string}. - -@end table - -@node Word Designators -@subsection Word Designators - -A @key{:} separates the event specification from the word designator. It -can be omitted if the word designator begins with a @key{^}, @key{$}, -@key{*} or @key{%}. Words are numbered from the beginning of the line, -with the first word being denoted by a 0 (zero). - -@table @code - -@item 0 (zero) -The zero'th word. For many applications, this is the command word. - -@item 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 @code{?string?} search. - -@item x-y -A range of words; @code{-@var{y}} Abbreviates @code{0-@var{y}}. - -@item * -All of the words, excepting the zero'th. This is a synonym for @code{1-$}. -It is not an error to use @key{*} if there is just one word in the event. -The empty string is returned in that case. - -@end table - -@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 @key{:}. - -@table @code - -@item # -The entire command line typed so far. This means the current command, -not the previous command, so it really isn't a word designator, and doesn't -belong in this section. - -@item h -Remove a trailing pathname component, leaving only the head. - -@item r -Remove a trailing suffix of the form @samp{.}@var{suffix}, leaving the basename. - -@item e -Remove all but the suffix. - -@item t -Remove all leading pathname components, leaving the tail. - -@item p -Print the new command but do not execute it. -@end table diff --git a/gnu/usr.bin/binutils/readline/doc/inc-hist.texi b/gnu/usr.bin/binutils/readline/doc/inc-hist.texi deleted file mode 100644 index 9cdde401cd2..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/inc-hist.texi +++ /dev/null @@ -1,159 +0,0 @@ -@ignore -This file is completely identical to hsuser.texinfo, except that it has the -reference to the programming manual removed. There are definately better ways -to do this! - -This file documents the user interface to the GNU History library. - -Copyright (C) 1988, 1991 Free Software Foundation, Inc. -Authored by Brian Fox. - -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 -@appendix Using History Interactively - -This chapter describes how to use the GNU History Library interactively, -from a user's standpoint. - -@menu -* History Interaction:: What it feels like using History as a user. -@end menu - -@node History Interaction -@section History Interaction -@cindex expansion - -The History library provides a history expansion feature similar -to the history expansion in @code{csh}. The following text describes the -syntax you use to manipulate history information. - -History expansion takes two parts. In the first part, determine -which line from the previous history will be used for substitution. -This line is called the @dfn{event}. -In the second part, select portions of that line for inclusion into the -current line. These portions are called @dfn{words}. -@value{GDBN} breaks the line into words in the same -way that the Bash shell does, so that several English (or Unix) words -surrounded by quotes are considered one word. - -@menu -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of susbstitution. -@end menu - -@node Event Designators -@subsection Event Designators -@cindex event designators - -An @dfn{event designator} is a reference to a command line entry in the -history list. - -@table @asis - -@item @code{!} -Start a history subsititution, except when followed by a space, tab, or -the end of the line... @key{=} or @key{(}. - -@item @code{!!} -Refer to the previous command. This is a synonym for @code{!-1}. - -@item @code{!n} -Refer to command line @var{n}. - -@item @code{!-n} -Refer to the command line @var{n} lines back. - -@item @code{!string} -Refer to the most recent command starting with @var{string}. - -@item @code{!?string}[@code{?}] -Refer to the most recent command containing @var{string}. - -@end table - -@node Word Designators -@subsection Word Designators - -A @key{:} separates the event designator from the @dfn{word designator}. -It can be omitted if the word designator begins with a @key{^}, @key{$}, -@key{*} or @key{%}. Words are numbered from the beginning of the line, -with the first word being denoted by a 0 (zero). - -@table @code - -@item 0 (zero) -The zero'th word. For many applications, this is the command word. - -@item 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 @code{?string?} search. - -@item x-y -A range of words; @code{-@var{y}} Abbreviates @code{0-@var{y}}. - -@item * -All of the words, excepting the zero'th. This is a synonym for @code{1-$}. -It is not an error to use @key{*} if there is just one word in the event. -The empty string is returned in that case. - -@end table - -@node Modifiers -@subsection Modifiers - -After the optional word designator, you can add a sequence of one or more -of the following @dfn{modifiers}, each preceded by a @key{:}. - -@table @code - -@item # -The entire command line typed so far. This means the current command, -not the previous command. -@c -@c FIXME: If it doesn't belong here, let's put it where it does. -@c -@c so it technically isn't a word designator and doesn't belong in -@c this section. - -@item h -Remove a trailing pathname component, leaving only the head. - -@item r -Remove a trailing suffix of the form @samp{.}@var{suffix}, leaving the basename. - -@item e -Remove all but the suffix. - -@item t -Remove all leading pathname components, leaving the tail. - -@item p -Print the new command but do not execute it. -@end table diff --git a/gnu/usr.bin/binutils/readline/doc/rlman.texinfo b/gnu/usr.bin/binutils/readline/doc/rlman.texinfo deleted file mode 100644 index f2e7fb6db91..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/rlman.texinfo +++ /dev/null @@ -1,103 +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 - -@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 -@sp 10 -@center @titlefont{GNU Readline Library} -@center Brian Fox -@center Free Software Foundation -@center Version 1.1 -@center April 1991 - -@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/gnu/usr.bin/binutils/readline/doc/rltech.texinfo b/gnu/usr.bin/binutils/readline/doc/rltech.texinfo deleted file mode 100644 index 2048b7c29df..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/rltech.texinfo +++ /dev/null @@ -1,1012 +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 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 manual describes the interface between the GNU Readline Library and -user programs. If you are a programmer, and you wish to include the -features found in GNU Readline in your own programs, such as completion, -line editing, and interactive history manipulation, this documentation -is for you. - -@menu -* Default Behaviour:: Using the default behaviour of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. -@end menu - -@node Default Behaviour -@section Default Behaviour - -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 ()}. - -@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 which @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 - -So, one might say -@example -@code{char *line = readline ("Enter a line: ");} -@end example -in order to read a line of text from the user. - -The line which is returned has the final newline removed, so only the -text of the line remains. - -If 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 was 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 - -For full details on the GNU History Library, see the associated manual. - -It is polite to avoid saving empty lines on the history list, since it -is rare than someone has a burning need to reuse a blank line. Here is -a function which usefully replaces the standard @code{gets ()} library -function: - -@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 * -do_gets () -@{ - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read != (char *)NULL) - @{ - 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 - -The above code 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 ()}. - -@findex rl_bind_key () -@example -@code{int rl_bind_key (int @var{key}, int (*@var{function})());} -@end example - -@code{rl_bind_key ()} takes 2 arguments; @var{key} is the character that -you want to bind, and @var{function} is the address of the function to -run when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert ()} -makes @key{TAB} just insert itself. - -@code{rl_bind_key ()} returns non-zero if @var{key} is not a valid -ASCII character code (between 0 and 255). - -@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, etc. - -@node Custom Functions -@section Custom Functions - -Readline provides a great 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 in 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 Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Function Writing:: Variables and calling conventions. -* Allowing Undoing:: How to make your functions undoable. -@end menu - -@node The Function Type -@subsection The Function Type - -For the sake of readabilty, we declare a new type of object, called -@dfn{Function}. A @code{Function} is a C language 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;} - -we have - -@code{Function *func;} - -@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: - -@defun 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 defun - -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 already. If you need to do more or different -things 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. - -@defun {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 defun - -@defun {Keymap rl_copy_keymap} (Keymap map) -Return a new keymap which is a copy of @var{map}. -@end defun - -@defun {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 defun - -@node Binding Keys -@subsection Binding Keys - -You associate keys with functions through the keymap. Here are -functions for doing that. - -@defun {int rl_bind_key} (int key, Function *function) -Binds @var{key} to @var{function} in the currently selected keymap. -Returns non-zero in the case of an invalid @var{key}. -@end defun - -@defun {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 defun - -@defun {int rl_unbind_key} (int key) -Make @var{key} do nothing in the currently selected keymap. -Returns non-zero in case of error. -@end defun - -@defun {int rl_unbind_key_in_map} (int key, Keymap map) -Make @var{key} be bound to the null function in @var{map}. -Returns non-zero in case of error. -@end defun - -@defun 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}; right now this can be a function (@code{ISFUNC}), a macro -(@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as -necessary. The initial place to do bindings is in @var{map}. -@end defun - -@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 gathered so far. - -@defvar {char *rl_line_buffer} -This is the line gathered so far. You are welcome to modify the -contents of this, but see Undoing, below. -@end defvar - -@defvar {int rl_point} -The offset of the current cursor position in @var{rl_line_buffer}. -@end defvar - -@defvar {int rl_end} -The number of characters present in @code{rl_line_buffer}. When -@code{rl_point} is at the end of the line, then @code{rl_point} and -@code{rl_end} are equal. -@end defvar - -The calling sequence for a command @code{foo} looks like - -@example -@code{foo (int count, int key)} -@end example - -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, other -functions as a flag, and 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 a negative argument as well as a positive -argument. At the very least, it should be aware that it can be passed a -negative argument. - -@node Allowing Undoing -@subsection Allowing Undoing - -Supporting the undo command is a painless thing to do, and makes your -functions much more useful to the end user. 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 it -calls @code{rl_insert_text ()} or @code{rl_delete_text ()} to do it, then -undoing is already done for you automatically, and you can safely skip -this section. - -If you do multiple insertions or multiple deletions, or any combination -of these operations, you should group them together into one operation. -This can be done with @code{rl_begin_undo_group ()} and -@code{rl_end_undo_group ()}. - -@defun 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 they could be direct calls to -@code{rl_add_undo ()}. -@end defun - -@defun rl_end_undo_group () -Closes the current undo group started with @code{rl_begin_undo_group -()}. There should be exactly one call to @code{rl_end_undo_group ()} -for every call to @code{rl_begin_undo_group ()}. -@end defun - -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g. change its case), you 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. - -@defun 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 subsequent to this call you will -modify that range of text in some way. -@end defun - -@subsection An Example - -Here is a function which changes lowercase characters to the uppercase -equivalents, and uppercase characters to the lowercase equivalents. 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{10 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. */ -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; -@} -@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 either commands, or data, or both commands -and data. The following sections describe how your program and Readline -cooperate to provide this service to end users. - -@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 to say, it is not possible to accurately -expand a partial word without knowing what all of the possible words -that make sense in that context are. The GNU Readline library provides -the user interface to completion, and additionally, 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 those functions must do, and provides an example -function. - -There are three major functions used to perform completion: - -@enumerate -@item -The user-interface function @code{rl_complete ()}. This function is -called interactively with the same calling conventions as other -functions in readline intended for interactive use; i.e. @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 or actually performs the -completion, depending on which behaviour 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, 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. - -@end enumerate - -@defun 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 defun - -Note that @code{rl_complete ()} has the identical calling conventions as -any other key-invokable function; this is because by default it is bound -to the @samp{TAB} key. - -@defvar {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 is -used, namely @code{filename_entry_function ()}. -@end defvar - -@node Completion Functions -@subsection Completion Functions - -Here is the complete list of callable completion functions present in -Readline. - -@defun 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. -@end defun - -@defun 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. This just calls @code{rl_complete_internal ()} with an -argument of @samp{TAB}. -@end defun - -@defun rl_possible_completions () -List the possible completions. See description of @code{rl_complete -()}. This just calls @code{rl_complete_internal ()} with an argument of -@samp{?}. -@end defun - -@defun {char **completion_matches} (char *text, char *(*entry_function) ()) -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_function} 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. It returns a @code{NULL} pointer to the caller when there are -no more matches. -@end defun - -@defun {char *filename_completion_function} (char *text, int state) -A generator function for filename completion in the general case. Note -that completion in the Bash shell is a little different because of all -the pathnames that must be followed when looking up the completion for a -command. -@end defun - -@defun {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{~}). -@end defun - -@node Completion Variables -@subsection Completion Variables - -@defvar {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 defvar - -@defvar {Function *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} 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 defvar - -@defvar {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 defvar - -@defvar {char *rl_basic_word_break_characters} -The basic list of characters that signal a break between words for the -completer routine. The contents of this variable is what breaks words -in the Bash shell, i.e. " \t\n\"\\'`@@$><=;|&@{(". -@end defvar - -@defvar {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 contents of -@code{rl_basic_word_break_characters}. -@end defvar - -@defvar {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. -@end defvar - -@defvar {int rl_ignore_completion_duplicates} -If non-zero, then disallow duplicates in the matches. Default is 1. -@end defvar - -@defvar {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. -@end defvar - -@defvar {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 @code{(char *)} known as -@var{matches} in the code. The 1st element (@code{matches[0]}) is the -maximal substring that is common to all matches. This function can -re-arrange the list of matches as required, but each deleted element of -the array must be @code{free()}'d. -@end defvar - -@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{readline/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 <readline/readline.h> -#include <readline/history.h> -#include <sys/types.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/errno.h> - -/* 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 @} -@}; - -/* 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 = 0; -@page -main (argc, argv) - int argc; - char **argv; -@{ - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - while (!done) - @{ - char *line; - - line = readline ("FileMan: "); - - if (!line) - @{ - done = 1; /* Encountered EOF at top level. */ - @} - else - @{ - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - stripwhite (line); - - if (*line) - @{ - add_history (line); - execute_line (line); - @} - @} - - if (line) - free (line); - @} - exit (0); -@} - -/* Execute a command line. */ -execute_line (line) - char *line; -@{ - register int i; - COMMAND *find_command (), *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && !whitespace (line[i])) - i++; - - word = line; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - @{ - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return; - @} - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - (*(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. */ -stripwhite (string) - char *string; -@{ - register int i = 0; - - while (whitespace (string[i])) - i++; - - if (i) - strcpy (string, string + i); - - i = strlen (string) - 1; - - while (i > 0 && whitespace (string[i])) - i--; - - string[++i] = '\0'; -@} -@page -/* **************************************************************** */ -/* */ -/* Interface to Readline 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 () -@{ - char **fileman_completion (); - - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (Function *)fileman_completion; -@} - -/* Attempt to complete on the contents of TEXT. START and END show the - region of TEXT that contains the word to complete. We can use the - entire line 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; - char *command_generator (); - - 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 (name); - @} - - /* If no names matched, then return NULL. */ - return ((char *)NULL); -@} -@page -/* **************************************************************** */ -/* */ -/* 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); - system (syscom); -@} - -com_view (arg) - char *arg; -@{ - if (!valid_argument ("view", arg)) - return; - - sprintf (syscom, "cat %s | more", arg); - system (syscom); -@} - -com_rename (arg) - char *arg; -@{ - too_dangerous ("rename"); -@} - -com_stat (arg) - char *arg; -@{ - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return; - - if (stat (arg, &finfo) == -1) - @{ - perror (arg); - return; - @} - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d bytes in length.\n", arg, - finfo.st_nlink, (finfo.st_nlink == 1) ? "" : "s", finfo.st_size); - printf (" Created on: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf ("Last modified at: %s", ctime (&finfo.st_mtime)); -@} - -com_delete (arg) - char *arg; -@{ - too_dangerous ("delete"); -@} - -/* 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"); - @} -@} - -/* Change to the directory ARG. */ -com_cd (arg) - char *arg; -@{ - if (chdir (arg) == -1) - perror (arg); - - com_pwd (""); -@} - -/* Print out the current working directory. */ -com_pwd (ignore) - char *ignore; -@{ - char dir[1024]; - - (void) getwd (dir); - - printf ("Current directory is %s\n", dir); -@} - -/* The user wishes to quit using this program. Just set DONE non-zero. */ -com_quit (arg) - char *arg; -@{ - done = 1; -@} - -/* 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/gnu/usr.bin/binutils/readline/doc/rluser.texinfo b/gnu/usr.bin/binutils/readline/doc/rluser.texinfo deleted file mode 100644 index da1111148bf..00000000000 --- a/gnu/usr.bin/binutils/readline/doc/rluser.texinfo +++ /dev/null @@ -1,566 +0,0 @@ -@ignore -This file documents the end user interface to the GNU command line -editing feautres. 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 Free Software Foundation, Inc. - -Authored by Brian Fox. - -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 - -@node Command Line Editing -@appendix Command Line Editing - -This text describes GNU's 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. -@end menu - -@node Introduction and Notation -@section Introduction to Line Editing - -The following paragraphs describe the notation we use to represent -keystrokes. - -The text @key{C-k} is read as `Control-K' and describes the character -produced when the Control key is depressed and the @key{k} key is struck. - -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 struck. 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}, for more info). - -@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{RET}. You do not have to be at the -end of the line to press @key{RET}; the entire line is accepted -regardless of the location of the cursor within the line. - -@menu -* 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. -@end menu - -@node Readline Bare Essentials -@subsection Readline Bare Essentials - -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 @key{DEL} 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. Aftwerwards, 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 get `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 get `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 itself 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 - -@dfn{Killing} text means to delete the text from the line, but to save -it away for later use, usually by @dfn{yanking} 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. - -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 to 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. - -@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 - -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 in one clean sweep. 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. - -@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 @key{M--} @key{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 @key{M-1 0 C-d}. - - -@node Readline Init File -@section Readline Init File - -Although the Readline library comes with a set of @sc{gnu} Emacs-like -keybindings, 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{init} file in your home directory. The name of this -file is @file{~/.inputrc}. - -When a program which uses the Readline library starts up, the -@file{~/.inputrc} file is read, and the keybindings are set. - -In addition, the @key{C-x C-r} command re-reads this init file, thus -incorporating any changes that you might have made to it. - -@menu -* Readline Init Syntax:: Syntax for the commands in @file{~/.inputrc}. -* Readline vi Mode:: Switching to @code{vi} mode in Readline. -@end menu - -@node Readline Init Syntax -@subsection Readline Init Syntax - -There are only four constructs allowed in the @file{~/.inputrc} -file: - -@table @asis -@item Variable Settings -You can change the state of a few variables in Readline. You do this 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 iterate them here: - -@table @code - -@item editing-mode -@vindex editing-mode -The @code{editing-mode} variable controls which editing mode you are -using. By default, @sc{gnu} Readline starts up in Emacs editing mode, where -the keystrokes are most similar to Emacs. This variable can either be -set to @code{emacs} or @code{vi}. - -@item horizontal-scroll-mode -@vindex horizontal-scroll-mode -This variable can either be set to @code{On} or @code{Off}. Setting it -to @code{On} means that the text of the lines that you edit will scroll -horizontally on a single screen line when they are larger than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to @code{Off}. - -@item mark-modified-lines -@vindex mark-modified-lines -This variable when set to @code{On}, says to display an asterisk -(@samp{*}) at the starts of history lines which have been modified. -This variable is off by default. - -@item prefer-visible-bell -@vindex prefer-visible-bell -If this variable is set to @code{On} it means to use a visible bell if -one is available, rather than simply ringing the terminal bell. By -default, the value is @code{Off}. -@end table - -@item Key Bindings -The syntax for controlling keybindings in the @file{~/.inputrc} file is -simple. First you have to know the @i{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 @file{~/.inputrc} 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, @key{C-u} is bound to the function -@code{universal-argument}, and @key{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. Simply place the key sequence -in double quotes. @sc{gnu} Emacs style key escapes can be used, as in the -following example: - -@example -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -@end example - -In the above example, @key{C-u} is bound to the function -@code{universal-argument} (just as it was in the first example), -@key{C-x C-r} is bound to the function @code{re-read-init-file}, and -@key{ESC [ 1 1 ~} is bound to insert the text @samp{Function Key 1}. - -@end table -@end table - -@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. -* Miscellaneous Commands:: Other miscillaneous commands. -@end menu - -@need 2000 -@node Commands For Moving -@subsubsection Commands For Moving - -@ftable @code -@item beginning-of-line (@key{C-a}) -Move to the start of the current line. - -@item end-of-line (@key{C-e}) -Move to the end of the line. - -@item forward-char (@key{C-f}) -Move forward a character. - -@item backward-char (@key{C-b}) -Move back a character. - -@item forward-word (@key{M-f}) -Move forward to the end of the next word. - -@item backward-word (@key{M-b}) -Move back to the start of this, or the previous, word. - -@item clear-screen (@key{C-l}) -Clear the screen leaving the current line at the top of the screen. - -@end ftable - -@need 2000 -@node Commands For History -@subsubsection Commands For Manipulating The History - -@ftable @code -@item accept-line (Newline, Return) -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -@item previous-history (@key{C-p}) -Move `up' through the history list. - -@item next-history (@key{C-n}) -Move `down' through the history list. - -@item beginning-of-history (@key{M-<}) -Move to the first line in the history. - -@item end-of-history (@key{M->}) -Move to the end of the input history, i.e., the line you are entering. - -@item reverse-search-history (@key{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 (@key{C-s}) -Search forward starting at the current line and moving `down' through -the the history as necessary. - -@end ftable - -@need 2000 -@node Commands For Text -@subsubsection Commands For Changing Text - -@ftable @code -@item delete-char (@key{C-d}) -Delete the character under the cursor. If the cursor is at the -beginning of the line, and there are no characters in the line, and -the last character typed was not @key{C-d}, then return EOF. - -@item backward-delete-char (Rubout) -Delete the character behind the cursor. A numeric argument says to kill -the characters instead of deleting them. - -@item quoted-insert (@key{C-q}, @key{C-v}) -Add the next character that you type to the line verbatim. This is -how to insert things like @key{C-q} for example. - -@item tab-insert (@key{M-TAB}) -Insert a tab character. - -@item self-insert (a, b, A, 1, !, ...) -Insert yourself. - -@item transpose-chars (@key{C-t}) -Drag the character before point forward over the character at point. -Point moves forward as well. If point is at the end of the line, then -transpose the two characters before point. Negative arguments don't work. - -@item transpose-words (@key{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 (@key{M-u}) -Uppercase all letters in the current (or following) word. With a -negative argument, do the previous word, but do not move point. - -@item downcase-word (@key{M-l}) -Lowercase all letters in the current (or following) word. With a -negative argument, do the previous word, but do not move point. - -@item capitalize-word (@key{M-c}) -Uppercase the first letter in the current (or following) word. With a -negative argument, do the previous word, but do not move point. - -@end ftable - -@need 2000 -@node Commands For Killing -@subsubsection Killing And Yanking - -@ftable @code -@item kill-line (@key{C-k}) -Kill the text from the current cursor position to the end of the line. - -@item backward-kill-line () -Kill backward to the beginning of the line. This is normally unbound. - -@item kill-word (@key{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 backward-kill-word (@key{M-DEL}) -Kill the word behind the cursor. - -@item unix-line-discard (@key{C-u}) -Kill the whole line the way @key{C-u} used to in Unix line input. -The killed text is saved on the kill-ring. - -@item unix-word-rubout (@key{C-w}) -Kill the word the way @key{C-w} used to in Unix line input. -The killed text is saved on the kill-ring. This is different than -backward-kill-word because the word boundaries differ. - -@item yank (@key{C-y}) -Yank the top of the kill ring into the buffer at point. - -@item yank-pop (@key{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 - -@need 2000 -@node Numeric Arguments -@subsubsection Specifying Numeric Arguments - -@ftable @code - -@item digit-argument (@key{M-0}, @key{M-1}, ... @key{M--}) -Add this digit to the argument already accumulating, or start a new -argument. @key{M--} starts a negative argument. - -@item universal-argument () -Do what @key{C-u} does in @sc{gnu} Emacs. By default, this is not bound. -@end ftable - - -@need 2000 -@node Commands For Completion -@subsubsection Letting Readline Type For You - -@ftable @code -@item complete (TAB) -Attempt to do completion on the text before point. This is -implementation defined. 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. - -@item possible-completions (M-?) -List the possible completions of the text before point. -@end ftable - -@need 2000 -@node Miscellaneous Commands -@subsubsection Some Miscellaneous Commands - -@ftable @code - -@item re-read-init-file (@key{C-x} @key{C-r}) -Read in the contents of your @file{~/.inputrc} file, and incorporate -any bindings found there. - -@item abort (@key{C-g}) -Stop running the current editing command. - -@ignore -@c I have no idea what this means, and can't figure it out by -@c experiment, and can't find it in the readline source. -@c doc@cygnus.com, 20may1993. -@item do-uppercase-version (@key{M-a}, @key{M-b}, ...) -Run the command that is bound to your uppercase brother. -@end ignore - -@item prefix-meta (ESC) -Make the next character that you type be metafied. This is for people -without a meta key. Typing @key{ESC f} is equivalent to typing -@key{M-f}. - -@item undo (@key{C-_}) -Incremental undo, separately remembered for each line. - -@item revert-line (@key{M-r}) -Undo all changes made to this line. This is like typing the `undo' -command enough times to get back to the beginning. -@end ftable - -@need 2000 -@node Readline vi Mode -@subsection Readline @code{vi} Mode - -@cindex @code{vi} style command editing -@kindex toggle-editing-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. - -In order to switch interactively between @sc{gnu} Emacs and @code{vi} -editing modes, use the command @key{M-C-j} (toggle-editing-mode). - -When you enter a line in @code{vi} mode, you are already placed in `insertion' -mode, as if you had typed an `i'. Pressing @key{ESC} switches you into -`edit' mode, where you can edit the text of the line with the standard -@code{vi} movement keys, move to previous history lines with `k', and following -lines with `j', and so forth. - diff --git a/gnu/usr.bin/binutils/readline/emacs_keymap.c b/gnu/usr.bin/binutils/readline/emacs_keymap.c deleted file mode 100644 index ebaaeaddbd7..00000000000 --- a/gnu/usr.bin/binutils/readline/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, (Function *)0x0 }, /* 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, (Function *)0x0 }, /* 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 /* MEYMAP_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, (Function *)0x0 }, /* 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, (Function *)0x0 }, /* Meta-Control-[ */ - { ISFUNC, (Function *)0x0 }, /* Meta-Control-\ */ - { ISFUNC, (Function *)0x0 }, /* Meta-Control-] */ - { ISFUNC, (Function *)0x0 }, /* Meta-Control-^ */ - { ISFUNC, (Function *)0x0 }, /* Meta-Control-_ */ - - /* The start of printing characters. */ - { ISFUNC, (Function *)0x0 }, /* Meta-SPACE */ - { ISFUNC, (Function *)0x0 }, /* Meta-! */ - { ISFUNC, (Function *)0x0 }, /* Meta-" */ - { ISFUNC, (Function *)0x0 }, /* 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, (Function *)0x0 }, /* Meta-* */ - { ISFUNC, (Function *)0x0 }, /* Meta-+ */ - { ISFUNC, (Function *)0x0 }, /* Meta-, */ - { ISFUNC, rl_digit_argument }, /* Meta-- */ - { ISFUNC, (Function *)0x0 }, /* 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, (Function *)0x0 }, /* 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, rl_arrow_keys }, /* Meta-[ */ - { ISFUNC, rl_delete_horizontal_space }, /* Meta-\ */ - { ISFUNC, (Function *)0x0 }, /* Meta-] */ - { ISFUNC, (Function *)0x0 }, /* Meta-^ */ - { ISFUNC, (Function *)0x0 }, /* 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, rl_arrow_keys }, /* Meta-o */ - { 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, (Function *)0x0 }, /* 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, (Function *)0x0 }, /* 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/gnu/usr.bin/binutils/readline/examples/Inputrc b/gnu/usr.bin/binutils/readline/examples/Inputrc deleted file mode 100644 index db9510dd7b6..00000000000 --- a/gnu/usr.bin/binutils/readline/examples/Inputrc +++ /dev/null @@ -1,58 +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 - -# 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-?" -$endif - -" ": self-insert diff --git a/gnu/usr.bin/binutils/readline/examples/Makefile b/gnu/usr.bin/binutils/readline/examples/Makefile deleted file mode 100644 index 3d1fc527a62..00000000000 --- a/gnu/usr.bin/binutils/readline/examples/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# This is the Makefile for the examples subdirectory of readline. -*- text -*- -# - -EXECUTABLES = fileman -CFLAGS = -g -I../.. -LDFLAGS = -g -L.. - -fileman: fileman.o - $(CC) $(LDFLAGS) -o fileman fileman.o -lreadline -ltermcap - -fileman.o: fileman.c - diff --git a/gnu/usr.bin/binutils/readline/examples/configure.bat b/gnu/usr.bin/binutils/readline/examples/configure.bat deleted file mode 100644 index 41366ee34b0..00000000000 --- a/gnu/usr.bin/binutils/readline/examples/configure.bat +++ /dev/null @@ -1,16 +0,0 @@ -@echo off -if "%1" == "go32" goto h8300 -if "%1" == "h8/300" goto h8300 -echo Specify one of [ go32 h8/300 ] on command line -goto exit - -:go32 -echo Configuring readline/examples for go32 -copy Makefile.dos Makefile -goto exit - -:h8300 -echo Configuring readline/examples for H8/300 -copy Makefile.dos Makefile - -:exit diff --git a/gnu/usr.bin/binutils/readline/examples/fileman.c b/gnu/usr.bin/binutils/readline/examples/fileman.c deleted file mode 100644 index 0adc2a19e2f..00000000000 --- a/gnu/usr.bin/binutils/readline/examples/fileman.c +++ /dev/null @@ -1,445 +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 <readline/readline.h> -#include <readline/history.h> -#include <sys/types.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/errno.h> - -/* 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 } -}; - -/* 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 = 0; - -main (argc, argv) - int argc; - char **argv; -{ - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - while (!done) - { - char *line; - - line = readline ("FileMan: "); - - if (!line) - { - done = 1; /* Encountered EOF at top level. */ - } - else - { - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - stripwhite (line); - - if (*line) - { - add_history (line); - execute_line (line); - } - } - - if (line) - free (line); - } - exit (0); -} - -/* Execute a command line. */ -execute_line (line) - char *line; -{ - register int i; - COMMAND *find_command (), *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && !whitespace (line[i])) - i++; - - word = line; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return; - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - (*(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. */ -stripwhite (string) - char *string; -{ - register int i = 0; - - while (whitespace (string[i])) - i++; - - if (i) - strcpy (string, string + i); - - i = strlen (string) - 1; - - while (i > 0 && whitespace (string[i])) - i--; - - string[++i] = '\0'; -} - -/* **************************************************************** */ -/* */ -/* Interface to Readline 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 () -{ - char **fileman_completion (); - - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (Function *)fileman_completion; -} - -/* Attempt to complete on the contents of TEXT. START and END show the - region of TEXT that contains the word to complete. We can use the - entire line 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; - char *command_generator (); - - 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 (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 = "*"; - -#ifdef __GO32__ - sprintf (syscom, "ls -lp %s", arg); -#else - sprintf (syscom, "ls -FClg %s", arg); -#endif - system (syscom); -} - -com_view (arg) - char *arg; -{ - if (!valid_argument ("view", arg)) - return; - - sprintf (syscom, "cat %s | more", arg); - system (syscom); -} - -com_rename (arg) - char *arg; -{ - too_dangerous ("rename"); -} - -com_stat (arg) - char *arg; -{ - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return; - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return; - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d bytes in length.\n", arg, - finfo.st_nlink, (finfo.st_nlink == 1) ? "" : "s", finfo.st_size); - printf (" Created on: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf ("Last modified at: %s", ctime (&finfo.st_mtime)); -} - -com_delete (arg) - char *arg; -{ - too_dangerous ("delete"); -} - -/* 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"); - } -} - -/* Change to the directory ARG. */ -com_cd (arg) - char *arg; -{ - if (chdir (arg) == -1) - perror (arg); - - com_pwd (""); -} - -/* Print out the current working directory. */ -com_pwd (ignore) - char *ignore; -{ - char dir[1024]; - - (void) getwd (dir); - - printf ("Current directory is %s\n", dir); -} - -/* The user wishes to quit using this program. Just set DONE non-zero. */ -com_quit (arg) - char *arg; -{ - done = 1; -} - -/* 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); -} - - -/* - * Local variables: - * compile-command: "cc -g -I../.. -L.. -o fileman fileman.c -lreadline -ltermcap" - * end: - */ - -#ifdef __GO32__ -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -static void memory_error_and_abort (); - -char * -xmalloc (bytes) - int bytes; -{ - char *temp = (char *)malloc (bytes); - - if (!temp) - memory_error_and_abort (); - return (temp); -} - -char * -xrealloc (pointer, bytes) - char *pointer; - int bytes; -{ - char *temp; - - if (!pointer) - temp = (char *)xmalloc (bytes); - else - temp = (char *)realloc (pointer, bytes); - - if (!temp) - memory_error_and_abort (); - - return (temp); -} - -static void -memory_error_and_abort () -{ - fprintf (stderr, "xmalloc: Out of virtual memory!\n"); - abort (); -} -#endif diff --git a/gnu/usr.bin/binutils/readline/examples/manexamp.c b/gnu/usr.bin/binutils/readline/examples/manexamp.c deleted file mode 100644 index b7ec96a755b..00000000000 --- a/gnu/usr.bin/binutils/readline/examples/manexamp.c +++ /dev/null @@ -1,96 +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 * -do_gets () -{ - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read != (char *)NULL) - { - 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/gnu/usr.bin/binutils/readline/funmap.c b/gnu/usr.bin/binutils/readline/funmap.c deleted file mode 100644 index 62ba69c1b50..00000000000 --- a/gnu/usr.bin/binutils/readline/funmap.c +++ /dev/null @@ -1,278 +0,0 @@ -/* funmap.c -- attach names to functions. */ - -/* Copyright (C) 1988, 1989, 1991, 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. - - 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. */ - -/* #define STATIC_MALLOC */ -#if !defined (STATIC_MALLOC) -extern char *xmalloc (), *xrealloc (); -#else -static char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - -#include "sysdep.h" -#include <stdio.h> - -#include "readline.h" - -FUNMAP **funmap = (FUNMAP **)NULL; -static int funmap_size = 0; -static int funmap_entry = 0; - -/* 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 }, - { "clear-screen", rl_clear_screen }, - { "complete", rl_complete }, - { "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 }, - { "end-kbd-macro", rl_end_kbd_macro }, - { "end-of-history", rl_end_of_history }, - { "end-of-line", rl_end_of_line }, - { "forward-char", rl_forward }, - { "forward-search-history", rl_forward_search_history }, - { "forward-word", rl_forward_word }, - { "insert-completions", rl_insert_completions }, - { "kill-line", rl_kill_line }, - { "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 }, - { "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 }, - { "start-kbd-macro", rl_start_kbd_macro }, - { "tab-insert", rl_tab_insert }, - { "transpose-chars", rl_transpose_chars }, - { "transpose-words", rl_transpose_words }, - { "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-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-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-comment", rl_vi_comment }, - { "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-first-print", rl_vi_first_print }, - { "vi-fword", rl_vi_fword }, - { "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-replace", rl_vi_replace }, - { "vi-search", rl_vi_search }, - { "vi-search-again", rl_vi_search_again }, - { "vi-subst", rl_vi_subst }, - { "vi-yank-arg", rl_vi_yank_arg }, - { "vi-yank-to", rl_vi_yank_to }, - -#endif /* VI_MODE */ - - {(char *)NULL, (Function *)NULL } -}; - -rl_add_funmap_entry (name, function) - char *name; - Function *function; -{ - if (funmap_entry + 2 >= funmap_size) - if (!funmap) - funmap = (FUNMAP **)xmalloc ((funmap_size = 80) * sizeof (FUNMAP *)); - else - funmap = - (FUNMAP **)xrealloc (funmap, (funmap_size += 80) * sizeof (FUNMAP *)); - - funmap[funmap_entry] = (FUNMAP *)xmalloc (sizeof (FUNMAP)); - funmap[funmap_entry]->name = name; - funmap[funmap_entry]->function = function; - - funmap[++funmap_entry] = (FUNMAP *)NULL; -} - -static int funmap_initialized = 0; - -/* 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; -} - -/* Stupid comparison routine for qsort () ing strings. */ -static int -qsort_string_compare (s1, s2) - register char **s1, **s2; -{ - int r; - - r = **s1 - **s2; - if (r == 0) - r = strcmp (*s1, *s2); - return r; -} - -/* 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 = (char **)NULL; - int result_size, result_index; - - result_size = result_index = 0; - - /* Make sure that the function map has been initialized. */ - rl_initialize_funmap (); - - for (result_index = 0; funmap[result_index]; result_index++) - { - if (result_index + 2 > result_size) - { - if (!result) - result = (char **)xmalloc ((result_size = 20) * sizeof (char *)); - else - result = (char **) - xrealloc (result, (result_size += 20) * sizeof (char *)); - } - - result[result_index] = funmap[result_index]->name; - result[result_index + 1] = (char *)NULL; - } - - qsort (result, result_index, sizeof (char *), 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 -}; - -#if defined (STATIC_MALLOC) - -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -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, "history: Out of virtual memory!\n"); - abort (); -} -#endif /* STATIC_MALLOC */ diff --git a/gnu/usr.bin/binutils/readline/history.c b/gnu/usr.bin/binutils/readline/history.c deleted file mode 100644 index 64a2140374f..00000000000 --- a/gnu/usr.bin/binutils/readline/history.c +++ /dev/null @@ -1,1852 +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. */ - -/* Remove these declarations when we have a complete libgnu.a. */ -#if !defined (STATIC_MALLOC) -extern char *xmalloc (), *xrealloc (); -#else -static char *xmalloc (), *xrealloc (); -#endif - -#include "sysdep.h" -#include <stdio.h> -#include <errno.h> - -/* Not all systems declare ERRNO in errno.h... and some systems #define it! */ -#if !defined (errno) -extern int errno; -#endif /* !errno */ - -extern char *getenv(); - -#include <sys/stat.h> -#include <fcntl.h> - -#include "history.h" - -#include "rldefs.h" - -#include "chardefs.h" - -#ifndef whitespace -#define whitespace(c) (((c) == ' ') || ((c) == '\t')) -#endif - -#ifndef digit -#define digit(c) ((c) >= '0' && (c) <= '9') -#endif - -#ifndef member -#define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0) -#endif - -static char error_pointer; - -static char *get_history_word_specifier (); - -/* **************************************************************** */ -/* */ -/* 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. */ -int history_stifled = 0; - -/* 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. */ -static int history_offset = 0; - -/* The number of strings currently stored in the input_history list. */ -int history_length = 0; - -/* The current number of slots allocated to the input_history. */ -static int history_size = 0; - -/* The number of slots to increase the_history by. */ -#define DEFAULT_HISTORY_GROW_SIZE 50 - -/* 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="; - -/* 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; - - 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; -} - -/* 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); -} - -/* 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) - return; - - /* If there is something in the slot, then remove it. */ - if (the_history[0]) - { - free (the_history[0]->line); - free (the_history[0]); - } - - for (i = 0; i < history_length; i++) - the_history[i] = the_history[i + 1]; - - history_base++; - - } - else - { - if (!history_size) - { - the_history = (HIST_ENTRY **) - xmalloc ((history_size = DEFAULT_HISTORY_GROW_SIZE) - * sizeof (HIST_ENTRY *)); - history_length = 1; - - } - else - { - if (history_length == (history_size - 1)) - { - the_history = (HIST_ENTRY **) - xrealloc (the_history, - ((history_size += DEFAULT_HISTORY_GROW_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); -} - -/* 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); -} - -/* 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. */ - -#define ANCHORED_SEARCH 1 -#define NON_ANCHORED_SEARCH 0 - -static int -history_search_internal (string, direction, anchored) - char *string; - int direction, anchored; -{ - register int i = history_offset; - register int reverse = (direction < 0); - register char *line; - register int index; - int string_len = strlen (string); - - /* Take care of trivial cases first. */ - - if (!history_length || ((i == history_length) && !reverse)) - return (-1); - - if (reverse && (i == history_length)) - i--; - - 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; - index = strlen (line); - - /* If STRING is longer than line, no match. */ - if (string_len > index) - goto next_line; - - /* Handle anchored searches first. */ - if (anchored == ANCHORED_SEARCH) - { - if (strncmp (string, line, string_len) == 0) - { - history_offset = i; - return (0); - } - - goto next_line; - } - - /* Do substring search. */ - if (reverse) - { - index -= string_len; - - while (index >= 0) - { - if (strncmp (string, line + index, string_len) == 0) - { - history_offset = i; - return (index); - } - index--; - } - } - else - { - register int limit = index - string_len + 1; - index = 0; - - while (index < limit) - { - if (strncmp (string, line + index, string_len) == 0) - { - history_offset = i; - return (index); - } - index++; - } - } - next_line: - if (reverse) - i--; - else - i++; - } -} - -/* 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)); -} - -/* 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; i < (history_length - max); 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 () -{ - int result = max_input_history; - - if (history_stifled) - { - result = -result; - history_stifled = 0; - } - - return (result); -} - -/* 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 = filename ? savestring (filename) : (char *)NULL; - - if (!return_val) - { - char *home; - - home = getenv ("HOME"); - - if (!home) - return (NULL); - - return_val = (char *)xmalloc (2 + strlen (home) + strlen (".history")); - - sprintf (return_val, "%s/.history", home); - } - - 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; - - if ((input = history_filename (filename))) - file = open (input, O_RDONLY, 0666); - else - file = -1; - - if ((file < 0) || - (stat (input, &finfo) == -1)) - goto error_and_exit; - - buffer = (char *)xmalloc ((int)finfo.st_size + 1); - - if (read (file, buffer, finfo.st_size) != finfo.st_size) - error_and_exit: - { - if (file >= 0) - close (file); - - if (input) - free (input); - - if (buffer) - 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; - } - - if (input) - free (input); - - if (buffer) - 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); - if (!filename || stat (filename, &finfo) == -1) - goto truncate_exit; - - file = open (filename, O_RDONLY, 0666); - - if (file == -1) - goto truncate_exit; - - buffer = (char *)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 there are fewer lines in the file than we want to truncate to, - then we are all done. */ - if (!i) - goto truncate_exit; - - /* Otherwise, write from the start of this line until the end of the - buffer. */ - for (--i; i; i--) - if (buffer[i] == '\n') - { - i++; - break; - } - - file = open (filename, O_WRONLY | O_TRUNC | O_CREAT, 0666); - if (file == -1) - goto truncate_exit; - - write (file, buffer + i, finfo.st_size - i); - close (file); - - truncate_exit: - if (buffer) - free (buffer); - - free (filename); - return 0; -} - -#define HISTORY_APPEND 0 -#define HISTORY_OVERWRITE 1 - -/* 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; - - if (overwrite) - mode = O_WRONLY | O_CREAT | O_TRUNC; - else - mode = O_WRONLY | O_APPEND; - - if (!output || (file = open (output, mode, 0666)) == -1) - { - if (output) - 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). */ - { - register int j = 0; - int buffer_size = 0; - char *buffer; - - /* Calculate the total number of bytes to write. */ - for (i = history_length - nelements; i < history_length; i++) - buffer_size += 1 + strlen (the_history[i]->line); - - /* Allocate the buffer, and fill it. */ - buffer = (char *)xmalloc (buffer_size); - - for (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); - - if (output) - 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)); -} - -/* 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 () -{ - if ((history_offset == history_length) || !the_history) - return ((HIST_ENTRY *)NULL); - else - return (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 () -{ - if (!history_offset) - return ((HIST_ENTRY *)NULL); - else - return (the_history[--history_offset]); -} - -/* 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 () -{ - if (history_offset == history_length) - return ((HIST_ENTRY *)NULL); - else - return (the_history[++history_offset]); -} - -/* 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 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 = offset - history_base; - - if (local_index >= history_length || - local_index < 0 || - !the_history) - return ((HIST_ENTRY *)NULL); - return (the_history[local_index]); -} - -/* 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 = 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; -} - -/* 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); -} - - -/* **************************************************************** */ -/* */ -/* 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 in a !?string? search. */ -static char *search_string = (char *)NULL; - -/* 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 = *caller_index; - int which, sign = 1; - HIST_ENTRY *entry; - - /* 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. */ - - if (string[i] != history_expansion_char) - return ((char *)NULL); - - /* Move on to the specification. */ - i++; - - /* Handle !! case. */ - if (string[i] == history_expansion_char) - { - i++; - which = history_base + (history_length - 1); - *caller_index = i; - goto get_which; - } - - /* Hack case of numeric line specification. */ - if (string[i] == '-') - { - sign = -1; - i++; - } - - if (digit (string[i])) - { - int start = i; - - /* Get the extent of the digits. */ - for (; digit (string[i]); i++); - - /* Get the digit value. */ - sscanf (string + start, "%d", &which); - - *caller_index = i; - - if (sign < 0) - which = (history_length + history_base) - which; - - get_which: - if (entry = history_get (which)) - return (entry->line); - - return ((char *)NULL); - } - - /* 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. */ - { - int local_index; - char *temp; - int substring_okay = 0; - - if (string[i] == '?') - { - substring_okay++; - i++; - } - - for (local_index = i; string[i]; i++) - if (whitespace (string[i]) || - string[i] == '\n' || - string[i] == ':' || - (substring_okay && string[i] == '?') || -#if defined (SHELL) - member (string[i], ";&()|<>") || -#endif /* SHELL */ - string[i] == delimiting_quote) - break; - - temp = (char *)alloca (1 + (i - local_index)); - strncpy (temp, &string[local_index], (i - local_index)); - temp[i - local_index] = '\0'; - - if (string[i] == '?') - i++; - - *caller_index = i; - - search_again: - - local_index = history_search_internal - (temp, -1, substring_okay ? NON_ANCHORED_SEARCH : ANCHORED_SEARCH); - - if (local_index < 0) - search_lost: - { - history_offset = history_length; - return ((char *)NULL); - } - - 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) - { - if (search_string) - free (search_string); - search_string = savestring (temp); - } - - return (entry->line); - } - - if (history_offset) - history_offset--; - else - goto search_lost; - - goto search_again; - } -} - -#if defined (SHELL) -/* 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 -rl_string_extract_single_quoted (string, sindex) - char *string; - int *sindex; -{ - register int i = *sindex; - - while (string[i] && string[i] != '\'') - i++; - - *sindex = i; -} -#endif /* SHELL */ - -/* 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. - - If an error ocurred in expansion, then OUTPUT contains a descriptive - error message. */ -int -history_expand (string, output) - char *string; - char **output; -{ - register int j, l = strlen (string); - int i, word_spec_error = 0; - int cc, modified = 0; - char *word_spec, *event; - int starting_index, only_printing = 0, substitute_globally = 0; - - /* The output string, and its length. */ - int len = 0; - char *result = (char *)NULL; - - /* Used in add_string; */ - char *temp, tt[2], tbl[3]; - - /* Prepare the buffer for printing error messages. */ - result = (char *)xmalloc (len = 256); - - result[0] = tt[1] = tbl[2] = '\0'; - tbl[0] = '\\'; - tbl[1] = history_expansion_char; - - /* 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 (string[0] == history_subst_char) - { - char *format_string = (char *)alloca (10 + strlen (string)); - - sprintf (format_string, "%c%c:s%s", - history_expansion_char, history_expansion_char, - string); - string = format_string; - l += 4; - goto grovel; - } - - /* 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++) - { - if (string[i] == history_expansion_char) - { - if (!string[i + 1] || member (string[i + 1], 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)) - continue; -#endif /* SHELL */ - else - goto grovel; - } -#if defined (SHELL) - else if (string[i] == '\'') - { - /* If this is bash, single quotes inhibit history expansion. */ - i++; - rl_string_extract_single_quoted (string, &i); - } - else if (string[i] == '\\') - { - /* If this is bash, allow backslashes to quote single quotes and - the history expansion character. */ - if (string[i + 1] == '\'' || (string[i + 1] == history_expansion_char)) - i++; - } -#endif /* SHELL */ - } - - - free (result); - *output = savestring (string); - return (0); - - grovel: - - for (i = j = 0; i < l; i++) - { - int passc = 0; - int tchar = string[i]; - - if (tchar == history_expansion_char) - tchar = -3; - - if (passc) - { - passc = 0; - goto add_char; - } - - switch (tchar) - { - case '\\': - if (string[i + 1] == history_expansion_char) - { - i++; - temp = tbl; - goto do_add; - } - else - { - passc++; - goto add_char; - } - -#if defined (SHELL) - case '\'': - { - /* If this is bash, single quotes inhibit history expansion. */ - int quote = i, slen; - - ++i; - rl_string_extract_single_quoted (string, &i); - - slen = i - quote + 2; - temp = (char *)alloca (slen); - strncpy (temp, string + quote, slen); - temp[slen - 1] = '\0'; - goto do_add; - } -#endif /* SHELL */ - - /* case history_expansion_char: */ - case -3: - starting_index = i + 1; - 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)) - goto add_char; - - /* 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 (cc == '#') - goto hack_pound_sign; - - /* If it is followed by something that starts a word specifier, - then !! is implied as the event specifier. */ - - if (member (cc, ":$*%^")) - { - 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 - { - 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) - event_not_found: - { - int ll = 1 + (i - starting_index); - - temp = (char *)alloca (1 + ll); - strncpy (temp, string + starting_index, ll); - temp[ll - 1] = 0; - sprintf (result, "%s: %s.", temp, - word_spec_error ? "Bad word specifier" : "Event not found"); - *output = 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) - { - word_spec_error++; - goto event_not_found; - } - - /* If no word specifier, than the thing of interest was the event. */ - if (!word_spec) - temp = event; - else - { - temp = (char *)alloca (1 + strlen (word_spec)); - strcpy (temp, word_spec); - free (word_spec); - } - - /* Perhaps there are other modifiers involved. Do what they say. */ - - hack_specials: - - if (string[i] == ':') - { - char *tstr; - - switch (string[i + 1]) - { - /* :p means make this the last executed line. So we - return an error state after adding this line to the - history. */ - case 'p': - only_printing++; - goto next_special; - - /* :t discards all but the last part of the pathname. */ - case 't': - tstr = strrchr (temp, '/'); - if (tstr) - temp = ++tstr; - goto next_special; - - /* :h discards the last part of a pathname. */ - case 'h': - tstr = strrchr (temp, '/'); - if (tstr) - *tstr = '\0'; - goto next_special; - - /* :r discards the suffix. */ - case 'r': - tstr = strrchr (temp, '.'); - if (tstr) - *tstr = '\0'; - goto next_special; - - /* :e discards everything but the suffix. */ - case 'e': - tstr = strrchr (temp, '.'); - if (tstr) - temp = tstr; - goto next_special; - - /* :s/this/that substitutes `this' for `that'. */ - /* :gs/this/that substitutes `this' for `that' globally. */ - case 'g': -#ifdef NOTYET - /* :g/this/that is equivalent to :gs/this/that */ - substitute_globally = 1; - if (string[i + 2] == 's') - i++; -#else - if (string[i + 2] == 's') - { - i++; - substitute_globally = 1; - goto substitute; - } -#endif - else - - case 's': - substitute: - { - char *this, *that, *new_event; - int delimiter = 0; - int si, l_this, l_that, l_temp = strlen (temp); - - if (i + 2 < (int)strlen (string)) - delimiter = string[i + 2]; - - if (!delimiter) - break; - - i += 3; - - /* Get THIS. */ - for (si = i; string[si] && string[si] != delimiter; si++); - l_this = (si - i); - this = (char *)alloca (1 + l_this); - strncpy (this, string + i, l_this); - this[l_this] = '\0'; - - i = si; - if (string[si]) - i++; - - /* Get THAT. */ - for (si = i; string[si] && string[si] != delimiter; si++); - l_that = (si - i); - that = (char *)alloca (1 + l_that); - strncpy (that, string + i, l_that); - that[l_that] = '\0'; - - i = si; - if (string[si]) i++; - - /* Ignore impossible cases. */ - if (l_this > l_temp) - goto cant_substitute; - - /* Find the first occurrence of THIS in TEMP. */ - si = 0; - for (; (si + l_this) <= l_temp; si++) - if (strncmp (temp + si, this, l_this) == 0) - { - new_event = - (char *)alloca (1 + (l_that - l_this) + l_temp); - strncpy (new_event, temp, si); - strncpy (new_event + si, that, l_that); - strncpy (new_event + si + l_that, - temp + si + l_this, - l_temp - (si + l_this)); - new_event[(l_that - l_this) + l_temp] = '\0'; - temp = new_event; - - if (substitute_globally) - { - si += l_that; - l_temp = strlen (temp); - substitute_globally++; - continue; - } - - goto hack_specials; - } - - cant_substitute: - - if (substitute_globally > 1) - { - substitute_globally = 0; - goto hack_specials; - } - - goto event_not_found; - } - - /* :# is the line so far. Note that we have to - alloca () it since RESULT could be realloc ()'ed - below in add_string. */ - case '#': - hack_pound_sign: - if (result) - { - temp = (char *)alloca (1 + strlen (result)); - strcpy (temp, result); - } - else - temp = ""; - - next_special: - i += 2; - goto hack_specials; - } - - } - /* Believe it or not, we have to back the pointer up by one. */ - --i; - goto add_string; - - /* A regular character. Just add it to the output string. */ - default: - add_char: - tt[0] = string[i]; - temp = tt; - goto do_add; - - add_string: - modified++; - - do_add: - j += strlen (temp); - while (j > (len - 1)) - result = (char *)xrealloc (result, (len += 256)); - - strcpy (result + (j - strlen (temp)), temp); - } - } - - *output = result; - - if (only_printing) - { - add_history (result); - return (-1); - } - - 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 *history_arg_extract (); - - /* The range of words to return doesn't exist yet. */ - first = last = 0; - - /* 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; - if (search_string) - return (savestring (search_string)); - else - return (savestring ("")); - } - - /* `*' matches all of the arguments, but not the command. */ - if (spec[i] == '*') - { - char *star_result; - - *caller_index = i + 1; - star_result = history_arg_extract (1, '$', from); - - if (!star_result) - star_result = savestring (""); - - return (star_result); - } - - /* `$' 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] == '-' || spec[i] == '^') - { - first = 1; - goto get_last; - } - - if (digit (spec[i]) && expecting_word_spec) - { - sscanf (spec + i, "%d", &first); - for (; digit (spec[i]); i++); - } - else - return ((char *)NULL); - - get_last: - if (spec[i] == '^') - { - i++; - last = 1; - goto get_args; - } - - if (spec[i] != '-') - { - last = first; - goto get_args; - } - - i++; - - if (digit (spec[i])) - { - sscanf (spec + i, "%d", &last); - for (; digit (spec[i]); i++); - } - else - if (spec[i] == '$') - { - i++; - last = '$'; - } - - get_args: - { - char *result = (char *)NULL; - - *caller_index = i; - - if (last >= first) - result = history_arg_extract (first, last, from); - - if (result) - return (result); - else - return ((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). */ -char * -history_arg_extract (first, last, string) - int first, last; - char *string; -{ - register int i, len; - char *result = (char *)NULL; - int size = 0, offset = 0; - - char **history_tokenize (), **list; - - if (!(list = history_tokenize (string))) - 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) - result = ((char *)NULL); - else - { - for (i = first; i < last; i++) - { - int l = strlen (list[i]); - - if (!result) - result = (char *)xmalloc ((size = (2 + l))); - else - result = (char *)xrealloc (result, (size += (2 + l))); - strcpy (result + offset, list[i]); - offset += l; - if (i + 1 < last) - { - strcpy (result + offset, " "); - offset++; - } - } - } - - for (i = 0; i < len; i++) - free (list[i]); - - free (list); - - return (result); -} - -#define slashify_in_quotes "\\`\"$" - -/* Return an array of tokens, much as the shell might. The tokens are - parsed out of STRING. */ -char ** -history_tokenize (string) - char *string; -{ - char **result = (char **)NULL; - register int i, start, result_index, size; - int len; - - i = result_index = size = 0; - - /* Get a token, and stuff it into RESULT. The tokens are split - exactly where the shell would split them. */ - get_token: - - /* Skip leading whitespace. */ - for (; string[i] && whitespace(string[i]); i++); - - start = i; - - if (!string[i] || string[i] == history_comment_char) - return (result); - - 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; */ - { - int delimiter = 0; - - if (member (string[i], "\"'`")) - delimiter = string[i++]; - - for (;string[i]; i++) - { - if (string[i] == '\\') - { - if (string[i + 1] == '\n') - { - i++; - continue; - } - else - { - if (delimiter != '\'') - if ((delimiter != '"') || - (member (string[i], slashify_in_quotes))) - { - i++; - continue; - } - } - } - - if (delimiter && string[i] == delimiter) - { - delimiter = 0; - continue; - } - - if (!delimiter && (member (string[i], " \t\n;&()|<>"))) - goto got_token; - - if (!delimiter && member (string[i], "\"'`")) - { - delimiter = string[i]; - continue; - } - } - got_token: - - len = i - start; - if (result_index + 2 >= size) - { - if (!size) - result = (char **)xmalloc ((size = 10) * (sizeof (char *))); - else - result = - (char **)xrealloc (result, ((size += 10) * (sizeof (char *)))); - } - result[result_index] = (char *)xmalloc (1 + len); - strncpy (result[result_index], string + start, len); - result[result_index][len] = '\0'; - result_index++; - result[result_index] = (char *)NULL; - } - if (string[i]) - goto get_token; - - return (result); -} - -#if defined (STATIC_MALLOC) - -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -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 *)xmalloc (bytes); - else - temp = (char *)realloc (pointer, bytes); - - if (!temp) - memory_error_and_abort (); - - return (temp); -} - -static void -memory_error_and_abort () -{ - fprintf (stderr, "history: Out of virtual memory!\n"); - abort (); -} -#endif /* STATIC_MALLOC */ - -/* **************************************************************** */ -/* */ -/* Test Code */ -/* */ -/* **************************************************************** */ -#ifdef TEST -main () -{ - char line[1024], *t; - int done = 0; - - line[0] = 0; - - while (!done) - { - fprintf (stdout, "history%% "); - t = gets (line); - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - using_history (); - - result = history_expand (line, &expansion); - strcpy (line, expansion); - free (expansion); - if (result) - fprintf (stderr, "%s\n", line); - - if (result < 0) - continue; - - add_history (line); - } - - if (strcmp (line, "quit") == 0) done = 1; - if (strcmp (line, "save") == 0) write_history (0); - if (strcmp (line, "read") == 0) read_history (0); - if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list = history_list (); - register int i; - - if (the_list) - for (i = 0; the_list[i]; i++) - fprintf (stdout, "%d: %s\n", i + history_base, the_list[i]->line); - } - if (strncmp (line, "delete", strlen ("delete")) == 0) - { - int which; - if ((sscanf (line + strlen ("delete"), "%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"); - } - } - } -} - -#endif /* TEST */ - -/* -* Local variables: -* compile-command: "gcc -g -DTEST -o history history.c" -* end: -*/ diff --git a/gnu/usr.bin/binutils/readline/history.h b/gnu/usr.bin/binutils/readline/history.h deleted file mode 100644 index d941a315a3e..00000000000 --- a/gnu/usr.bin/binutils/readline/history.h +++ /dev/null @@ -1,135 +0,0 @@ -/* History.h -- the names of functions that you can call in history. */ - -/* The structure used to store a history entry. */ -typedef struct { - char *line; - char *data; -} HIST_ENTRY; - -/* A structure used to pass the current state of the history stuff around. */ -typedef struct _hist_entry { - 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. */ -} HISTORY_STATE; - -/* For convenience only. You set this when interpreting history commands. - It is the logical offset of the first history element. */ -extern int history_base; - -/* 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 (); - -/* Place STRING at the end of the history list. - The associated data field (if any) is set to NULL. */ -extern void add_history (); - -/* Returns the number which says what history element we are now - looking at. */ -extern int where_history (); - -/* Set the position in the history list to POS. */ -int history_set_pos (); - -/* 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 (); - -/* 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 (); - -/* 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 (); - -/* 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 (); - -/* Append the current history to FILENAME. If FILENAME is NULL, - then append 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 (); - -/* 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 (); - -/* 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 (); - -/* 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 (); - -/* 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 (); - -/* 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 (); - -/* 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. - - 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 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 (); diff --git a/gnu/usr.bin/binutils/readline/isearch.c b/gnu/usr.bin/binutils/readline/isearch.c deleted file mode 100644 index 89468a68e2d..00000000000 --- a/gnu/usr.bin/binutils/readline/isearch.c +++ /dev/null @@ -1,380 +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. */ - -/* For alloca on AIX. CYGNUS LOCAL. */ -#include "sysdep.h" - -#include <stdio.h> - -#if defined (__GNUC__) -# define alloca __builtin_alloca -#else -# if defined (sparc) || defined (HAVE_ALLOCA_H) -# include <alloca.h> -# endif -#endif - -#include "readline.h" -#include "history.h" - -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_prompt, *rl_line_buffer; - -/* Remove these declarations when we have a complete libgnu.a. */ -extern char *xmalloc (), *xrealloc (); - -static void rl_search_history (); - -/* Search backwards through the history looking for a string which is typed - interactively. Start with the current line. */ -rl_reverse_search_history (sign, key) - int sign; - int key; -{ - rl_search_history (-sign, key); -} - -/* Search forwards through the history looking for a string which is typed - interactively. Start with the current line. */ -rl_forward_search_history (sign, key) - int sign; - int key; -{ - 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 = (char *)NULL; - - message = - (char *)xmalloc (1 + (search_string ? strlen (search_string) : 0) + 30); - - *message = '\0'; - -#if defined (NOTDEF) - if (where != -1) - sprintf (message, "[%d]", where + history_base); -#endif /* NOTDEF */ - - strcat (message, "("); - - if (reverse_p) - strcat (message, "reverse-"); - - strcat (message, "i-search)`"); - - if (search_string) - strcat (message, search_string); - - strcat (message, "': "); - rl_message ("%s", message, 0); - free (message); - rl_redisplay (); -} - -/* 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 void -rl_search_history (direction, invoking_key) - int direction; - int 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; - - /* The length of LINES. */ - int hlen; - - /* Where we get LINES from. */ - HIST_ENTRY **hlist = history_list (); - - register int i = 0; - int orig_point = rl_point; - int orig_line = where_history (); - int last_found_line = orig_line; - int c, done = 0; - - /* The line currently being searched. */ - char *sline; - - /* Offset in that line. */ - int index; - - /* Non-zero if we are doing a reverse search. */ - int reverse = (direction < 0); - - /* Create an arrary of pointers to the lines that we want to search. */ - maybe_replace_line (); - 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 **)alloca ((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 - /* So I have to type it in this way instead. */ - { - char *alloced_line; - - /* Keep that MIPS alloca () happy. */ - alloced_line = (char *)alloca (1 + strlen (rl_line_buffer)); - lines[i] = alloced_line; - strcpy (lines[i], &rl_line_buffer[0]); - } - - hlen++; - - /* The line where we start the search. */ - i = orig_line; - - /* Initialize search parameters. */ - search_string = (char *)xmalloc (search_string_size = 128); - *search_string = '\0'; - search_string_index = 0; - - /* Normalize DIRECTION into 1 or -1. */ - if (direction >= 0) - direction = 1; - else - direction = -1; - - rl_display_search (search_string, reverse, -1); - - sline = rl_line_buffer; - index = rl_point; - - while (!done) - { - c = rl_read_key (); - - /* Hack C to Do What I Mean. */ - { - Function *f = (Function *)NULL; - - 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; - } - } - - switch (c) - { - case ESC: - done = 1; - continue; - - /* case invoking_key: */ - case -1: - goto search_again; - - /* switch directions */ - case -2: - direction = -direction; - reverse = (direction < 0); - - goto do_search; - - case CTRL ('G'): - strcpy (rl_line_buffer, lines[orig_line]); - rl_point = orig_point; - rl_end = strlen (rl_line_buffer); - rl_clear_message (); - return; - - default: - if (c < 32 || c > 126) - { - rl_execute_next (c); - done = 1; - continue; - } - else - { - if (search_string_index + 2 >= search_string_size) - search_string = (char *)xrealloc - (search_string, (search_string_size += 128)); - search_string[search_string_index++] = c; - search_string[search_string_index] = '\0'; - goto do_search; - - search_again: - - if (!search_string_index) - continue; - else - { - if (reverse) - --index; - else - if (index != strlen (sline)) - ++index; - else - ding (); - } - do_search: - - while (1) - { - if (reverse) - { - while (index >= 0) - if (strncmp - (search_string, sline + index, search_string_index) - == 0) - goto string_found; - else - index--; - } - else - { - register int limit = - (strlen (sline) - search_string_index) + 1; - - while (index < limit) - { - if (strncmp (search_string, - sline + index, - search_string_index) == 0) - goto string_found; - index++; - } - } - - next_line: - i += direction; - - /* At limit for direction? */ - if ((reverse && i < 0) || - (!reverse && i == hlen)) - goto search_failed; - - sline = lines[i]; - if (reverse) - index = strlen (sline); - else - index = 0; - - /* If the search string is longer than the current - line, no match. */ - if (search_string_index > (int)strlen (sline)) - goto next_line; - - /* Start actually searching. */ - if (reverse) - index -= search_string_index; - } - - search_failed: - /* We cannot find the search string. Ding the bell. */ - ding (); - i = last_found_line; - break; - - string_found: - /* 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. */ - { - int line_len; - - 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 = 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 - INDEX is -1, then that shows that the string searched for was not - found. We use this to determine where to place rl_point. */ - { - int now = last_found_line; - - /* First put back the original state. */ - strcpy (rl_line_buffer, lines[orig_line]); - - /* Free the search string. */ - free (search_string); - - if (now < orig_line) - rl_get_previous_history (orig_line - now); - else - rl_get_next_history (now - orig_line); - - /* If the index of the "matched" string is less than zero, then the - final search string was never matched, so put point somewhere - reasonable. */ - if (index < 0) - index = strlen (rl_line_buffer); - - rl_point = index; - rl_clear_message (); - } -} diff --git a/gnu/usr.bin/binutils/readline/keymaps.c b/gnu/usr.bin/binutils/readline/keymaps.c deleted file mode 100644 index 35fa2cacc58..00000000000 --- a/gnu/usr.bin/binutils/readline/keymaps.c +++ /dev/null @@ -1,190 +0,0 @@ -/* keymaps.c -- Functions and keymaps for the GNU Readline library. */ - -/* Copyright (C) 1988, 1989, 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 2 of the License, or - (at your option) any later version. - - Readline is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "sysdep.h" -#include <stdio.h> -#include "readline.h" -#include "keymaps.h" -#include "emacs_keymap.c" - -#ifdef VI_MODE -#include "vi_keymap.c" -#endif - -/* Remove these declarations when we have a complete libgnu.a. */ -/* #define STATIC_MALLOC */ -#if !defined (STATIC_MALLOC) -extern char *xmalloc (), *xrealloc (); -#else -static char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - -/* **************************************************************** */ -/* */ -/* 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 () -{ - extern int rl_insert (), rl_rubout (); - register int i; - Keymap newmap; - - newmap = rl_make_bare_keymap (); - - /* All ASCII printing characters are self-inserting. */ - for (i = ' '; i < 126; i++) - newmap[i].function = rl_insert; - - newmap[TAB].function = rl_insert; - newmap[RUBOUT].function = rl_rubout; - 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. */ -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; - } - } -} - -#if defined (STATIC_MALLOC) - -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -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 (); -} -#endif /* STATIC_MALLOC */ diff --git a/gnu/usr.bin/binutils/readline/keymaps.h b/gnu/usr.bin/binutils/readline/keymaps.h deleted file mode 100644 index 7d7948fe4e7..00000000000 --- a/gnu/usr.bin/binutils/readline/keymaps.h +++ /dev/null @@ -1,91 +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_ - -/* CYGNUS LOCAL--bash 1.13 uses <readline/chardefs.h> which would require - GDB to add YET ANOTHER -I directive. No thanks. */ -#include "chardefs.h" - -#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. */ -Keymap rl_make_bare_keymap (); - -/* Return a new keymap which is a copy of MAP. */ -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. */ -Keymap rl_make_keymap (); - -/* Return the keymap corresponding to a given name. Names look like - `emacs' or `emacs-meta' or `vi-insert'. */ -Keymap rl_get_keymap_by_name (); - -/* Return the current keymap. */ -Keymap rl_get_keymap (); - -/* Set the current keymap to MAP. */ -void rl_set_keymap (); - -#endif /* _KEYMAPS_H_ */ diff --git a/gnu/usr.bin/binutils/readline/parens.c b/gnu/usr.bin/binutils/readline/parens.c deleted file mode 100644 index 5bc355653fd..00000000000 --- a/gnu/usr.bin/binutils/readline/parens.c +++ /dev/null @@ -1,122 +0,0 @@ -/* parens.c -- Implemenation of matching parenthesis 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. */ - -#include <stdio.h> -#include <sys/types.h> - -#if defined(__GO32__) || defined(_WIN32) -#undef FD_SET -#endif - -#if defined (FD_SET) -#include <sys/time.h> -#endif -#include "readline.h" - -/* Non-zero means try to blink the matching open parenthesis when the - close parenthesis is inserted. */ -#if defined (FD_SET) -int rl_blink_matching_paren = 1; -#else /* !FD_SET */ -int rl_blink_matching_paren = 0; -#endif /* !FD_SET */ - -static int find_matching_open (); - -rl_insert_close (count, invoking_key) - int count, invoking_key; -{ - extern int rl_explicit_arg; - - if (rl_explicit_arg || !rl_blink_matching_paren) - rl_insert (count, invoking_key); - else - { -#if defined (FD_SET) && !defined(__GO32__) - int orig_point, match_point, ready; - struct timeval timer; - fd_set readfds; - - rl_insert (1, invoking_key); - rl_redisplay (); - 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; - - 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 (); - ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer); - rl_point = orig_point; -#else /* !FD_SET */ - rl_insert (count, invoking_key); -#endif /* !FD_SET */ - } -} - -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 ((string[i] == '\'') || (string[i] == '"')) - delimiter = rl_line_buffer[i]; - else if (!delimiter && (string[i] == closer)) - level++; - else if (!delimiter && (string[i] == opener)) - level--; - - if (!level) - break; - } - return (i); -} - - - diff --git a/gnu/usr.bin/binutils/readline/readline.c b/gnu/usr.bin/binutils/readline/readline.c deleted file mode 100644 index 0c17295c154..00000000000 --- a/gnu/usr.bin/binutils/readline/readline.c +++ /dev/null @@ -1,3292 +0,0 @@ -/* readline.c -- a general facility for reading lines of input - with emacs style editing and completion. */ - -/* Copyright 1987, 1989, 1991, 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. */ - -#include "sysdep.h" -#include <stdio.h> -#include <fcntl.h> -#include <signal.h> - -/* This is needed to include support for TIOCGWINSZ and window resizing. */ -#if defined (OSF1) || defined (BSD386) || defined (_386BSD) || defined (AIX) -# include <sys/ioctl.h> -#endif /* OSF1 */ - -#if defined (HAVE_UNISTD_H) -# include <unistd.h> -#endif - -#include <errno.h> -/* Not all systems declare ERRNO in errno.h... and some systems #define it! */ -#if !defined (errno) -extern int errno; -#endif /* !errno */ - -extern char * getenv (); - -#include <setjmp.h> -#include <sys/stat.h> - -/* System-specific feature definitions and include files. */ -#include "rldefs.h" - -/* Some standard library routines. */ -#include "readline.h" -#include "history.h" - -/* 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. */ - -/* Functions imported from other files in the library. */ -extern void rl_prep_terminal (), rl_deprep_terminal (); -extern void rl_vi_set_last (); -extern Function *rl_function_of_keyseq (); -extern char *tilde_expand (); - -/* External redisplay functions and variables from display.c */ -extern void rl_redisplay (); -extern void _rl_move_vert (); - -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_display_fixed; - -/* Variables imported from complete.c. */ -extern char *rl_completer_word_break_characters; -extern char *rl_basic_word_break_characters; -extern Function *rl_symbolic_link_hook; -extern int rl_completion_query_items; -extern int rl_complete_with_tilde_expansion; - -/* Forward declarations used in this file. */ -void rl_dispatch (); -void free_history_entry (); -int _rl_output_character_function (); - -#if !defined (MINIMAL) -void _rl_set_screen_size (); -#endif /* !MINIMAL */ - -void free_undo_list (), rl_add_undo (); - -#if !defined (MINIMAL) -static void readline_default_bindings (); -#endif /* !MINIMAL */ - -#if defined (__GO32__) -# include <sys/pc.h> -#endif /* __GO32__ */ - -#if defined (STATIC_MALLOC) -static char *xmalloc (), *xrealloc (); -#else -extern char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - - -/* **************************************************************** */ -/* */ -/* Line editing input utility */ -/* */ -/* **************************************************************** */ - -static char *LibraryVersion = "2.0 (Cygnus)"; - -/* 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. */ -static int 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 = 0; - -/* If non-zero, this program is running in an EMACS buffer. */ -static char *running_in_emacs = (char *)NULL; - -/* 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 (). */ -static jmp_buf readline_top_level; - -/* The streams we interact with. */ -static FILE *in_stream, *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; - -/* 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; - -/* Non-zero means to use a visible bell if one is available rather than - simply ringing the terminal bell. */ -int _rl_prefer_visible_bell = 0; - -/* Line buffer and maintenence. */ -char *rl_line_buffer = (char *)NULL; -int rl_line_buffer_len = 0; -#define DEFAULT_BUFFER_SIZE 256 - - -/* **************************************************************** */ -/* */ -/* `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 save keys that we dispatch on in a kbd macro. */ -static int defining_kbd_macro = 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 tells rl_delete_text and rl_insert_text to not add to - the undo list. */ -static int doing_an_undo = 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. A NULL PROMPT means - none. A return value of NULL means that EOF was encountered. */ -char * -readline (prompt) - char *prompt; -{ - char *readline_internal (); - 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_initialize (); - rl_prep_terminal (_rl_meta_flag); - -#if defined (HANDLE_SIGNALS) - rl_set_signals (); -#endif - - value = readline_internal (); - rl_deprep_terminal (); - -#if defined (HANDLE_SIGNALS) - rl_clear_signals (); -#endif - - return (value); -} - -/* 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. */ -char * -readline_internal () -{ - int lastc, c, eof_found; - - in_stream = rl_instream; - out_stream = rl_outstream; - - lastc = -1; - eof_found = 0; - - if (rl_startup_hook) - (*rl_startup_hook) (); - - if (!readline_echoing_p) - { - if (rl_prompt) - { - fprintf (out_stream, "%s", rl_prompt); - fflush (out_stream); - } - } - else - { - rl_on_new_line (); - rl_redisplay (); -#if defined (VI_MODE) - if (rl_editing_mode == vi_mode) - rl_vi_insertion_mode (); -#endif /* VI_MODE */ - } - - while (!rl_done) - { - int lk = last_command_was_kill; - int code; - - code = setjmp (readline_top_level); - - if (code) - rl_redisplay (); - - if (!rl_pending_input) - { - /* 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) - { - eof_found = 1; - break; - } - - lastc = c; - rl_dispatch (c, _rl_keymap); - - /* If there was no change in 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) - { - if (lk == last_command_was_kill) - 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) - rl_redisplay (); - } - - /* Restore the original of this history line, iff the line that we - are editing was originally in the history, AND the line has changed. */ - { - HIST_ENTRY *entry = current_history (); - - if (entry && rl_undo_list) - { - char *temp = savestring (the_line); - rl_revert_line (); - entry = replace_history_entry (where_history (), the_line, - (HIST_ENTRY *)NULL); - 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 (); - - if (eof_found) - return (char *)NULL; - else - return (savestring (the_line)); -} - -/* **************************************************************** */ -/* */ -/* Character Input Buffering */ -/* */ -/* **************************************************************** */ - -static int pop_index = 0, push_index = 0, ibuffer_len = 511; -static unsigned char ibuffer[512]; - -/* Non-null means it is a pointer to a function to run while waiting for - character input. */ -Function *rl_event_hook = (Function *)NULL; - -#define any_typein (push_index != pop_index) - -/* Add KEY to the buffer of characters to be read. */ -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 the amount of space available in the - buffer for stuffing characters. */ -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. */ -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. */ -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. */ -void -rl_gather_tyi () -{ -#if defined (MINIMAL) && !defined (_WIN32) - char input; - - if (isatty (0)) - { - int i = rl_getc (); - - if (i != EOF) - rl_stuff_char (i); - } - else if (kbhit () && ibuffer_space ()) - rl_stuff_char (getkey () & 0x7f); -#else /* !MINIMAL */ - - int tty = fileno (in_stream); - register int tem, result = -1; - int chars_avail; - char input; - -#if defined (FIONREAD) - result = ioctl (tty, FIONREAD, &chars_avail); -#endif - -#if defined (O_NDELAY) - if (result == -1) - { - int flags; - - flags = fcntl (tty, F_GETFL, 0); - - fcntl (tty, F_SETFL, (flags | O_NDELAY)); - chars_avail = read (tty, &input, 1); - - fcntl (tty, F_SETFL, flags); - 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 (in_stream)); - } - else - { - if (chars_avail) - rl_stuff_char (input); - } -#endif /* !MINIMAL */ -} - -static int next_macro_key (); -/* 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 = 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)) - { - (*rl_event_hook) (); - rl_gather_tyi (); - } - } - else - { - if (!rl_get_char (&c)) - c = rl_getc (in_stream); - } - } - - return (c); -} - -/* Found later in this file. */ -static void add_macro_char (), with_macro_input (); - -/* 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. */ -void -rl_dispatch (key, map) - register int key; - Keymap map; -{ -#if defined (VI_MODE) - extern int _rl_vi_last_command, _rl_vi_last_repeat, _rl_vi_last_arg_sign; -#endif - - if (defining_kbd_macro) - add_macro_char (key); - - if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii) - { - if (map[ESC].type == ISKMAP) - { -#if defined (CRAY) - map = (Keymap)((int)map[ESC].function); -#else - map = (Keymap)map[ESC].function; -#endif - key = UNMETA (key); - rl_key_sequence_length += 2; - rl_dispatch (key, map); - } - else - ding (); - return; - } - - switch (map[key].type) - { - case ISFUNC: - { - Function *func = map[key].function; - - if (func != (Function *)NULL) - { - /* Special case rl_do_lowercase_version (). */ - if (func == rl_do_lowercase_version) - { - rl_dispatch (to_lower (key), map); - return; - } - - (*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 (); - return; - } - } - break; - - case ISKMAP: - if (map[key].function != (Function *)NULL) - { - int newkey; - - rl_key_sequence_length++; - newkey = rl_read_key (); -#if defined (CRAY) - /* If you cast map[key].function to type (Keymap) on a Cray, - the compiler takes the value of may[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. */ - rl_dispatch (newkey, (Keymap)((int)map[key].function)); -#else - rl_dispatch (newkey, (Keymap)map[key].function); -#endif /* !CRAY */ - } - else - { - rl_abort (); - return; - } - break; - - case ISMACR: - if (map[key].function != (Function *)NULL) - { - char *macro; - - macro = savestring ((char *)map[key].function); - with_macro_input (macro); - return; - } - break; - } -#if defined (VI_MODE) - if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && - rl_vi_textmod_command (key)) - { - _rl_vi_last_command = key; - _rl_vi_last_repeat = rl_numeric_arg; - _rl_vi_last_arg_sign = rl_arg_sign; - } -#endif -} - - -/* **************************************************************** */ -/* */ -/* Hacking Keyboard Macros */ -/* */ -/* **************************************************************** */ - -/* The currently executing macro string. If this is non-zero, - then it is a malloc ()'ed string where input is coming from. */ -static char *executing_macro = (char *)NULL; - -/* The offset in the above string to the next character to be read. */ -static int executing_macro_index = 0; - -/* 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 = 0; - -/* The index at which characters are being added to current_macro. */ -static int current_macro_index = 0; - -/* 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 index; -}; - -/* The list of saved macros. */ -struct saved_macro *macro_list = (struct saved_macro *)NULL; - -/* Forward declarations of static functions. Thank you C. */ -static void push_executing_macro (), pop_executing_macro (); - -/* This one has to be declared earlier in the file. */ -/* static void add_macro_char (); */ - -/* Set up to read subsequent input from STRING. - STRING is free ()'ed when we are done with it. */ -static void -with_macro_input (string) - char *string; -{ - push_executing_macro (); - executing_macro = string; - executing_macro_index = 0; -} - -/* Return the next character available from a macro, or 0 if - there are no macro characters. */ -static int -next_macro_key () -{ - if (!executing_macro) - return (0); - - if (!executing_macro[executing_macro_index]) - { - pop_executing_macro (); - return (next_macro_key ()); - } - - return (executing_macro[executing_macro_index++]); -} - -/* Save the currently executing macro on a stack of saved macros. */ -static void -push_executing_macro () -{ - struct saved_macro *saver; - - saver = (struct saved_macro *)xmalloc (sizeof (struct saved_macro)); - saver->next = macro_list; - saver->index = executing_macro_index; - saver->string = executing_macro; - - macro_list = saver; -} - -/* Discard the current macro, replacing it with the one - on the top of the stack of saved macros. */ -static void -pop_executing_macro () -{ - if (executing_macro) - free (executing_macro); - - executing_macro = (char *)NULL; - executing_macro_index = 0; - - if (macro_list) - { - struct saved_macro *disposer = macro_list; - executing_macro = macro_list->string; - executing_macro_index = macro_list->index; - macro_list = macro_list->next; - free (disposer); - } -} - -/* Add a character to the macro being built. */ -static void -add_macro_char (c) - int c; -{ - if (current_macro_index + 1 >= current_macro_size) - { - if (!current_macro) - current_macro = (char *)xmalloc (current_macro_size = 25); - else - current_macro = - (char *)xrealloc (current_macro, current_macro_size += 25); - } - - current_macro[current_macro_index++] = c; - current_macro[current_macro_index] = '\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. */ -rl_start_kbd_macro (ignore1, ignore2) - int ignore1, ignore2; -{ - if (defining_kbd_macro) - rl_abort (); - - if (rl_explicit_arg) - { - if (current_macro) - with_macro_input (savestring (current_macro)); - } - else - current_macro_index = 0; - - defining_kbd_macro = 1; -} - -/* 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. */ -rl_end_kbd_macro (count, ignore) - int count, ignore; -{ - if (!defining_kbd_macro) - rl_abort (); - - current_macro_index -= (rl_key_sequence_length - 1); - current_macro[current_macro_index] = '\0'; - - defining_kbd_macro = 0; - - rl_call_last_kbd_macro (--count, 0); -} - -/* Execute the most recently defined keyboard macro. - COUNT says how many times to execute it. */ -rl_call_last_kbd_macro (count, ignore) - int count, ignore; -{ - if (!current_macro) - rl_abort (); - - if (defining_kbd_macro) - { - ding (); /* no recursive macros */ - current_macro[--current_macro_index] = '\0'; /* erase this char */ - return 0; - } - - while (count--) - with_macro_input (savestring (current_macro)); -} - -void -_rl_kill_kbd_macro () -{ - if (current_macro) - { - free (current_macro); - current_macro = (char *) NULL; - } - current_macro_size = current_macro_index = 0; - - if (executing_macro) - { - free (executing_macro); - executing_macro = (char *) NULL; - } - executing_macro_index = 0; - - defining_kbd_macro = 0; -} - - -/* **************************************************************** */ -/* */ -/* Initializations */ -/* */ -/* **************************************************************** */ - -/* Initliaze readline (and terminal if not already). */ -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; -} - -/* Initialize the entire state of the world. */ -readline_initialize_everything () -{ - /* Find out if we are running in Emacs. */ - running_in_emacs = getenv ("EMACS"); - - /* 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 in_stream and out_stream immediately. These values may change, - but they may also be used before readline_internal () is called. */ - in_stream = rl_instream; - out_stream = rl_outstream; - - /* Allocate data structures. */ - if (!rl_line_buffer) - rl_line_buffer = - (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE); - - /* Initialize the terminal interface. */ - init_terminal_io ((char *)NULL); - -#if !defined (MINIMAL) - /* Bind tty characters to readline functions. */ - readline_default_bindings (); -#endif /* !MINIMAL */ - - /* Initialize the function names. */ - rl_initialize_funmap (); - - /* Read in the init file. */ - rl_read_init_file ((char *)NULL); - - /* 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. */ -#if !defined (MINIMAL) -static void -readline_default_bindings () -{ - rltty_set_default_bindings (_rl_keymap); -} -#endif /* !MINIMAL */ - - -/* **************************************************************** */ -/* */ -/* Numeric Arguments */ -/* */ -/* **************************************************************** */ - -/* Handle C-u style numeric args, as well as M--, and M-digits. */ - -/* Add the current digit to the argument in progress. */ -rl_digit_argument (ignore, key) - int ignore, key; -{ - rl_pending_input = key; - rl_digit_loop (); -} - -/* What to do when you abort reading an argument. */ -rl_discard_argument () -{ - ding (); - rl_clear_message (); - rl_init_argument (); -} - -/* Create a default argument. */ -rl_init_argument () -{ - rl_numeric_arg = rl_arg_sign = 1; - rl_explicit_arg = 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. */ -rl_universal_argument () -{ - rl_numeric_arg *= 4; - rl_digit_loop (); -} - -rl_digit_loop () -{ - int key, c; - 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 (numeric (c)) - { - if (rl_explicit_arg) - rl_numeric_arg = (rl_numeric_arg * 10) + (c - '0'); - else - rl_numeric_arg = (c - '0'); - rl_explicit_arg = 1; - } - else - { - if (c == '-' && !rl_explicit_arg) - { - rl_numeric_arg = 1; - rl_arg_sign = -1; - } - else - { - rl_clear_message (); - rl_dispatch (key, _rl_keymap); - return; - } - } - } -} - -/* **************************************************************** */ -/* */ -/* Terminal and Termcap */ -/* */ -/* **************************************************************** */ - -static char *term_buffer = (char *)NULL; -static char *term_string_buffer = (char *)NULL; - -/* Non-zero means this terminal can't really do anything. */ -int dumb_term = 0; -/* On Solaris2, sys/types.h #includes sys/reg.h, which #defines PC. - Unfortunately, PC is a global variable used by the termcap library. */ -#undef PC - -#if !defined (__linux__) -char PC; -char *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; - -int screenwidth, screenheight; - -/* 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; - -/* True if we have funny auto-line-wrap ("am" and "xn"). */ -int term_xn; - -/* A visible bell, if the terminal can be made to flash the screen. */ -char *visible_bell; - -/* Non-zero means that this terminal has a meta key. */ -int term_has_meta; - -/* The string to write to turn on the meta key, if this term has one. */ -char *term_mm; - -/* The string to write to turn off the meta key, if this term has one. */ -char *term_mo; - -/* The key sequences output by the arrow keys, if this terminal has any. */ -char *term_ku, *term_kd, *term_kr, *term_kl; - -/* Re-initialize the terminal considering that the TERM/TERMCAP variable - has changed. */ -rl_reset_terminal (terminal_name) - char *terminal_name; -{ - init_terminal_io (terminal_name); -} - -/* Set 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. */ -#if !defined (MINIMAL) -void -_rl_set_screen_size (tty, ignore_env) - int tty, ignore_env; -{ -#if defined (TIOCGWINSZ) && !defined (TIOCGWINSZ_BROKEN) - struct winsize window_size; -#endif /* TIOCGWINSZ */ - -#if defined (TIOCGWINSZ) && !defined (TIOCGWINSZ_BROKEN) - 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) - { - char *sw; - - if (!ignore_env && (sw = getenv ("COLUMNS"))) - screenwidth = atoi (sw); - - if (screenwidth <= 0 && term_string_buffer) - screenwidth = tgetnum ("co"); - } - - /* Environment variable LINES overrides setting of "li" if IGNORE_ENV - is unset. */ - if (screenheight <= 0) - { - char *sh; - - if (!ignore_env && (sh = getenv ("LINES"))) - screenheight = atoi (sh); - - if (screenheight <= 0 && term_string_buffer) - screenheight = tgetnum ("li"); - } - - /* If all else fails, default to 80x24 terminal. */ - if (screenwidth <= 0) - screenwidth = 80; - - if (screenheight <= 0) - screenheight = 24; - -#if defined (SHELL) - /* If we're being compiled as part of bash, set the environment - variables $LINES and $COLUMNS to new values. */ - set_lines_and_columns (screenheight, screenwidth); -#endif - - /* If we don't have xn (most modern terminals do), - don't use the last column. */ - if (!term_xn) - screenwidth--; -} -#endif /* !MINIMAL */ - -init_terminal_io (terminal_name) - char *terminal_name; -{ -#if defined (MINIMAL) - screenwidth = ScreenCols (); - screenheight = ScreenRows (); - 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 MINIMAL 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 = term_xn = 0; - return; -#else /* !MINIMAL */ - - char *term, *buffer; - int tty; - - term = terminal_name ? terminal_name : getenv ("TERM"); - - if (!term_string_buffer) - term_string_buffer = (char *)xmalloc (2048); - - if (!term_buffer) - term_buffer = (char *)xmalloc (2048); - - buffer = term_string_buffer; - - term_clrpag = term_cr = term_clreol = (char *)NULL; - - if (!term) - term = "dumb"; - - if (tgetent (term_buffer, term) <= 0) - { - dumb_term = 1; - screenwidth = 79; - screenheight = 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 = term_xn = 0; - return; - } - - BC = tgetstr ("pc", &buffer); - PC = buffer ? *buffer : 0; - - term_backspace = tgetstr ("le", &buffer); - - term_cr = tgetstr ("cr", &buffer); - term_clreol = tgetstr ("ce", &buffer); - term_clrpag = tgetstr ("cl", &buffer); - - if (!term_cr) - term_cr = "\r"; - -#if defined (HACK_TERMCAP_MOTION) - term_forward_char = tgetstr ("nd", &buffer); -#endif /* HACK_TERMCAP_MOTION */ - - if (rl_instream) - tty = fileno (rl_instream); - else - tty = 0; - - screenwidth = screenheight = 0; - - term_xn = tgetflag ("am") && tgetflag ("xn"); - - _rl_set_screen_size (tty, 0); - - term_im = tgetstr ("im", &buffer); - term_ei = tgetstr ("ei", &buffer); - term_IC = tgetstr ("IC", &buffer); - term_ic = tgetstr ("ic", &buffer); - - /* "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); - - term_up = tgetstr ("up", &buffer); - term_dc = tgetstr ("dc", &buffer); - term_DC = tgetstr ("DC", &buffer); - - visible_bell = tgetstr ("vb", &buffer); - - /* Check to see if this terminal has a meta key. */ - term_has_meta = (tgetflag ("km") || tgetflag ("MT")); - if (term_has_meta) - { - term_mm = tgetstr ("mm", &buffer); - term_mo = tgetstr ("mo", &buffer); - } - else - { - term_mm = (char *)NULL; - term_mo = (char *)NULL; - } - - /* Attempt to find and bind the arrow keys. Do not override already - bound keys in an overzealous attempt, however. */ - term_ku = tgetstr ("ku", &buffer); - term_kd = tgetstr ("kd", &buffer); - term_kr = tgetstr ("kr", &buffer); - term_kl = tgetstr ("kl", &buffer); - - if (term_ku) - { - Function *func; - - func = rl_function_of_keyseq (term_ku, _rl_keymap, (int *)NULL); - - if (!func || func == rl_do_lowercase_version) - rl_set_key (term_ku, rl_get_previous_history, _rl_keymap); - } - - if (term_kd) - { - Function *func; - - func = rl_function_of_keyseq (term_kd, _rl_keymap, (int *)NULL); - - if (!func || func == rl_do_lowercase_version) - rl_set_key (term_kd, rl_get_next_history, _rl_keymap); - } - - if (term_kr) - { - Function *func; - - func = rl_function_of_keyseq (term_kr, _rl_keymap, (int *)NULL); - - if (!func || func == rl_do_lowercase_version) - rl_set_key (term_kr, rl_forward, _rl_keymap); - } - - if (term_kl) - { - Function *func; - - func = rl_function_of_keyseq (term_kl, _rl_keymap, (int *)NULL); - - if (!func || func == rl_do_lowercase_version) - rl_set_key (term_kl, rl_backward, _rl_keymap); - } -#endif /* !MINIMAL */ - return 0; -} - -/* A function for the use of tputs () */ -int -_rl_output_character_function (c) - int c; -{ - return putc (c, 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, out_stream); -} - -/* Move the cursor back. */ -backspace (count) - int count; -{ - register int i; - -#if !defined (MINIMAL) - if (term_backspace) - for (i = 0; i < count; i++) - tputs (term_backspace, 1, _rl_output_character_function); - else -#endif /* !MINIMAL */ - for (i = 0; i < count; i++) - putc ('\b', out_stream); -} - -/* Move to the start of the next line. */ -crlf () -{ -#if defined (NEW_TTY_DRIVER) - tputs (term_cr, 1, _rl_output_character_function); -#endif /* NEW_TTY_DRIVER */ - putc ('\n', out_stream); -} - - -/* **************************************************************** */ -/* */ -/* 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 allow_pathname_alphabetic_chars = 0; -char *pathname_alphabetic_chars = "/-_=~.#$"; - -int -alphabetic (c) - int c; -{ - if (pure_alphabetic (c) || (numeric (c))) - return (1); - - if (allow_pathname_alphabetic_chars) - return (strchr (pathname_alphabetic_chars, c) != NULL); - else - return (0); -} - -/* Return non-zero if C is a numeric character. */ -int -numeric (c) - int c; -{ - return (c >= '0' && c <= '9'); -} - -/* Ring the terminal bell. */ -int -ding () -{ - if (readline_echoing_p) - { -#if !defined (MINIMAL) - if (_rl_prefer_visible_bell && visible_bell) - tputs (visible_bell, 1, _rl_output_character_function); - else -#endif /* !MINIMAL */ - { - fprintf (stderr, "\007"); - fflush (stderr); - } - } - return (-1); -} - -/* How to abort things. */ -rl_abort () -{ - ding (); - rl_clear_message (); - rl_init_argument (); - rl_pending_input = 0; - - defining_kbd_macro = 0; - while (executing_macro) - pop_executing_macro (); - - rl_last_func = (Function *)NULL; - longjmp (readline_top_level, 1); -} - -/* 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) - { - int t = from; - from = to; - to = t; - } - - length = to - from; - copy = (char *)xmalloc (1 + length); - strncpy (copy, the_line + 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 = - (char *)xrealloc - (rl_line_buffer, rl_line_buffer_len += DEFAULT_BUFFER_SIZE); - - the_line = rl_line_buffer; -} - - -/* **************************************************************** */ -/* */ -/* 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. */ -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 (!doing_an_undo) - { - /* If possible and desirable, concatenate the undos. */ - if ((strlen (string) == 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'; -} - -/* Delete the string between FROM and TO. FROM is - inclusive, TO is not. */ -rl_delete_text (from, to) - int from, to; -{ - register char *text; - - /* Fix it if the caller is confused. */ - if (from > to) - { - int t = from; - from = to; - to = t; - } - text = rl_copy_text (from, to); - strncpy (the_line + from, the_line + to, rl_end - to); - - /* Remember how to undo this delete. */ - if (!doing_an_undo) - rl_add_undo (UNDO_DELETE, from, to, text); - else - free (text); - - rl_end -= (to - from); - the_line[rl_end] = '\0'; -} - - -/* **************************************************************** */ -/* */ -/* 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. */ -rl_forward (count) - int count; -{ - if (count < 0) - rl_backward (-count); - else - while (count) - { -#if defined (VI_MODE) - if (rl_point >= (rl_end - (rl_editing_mode == vi_mode))) -#else - if (rl_point == rl_end) -#endif /* VI_MODE */ - { - ding (); - return 0; - } - else - rl_point++; - --count; - } - return 0; -} - -/* Move backward COUNT characters. */ -rl_backward (count) - int count; -{ - if (count < 0) - rl_forward (-count); - else - while (count) - { - if (!rl_point) - { - ding (); - return 0; - } - else - --rl_point; - --count; - } - return 0; -} - -/* Move to the beginning of the line. */ -rl_beg_of_line () -{ - rl_point = 0; - return 0; -} - -/* Move to the end of the line. */ -rl_end_of_line () -{ - rl_point = rl_end; - return 0; -} - -/* Move forward a word. We do what Emacs does. */ -rl_forward_word (count) - int count; -{ - int c; - - if (count < 0) - { - rl_backward_word (-count); - 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)) - { - while (++rl_point < rl_end) - { - c = the_line[rl_point]; - if (alphabetic (c)) break; - } - } - if (rl_point == rl_end) return; - while (++rl_point < rl_end) - { - c = the_line[rl_point]; - if (!alphabetic (c)) break; - } - --count; - } - return 0; -} - -/* Move backward a word. We do what Emacs does. */ -rl_backward_word (count) - int count; -{ - int c; - - if (count < 0) - { - rl_forward_word (-count); - 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)) - { - 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)) - break; - else --rl_point; - } - --count; - } - return 0; -} - -/* Clear the current line. Numeric argument to C-l does this. */ -rl_refresh_line () -{ - int curr_line = _rl_last_c_pos / screenwidth; - - _rl_move_vert (curr_line); - _rl_move_cursor_relative (0, the_line); /* XXX is this right */ - -#if defined (_WIN32) - abort(); -#else -#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 /* !MINIMAL */ - if (term_clreol) - tputs (term_clreol, 1, _rl_output_character_function); -#endif /* !MINIMAL */ -#endif - 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. */ -rl_clear_screen () -{ - if (rl_explicit_arg) - { - rl_refresh_line (); - return 0; - } - -#if !defined (MINIMAL) - if (term_clrpag) - tputs (term_clrpag, 1, _rl_output_character_function); - else -#endif /* !MINIMAL */ - crlf (); - - rl_forced_update_display (); - rl_display_fixed = 1; - - return 0; -} - -rl_arrow_keys (count, c) - int count, c; -{ - int ch; - - ch = rl_read_key (); - - switch (to_upper (ch)) - { - case 'A': - rl_get_previous_history (count); - break; - - case 'B': - rl_get_next_history (count); - break; - - case 'C': - rl_forward (count); - break; - - case 'D': - rl_backward (count); - break; - - default: - ding (); - } - return 0; -} - - -/* **************************************************************** */ -/* */ -/* Text commands */ -/* */ -/* **************************************************************** */ - -/* Insert the character C at the current location, moving point forward. */ -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 = (char *)alloca (1 + count); - - for (i = 0; i < count; i++) - string[i] = c; - - string[i] = '\0'; - rl_insert_text (string); - return 0; - } - - if (count > 1024) - { - int decreaser; - - string = (char *)alloca (1024 + 1); - - for (i = 0; i < 1024; i++) - string[i] = c; - - while (count) - { - decreaser = (count > 1024 ? 1024 : count); - string[decreaser] = '\0'; - rl_insert_text (string); - 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 (any_typein) - { - int key = 0, t; - - i = 0; - string = (char *)alloca (ibuffer_len + 1); - string[i++] = 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); - } - else - { - /* Inserting a single character. */ - string = (char *)alloca (2); - - string[1] = '\0'; - string[0] = c; - rl_insert_text (string); - } - return 0; -} - -/* Insert the next typed character verbatim. */ -rl_quoted_insert (count) - int count; -{ - int c; - - c = rl_read_key (); - return (rl_insert (count, c)); - -} - -/* Insert a tab character. */ -rl_tab_insert (count) - int count; -{ - 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. */ -rl_newline (count, key) - int count, key; -{ - rl_done = 1; - -#if defined (VI_MODE) - { - extern int _rl_vi_doing_insert; - if (_rl_vi_doing_insert) - { - rl_end_undo_group (); - _rl_vi_doing_insert = 0; - } - } - rl_vi_set_last (); - -#endif /* VI_MODE */ - - if (readline_echoing_p) - { - _rl_move_vert (_rl_vis_botlin); - _rl_vis_botlin = 0; - crlf (); - fflush (out_stream); - rl_display_fixed++; - } - return 0; -} - -rl_clean_up_for_exit () -{ - if (readline_echoing_p) - { - _rl_move_vert (_rl_vis_botlin); - _rl_vis_botlin = 0; - fflush (out_stream); - rl_restart_output (); - } - 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. */ -rl_do_lowercase_version (ignore1, ignore2) - int ignore1, ignore2; -{ - return 0; -} - -/* Rubout the character behind point. */ -rl_rubout (count) - int count; -{ - if (count < 0) - { - rl_delete (-count); - return 0; - } - - if (!rl_point) - { - ding (); - return -1; - } - - if (count > 1 || rl_explicit_arg) - { - int orig_point = rl_point; - rl_backward (count); - 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. */ -rl_delete (count, invoking_key) - int count, invoking_key; -{ - if (count < 0) - { - return (rl_rubout (-count)); - } - - if (rl_point == rl_end) - { - ding (); - return -1; - } - - if (count > 1 || rl_explicit_arg) - { - int orig_point = rl_point; - rl_forward (count); - 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. */ -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; -} - - -/* **************************************************************** */ -/* */ -/* Kill commands */ -/* */ -/* **************************************************************** */ - -/* 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. */ -rl_unix_word_rubout () -{ - if (!rl_point) - ding (); - else - { - int orig_point = rl_point; - - while (rl_point && whitespace (the_line[rl_point - 1])) - rl_point--; - - while (rl_point && !whitespace (the_line[rl_point - 1])) - rl_point--; - - rl_kill_text (rl_point, orig_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. */ -rl_unix_line_discard () -{ - if (!rl_point) - ding (); - else - { - rl_kill_text (rl_point, 0); - rl_point = 0; - } - return 0; -} - - -/* **************************************************************** */ -/* */ -/* Commands For Typos */ -/* */ -/* **************************************************************** */ - -/* Random and interesting things in here. */ - -/* **************************************************************** */ -/* */ -/* 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. */ -rl_upcase_word (count) - int count; -{ - return (rl_change_case (count, UpCase)); -} - -/* Lowercase the word at point. */ -rl_downcase_word (count) - int count; -{ - return (rl_change_case (count, DownCase)); -} - -/* Upcase the first letter, downcase the rest. */ -rl_capitalize_word (count) - int count; -{ - 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 = rl_point, end; - int state = 0; - - rl_forward_word (count); - end = rl_point; - - if (count < 0) - { - int temp = start; - start = end; - end = temp; - } - - /* We are going to modify some text, so let's prepare to undo it. */ - rl_modifying (start, end); - - for (; start < end; start++) - { - switch (op) - { - case UpCase: - the_line[start] = to_upper (the_line[start]); - break; - - case DownCase: - the_line[start] = to_lower (the_line[start]); - break; - - case CapCase: - if (state == 0) - { - the_line[start] = to_upper (the_line[start]); - state = 1; - } - else - { - the_line[start] = to_lower (the_line[start]); - } - if (!pure_alphabetic (the_line[start])) - state = 0; - break; - - default: - abort (); - return -1; - } - } - rl_point = end; - return 0; -} - -/* **************************************************************** */ -/* */ -/* Transposition */ -/* */ -/* **************************************************************** */ - -/* Transpose the words at point. */ -rl_transpose_words (count) - int count; -{ - 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); - w2_end = rl_point; - rl_backward_word (1); - w2_beg = rl_point; - rl_backward_word (count); - w1_beg = rl_point; - rl_forward_word (1); - 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. */ -rl_transpose_chars (count) - int count; -{ - 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; -} - -/* **************************************************************** */ -/* */ -/* Undo, and Undoing */ -/* */ -/* **************************************************************** */ - -/* The current undo list for THE_LINE. */ -UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL; - -/* 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; - -undo_thing: - if (!rl_undo_list) - return (0); - - doing_an_undo = 1; - - switch (rl_undo_list->what) { - - /* Undoing deletes means inserting some text. */ - case UNDO_DELETE: - rl_point = rl_undo_list->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 (rl_undo_list->start, rl_undo_list->end); - rl_point = rl_undo_list->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 -#if 0 - abort (); -#else - ding (); -#endif - break; - } - - doing_an_undo = 0; - - release = rl_undo_list; - rl_undo_list = rl_undo_list->next; - free (release); - - if (waiting_for_begin) - goto undo_thing; - - return (1); -} - -/* Begin a group. Subsequent undos are undone as an atomic operation. */ -rl_begin_undo_group () -{ - rl_add_undo (UNDO_BEGIN, 0, 0, 0); - return 0; -} - -/* End an undo group started with rl_begin_undo_group (). */ -rl_end_undo_group () -{ - rl_add_undo (UNDO_END, 0, 0, 0); - return 0; -} - -/* Save an undo entry for the text from START to END. */ -rl_modifying (start, end) - int start, end; -{ - if (start > end) - { - int t = start; - start = end; - end = t; - } - - 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. */ -rl_revert_line () -{ - if (!rl_undo_list) - ding (); - else - { - while (rl_undo_list) - rl_do_undo (); - } - return 0; -} - -/* Do some undoing of things that were done. */ -rl_undo_command (count) - int count; -{ - if (count < 0) - return 0; /* Nothing to do. */ - - while (count) - { - if (rl_do_undo ()) - count--; - else - { - ding (); - break; - } - } - return 0; -} - -/* **************************************************************** */ -/* */ -/* History Utilities */ -/* */ -/* **************************************************************** */ - -/* We already have a history library, and that is what we use to control - the history features of readline. However, 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. */ -start_using_history () -{ - using_history (); - if (saved_line_for_history) - free_history_entry (saved_line_for_history); - - saved_line_for_history = (HIST_ENTRY *)NULL; - return 0; -} - -/* Free the contents (and containing structure) of a HIST_ENTRY. */ -void -free_history_entry (entry) - HIST_ENTRY *entry; -{ - if (!entry) - return; - if (entry->line) - free (entry->line); - free (entry); -} - -/* Perhaps put back the current line if it has changed. */ -maybe_replace_line () -{ - HIST_ENTRY *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. */ -maybe_unsave_line () -{ - if (saved_line_for_history) - { - int line_len; - - 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; - 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. */ -maybe_save_line () -{ - if (!saved_line_for_history) - { - 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. */ -rl_beginning_of_history () -{ - return (rl_get_previous_history (1 + where_history ())); -} - -/* Meta-> goes to the end of the history. (The current line). */ -rl_end_of_history () -{ - maybe_replace_line (); - using_history (); - maybe_unsave_line (); - return 0; -} - -/* Move down to the next history line. */ -rl_get_next_history (count) - int count; -{ - HIST_ENTRY *temp = (HIST_ENTRY *)NULL; - - if (count < 0) - return (rl_get_previous_history (-count)); - - if (!count) - return 0; - - maybe_replace_line (); - - while (count) - { - temp = next_history (); - if (!temp) - break; - --count; - } - - if (!temp) - maybe_unsave_line (); - else - { - int line_len; - - 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. */ -rl_get_previous_history (count) - int count; -{ - HIST_ENTRY *old_temp = (HIST_ENTRY *)NULL; - HIST_ENTRY *temp = (HIST_ENTRY *)NULL; - - if (count < 0) - return (rl_get_next_history (-count)); - - if (!count) - 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 (); - - while (count) - { - temp = previous_history (); - if (!temp) - break; - else - 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) - ding (); - else - { - int line_len; - - 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; -} - -/* Make C be the next command to be executed. */ -rl_execute_next (c) - int c; -{ - rl_pending_input = c; - return 0; -} - -/* **************************************************************** */ -/* */ -/* The Mark and the Region. */ -/* */ -/* **************************************************************** */ - -/* Set the mark at POSITION. */ -rl_set_mark (position) - int position; -{ - if (position > rl_end) - return -1; - - rl_mark = position; - return 0; -} - -/* Exchange the position of mark and point. */ -rl_exchange_mark_and_point () -{ - if (rl_mark > rl_end) - rl_mark = -1; - - if (rl_mark == -1) - { - ding (); - return -1; - } - else - { - int temp = rl_point; - - rl_point = rl_mark; - rl_mark = temp; - } - return 0; -} - - -/* **************************************************************** */ -/* */ -/* 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. */ -int rl_max_kills = DEFAULT_MAX_KILLS; - -/* Where to store killed text. */ -char **rl_kill_ring = (char **)NULL; - -/* Where we are in the kill ring. */ -int rl_kill_index = 0; - -/* How many slots we have in the kill ring. */ -int rl_kill_ring_length = 0; - -/* How to say that you only want to save a certain amount - of kill material. */ -rl_set_retained_kills (num) - int num; -{ - 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. */ -rl_kill_text (from, to) - int from, to; -{ - int slot; - char *text = rl_copy_text (from, to); - - /* Is there anything to kill? */ - if (from == to) - { - free (text); - last_command_was_kill++; - return 0; - } - - /* Delete the copied text from the line. */ - rl_delete_text (from, to); - - /* First, find the slot to work with. */ - if (!last_command_was_kill) - { - /* Get a new slot. */ - if (!rl_kill_ring) - { - /* If we don't have any defined, then make one. */ - rl_kill_ring = (char **) - xmalloc (((rl_kill_ring_length = 1) + 1) * sizeof (char *)); - slot = 1; - } - 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 - { - rl_kill_ring = - (char **) - xrealloc (rl_kill_ring, - ((slot = (rl_kill_ring_length += 1)) + 1) - * sizeof (char *)); - } - } - slot--; - } - else - { - slot = rl_kill_ring_length - 1; - } - - /* If the last command was a kill, prepend or append. */ - if (last_command_was_kill && rl_editing_mode != vi_mode) - { - char *old = rl_kill_ring[slot]; - char *new = (char *)xmalloc (1 + strlen (old) + strlen (text)); - - if (from < to) - { - 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; - 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. */ -rl_kill_word (count) - int count; -{ - int orig_point = rl_point; - - if (count < 0) - return (rl_backward_kill_word (-count)); - else - { - rl_forward_word (count); - - 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. */ -rl_backward_kill_word (count) - int count; -{ - int orig_point = rl_point; - - if (count < 0) - return (rl_kill_word (-count)); - else - { - rl_backward_word (count); - - if (rl_point != orig_point) - rl_kill_text (orig_point, rl_point); - } -} - -/* Kill from here to the end of the line. If DIRECTION is negative, kill - back to the line start instead. */ -rl_kill_line (direction) - int direction; -{ - int orig_point = rl_point; - - if (direction < 0) - return (rl_backward_kill_line (1)); - else - { - rl_end_of_line (); - 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. */ -rl_backward_kill_line (direction) - int direction; -{ - int orig_point = rl_point; - - if (direction < 0) - return (rl_kill_line (1)); - else - { - if (!rl_point) - ding (); - else - { - rl_beg_of_line (); - rl_kill_text (orig_point, rl_point); - } - } - return 0; -} - -/* Yank back the last killed text. This ignores arguments. */ -rl_yank () -{ - if (!rl_kill_ring) - { - rl_abort (); - return -1; - } - - rl_set_mark (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. */ -rl_yank_pop () -{ - int l; - - if (((rl_last_func != rl_yank_pop) && (rl_last_func != rl_yank)) || - !rl_kill_ring) - { - rl_abort (); - return -1; - } - - l = strlen (rl_kill_ring[rl_kill_index]); - if (((rl_point - l) >= 0) && - (strncmp (the_line + (rl_point - l), - rl_kill_ring[rl_kill_index], l) == 0)) - { - rl_delete_text ((rl_point - l), rl_point); - rl_point -= l; - rl_kill_index--; - if (rl_kill_index < 0) - rl_kill_index = rl_kill_ring_length - 1; - rl_yank (); - return 0; - } - else - { - rl_abort (); - return -1; - } -} - -/* Yank the COUNTth argument from the previous history line. */ -rl_yank_nth_arg (count, ignore) - int count; -{ - register HIST_ENTRY *entry = previous_history (); - char *arg; - - 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_point++; -#endif /* VI_MODE */ - -#if 0 - if (rl_point && the_line[rl_point - 1] != ' ') - rl_insert_text (" "); -#endif - - rl_insert_text (arg); - free (arg); - - rl_end_undo_group (); - return 0; -} - -/* How to toggle back and forth between editing modes. */ -rl_vi_editing_mode () -{ -#if defined (VI_MODE) - rl_editing_mode = vi_mode; - rl_vi_insertion_mode (); - return 0; -#endif /* VI_MODE */ -} - -rl_emacs_editing_mode () -{ - rl_editing_mode = emacs_mode; - _rl_keymap = emacs_standard_keymap; - return 0; -} - - -/* **************************************************************** */ -/* */ -/* USG (System V) Support */ -/* */ -/* **************************************************************** */ - -int -rl_getc (stream) - FILE *stream; -{ - int result; - unsigned char c; - -#if defined (MINIMAL) && !defined (_WIN32) - if (isatty (0)) - return (getkey () & 0x7f); -#endif /* MINIMAL */ - - 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) - { - int flags; - - 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) - { - int flags; - - 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 (MINIMAL) - /* 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 /* !MINIMAL */ - } -} - -char * -_rl_savestring (str) - char *str; -{ - char *copy = (char*) xmalloc (strlen (str) + 1); - strcpy (copy, str); - return copy; -} - -#if defined (STATIC_MALLOC) - -/* **************************************************************** */ -/* */ -/* xmalloc and xrealloc () */ -/* */ -/* **************************************************************** */ - -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 (); -} -#endif /* STATIC_MALLOC */ - - -/* **************************************************************** */ -/* */ -/* Testing Readline */ -/* */ -/* **************************************************************** */ - -#if defined (TEST) - -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); - } -} - -#endif /* TEST */ - - -/* - * Local variables: - * compile-command: "gcc -g -traditional -I. -I.. -DTEST -o readline readline.c keymaps.o funmap.o history.o -ltermcap" - * end: - */ diff --git a/gnu/usr.bin/binutils/readline/readline.h b/gnu/usr.bin/binutils/readline/readline.h deleted file mode 100644 index 54514b8d188..00000000000 --- a/gnu/usr.bin/binutils/readline/readline.h +++ /dev/null @@ -1,237 +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_ - -#include "keymaps.h" - -/* The functions for manipulating the text of the line within readline. -Most of these functions are bound to keys by default. */ -extern int - rl_tilde_expand (), - rl_beg_of_line (), rl_backward (), rl_delete (), rl_end_of_line (), - rl_forward (), ding (), rl_backward (), rl_newline (), rl_kill_line (), - 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_quoted_insert (), 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_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_delete_horizontal_space (); - -/* #define PAREN_MATCHING */ -#if defined (PAREN_MATCHING) -extern int rl_insert_close (); -#endif /* PAREN_MATCHING */ - -/* 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 (); - -#if defined (VI_MODE) -/* Things for vi mode. */ -extern int - 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_comment (), - 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 (); -#endif /* VI_MODE */ - -/* Keyboard macro commands. */ -extern int -rl_start_kbd_macro (), rl_end_kbd_macro (), rl_call_last_kbd_macro (); - -extern int rl_arrow_keys(), rl_refresh_line (); - -/* 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 { - char *name; - Function *function; -} FUNMAP; - -extern FUNMAP **funmap; - -/* **************************************************************** */ -/* */ -/* Well Published Variables */ -/* */ -/* **************************************************************** */ - -/* 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; - -/* The name of the terminal to use. */ -extern char *rl_terminal_name; - -/* The input and output streams. */ -extern FILE *rl_instream, *rl_outstream; - -/* 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 are used to quote a substring of the command - line, upon which completion is to be performed for the entire substring. - Within quoted substrings, rl_completer_word_break_characters are treated - as normal characters, unless they also appear in this list. */ -extern char *rl_completer_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; - -/* 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; - -/* 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; - -/* 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_symbolic_link_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; - -/* Non-zero means that modified history lines are preceded - with an asterisk. */ -extern int rl_show_star; - - -/* **************************************************************** */ -/* */ -/* Tilde Variables That Can be Externally Set */ -/* */ -/* **************************************************************** */ - -/* 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 Function *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; - -/* **************************************************************** */ -/* */ -/* Well Published Functions */ -/* */ -/* **************************************************************** */ - -/* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ -extern char *readline (); - -/* Return an array of strings which are the result of repeatadly calling - FUNC with TEXT. */ -extern char **completion_matches (); - -/* 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 (); - -#endif /* _READLINE_H_ */ diff --git a/gnu/usr.bin/binutils/readline/rldefs.h b/gnu/usr.bin/binutils/readline/rldefs.h deleted file mode 100644 index aa6e0fed0a9..00000000000 --- a/gnu/usr.bin/binutils/readline/rldefs.h +++ /dev/null @@ -1,290 +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 (__GNUC__) -# undef alloca -# define alloca __builtin_alloca -#else -# if defined (sparc) || defined (HAVE_ALLOCA_H) -# include <alloca.h> -# endif -#endif - - -#define NEW_TTY_DRIVER -#define HAVE_BSD_SIGNALS -/* #define USE_XON_XOFF */ - -/* Only do this for DOS, and WinGDB */ -#if defined __MSDOS__ || (defined _WIN32 && !defined __CYGWIN32__) -#define NO_SYS_FILE -#undef NEW_TTY_DRIVER -#undef HAVE_BSD_SIGNALS -#define MINIMAL -#endif - -/* Only do this for cygwin32 */ -#if defined __CYGWIN32__ -#define tgetent(ARG1, ARG2) -1 -#define tgetnum(ARG1) ((int)abort()) -#define tgetstr(ARG1, ARG2) ((char *)abort()) -#define tgetflag(ARG1) ((int)abort()) -#define tputs(ARG1, ARG2, ARG3) ((int)abort()) -#define setpwent() -#else -extern char *tgetstr (); -#endif - -#if defined (__linux__) -# include <termios.h> -# include <termcap.h> -#endif /* __linux__ */ - -/* Some USG machines have BSD signal handling (sigblock, sigsetmask, etc.) */ -/* CYGNUS LOCAL accept __hpux as well as hpux for HP compiler in ANSI mode. */ -#if defined (USG) && !(defined (hpux) || defined (__hpux)) -# undef HAVE_BSD_SIGNALS -#endif - -/* Only do this for WinGDB */ -#if defined _WIN32 && !defined __CYGWIN32__ -#define ScreenCols() 80 -#define ScreenRows() 24 -#define ScreenSetCursor() abort(); -#define ScreenGetCursor() abort(); -#endif - -/* System V machines use termio. */ -#if !defined (_POSIX_VERSION) -/* CYGNUS LOCAL accept __hpux as well as hpux for HP compiler in ANSI mode. - Add __osf__ to list of machines to force use of termio.h */ -# if defined (USG) || defined (hpux) || defined (__hpux) || defined (Xenix) || defined (sgi) || defined (DGUX) || defined (__osf__) -# undef NEW_TTY_DRIVER -# define TERMIO_TTY_DRIVER -# include <termio.h> -# if !defined (TCOON) -# define TCOON 1 -# endif -# endif /* USG || hpux || Xenix || sgi || DUGX || __osf__ */ -#endif /* !_POSIX_VERSION */ - -/* Posix systems use termios and the Posix signal functions. */ -#if defined (_POSIX_VERSION) -# if !defined (TERMIOS_MISSING) -# undef NEW_TTY_DRIVER -# define TERMIOS_TTY_DRIVER -# include <termios.h> -# endif /* !TERMIOS_MISSING */ -# define HAVE_POSIX_SIGNALS -# if !defined (O_NDELAY) -# define O_NDELAY O_NONBLOCK /* Posix-style non-blocking i/o */ -# endif /* O_NDELAY */ -#endif /* _POSIX_VERSION */ - -/* System V.3 machines have the old 4.1 BSD `reliable' signal interface. */ -#if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS) -# if defined (USGr3) -# if !defined (HAVE_USG_SIGHOLD) -# define HAVE_USG_SIGHOLD -# endif /* !HAVE_USG_SIGHOLD */ -# endif /* USGr3 */ -#endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */ - -/* 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 (_POSIX_VERSION) -# define _POSIX_VDISABLE 0 -# else /* !_POSIX_VERSION */ -# define _POSIX_VDISABLE -1 -# endif /* !_POSIX_VERSION */ -#endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */ - -#if 1 -# define D_NAMLEN(d) strlen ((d)->d_name) -#else /* !1 */ - -#if !defined (SHELL) && (defined (_POSIX_VERSION) || defined (USGr3)) -# if !defined (HAVE_DIRENT_H) -# define HAVE_DIRENT_H -# endif /* !HAVE_DIRENT_H */ -#endif /* !SHELL && (_POSIX_VERSION || USGr3) */ - -#if defined (HAVE_DIRENT_H) -# include <dirent.h> -# if !defined (direct) -# define direct dirent -# endif /* !direct */ -# define D_NAMLEN(d) strlen ((d)->d_name) -#else /* !HAVE_DIRENT_H */ -# define D_NAMLEN(d) ((d)->d_namlen) -# if defined (USG) -# if defined (Xenix) -# include <sys/ndir.h> -# else /* !Xenix (but USG...) */ -# include "ndir.h" -# endif /* !Xenix */ -# else /* !USG */ -# include <sys/dir.h> -# endif /* !USG */ -#endif /* !HAVE_DIRENT_H */ -#endif /* !1 */ - -#if defined (USG) && defined (TIOCGWINSZ) && !defined (Linux) -# if defined (_AIX) - /* AIX 4.x seems to reference struct uio within a prototype - in stream.h, but doesn't cause the uio include file to - be included. */ -# include <sys/uio.h> -# endif -# include <sys/stream.h> -# if defined (HAVE_SYS_PTEM_H) -# include <sys/ptem.h> -# endif /* HAVE_SYS_PTEM_H */ -# if defined (HAVE_SYS_PTE_H) -# include <sys/pte.h> -# endif /* HAVE_SYS_PTE_H */ -#endif /* USG && TIOCGWINSZ && !Linux */ - -/* 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 -/* Posix macro to check file in statbuf for file-ness. - This requires that <sys/stat.h> be included before this test. */ -#if defined (S_IFREG) && !defined (S_ISREG) -#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) -#endif - -#if !defined (strchr) && !defined (__STDC__) -extern char *strchr (), *strrchr (); -#endif /* !strchr && !__STDC__ */ - -#if defined (HAVE_VARARGS_H) -# include <varargs.h> -#endif /* HAVE_VARARGS_H */ - -/* 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 - -#if defined __MSDOS__ || (defined _WIN32 && !defined __CYGWIN32__) -#undef HANDLE_SIGNALS -#endif - - -#if !defined (emacs_mode) -# define no_mode -1 -# define vi_mode 0 -# define emacs_mode 1 -#endif - -/* Define some macros for dealing with assorted signalling disciplines. - - These macros provide a way to use signal blocking and disabling - without smothering your code in a pile of #ifdef's. - - SIGNALS_UNBLOCK; Stop blocking all signals. - - { - SIGNALS_DECLARE_SAVED (name); Declare a variable to save the - signal blocking state. - ... - SIGNALS_BLOCK (SIGSTOP, name); Block a signal, and save the previous - state for restoration later. - ... - SIGNALS_RESTORE (name); Restore previous signals. - } - -*/ - -#ifdef HAVE_POSIX_SIGNALS - /* POSIX signals */ - -#define SIGNALS_UNBLOCK \ - do { sigset_t set; \ - sigemptyset (&set); \ - sigprocmask (SIG_SETMASK, &set, (sigset_t *)NULL); \ - } while (0) - -#define SIGNALS_DECLARE_SAVED(name) sigset_t name - -#define SIGNALS_BLOCK(SIG, saved) \ - do { sigset_t set; \ - sigemptyset (&set); \ - sigaddset (&set, SIG); \ - sigprocmask (SIG_BLOCK, &set, &saved); \ - } while (0) - -#define SIGNALS_RESTORE(saved) \ - sigprocmask (SIG_SETMASK, &saved, (sigset_t *)NULL) - - -#else /* HAVE_POSIX_SIGNALS */ -#ifdef HAVE_BSD_SIGNALS - /* BSD signals */ - -#define SIGNALS_UNBLOCK sigsetmask (0) -#define SIGNALS_DECLARE_SAVED(name) int name -#define SIGNALS_BLOCK(SIG, saved) saved = sigblock (sigmask (SIG)) -#define SIGNALS_RESTORE(saved) sigsetmask (saved) - - -#else /* HAVE_BSD_SIGNALS */ - /* None of the Above */ - -#define SIGNALS_UNBLOCK /* nothing */ -#define SIGNALS_DECLARE_SAVED(name) /* nothing */ -#define SIGNALS_BLOCK(SIG, saved) /* nothing */ -#define SIGNALS_RESTORE(saved) /* nothing */ - - -#endif /* HAVE_BSD_SIGNALS */ -#endif /* HAVE_POSIX_SIGNALS */ - -#if !defined (strchr) -extern char *strchr (); -#endif -#if !defined (strrchr) -extern char *strrchr (); -#endif -#ifdef __STDC__ -#include <stddef.h> -extern size_t strlen (const char *s); -#endif /* __STDC__ */ - -/* End of signal handling definitions. */ -#endif /* !_RLDEFS_H */ diff --git a/gnu/usr.bin/binutils/readline/rltty.c b/gnu/usr.bin/binutils/readline/rltty.c deleted file mode 100644 index eae111bbdde..00000000000 --- a/gnu/usr.bin/binutils/readline/rltty.c +++ /dev/null @@ -1,675 +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. */ -#include "sysdep.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" -#include "readline.h" - -#if !defined (errno) -extern int errno; -#endif /* !errno */ - -extern int readline_echoing_p; -extern int _rl_eof_char; - -#if defined (__GO32__) -# include <sys/pc.h> -# undef HANDLE_SIGNALS -#endif /* __GO32__ */ - -/* **************************************************************** */ -/* */ -/* 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 = 0; - -/* 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; -} - -/* **************************************************************** */ -/* */ -/* Controlling the Meta Key */ -/* */ -/* **************************************************************** */ - -extern int term_has_meta; -extern char *term_mm; -extern char *term_mo; - -#ifdef __STDC__ -/* Provide prototype to silence type conversion warnings on systems - that provide prototypes for tputs. */ -static int outchar (int); -#endif - -static int -outchar (c) - int c; -{ - return putc (c, rl_outstream); -} - -/* Turn on/off the meta key depending on ON. */ -#if !defined (MINIMAL) -static void -control_meta_key (on) - int on; -{ - if (term_has_meta) - { - if (on && term_mm) - tputs (term_mm, 1, outchar); - else if (!on && term_mo) - tputs - (term_mo, 1, outchar); - } -} -#endif /* !MINIMAL */ - -/* **************************************************************** */ -/* */ -/* Saving and Restoring the TTY */ -/* */ -/* **************************************************************** */ - -/* Non-zero means that the terminal is in a prepped state. */ -static int terminal_prepped = 0; - -/* If non-zero, means that this process has called tcflow(fd, TCOOFF) - and output is suspended. */ -#if defined (__ksr1__) -static int ksrflow = 0; -#endif -#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; -{ - 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; -} - -set_tty_settings (tty, tiop) - int tty; - TIOTYPE *tiop; -{ - if (tiop->flags & SGTTY_SET) - { - ioctl (tty, TIOCSETN, &(tiop->sgttyb)); - tiop->flags &= ~SGTTY_SET; - } - -#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 (MINIMAL) - 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 /* !MINIMAL */ -} -#endif /* defined (NEW_TTY_DRIVER) */ - -#if !defined (NEW_TTY_DRIVER) && !defined(MINIMAL) - -#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)) -# define SETATTR(tty, tiop) (tcsetattr (tty, TCSANOW, tiop)) -#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; - -static int -get_tty_settings (tty, tiop) - int tty; - TIOTYPE *tiop; -{ - while (GETATTR (tty, tiop) < 0) - { - if (errno != EINTR) - return -1; - errno = 0; - } - 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; - - /* 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 /* !defined (NEW_TTY_DRIVER) && !defined(MINIMAL) */ - -/* Put the terminal in CBREAK mode so that we can detect key presses. */ -void -rl_prep_terminal (meta_flag) - int meta_flag; -{ -#if !defined (MINIMAL) - int tty = fileno (rl_instream); - TIOTYPE tio; - - if (terminal_prepped) - return; - - /* Try to keep this function from being INTerrupted. */ - block_sigint (); - - 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; - } - - control_meta_key (1); - terminal_prepped = 1; - - release_sigint (); -#endif /* !MINIMAK */ -} - -/* Restore the terminal's normal settings and modes. */ -void -rl_deprep_terminal () -{ -#if !defined (MINIMAL) - int tty = fileno (rl_instream); - - if (!terminal_prepped) - return; - - /* Try to keep this function from being INTerrupted. */ - block_sigint (); - - if (set_tty_settings (tty, &otio) < 0) - { - release_sigint (); - return; - } -#ifdef NEW_TTY_DRIVER - readline_echoing_p = 1; -#endif - - control_meta_key (0); - terminal_prepped = 0; - - release_sigint (); -#endif /* !MINIMAL */ -} - -/* **************************************************************** */ -/* */ -/* Bogus Flow Control */ -/* */ -/* **************************************************************** */ - -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 */ -} - -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 */ -} - -/* **************************************************************** */ -/* */ -/* Default Key Bindings */ -/* */ -/* **************************************************************** */ -#if !defined (MINIMAL) -void -rltty_set_default_bindings (kmap) - Keymap kmap; -{ - TIOTYPE ttybuff; - int tty = fileno (rl_instream); - -#if defined (NEW_TTY_DRIVER) - - if (get_tty_settings (tty, &ttybuff) == 0) - { - if (ttybuff.flags & SGTTY_SET) - { - int erase, kill; - - erase = ttybuff.sgttyb.sg_erase; - kill = ttybuff.sgttyb.sg_kill; - - if (erase != -1 && kmap[erase].type == ISFUNC) - kmap[erase].function = rl_rubout; - - if (kill != -1 && kmap[kill].type == ISFUNC) - kmap[kill].function = rl_unix_line_discard; - } - -# if defined (TIOCGLTC) - - if (ttybuff.flags & LTCHARS_SET) - { - int werase, nextc; - - werase = ttybuff.ltchars.t_werasc; - nextc = ttybuff.ltchars.t_lnextc; - - if (werase != -1 && kmap[werase].type == ISFUNC) - kmap[werase].function = rl_unix_word_rubout; - - if (nextc != -1 && kmap[nextc].type == ISFUNC) - kmap[nextc].function = rl_quoted_insert; - } - } -# endif /* TIOCGLTC */ - -#else /* !NEW_TTY_DRIVER */ - - if (get_tty_settings (tty, &ttybuff) == 0) - { - unsigned char erase, kill; - - erase = ttybuff.c_cc[VERASE]; - kill = ttybuff.c_cc[VKILL]; - - if (erase != (unsigned char)_POSIX_VDISABLE && - kmap[erase].type == ISFUNC) - kmap[erase].function = rl_rubout; - - if (kill != (unsigned char)_POSIX_VDISABLE && - kmap[kill].type == ISFUNC) - kmap[kill].function = rl_unix_line_discard; - -# if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER) - { - unsigned char nextc; - - nextc = ttybuff.c_cc[VLNEXT]; - - if (nextc != (unsigned char)_POSIX_VDISABLE && - kmap[nextc].type == ISFUNC) - kmap[nextc].function = rl_quoted_insert; - } -# endif /* VLNEXT && TERMIOS_TTY_DRIVER */ - -# if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER) - { - unsigned char werase; - - werase = ttybuff.c_cc[VWERASE]; - - if (werase != (unsigned char)_POSIX_VDISABLE && - kmap[werase].type == ISFUNC) - kmap[werase].function = rl_unix_word_rubout; - } -# endif /* VWERASE && TERMIOS_TTY_DRIVER */ - } -#endif /* !NEW_TTY_DRIVER */ -} -#endif /* !MINIMAL */ diff --git a/gnu/usr.bin/binutils/readline/search.c b/gnu/usr.bin/binutils/readline/search.c deleted file mode 100644 index bbcd9001af1..00000000000 --- a/gnu/usr.bin/binutils/readline/search.c +++ /dev/null @@ -1,278 +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. */ - -/* For alloca on AIX. CYGNUS LOCAL. */ -#include "sysdep.h" - -#include <stdio.h> - -#if defined (__GNUC__) -# define alloca __builtin_alloca -#else -# if defined (sparc) || defined (HAVE_ALLOCA_H) -# include <alloca.h> -# endif -#endif - -#include "readline.h" -#include "history.h" - -extern char *xmalloc (), *xrealloc (); - -/* Variables imported from readline.c */ -extern int rl_point, rl_end, rl_line_buffer_len; -extern Keymap _rl_keymap; -extern char *rl_prompt; -extern char *rl_line_buffer; -extern HIST_ENTRY *saved_line_for_history; - -static char *noninc_search_string = (char *) NULL; -static int noninc_history_pos = 0; - -/* 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; - 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 (); - history_set_pos (oldpos); - - { - int line_len; - - line_len = strlen (entry->line); - if (line_len >= rl_line_buffer_len) - rl_extend_line_buffer (line_len); - strcpy (rl_line_buffer, entry->line); - } - - rl_undo_list = (UNDO_LIST *)entry->data; - rl_end = strlen (rl_line_buffer); - rl_point = 0; - rl_clear_message (); - - if (saved_line_for_history) - 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, pmtlen; - 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; - - pmtlen = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0; - p = (char *)alloca (2 + pmtlen); - if (pmtlen) - strcpy (p, rl_prompt); - p[pmtlen] = pchar ? pchar : ':'; - p[pmtlen + 1] = '\0'; - - rl_message (p, 0, 0); - - /* 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; - return; - } - /* FALLTHROUGH */ - - case CTRL('W'): - case CTRL('U'): - rl_dispatch (c, _rl_keymap); - 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 (); - return; - - default: - rl_insert (1, c); - break; - } - rl_redisplay (); - } - - 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 (); - 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); - } - - 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 `?'. */ -rl_noninc_forward_search (count, key) - int count, key; -{ - if (key == '?') - noninc_search (1, '?'); - else - noninc_search (1, 0); - return 0; -} - -/* Reverse search the history list for a string. If the vi-mode code - calls this, KEY will be `/'. */ -rl_noninc_reverse_search (count, key) - int count, key; -{ - if (key == '/') - noninc_search (-1, '/'); - else - noninc_search (-1, 0); - return 0; -} - -/* Search forward through the history list for the last string searched - for. If there is no saved search string, abort. */ -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. */ -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; -} diff --git a/gnu/usr.bin/binutils/readline/signals.c b/gnu/usr.bin/binutils/readline/signals.c deleted file mode 100644 index cb2c365ab93..00000000000 --- a/gnu/usr.bin/binutils/readline/signals.c +++ /dev/null @@ -1,247 +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. */ - -#include <stdio.h> -#include <sys/types.h> -#include <fcntl.h> -#include <signal.h> - -/* This is needed to include support for TIOCGWINSZ and window resizing. */ -#if defined (OSF1) || defined (BSD386) || defined (_386BSD) || defined (__BSD_4_4__) || defined (AIX) -# include <sys/ioctl.h> -#endif /* OSF1 || BSD386 || _386BSD || __BSD_4_4__ || AIX */ - -#include <errno.h> -/* Not all systems declare ERRNO in errno.h... and some systems #define it! */ -#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" -#include "history.h" - -static void cr (); - -extern int readline_echoing_p; -extern int rl_pending_input; - -extern int _rl_meta_flag; - -#ifdef __STDC__ -extern int _rl_output_character_function (int); -#else -extern int _rl_output_character_function (); -#endif - -extern void free_undo_list (); - -#if defined (VOID_SIGHANDLER) -# define sighandler void -#else -# define sighandler int -#endif /* VOID_SIGHANDLER */ - -/* This typedef is equivalant to the one for Function; it allows us - to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */ -typedef sighandler SigHandler (); - -/* **************************************************************** */ -/* */ -/* Signal Handling */ -/* */ -/* **************************************************************** */ - -#if defined (HANDLE_SIGNALS) - -#if defined (SIGWINCH) -static SigHandler *old_sigwinch = (SigHandler *)NULL; - -static sighandler -rl_handle_sigwinch (sig) - int sig; -{ - if (readline_echoing_p) - { - _rl_set_screen_size (fileno (rl_instream), 1); - - cr (); /* was crlf () */ - rl_forced_update_display (); - } - - if (old_sigwinch && - old_sigwinch != (SigHandler *)SIG_IGN && - old_sigwinch != (SigHandler *)SIG_DFL) - (*old_sigwinch) (sig); -#if !defined (VOID_SIGHANDLER) - return (0); -#endif /* VOID_SIGHANDLER */ -} -#endif /* SIGWINCH */ - -/* Interrupt handling. */ -static SigHandler - *old_int = (SigHandler *)NULL, - *old_tstp = (SigHandler *)NULL, - *old_ttou = (SigHandler *)NULL, - *old_ttin = (SigHandler *)NULL, - *old_cont = (SigHandler *)NULL, - *old_alrm = (SigHandler *)NULL; - -/* Handle an interrupt character. */ -static sighandler -rl_signal_handler (sig) - int sig; -{ -#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) - signal (sig, SIG_IGN); -#endif /* !HAVE_BSD_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: - rl_clean_up_for_exit (); - rl_deprep_terminal (); - rl_clear_signals (); - rl_pending_input = 0; - -#ifndef _WIN32 - kill (getpid (), sig); -#endif - - SIGNALS_UNBLOCK; - - rl_prep_terminal (_rl_meta_flag); - rl_set_signals (); - } - -#if !defined (VOID_SIGHANDLER) - return (0); -#endif /* !VOID_SIGHANDLER */ -} - -#if defined (HAVE_POSIX_SIGNALS) -static SigHandler * -rl_set_sighandler (sig, handler) - int sig; - SigHandler *handler; -{ - struct sigaction act, oact; - - act.sa_handler = handler; - act.sa_flags = 0; - sigemptyset (&act.sa_mask); - sigemptyset (&oact.sa_mask); - sigaction (sig, &act, &oact); - return (oact.sa_handler); -} - -#else /* !HAVE_POSIX_SIGNALS */ -# define rl_set_sighandler(sig, handler) (SigHandler *)signal (sig, handler) -#endif /* !HAVE_POSIX_SIGNALS */ - -rl_set_signals () -{ - old_int = (SigHandler *)rl_set_sighandler (SIGINT, rl_signal_handler); - if (old_int == (SigHandler *)SIG_IGN) - signal (SIGINT, SIG_IGN); - - old_alrm = (SigHandler *)rl_set_sighandler (SIGALRM, rl_signal_handler); - if (old_alrm == (SigHandler *)SIG_IGN) - signal (SIGALRM, SIG_IGN); - -#if defined (SIGTSTP) - old_tstp = (SigHandler *)rl_set_sighandler (SIGTSTP, rl_signal_handler); - if (old_tstp == (SigHandler *)SIG_IGN) - signal (SIGTSTP, SIG_IGN); -#endif -#if defined (SIGTTOU) - old_ttou = (SigHandler *)rl_set_sighandler (SIGTTOU, rl_signal_handler); - old_ttin = (SigHandler *)rl_set_sighandler (SIGTTIN, rl_signal_handler); - - if (old_tstp == (SigHandler *)SIG_IGN) - { - signal (SIGTTOU, SIG_IGN); - signal (SIGTTIN, SIG_IGN); - } -#endif - -#if defined (SIGWINCH) - old_sigwinch = - (SigHandler *) rl_set_sighandler (SIGWINCH, rl_handle_sigwinch); -#endif -} - -rl_clear_signals () -{ - rl_set_sighandler (SIGINT, old_int); - rl_set_sighandler (SIGALRM, old_alrm); - -#if defined (SIGTSTP) - signal (SIGTSTP, old_tstp); -#endif - -#if defined (SIGTTOU) - signal (SIGTTOU, old_ttou); - signal (SIGTTIN, old_ttin); -#endif - -#if defined (SIGWINCH) - signal (SIGWINCH, old_sigwinch); -#endif -} - -/* Move to the start of the current line. */ -static void -cr () -{ - extern char *term_cr; - - if (term_cr) - tputs (term_cr, 1, _rl_output_character_function); -} -#endif /* HANDLE_SIGNALS */ diff --git a/gnu/usr.bin/binutils/readline/sysdep-aix.h b/gnu/usr.bin/binutils/readline/sysdep-aix.h deleted file mode 100644 index 40c983a19c7..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-aix.h +++ /dev/null @@ -1,6 +0,0 @@ -/* System-dependent stuff for AIX 3.1 on RS/6000 */ - -#pragma alloca -#include <sys/types.h> -#include <dirent.h> -typedef struct dirent dirent; diff --git a/gnu/usr.bin/binutils/readline/sysdep-cxux7.h b/gnu/usr.bin/binutils/readline/sysdep-cxux7.h deleted file mode 100644 index eba3644287a..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-cxux7.h +++ /dev/null @@ -1,18 +0,0 @@ -/* System-dependent stuff, for Harris CX/UX systems */ - -#ifndef alloca /* May be a macro, with args. */ -extern char *alloca (); -#endif - -#include <sys/types.h> /* Needed by dirent.h */ -#include <sys/stream.h> -#include <dirent.h> -typedef struct dirent dirent; - -/* SVR4 systems should use <termios.h> rather than <termio.h>. */ -#define _POSIX_VERSION - -/* SVR4 systems need _POSIX_SOURCE defined to suppress 'struct winsize' - definition in <termios.h>, since it's unconditionally defined in - <sys/ptem.h>. */ -#define _POSIX_SOURCE diff --git a/gnu/usr.bin/binutils/readline/sysdep-irix.h b/gnu/usr.bin/binutils/readline/sysdep-irix.h deleted file mode 100644 index e69de15a80e..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-irix.h +++ /dev/null @@ -1,12 +0,0 @@ -/* System-dependent stuff, for SGI irix */ - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -extern char *alloca (); -#endif - -#include <sys/types.h> -#include <sys/stream.h> -#include <sys/dir.h> -typedef struct direct dirent; diff --git a/gnu/usr.bin/binutils/readline/sysdep-linux.h b/gnu/usr.bin/binutils/readline/sysdep-linux.h deleted file mode 100644 index 46ea5d49a94..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-linux.h +++ /dev/null @@ -1,24 +0,0 @@ -/* System-dependent stuff, for Linux systems. Known to be good for - Linux/Alpha, but should work for all other platforms, too. */ - -/* - * This is important on Linux/Alpha where sizeof(void*) != sizeof(int). - */ -#define HAVE_VARARGS_H - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -#if defined (sparc) && defined (sun) -#include <alloca.h> -#endif -#ifndef alloca /* May be a macro, with args. */ -extern char *alloca (); -#endif -#endif - -#include <sys/types.h> /* Needed by dirent.h */ -#include <string.h> - -#include <dirent.h> -typedef struct dirent dirent; diff --git a/gnu/usr.bin/binutils/readline/sysdep-norm.h b/gnu/usr.bin/binutils/readline/sysdep-norm.h deleted file mode 100644 index 6cf1f347add..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-norm.h +++ /dev/null @@ -1,42 +0,0 @@ -/* System-dependent stuff, for ``normal'' systems */ -/* If you think you need to change this file, then you are wrong. In order to - avoid a huge ugly mass of nested #ifdefs, you should create a new file just - for your system, which contains exactly those #includes and definitions that - your system needs, AND NOTHING MORE! Then, add that file to the appropriate - place in configure.in, and viola, you are done. sysdep-sunos4.h is a good - example of how to do this. */ - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -#if defined (sparc) && defined (sun) -#include <alloca.h> -#endif -#ifndef alloca /* May be a macro, with args. */ -extern char *alloca (); -#endif -#endif - -#include <sys/types.h> /* Needed by dirent.h */ - -#if defined (USG) && defined (TIOCGWINSZ) -#include <sys/stream.h> -#if defined (USGr4) || defined (USGr3) -#include <sys/ptem.h> -#endif /* USGr4 */ -#endif /* USG && TIOCGWINSZ */ - -#ifndef _WIN32 -#include <dirent.h> -typedef struct dirent dirent; -#endif - -/* SVR4 systems should use <termios.h> rather than <termio.h>. */ - -#if defined (USGr4) -#define _POSIX_VERSION -#endif - -#if defined _WIN32 && !defined __GNUC__ -#include <malloc.h> -#endif diff --git a/gnu/usr.bin/binutils/readline/sysdep-obsd.h b/gnu/usr.bin/binutils/readline/sysdep-obsd.h deleted file mode 100644 index 88bcdd61325..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-obsd.h +++ /dev/null @@ -1,12 +0,0 @@ -/* System-dependent stuff, for Sony NEwS, Mach, and other systems - in the "old BSD Unix" tradition. */ - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -extern char *alloca (); -#endif - -#include <sys/types.h> -#include <sys/dir.h> -typedef struct direct dirent; diff --git a/gnu/usr.bin/binutils/readline/sysdep-openbsd.h b/gnu/usr.bin/binutils/readline/sysdep-openbsd.h deleted file mode 100644 index 074a06fcca7..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-openbsd.h +++ /dev/null @@ -1,22 +0,0 @@ -/* $OpenBSD: sysdep-openbsd.h,v 1.1 1998/05/17 19:43:25 marc Exp $ - -/* System defines for OpenBSD. - If you think you need to change this file, then you are wrong. In order to - avoid a huge ugly mass of nested #ifdefs, you should create a new file just - for your system, which contains exactly those #includes and definitions that - your system needs, AND NOTHING MORE! Then, add that file to the appropriate - place in configure.in, and viola, you are done. sysdep-sunos4.h is a good - example of how to do this. */ - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -#ifndef alloca /* May be a macro, with args. */ -extern char *alloca (); -#endif -#endif - -#include <sys/types.h> /* Needed by dirent.h */ -#include <dirent.h> -typedef struct dirent dirent; -#include <unistd.h> /* for _POSIX_VERSION */ diff --git a/gnu/usr.bin/binutils/readline/sysdep-sco.h b/gnu/usr.bin/binutils/readline/sysdep-sco.h deleted file mode 100644 index 31af763b447..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-sco.h +++ /dev/null @@ -1,13 +0,0 @@ -/* System-dependent stuff, for SCO systems */ - -#include <malloc.h> - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#endif - -#include <sys/types.h> -#include <sys/stream.h> -#include <sys/ptem.h> -#include <dirent.h> -typedef struct dirent dirent; diff --git a/gnu/usr.bin/binutils/readline/sysdep-sysv4.h b/gnu/usr.bin/binutils/readline/sysdep-sysv4.h deleted file mode 100644 index 558492f3048..00000000000 --- a/gnu/usr.bin/binutils/readline/sysdep-sysv4.h +++ /dev/null @@ -1,26 +0,0 @@ -/* System-dependent stuff, for SVR4 systems */ - -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -#if defined (sparc) && defined (sun) -#include <alloca.h> -#endif -#ifndef alloca /* May be a macro, with args. */ -extern char *alloca (); -#endif -#endif - -#include <sys/types.h> /* Needed by dirent.h */ -#include <sys/stream.h> -#include <sys/ptem.h> -#include <dirent.h> -typedef struct dirent dirent; - -/* SVR4 systems should use <termios.h> rather than <termio.h>. */ -#define _POSIX_VERSION - -/* SVR4 systems need _POSIX_SOURCE defined to suppress 'struct winsize' - definition in <termios.h>, since it's unconditionally defined in - <sys/ptem.h>. */ -#define _POSIX_SOURCE diff --git a/gnu/usr.bin/binutils/readline/tilde.c b/gnu/usr.bin/binutils/readline/tilde.c deleted file mode 100644 index 0055c629572..00000000000 --- a/gnu/usr.bin/binutils/readline/tilde.c +++ /dev/null @@ -1,383 +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. */ - -#include "sysdep.h" - -extern char *getenv(); - -/* CYGNUS LOCAL--bash 1.13 uses <tilde/tilde.h> which would require - GDB to add YET ANOTHER -I directive. No thanks. */ -#include "tilde.h" - -#if !defined(__MSDOS__) && !defined(_WIN32) -#include <pwd.h> -#endif - -#if defined (USG) && !defined (isc386) && !defined (sgi) -extern struct passwd *getpwnam (), *getpwuid (); -#endif - -#include "chardefs.h" - -#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 = (char *)xrealloc (result, 1 + (result_size += (start + 20))); - - strncpy (result + result_index, string, start); - result_index += start; - - /* Advance STRING to the starting tilde. */ - string += start; - - /* Make END be the index of one after the last character of the - username. */ - end = tilde_find_suffix (string); - - /* If both START and END are zero, we are all done. */ - if (!start && !end) - break; - - /* Expand the entire tilde word, and copy it into RESULT. */ - tilde_word = (char *)xmalloc (1 + end); - strncpy (tilde_word, string, end); - tilde_word[end] = '\0'; - string += end; - - expansion = tilde_expand_word (tilde_word); - free (tilde_word); - - len = strlen (expansion); - if ((result_index + len + 1) > result_size) - result = (char *)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; - - dirname = filename ? savestring (filename) : (char *)NULL; - - if (dirname && *dirname == '~') - { - char *temp_name; - if (!dirname[1] || dirname[1] == '/') - { - /* Prepend $HOME to the rest of the string. */ - char *temp_home = getenv ("HOME"); - -#if !defined (__MSDOS__) && !defined (_WIN32) - /* 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; - } -#endif - - temp_name = (char *)alloca (1 + strlen (&dirname[1]) - + (temp_home ? strlen (temp_home) : 0)); - temp_name[0] = '\0'; - if (temp_home) - strcpy (temp_name, temp_home); - strcat (temp_name, &dirname[1]); - free (dirname); - dirname = savestring (temp_name); - } - else - { -#if !defined (__MSDOS__) && !defined (_WIN32) - struct passwd *user_entry; -#endif - char *username = (char *)alloca (257); - int i, c; - - for (i = 1; c = dirname[i]; i++) - { - if (c == '/') - break; - else - username[i - 1] = c; - } - username[i - 1] = '\0'; - -#if !defined (__MSDOS__) && !defined (_WIN32) - if (!(user_entry = getpwnam (username))) - { -#endif - /* 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) - { - temp_name = (char *)alloca (1 + strlen (expansion) - + strlen (&dirname[i])); - strcpy (temp_name, expansion); - strcat (temp_name, &dirname[i]); - free (expansion); - goto return_name; - } - } - /* We shouldn't report errors. */ -#if !defined (__MSDOS__) && !defined (_WIN32) - } - else - { - temp_name = (char *)alloca (1 + strlen (user_entry->pw_dir) - + strlen (&dirname[i])); - strcpy (temp_name, user_entry->pw_dir); - strcat (temp_name, &dirname[i]); -#endif - return_name: - free (dirname); - dirname = savestring (temp_name); -#if !defined (__MSDOS__) && !defined (_WIN32) - } - endpwent (); -#endif - } - } - 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/gnu/usr.bin/binutils/readline/tilde.h b/gnu/usr.bin/binutils/readline/tilde.h deleted file mode 100644 index 726d081ba9c..00000000000 --- a/gnu/usr.bin/binutils/readline/tilde.h +++ /dev/null @@ -1,38 +0,0 @@ -/* tilde.h: Externally available variables and function in libtilde.a. */ - -#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/gnu/usr.bin/binutils/readline/vi_keymap.c b/gnu/usr.bin/binutils/readline/vi_keymap.c deleted file mode 100644 index 24fbc3e8e28..00000000000 --- a/gnu/usr.bin/binutils/readline/vi_keymap.c +++ /dev/null @@ -1,873 +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" - -extern KEYMAP_ENTRY_ARRAY vi_escape_keymap; - -/* The keymap arrays for handling vi mode. */ -KEYMAP_ENTRY_ARRAY vi_movement_keymap = { - /* The regular control keys come first. */ - { ISFUNC, (Function *)0x0 }, /* Control-@ */ - { ISFUNC, (Function *)0x0 }, /* Control-a */ - { ISFUNC, (Function *)0x0 }, /* Control-b */ - { ISFUNC, (Function *)0x0 }, /* Control-c */ - { ISFUNC, rl_vi_eof_maybe }, /* Control-d */ - { ISFUNC, rl_emacs_editing_mode }, /* Control-e */ - { ISFUNC, (Function *)0x0 }, /* Control-f */ - { ISFUNC, rl_abort }, /* Control-g */ - { ISFUNC, rl_backward }, /* Control-h */ - { ISFUNC, (Function *)0x0 }, /* Control-i */ - { ISFUNC, rl_newline }, /* Control-j */ - { ISFUNC, rl_kill_line }, /* Control-k */ - { ISFUNC, rl_clear_screen }, /* Control-l */ - { ISFUNC, rl_newline }, /* Control-m */ - { ISFUNC, rl_get_next_history }, /* Control-n */ - { ISFUNC, (Function *)0x0 }, /* Control-o */ - { ISFUNC, rl_get_previous_history }, /* Control-p */ - { ISFUNC, rl_quoted_insert }, /* Control-q */ - { ISFUNC, rl_reverse_search_history }, /* Control-r */ - { ISFUNC, rl_forward_search_history }, /* Control-s */ - { ISFUNC, rl_transpose_chars }, /* Control-t */ - { ISFUNC, rl_unix_line_discard }, /* Control-u */ - { ISFUNC, rl_quoted_insert }, /* Control-v */ - { ISFUNC, rl_unix_word_rubout }, /* Control-w */ - { ISFUNC, (Function *)0x0 }, /* Control-x */ - { ISFUNC, rl_yank }, /* Control-y */ - { ISFUNC, (Function *)0x0 }, /* Control-z */ - - { ISFUNC, rl_abort }, /* Control-[ */ - { ISFUNC, (Function *)0x0 }, /* Control-\ */ - { ISFUNC, (Function *)0x0 }, /* Control-] */ - { ISFUNC, (Function *)0x0 }, /* Control-^ */ - { ISFUNC, rl_undo_command }, /* Control-_ */ - - /* The start of printing characters. */ - { ISFUNC, rl_forward }, /* SPACE */ - { ISFUNC, (Function *)0x0 }, /* ! */ - { ISFUNC, (Function *)0x0 }, /* " */ - { ISFUNC, rl_vi_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_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, 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, (Function *)0x0 }, /* ` */ - - /* 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, (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_change_char }, /* r */ - { ISFUNC, rl_vi_subst }, /* s */ - { ISFUNC, rl_vi_char_search }, /* t */ - { ISFUNC, rl_undo_command }, /* 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_undo_command }, /* Control-_ */ - - /* The start of printing characters. */ - { ISFUNC, rl_insert }, /* SPACE */ - { ISFUNC, rl_insert }, /* ! */ - { ISFUNC, rl_insert }, /* " */ - { ISFUNC, rl_insert }, /* # */ - { ISFUNC, rl_insert }, /* $ */ - { ISFUNC, rl_insert }, /* % */ - { ISFUNC, rl_insert }, /* & */ - { ISFUNC, rl_insert }, /* ' */ - { ISFUNC, rl_insert }, /* ( */ - { ISFUNC, rl_insert }, /* ) */ - { ISFUNC, rl_insert }, /* * */ - { ISFUNC, rl_insert }, /* + */ - { ISFUNC, rl_insert }, /* , */ - { ISFUNC, rl_insert }, /* - */ - { ISFUNC, rl_insert }, /* . */ - { ISFUNC, rl_insert }, /* / */ - - /* Regular digits. */ - { ISFUNC, rl_insert }, /* 0 */ - { ISFUNC, rl_insert }, /* 1 */ - { ISFUNC, rl_insert }, /* 2 */ - { ISFUNC, rl_insert }, /* 3 */ - { ISFUNC, rl_insert }, /* 4 */ - { ISFUNC, rl_insert }, /* 5 */ - { ISFUNC, rl_insert }, /* 6 */ - { ISFUNC, rl_insert }, /* 7 */ - { ISFUNC, rl_insert }, /* 8 */ - { ISFUNC, rl_insert }, /* 9 */ - - /* 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 */ -}; - -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_undo_command }, /* 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 */ -}; diff --git a/gnu/usr.bin/binutils/readline/vi_mode.c b/gnu/usr.bin/binutils/readline/vi_mode.c deleted file mode 100644 index cf717ec5b5b..00000000000 --- a/gnu/usr.bin/binutils/readline/vi_mode.c +++ /dev/null @@ -1,1224 +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. */ - -/* **************************************************************** */ -/* */ -/* VI Emulation Mode */ -/* */ -/* **************************************************************** */ -#if defined (VI_MODE) - -#include <sys/types.h> - -#if defined (STATIC_MALLOC) -static char *xmalloc (), *xrealloc (); -#else -extern char *xmalloc (), *xrealloc (); -#endif /* STATIC_MALLOC */ - -#include <stdio.h> - -/* Some standard library routines. */ -#include "rldefs.h" -#include "readline.h" -#include "history.h" - -#ifndef digit -#define digit(c) ((c) >= '0' && (c) <= '9') -#endif - -#ifndef isletter -#define isletter(c) (((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z')) -#endif - -#ifndef digit_value -#define digit_value(c) ((c) - '0') -#endif - -#ifndef member -#define member(c, s) ((c) ? (char *)strchr ((s), (c)) : 0) -#endif - -#ifndef isident -#define isident(c) ((isletter(c) || digit(c) || c == '_')) -#endif - -#ifndef exchange -#define exchange(x, y) {int temp = x; x = y; y = temp;} -#endif - -#ifndef VI_COMMENT_BEGIN_DEFAULT -#define VI_COMMENT_BEGIN_DEFAULT "#" -#endif - -/* 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 void rl_extend_line_buffer (); -extern int rl_vi_check (), rl_digit_loop1 (); - -/* Non-zero means enter insertion mode. */ -int _rl_vi_doing_insert = 0; - -/* String inserted into the line by rl_vi_comment (). */ -char *rl_vi_comment_begin = (char *)NULL; - -/* *** UNCLEAN *** */ -/* 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 = (Keymap)NULL; - -/* The number of characters inserted in the last replace operation. */ -static int vi_replace_count = 0; - -int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */ -int _rl_vi_last_repeat = 1; -int _rl_vi_last_arg_sign = 1; -static int _rl_vi_last_motion = 0; -static int _rl_vi_last_search_char = 0; -static int _rl_vi_last_replacement = 0; - -static int vi_redoing = 0; - -/* Text modification commands. These are the `redoable' commands. */ -static char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; - -void -rl_vi_set_last () -{ - _rl_vi_last_command = 'i'; - _rl_vi_last_repeat = 1; - _rl_vi_last_arg_sign = 1; - _rl_vi_last_motion = 0; -} - -/* Is the command C a VI mode text modification command? */ -int -rl_vi_textmod_command (c) - int c; -{ - return (member (c, vi_textmod) != (char *)NULL); -} - -/* 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. */ -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; - rl_dispatch (_rl_vi_last_command, _rl_keymap); - vi_redoing = 0; - - return (0); -} - -/* Yank the nth arg from the previous line into this line at point. */ -rl_vi_yank_arg (count) - int count; -{ - /* vi mode is defined to insert a space before the last argument. */ - rl_insert (1, ' '); - - /* 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); - - rl_vi_insertion_mode (); - return (0); -} - -/* With an argument, move back that many history lines, else move to the - beginning of history. */ -rl_vi_fetch_history (count, c) - int count, c; -{ - int current = where_history (); - - /* 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) - { - int wanted = history_base + current - count; - if (wanted <= 0) - rl_beginning_of_history (0, 0); - else - rl_get_previous_history (wanted); - } - else - rl_beginning_of_history (count, 0); - return (0); -} - -/* Search again for the last thing searched for. */ -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. */ -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. */ -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_insertion_mode (); - return (0); -} - -/* Tilde expansion for vi mode. */ -rl_vi_tilde_expand (ignore, key) - int ignore, key; -{ - rl_tilde_expand (0, key); - rl_vi_insertion_mode (); - return (0); -} - -/* Previous word in vi mode. */ -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 (uppercase_p (key)) - rl_vi_bWord (count); - else - rl_vi_bword (count); - - return (0); -} - -/* Next word in vi mode. */ -rl_vi_next_word (count, key) - int count; -{ - if (count < 0) - return (rl_vi_prev_word (-count, key)); - - if (rl_point >= (rl_end - 1)) - { - ding (); - return (0); - } - - if (uppercase_p (key)) - rl_vi_fWord (count); - else - rl_vi_fword (count); - return (0); -} - -/* Move to the end of the ?next? word. */ -rl_vi_end_word (count, key) - int count, key; -{ - if (count < 0) - { - ding (); - return -1; - } - - if (uppercase_p (key)) - rl_vi_eWord (count); - else - rl_vi_eword (count); - return (0); -} - -/* Move forward a word the way that 'W' does. */ -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); -} - -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); -} - -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); -} - -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); -} - -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); -} - -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); -} - -rl_vi_insert_beg () -{ - rl_beg_of_line (); - rl_vi_insertion_mode (); - return (0); -} - -rl_vi_append_mode () -{ - if (rl_point < rl_end) - rl_point += 1; - rl_vi_insertion_mode (); - return (0); -} - -rl_vi_append_eol () -{ - rl_end_of_line (); - rl_vi_append_mode (); - return (0); -} - -/* What to do in the case of C-d. */ -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. */ -rl_vi_insertion_mode () -{ - _rl_keymap = vi_insertion_keymap; - return (0); -} - -rl_vi_movement_mode () -{ - if (rl_point > 0) - rl_backward (1); - - rl_vi_set_last (); - - _rl_keymap = vi_movement_keymap; - vi_done_inserting (); - return (0); -} - -vi_done_inserting () -{ - if (_rl_vi_doing_insert) - { - rl_end_undo_group (); - _rl_vi_doing_insert = 0; - } - return (0); -} - -rl_vi_arg_digit (count, c) - int count, c; -{ - if (c == '0' && rl_numeric_arg == 1 && !rl_explicit_arg) - return (rl_beg_of_line ()); - else - return (rl_digit_argument (count, c)); -} - -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 (uppercase_p (rl_line_buffer[rl_point])) - c = to_lower (rl_line_buffer[rl_point]); - else if (lowercase_p (rl_line_buffer[rl_point])) - c = to_upper (rl_line_buffer[rl_point]); - else - { - /* Just skip over characters neither upper nor lower case. */ - rl_forward (1); - 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); - } - return (0); -} - -rl_vi_put (count, key) - int count, key; -{ - if (!uppercase_p (key) && (rl_point + 1 <= rl_end)) - rl_point++; - - rl_yank (); - rl_backward (1); - return (0); -} - -rl_vi_check () -{ - if (rl_point && rl_point == rl_end) - rl_point--; - return (0); -} - -rl_vi_column (count) -{ - if (count > rl_end) - rl_end_of_line (); - 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 (digit (c)) - { - save = rl_numeric_arg; - rl_numeric_arg = digit_value (c); - rl_digit_loop1 (); - rl_numeric_arg *= save; - c = rl_read_key (); /* real command */ - *nextkey = c; - } - else if ((key == 'd' && c == 'd') || - (key == 'y' && c == 'y') || - (key == 'c' && c == 'c')) - { - rl_mark = rl_end; - rl_beg_of_line (); - _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 ((c == 'w' || c == 'W') && (rl_point < rl_end) && - !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' && (to_upper (c) == 'W')) - { - while (rl_point && whitespace (rl_line_buffer[rl_point])) - rl_point--; - - /* 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? */ -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 (numeric (c)) - { - if (rl_explicit_arg) - rl_numeric_arg = (rl_numeric_arg * 10) + digit_value (c); - else - rl_numeric_arg = digit_value (c); - rl_explicit_arg = 1; - } - else - { - rl_clear_message (); - rl_stuff_char (key); - break; - } - } - return (0); -} - -rl_vi_delete_to (count, key) - int count, key; -{ - int c; - - if (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^0%bB", c) == 0) && (rl_mark < rl_end)) - rl_mark++; - - rl_kill_text (rl_point, rl_mark); - return (0); -} - -rl_vi_change_to (count, key) - int count, key; -{ - int c, start_pos; - - if (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^0%bB", c) == 0) && (rl_mark < rl_end)) - rl_mark++; - - /* The cursor never moves with c[wW]. */ - if ((to_upper (c) == 'W') && rl_point < start_pos) - rl_point = start_pos; - - rl_begin_undo_group (); - _rl_vi_doing_insert = 1; - rl_kill_text (rl_point, rl_mark); - rl_vi_insertion_mode (); - - return (0); -} - -rl_vi_yank_to (count, key) - int count, key; -{ - int c, save = rl_point; - - if (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); -} - -rl_vi_delete (count) - int count; -{ - 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); - return (0); -} - -/* Turn the current line into a comment in shell history. - A K*rn shell style function. */ -rl_vi_comment () -{ - rl_beg_of_line (); - - if (rl_vi_comment_begin != (char *)NULL) - rl_insert_text (rl_vi_comment_begin); - else - rl_insert_text (VI_COMMENT_BEGIN_DEFAULT); /* Default. */ - - rl_redisplay (); - rl_newline (1, '\010'); - return (0); -} - -rl_vi_first_print () -{ - return (rl_back_to_indent ()); -} - -rl_back_to_indent (ignore1, ignore2) - int ignore1, ignore2; -{ - rl_beg_of_line (); - while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) - rl_point++; - return (0); -} - -/* 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 */ - -rl_vi_char_search (count, key) - int count, key; -{ - static char target; - static int orig_dir, dir; - int pos; - - 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; - } - } - - pos = rl_point; - - while (count--) - { - if (dir < 0) - { - if (pos == 0) - { - ding (); - return; - } - - pos--; - do - { - if (rl_line_buffer[pos] == target) - { - if (dir == BTO) - rl_point = pos + 1; - else - rl_point = pos; - break; - } - } - while (pos--); - - if (pos < 0) - { - ding (); - return -1; - } - } - else - { /* dir > 0 */ - if (pos >= rl_end) - { - ding (); - return -1; - } - - pos++; - do - { - if (rl_line_buffer[pos] == target) - { - if (dir == FTO) - rl_point = pos - 1; - else - rl_point = pos; - break; - } - } - while (++pos < rl_end); - - if (pos >= (rl_end - 1)) - { - ding (); - return -1; - } - } - } - return (0); -} - -/* Match brackets */ -rl_vi_match () -{ - 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); - - 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; - } -} - -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); - - rl_end_undo_group (); - } - return (0); -} - -rl_vi_subst (count, key) - int count, key; -{ - rl_begin_undo_group (); - _rl_vi_doing_insert = 1; - - if (uppercase_p (key)) - { - rl_beg_of_line (); - rl_kill_line (1); - } - else - rl_delete (count, key); - - rl_end_undo_group (); - - rl_vi_insertion_mode (); - return (0); -} - -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); -} - -rl_vi_overstrike_delete (count) - int count; -{ - 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); - } - - if (vi_replace_count == 0 && _rl_vi_doing_insert) - { - rl_end_undo_group (); - rl_do_undo (); - _rl_vi_doing_insert = 0; - } - return (0); -} - -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 < 127; 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); -} - -/* 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 ;. */ -rl_vi_possible_completions() -{ - int save_pos = rl_point; - - if (rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';') - { - while (rl_line_buffer[rl_point] != ' ' && - rl_line_buffer[rl_point] != ';') - ; - } - else if (rl_line_buffer[rl_point - 1] == ';') - { - ding (); - return (0); - } - - rl_possible_completions (); - rl_point = save_pos; - - return (0); -} - -#endif /* VI_MODE */ diff --git a/gnu/usr.bin/binutils/readline/xmalloc.c b/gnu/usr.bin/binutils/readline/xmalloc.c deleted file mode 100644 index bb68a99bdaf..00000000000 --- a/gnu/usr.bin/binutils/readline/xmalloc.c +++ /dev/null @@ -1,75 +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 (ALREADY_HAVE_XMALLOC) -#else -#include <stdio.h> - -extern char *malloc(); -extern char *realloc(); - -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 = (char *)malloc (bytes); - - if (!temp) - memory_error_and_abort ("xmalloc"); - return (temp); -} - -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 ("xrealloc"); - return (temp); -} - -static void -memory_error_and_abort (fname) - char *fname; -{ - fprintf (stderr, "%s: Out of virtual memory!\n", fname); - abort (); -} -#endif /* !ALREADY_HAVE_XMALLOC */ |