aboutsummaryrefslogtreecommitdiff
path: root/gnu/lib/libreadline
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/lib/libreadline')
-rw-r--r--gnu/lib/libreadline/README.FreeBSD21
-rw-r--r--gnu/lib/libreadline/doc/ChangeLog8
-rw-r--r--gnu/lib/libreadline/doc/hist.texinfo113
-rw-r--r--gnu/lib/libreadline/doc/history.info744
-rw-r--r--gnu/lib/libreadline/doc/inc-hist.texi155
-rw-r--r--gnu/lib/libreadline/doc/readline.info74
-rw-r--r--gnu/lib/libreadline/doc/readline.info-11322
-rw-r--r--gnu/lib/libreadline/doc/readline.info-2978
-rw-r--r--gnu/lib/libreadline/doc/rlman.texinfo111
-rw-r--r--gnu/lib/libreadline/doc/texindex.c1666
-rw-r--r--gnu/lib/libreadline/readline/chardefs.h89
-rw-r--r--gnu/lib/libreadline/readline/history.h149
-rw-r--r--gnu/lib/libreadline/readline/keymaps.h91
-rw-r--r--gnu/lib/libreadline/readline/readline.h267
-rw-r--r--gnu/lib/libreadline/readline/tilde.h38
-rw-r--r--gnu/lib/libreadline/sysdep.h37
-rw-r--r--gnu/lib/libreadline/tcsh_hack.readme27
17 files changed, 0 insertions, 5890 deletions
diff --git a/gnu/lib/libreadline/README.FreeBSD b/gnu/lib/libreadline/README.FreeBSD
deleted file mode 100644
index 6af2775c2eb0..000000000000
--- a/gnu/lib/libreadline/README.FreeBSD
+++ /dev/null
@@ -1,21 +0,0 @@
-The GNU Readline library is a programming tool that provides a
-consistent user interface for recalling lines of previously typed
-input and performing editing tasks on input lines.
-
-paul@freefall.cdrom.com
-
-There was a bug with tcsh: when readline attempt to get tty
-modes from background, it got no-echo editing tcsh mode.
-
-Workaround for this implemented via TIOCGWINSZ/TIOCSWINSZ
-with same winsize structure: it does nothing expect polling
-process from background. Look tcsh_hack.readme for details.
-
-This version is more ctype-oriented than original bash version.
-
-If you want 8-bit clean version, put
- set convert-meta off
- set output-meta on
-in your ~/.inputrc file
-
-ache@astral.msk.su
diff --git a/gnu/lib/libreadline/doc/ChangeLog b/gnu/lib/libreadline/doc/ChangeLog
deleted file mode 100644
index 5f1f506178c3..000000000000
--- a/gnu/lib/libreadline/doc/ChangeLog
+++ /dev/null
@@ -1,8 +0,0 @@
-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/lib/libreadline/doc/hist.texinfo b/gnu/lib/libreadline/doc/hist.texinfo
deleted file mode 100644
index cc80efab2288..000000000000
--- a/gnu/lib/libreadline/doc/hist.texinfo
+++ /dev/null
@@ -1,113 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename history.info
-@settitle GNU History Library
-@c %**end of header (This is for running Texinfo on a region.)
-
-@setchapternewpage odd
-
-@ignore
-last change: Wed Jul 20 09:57:17 EDT 1994
-@end ignore
-
-@set EDITION 2.0
-@set VERSION 2.0
-@set UPDATED 20 July 1994
-@set UPDATE-MONTH July 1994
-
-@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
-@title GNU History Library
-@subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}.
-@subtitle @value{UPDATE-MONTH}
-@author Brian Fox, Free Software Foundation
-@author Chet Ramey, Case Western Reserve University
-
-@page
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-@end titlepage
-
-@ifinfo
-@node Top
-@top GNU History Library
-
-This document describes the GNU History library, a programming tool that
-provides a consistent user interface for recalling lines of previously
-typed input.
-
-@menu
-* Using History Interactively:: GNU History User's Manual.
-* Programming with GNU History:: GNU History Programmer's Manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifinfo
-
-@syncodeindex fn vr
-
-@include hsuser.texinfo
-@include hstech.texinfo
-
-@node Concept Index
-@appendix Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@appendix Function and Variable Index
-@printindex vr
-
-@contents
-@bye
diff --git a/gnu/lib/libreadline/doc/history.info b/gnu/lib/libreadline/doc/history.info
deleted file mode 100644
index 6df0bd9426df..000000000000
--- a/gnu/lib/libreadline/doc/history.info
+++ /dev/null
@@ -1,744 +0,0 @@
-This is Info file history.info, produced by Makeinfo-1.55 from the
-input file hist.texinfo.
-
- 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.
-
- 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.
-
-
-File: history.info, Node: Top, Next: Using History Interactively, Prev: (DIR), Up: (DIR)
-
-GNU History Library
-*******************
-
- This document describes the GNU History library, a programming tool
-that provides a consistent user interface for recalling lines of
-previously typed input.
-
-* 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.
-
-
-File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top
-
-Using History Interactively
-***************************
-
- This chapter describes how to use the GNU History Library
-interactively, from a user's standpoint. It should be considered a
-user's guide. For information on using the GNU History Library in your
-own programs, *note Programming with GNU History::..
-
-* Menu:
-
-* History Interaction:: What it feels like using History as a user.
-
-
-File: history.info, Node: History Interaction, Up: Using History Interactively
-
-History Interaction
-===================
-
- The History library provides a history expansion feature that is
-similar to the history expansion provided by `csh'. The following text
-describes the syntax used 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 "event", and the portions of that line that are
-acted upon are called "words". The line is broken into words in the
-same fashion that Bash does, so that several English (or Unix) words
-surrounded by quotes are considered as one word.
-
-* Menu:
-
-* Event Designators:: How to specify which history line to use.
-* Word Designators:: Specifying which words are of interest.
-* Modifiers:: Modifying the results of substitution.
-
-
-File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
-
-Event Designators
------------------
-
- An event designator is a reference to a command line entry in the
-history list.
-
-`!'
- Start a history substitution, except when followed by a space, tab,
- the end of the line, = or (.
-
-`!!'
- Refer to the previous command. This is a synonym for `!-1'.
-
-`!n'
- Refer to command line N.
-
-`!-n'
- Refer to the command N lines back.
-
-`!string'
- Refer to the most recent command starting with STRING.
-
-`!?string'[`?']
- Refer to the most recent command containing STRING.
-
-`!#'
- The entire command line typed so far.
-
-`^string1^string2^'
- Quick Substitution. Repeat the last command, replacing STRING1
- with STRING2. Equivalent to `!!:s/string1/string2/'.
-
-
-File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
-
-Word Designators
-----------------
-
- A : separates the event specification from the word designator. It
-can be omitted if the word designator begins with a ^, $, * or %.
-Words are numbered from the beginning of the line, with the first word
-being denoted by a 0 (zero).
-
-`0 (zero)'
- The `0'th word. For many applications, this is the command word.
-
-`n'
- The Nth word.
-
-`^'
- The first argument; that is, word 1.
-
-`$'
- The last argument.
-
-`%'
- The word matched by the most recent `?string?' search.
-
-`x-y'
- A range of words; `-Y' abbreviates `0-Y'.
-
-`*'
- All of the words, except the `0'th. This is a synonym for `1-$'.
- It is not an error to use * if there is just one word in the event;
- the empty string is returned in that case.
-
-`x*'
- Abbreviates `x-$'
-
-`x-'
- Abbreviates `x-$' like `x*', but omits the last word.
-
-
-File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
-
-Modifiers
----------
-
- After the optional word designator, you can add a sequence of one or
-more of the following modifiers, each preceded by a :.
-
-`h'
- Remove a trailing pathname component, leaving only the head.
-
-`r'
- Remove a trailing suffix of the form `.'SUFFIX, leaving the
- basename.
-
-`e'
- Remove all but the trailing suffix.
-
-`t'
- Remove all leading pathname components, leaving the tail.
-
-`p'
- Print the new command but do not execute it.
-
-`s/old/new/'
- Substitute NEW for the first occurrence of OLD in the event line.
- Any delimiter may be used in place of /. The delimiter may be
- quoted in OLD and NEW with a single backslash. If & appears in
- NEW, it is replaced by OLD. A single backslash will quote the &.
- The final delimiter is optional if it is the last character on the
- input line.
-
-`&'
- Repeat the previous substitution.
-
-`g'
- Cause changes to be applied over the entire event line. Used in
- conjunction with `s', as in `gs/old/new/', or with `&'.
-
-
-File: history.info, Node: Programming with GNU History, Next: Concept Index, Prev: Using History Interactively, Up: Top
-
-Programming with GNU History
-****************************
-
- This chapter describes how to interface programs that you write with
-the GNU History Library. It should be considered a technical guide.
-For information on the interactive use of GNU History, *note 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.
-
-
-File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History
-
-Introduction to History
-=======================
-
- Many programs read input from the user a line at a time. The GNU
-History library is able to keep track of those lines, associate
-arbitrary data with each line, and utilize information from previous
-lines in composing new ones.
-
- The programmer using the History library has available functions for
-remembering lines on a history list, associating arbitrary data with a
-line, removing lines from the list, searching through the list for a
-line containing an arbitrary text string, and referencing any line in
-the list directly. In addition, a history "expansion" function is
-available which provides for a consistent user interface across
-different programs.
-
- The user using programs written with the History library has the
-benefit of a consistent user interface with a set of well-known
-commands for manipulating the text of previous lines and using that text
-in new commands. The basic history manipulation commands are similar to
-the history substitution provided by `csh'.
-
- If the programmer desires, he can use the Readline library, which
-includes some history manipulation by default, and has the added
-advantage of command line editing.
-
-
-File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History
-
-History Storage
-===============
-
- The history list is an array of history entries. A history entry is
-declared as follows:
-
- typedef struct _hist_entry {
- char *line;
- char *data;
- } HIST_ENTRY;
-
- The history list itself might therefore be declared as
-
- HIST_ENTRY **the_history_list;
-
- The state of the History library is encapsulated into a single
-structure:
-
- /* A structure used to pass the current state of the history stuff around. */
- typedef struct _hist_state {
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
- int flags;
- } HISTORY_STATE;
-
- If the flags member includes `HS_STIFLED', the history has been
-stifled.
-
-
-File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History
-
-History Functions
-=================
-
- This section describes the calling sequence for the various functions
-present in GNU History.
-
-* Menu:
-
-* Initializing History and State Management:: Functions to call when you
- want to use history in a
- program.
-* History List Management:: Functions used to manage the list
- of history entries.
-* Information About the History List:: Functions returning information about
- the history list.
-* Moving Around the History List:: Functions used to change the position
- in the history list.
-* Searching the History List:: Functions to search the history list
- for entries containing a string.
-* Managing the History File:: Functions that read and write a file
- containing the history list.
-* History Expansion:: Functions to perform csh-like history
- expansion.
-
-
-File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions
-
-Initializing History and State Management
------------------------------------------
-
- This section describes functions used to initialize and manage the
-state of the History library when you want to use the history functions
-in your program.
-
- - Function: void using_history ()
- Begin a session in which the history functions might be used. This
- initializes the interactive variables.
-
- - Function: HISTORY_STATE * history_get_history_state ()
- Return a structure describing the current state of the input
- history.
-
- - Function: void history_set_history_state (HISTORY_STATE *state)
- Set the state of the history list according to STATE.
-
-
-File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions
-
-History List Management
------------------------
-
- These functions manage individual entries on the history list, or set
-parameters managing the list itself.
-
- - Function: void add_history (char *string)
- Place STRING at the end of the history list. The associated data
- field (if any) is set to `NULL'.
-
- - Function: HIST_ENTRY * remove_history (int which)
- Remove history entry at offset WHICH from the history. The
- removed element is returned so you can free the line, data, and
- containing structure.
-
- - Function: HIST_ENTRY * replace_history_entry (int which, char *line,
- char *data)
- Make the history entry at offset WHICH have LINE and DATA. This
- returns the old entry so you can dispose of the data. In the case
- of an invalid WHICH, a `NULL' pointer is returned.
-
- - Function: void stifle_history (int max)
- Stifle the history list, remembering only the last MAX entries.
-
- - Function: int unstifle_history ()
- Stop stifling the history. This returns the previous amount the
- history was stifled. The value is positive if the history was
- stifled, negative if it wasn't.
-
- - Function: int history_is_stifled ()
- Returns non-zero if the history is stifled, zero if it is not.
-
-
-File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions
-
-Information About the History List
-----------------------------------
-
- These functions return information about the entire history list or
-individual list entries.
-
- - Function: HIST_ENTRY ** history_list ()
- Return a `NULL' terminated array of `HIST_ENTRY' which is the
- current input history. Element 0 of this list is the beginning of
- time. If there is no history, return `NULL'.
-
- - Function: int where_history ()
- Returns the offset of the current history element.
-
- - Function: HIST_ENTRY * current_history ()
- Return the history entry at the current position, as determined by
- `where_history ()'. If there is no entry there, return a `NULL'
- pointer.
-
- - Function: HIST_ENTRY * history_get (int offset)
- Return the history entry at position OFFSET, starting from
- `history_base'. If there is no entry there, or if OFFSET is
- greater than the history length, return a `NULL' pointer.
-
- - Function: int history_total_bytes ()
- Return the number of bytes that the primary history entries are
- using. This function returns the sum of the lengths of all the
- lines in the history.
-
-
-File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions
-
-Moving Around the History List
-------------------------------
-
- These functions allow the current index into the history list to be
-set or changed.
-
- - Function: int history_set_pos (int pos)
- Set the position in the history list to POS, an absolute index
- into the list.
-
- - Function: HIST_ENTRY * previous_history ()
- Back up the current history offset to the previous history entry,
- and return a pointer to that entry. If there is no previous
- entry, return a `NULL' pointer.
-
- - Function: HIST_ENTRY * next_history ()
- Move the current history offset forward to the next history entry,
- and return the a pointer to that entry. If there is no next
- entry, return a `NULL' pointer.
-
-
-File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions
-
-Searching the History List
---------------------------
-
- These functions allow searching of the history list for entries
-containing a specific string. Searching may be performed both forward
-and backward from the current history position. The search may be
-"anchored", meaning that the string must match at the beginning of the
-history entry.
-
- - Function: int history_search (char *string, int direction)
- Search the history for STRING, starting at the current history
- offset. If DIRECTION < 0, then the search is through previous
- entries, else through subsequent. If STRING is found, then the
- current history index is set to that history entry, and the value
- returned is the offset in the line of the entry where STRING was
- found. Otherwise, nothing is changed, and a -1 is returned.
-
- - Function: int history_search_prefix (char *string, int direction)
- Search the history for STRING, starting at the current history
- offset. The search is anchored: matching lines must begin with
- STRING. If DIRECTION < 0, then the search is through previous
- entries, else through subsequent. If STRING is found, then the
- current history index is set to that entry, and the return value
- is 0. Otherwise, nothing is changed, and a -1 is returned.
-
- - Function: int history_search_pos (char *string, int direction, int
- pos)
- Search for STRING in the history list, starting at POS, an
- absolute index into the list. If DIRECTION is negative, the search
- proceeds backward from POS, otherwise forward. Returns the
- absolute index of the history element where STRING was found, or
- -1 otherwise.
-
-
-File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions
-
-Managing the History File
--------------------------
-
- The History library can read the history from and write it to a file.
-This section documents the functions for managing a history file.
-
- - Function: int read_history (char *filename)
- Add the contents of FILENAME to the history list, a line at a
- time. If FILENAME is `NULL', then read from `~/.history'.
- Returns 0 if successful, or errno if not.
-
- - Function: int read_history_range (char *filename, int from, int to)
- Read a range of lines from FILENAME, adding them to the history
- list. Start reading at line FROM and end at TO. If FROM is zero,
- start at the beginning. If TO is less than FROM, then read until
- the end of the file. If FILENAME is `NULL', then read from
- `~/.history'. Returns 0 if successful, or `errno' if not.
-
- - Function: int write_history (char *filename)
- Write the current history to FILENAME, overwriting FILENAME if
- necessary. If FILENAME is `NULL', then write the history list to
- `~/.history'. Values returned are as in `read_history ()'.
-
- - Function: int append_history (int nelements, char *filename)
- Append the last NELEMENTS of the history list to FILENAME.
-
- - Function: int history_truncate_file (char *filename, int nlines)
- Truncate the history file FILENAME, leaving only the last NLINES
- lines.
-
-
-File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions
-
-History Expansion
------------------
-
- These functions implement `csh'-like history expansion.
-
- - Function: int history_expand (char *string, char **output)
- Expand STRING, placing the result into OUTPUT, a pointer to a
- string (*note History Interaction::.). Returns:
- `0'
- If no expansions took place (or, if the only change in the
- text was the de-slashifying of the history expansion
- character);
-
- `1'
- if expansions did take place;
-
- `-1'
- if there was an error in expansion;
-
- `2'
- if the returned line should only be displayed, but not
- executed, as with the `:p' modifier (*note Modifiers::.).
-
- If an error ocurred in expansion, then OUTPUT contains a
- descriptive error message.
-
- - Function: char * history_arg_extract (int first, int last, char
- *string)
- Extract a string segment consisting of the FIRST through LAST
- arguments present in STRING. Arguments are broken up as in Bash.
-
- - Function: char * get_history_event (char *string, int *cindex, int
- qchar)
- Returns the text of the history event beginning at STRING +
- *CINDEX. *CINDEX is modified to point to after the event
- specifier. At function entry, CINDEX points to the index into
- STRING where the history event specification begins. QCHAR is a
- character that is allowed to end the event specification in
- addition to the "normal" terminating characters.
-
- - Function: char ** history_tokenize (char *string)
- Return an array of tokens parsed out of STRING, much as the shell
- might. The tokens are split on white space and on the characters
- `()<>;&|$', and shell quoting conventions are obeyed.
-
-
-File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History
-
-History Variables
-=================
-
- This section describes the externally visible variables exported by
-the GNU History Library.
-
- - Variable: int history_base
- The logical offset of the first entry in the history list.
-
- - Variable: int history_length
- The number of entries currently stored in the history list.
-
- - Variable: int max_input_history
- The maximum number of history entries. This must be changed using
- `stifle_history ()'.
-
- - Variable: char history_expansion_char
- The character that starts a history event. The default is `!'.
-
- - Variable: char history_subst_char
- The character that invokes word substitution if found at the start
- of a line. The default is `^'.
-
- - Variable: char history_comment_char
- During tokenization, if this character is seen as the first
- character of a word, then it and all subsequent characters up to a
- newline are ignored, suppressing history expansion for the
- remainder of the line. This is disabled by default.
-
- - Variable: char * history_no_expand_chars
- The list of characters which inhibit history expansion if found
- immediately following HISTORY_EXPANSION_CHAR. The default is
- whitespace and `='.
-
-
-File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History
-
-History Programming Example
-===========================
-
- The following program demonstrates simple use of the GNU History
-Library.
-
- main ()
- {
- char line[1024], *t;
- int len, done = 0;
-
- line[0] = 0;
-
- using_history ();
- while (!done)
- {
- printf ("history$ ");
- fflush (stdout);
- t = fgets (line, sizeof (line) - 1, stdin);
- if (t && *t)
- {
- len = strlen (t);
- if (t[len - 1] == '\n')
- t[len - 1] = '\0';
- }
-
- if (!t)
- strcpy (line, "quit");
-
- if (line[0])
- {
- char *expansion;
- int result;
-
- result = history_expand (line, &expansion);
- if (result)
- fprintf (stderr, "%s\n", expansion);
-
- if (result < 0 || result == 2)
- {
- free (expansion);
- continue;
- }
-
- add_history (expansion);
- strncpy (line, expansion, sizeof (line) - 1);
- free (expansion);
- }
-
- if (strcmp (line, "quit") == 0)
- done = 1;
- else if (strcmp (line, "save") == 0)
- write_history ("history_file");
- else if (strcmp (line, "read") == 0)
- read_history ("history_file");
- else if (strcmp (line, "list") == 0)
- {
- register HIST_ENTRY **the_list;
- register int i;
-
- the_list = history_list ();
- if (the_list)
- for (i = 0; the_list[i]; i++)
- printf ("%d: %s\n", i + history_base, the_list[i]->line);
- }
- else if (strncmp (line, "delete", 6) == 0)
- {
- int which;
- if ((sscanf (line + 6, "%d", &which)) == 1)
- {
- HIST_ENTRY *entry = remove_history (which);
- if (!entry)
- fprintf (stderr, "No such entry %d\n", which);
- else
- {
- free (entry->line);
- free (entry);
- }
- }
- else
- {
- fprintf (stderr, "non-numeric arg given to `delete'\n");
- }
- }
- }
- }
-
-
-File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top
-
-Concept Index
-*************
-
-* Menu:
-
-* anchored search: Searching the History List.
-* event designators: Event Designators.
-* expansion: History Interaction.
-* history events: Event Designators.
-* History Searching: Searching the History List.
-
-
-File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top
-
-Function and Variable Index
-***************************
-
-* Menu:
-
-* add_history: History List Management.
-* append_history: Managing the History File.
-* current_history: Information About the History List.
-* get_history_event: History Expansion.
-* history_arg_extract: History Expansion.
-* history_base: History Variables.
-* history_comment_char: History Variables.
-* history_expand: History Expansion.
-* history_expansion_char: History Variables.
-* history_get: Information About the History List.
-* history_get_history_state: Initializing History and State Management.
-* history_is_stifled: History List Management.
-* history_length: History Variables.
-* history_list: Information About the History List.
-* history_no_expand_chars: History Variables.
-* history_search: Searching the History List.
-* history_search_pos: Searching the History List.
-* history_search_prefix: Searching the History List.
-* history_set_history_state: Initializing History and State Management.
-* history_set_pos: Moving Around the History List.
-* history_subst_char: History Variables.
-* history_tokenize: History Expansion.
-* history_total_bytes: Information About the History List.
-* history_truncate_file: Managing the History File.
-* max_input_history: History Variables.
-* next_history: Moving Around the History List.
-* previous_history: Moving Around the History List.
-* read_history: Managing the History File.
-* read_history_range: Managing the History File.
-* remove_history: History List Management.
-* replace_history_entry: History List Management.
-* stifle_history: History List Management.
-* unstifle_history: History List Management.
-* using_history: Initializing History and State Management.
-* where_history: Information About the History List.
-* write_history: Managing the History File.
-
-
-
-Tag Table:
-Node: Top975
-Node: Using History Interactively1569
-Node: History Interaction2077
-Node: Event Designators3122
-Node: Word Designators3952
-Node: Modifiers4936
-Node: Programming with GNU History6065
-Node: Introduction to History6791
-Node: History Storage8112
-Node: History Functions9205
-Node: Initializing History and State Management10176
-Node: History List Management10968
-Node: Information About the History List12396
-Node: Moving Around the History List13702
-Node: Searching the History List14587
-Node: Managing the History File16419
-Node: History Expansion17925
-Node: History Variables19769
-Node: History Programming Example21138
-Node: Concept Index23742
-Node: Function and Variable Index24223
-
-End Tag Table
diff --git a/gnu/lib/libreadline/doc/inc-hist.texi b/gnu/lib/libreadline/doc/inc-hist.texi
deleted file mode 100644
index 539e372c5d46..000000000000
--- a/gnu/lib/libreadline/doc/inc-hist.texi
+++ /dev/null
@@ -1,155 +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 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/lib/libreadline/doc/readline.info b/gnu/lib/libreadline/doc/readline.info
deleted file mode 100644
index f4882e9a495b..000000000000
--- a/gnu/lib/libreadline/doc/readline.info
+++ /dev/null
@@ -1,74 +0,0 @@
-This is Info file readline.info, produced by Makeinfo-1.55 from the
-input file rlman.texinfo.
-
- 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.
-
- 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.
-
-
-Indirect:
-readline.info-1: 1000
-readline.info-2: 50467
-
-Tag Table:
-(Indirect)
-Node: Top1000
-Node: Command Line Editing1613
-Node: Introduction and Notation2264
-Node: Readline Interaction3284
-Node: Readline Bare Essentials4423
-Node: Readline Movement Commands5953
-Node: Readline Killing Commands6844
-Node: Readline Arguments8547
-Node: Readline Init File9498
-Node: Readline Init Syntax10502
-Node: Conditional Init Constructs17435
-Node: Bindable Readline Commands19681
-Node: Commands For Moving20351
-Node: Commands For History21199
-Node: Commands For Text23783
-Node: Commands For Killing25522
-Node: Numeric Arguments26971
-Node: Commands For Completion27598
-Node: Keyboard Macros28525
-Node: Miscellaneous Commands29084
-Node: Readline vi Mode30372
-Node: Programming with GNU Readline32122
-Node: Basic Behavior32919
-Node: Custom Functions36232
-Node: The Function Type36845
-Node: Function Writing37690
-Node: Readline Convenience Functions40453
-Node: Function Naming41118
-Node: Keymaps42345
-Node: Binding Keys43856
-Node: Associating Function Names and Bindings45650
-Node: Allowing Undoing46812
-Node: Redisplay49397
-Node: Modifying Text50467
-Node: Utility Functions51378
-Node: Custom Completers54444
-Node: How Completing Works55165
-Node: Completion Functions58156
-Node: Completion Variables61171
-Node: A Short Completion Example64996
-Node: Concept Index77230
-Node: Function and Variable Index77717
-
-End Tag Table
diff --git a/gnu/lib/libreadline/doc/readline.info-1 b/gnu/lib/libreadline/doc/readline.info-1
deleted file mode 100644
index 78bbd057ad2f..000000000000
--- a/gnu/lib/libreadline/doc/readline.info-1
+++ /dev/null
@@ -1,1322 +0,0 @@
-This is Info file readline.info, produced by Makeinfo-1.55 from the
-input file rlman.texinfo.
-
- 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.
-
- 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.
-
-
-File: readline.info, Node: Top, Next: Command Line Editing, Prev: (DIR), Up: (DIR)
-
-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.
-
-
-File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top
-
-Command Line Editing
-********************
-
- This chapter describes the basic features of the GNU command line
-editing interface.
-
-* Menu:
-
-* Introduction and Notation:: Notation used in this text.
-* Readline Interaction:: The minimum set of commands for editing a line.
-* Readline Init File:: Customizing Readline from a user's view.
-* Bindable Readline Commands:: A description of most of the Readline commands
- available for binding
-* Readline vi Mode:: A short description of how to make Readline
- behave like the vi editor.
-
-
-File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
-
-Introduction to Line Editing
-============================
-
- The following paragraphs describe the notation used to represent
-keystrokes.
-
- The text C-k is read as `Control-K' and describes the character
-produced when the Control key is depressed and the k key is struck.
-
- The text M-k is read as `Meta-K' and describes the character
-produced when the meta key (if you have one) is depressed, and the k
-key is struck. If you do not have a meta key, the identical keystroke
-can be generated by typing ESC first, and then typing k. Either
-process is known as "metafying" the k key.
-
- The text M-C-k is read as `Meta-Control-k' and describes the
-character produced by "metafying" C-k.
-
- In addition, several keys have their own names. Specifically, DEL,
-ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this
-text, or in an init file (*note Readline Init File::., for more info).
-
-
-File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
-
-Readline Interaction
-====================
-
- 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 RETURN. You do not have to be at the end of
-the line to press RETURN; the entire line is accepted regardless of the
-location of the cursor within the line.
-
-* 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.
-
-
-File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
-
-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 your
-erase character to back up and delete the mistyped character.
-
- Sometimes you may miss typing a character that you wanted to type,
-and not notice your error until you have typed several other
-characters. In that case, you can type C-b to move the cursor to the
-left, and then correct your mistake. Afterwards, you can move the
-cursor to the right with C-f.
-
- When you add text in the middle of a line, you will notice that
-characters to the right of the cursor are `pushed over' to make room
-for the text that you have inserted. Likewise, when you delete text
-behind the cursor, characters to the right of the cursor are `pulled
-back' to fill in the blank space created by the removal of the text. A
-list of the basic bare essentials for editing the text of an input line
-follows.
-
-C-b
- Move back one character.
-
-C-f
- Move forward one character.
-
-DEL
- Delete the character to the left of the cursor.
-
-C-d
- Delete the character underneath the cursor.
-
-Printing characters
- Insert the character into the line at the cursor.
-
-C-_
- Undo the last thing that you did. You can undo all the way back
- to an empty line.
-
-
-File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
-
-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 C-b,
-C-f, C-d, and DEL. Here are some commands for moving more rapidly
-about the line.
-
-C-a
- Move to the start of the line.
-
-C-e
- Move to the end of the line.
-
-M-f
- Move forward a word.
-
-M-b
- Move backward a word.
-
-C-l
- Clear the screen, reprinting the current line at the top.
-
- Notice how C-f moves forward a character, while M-f moves forward a
-word. It is a loose convention that control keystrokes operate on
-characters while meta keystrokes operate on words.
-
-
-File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
-
-Readline Killing Commands
--------------------------
-
- "Killing" text means to delete the text from the line, but to save
-it away for later use, usually by "yanking" (re-inserting) it back into
-the line. If the description for a command says that it `kills' text,
-then you can be sure that you can get the text back in a different (or
-the same) place later.
-
- When you use a kill command, the text is saved in a "kill-ring".
-Any number of consecutive kills save all of the killed text together, so
-that when you yank it back, you get it all. The kill ring is not line
-specific; the text that you killed on a previously typed line is
-available to be yanked back later, when you are typing another line.
-
- Here is the list of commands for killing text.
-
-C-k
- Kill the text from the current cursor position to the end of the
- line.
-
-M-d
- Kill from the cursor to the end of the current word, or if between
- words, to the end of the next word.
-
-M-DEL
- Kill from the cursor the start of the previous word, or if between
- words, to the start of the previous word.
-
-C-w
- Kill from the cursor to the previous whitespace. This is
- different than M-DEL because the word boundaries differ.
-
- And, here is how to "yank" the text back into the line. Yanking
-means to copy the most-recently-killed text from the kill buffer.
-
-C-y
- Yank the most recently killed text back into the buffer at the
- cursor.
-
-M-y
- Rotate the kill-ring, and yank the new top. You can only do this
- if the prior command is C-y or M-y.
-
-
-File: readline.info, Node: Readline Arguments, Prev: Readline Killing Commands, Up: Readline Interaction
-
-Readline Arguments
-------------------
-
- You can pass numeric arguments to Readline commands. Sometimes the
-argument acts as a repeat count, other times it is the 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 M- C-k.
-
- The general way to pass numeric arguments to a command is to type
-meta digits before the command. If the first `digit' you type is a
-minus sign (-), then the sign of the argument will be negative. Once
-you have typed one meta digit to get the argument started, you can type
-the remainder of the digits, and then the command. For example, to give
-the C-d command an argument of 10, you could type M-1 0 C-d.
-
-
-File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
-
-Readline Init File
-==================
-
- Although the Readline library comes with a set of Emacs-like
-keybindings installed by default, it is possible that you would like to
-use a different set of keybindings. You can customize programs that
-use Readline by putting commands in an "init" file in your home
-directory. The name of this file is taken from the value of the
-environment variable `INPUTRC'. If that variable is unset, the default
-is `~/.inputrc'.
-
- When a program which uses the Readline library starts up, the init
-file is read, and the key bindings are set.
-
- In addition, the `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 the inputrc file.
-* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
-
-
-File: readline.info, Node: Readline Init Syntax, Next: Conditional Init Constructs, Up: Readline Init File
-
-Readline Init Syntax
---------------------
-
- There are only a few basic constructs allowed in the Readline init
-file. Blank lines are ignored. Lines beginning with a # are comments.
-Lines beginning with a $ indicate conditional constructs (*note
-Conditional Init Constructs::.). Other lines denote variable settings
-and key bindings.
-
-Variable Settings
- You can change the state of a few variables in Readline by using
- the `set' command within the init file. Here is how you would
- specify that you wish to use `vi' line editing commands:
-
- set editing-mode vi
-
- Right now, there are only a few variables which can be set; so
- few, in fact, that we just list them here:
-
- `editing-mode'
- The `editing-mode' variable controls which editing mode you
- are using. By default, Readline starts up in Emacs editing
- mode, where the keystrokes are most similar to Emacs. This
- variable can be set to either `emacs' or `vi'.
-
- `horizontal-scroll-mode'
- This variable can be set to either `On' or `Off'. Setting it
- to `On' means that the text of the lines that you edit will
- scroll horizontally on a single screen line when they are
- longer than the width of the screen, instead of wrapping onto
- a new screen line. By default, this variable is set to `Off'.
-
- `mark-modified-lines'
- This variable, when set to `On', says to display an asterisk
- (`*') at the start of history lines which have been modified.
- This variable is `off' by default.
-
- `bell-style'
- Controls what happens when Readline wants to ring the
- terminal bell. If set to `none', Readline never rings the
- bell. If set to `visible', Readline uses a visible bell if
- one is available. If set to `audible' (the default),
- Readline attempts to ring the terminal's bell.
-
- `comment-begin'
- The string to insert at the beginning of the line when the
- `vi-comment' command is executed. The default value is `"#"'.
-
- `meta-flag'
- If set to `on', Readline will enable eight-bit input (it will
- not strip the eighth bit from the characters it reads),
- regardless of what the terminal claims it can support. The
- default value is `off'.
-
- `convert-meta'
- If set to `on', Readline will convert characters with the
- eigth bit set to an ASCII key sequence by stripping the eigth
- bit and prepending an ESC character, converting them to a
- meta-prefixed key sequence. The default value is `on'.
-
- `output-meta'
- If set to `on', Readline will display characters with the
- eighth bit set directly rather than as a meta-prefixed escape
- sequence. The default is `off'.
-
- `completion-query-items'
- The number of possible completions that determines when the
- user is asked whether he wants to see the list of
- possibilities. If the number of possible completions is
- greater than this value, Readline will ask the user whether
- or not he wishes to view them; otherwise, they are simply
- listed. The default limit is `100'.
-
- `keymap'
- Sets Readline's idea of the current keymap for key binding
- commands. Acceptable `keymap' names are `emacs',
- `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
- `vi-command', and `vi-insert'. `vi' is equivalent to
- `vi-command'; `emacs' is equivalent to `emacs-standard'. The
- default value is `emacs'. The value of the `editing-mode'
- variable also affects the default keymap.
-
- `show-all-if-ambiguous'
- This alters the default behavior of the completion functions.
- If set to `on', words which have more than one possible
- completion cause the matches to be listed immediately instead
- of ringing the bell. The default value is `off'.
-
- `expand-tilde'
- If set to `on', tilde expansion is performed when Readline
- attempts word completion. The default is `off'.
-
-Key Bindings
- The syntax for controlling key bindings in the init file is
- simple. First you have to know the name of the command that you
- want to change. The following pages contain tables of the command
- name, the default keybinding, and a short description of what the
- command does.
-
- Once you know the name of the command, simply place the name of
- the key you wish to bind the command to, a colon, and then the
- name of the command on a line in the init file. The name of the
- key can be expressed in different ways, depending on which is most
- comfortable for you.
-
- KEYNAME: FUNCTION-NAME or MACRO
- KEYNAME is the name of a key spelled out in English. For
- example:
- Control-u: universal-argument
- Meta-Rubout: backward-kill-word
- Control-o: ">&output"
-
- In the above example, `C-u' is bound to the function
- `universal-argument', and `C-o' is bound to run the macro
- expressed on the right hand side (that is, to insert the text
- `>&output' into the line).
-
- "KEYSEQ": FUNCTION-NAME or MACRO
- KEYSEQ differs from KEYNAME above in that strings denoting an
- entire key sequence can be specified, by placing the key
- sequence in double quotes. Some GNU Emacs style key escapes
- can be used, as in the following example, but the special
- character names are not recognized.
-
- "\C-u": universal-argument
- "\C-x\C-r": re-read-init-file
- "\e[11~": "Function Key 1"
-
- In the above example, `C-u' is bound to the function
- `universal-argument' (just as it was in the first example),
- `C-x C-r' is bound to the function `re-read-init-file', and
- `ESC [ 1 1 ~' is bound to insert the text `Function Key 1'.
- The following escape sequences are available when specifying
- key sequences:
-
- ``\C-''
- control prefix
-
- ``\M-''
- meta prefix
-
- ``\e''
- an escape character
-
- ``\\''
- backslash
-
- ``\"''
- "
-
- ``\'''
- '
-
- When entering the text of a macro, single or double quotes
- should be used to indicate a macro definition. Unquoted text
- is assumed to be a function name. Backslash will quote any
- character in the macro text, including " and '. For example,
- the following binding will make `C-x \' insert a single \
- into the line:
- "\C-x\\": "\\"
-
-
-File: readline.info, Node: Conditional Init Constructs, Prev: Readline Init Syntax, Up: Readline Init File
-
-Conditional Init Constructs
----------------------------
-
- Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key bindings
-and variable settings to be performed as the result of tests. There
-are three parser directives used.
-
-`$if'
- The `$if' construct allows bindings to be made based on the
- editing mode, the terminal being used, or the application using
- Readline. The text of the test extends to the end of the line; no
- characters are required to isolate it.
-
- `mode'
- The `mode=' form of the `$if' directive is used to test
- whether Readline is in `emacs' or `vi' mode. This may be
- used in conjunction with the `set keymap' command, for
- instance, to set bindings in the `emacs-standard' and
- `emacs-ctlx' keymaps only if Readline is starting out in
- `emacs' mode.
-
- `term'
- The `term=' form may be used to include terminal-specific key
- bindings, perhaps to bind the key sequences output by the
- terminal's function keys. The word on the right side of the
- `=' is tested against the full name of the terminal and the
- portion of the terminal name before the first `-'. This
- allows SUN to match both SUN and SUN-CMD, for instance.
-
- `application'
- The APPLICATION construct is used to include
- application-specific settings. Each program using the
- Readline library sets the APPLICATION NAME, and you can test
- for it. This could be used to bind key sequences to
- functions useful for a specific program. For instance, the
- following command adds a key sequence that quotes the current
- or previous word in Bash:
- $if bash
- # Quote the current or previous word
- "\C-xq": "\eb\"\ef\""
- $endif
-
-`$endif'
- This command, as you saw in the previous example, terminates an
- `$if' command.
-
-`$else'
- Commands in this branch of the `$if' directive are executed if the
- test fails.
-
-
-File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
-
-Bindable Readline Commands
-==========================
-
-* Menu:
-
-* Commands For Moving:: Moving about the line.
-* Commands For History:: Getting at previous lines.
-* Commands For Text:: Commands for changing text.
-* Commands For Killing:: Commands for killing and yanking.
-* Numeric Arguments:: Specifying numeric arguments, repeat counts.
-* Commands For Completion:: Getting Readline to do the typing for you.
-* Keyboard Macros:: Saving and re-executing typed characters
-* Miscellaneous Commands:: Other miscellaneous commands.
-
-
-File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
-
-Commands For Moving
--------------------
-
-`beginning-of-line (C-a)'
- Move to the start of the current line.
-
-`end-of-line (C-e)'
- Move to the end of the line.
-
-`forward-char (C-f)'
- Move forward a character.
-
-`backward-char (C-b)'
- Move back a character.
-
-`forward-word (M-f)'
- Move forward to the end of the next word. Words are composed of
- letters and digits.
-
-`backward-word (M-b)'
- Move back to the start of this, or the previous, word. Words are
- composed of letters and digits.
-
-`clear-screen (C-l)'
- Clear the screen and redraw the current line, leaving the current
- line at the top of the screen.
-
-`redraw-current-line ()'
- Refresh the current line. By default, this is unbound.
-
-
-File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
-
-Commands For Manipulating The History
--------------------------------------
-
-`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.
-
-`previous-history (C-p)'
- Move `up' through the history list.
-
-`next-history (C-n)'
- Move `down' through the history list.
-
-`beginning-of-history (M-<)'
- Move to the first line in the history.
-
-`end-of-history (M->)'
- Move to the end of the input history, i.e., the line you are
- entering.
-
-`reverse-search-history (C-r)'
- Search backward starting at the current line and moving `up'
- through the history as necessary. This is an incremental search.
-
-`forward-search-history (C-s)'
- Search forward starting at the current line and moving `down'
- through the the history as necessary. This is an incremental
- search.
-
-`non-incremental-reverse-search-history (M-p)'
- Search backward starting at the current line and moving `up'
- through the history as necessary using a non-incremental search
- for a string supplied by the user.
-
-`non-incremental-forward-search-history (M-n)'
- Search forward starting at the current line and moving `down'
- through the the history as necessary using a non-incremental search
- for a string supplied by the user.
-
-`history-search-forward ()'
- Search forward through the history for the string of characters
- between the start of the current line and the current point. This
- is a non-incremental search. By default, this command is unbound.
-
-`history-search-backward ()'
- Search backward through the history for the string of characters
- between the start of the current line and the current point. This
- is a non-incremental search. By default, this command is unbound.
-
-`yank-nth-arg (M-C-y)'
- Insert the first argument to the previous command (usually the
- second word on the previous line). With an argument N, insert the
- Nth word from the previous command (the words in the previous
- command begin with word 0). A negative argument inserts the Nth
- word from the end of the previous command.
-
-`yank-last-arg (M-., M-_)'
- Insert last argument to the previous command (the last word on the
- previous line). With an argument, behave exactly like
- `yank-nth-arg'.
-
-
-File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
-
-Commands For Changing Text
---------------------------
-
-`delete-char (C-d)'
- Delete the character under the cursor. If the cursor is at the
- beginning of the line, there are no characters in the line, and
- the last character typed was not C-d, then return EOF.
-
-`backward-delete-char (Rubout)'
- Delete the character behind the cursor. A numeric arg says to kill
- the characters instead of deleting them.
-
-`quoted-insert (C-q, C-v)'
- Add the next character that you type to the line verbatim. This is
- how to insert key sequences like C-q, for example.
-
-`tab-insert (M-TAB)'
- Insert a tab character.
-
-`self-insert (a, b, A, 1, !, ...)'
- Insert yourself.
-
-`transpose-chars (C-t)'
- Drag the character before the cursor forward over the character at
- the cursor, moving the cursor forward as well. If the insertion
- point is at the end of the line, then this transposes the last two
- characters of the line. Negative argumentss don't work.
-
-`transpose-words (M-t)'
- Drag the word behind the cursor past the word in front of the
- cursor moving the cursor over that word as well.
-
-`upcase-word (M-u)'
- Uppercase the current (or following) word. With a negative
- argument, do the previous word, but do not move the cursor.
-
-`downcase-word (M-l)'
- Lowercase the current (or following) word. With a negative
- argument, do the previous word, but do not move the cursor.
-
-`capitalize-word (M-c)'
- Capitalize the current (or following) word. With a negative
- argument, do the previous word, but do not move the cursor.
-
-
-File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
-
-Killing And Yanking
--------------------
-
-`kill-line (C-k)'
- Kill the text from the current cursor position to the end of the
- line.
-
-`backward-kill-line (C-x Rubout)'
- Kill backward to the beginning of the line.
-
-`unix-line-discard (C-u)'
- Kill backward from the cursor to the beginning of the current line.
- Save the killed text on the kill-ring.
-
-`kill-whole-line ()'
- Kill all characters on the current line, no matter where the
- cursor is. By default, this is unbound.
-
-`kill-word (M-d)'
- Kill from the cursor to the end of the current word, or if between
- words, to the end of the next word. Word boundaries are the same
- as `forward-word'.
-
-`backward-kill-word (M-DEL)'
- Kill the word behind the cursor. Word boundaries are the same as
- `backward-word'.
-
-`unix-word-rubout (C-w)'
- Kill the word behind the cursor, using white space as a word
- boundary. The killed text is saved on the kill-ring.
-
-`delete-horizontal-space ()'
- Delete all spaces and tabs around point. By default, this is
- unbound.
-
-`yank (C-y)'
- Yank the top of the kill ring into the buffer at the current
- cursor position.
-
-`yank-pop (M-y)'
- Rotate the kill-ring, and yank the new top. You can only do this
- if the prior command is yank or yank-pop.
-
-
-File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
-
-Specifying Numeric Arguments
-----------------------------
-
-`digit-argument (M-0, M-1, ... M--)'
- Add this digit to the argument already accumulating, or start a new
- argument. M- starts a negative argument.
-
-`universal-argument ()'
- Each time this is executed, the argument count is multiplied by
- four. The argument count is initially one, so executing this
- function the first time makes the argument count four. By
- default, this is not bound to a key.
-
-
-File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
-
-Letting Readline Type For You
------------------------------
-
-`complete (TAB)'
- Attempt to do completion on the text before the cursor. This is
- application-specific. Generally, if you are typing a filename
- argument, you can do filename completion; if you are typing a
- command, you can do command completion, if you are typing in a
- symbol to GDB, you can do symbol name completion, if you are
- typing in a variable to Bash, you can do variable name completion,
- and so on.
-
-`possible-completions (M-?)'
- List the possible completions of the text before the cursor.
-
-`insert-completions ()'
- Insert all completions of the text before point that would have
- been generated by `possible-completions'. By default, this is not
- bound to a key.
-
-
-File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
-
-Keyboard Macros
----------------
-
-`start-kbd-macro (C-x ()'
- Begin saving the characters typed into the current keyboard macro.
-
-`end-kbd-macro (C-x ))'
- Stop saving the characters typed into the current keyboard macro
- and save the definition.
-
-`call-last-kbd-macro (C-x e)'
- Re-execute the last keyboard macro defined, by making the
- characters in the macro appear as if typed at the keyboard.
-
-
-File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
-
-Some Miscellaneous Commands
----------------------------
-
-`re-read-init-file (C-x C-r)'
- Read in the contents of your init file, and incorporate any
- bindings or variable assignments found there.
-
-`abort (C-g)'
- Abort the current editing command and ring the terminal's bell
- (subject to the setting of `bell-style').
-
-`do-uppercase-version (M-a, M-b, ...)'
- Run the command that is bound to the corresoponding uppercase
- character.
-
-`prefix-meta (ESC)'
- Make the next character that you type be metafied. This is for
- people without a meta key. Typing `ESC f' is equivalent to typing
- `M-f'.
-
-`undo (C-_, C-x C-u)'
- Incremental undo, separately remembered for each line.
-
-`revert-line (M-r)'
- Undo all changes made to this line. This is like typing the `undo'
- command enough times to get back to the beginning.
-
-`tilde-expand (M-~)'
- Perform tilde expansion on the current word.
-
-`dump-functions ()'
- Print all of the functions and their key bindings to the readline
- output stream. If a numeric argument is supplied, the output is
- formatted in such a way that it can be made part of an INPUTRC
- file.
-
-
-File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing
-
-Readline vi Mode
-================
-
- While the Readline library does not have a full set of `vi' editing
-functions, it does contain enough to allow simple editing of the line.
-The Readline `vi' mode behaves as specified in the Posix 1003.2
-standard.
-
- In order to switch interactively between `Emacs' and `Vi' editing
-modes, use the command M-C-j (toggle-editing-mode). The Readline
-default is `emacs' mode.
-
- When you enter a line in `vi' mode, you are already placed in
-`insertion' mode, as if you had typed an `i'. Pressing ESC switches
-you into `command' mode, where you can edit the text of the line with
-the standard `vi' movement keys, move to previous history lines with
-`k', and following lines with `j', and so forth.
-
- This document describes the GNU Readline Library, a utility for
-aiding in the consitency of user interface across discrete programs
-that need to provide a command line interface.
-
- Copyright (C) 1988, 1994 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.
-
- 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.
-
-
-File: readline.info, Node: Programming with GNU Readline, Next: Concept Index, Prev: Command Line Editing, Up: Top
-
-Programming with GNU Readline
-*****************************
-
- This chapter describes the interface between the GNU Readline
-Library and other programs. If you are a programmer, and you wish to
-include the features found in GNU Readline such as completion, line
-editing, and interactive history manipulation in your own programs,
-this section is for you.
-
-* Menu:
-
-* Basic Behavior:: Using the default behavior of Readline.
-* Custom Functions:: Adding your own functions to Readline.
-* Readline Convenience Functions:: Functions which Readline supplies to
- aid in writing your own
-* Custom Completers:: Supplanting or supplementing Readline's
- completion functions.
-
-
-File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline
-
-Basic Behavior
-==============
-
- Many programs provide a command line interface, such as `mail',
-`ftp', and `sh'. For such programs, the default behaviour of Readline
-is sufficient. This section describes how to use Readline in the
-simplest way possible, perhaps to replace calls in your code to
-`gets()' or `fgets ()'.
-
- The function `readline ()' prints a prompt and then reads and returns
-a single line of text from the user. The line `readline' returns is
-allocated with `malloc ()'; you should `free ()' the line when you are
-done with it. The declaration for `readline' in ANSI C is
-
- `char *readline (char *PROMPT);'
-
-So, one might say
- `char *line = readline ("Enter a line: ");'
-
-in order to read a line of text from the user. The line returned has
-the final newline removed, so only the text remains.
-
- If `readline' encounters an `EOF' while reading the line, and the
-line is empty at that point, then `(char *)NULL' is returned.
-Otherwise, the line is ended just as if a newline had been typed.
-
- If you want the user to be able to get at the line later, (with C-p
-for example), you must call `add_history ()' to save the line away in a
-"history" list of such lines.
-
- `add_history (line)';
-
-For full details on the GNU History Library, see the associated manual.
-
- It is preferable to avoid saving empty lines on the history list,
-since users rarely have a burning need to reuse a blank line. Here is
-a function which usefully replaces the standard `gets ()' library
-function, and has the advantage of no static buffer to overflow:
-
- /* A static variable for holding the line. */
- static char *line_read = (char *)NULL;
-
- /* Read a string, and return a pointer to it. Returns NULL on EOF. */
- char *
- rl_gets ()
- {
- /* If the buffer has already been allocated, return the memory
- to the free pool. */
- if (line_read)
- {
- free (line_read);
- line_read = (char *)NULL;
- }
-
- /* Get a line from the user. */
- line_read = readline ("");
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
- }
-
- This function gives the user the default behaviour of TAB
-completion: completion on file names. If you do not want Readline to
-complete on filenames, you can change the binding of the TAB key with
-`rl_bind_key ()'.
-
- `int rl_bind_key (int KEY, int (*FUNCTION)());'
-
- `rl_bind_key ()' takes two arguments: KEY is the character that you
-want to bind, and FUNCTION is the address of the function to call when
-KEY is pressed. Binding TAB to `rl_insert ()' makes TAB insert itself.
-`rl_bind_key ()' returns non-zero if KEY is not a valid ASCII character
-code (between 0 and 255).
-
- Thus, to disable the default TAB behavior, the following suffices:
- `rl_bind_key ('\t', rl_insert);'
-
- This code should be executed once at the start of your program; you
-might write a function called `initialize_readline ()' which performs
-this and other desired initializations, such as installing custom
-completers (*note Custom Completers::.).
-
-
-File: readline.info, Node: Custom Functions, Next: Readline Convenience Functions, Prev: Basic Behavior, Up: Programming with GNU Readline
-
-Custom Functions
-================
-
- Readline provides many functions for manipulating the text of the
-line, but it isn't possible to anticipate the needs of all programs.
-This section describes the various functions and variables defined
-within the Readline library which allow a user program to add
-customized functionality to Readline.
-
-* Menu:
-
-* The Function Type:: C declarations to make code readable.
-* Function Writing:: Variables and calling conventions.
-
-
-File: readline.info, Node: The Function Type, Next: Function Writing, Up: Custom Functions
-
-The Function Type
------------------
-
- For readabilty, we declare a new type of object, called "Function".
-A `Function' is a C function which returns an `int'. The type
-declaration for `Function' is:
-
-`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 FUNC which was a pointer to a function. Instead of the classic
-C declaration
-
- `int (*)()func;'
-
-we may write
-
- `Function *func;'
-
-Similarly, there are
-
- typedef void VFunction ();
- typedef char *CPFunction (); and
- typedef char **CPPFunction ();
-
-for functions returning no value, `pointer to char', and `pointer to
-pointer to char', respectively.
-
-
-File: readline.info, Node: Function Writing, Prev: The Function Type, Up: Custom Functions
-
-Writing a New Function
-----------------------
-
- In order to write new functions for Readline, you need to know the
-calling conventions for keyboard-invoked functions, and the names of the
-variables that describe the current state of the line read so far.
-
- The calling sequence for a command `foo' looks like
-
- `foo (int count, int key)'
-
-where COUNT is the numeric argument (or 1 if defaulted) and KEY is the
-key that invoked this function.
-
- It is completely up to the function as to what should be done with
-the numeric argument. Some functions use it as a repeat count, some as
-a flag, and others to choose alternate behavior (refreshing the current
-line as opposed to refreshing the screen, for example). Some choose to
-ignore it. In general, if a function uses the numeric argument as a
-repeat count, it should be able to do something useful with both
-negative and positive arguments. At the very least, it should be aware
-that it can be passed a negative argument.
-
- - Variable: char * rl_line_buffer
- This is the line gathered so far. You are welcome to modify the
- contents of the line, but see *Note Allowing Undoing::.
-
- - Variable: int rl_point
- The offset of the current cursor position in `rl_line_buffer' (the
- *point*).
-
- - Variable: int rl_end
- The number of characters present in `rl_line_buffer'. When
- `rl_point' is at the end of the line, `rl_point' and `rl_end' are
- equal.
-
- - Variable: int rl_mark
- The mark (saved position) in the current line. If set, the mark
- and point define a *region*.
-
- - Variable: int rl_done
- Setting this to a non-zero value causes Readline to return the
- current line immediately.
-
- - Variable: int rl_pending_input
- Setting this to a value makes it the next keystroke read. This is
- a way to stuff a single character into the input stream.
-
- - Variable: char * rl_prompt
- The prompt Readline uses. This is set from the argument to
- `readline ()', and should not be assigned to directly.
-
- - Variable: char * rl_terminal_name
- The terminal type, used for initialization.
-
- - Variable: char * rl_readline_name
- This variable is set to a unique name by each application using
- Readline. The value allows conditional parsing of the inputrc file
- (*note Conditional Init Constructs::.).
-
- - Variable: FILE * rl_instream
- The stdio stream from which Readline reads input.
-
- - Variable: FILE * rl_outstream
- The stdio stream to which Readline performs output.
-
- - Variable: Function * rl_startup_hook
- If non-zero, this is the address of a function to call just before
- `readline' prints the first prompt.
-
-
-File: readline.info, Node: Readline Convenience Functions, Next: Custom Completers, Prev: Custom Functions, Up: Programming with GNU Readline
-
-Readline Convenience Functions
-==============================
-
-* Menu:
-
-* Function Naming:: How to give a function you write a name.
-* Keymaps:: Making keymaps.
-* Binding Keys:: Changing Keymaps.
-* Associating Function Names and Bindings:: Translate function names to
- key sequences.
-* Allowing Undoing:: How to make your functions undoable.
-* Redisplay:: Functions to control line display.
-* Modifying Text:: Functions to modify `rl_line_buffer'.
-* Utility Functions:: Generally useful functions and hooks.
-
-
-File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions
-
-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
-
- Meta-Rubout: backward-kill-word
-
- This binds the keystroke Meta-Rubout to the function *descriptively*
-named `backward-kill-word'. You, as the programmer, should bind the
-functions you write to descriptive names as well. Readline provides a
-function for doing that:
-
- - Function: int rl_add_defun (char *name, Function *function, int key)
- Add NAME to the list of named functions. Make FUNCTION be the
- function that gets called. If KEY is not -1, then bind it to
- FUNCTION using `rl_bind_key ()'.
-
- Using this function alone is sufficient for most applications. It is
-the recommended way to add a few functions to the default functions that
-Readline has built in. If you need to do something other than adding a
-function to Readline, you may need to use the underlying functions
-described below.
-
-
-File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions
-
-Selecting a Keymap
-------------------
-
- Key bindings take place on a "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.
-
- - Function: Keymap rl_make_bare_keymap ()
- Returns a new, empty keymap. The space for the keymap is
- allocated with `malloc ()'; you should `free ()' it when you are
- done.
-
- - Function: Keymap rl_copy_keymap (Keymap map)
- Return a new keymap which is a copy of MAP.
-
- - Function: 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.
-
- - Function: void rl_discard_keymap (Keymap keymap)
- Free the storage associated with KEYMAP.
-
- Readline has several internal keymaps. These functions allow you to
-change which keymap is active.
-
- - Function: Keymap rl_get_keymap ()
- Returns the currently active keymap.
-
- - Function: void rl_set_keymap (Keymap keymap)
- Makes KEYMAP the currently active keymap.
-
- - Function: Keymap rl_get_keymap_by_name (char *name)
- Return the keymap matching NAME. NAME is one which would be
- supplied in a `set keymap' inputrc line (*note Readline Init
- File::.).
-
-
-File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions
-
-Binding Keys
-------------
-
- You associate keys with functions through the keymap. Readline has
-several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap',
-`emacs_ctlx_keymap', `vi_movement_keymap', and `vi_insertion_keymap'.
-`emacs_standard_keymap' is the default, and the examples in this manual
-assume that.
-
- These functions manage key bindings.
-
- - Function: int rl_bind_key (int key, Function *function)
- Binds KEY to FUNCTION in the currently active keymap. Returns
- non-zero in the case of an invalid KEY.
-
- - Function: int rl_bind_key_in_map (int key, Function *function,
- Keymap map)
- Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an
- invalid KEY.
-
- - Function: int rl_unbind_key (int key)
- Bind KEY to the null function in the currently active keymap.
- Returns non-zero in case of error.
-
- - Function: int rl_unbind_key_in_map (int key, Keymap map)
- Bind KEY to the null function in MAP. Returns non-zero in case of
- error.
-
- - Function: int rl_generic_bind (int type, char *keyseq, char *data,
- Keymap map)
- Bind the key sequence represented by the string KEYSEQ to the
- arbitrary pointer DATA. TYPE says what kind of data is pointed to
- by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or
- a keymap (`ISKMAP'). This makes new keymaps as necessary. The
- initial keymap in which to do bindings is MAP.
-
- - Function: int rl_parse_and_bind (char *line)
- Parse LINE as if it had been read from the `inputrc' file and
- perform any key bindings and variable assignments found (*note
- Readline Init File::.).
-
-
-File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions
-
-Associating Function Names and Bindings
----------------------------------------
-
- These functions allow you to find out what keys invoke named
-functions and the functions invoked by a particular key sequence.
-
- - Function: Function * rl_named_function (char *name)
- Return the function with name NAME.
-
- - Function: Function * rl_function_of_keyseq (char *keyseq, Keymap
- map, int *type)
- Return the function invoked by KEYSEQ in keymap MAP. If MAP is
- NULL, the current keymap is used. If TYPE is not NULL, the type
- of the object is returned in it (one of `ISFUNC', `ISKMAP', or
- `ISMACR').
-
- - Function: char ** rl_invoking_keyseqs (Function *function)
- Return an array of strings representing the key sequences used to
- invoke FUNCTION in the current keymap.
-
- - Function: char ** rl_invoking_keyseqs_in_map (Function *function,
- Keymap map)
- Return an array of strings representing the key sequences used to
- invoke FUNCTION in the keymap MAP.
-
-
-File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions
-
-Allowing Undoing
-----------------
-
- Supporting the undo command is a painless thing, and makes your
-functions much more useful. It is certainly easy to try something if
-you know you can undo it. I could use an undo function for the stock
-market.
-
- If your function simply inserts text once, or deletes text once, and
-uses `rl_insert_text ()' or `rl_delete_text ()' to do it, then undoing
-is already done for you automatically.
-
- If you do multiple insertions or multiple deletions, or any
-combination of these operations, you should group them together into
-one operation. This is done with `rl_begin_undo_group ()' and
-`rl_end_undo_group ()'.
-
- The types of events that can be undone are:
-
- enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
-
- Notice that `UNDO_DELETE' means to insert some text, and
-`UNDO_INSERT' means to delete some text. That is, the undo code tells
-undo what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are
-tags added by `rl_begin_undo_group ()' and `rl_end_undo_group ()'.
-
- - Function: int rl_begin_undo_group ()
- Begins saving undo information in a group construct. The undo
- information usually comes from calls to `rl_insert_text ()' and
- `rl_delete_text ()', but could be the result of calls to
- `rl_add_undo ()'.
-
- - Function: int rl_end_undo_group ()
- Closes the current undo group started with `rl_begin_undo_group
- ()'. There should be one call to `rl_end_undo_group ()' for each
- call to `rl_begin_undo_group ()'.
-
- - Function: void rl_add_undo (enum undo_code what, int start, int end,
- char *text)
- Remember how to undo an event (according to WHAT). The affected
- text runs from START to END, and encompasses TEXT.
-
- - Function: void free_undo_list ()
- Free the existing undo list.
-
- - Function: int rl_do_undo ()
- Undo the first thing on the undo list. Returns `0' if there was
- nothing to undo, non-zero if something was undone.
-
- Finally, if you neither insert nor delete text, but directly modify
-the existing text (e.g., change its case), call `rl_modifying ()' once,
-just before you modify the text. You must supply the indices of the
-text range that you are going to modify.
-
- - Function: int rl_modifying (int start, int end)
- Tell Readline to save the text between START and END as a single
- undo unit. It is assumed that you will subsequently modify that
- text.
-
-
-File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions
-
-Redisplay
----------
-
- - Function: int rl_redisplay ()
- Change what's displayed on the screen to reflect the current
- contents of `rl_line_buffer'.
-
- - Function: int rl_forced_update_display ()
- Force the line to be updated and redisplayed, whether or not
- Readline thinks the screen display is correct.
-
- - Function: int rl_on_new_line ()
- Tell the update routines that we have moved onto a new (empty)
- line, usually after ouputting a newline.
-
- - Function: int rl_reset_line_state ()
- Reset the display state to a clean state and redisplay the current
- line starting on a new line.
-
- - Function: int rl_message (va_alist)
- The arguments are a string as would be supplied to `printf'. The
- resulting string is displayed in the "echo area". The echo area
- is also used to display numeric arguments and search strings.
-
- - Function: int rl_clear_message ()
- Clear the message in the echo area.
-
diff --git a/gnu/lib/libreadline/doc/readline.info-2 b/gnu/lib/libreadline/doc/readline.info-2
deleted file mode 100644
index 35681aa235d0..000000000000
--- a/gnu/lib/libreadline/doc/readline.info-2
+++ /dev/null
@@ -1,978 +0,0 @@
-This is Info file readline.info, produced by Makeinfo-1.55 from the
-input file rlman.texinfo.
-
- 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.
-
- 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.
-
-
-File: readline.info, Node: Modifying Text, Next: Utility Functions, Prev: Redisplay, Up: Readline Convenience Functions
-
-Modifying Text
---------------
-
- - Function: int rl_insert_text (char *text)
- Insert TEXT into the line at the current cursor position.
-
- - Function: int rl_delete_text (int start, int end)
- Delete the text between START and END in the current line.
-
- - Function: char * rl_copy_text (int start, int end)
- Return a copy of the text between START and END in the current
- line.
-
- - Function: int rl_kill_text (int start, int end)
- Copy the text between START and END in the current line to the
- kill ring, appending or prepending to the last kill if the last
- command was a kill command. The text is deleted. If START is
- less than END, the text is appended, otherwise prepended. If the
- last command was not a kill, a new kill ring slot is used.
-
-
-File: readline.info, Node: Utility Functions, Prev: Modifying Text, Up: Readline Convenience Functions
-
-Utility Functions
------------------
-
- - Function: int rl_reset_terminal (char *terminal_name)
- Reinitialize Readline's idea of the terminal settings using
- TERMINAL_NAME as the terminal type (e.g., `vt100').
-
- - Function: int alphabetic (int c)
- Return 1 if C is an alphabetic character.
-
- - Function: int numeric (int c)
- Return 1 if C is a numeric character.
-
- - Function: int ding ()
- Ring the terminal bell, obeying the setting of `bell-style'.
-
- The following are implemented as macros, defined in `chartypes.h'.
-
- - Function: int uppercase_p (int c)
- Return 1 if C is an uppercase alphabetic character.
-
- - Function: int lowercase_p (int c)
- Return 1 if C is a lowercase alphabetic character.
-
- - Function: int digit_p (int c)
- Return 1 if C is a numeric character.
-
- - Function: int to_upper (int c)
- If C is a lowercase alphabetic character, return the corresponding
- uppercase character.
-
- - Function: int to_lower (int c)
- If C is an uppercase alphabetic character, return the corresponding
- lowercase character.
-
- - Function: int digit_value (int c)
- If C is a number, return the value it represents.
-
-An Example
-----------
-
- Here is a function which changes lowercase characters to their
-uppercase equivalents, and uppercase characters to lowercase. If this
-function was bound to `M-c', then typing `M-c' would change the case of
-the character under point. Typing `M-1 0 M-c' would change the case of
-the following 10 characters, leaving the cursor on the last character
-changed.
-
- /* Invert the case of the COUNT following characters. */
- int
- invert_case_line (count, key)
- int count, key;
- {
- register int start, end, i;
-
- start = rl_point;
-
- if (rl_point >= rl_end)
- return (0);
-
- if (count < 0)
- {
- direction = -1;
- count = -count;
- }
- else
- direction = 1;
-
- /* Find the end of the range to modify. */
- end = start + (count * direction);
-
- /* Force it to be within range. */
- if (end > rl_end)
- end = rl_end;
- else if (end < 0)
- end = 0;
-
- if (start == end)
- return (0);
-
- if (start > end)
- {
- int temp = start;
- start = end;
- end = temp;
- }
-
- /* Tell readline that we are modifying the line, so it will save
- the undo information. */
- rl_modifying (start, end);
-
- for (i = start; i != end; i++)
- {
- if (uppercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
- else if (lowercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
- }
- /* Move point to on top of the last character changed. */
- rl_point = (direction == 1) ? end - 1 : start;
- return (0);
- }
-
-
-File: readline.info, Node: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline
-
-Custom Completers
-=================
-
- Typically, a program that reads commands from the user has a way of
-disambiguating commands and data. If your program is one of these, then
-it can provide completion for commands, data, or both. The following
-sections describe how your program and Readline cooperate to provide
-this service.
-
-* Menu:
-
-* How Completing Works:: The logic used to do completion.
-* Completion Functions:: Functions provided by Readline.
-* Completion Variables:: Variables which control completion.
-* A Short Completion Example:: An example of writing completer subroutines.
-
-
-File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers
-
-How Completing Works
---------------------
-
- In order to complete some text, the full list of possible completions
-must be available. That is, it is not possible to accurately expand a
-partial word without knowing all of the possible words which make sense
-in that context. The Readline library provides the user interface to
-completion, and two of the most common completion functions: filename
-and username. For completing other types of text, you must write your
-own completion function. This section describes exactly what such
-functions must do, and provides an example.
-
- There are three major functions used to perform completion:
-
- 1. The user-interface function `rl_complete ()'. This function is
- called with the same arguments as other Readline functions
- intended for interactive use: COUNT and INVOKING_KEY. It
- isolates the word to be completed and calls `completion_matches
- ()' to generate a list of possible completions. It then either
- lists the possible completions, inserts the possible completions,
- or actually performs the completion, depending on which behavior
- is desired.
-
- 2. The internal function `completion_matches ()' uses your
- "generator" function to generate the list of possible matches, and
- then returns the array of these matches. You should place the
- address of your generator function in
- `rl_completion_entry_function'.
-
- 3. The generator function is called repeatedly from
- `completion_matches ()', returning a string each time. The
- arguments to the generator function are TEXT and STATE. TEXT is
- the partial word to be completed. STATE is zero the first time
- the function is called, allowing the generator to perform any
- necessary initialization, and a positive non-zero integer for each
- subsequent call. When the generator function returns `(char
- *)NULL' this signals `completion_matches ()' that there are no
- more possibilities left. Usually the generator function computes
- the list of possible completions when STATE is zero, and returns
- them one at a time on subsequent calls. Each string the generator
- function returns as a match must be allocated with `malloc()';
- Readline frees the strings when it has finished with them.
-
-
- - Function: int rl_complete (int ignore, int invoking_key)
- Complete the word at or before point. You have supplied the
- function that does the initial simple matching selection algorithm
- (see `completion_matches ()'). The default is to do filename
- completion.
-
- - Variable: Function * rl_completion_entry_function
- This is a pointer to the generator function for `completion_matches
- ()'. If the value of `rl_completion_entry_function' is `(Function
- *)NULL' then the default filename generator function,
- `filename_entry_function ()', is used.
-
-
-File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers
-
-Completion Functions
---------------------
-
- Here is the complete list of callable completion functions present in
-Readline.
-
- - Function: int rl_complete_internal (int what_to_do)
- Complete the word at or before point. WHAT_TO_DO says what to do
- with the completion. A value of `?' means list the possible
- completions. `TAB' means do standard completion. `*' means
- insert all of the possible completions. `!' means to display all
- of the possible completions, if there is more than one, as well as
- performing partial completion.
-
- - Function: int rl_complete (int ignore, int invoking_key)
- Complete the word at or before point. You have supplied the
- function that does the initial simple matching selection algorithm
- (see `completion_matches ()' and `rl_completion_entry_function').
- The default is to do filename completion. This calls
- `rl_complete_internal ()' with an argument depending on
- INVOKING_KEY.
-
- - Function: int rl_possible_completions (int count, int invoking_key))
- List the possible completions. See description of `rl_complete
- ()'. This calls `rl_complete_internal ()' with an argument of `?'.
-
- - Function: int rl_insert_completions (int count, int invoking_key))
- Insert the list of possible completions into the line, deleting the
- partially-completed word. See description of `rl_complete ()'.
- This calls `rl_complete_internal ()' with an argument of `*'.
-
- - Function: char ** completion_matches (char *text, CPFunction
- *entry_func)
- Returns an array of `(char *)' which is a list of completions for
- TEXT. If there are no completions, returns `(char **)NULL'. The
- first entry in the returned array is the substitution for TEXT.
- The remaining entries are the possible completions. The array is
- terminated with a `NULL' pointer.
-
- ENTRY_FUNC is a function of two args, and returns a `(char *)'.
- The first argument is TEXT. The second is a state argument; it is
- zero on the first call, and non-zero on subsequent calls.
- eNTRY_FUNC returns a `NULL' pointer to the caller when there are
- no more matches.
-
- - Function: char * filename_completion_function (char *text, int state)
- A generator function for filename completion in the general case.
- Note that completion in Bash is a little different because of all
- the pathnames that must be followed when looking up completions
- for a command. The Bash source is a useful reference for writing
- custom completion functions.
-
- - Function: char * username_completion_function (char *text, int state)
- A completion generator for usernames. TEXT contains a partial
- username preceded by a random character (usually `~'). As with all
- completion generators, STATE is zero on the first call and non-zero
- for subsequent calls.
-
-
-File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers
-
-Completion Variables
---------------------
-
- - Variable: Function * rl_completion_entry_function
- A pointer to the generator function for `completion_matches ()'.
- `NULL' means to use `filename_entry_function ()', the default
- filename completer.
-
- - Variable: CPPFunction * rl_attempted_completion_function
- A pointer to an alternative function to create matches. The
- function is called with TEXT, START, and END. START and END are
- indices in `rl_line_buffer' saying what the boundaries of TEXT
- are. If this function exists and returns `NULL', or if this
- variable is set to `NULL', then `rl_complete ()' will call the
- value of `rl_completion_entry_function' to generate matches,
- otherwise the array of strings returned will be used.
-
- - Variable: int rl_completion_query_items
- Up to this many items will be displayed in response to a
- possible-completions call. After that, we ask the user if she is
- sure she wants to see them all. The default value is 100.
-
- - Variable: char * rl_basic_word_break_characters
- The basic list of characters that signal a break between words for
- the completer routine. The default value of this variable is the
- characters which break words for completion in Bash, i.e., `"
- \t\n\"\\'`@$><=;|&{("'.
-
- - Variable: char * rl_completer_word_break_characters
- The list of characters that signal a break between words for
- `rl_complete_internal ()'. The default list is the value of
- `rl_basic_word_break_characters'.
-
- - Variable: char * rl_special_prefixes
- The list of characters that are word break characters, but should
- be left in TEXT when it is passed to the completion function.
- Programs can use this to help determine what kind of completing to
- do. For instance, Bash sets this variable to "$@" so that it can
- complete shell variables and hostnames.
-
- - Variable: int rl_ignore_completion_duplicates
- If non-zero, then disallow duplicates in the matches. Default is
- 1.
-
- - Variable: int rl_filename_completion_desired
- Non-zero means that the results of the matches are to be treated as
- filenames. This is *always* zero on entry, and can only be changed
- within a completion entry generator function. If it is set to a
- non-zero value, directory names have a slash appended and Readline
- attempts to quote completed filenames if they contain any embedded
- word break characters.
-
- - Variable: int rl_filename_quoting_desired
- Non-zero means that the results of the matches are to be quoted
- using double quotes (or an application-specific quoting mechanism)
- if the completed filename contains any characters in
- `rl_completer_word_break_chars'. This is *always* non-zero on
- entry, and can only be changed within a completion entry generator
- function.
-
- - Variable: 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 `NULL' terminated array of matches.
- The first element (`matches[0]') is the maximal substring common
- to all matches. This function can re-arrange the list of matches
- as required, but each element deleted from the array must be freed.
-
- - Variable: char * rl_completer_quote_characters
- List of characters which can be used to quote a substring of the
- line. Completion occurs on the entire substring, and within the
- substring `rl_completer_word_break_characters' are treated as any
- other character, unless they also appear within this list.
-
-
-File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers
-
-A Short Completion Example
---------------------------
-
- Here is a small application demonstrating the use of the GNU Readline
-library. It is called `fileman', and the source code resides in
-`examples/fileman.c'. This sample application provides completion of
-command names, line editing features, and access to the history list.
-
- /* fileman.c -- A tiny application which demonstrates how to use the
- GNU Readline library. This application interactively allows users
- to manipulate files and their modes. */
-
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/file.h>
- #include <sys/stat.h>
- #include <sys/errno.h>
-
- #include <readline/readline.h>
- #include <readline/history.h>
-
- extern char *getwd ();
- extern char *xmalloc ();
-
- /* The names of functions that actually do the manipulation. */
- int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
- int com_delete (), com_help (), com_cd (), com_quit ();
-
- /* A structure which contains information on the commands this program
- can understand. */
-
- typedef struct {
- char *name; /* User printable name of the function. */
- Function *func; /* Function to call to do the job. */
- char *doc; /* Documentation for this function. */
- } COMMAND;
-
- COMMAND commands[] = {
- { "cd", com_cd, "Change to directory DIR" },
- { "delete", com_delete, "Delete FILE" },
- { "help", com_help, "Display this text" },
- { "?", com_help, "Synonym for `help'" },
- { "list", com_list, "List files in DIR" },
- { "ls", com_list, "Synonym for `list'" },
- { "pwd", com_pwd, "Print the current working directory" },
- { "quit", com_quit, "Quit using Fileman" },
- { "rename", com_rename, "Rename FILE to NEWNAME" },
- { "stat", com_stat, "Print out statistics on FILE" },
- { "view", com_view, "View the contents of FILE" },
- { (char *)NULL, (Function *)NULL, (char *)NULL }
- };
-
- /* Forward declarations. */
- char *stripwhite ();
- COMMAND *find_command ();
-
- /* The name of this program, as taken from argv[0]. */
- char *progname;
-
- /* When non-zero, this global means the user is done using this program. */
- int done;
-
- char *
- dupstr (s)
- int s;
- {
- char *r;
-
- r = xmalloc (strlen (s) + 1);
- strcpy (r, s);
- return (r);
- }
-
- main (argc, argv)
- int argc;
- char **argv;
- {
- char *line, *s;
-
- progname = argv[0];
-
- initialize_readline (); /* Bind our completer. */
-
- /* Loop reading and executing lines until the user quits. */
- for ( ; done == 0; )
- {
- line = readline ("FileMan: ");
-
- if (!line)
- break;
-
- /* Remove leading and trailing whitespace from the line.
- Then, if there is anything left, add it to the history list
- and execute it. */
- s = stripwhite (line);
-
- if (*s)
- {
- add_history (s);
- execute_line (s);
- }
-
- free (line);
- }
- exit (0);
- }
-
- /* Execute a command line. */
- int
- execute_line (line)
- char *line;
- {
- register int i;
- COMMAND *command;
- char *word;
-
- /* Isolate the command word. */
- i = 0;
- while (line[i] && whitespace (line[i]))
- i++;
- word = line + i;
-
- while (line[i] && !whitespace (line[i]))
- i++;
-
- if (line[i])
- line[i++] = '\0';
-
- command = find_command (word);
-
- if (!command)
- {
- fprintf (stderr, "%s: No such command for FileMan.\n", word);
- return (-1);
- }
-
- /* Get argument to command, if any. */
- while (whitespace (line[i]))
- i++;
-
- word = line + i;
-
- /* Call the function. */
- return ((*(command->func)) (word));
- }
-
- /* Look up NAME as the name of a command, and return a pointer to that
- command. Return a NULL pointer if NAME isn't a command name. */
- COMMAND *
- find_command (name)
- char *name;
- {
- register int i;
-
- for (i = 0; commands[i].name; i++)
- if (strcmp (name, commands[i].name) == 0)
- return (&commands[i]);
-
- return ((COMMAND *)NULL);
- }
-
- /* Strip whitespace from the start and end of STRING. Return a pointer
- into STRING. */
- char *
- stripwhite (string)
- char *string;
- {
- register char *s, *t;
-
- for (s = string; whitespace (*s); s++)
- ;
-
- if (*s == 0)
- return (s);
-
- t = s + strlen (s) - 1;
- while (t > s && whitespace (*t))
- t--;
- *++t = '\0';
-
- return s;
- }
-
- /* **************************************************************** */
- /* */
- /* Interface to Readline Completion */
- /* */
- /* **************************************************************** */
-
- char *command_generator ();
- char **fileman_completion ();
-
- /* Tell the GNU Readline library how to complete. We want to try to complete
- on command names if this is the first word in the line, or on filenames
- if not. */
- initialize_readline ()
- {
- /* Allow conditional parsing of the ~/.inputrc file. */
- rl_readline_name = "FileMan";
-
- /* Tell the completer that we want a crack first. */
- rl_attempted_completion_function = (CPPFunction *)fileman_completion;
- }
-
- /* Attempt to complete on the contents of TEXT. START and END 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;
-
- matches = (char **)NULL;
-
- /* If this word is at the start of the line, then it is a command
- to complete. Otherwise it is the name of a file in the current
- directory. */
- if (start == 0)
- matches = completion_matches (text, command_generator);
-
- return (matches);
- }
-
- /* Generator function for command completion. STATE lets us know whether
- to start from scratch; without any state (i.e. STATE == 0), then we
- start at the top of the list. */
- char *
- command_generator (text, state)
- char *text;
- int state;
- {
- static int list_index, len;
- char *name;
-
- /* If this is a new word to complete, initialize now. This includes
- saving the length of TEXT for efficiency, and initializing the index
- variable to 0. */
- if (!state)
- {
- list_index = 0;
- len = strlen (text);
- }
-
- /* Return the next name which partially matches from the command list. */
- while (name = commands[list_index].name)
- {
- list_index++;
-
- if (strncmp (name, text, len) == 0)
- return (dupstr(name));
- }
-
- /* If no names matched, then return NULL. */
- return ((char *)NULL);
- }
-
- /* **************************************************************** */
- /* */
- /* FileMan Commands */
- /* */
- /* **************************************************************** */
-
- /* String to pass to system (). This is for the LIST, VIEW and RENAME
- commands. */
- static char syscom[1024];
-
- /* List the file(s) named in arg. */
- com_list (arg)
- char *arg;
- {
- if (!arg)
- arg = "";
-
- sprintf (syscom, "ls -FClg %s", arg);
- return (system (syscom));
- }
-
- com_view (arg)
- char *arg;
- {
- if (!valid_argument ("view", arg))
- return 1;
-
- sprintf (syscom, "more %s", arg);
- return (system (syscom));
- }
-
- com_rename (arg)
- char *arg;
- {
- too_dangerous ("rename");
- return (1);
- }
-
- com_stat (arg)
- char *arg;
- {
- struct stat finfo;
-
- if (!valid_argument ("stat", arg))
- return (1);
-
- if (stat (arg, &finfo) == -1)
- {
- perror (arg);
- return (1);
- }
-
- printf ("Statistics for `%s':\n", arg);
-
- printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
- finfo.st_nlink,
- (finfo.st_nlink == 1) ? "" : "s",
- finfo.st_size,
- (finfo.st_size == 1) ? "" : "s");
- printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
- printf (" Last access at: %s", ctime (&finfo.st_atime));
- printf (" Last modified at: %s", ctime (&finfo.st_mtime));
- return (0);
- }
-
- com_delete (arg)
- char *arg;
- {
- too_dangerous ("delete");
- return (1);
- }
-
- /* Print out help for ARG, or for all of the commands if ARG is
- not present. */
- com_help (arg)
- char *arg;
- {
- register int i;
- int printed = 0;
-
- for (i = 0; commands[i].name; i++)
- {
- if (!*arg || (strcmp (arg, commands[i].name) == 0))
- {
- printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
- printed++;
- }
- }
-
- if (!printed)
- {
- printf ("No commands match `%s'. Possibilties are:\n", arg);
-
- for (i = 0; commands[i].name; i++)
- {
- /* Print in six columns. */
- if (printed == 6)
- {
- printed = 0;
- printf ("\n");
- }
-
- printf ("%s\t", commands[i].name);
- printed++;
- }
-
- if (printed)
- printf ("\n");
- }
- return (0);
- }
-
- /* Change to the directory ARG. */
- com_cd (arg)
- char *arg;
- {
- if (chdir (arg) == -1)
- {
- perror (arg);
- return 1;
- }
-
- com_pwd ("");
- return (0);
- }
-
- /* Print out the current working directory. */
- com_pwd (ignore)
- char *ignore;
- {
- char dir[1024], *s;
-
- s = getwd (dir);
- if (s == 0)
- {
- printf ("Error getting pwd: %s\n", dir);
- return 1;
- }
-
- printf ("Current directory is %s\n", dir);
- return 0;
- }
-
- /* The user wishes to quit using this program. Just set DONE non-zero. */
- com_quit (arg)
- char *arg;
- {
- done = 1;
- return (0);
- }
-
- /* Function which tells you that you can't do this. */
- too_dangerous (caller)
- char *caller;
- {
- fprintf (stderr,
- "%s: Too dangerous for me to distribute. Write it yourself.\n",
- caller);
- }
-
- /* Return non-zero if ARG is a valid argument for CALLER, else print
- an error message and return zero. */
- int
- valid_argument (caller, arg)
- char *caller, *arg;
- {
- if (!arg || !*arg)
- {
- fprintf (stderr, "%s: Argument required.\n", caller);
- return (0);
- }
-
- return (1);
- }
-
-
-File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top
-
-Concept Index
-*************
-
-* Menu:
-
-* interaction, readline: Readline Interaction.
-* Kill ring: Readline Killing Commands.
-* Killing text: Readline Killing Commands.
-* readline, function: Basic Behavior.
-* Yanking text: Readline Killing Commands.
-
-
-File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top
-
-Function and Variable Index
-***************************
-
-* Menu:
-
-* $else: Conditional Init Constructs.
-* $endif: Conditional Init Constructs.
-* $if: Conditional Init Constructs.
-* abort (C-g): Miscellaneous Commands.
-* accept-line (Newline, Return): Commands For History.
-* alphabetic: Utility Functions.
-* backward-char (C-b): Commands For Moving.
-* backward-delete-char (Rubout): Commands For Text.
-* backward-kill-line (C-x Rubout): Commands For Killing.
-* backward-kill-word (M-DEL): Commands For Killing.
-* backward-word (M-b): Commands For Moving.
-* beginning-of-history (M-<): Commands For History.
-* beginning-of-line (C-a): Commands For Moving.
-* bell-style: Readline Init Syntax.
-* call-last-kbd-macro (C-x e): Keyboard Macros.
-* capitalize-word (M-c): Commands For Text.
-* clear-screen (C-l): Commands For Moving.
-* comment-begin: Readline Init Syntax.
-* complete (TAB): Commands For Completion.
-* completion-query-items: Readline Init Syntax.
-* completion_matches: Completion Functions.
-* convert-meta: Readline Init Syntax.
-* delete-char (C-d): Commands For Text.
-* delete-horizontal-space (): Commands For Killing.
-* digit-argument (M-0, M-1, ... M-): Numeric Arguments.
-* digit_p: Utility Functions.
-* digit_value: Utility Functions.
-* ding: Utility Functions.
-* do-uppercase-version (M-a, M-b, ...): Miscellaneous Commands.
-* downcase-word (M-l): Commands For Text.
-* dump-functions (): Miscellaneous Commands.
-* editing-mode: Readline Init Syntax.
-* end-kbd-macro (C-x )): Keyboard Macros.
-* end-of-history (M->): Commands For History.
-* end-of-line (C-e): Commands For Moving.
-* expand-tilde: Readline Init Syntax.
-* filename_completion_function: Completion Functions.
-* forward-char (C-f): Commands For Moving.
-* forward-search-history (C-s): Commands For History.
-* forward-word (M-f): Commands For Moving.
-* free_undo_list: Allowing Undoing.
-* history-search-backward (): Commands For History.
-* history-search-forward (): Commands For History.
-* horizontal-scroll-mode: Readline Init Syntax.
-* insert-completions (): Commands For Completion.
-* keymap: Readline Init Syntax.
-* kill-line (C-k): Commands For Killing.
-* kill-whole-line (): Commands For Killing.
-* kill-word (M-d): Commands For Killing.
-* lowercase_p: Utility Functions.
-* mark-modified-lines: Readline Init Syntax.
-* meta-flag: Readline Init Syntax.
-* next-history (C-n): Commands For History.
-* non-incremental-forward-search-history (M-n): Commands For History.
-* non-incremental-reverse-search-history (M-p): Commands For History.
-* numeric: Utility Functions.
-* output-meta: Readline Init Syntax.
-* possible-completions (M-?): Commands For Completion.
-* prefix-meta (ESC): Miscellaneous Commands.
-* previous-history (C-p): Commands For History.
-* quoted-insert (C-q, C-v): Commands For Text.
-* re-read-init-file (C-x C-r): Miscellaneous Commands.
-* readline: Basic Behavior.
-* redraw-current-line (): Commands For Moving.
-* reverse-search-history (C-r): Commands For History.
-* revert-line (M-r): Miscellaneous Commands.
-* rl_add_defun: Function Naming.
-* rl_add_undo: Allowing Undoing.
-* rl_attempted_completion_function: Completion Variables.
-* rl_basic_word_break_characters: Completion Variables.
-* rl_begin_undo_group: Allowing Undoing.
-* rl_bind_key: Binding Keys.
-* rl_bind_key_in_map: Binding Keys.
-* rl_clear_message: Redisplay.
-* rl_complete: How Completing Works.
-* rl_complete: Completion Functions.
-* rl_completer_quote_characters: Completion Variables.
-* rl_completer_word_break_characters: Completion Variables.
-* rl_complete_internal: Completion Functions.
-* rl_completion_entry_function: Completion Variables.
-* rl_completion_entry_function: How Completing Works.
-* rl_completion_query_items: Completion Variables.
-* rl_copy_keymap: Keymaps.
-* rl_copy_text: Modifying Text.
-* rl_delete_text: Modifying Text.
-* rl_discard_keymap: Keymaps.
-* rl_done: Function Writing.
-* rl_do_undo: Allowing Undoing.
-* rl_end: Function Writing.
-* rl_end_undo_group: Allowing Undoing.
-* rl_filename_completion_desired: Completion Variables.
-* rl_filename_quoting_desired: Completion Variables.
-* rl_forced_update_display: Redisplay.
-* rl_function_of_keyseq: Associating Function Names and Bindings.
-* rl_generic_bind: Binding Keys.
-* rl_get_keymap: Keymaps.
-* rl_get_keymap_by_name: Keymaps.
-* rl_ignore_completion_duplicates: Completion Variables.
-* rl_ignore_some_completions_function: Completion Variables.
-* rl_insert_completions: Completion Functions.
-* rl_insert_text: Modifying Text.
-* rl_instream: Function Writing.
-* rl_invoking_keyseqs: Associating Function Names and Bindings.
-* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings.
-* rl_kill_text: Modifying Text.
-* rl_line_buffer: Function Writing.
-* rl_make_bare_keymap: Keymaps.
-* rl_make_keymap: Keymaps.
-* rl_mark: Function Writing.
-* rl_message: Redisplay.
-* rl_modifying: Allowing Undoing.
-* rl_named_function: Associating Function Names and Bindings.
-* rl_on_new_line: Redisplay.
-* rl_outstream: Function Writing.
-* rl_parse_and_bind: Binding Keys.
-* rl_pending_input: Function Writing.
-* rl_point: Function Writing.
-* rl_possible_completions: Completion Functions.
-* rl_prompt: Function Writing.
-* rl_readline_name: Function Writing.
-* rl_redisplay: Redisplay.
-* rl_reset_line_state: Redisplay.
-* rl_reset_terminal: Utility Functions.
-* rl_set_keymap: Keymaps.
-* rl_special_prefixes: Completion Variables.
-* rl_startup_hook: Function Writing.
-* rl_terminal_name: Function Writing.
-* rl_unbind_key: Binding Keys.
-* rl_unbind_key_in_map: Binding Keys.
-* self-insert (a, b, A, 1, !, ...): Commands For Text.
-* show-all-if-ambiguous: Readline Init Syntax.
-* start-kbd-macro (C-x (): Keyboard Macros.
-* tab-insert (M-TAB): Commands For Text.
-* tilde-expand (M-~): Miscellaneous Commands.
-* to_lower: Utility Functions.
-* to_upper: Utility Functions.
-* transpose-chars (C-t): Commands For Text.
-* transpose-words (M-t): Commands For Text.
-* undo (C-_, C-x C-u): Miscellaneous Commands.
-* universal-argument (): Numeric Arguments.
-* unix-line-discard (C-u): Commands For Killing.
-* unix-word-rubout (C-w): Commands For Killing.
-* upcase-word (M-u): Commands For Text.
-* uppercase_p: Utility Functions.
-* username_completion_function: Completion Functions.
-* yank (C-y): Commands For Killing.
-* yank-last-arg (M-., M-_): Commands For History.
-* yank-nth-arg (M-C-y): Commands For History.
-* yank-pop (M-y): Commands For Killing.
-
-
diff --git a/gnu/lib/libreadline/doc/rlman.texinfo b/gnu/lib/libreadline/doc/rlman.texinfo
deleted file mode 100644
index ec1406670a35..000000000000
--- a/gnu/lib/libreadline/doc/rlman.texinfo
+++ /dev/null
@@ -1,111 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename readline.info
-@settitle GNU Readline Library
-@comment %**end of header (This is for running Texinfo on a region.)
-@synindex vr fn
-@setchapternewpage odd
-
-@ignore
-last change: Thu Jul 21 16:02:40 EDT 1994
-@end ignore
-
-@set EDITION 2.0
-@set VERSION 2.0
-@set UPDATED 21 July 1994
-@set UPDATE-MONTH July 1994
-
-@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
-@title GNU Readline Library
-@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
-@subtitle @value{UPDATE-MONTH}
-@author Brian Fox, Free Software Foundation
-@author Chet Ramey, Case Western Reserve University
-
-@page
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-@end titlepage
-
-@ifinfo
-@node Top
-@top GNU Readline Library
-
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-@menu
-* Command Line Editing:: GNU Readline User's Manual.
-* Programming with GNU Readline:: GNU Readline Programmer's Manual.
-* Concept Index:: Index of concepts described in this manual.
-* Function and Variable Index:: Index of externally visible functions
- and variables.
-@end menu
-@end ifinfo
-
-@include rluser.texinfo
-@include rltech.texinfo
-
-@node Concept Index
-@unnumbered Concept Index
-@printindex cp
-
-@node Function and Variable Index
-@unnumbered Function and Variable Index
-@printindex fn
-
-@contents
-@bye
diff --git a/gnu/lib/libreadline/doc/texindex.c b/gnu/lib/libreadline/doc/texindex.c
deleted file mode 100644
index 9233bab12690..000000000000
--- a/gnu/lib/libreadline/doc/texindex.c
+++ /dev/null
@@ -1,1666 +0,0 @@
-/* Prepare TeX index dribble output into an actual index.
-
- Version 1.45
-
- Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include "getopt.h"
-#include "bashansi.h"
-
-#if !defined (errno)
-extern int errno;
-#endif
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#else /* !HAVE_UNISTD_H */
-extern long lseek ();
-#endif /* !HAVE_UNISTD_H */
-
-extern char *mktemp ();
-
-#if !defined (HAVE_STRERROR)
-extern int sys_nerr;
-extern char *sys_errlist[];
-#endif
-
-#include <sys/types.h>
-
-#if defined (_AIX) || !defined (_POSIX_VERSION)
-# include <sys/file.h>
-#endif
-
-#include <fcntl.h>
-
-#define TI_NO_ERROR 0
-#define TI_FATAL_ERROR 1
-
-#if !defined (SEEK_SET)
-# define SEEK_SET 0
-# define SEEK_CUR 1
-# define SEEK_END 2
-#endif /* !SEEK_SET */
-
-/* When sorting in core, this structure describes one line
- and the position and length of its first keyfield. */
-struct lineinfo
-{
- char *text; /* The actual text of the line. */
- union {
- char *text; /* The start of the key (for textual comparison). */
- long number; /* The numeric value (for numeric comparison). */
- } key;
- long keylen; /* Length of KEY field. */
-};
-
-/* This structure describes a field to use as a sort key. */
-struct keyfield
-{
- int startwords; /* Number of words to skip. */
- int startchars; /* Number of additional chars to skip. */
- int endwords; /* Number of words to ignore at end. */
- int endchars; /* Ditto for characters of last word. */
- char ignore_blanks; /* Non-zero means ignore spaces and tabs. */
- char fold_case; /* Non-zero means case doesn't matter. */
- char reverse; /* Non-zero means compare in reverse order. */
- char numeric; /* Non-zeros means field is ASCII numeric. */
- char positional; /* Sort according to file position. */
- char braced; /* Count balanced-braced groupings as fields. */
-};
-
-/* Vector of keyfields to use. */
-struct keyfield keyfields[3];
-
-/* Number of keyfields stored in that vector. */
-int num_keyfields = 3;
-
-/* Vector of input file names, terminated with a null pointer. */
-char **infiles;
-
-/* Vector of corresponding output file names, or NULL, meaning default it
- (add an `s' to the end). */
-char **outfiles;
-
-/* Length of `infiles'. */
-int num_infiles;
-
-/* Pointer to the array of pointers to lines being sorted. */
-char **linearray;
-
-/* The allocated length of `linearray'. */
-long nlines;
-
-/* Directory to use for temporary files. On Unix, it ends with a slash. */
-char *tempdir;
-
-/* Start of filename to use for temporary files. */
-char *tempbase;
-
-/* Number of last temporary file. */
-int tempcount;
-
-/* Number of last temporary file already deleted.
- Temporary files are deleted by `flush_tempfiles' in order of creation. */
-int last_deleted_tempcount;
-
-/* During in-core sort, this points to the base of the data block
- which contains all the lines of data. */
-char *text_base;
-
-/* Additional command switches .*/
-
-/* Nonzero means do not delete tempfiles -- for debugging. */
-int keep_tempfiles;
-
-/* The name this program was run with. */
-char *program_name;
-
-/* Forward declarations of functions in this file. */
-
-void decode_command ();
-void sort_in_core ();
-void sort_offline ();
-char **parsefile ();
-char *find_field ();
-char *find_pos ();
-long find_value ();
-char *find_braced_pos ();
-char *find_braced_end ();
-void writelines ();
-int compare_field ();
-int compare_full ();
-long readline ();
-int merge_files ();
-int merge_direct ();
-void pfatal_with_name ();
-void fatal ();
-void error ();
-void *xmalloc (), *xrealloc ();
-char *concat ();
-char *maketempname ();
-void flush_tempfiles ();
-char *tempcopy ();
-
-#define MAX_IN_CORE_SORT 500000
-
-void
-main (argc, argv)
- int argc;
- char **argv;
-{
- int i;
-
- tempcount = 0;
- last_deleted_tempcount = 0;
- program_name = argv[0];
-
- /* Describe the kind of sorting to do. */
- /* The first keyfield uses the first braced field and folds case. */
- keyfields[0].braced = 1;
- keyfields[0].fold_case = 1;
- keyfields[0].endwords = -1;
- keyfields[0].endchars = -1;
-
- /* The second keyfield uses the second braced field, numerically. */
- keyfields[1].braced = 1;
- keyfields[1].numeric = 1;
- keyfields[1].startwords = 1;
- keyfields[1].endwords = -1;
- keyfields[1].endchars = -1;
-
- /* The third keyfield (which is ignored while discarding duplicates)
- compares the whole line. */
- keyfields[2].endwords = -1;
- keyfields[2].endchars = -1;
-
- decode_command (argc, argv);
-
- tempbase = mktemp (concat ("txiXXXXXX", "", ""));
-
- /* Process input files completely, one by one. */
-
- for (i = 0; i < num_infiles; i++)
- {
- int desc;
- long ptr;
- char *outfile;
-
- desc = open (infiles[i], O_RDONLY, 0);
- if (desc < 0)
- pfatal_with_name (infiles[i]);
- lseek (desc, 0L, SEEK_END);
- ptr = lseek (desc, 0L, SEEK_CUR);
-
- close (desc);
-
- outfile = outfiles[i];
- if (!outfile)
- {
- outfile = concat (infiles[i], "s", "");
- }
-
- if (ptr < MAX_IN_CORE_SORT)
- /* Sort a small amount of data. */
- sort_in_core (infiles[i], ptr, outfile);
- else
- sort_offline (infiles[i], ptr, outfile);
- }
-
- flush_tempfiles (tempcount);
- exit (TI_NO_ERROR);
-}
-
-void
-usage ()
-{
- fprintf (stderr, "\
-Usage: %s [-k] infile [-o outfile] ...\n", program_name);
- exit (1);
-}
-
-/* Decode the command line arguments to set the parameter variables
- and set up the vector of keyfields and the vector of input files. */
-
-void
-decode_command (argc, argv)
- int argc;
- char **argv;
-{
- int optc;
- char **ip;
- char **op;
-
- /* Store default values into parameter variables. */
-
- tempdir = getenv ("TMPDIR");
- if (tempdir == NULL)
- tempdir = "/tmp/";
- else
- tempdir = concat (tempdir, "/", "");
-
- keep_tempfiles = 0;
-
- /* Allocate ARGC input files, which must be enough. */
-
- infiles = (char **) xmalloc (argc * sizeof (char *));
- outfiles = (char **) xmalloc (argc * sizeof (char *));
- ip = infiles;
- op = outfiles;
-
- while ((optc = getopt (argc, argv, "-ko:")) != EOF)
- {
- switch (optc)
- {
- case 1: /* Non-option filename. */
- *ip++ = optarg;
- *op++ = NULL;
- break;
-
- case 'k':
- keep_tempfiles = 1;
- break;
-
- case 'o':
- if (op > outfiles)
- *(op - 1) = optarg;
- break;
-
- default:
- usage ();
- }
- }
-
- /* Record number of keyfields and terminate list of filenames. */
- num_infiles = ip - infiles;
- *ip = 0;
- if (num_infiles == 0)
- usage ();
-}
-
-/* Return a name for a temporary file. */
-
-char *
-maketempname (count)
- int count;
-{
- char tempsuffix[10];
- sprintf (tempsuffix, "%d", count);
- return concat (tempdir, tempbase, tempsuffix);
-}
-
-/* Delete all temporary files up to TO_COUNT. */
-
-void
-flush_tempfiles (to_count)
- int to_count;
-{
- if (keep_tempfiles)
- return;
- while (last_deleted_tempcount < to_count)
- unlink (maketempname (++last_deleted_tempcount));
-}
-
-/* Copy the input file open on IDESC into a temporary file
- and return the temporary file name. */
-
-#define BUFSIZE 1024
-
-char *
-tempcopy (idesc)
- int idesc;
-{
- char *outfile = maketempname (++tempcount);
- int odesc;
- char buffer[BUFSIZE];
-
- odesc = open (outfile, O_WRONLY | O_CREAT, 0666);
-
- if (odesc < 0)
- pfatal_with_name (outfile);
-
- while (1)
- {
- int nread = read (idesc, buffer, BUFSIZE);
- write (odesc, buffer, nread);
- if (!nread)
- break;
- }
-
- close (odesc);
-
- return outfile;
-}
-
-/* Compare LINE1 and LINE2 according to the specified set of keyfields. */
-
-int
-compare_full (line1, line2)
- char **line1, **line2;
-{
- int i;
-
- /* Compare using the first keyfield;
- if that does not distinguish the lines, try the second keyfield;
- and so on. */
-
- for (i = 0; i < num_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], *line1, &length1);
- char *start2 = find_field (&keyfields[i], *line2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, *line1 - text_base,
- start2, length2, *line2 - text_base);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Compare LINE1 and LINE2, described by structures
- in which the first keyfield is identified in advance.
- For positional sorting, assumes that the order of the lines in core
- reflects their nominal order. */
-
-int
-compare_prepared (line1, line2)
- struct lineinfo *line1, *line2;
-{
- int i;
- int tem;
- char *text1, *text2;
-
- /* Compare using the first keyfield, which has been found for us already. */
- if (keyfields->positional)
- {
- if (line1->text - text_base > line2->text - text_base)
- tem = 1;
- else
- tem = -1;
- }
- else if (keyfields->numeric)
- tem = line1->key.number - line2->key.number;
- else
- tem = compare_field (keyfields, line1->key.text, line1->keylen, 0,
- line2->key.text, line2->keylen, 0);
- if (tem)
- {
- if (keyfields->reverse)
- return -tem;
- return tem;
- }
-
- text1 = line1->text;
- text2 = line2->text;
-
- /* Compare using the second keyfield;
- if that does not distinguish the lines, try the third keyfield;
- and so on. */
-
- for (i = 1; i < num_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], text1, &length1);
- char *start2 = find_field (&keyfields[i], text2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, text1 - text_base,
- start2, length2, text2 - text_base);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Like compare_full but more general.
- You can pass any strings, and you can say how many keyfields to use.
- POS1 and POS2 should indicate the nominal positional ordering of
- the two lines in the input. */
-
-int
-compare_general (str1, str2, pos1, pos2, use_keyfields)
- char *str1, *str2;
- long pos1, pos2;
- int use_keyfields;
-{
- int i;
-
- /* Compare using the first keyfield;
- if that does not distinguish the lines, try the second keyfield;
- and so on. */
-
- for (i = 0; i < use_keyfields; i++)
- {
- long length1, length2;
- char *start1 = find_field (&keyfields[i], str1, &length1);
- char *start2 = find_field (&keyfields[i], str2, &length2);
- int tem = compare_field (&keyfields[i], start1, length1, pos1,
- start2, length2, pos2);
- if (tem)
- {
- if (keyfields[i].reverse)
- return -tem;
- return tem;
- }
- }
-
- return 0; /* Lines match exactly. */
-}
-
-/* Find the start and length of a field in STR according to KEYFIELD.
- A pointer to the starting character is returned, and the length
- is stored into the int that LENGTHPTR points to. */
-
-char *
-find_field (keyfield, str, lengthptr)
- struct keyfield *keyfield;
- char *str;
- long *lengthptr;
-{
- char *start;
- char *end;
- char *(*fun) ();
-
- if (keyfield->braced)
- fun = find_braced_pos;
- else
- fun = find_pos;
-
- start = (*fun) (str, keyfield->startwords, keyfield->startchars,
- keyfield->ignore_blanks);
- if (keyfield->endwords < 0)
- {
- if (keyfield->braced)
- end = find_braced_end (start);
- else
- {
- end = start;
- while (*end && *end != '\n')
- end++;
- }
- }
- else
- {
- end = (*fun) (str, keyfield->endwords, keyfield->endchars, 0);
- if (end - str < start - str)
- end = start;
- }
- *lengthptr = end - start;
- return start;
-}
-
-/* Return a pointer to a specified place within STR,
- skipping (from the beginning) WORDS words and then CHARS chars.
- If IGNORE_BLANKS is nonzero, we skip all blanks
- after finding the specified word. */
-
-char *
-find_pos (str, words, chars, ignore_blanks)
- char *str;
- int words, chars;
- int ignore_blanks;
-{
- int i;
- char *p = str;
-
- for (i = 0; i < words; i++)
- {
- char c;
- /* Find next bunch of nonblanks and skip them. */
- while ((c = *p) == ' ' || c == '\t')
- p++;
- while ((c = *p) && c != '\n' && !(c == ' ' || c == '\t'))
- p++;
- if (!*p || *p == '\n')
- return p;
- }
-
- while (*p == ' ' || *p == '\t')
- p++;
-
- for (i = 0; i < chars; i++)
- {
- if (!*p || *p == '\n')
- break;
- p++;
- }
- return p;
-}
-
-/* Like find_pos but assumes that each field is surrounded by braces
- and that braces within fields are balanced. */
-
-char *
-find_braced_pos (str, words, chars, ignore_blanks)
- char *str;
- int words, chars;
- int ignore_blanks;
-{
- int i;
- int bracelevel;
- char *p = str;
- char c;
-
- for (i = 0; i < words; i++)
- {
- bracelevel = 1;
- while ((c = *p++) != '{' && c != '\n' && c)
- /* Do nothing. */ ;
- if (c != '{')
- return p - 1;
- while (bracelevel)
- {
- c = *p++;
- if (c == '{')
- bracelevel++;
- if (c == '}')
- bracelevel--;
- if (c == 0 || c == '\n')
- return p - 1;
- }
- }
-
- while ((c = *p++) != '{' && c != '\n' && c)
- /* Do nothing. */ ;
-
- if (c != '{')
- return p - 1;
-
- if (ignore_blanks)
- while ((c = *p) == ' ' || c == '\t')
- p++;
-
- for (i = 0; i < chars; i++)
- {
- if (!*p || *p == '\n')
- break;
- p++;
- }
- return p;
-}
-
-/* Find the end of the balanced-brace field which starts at STR.
- The position returned is just before the closing brace. */
-
-char *
-find_braced_end (str)
- char *str;
-{
- int bracelevel;
- char *p = str;
- char c;
-
- bracelevel = 1;
- while (bracelevel)
- {
- c = *p++;
- if (c == '{')
- bracelevel++;
- if (c == '}')
- bracelevel--;
- if (c == 0 || c == '\n')
- return p - 1;
- }
- return p - 1;
-}
-
-long
-find_value (start, length)
- char *start;
- long length;
-{
- while (length != 0L)
- {
- if (isdigit (*start))
- return atol (start);
- length--;
- start++;
- }
- return 0l;
-}
-
-/* Vector used to translate characters for comparison.
- This is how we make all alphanumerics follow all else,
- and ignore case in the first sorting. */
-int char_order[256];
-
-void
-init_char_order ()
-{
- int i;
- for (i = 1; i < 256; i++)
- char_order[i] = i;
-
- for (i = '0'; i <= '9'; i++)
- char_order[i] += 512;
-
- for (i = 'a'; i <= 'z'; i++)
- {
- char_order[i] = 512 + i;
- char_order[i + 'A' - 'a'] = 512 + i;
- }
-}
-
-/* Compare two fields (each specified as a start pointer and a character count)
- according to KEYFIELD.
- The sign of the value reports the relation between the fields. */
-
-int
-compare_field (keyfield, start1, length1, pos1, start2, length2, pos2)
- struct keyfield *keyfield;
- char *start1;
- long length1;
- long pos1;
- char *start2;
- long length2;
- long pos2;
-{
- if (keyfields->positional)
- {
- if (pos1 > pos2)
- return 1;
- else
- return -1;
- }
- if (keyfield->numeric)
- {
- long value = find_value (start1, length1) - find_value (start2, length2);
- if (value > 0)
- return 1;
- if (value < 0)
- return -1;
- return 0;
- }
- else
- {
- char *p1 = start1;
- char *p2 = start2;
- char *e1 = start1 + length1;
- char *e2 = start2 + length2;
-
- while (1)
- {
- int c1, c2;
-
- if (p1 == e1)
- c1 = 0;
- else
- c1 = *p1++;
- if (p2 == e2)
- c2 = 0;
- else
- c2 = *p2++;
-
- if (char_order[c1] != char_order[c2])
- return char_order[c1] - char_order[c2];
- if (!c1)
- break;
- }
-
- /* Strings are equal except possibly for case. */
- p1 = start1;
- p2 = start2;
- while (1)
- {
- int c1, c2;
-
- if (p1 == e1)
- c1 = 0;
- else
- c1 = *p1++;
- if (p2 == e2)
- c2 = 0;
- else
- c2 = *p2++;
-
- if (c1 != c2)
- /* Reverse sign here so upper case comes out last. */
- return c2 - c1;
- if (!c1)
- break;
- }
-
- return 0;
- }
-}
-
-/* A `struct linebuffer' is a structure which holds a line of text.
- `readline' reads a line from a stream into a linebuffer
- and works regardless of the length of the line. */
-
-struct linebuffer
-{
- long size;
- char *buffer;
-};
-
-/* Initialize LINEBUFFER for use. */
-
-void
-initbuffer (linebuffer)
- struct linebuffer *linebuffer;
-{
- linebuffer->size = 200;
- linebuffer->buffer = (char *) xmalloc (200);
-}
-
-/* Read a line of text from STREAM into LINEBUFFER.
- Return the length of the line. */
-
-long
-readline (linebuffer, stream)
- struct linebuffer *linebuffer;
- FILE *stream;
-{
- char *buffer = linebuffer->buffer;
- char *p = linebuffer->buffer;
- char *end = p + linebuffer->size;
-
- while (1)
- {
- int c = getc (stream);
- if (p == end)
- {
- buffer = (char *) xrealloc (buffer, linebuffer->size *= 2);
- p += buffer - linebuffer->buffer;
- end += buffer - linebuffer->buffer;
- linebuffer->buffer = buffer;
- }
- if (c < 0 || c == '\n')
- {
- *p = 0;
- break;
- }
- *p++ = c;
- }
-
- return p - buffer;
-}
-
-/* Sort an input file too big to sort in core. */
-
-void
-sort_offline (infile, nfiles, total, outfile)
- char *infile;
- int nfiles;
- long total;
- char *outfile;
-{
- /* More than enough. */
- int ntemps = 2 * (total + MAX_IN_CORE_SORT - 1) / MAX_IN_CORE_SORT;
- char **tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
- FILE *istream = fopen (infile, "r");
- int i;
- struct linebuffer lb;
- long linelength;
- int failure = 0;
-
- initbuffer (&lb);
-
- /* Read in one line of input data. */
-
- linelength = readline (&lb, istream);
-
- if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- /* Split up the input into `ntemps' temporary files, or maybe fewer,
- and put the new files' names into `tempfiles' */
-
- for (i = 0; i < ntemps; i++)
- {
- char *outname = maketempname (++tempcount);
- FILE *ostream = fopen (outname, "w");
- long tempsize = 0;
-
- if (!ostream)
- pfatal_with_name (outname);
- tempfiles[i] = outname;
-
- /* Copy lines into this temp file as long as it does not make file
- "too big" or until there are no more lines. */
-
- while (tempsize + linelength + 1 <= MAX_IN_CORE_SORT)
- {
- tempsize += linelength + 1;
- fputs (lb.buffer, ostream);
- putc ('\n', ostream);
-
- /* Read another line of input data. */
-
- linelength = readline (&lb, istream);
- if (!linelength && feof (istream))
- break;
-
- if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- failure = 1;
- goto fail;
- }
- }
- fclose (ostream);
- if (feof (istream))
- break;
- }
-
- free (lb.buffer);
-
-fail:
- /* Record number of temp files we actually needed. */
-
- ntemps = i;
-
- /* Sort each tempfile into another tempfile.
- Delete the first set of tempfiles and put the names of the second
- into `tempfiles'. */
-
- for (i = 0; i < ntemps; i++)
- {
- char *newtemp = maketempname (++tempcount);
- sort_in_core (&tempfiles[i], MAX_IN_CORE_SORT, newtemp);
- if (!keep_tempfiles)
- unlink (tempfiles[i]);
- tempfiles[i] = newtemp;
- }
-
- if (failure)
- return;
-
- /* Merge the tempfiles together and indexify. */
-
- merge_files (tempfiles, ntemps, outfile);
-}
-
-/* Sort INFILE, whose size is TOTAL,
- assuming that is small enough to be done in-core,
- then indexify it and send the output to OUTFILE (or to stdout). */
-
-void
-sort_in_core (infile, total, outfile)
- char *infile;
- long total;
- char *outfile;
-{
- char **nextline;
- char *data = (char *) xmalloc (total + 1);
- char *file_data;
- long file_size;
- int i;
- FILE *ostream = stdout;
- struct lineinfo *lineinfo;
-
- /* Read the contents of the file into the moby array `data'. */
-
- int desc = open (infile, O_RDONLY, 0);
-
- if (desc < 0)
- fatal ("failure reopening %s", infile);
- for (file_size = 0;;)
- {
- i = read (desc, data + file_size, total - file_size);
- if (i <= 0)
- break;
- file_size += i;
- }
- file_data = data;
- data[file_size] = 0;
-
- close (desc);
-
- if (file_size > 0 && data[0] != '\\' && data[0] != '@')
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- init_char_order ();
-
- /* Sort routines want to know this address. */
-
- text_base = data;
-
- /* Create the array of pointers to lines, with a default size
- frequently enough. */
-
- nlines = total / 50;
- if (!nlines)
- nlines = 2;
- linearray = (char **) xmalloc (nlines * sizeof (char *));
-
- /* `nextline' points to the next free slot in this array.
- `nlines' is the allocated size. */
-
- nextline = linearray;
-
- /* Parse the input file's data, and make entries for the lines. */
-
- nextline = parsefile (infile, nextline, file_data, file_size);
- if (nextline == 0)
- {
- error ("%s: not a texinfo index file", infile);
- return;
- }
-
- /* Sort the lines. */
-
- /* If we have enough space, find the first keyfield of each line in advance.
- Make a `struct lineinfo' for each line, which records the keyfield
- as well as the line, and sort them. */
-
- lineinfo = (struct lineinfo *) malloc ((nextline - linearray) * sizeof (struct lineinfo));
-
- if (lineinfo)
- {
- struct lineinfo *lp;
- char **p;
-
- for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
- {
- lp->text = *p;
- lp->key.text = find_field (keyfields, *p, &lp->keylen);
- if (keyfields->numeric)
- lp->key.number = find_value (lp->key.text, lp->keylen);
- }
-
- qsort (lineinfo, nextline - linearray, sizeof (struct lineinfo), compare_prepared);
-
- for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
- *p = lp->text;
-
- free (lineinfo);
- }
- else
- qsort (linearray, nextline - linearray, sizeof (char *), compare_full);
-
- /* Open the output file. */
-
- if (outfile)
- {
- ostream = fopen (outfile, "w");
- if (!ostream)
- pfatal_with_name (outfile);
- }
-
- writelines (linearray, nextline - linearray, ostream);
- if (outfile)
- fclose (ostream);
-
- free (linearray);
- free (data);
-}
-
-/* Parse an input string in core into lines.
- DATA is the input string, and SIZE is its length.
- Data goes in LINEARRAY starting at NEXTLINE.
- The value returned is the first entry in LINEARRAY still unused.
- Value 0 means input file contents are invalid. */
-
-char **
-parsefile (filename, nextline, data, size)
- char *filename;
- char **nextline;
- char *data;
- long size;
-{
- char *p, *end;
- char **line = nextline;
-
- p = data;
- end = p + size;
- *end = 0;
-
- while (p != end)
- {
- if (p[0] != '\\' && p[0] != '@')
- return 0;
-
- *line = p;
- while (*p && *p != '\n')
- p++;
- if (p != end)
- p++;
-
- line++;
- if (line == linearray + nlines)
- {
- char **old = linearray;
- linearray = (char **) xrealloc (linearray, sizeof (char *) * (nlines *= 4));
- line += linearray - old;
- }
- }
-
- return line;
-}
-
-/* Indexification is a filter applied to the sorted lines
- as they are being written to the output file.
- Multiple entries for the same name, with different page numbers,
- get combined into a single entry with multiple page numbers.
- The first braced field, which is used for sorting, is discarded.
- However, its first character is examined, folded to lower case,
- and if it is different from that in the previous line fed to us
- a \initial line is written with one argument, the new initial.
-
- If an entry has four braced fields, then the second and third
- constitute primary and secondary names.
- In this case, each change of primary name
- generates a \primary line which contains only the primary name,
- and in between these are \secondary lines which contain
- just a secondary name and page numbers. */
-
-/* The last primary name we wrote a \primary entry for.
- If only one level of indexing is being done, this is the last name seen. */
-char *lastprimary;
-/* Length of storage allocated for lastprimary. */
-int lastprimarylength;
-
-/* Similar, for the secondary name. */
-char *lastsecondary;
-int lastsecondarylength;
-
-/* Zero if we are not in the middle of writing an entry.
- One if we have written the beginning of an entry but have not
- yet written any page numbers into it.
- Greater than one if we have written the beginning of an entry
- plus at least one page number. */
-int pending;
-
-/* The initial (for sorting purposes) of the last primary entry written.
- When this changes, a \initial {c} line is written */
-
-char *lastinitial;
-
-int lastinitiallength;
-
-/* When we need a string of length 1 for the value of lastinitial,
- store it here. */
-
-char lastinitial1[2];
-
-/* Initialize static storage for writing an index. */
-
-static void
-xbzero(s, n)
- char *s;
- int n;
-{
- register char *p;
- for (p = s; n--; )
- *p++ = '\0';
-}
-
-void
-init_index ()
-{
- pending = 0;
- lastinitial = lastinitial1;
- lastinitial1[0] = 0;
- lastinitial1[1] = 0;
- lastinitiallength = 0;
- lastprimarylength = 100;
- lastprimary = (char *) xmalloc (lastprimarylength + 1);
- xbzero (lastprimary, lastprimarylength + 1);
- lastsecondarylength = 100;
- lastsecondary = (char *) xmalloc (lastsecondarylength + 1);
- xbzero (lastsecondary, lastsecondarylength + 1);
-}
-
-/* Indexify. Merge entries for the same name,
- insert headers for each initial character, etc. */
-
-void
-indexify (line, ostream)
- char *line;
- FILE *ostream;
-{
- char *primary, *secondary, *pagenumber;
- int primarylength, secondarylength = 0, pagelength;
- int nosecondary;
- int initiallength;
- char *initial;
- char initial1[2];
- register char *p;
-
- /* First, analyze the parts of the entry fed to us this time. */
-
- p = find_braced_pos (line, 0, 0, 0);
- if (*p == '{')
- {
- initial = p;
- /* Get length of inner pair of braces starting at `p',
- including that inner pair of braces. */
- initiallength = find_braced_end (p + 1) + 1 - p;
- }
- else
- {
- initial = initial1;
- initial1[0] = *p;
- initial1[1] = 0;
- initiallength = 1;
-
- if (initial1[0] >= 'a' && initial1[0] <= 'z')
- initial1[0] -= 040;
- }
-
- pagenumber = find_braced_pos (line, 1, 0, 0);
- pagelength = find_braced_end (pagenumber) - pagenumber;
- if (pagelength == 0)
- abort ();
-
- primary = find_braced_pos (line, 2, 0, 0);
- primarylength = find_braced_end (primary) - primary;
-
- secondary = find_braced_pos (line, 3, 0, 0);
- nosecondary = !*secondary;
- if (!nosecondary)
- secondarylength = find_braced_end (secondary) - secondary;
-
- /* If the primary is different from before, make a new primary entry. */
- if (strncmp (primary, lastprimary, primarylength))
- {
- /* Close off current secondary entry first, if one is open. */
- if (pending)
- {
- fputs ("}\n", ostream);
- pending = 0;
- }
-
- /* If this primary has a different initial, include an entry for
- the initial. */
- if (initiallength != lastinitiallength ||
- strncmp (initial, lastinitial, initiallength))
- {
- fprintf (ostream, "\\initial {");
- fwrite (initial, 1, initiallength, ostream);
- fprintf (ostream, "}\n", initial);
- if (initial == initial1)
- {
- lastinitial = lastinitial1;
- *lastinitial1 = *initial1;
- }
- else
- {
- lastinitial = initial;
- }
- lastinitiallength = initiallength;
- }
-
- /* Make the entry for the primary. */
- if (nosecondary)
- fputs ("\\entry {", ostream);
- else
- fputs ("\\primary {", ostream);
- fwrite (primary, primarylength, 1, ostream);
- if (nosecondary)
- {
- fputs ("}{", ostream);
- pending = 1;
- }
- else
- fputs ("}\n", ostream);
-
- /* Record name of most recent primary. */
- if (lastprimarylength < primarylength)
- {
- lastprimarylength = primarylength + 100;
- lastprimary = (char *) xrealloc (lastprimary,
- 1 + lastprimarylength);
- }
- strncpy (lastprimary, primary, primarylength);
- lastprimary[primarylength] = 0;
-
- /* There is no current secondary within this primary, now. */
- lastsecondary[0] = 0;
- }
-
- /* Should not have an entry with no subtopic following one with a subtopic. */
-
- if (nosecondary && *lastsecondary)
- error ("entry %s follows an entry with a secondary name", line);
-
- /* Start a new secondary entry if necessary. */
- if (!nosecondary && strncmp (secondary, lastsecondary, secondarylength))
- {
- if (pending)
- {
- fputs ("}\n", ostream);
- pending = 0;
- }
-
- /* Write the entry for the secondary. */
- fputs ("\\secondary {", ostream);
- fwrite (secondary, secondarylength, 1, ostream);
- fputs ("}{", ostream);
- pending = 1;
-
- /* Record name of most recent secondary. */
- if (lastsecondarylength < secondarylength)
- {
- lastsecondarylength = secondarylength + 100;
- lastsecondary = (char *) xrealloc (lastsecondary,
- 1 + lastsecondarylength);
- }
- strncpy (lastsecondary, secondary, secondarylength);
- lastsecondary[secondarylength] = 0;
- }
-
- /* Here to add one more page number to the current entry. */
- if (pending++ != 1)
- fputs (", ", ostream); /* Punctuate first, if this is not the first. */
- fwrite (pagenumber, pagelength, 1, ostream);
-}
-
-/* Close out any unfinished output entry. */
-
-void
-finish_index (ostream)
- FILE *ostream;
-{
- if (pending)
- fputs ("}\n", ostream);
- free (lastprimary);
- free (lastsecondary);
-}
-
-/* Copy the lines in the sorted order.
- Each line is copied out of the input file it was found in. */
-
-void
-writelines (linearray, nlines, ostream)
- char **linearray;
- int nlines;
- FILE *ostream;
-{
- char **stop_line = linearray + nlines;
- char **next_line;
-
- init_index ();
-
- /* Output the text of the lines, and free the buffer space. */
-
- for (next_line = linearray; next_line != stop_line; next_line++)
- {
- /* If -u was specified, output the line only if distinct from previous one. */
- if (next_line == linearray
- /* Compare previous line with this one, using only the
- explicitly specd keyfields. */
- || compare_general (*(next_line - 1), *next_line, 0L, 0L, num_keyfields - 1))
- {
- char *p = *next_line;
- char c;
-
- while ((c = *p++) && c != '\n')
- /* Do nothing. */ ;
- *(p - 1) = 0;
- indexify (*next_line, ostream);
- }
- }
-
- finish_index (ostream);
-}
-
-/* Assume (and optionally verify) that each input file is sorted;
- merge them and output the result.
- Returns nonzero if any input file fails to be sorted.
-
- This is the high-level interface that can handle an unlimited
- number of files. */
-
-#define MAX_DIRECT_MERGE 10
-
-int
-merge_files (infiles, nfiles, outfile)
- char **infiles;
- int nfiles;
- char *outfile;
-{
- char **tempfiles;
- int ntemps;
- int i;
- int value = 0;
- int start_tempcount = tempcount;
-
- if (nfiles <= MAX_DIRECT_MERGE)
- return merge_direct (infiles, nfiles, outfile);
-
- /* Merge groups of MAX_DIRECT_MERGE input files at a time,
- making a temporary file to hold each group's result. */
-
- ntemps = (nfiles + MAX_DIRECT_MERGE - 1) / MAX_DIRECT_MERGE;
- tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
- for (i = 0; i < ntemps; i++)
- {
- int nf = MAX_DIRECT_MERGE;
- if (i + 1 == ntemps)
- nf = nfiles - i * MAX_DIRECT_MERGE;
- tempfiles[i] = maketempname (++tempcount);
- value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]);
- }
-
- /* All temporary files that existed before are no longer needed
- since their contents have been merged into our new tempfiles.
- So delete them. */
- flush_tempfiles (start_tempcount);
-
- /* Now merge the temporary files we created. */
-
- merge_files (tempfiles, ntemps, outfile);
-
- free (tempfiles);
-
- return value;
-}
-
-/* Assume (and optionally verify) that each input file is sorted;
- merge them and output the result.
- Returns nonzero if any input file fails to be sorted.
-
- This version of merging will not work if the number of
- input files gets too high. Higher level functions
- use it only with a bounded number of input files. */
-
-int
-merge_direct (infiles, nfiles, outfile)
- char **infiles;
- int nfiles;
- char *outfile;
-{
- struct linebuffer *lb1, *lb2;
- struct linebuffer **thisline, **prevline;
- FILE **streams;
- int i;
- int nleft;
- int lossage = 0;
- int *file_lossage;
- struct linebuffer *prev_out = 0;
- FILE *ostream = stdout;
-
- if (outfile)
- {
- ostream = fopen (outfile, "w");
- }
- if (!ostream)
- pfatal_with_name (outfile);
-
- init_index ();
-
- if (nfiles == 0)
- {
- if (outfile)
- fclose (ostream);
- return 0;
- }
-
- /* For each file, make two line buffers.
- Also, for each file, there is an element of `thisline'
- which points at any time to one of the file's two buffers,
- and an element of `prevline' which points to the other buffer.
- `thisline' is supposed to point to the next available line from the file,
- while `prevline' holds the last file line used,
- which is remembered so that we can verify that the file is properly sorted. */
-
- /* lb1 and lb2 contain one buffer each per file. */
- lb1 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
- lb2 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
-
- /* thisline[i] points to the linebuffer holding the next available line in file i,
- or is zero if there are no lines left in that file. */
- thisline = (struct linebuffer **)
- xmalloc (nfiles * sizeof (struct linebuffer *));
- /* prevline[i] points to the linebuffer holding the last used line
- from file i. This is just for verifying that file i is properly
- sorted. */
- prevline = (struct linebuffer **)
- xmalloc (nfiles * sizeof (struct linebuffer *));
- /* streams[i] holds the input stream for file i. */
- streams = (FILE **) xmalloc (nfiles * sizeof (FILE *));
- /* file_lossage[i] is nonzero if we already know file i is not
- properly sorted. */
- file_lossage = (int *) xmalloc (nfiles * sizeof (int));
-
- /* Allocate and initialize all that storage. */
-
- for (i = 0; i < nfiles; i++)
- {
- initbuffer (&lb1[i]);
- initbuffer (&lb2[i]);
- thisline[i] = &lb1[i];
- prevline[i] = &lb2[i];
- file_lossage[i] = 0;
- streams[i] = fopen (infiles[i], "r");
- if (!streams[i])
- pfatal_with_name (infiles[i]);
-
- readline (thisline[i], streams[i]);
- }
-
- /* Keep count of number of files not at eof. */
- nleft = nfiles;
-
- while (nleft)
- {
- struct linebuffer *best = 0;
- struct linebuffer *exch;
- int bestfile = -1;
- int i;
-
- /* Look at the next avail line of each file; choose the least one. */
-
- for (i = 0; i < nfiles; i++)
- {
- if (thisline[i] &&
- (!best ||
- 0 < compare_general (best->buffer, thisline[i]->buffer,
- (long) bestfile, (long) i, num_keyfields)))
- {
- best = thisline[i];
- bestfile = i;
- }
- }
-
- /* Output that line, unless it matches the previous one and we
- don't want duplicates. */
-
- if (!(prev_out &&
- !compare_general (prev_out->buffer,
- best->buffer, 0L, 1L, num_keyfields - 1)))
- indexify (best->buffer, ostream);
- prev_out = best;
-
- /* Now make the line the previous of its file, and fetch a new
- line from that file. */
-
- exch = prevline[bestfile];
- prevline[bestfile] = thisline[bestfile];
- thisline[bestfile] = exch;
-
- while (1)
- {
- /* If the file has no more, mark it empty. */
-
- if (feof (streams[bestfile]))
- {
- thisline[bestfile] = 0;
- /* Update the number of files still not empty. */
- nleft--;
- break;
- }
- readline (thisline[bestfile], streams[bestfile]);
- if (thisline[bestfile]->buffer[0] || !feof (streams[bestfile]))
- break;
- }
- }
-
- finish_index (ostream);
-
- /* Free all storage and close all input streams. */
-
- for (i = 0; i < nfiles; i++)
- {
- fclose (streams[i]);
- free (lb1[i].buffer);
- free (lb2[i].buffer);
- }
- free (file_lossage);
- free (lb1);
- free (lb2);
- free (thisline);
- free (prevline);
- free (streams);
-
- if (outfile)
- fclose (ostream);
-
- return lossage;
-}
-
-/* Print error message and exit. */
-
-void
-fatal (s1, s2)
- char *s1, *s2;
-{
- error (s1, s2);
- exit (TI_FATAL_ERROR);
-}
-
-/* Print error message. S1 is printf control string, S2 is arg for it. */
-
-void
-error (s1, s2)
- char *s1, *s2;
-{
- printf ("%s: ", program_name);
- printf (s1, s2);
- printf ("\n");
-}
-
-#if !defined (HAVE_STRERROR)
-static char *
-strerror (n)
- int n;
-{
- static char ebuf[40];
-
- if (n < sys_nerr)
- return sys_errlist[n];
- else
- {
- sprintf (ebuf, "Unknown error %d", n);
- return ebuf;
- }
-}
-#endif
-
-void
-perror_with_name (name)
- char *name;
-{
- char *s;
-
- s = concat ("", strerror (errno), " for %s");
- error (s, name);
-}
-
-void
-pfatal_with_name (name)
- char *name;
-{
- char *s;
-
- s = concat ("", strerror (errno), " for %s");
- fatal (s, name);
-}
-
-/* Return a newly-allocated string whose contents concatenate those of
- S1, S2, S3. */
-
-char *
-concat (s1, s2, s3)
- char *s1, *s2, *s3;
-{
- int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
- char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
-
- strcpy (result, s1);
- strcpy (result + len1, s2);
- strcpy (result + len1 + len2, s3);
- *(result + len1 + len2 + len3) = 0;
-
- return result;
-}
-
-/* Just like malloc, but kills the program in case of fatal error. */
-void *
-xmalloc (nbytes)
- int nbytes;
-{
- void *temp = (void *) malloc (nbytes);
-
- if (nbytes && temp == (void *)NULL)
- memory_error ("xmalloc", nbytes);
-
- return (temp);
-}
-
-/* Like realloc (), but barfs if there isn't enough memory. */
-void *
-xrealloc (pointer, nbytes)
- void *pointer;
- int nbytes;
-{
- void *temp;
-
- if (!pointer)
- temp = (void *)xmalloc (nbytes);
- else
- temp = (void *)realloc (pointer, nbytes);
-
- if (nbytes && !temp)
- memory_error ("xrealloc", nbytes);
-
- return (temp);
-}
-
-memory_error (callers_name, bytes_wanted)
- char *callers_name;
- int bytes_wanted;
-{
- char printable_string[80];
-
- sprintf (printable_string,
- "Virtual memory exhausted in %s ()! Needed %d bytes.",
- callers_name, bytes_wanted);
-
- error (printable_string, "");
- abort ();
-}
diff --git a/gnu/lib/libreadline/readline/chardefs.h b/gnu/lib/libreadline/readline/chardefs.h
deleted file mode 100644
index aa63da61da5c..000000000000
--- a/gnu/lib/libreadline/readline/chardefs.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* chardefs.h -- Character definitions for readline. */
-#ifndef _CHARDEFS_
-#define _CHARDEFS_
-
-#include <ctype.h>
-#include <string.h>
-
-#ifndef savestring
-extern char *xmalloc ();
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
-#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) islower(c)
-#define uppercase_p(c) isupper(c)
-
-#define pure_alphabetic(c) isalpha(c)
-
-#ifndef to_upper
-#define to_upper(c) toupper(c)
-#define to_lower(c) tolower(c)
-#endif
-
-#define CTRL_P(c) ((c) < control_character_threshold)
-#define META_P(c) ((c) > meta_character_threshold)
-
-#ifndef digit_value
-#define digit_value(x) ((x) - '0')
-#endif
-
-#ifndef NEWLINE
-#define NEWLINE '\n'
-#endif
-
-#ifndef RETURN
-#define RETURN CTRL('M')
-#endif
-
-#ifndef RUBOUT
-#define RUBOUT 0x7f
-#endif
-
-#ifndef TAB
-#define TAB '\t'
-#endif
-
-#ifdef ABORT_CHAR
-#undef ABORT_CHAR
-#endif
-#define ABORT_CHAR CTRL('G')
-
-#ifdef PAGE
-#undef PAGE
-#endif
-#define PAGE CTRL('L')
-
-#ifdef SPACE
-#undef SPACE
-#endif
-#define SPACE 0x20
-
-#ifdef ESC
-#undef ESC
-#endif
-
-#define ESC CTRL('[')
-
-#endif /* _CHARDEFS_ */
diff --git a/gnu/lib/libreadline/readline/history.h b/gnu/lib/libreadline/readline/history.h
deleted file mode 100644
index 2ef5424cb184..000000000000
--- a/gnu/lib/libreadline/readline/history.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* History.h -- the names of functions that you can call in history. */
-
-/* The structure used to store a history entry. */
-typedef struct _hist_entry {
- char *line;
- char *data;
-} HIST_ENTRY;
-
-/* A structure used to pass the current state of the history stuff around. */
-typedef struct _hist_state {
- HIST_ENTRY **entries; /* Pointer to the entries themselves. */
- int offset; /* The location pointer within this array. */
- int length; /* Number of elements within this array. */
- int size; /* Number of slots allocated to this array. */
-} 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 ();
-
-/* Return an array of tokens, much as the shell might. The tokens are
- parsed out of STRING. */
-extern char **history_tokenize ();
-
-/* 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 ();
-
-/* Exported history variables. */
-extern int history_stifled;
-extern int history_length;
-extern int max_input_history;
-extern char history_expansion_char;
-extern char history_subst_char;
-extern char history_comment_char;
-extern char *history_no_expand_chars;
-extern int history_base;
diff --git a/gnu/lib/libreadline/readline/keymaps.h b/gnu/lib/libreadline/readline/keymaps.h
deleted file mode 100644
index f7e9f6f9689b..000000000000
--- a/gnu/lib/libreadline/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_
-
-#include <readline/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. */
-extern Keymap rl_make_bare_keymap ();
-
-/* Return a new keymap which is a copy of MAP. */
-extern Keymap rl_copy_keymap ();
-
-/* Return a new keymap with the printing characters bound to rl_insert,
- the lowercase Meta characters bound to run their equivalents, and
- the Meta digits bound to produce numeric arguments. */
-extern Keymap rl_make_keymap ();
-
-extern void rl_discard_keymap ();
-
-/* Return the keymap corresponding to a given name. Names look like
- `emacs' or `emacs-meta' or `vi-insert'. */
-extern Keymap rl_get_keymap_by_name ();
-
-/* Return the current keymap. */
-extern Keymap rl_get_keymap ();
-
-/* Set the current keymap to MAP. */
-extern void rl_set_keymap ();
-
-#endif /* _KEYMAPS_H_ */
diff --git a/gnu/lib/libreadline/readline/readline.h b/gnu/lib/libreadline/readline/readline.h
deleted file mode 100644
index bbc8a0f02ac7..000000000000
--- a/gnu/lib/libreadline/readline/readline.h
+++ /dev/null
@@ -1,267 +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 <readline/keymaps.h>
-#include <readline/tilde.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_kill_full_line (),
- rl_digit_argument (), rl_universal_argument (), rl_abort (),
- rl_undo_command (), rl_revert_line (), rl_beginning_of_history (),
- rl_end_of_history (), rl_forward_search_history (), rl_insert (),
- rl_upcase_word (), rl_downcase_word (), rl_capitalize_word (),
- rl_restart_output (), rl_re_read_init_file (), rl_dump_functions (),
- rl_delete_horizontal_space (), rl_history_search_forward (),
- rl_history_search_backward ();
-
-/* `Public' utility functions. */
-extern int rl_insert_text (), rl_delete_text (), rl_kill_text ();
-extern int rl_complete_internal ();
-extern int rl_expand_prompt ();
-extern int rl_initialize ();
-extern int rl_set_signals (), rl_clear_signals ();
-extern int rl_init_argument (), rl_digit_argument ();
-extern int rl_read_key (), rl_getc (), rl_stuff_char ();
-extern int maybe_save_line (), maybe_unsave_line (), maybe_replace_line ();
-extern int rl_modifying ();
-
-extern int rl_begin_undo_group (), rl_end_undo_group ();
-extern void rl_add_undo (), free_undo_list ();
-extern int rl_do_undo ();
-
-extern int rl_insert_close ();
-
-/* These are *both* defined even when VI_MODE is not. */
-extern int rl_vi_editing_mode (), rl_emacs_editing_mode ();
-
-/* Non incremental history searching. */
-extern int
- rl_noninc_forward_search (), rl_noninc_reverse_search (),
- rl_noninc_forward_search_again (), rl_noninc_reverse_search_again ();
-
-/* Things for vi mode. */
-extern int rl_vi_check (), rl_vi_textmod_command ();
-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 ();
-
-/* Keyboard macro commands. */
-extern int rl_start_kbd_macro (), rl_end_kbd_macro ();
-extern int 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 can be used to quote a substring of the line.
- Completion occurs on the entire substring, and within the substring
- rl_completer_word_break_characters are treated as any other character,
- unless they also appear within this list. */
-extern char *rl_completer_quote_characters;
-
-/* List of 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_directory_completion_hook;
-
-/* Backwards compatibility with previous versions of readline. */
-#define rl_symbolic_link_hook rl_directory_completion_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;
-
-/* Non-zero means to suppress normal filename completion after the
- user-specified completion function has been called. */
-extern int rl_attempted_completion_over;
-
-/* **************************************************************** */
-/* */
-/* Well Published Functions */
-/* */
-/* **************************************************************** */
-
-/* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */
-extern char *readline ();
-
-/* These functions are from complete.c. */
-/* Return an array of strings which are the result of repeatadly calling
- FUNC with TEXT. */
-extern char **completion_matches ();
-extern char *username_completion_function ();
-extern char *filename_completion_function ();
-
-/* These functions are from bind.c. */
-/* rl_add_defun (char *name, Function *function, int key)
- Add NAME to the list of named functions. Make FUNCTION
- be the function that gets called.
- If KEY is not -1, then bind it. */
-extern int rl_add_defun ();
-extern int rl_bind_key (), rl_bind_key_in_map ();
-extern int rl_unbind_key (), rl_unbind_key_in_map ();
-extern int rl_set_key ();
-extern int rl_macro_bind (), rl_generic_bind (), rl_variable_bind ();
-extern int rl_translate_keyseq ();
-extern Function *rl_named_function (), *rl_function_of_keyseq ();
-extern int rl_parse_and_bind ();
-extern Keymap rl_get_keymap (), rl_get_keymap_by_name ();
-extern void rl_set_keymap ();
-extern char **rl_invoking_keyseqs (), **rl_invoking_keyseqs_in_map ();
-extern void rl_function_dumper ();
-extern int rl_read_init_file ();
-
-/* Functions in funmap.c */
-extern void rl_list_funmap_names ();
-extern void rl_initialize_funmap ();
-
-/* Functions in display.c */
-extern void rl_redisplay ();
-extern int rl_message (), rl_clear_message ();
-extern int rl_reset_line_state ();
-extern int rl_character_len ();
-extern int rl_show_char ();
-extern int crlf (), rl_on_new_line ();
-extern int rl_forced_update_display ();
-
-/* Definitions available for use by readline clients. */
-#define RL_PROMPT_START_IGNORE '\001'
-#define RL_PROMPT_END_IGNORE '\002'
-
-#endif /* _READLINE_H_ */
diff --git a/gnu/lib/libreadline/readline/tilde.h b/gnu/lib/libreadline/readline/tilde.h
deleted file mode 100644
index 726d081ba9cb..000000000000
--- a/gnu/lib/libreadline/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/lib/libreadline/sysdep.h b/gnu/lib/libreadline/sysdep.h
deleted file mode 100644
index 007a56193482..000000000000
--- a/gnu/lib/libreadline/sysdep.h
+++ /dev/null
@@ -1,37 +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 */
-#include <sys/ioctl.h> /* Needed for TIOC?WINSZ */
-
-#if defined (USG) && defined (TIOCGWINSZ)
-#include <sys/stream.h>
-#if defined (USGr4) || defined (USGr3)
-#include <sys/ptem.h>
-#endif /* USGr4 */
-#endif /* USG && TIOCGWINSZ */
-
-#include <dirent.h>
-typedef struct dirent dirent;
-
-/* SVR4 systems should use <termios.h> rather than <termio.h>. */
-
-#if defined (USGr4)
-#define _POSIX_VERSION
-#endif
diff --git a/gnu/lib/libreadline/tcsh_hack.readme b/gnu/lib/libreadline/tcsh_hack.readme
deleted file mode 100644
index 6fd5da173688..000000000000
--- a/gnu/lib/libreadline/tcsh_hack.readme
+++ /dev/null
@@ -1,27 +0,0 @@
-*** rltty.c.orig Thu May 12 19:02:50 1994
---- rltty.c Thu May 12 19:03:06 1994
-***************
-*** 21,26 ****
---- 21,27 ----
- have a copy of the license, write to the Free Software Foundation,
- 675 Mass Ave, Cambridge, MA 02139, USA. */
- #include <sys/types.h>
-+ #include <sys/ioctl.h>
- #include <signal.h>
- #include <errno.h>
- #include <stdio.h>
-***************
-*** 359,364 ****
---- 360,371 ----
- int tty;
- TIOTYPE *tiop;
- {
-+ /* XXX this prevents to got editing mode from tcsh. Ache */
-+ struct winsize w;
-+
-+ if (ioctl (tty, TIOCGWINSZ, &w) == 0)
-+ (void) ioctl (tty, TIOCSWINSZ, &w);
-+
- while (GETATTR (tty, tiop) < 0)
- {
- if (errno != EINTR)