aboutsummaryrefslogtreecommitdiff
path: root/readline/doc
diff options
context:
space:
mode:
Diffstat (limited to 'readline/doc')
-rw-r--r--readline/doc/history.dvibin0 -> 48188 bytes
-rw-r--r--readline/doc/history.html1161
-rw-r--r--readline/doc/history.info788
-rw-r--r--readline/doc/history.ps2265
-rw-r--r--readline/doc/hsuser.texinfo4
-rw-r--r--readline/doc/readline.dvibin0 -> 199980 bytes
-rw-r--r--readline/doc/readline.html4230
-rw-r--r--readline/doc/readline.info3039
-rw-r--r--readline/doc/readline.ps5225
-rw-r--r--readline/doc/texinfo.tex4692
10 files changed, 21402 insertions, 2 deletions
diff --git a/readline/doc/history.dvi b/readline/doc/history.dvi
new file mode 100644
index 0000000..35dc6df
--- /dev/null
+++ b/readline/doc/history.dvi
Binary files differ
diff --git a/readline/doc/history.html b/readline/doc/history.html
new file mode 100644
index 0000000..b498d27
--- /dev/null
+++ b/readline/doc/history.html
@@ -0,0 +1,1161 @@
+<HTML>
+<HEAD>
+<!-- This HTML file has been created by texi2html 1.52
+ from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 31 December 1998 -->
+
+<TITLE>GNU History Library</TITLE>
+</HEAD>
+<BODY>
+<H1>GNU History Library</H1>
+<H2>Edition 4.0, for <CODE>History Library</CODE> Version 4.0.</H2>
+<H2>December 1998</H2>
+<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
+<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
+<P>
+<P><HR><P>
+<H1>Table of Contents</H1>
+<UL>
+<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A>
+<UL>
+<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A>
+<UL>
+<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A>
+<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A>
+<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A>
+</UL>
+</UL>
+<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A>
+<UL>
+<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A>
+<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A>
+<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A>
+<UL>
+<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A>
+<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A>
+<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A>
+<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A>
+<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A>
+<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A>
+<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A>
+</UL>
+<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A>
+<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A>
+</UL>
+<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A>
+<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A>
+</UL>
+<P><HR><P>
+
+<P>
+This document describes the GNU History library, a programming tool that
+provides a consistent user interface for recalling lines of previously
+typed input.
+
+</P>
+<P>
+Published by the Free Software Foundation <BR>
+675 Massachusetts Avenue, <BR>
+Cambridge, MA 02139 USA
+
+</P>
+<P>
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+</P>
+<P>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+</P>
+<P>
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Free Software Foundation.
+
+</P>
+<P>
+Copyright (C) 1988-1999 Free Software Foundation, Inc.
+
+</P>
+
+
+
+<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1>
+
+<P>
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint. It should be considered a user's guide. For
+information on using the GNU History Library in your own programs,
+see section <A HREF="history.html#SEC6">Programming with GNU History</A>.
+
+</P>
+
+<UL>
+<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user.
+</UL>
+
+
+
+<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2>
+<P>
+<A NAME="IDX1"></A>
+
+</P>
+<P>
+The History library provides a history expansion feature that is similar
+to the history expansion provided by <CODE>csh</CODE>. This section
+describes the syntax used to manipulate the history information.
+
+</P>
+<P>
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
+
+</P>
+<P>
+History expansion takes place in two parts. The first is to determine
+which line from the history list should be used during substitution.
+The second is to select portions of that line for inclusion into the
+current one. The line selected from the history is called the
+<EM>event</EM>, and the portions of that line that are acted upon are
+called <EM>words</EM>. Various <EM>modifiers</EM> are available to manipulate
+the selected words. The line is broken into words in the same fashion
+that Bash does, so that several words
+surrounded by quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is <SAMP>`!'</SAMP> by default.
+
+</P>
+
+
+<UL>
+<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use.
+<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest.
+<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution.
+</UL>
+
+
+
+<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3>
+<P>
+<A NAME="IDX2"></A>
+
+</P>
+<P>
+An event designator is a reference to a command line entry in the
+history list.
+<A NAME="IDX3"></A>
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>!</CODE>
+<DD>
+Start a history substitution, except when followed by a space, tab,
+the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>.
+
+<DT><CODE>!<VAR>n</VAR></CODE>
+<DD>
+Refer to command line <VAR>n</VAR>.
+
+<DT><CODE>!-<VAR>n</VAR></CODE>
+<DD>
+Refer to the command <VAR>n</VAR> lines back.
+
+<DT><CODE>!!</CODE>
+<DD>
+Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>.
+
+<DT><CODE>!<VAR>string</VAR></CODE>
+<DD>
+Refer to the most recent command starting with <VAR>string</VAR>.
+
+<DT><CODE>!?<VAR>string</VAR>[?]</CODE>
+<DD>
+Refer to the most recent command containing <VAR>string</VAR>. The trailing
+<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by
+a newline.
+
+<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
+<DD>
+Quick Substitution. Repeat the last command, replacing <VAR>string1</VAR>
+with <VAR>string2</VAR>. Equivalent to
+<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.
+
+<DT><CODE>!#</CODE>
+<DD>
+The entire command line typed so far.
+
+</DL>
+
+
+
+<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3>
+
+<P>
+Word designators are used to select desired words from the event.
+A <SAMP>`:'</SAMP> separates the event specification from the word designator. It
+may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>,
+<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>. Words are numbered from the beginning
+of the line, with the first word being denoted by 0 (zero). Words are
+inserted into the current line separated by single spaces.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>0 (zero)</CODE>
+<DD>
+The <CODE>0</CODE>th word. For many applications, this is the command word.
+
+<DT><CODE><VAR>n</VAR></CODE>
+<DD>
+The <VAR>n</VAR>th word.
+
+<DT><CODE>^</CODE>
+<DD>
+The first argument; that is, word 1.
+
+<DT><CODE>$</CODE>
+<DD>
+The last argument.
+
+<DT><CODE>%</CODE>
+<DD>
+The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+
+<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
+<DD>
+A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
+
+<DT><CODE>*</CODE>
+<DD>
+All of the words, except the <CODE>0</CODE>th. This is a synonym for <SAMP>`1-$'</SAMP>.
+It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event;
+the empty string is returned in that case.
+
+<DT><CODE><VAR>x</VAR>*</CODE>
+<DD>
+Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+
+<DT><CODE><VAR>x</VAR>-</CODE>
+<DD>
+Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
+
+</DL>
+
+<P>
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+</P>
+
+
+<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3>
+
+<P>
+After the optional word designator, you can add a sequence of one or more
+of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>h</CODE>
+<DD>
+Remove a trailing pathname component, leaving only the head.
+
+<DT><CODE>t</CODE>
+<DD>
+Remove all leading pathname components, leaving the tail.
+
+<DT><CODE>r</CODE>
+<DD>
+Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
+the basename.
+
+<DT><CODE>e</CODE>
+<DD>
+Remove all but the trailing suffix.
+
+<DT><CODE>p</CODE>
+<DD>
+Print the new command but do not execute it.
+
+<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
+<DD>
+Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
+event line. Any delimiter may be used in place of <SAMP>`/'</SAMP>.
+The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
+with a single backslash. If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
+it is replaced by <VAR>old</VAR>. A single backslash will quote
+the <SAMP>`&#38;'</SAMP>. The final delimiter is optional if it is the last
+character on the input line.
+
+<DT><CODE>&#38;</CODE>
+<DD>
+Repeat the previous substitution.
+
+<DT><CODE>g</CODE>
+<DD>
+Cause changes to be applied over the entire event line. Used in
+conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
+or with <SAMP>`&#38;'</SAMP>.
+
+</DL>
+
+
+
+<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1>
+
+<P>
+This chapter describes how to interface programs that you write
+with the GNU History Library.
+It should be considered a technical guide.
+For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">Using History Interactively</A>.
+
+</P>
+
+<UL>
+<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for?
+<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored.
+<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use.
+<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour.
+<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library.
+</UL>
+
+
+
+<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2>
+
+<P>
+Many programs read input from the user a line at a time. The GNU History
+library is able to keep track of those lines, associate arbitrary data with
+each line, and utilize information from previous lines in composing new
+ones.
+
+</P>
+<P>
+The programmer using the History library has available functions
+for remembering lines on a history list, associating arbitrary data
+with a line, removing lines from the list, searching through the list
+for a line containing an arbitrary text string, and referencing any line
+in the list directly. In addition, a history <EM>expansion</EM> function
+is available which provides for a consistent user interface across
+different programs.
+
+</P>
+<P>
+The user using programs written with the History library has the
+benefit of a consistent user interface with a set of well-known
+commands for manipulating the text of previous lines and using that text
+in new commands. The basic history manipulation commands are similar to
+the history substitution provided by <CODE>csh</CODE>.
+
+</P>
+<P>
+If the programmer desires, he can use the Readline library, which
+includes some history manipulation by default, and has the added
+advantage of command line editing.
+
+</P>
+
+
+<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2>
+
+<P>
+The history list is an array of history entries. A history entry is
+declared as follows:
+
+</P>
+
+<PRE>
+typedef struct _hist_entry {
+ char *line;
+ char *data;
+} HIST_ENTRY;
+</PRE>
+
+<P>
+The history list itself might therefore be declared as
+
+</P>
+
+<PRE>
+HIST_ENTRY **the_history_list;
+</PRE>
+
+<P>
+The state of the History library is encapsulated into a single structure:
+
+</P>
+
+<PRE>
+/* 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;
+</PRE>
+
+<P>
+If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been
+stifled.
+
+</P>
+
+
+<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2>
+
+<P>
+This section describes the calling sequence for the various functions
+present in GNU History.
+
+</P>
+
+<UL>
+<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you
+ want to use history in a
+ program.
+<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list
+ of history entries.
+<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about
+ the history list.
+<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position
+ in the history list.
+<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list
+ for entries containing a string.
+<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file
+ containing the history list.
+<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history
+ expansion.
+</UL>
+
+
+
+<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3>
+
+<P>
+This section describes functions used to initialize and manage
+the state of the History library when you want to use the history
+functions in your program.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>using_history</B> <I>()</I>
+<DD><A NAME="IDX4"></A>
+Begin a session in which the history functions might be used. This
+initializes the interactive variables.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>()</I>
+<DD><A NAME="IDX5"></A>
+Return a structure describing the current state of the input history.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I>
+<DD><A NAME="IDX6"></A>
+Set the state of the history list according to <VAR>state</VAR>.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3>
+
+<P>
+These functions manage individual entries on the history list, or set
+parameters managing the list itself.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>add_history</B> <I>(char *string)</I>
+<DD><A NAME="IDX7"></A>
+Place <VAR>string</VAR> at the end of the history list. The associated data
+field (if any) is set to <CODE>NULL</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I>
+<DD><A NAME="IDX8"></A>
+Remove history entry at offset <VAR>which</VAR> from the history. The
+removed element is returned so you can free the line, data,
+and containing structure.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, char *line, char *data)</I>
+<DD><A NAME="IDX9"></A>
+Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
+This returns the old entry so you can dispose of the data. In the case
+of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>clear_history</B> <I>()</I>
+<DD><A NAME="IDX10"></A>
+Clear the history list by deleting all the entries.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I>
+<DD><A NAME="IDX11"></A>
+Stifle the history list, remembering only the last <VAR>max</VAR> entries.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>unstifle_history</B> <I>()</I>
+<DD><A NAME="IDX12"></A>
+Stop stifling the history. This returns the previous amount the
+history was stifled. The value is positive if the history was
+stifled, negative if it wasn't.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_is_stifled</B> <I>()</I>
+<DD><A NAME="IDX13"></A>
+Returns non-zero if the history is stifled, zero if it is not.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3>
+
+<P>
+These functions return information about the entire history list or
+individual list entries.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>()</I>
+<DD><A NAME="IDX14"></A>
+Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY</CODE> which is the
+current input history. Element 0 of this list is the beginning of time.
+If there is no history, return <CODE>NULL</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>where_history</B> <I>()</I>
+<DD><A NAME="IDX15"></A>
+Returns the offset of the current history element.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>()</I>
+<DD><A NAME="IDX16"></A>
+Return the history entry at the current position, as determined by
+<CODE>where_history ()</CODE>. If there is no entry there, return a <CODE>NULL</CODE>
+pointer.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I>
+<DD><A NAME="IDX17"></A>
+Return the history entry at position <VAR>offset</VAR>, starting from
+<CODE>history_base</CODE>. If there is no entry there, or if <VAR>offset</VAR>
+is greater than the history length, return a <CODE>NULL</CODE> pointer.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_total_bytes</B> <I>()</I>
+<DD><A NAME="IDX18"></A>
+Return the number of bytes that the primary history entries are using.
+This function returns the sum of the lengths of all the lines in the
+history.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3>
+
+<P>
+These functions allow the current index into the history list to be
+set or changed.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I>
+<DD><A NAME="IDX19"></A>
+Set the position in the history list to <VAR>pos</VAR>, an absolute index
+into the list.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>()</I>
+<DD><A NAME="IDX20"></A>
+Back up the current history offset to the previous history entry, and
+return a pointer to that entry. If there is no previous entry, return
+a <CODE>NULL</CODE> pointer.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>()</I>
+<DD><A NAME="IDX21"></A>
+Move the current history offset forward to the next history entry, and
+return the a pointer to that entry. If there is no next entry, return
+a <CODE>NULL</CODE> pointer.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3>
+<P>
+<A NAME="IDX22"></A>
+
+</P>
+<P>
+These functions allow searching of the history list for entries containing
+a specific string. Searching may be performed both forward and backward
+from the current history position. The search may be <EM>anchored</EM>,
+meaning that the string must match at the beginning of the history entry.
+<A NAME="IDX23"></A>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_search</B> <I>(char *string, int direction)</I>
+<DD><A NAME="IDX24"></A>
+Search the history for <VAR>string</VAR>, starting at the current history
+offset. If <VAR>direction</VAR> &#60; 0, then the search is through previous entries,
+else through subsequent. If <VAR>string</VAR> is found, then
+the current history index is set to that history entry, and the value
+returned is the offset in the line of the entry where
+<VAR>string</VAR> was found. Otherwise, nothing is changed, and a -1 is
+returned.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(char *string, int direction)</I>
+<DD><A NAME="IDX25"></A>
+Search the history for <VAR>string</VAR>, starting at the current history
+offset. The search is anchored: matching lines must begin with
+<VAR>string</VAR>. If <VAR>direction</VAR> &#60; 0, then the search is through previous
+entries, else through subsequent. If <VAR>string</VAR> is found, then the
+current history index is set to that entry, and the return value is 0.
+Otherwise, nothing is changed, and a -1 is returned.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_search_pos</B> <I>(char *string, int direction, int pos)</I>
+<DD><A NAME="IDX26"></A>
+Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
+absolute index into the list. If <VAR>direction</VAR> is negative, the search
+proceeds backward from <VAR>pos</VAR>, otherwise forward. Returns the absolute
+index of the history element where <VAR>string</VAR> was found, or -1 otherwise.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3>
+
+<P>
+The History library can read the history from and write it to a file.
+This section documents the functions for managing a history file.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>read_history</B> <I>(char *filename)</I>
+<DD><A NAME="IDX27"></A>
+Add the contents of <VAR>filename</VAR> to the history list, a line at a
+time. If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from
+<TT>`~/.history'</TT>. Returns 0 if successful, or errno if not.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>read_history_range</B> <I>(char *filename, int from, int to)</I>
+<DD><A NAME="IDX28"></A>
+Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
+Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>. If
+<VAR>from</VAR> is zero, start at the beginning. If <VAR>to</VAR> is less than
+<VAR>from</VAR>, then read until the end of the file. If <VAR>filename</VAR> is
+<CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>. Returns 0 if successful,
+or <CODE>errno</CODE> if not.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>write_history</B> <I>(char *filename)</I>
+<DD><A NAME="IDX29"></A>
+Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
+if necessary. If <VAR>filename</VAR> is
+<CODE>NULL</CODE>, then write the history list to <TT>`~/.history'</TT>. Values
+returned are as in <CODE>read_history ()</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, char *filename)</I>
+<DD><A NAME="IDX30"></A>
+Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(char *filename, int nlines)</I>
+<DD><A NAME="IDX31"></A>
+Truncate the history file <VAR>filename</VAR>, leaving only the last
+<VAR>nlines</VAR> lines.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3>
+
+<P>
+These functions implement <CODE>csh</CODE>-like history expansion.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I>
+<DD><A NAME="IDX32"></A>
+Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
+to a string (see section <A HREF="history.html#SEC2">History Expansion</A>). Returns:
+<DL COMPACT>
+
+<DT><CODE>0</CODE>
+<DD>
+If no expansions took place (or, if the only change in
+the text was the de-slashifying of the history expansion
+character);
+<DT><CODE>1</CODE>
+<DD>
+if expansions did take place;
+<DT><CODE>-1</CODE>
+<DD>
+if there was an error in expansion;
+<DT><CODE>2</CODE>
+<DD>
+if the returned line should only be displayed, but not executed,
+as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>).
+</DL>
+
+<P>
+If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive
+error message.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, char *string)</I>
+<DD><A NAME="IDX33"></A>
+Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
+arguments present in <VAR>string</VAR>. Arguments are broken up as in Bash.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>get_history_event</B> <I>(char *string, int *cindex, int qchar)</I>
+<DD><A NAME="IDX34"></A>
+Returns the text of the history event beginning at <VAR>string</VAR> +
+<VAR>*cindex</VAR>. <VAR>*cindex</VAR> is modified to point to after the event
+specifier. At function entry, <VAR>cindex</VAR> points to the index into
+<VAR>string</VAR> where the history event specification begins. <VAR>qchar</VAR>
+is a character that is allowed to end the event specification in addition
+to the "normal" terminating characters.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(char *string)</I>
+<DD><A NAME="IDX35"></A>
+Return an array of tokens parsed out of <VAR>string</VAR>, much as the
+shell might. The tokens are split on white space and on the
+characters <CODE>()&#60;&#62;;&#38;|$</CODE>, and shell quoting conventions are
+obeyed.
+</DL>
+
+</P>
+
+
+<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2>
+
+<P>
+This section describes the externally visible variables exported by
+the GNU History Library.
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>history_base</B>
+<DD><A NAME="IDX36"></A>
+The logical offset of the first entry in the history list.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>history_length</B>
+<DD><A NAME="IDX37"></A>
+The number of entries currently stored in the history list.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>max_input_history</B>
+<DD><A NAME="IDX38"></A>
+The maximum number of history entries. This must be changed using
+<CODE>stifle_history ()</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char <B>history_expansion_char</B>
+<DD><A NAME="IDX39"></A>
+The character that starts a history event. The default is <SAMP>`!'</SAMP>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char <B>history_subst_char</B>
+<DD><A NAME="IDX40"></A>
+The character that invokes word substitution if found at the start of
+a line. The default is <SAMP>`^'</SAMP>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char <B>history_comment_char</B>
+<DD><A NAME="IDX41"></A>
+During tokenization, if this character is seen as the first character
+of a word, then it and all subsequent characters up to a newline are
+ignored, suppressing history expansion for the remainder of the line.
+This is disabled by default.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>history_no_expand_chars</B>
+<DD><A NAME="IDX42"></A>
+The list of characters which inhibit history expansion if found immediately
+following <VAR>history_expansion_char</VAR>. The default is whitespace and
+<SAMP>`='</SAMP>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B>
+<DD><A NAME="IDX43"></A>
+The list of additional characters which can delimit a history search
+string, in addition to whitespace, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of
+a substring search. The default is empty.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B>
+<DD><A NAME="IDX44"></A>
+If non-zero, single-quoted words are not scanned for the history expansion
+character. The default value is 0.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>history_inhibit_expansion_function</B>
+<DD><A NAME="IDX45"></A>
+This should be set to the address of a function that takes two arguments:
+a <CODE>char *</CODE> (<VAR>string</VAR>) and an integer index into that string (<VAR>i</VAR>).
+It should return a non-zero value if the history expansion starting at
+<VAR>string[i]</VAR> should not be performed; zero if the expansion should
+be done.
+It is intended for use by applications like Bash that use the history
+expansion character for additional purposes.
+By default, this variable is set to NULL.
+</DL>
+
+</P>
+
+
+<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2>
+
+<P>
+The following program demonstrates simple use of the GNU History Library.
+
+</P>
+
+<PRE>
+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 &#38;&#38; *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, &#38;expansion);
+ if (result)
+ fprintf (stderr, "%s\n", expansion);
+
+ if (result &#60; 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]-&#62;line);
+ }
+ else if (strncmp (line, "delete", 6) == 0)
+ {
+ int which;
+ if ((sscanf (line + 6, "%d", &#38;which)) == 1)
+ {
+ HIST_ENTRY *entry = remove_history (which);
+ if (!entry)
+ fprintf (stderr, "No such entry %d\n", which);
+ else
+ {
+ free (entry-&#62;line);
+ free (entry);
+ }
+ }
+ else
+ {
+ fprintf (stderr, "non-numeric arg given to `delete'\n");
+ }
+ }
+ }
+}
+</PRE>
+
+
+
+<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1>
+<P>
+Jump to:
+<A HREF="#a">a</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#h">h</A>
+<P>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX23">anchored search</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX2">event designators</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX3">history events</A>
+<LI><A HREF="history.html#IDX1">history expansion</A>
+<LI><A HREF="history.html#IDX22">History Searching</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1>
+<P>
+Jump to:
+<A HREF="#a">a</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#g">g</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#m">m</A>
+-
+<A HREF="#n">n</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#w">w</A>
+<P>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX7">add_history</A>
+<LI><A HREF="history.html#IDX30">append_history</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX10">clear_history</A>
+<LI><A HREF="history.html#IDX16">current_history</A>
+</DIR>
+<H2><A NAME="g">g</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX34">get_history_event</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX33">history_arg_extract</A>
+<LI><A HREF="history.html#IDX36">history_base</A>
+<LI><A HREF="history.html#IDX41">history_comment_char</A>
+<LI><A HREF="history.html#IDX32">history_expand</A>
+<LI><A HREF="history.html#IDX39">history_expansion_char</A>
+<LI><A HREF="history.html#IDX17">history_get</A>
+<LI><A HREF="history.html#IDX5">history_get_history_state</A>
+<LI><A HREF="history.html#IDX45">history_inhibit_expansion_function</A>
+<LI><A HREF="history.html#IDX13">history_is_stifled</A>
+<LI><A HREF="history.html#IDX37">history_length</A>
+<LI><A HREF="history.html#IDX14">history_list</A>
+<LI><A HREF="history.html#IDX42">history_no_expand_chars</A>
+<LI><A HREF="history.html#IDX44">history_quotes_inhibit_expansion</A>
+<LI><A HREF="history.html#IDX24">history_search</A>
+<LI><A HREF="history.html#IDX43">history_search_delimiter_chars</A>
+<LI><A HREF="history.html#IDX26">history_search_pos</A>
+<LI><A HREF="history.html#IDX25">history_search_prefix</A>
+<LI><A HREF="history.html#IDX6">history_set_history_state</A>
+<LI><A HREF="history.html#IDX19">history_set_pos</A>
+<LI><A HREF="history.html#IDX40">history_subst_char</A>
+<LI><A HREF="history.html#IDX35">history_tokenize</A>
+<LI><A HREF="history.html#IDX18">history_total_bytes</A>
+<LI><A HREF="history.html#IDX31">history_truncate_file</A>
+</DIR>
+<H2><A NAME="m">m</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX38">max_input_history</A>
+</DIR>
+<H2><A NAME="n">n</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX21">next_history</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX20">previous_history</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX27">read_history</A>
+<LI><A HREF="history.html#IDX28">read_history_range</A>
+<LI><A HREF="history.html#IDX8">remove_history</A>
+<LI><A HREF="history.html#IDX9">replace_history_entry</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX11">stifle_history</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX12">unstifle_history</A>
+<LI><A HREF="history.html#IDX4">using_history</A>
+</DIR>
+<H2><A NAME="w">w</A></H2>
+<DIR>
+<LI><A HREF="history.html#IDX15">where_history</A>
+<LI><A HREF="history.html#IDX29">write_history</A>
+</DIR>
+
+</P>
+<P><HR><P>
+This document was generated on 31 December 1998 using the
+<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
+translator version 1.52.</P>
+</BODY>
+</HTML>
diff --git a/readline/doc/history.info b/readline/doc/history.info
new file mode 100644
index 0000000..7a87cbd
--- /dev/null
+++ b/readline/doc/history.info
@@ -0,0 +1,788 @@
+This is Info file history.info, produced by Makeinfo version 1.67 from
+the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo.
+
+INFO-DIR-SECTION Libraries
+START-INFO-DIR-ENTRY
+* History: (history). The GNU history library API
+END-INFO-DIR-ENTRY
+
+ 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-1999 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 Free Software Foundation.
+
+
+File: history.info, Node: Top, Next: Using History Interactively, 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 Expansion
+=================
+
+ The History library provides a history expansion feature that is
+similar to the history expansion provided by `csh'. This section
+describes the syntax used to manipulate the history information.
+
+ History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments
+to a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+ History expansion takes place in two parts. The first is to
+determine which line from the history list 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 history is
+called the "event", and the portions of that line that are acted upon
+are called "words". Various "modifiers" are available to manipulate
+the selected words. The line is broken into words in the same fashion
+that Bash does, so that several words surrounded by quotes are
+considered one word. History expansions are introduced by the
+appearance of the history expansion character, which is `!' by default.
+
+* 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 `('.
+
+`!N'
+ Refer to command line N.
+
+`!-N'
+ Refer to the command N lines back.
+
+`!!'
+ Refer to the previous command. This is a synonym for `!-1'.
+
+`!STRING'
+ Refer to the most recent command starting with STRING.
+
+`!?STRING[?]'
+ Refer to the most recent command containing STRING. The trailing
+ `?' may be omitted if the STRING is followed immediately by a
+ newline.
+
+`^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
+
+`!#'
+ The entire command line typed so far.
+
+
+File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
+
+Word Designators
+----------------
+
+ Word designators are used to select desired words from the event. A
+`:' separates the event specification from the word designator. It may
+be omitted if the word designator begins with a `^', `$', `*', `-', or
+`%'. Words are numbered from the beginning of the line, with the first
+word being denoted by 0 (zero). Words are inserted into the current
+line separated by single spaces.
+
+`0 (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.
+
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+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.
+
+`t'
+ Remove all leading pathname components, leaving the tail.
+
+`r'
+ Remove a trailing suffix of the form `.SUFFIX', leaving the
+ basename.
+
+`e'
+ Remove all but the trailing suffix.
+
+`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 clear_history ()
+ Clear the history list by deleting all the entries.
+
+ - Function: void stifle_history (int max)
+ Stifle the history list, remembering only the last MAX entries.
+
+ - Function: int unstifle_history ()
+ Stop stifling the history. This returns the previous amount the
+ history was stifled. The value is positive if the history was
+ stifled, negative if it wasn't.
+
+ - Function: int 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 `='.
+
+ - Variable: char * history_search_delimiter_chars
+ The list of additional characters which can delimit a history
+ search string, in addition to whitespace, `:' and `?' in the case
+ of a substring search. The default is empty.
+
+ - Variable: int history_quotes_inhibit_expansion
+ If non-zero, single-quoted words are not scanned for the history
+ expansion character. The default value is 0.
+
+ - Variable: Function * history_inhibit_expansion_function
+ This should be set to the address of a function that takes two
+ arguments: a `char *' (STRING) and an integer index into that
+ string (I). It should return a non-zero value if the history
+ expansion starting at STRING[I] should not be performed; zero if
+ the expansion should be done. It is intended for use by
+ applications like Bash that use the history expansion character
+ for additional purposes. By default, this variable is set to NULL.
+
+
+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.
+* history events: Event Designators.
+* history expansion: History Interaction.
+* 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.
+* clear_history: History List Management.
+* 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_inhibit_expansion_function: History Variables.
+* history_is_stifled: History List Management.
+* history_length: History Variables.
+* history_list: Information About the History List.
+* history_no_expand_chars: History Variables.
+* history_quotes_inhibit_expansion: History Variables.
+* history_search: Searching the History List.
+* history_search_delimiter_chars: History Variables.
+* 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: Top1162
+Node: Using History Interactively1742
+Node: History Interaction2250
+Node: Event Designators3669
+Node: Word Designators4596
+Node: Modifiers5845
+Node: Programming with GNU History6983
+Node: Introduction to History7709
+Node: History Storage9030
+Node: History Functions10123
+Node: Initializing History and State Management11094
+Node: History List Management11886
+Node: Information About the History List13407
+Node: Moving Around the History List14713
+Node: Searching the History List15598
+Node: Managing the History File17430
+Node: History Expansion18936
+Node: History Variables20780
+Node: History Programming Example23098
+Node: Concept Index25702
+Node: Function and Variable Index26188
+
+End Tag Table
diff --git a/readline/doc/history.ps b/readline/doc/history.ps
new file mode 100644
index 0000000..ec82198
--- /dev/null
+++ b/readline/doc/history.ps
@@ -0,0 +1,2265 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: history.dvi
+%%Pages: 18
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentPaperSizes: A4
+%%EndComments
+%DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1998.12.31:1208
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 300 300 (history.dvi)
+@start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1
+47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46
+D E /Fc 26 123 df<FFFEFFFEFFFE0F037E7E14>95 D<1FC0007FF00070780020180000
+1C00001C0007FC001FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011
+107E8F14>97 D<FC0000FC00001C00001C00001C00001C00001C00001CF8001DFE001F07
+001E03001C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC
+000CF8001217809614>I<03F80FFE1C0E380470006000E000E000E000E0006000700038
+0E1C1E0FFC03F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007
+CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E0030
+1E00383E001FEFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFE
+E00060007000380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007F
+FEFFFE070007000700070007000700070007000700070007000700FFF8FFF80F177F9614
+>I<07CF001FFF80383B80301800701C00701C00701C003018003838003FF00037C00070
+00007000003FF8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001F
+FC0007F00011197F8F14>I<FC0000FC00001C00001C00001C00001C00001C00001C7800
+1DFE001F86001E07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
+1C0700FF8FE0FF8FE01317809614>I<06000F000F0006000000000000000000FF00FF00
+070007000700070007000700070007000700070007000700FFF8FFF80D187C9714>I<FC
+0000FC00001C00001C00001C00001C00001C00001CFF801CFF801C1C001C38001C70001C
+E0001DC0001FE0001FE0001E70001C38001C3C001C1C001C0E00FF1F80FF1F8011178096
+14>107 D<FF80FF80038003800380038003800380038003800380038003800380038003
+8003800380038003800380FFFEFFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E3
+8038E38038E38038E38038E38038E38038E38038E38038E38038E380FEFBE0FE79E01310
+808F14>I<FC7800FDFE001F86001E07001C07001C07001C07001C07001C07001C07001C
+07001C07001C07001C0700FF8FE0FF8FE01310808F14>I<07C01FF03C78701C701CE00E
+E00EE00EE00EE00EE00E701C783C3C781FF007C00F107E8F14>I<FCF800FDFE001F0700
+1E03001C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC00
+1CF8001C00001C00001C00001C00001C00001C0000FF8000FF80001218808F14>I<03E7
+000FF7001C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F
+001C3F000FF70007C700000700000700000700000700000700000700003FE0003FE01318
+7F8F14>I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E00000E00000E
+00000E00000E00000E0000FFF000FFF00011107F8F14>I<0FD83FF86038C038C038F000
+7F803FF007F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E
+007FFCFFFC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F
+9414>I<FC3F00FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07
+001C07001C07001C1F000FFFE003E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C
+1C001C1C000E38000E38000E380006300007700007700007700003E00003E00003E00011
+107F8F14>I<FE3F80FE3F80700700380E00380E00380E0039CE0039CE0039CE001B6C00
+1A6C001A6C001A6C001E7C001E7C000E380011107F8F14>I<7E3F007E3F001E3C000E78
+0007700007E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F
+8011107F8F14>I<FE3F80FE3F801C0E001C1C001C1C000E1C000E38000E380007380007
+300007300003700003700003E00001E00001E00001C00001C00001C00003800073800077
+00007E00003C000011187F8F14>I<3FFF7FFF700E701C7038007000E001C0038007000E
+001C0738077007FFFFFFFF10107F8F14>I E /Fd 1 47 df<7070F06004047D830B>46
+D E /Fe 24 122 df<03000700FF00070007000700070007000700070007000700070007
+000700070007000700070007000700070007007FF80D187D9713>49
+D<001800180038007800F800B8013802380238043808381838103820384038C038FFFF00
+380038003800380038003803FF10187F9713>52 D<30183FF03FE03F8020002000200020
+0020002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E
+9713>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007
+E007600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE4004800880
+108010002000400040008001800100030003000700060006000E000E000E000E000E0004
+0010197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C
+601E600FC007C003C003C00360022004181807E010187F9713>I<FFE1FFC00E001C000E
+001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E
+001C000FFFFC000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E
+001C000E001C000E001C000E001C000E001C00FFE1FFC01A1A7F991D>72
+D<0FC21836200E6006C006C002C002C002E00070007E003FE01FF803FC007E000E000700
+03800380038003C002C006E004D81887E0101A7E9915>83 D<1FC000387000383800101C
+00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F801F8F
+0011107F8F13>97 D<07F81C1C381C70087000E000E000E000E000E000E0007000700438
+081C1807E00E107F8F11>99 D<003F000007000007000007000007000007000007000007
+0000070000070003E7000C1700180F00300700700700E00700E00700E00700E00700E007
+00E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C3030187018600C
+E00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<0FCF0018718030
+30007038007038007038007038003030001860002FC0006000006000007000003FF0003F
+FC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13>
+103 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C00
+1D87001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C03801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C
+1C1C1C1C1CFF081A80990A>I<FC7C001D87001E03801E03801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C0380FF9FF01410808F15>110
+D<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F
+8F13>I<FCFC001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00
+E01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C00001C0000FF80
+001317808F15>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C001C00
+1C00FF800E10808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F0807080
+30C030C020F0408F800C107F8F0F>I<0800080008000800180018003800FFC038003800
+380038003800380038003800382038203820382018201C4007800B177F960F>I<FF0F80
+3C07001C06001C04001C04000E08000E080007100007100007100003A00003A00001C000
+01C00001C00000800011107F8F14>118 D<FE3F803C1E001C08000E10000F3000076000
+03C00001C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14>
+120 D<FF0F803C07001C06001C04001C04000E08000E080007100007100007100003A000
+03A00001C00001C00001C000008000008000010000010000E10000E20000E40000780000
+11177F8F14>I E /Ff 2 42 df<00E001C00380078007000F001E001E001C003C003C00
+38007800780078007000F000F000F000F000F000F000F000F000F000F000F000F000F000
+F000700078007800780038003C003C001C001E001E000F0007000780038001C000E00B2E
+7CA112>40 D<E000700038003C001C001E000F000F00070007800780038003C003C003C0
+01C001E001E001E001E001E001E001E001E001E001E001E001E001E001E001C003C003C0
+03C003800780078007000F000F001E001C003C0038007000E0000B2E7EA112>I
+E /Fg 27 123 df<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000FC03F00
+0FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800FC01F80
+0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80
+0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F807FF8FFF0
+7FF8FFF01C237FA220>12 D<000FFF80007FFF8001FC1F8003F03F8007E03F800FC03F80
+0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80FFFFFF80FFFFFF80
+0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80
+0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80
+7FF8FFF07FF8FFF01C237FA220>I<07FE00001FFF80003F07E0003F03F0003F01F0003F
+01F8001E01F8000001F8000001F800003FF80003FDF8001F81F8003E01F8007C01F800F8
+01F800F801F800F801F800F801F8007C02F8007E0CF8001FF87F8007E03F8019167E951C
+>97 D<FF800000FF8000001F8000001F8000001F8000001F8000001F8000001F8000001F
+8000001F8000001F8000001F8000001F8000001F87F0001FBFFC001FF03E001FC01F001F
+800F801F800FC01F8007C01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F
+8007E01F8007C01F8007C01F800FC01F800F801FC01F001E707E001C3FFC00180FE0001B
+237EA220>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000
+FC0000FC0000FC0000FC00007C00007E00007E00003E00181F00300FC06007FFC000FF00
+15167E9519>I<0001FF000001FF0000003F0000003F0000003F0000003F0000003F0000
+003F0000003F0000003F0000003F0000003F0000003F0000FE3F0007FFBF000FC1FF001F
+007F003E003F007E003F007C003F007C003F00FC003F00FC003F00FC003F00FC003F00FC
+003F00FC003F00FC003F007C003F007E003F003E003F001F007F000F81FF0007FF3FE001
+FC3FE01B237EA220>I<00FE0007FF800F83C01E01E03E00F07E00F07C00F87C0078FC00
+78FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00183E00181F00300F80E003FF
+C000FF0015167E951A>I<001F8000FFE001F1F003E3F007E3F00FC3F00FC1E00FC0000F
+C0000FC0000FC0000FC0000FC000FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0007FFC007FFC0014237EA212>I<00FE0F8003FF9FC00F83E3C01F01F3C01E00F0003E
+00F8003E00F8003E00F8003E00F8003E00F8001E00F0001F01F0000F83E0000BFF800008
+FE000018000000180000001C0000001FFFE0001FFFFC000FFFFF0007FFFF001FFFFF807C
+001FC078000FC0F80007C0F80007C0F80007C07C000F803E001F001F807E000FFFFC0001
+FFE0001A217F951D>I<FF800000FF8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F83F0001F8FFC001F98
+7E001FA03E001FC03F001FC03F001F803F001F803F001F803F001F803F001F803F001F80
+3F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00FFF1
+FFE0FFF1FFE01B237DA220>I<1E003F007F807F807F807F803F001E0000000000000000
+0000000000FF80FF801F801F801F801F801F801F801F801F801F801F801F801F801F801F
+801F801F801F801F80FFF0FFF00C247EA30F>I<FF800000FF8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
+1F80FF801F80FF801F803C001F8030001F80E0001F81C0001F8300001F8600001F9E0000
+1FBE00001FFF00001FDF80001F8FC0001F07C0001F07E0001F03F0001F01F8001F00F800
+1F00FC001F007E00FFE1FFC0FFE1FFC01A237EA21E>107 D<FF80FF801F801F801F801F
+801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F
+801F801F801F801F801F801F801F801F801F80FFF0FFF00C237EA20F>I<FF03F803F800
+FF0FFE0FFE001F183F183F001F201F201F001F401FC01F801F401FC01F801F801F801F80
+1F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80
+1F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80
+1F801F801F80FFF0FFF0FFF0FFF0FFF0FFF02C167D9531>I<FF03F000FF0FFC001F187E
+001F203E001F403F001F403F001F803F001F803F001F803F001F803F001F803F001F803F
+001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00FFF1FF
+E0FFF1FFE01B167D9520>I<00FF0007FFE00F81F01F00F83E007C7C003E7C003E7C003E
+FC003FFC003FFC003FFC003FFC003FFC003FFC003F7C003E7E007E3E007C1F00F80F81F0
+07FFE000FF0018167E951D>I<FF87F000FFBFFC001FF07E001FC01F001F800F801F800F
+C01F800FC01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F8007
+C01F800FC01F800FC01F801F801FC01F001FF07E001FBFFC001F8FE0001F8000001F8000
+001F8000001F8000001F8000001F8000001F8000001F800000FFF00000FFF000001B207E
+9520>I<00FE030007FF07000FC1CF001F00DF003F007F007E003F007E003F007C003F00
+FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F007E003F007E003F00
+3E007F001F00FF000FC1FF0007FF3F0000FC3F0000003F0000003F0000003F0000003F00
+00003F0000003F0000003F0000003F000001FFE00001FFE01B207E951E>I<FF0F80FF1F
+E01F33F01F63F01F43F01F43F01FC1E01F80001F80001F80001F80001F80001F80001F80
+001F80001F80001F80001F80001F80001F8000FFF800FFF80014167E9518>I<07F9801F
+FF80380780700380F00180F00180F80000FF0000FFF8007FFE003FFF001FFF8007FF8000
+3FC0C007C0C003C0E003C0E003C0F00380FC0F00EFFE00C3F80012167E9517>I<018000
+0180000180000180000380000380000780000780000F80003F8000FFFF00FFFF001F8000
+1F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F81801F8180
+1F81801F81801F81800F83000FC30007FE0001F80011207F9F16>I<FF81FF00FF81FF00
+1F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00
+1F803F001F803F001F803F001F803F001F803F001F803F001F807F001F80FF000FC1BF00
+07FF3FE001FC3FE01B167D9520>I<FFF01FE0FFF01FE01FC007000FC006000FE00E0007
+E00C0007F00C0003F0180003F0180001F8300001F8300000FC600000FC600000FEE00000
+7EC000007FC000003F8000003F8000001F0000001F0000000E0000000E00001B167F951E
+>I<FFF3FF83FCFFF3FF83FC1F807C00E00FC07C00C00FC03E00C00FE03E01C007E07F01
+8007E07F018003F07F030003F0CF830003F8CF870001F9CFC60001F987C60000FD87EC00
+00FF03EC0000FF03FC00007F03F800007E01F800003E01F000003C00F000003C00F00000
+1800600026167F9529>I<FFF07FC0FFF07FC00FC01C0007E0380007F0700003F0E00001
+F8C00000FD8000007F8000007F0000003F0000001F8000003FC0000037E0000067F00000
+C3F00001C1F8000380FC000700FE000E007F00FF81FFE0FF81FFE01B167F951E>I<FFF0
+1FE0FFF01FE01FC007000FC006000FE00E0007E00C0007F00C0003F0180003F0180001F8
+300001F8300000FC600000FC600000FEE000007EC000007FC000003F8000003F8000001F
+0000001F0000000E0000000E0000000C0000000C00000018000078180000FC380000FC30
+0000FC60000069C000007F8000001F0000001B207F951E>I<7FFFF07FFFF07C07E0700F
+C0601FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0
+701F80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E
+/Fh 24 119 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC
+0001F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E0001315
+7D991A>42 D<003800007C00007C00006C0000EE0000EE0000EE0000C60000C60001C700
+01C70001C70001C7000383800383800383800383800701C00701C007FFC007FFC00FFFE0
+0E00E00E00E00E00E00E00E01C00707F01FCFF83FE7F01FC171E7F9D1A>65
+D<FFFFF8FFFFF8FFFFF81C00381C00381C00381C00381C00381C00001C00001C0E001C0E
+001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00001C001C1C00
+1C1C001C1C001C1C001CFFFFFCFFFFFCFFFFFC161E7E9D1A>69 D<7FFFFCFFFFFC7FFFFC
+0E001C0E001C0E001C0E001C0E001C0E00000E00000E03800E03800E03800FFF800FFF80
+0FFF800E03800E03800E03800E00000E00000E00000E00000E00000E00000E00000E0000
+7FE000FFE0007FE000161E7F9D1A>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00
+701C00701C00701C00701C00701C00701C00701FFFF01FFFF01FFFF01C00701C00701C00
+701C00701C00701C00701C00701C00701C00701C00701C0070FF83FEFF83FEFF83FE171E
+7F9D1A>72 D<FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C000FFFF80FFFF80FFFF80111E7C9D1A>I<FE03FEFF03
+FEFF03FE1D80701D80701DC0701CC0701CC0701CE0701CE0701C60701C70701C70701C30
+701C38701C38701C18701C1C701C1C701C0C701C0E701C0E701C06701C06701C07701C03
+701C0370FF81F0FF81F0FF80F0171E7F9D1A>78 D<0FFE003FFF807FFFC07C07C07001C0
+F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
+E000E0E000E0E000E0E000E0E000E0E000E0F001E0F001E07001C07C07C07FFFC03FFF80
+0FFE00131E7D9D1A>I<FFFC00FFFF00FFFF801C07C01C01E01C00F01C00701C00701C00
+701C00701C00F01C01E01C07C01FFF801FFF001FFF801C07C01C01C01C00E01C00E01C00
+E01C00E01C00E01C00E21C00E71C00E71C00E7FF807EFF807EFF8038181E7F9D1A>82
+D<03F1C00FFDC03FFFC07C0FC07003C0E003C0E001C0E001C0E001C0E000007000007800
+003F00001FF00007FE0000FF80000FC00001E00000E0000070000070600070E00070E000
+70E000E0F001E0FC03C0FFFF80EFFF00E3FC00141E7D9D1A>I<7FFFFEFFFFFEFFFFFEE0
+380EE0380EE0380EE0380EE0380E00380000380000380000380000380000380000380000
+380000380000380000380000380000380000380000380000380000380000380000380003
+FF8003FF8003FF80171E7F9D1A>I<FF01FEFF01FEFF01FE1C00700E00E00E00E00701C0
+0701C00783C003838003C78001C70001C70000EE0000EE00007C00007C00003800003800
+00380000380000380000380000380000380000380000380001FF0001FF0001FF00171E7F
+9D1A>89 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 D<1FF0003FFC007FFE00780F
+00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380E003
+80700780780F803FFFFC1FFDFC07F0FC16157D941A>97 D<00FF8003FFC00FFFE01F01E0
+3C00C0780000700000700000E00000E00000E00000E00000E00000700000700000780070
+3C00701F01F00FFFE003FFC000FE0014157D941A>99 D<001FC0001FC0001FC00001C000
+01C00001C00001C00001C00001C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E0
+01C0E001C0E001C0E001C0E001C0E001C0E001C07003C07003C03807C03E0FC01FFFFC07
+FDFC01F1FC161E7E9D1A>I<FE0000FE0000FE00000E00000E00000E00000E00000E0000
+0E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE171E7F9D1A>
+104 D<01C00003E00003E00003E00001C0000000000000000000000000000000007FE000
+7FE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E0007FFF80FFFFC07FFF80121F7C9E1A>I<FE3E00FEFF
+80FFFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE17157F941A>110
+D<01F00007FC001FFF003E0F803C07807803C07001C0E000E0E000E0E000E0E000E0E000
+E0E000E0F001E07001C07803C03C07803E0F801FFF0007FC0001F00013157D941A>I<7F
+81F8FF8FFC7F9FFE03FE1E03F80C03E00003E00003C00003800003800003800003800003
+80000380000380000380000380000380007FFF00FFFF007FFF0017157F941A>114
+D<0180000380000380000380000380000380000380007FFFE0FFFFE0FFFFE00380000380
+000380000380000380000380000380000380000380000380000380700380700380700380
+7001C1E001FFE000FF80003F00141C7F9B1A>116 D<FE0FE0FE0FE0FE0FE00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01
+E00F03E007FFFE03FFFE00FCFE17157F941A>I<7FC7FCFFC7FE7FC7FC0E00E00E00E00E
+00E00701C00701C00701C003838003838003838001C70001C70001C70000EE0000EE0000
+EE00007C00007C0000380017157F941A>I E /Fi 41 123 df<0007FC00003FFF0000FE
+078003F007C007E00FC007E00FC00FC00FC00FC00FC00FC00FC00FC003000FC000000FC0
+00000FC000000FC07FE0FFFFFFE0FFFFFFE00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC7FFEFFFC7FFE1F26
+7FA522>12 D<3C7EFFFFFFFF7E3C08087C8711>46 D<001C00003C0000FC00FFFC00FFFC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC007FFFFC7FFFFC16237CA21F>49 D<01FF0007FFC01E07F0
+3803F86001FC7C00FEFE00FEFE00FFFE007FFE007F7C007F3800FF0000FF0000FE0000FE
+0001FC0001F80003F00007E0000780000F00001E00003C0000700000E00301C003038007
+0700060600060FFFFE1FFFFE3FFFFE7FFFFCFFFFFCFFFFFC18237DA21F>I<01FF0007FF
+E01E03F03801F83C01FC7E00FE7E00FE7E00FE3E00FE1C01FE0001FC0001FC0003F80007
+F0000FC001FF0001FF000007E00001F00001F80000FC0000FE0000FF0000FF1000FF7C00
+FFFE00FFFE00FFFE00FEFE00FE7C01FC7001F83E07F00FFFC001FF0018237DA21F>I<00
+00380000007800000078000000F8000001F8000003F8000007F8000006F800000CF80000
+1CF8000038F8000030F8000060F80000E0F80001C0F8000180F8000300F8000700F8000E
+00F8001C00F8001800F8003000F8007000F800E000F800FFFFFFC0FFFFFFC00001F80000
+01F8000001F8000001F8000001F8000001F8000001F800007FFFC0007FFFC01A237EA21F
+>I<18000C1F007C1FFFF81FFFF01FFFE01FFFC01FFF801FFC0018000018000018000018
+000018000018FF001BFFE01F03F01C00F80800FC00007E00007E00007E00007F00007F78
+007FFC007FFC007FFC007FFC007EF8007E6000FC7000FC3801F81E07E007FFC001FE0018
+237DA21F>I<001FC0007FF001F03803E00C07803E0F807E1F007E3F007E3F007E7E003C
+7E00007E00007E0000FE3FC0FE7FF0FE80F8FF80FCFF007CFF007EFE007EFE007FFE007F
+FE007FFE007F7E007F7E007F7E007F7E007F3E007E3F007E1F007C0F80F807C1F003FFC0
+007F0018237DA21F>I<300000003C0000003FFFFFC03FFFFFC03FFFFF807FFFFF007FFF
+FE007FFFFC006000180060001800E0003000C0006000C000C00000018000000180000003
+000000060000000E0000000E0000001C0000001C0000003C0000003C0000007800000078
+000000F8000000F8000000F8000000F8000001F8000001F8000001F8000001F8000001F8
+000001F8000000F00000006000001A257DA41F>I<00001C00000000001C00000000003E
+00000000003E00000000003E00000000007F00000000007F0000000000FF8000000000FF
+8000000000FF80000000019FC0000000019FC0000000031FE0000000030FE0000000070F
+F00000000607F00000000607F00000000C07F80000000C03F80000001C03FC0000001801
+FC0000001801FC0000003000FE0000003000FE0000007FFFFF0000007FFFFF000000E000
+7F800000C0003F800000C0003F80000180003FC0000180001FC0000380001FE000030000
+0FE0000300000FE00007000007F000FFF000FFFF80FFF000FFFF8029257EA42E>65
+D<FFFFFFE00000FFFFFFFC000003F800FF000003F8001FC00003F80007E00003F80003F0
+0003F80001F80003F80001FC0003F80000FC0003F80000FE0003F80000FE0003F800007F
+0003F800007F0003F800007F0003F800007F8003F800007F8003F800007F8003F800007F
+8003F800007F8003F800007F8003F800007F8003F800007F8003F800007F8003F800007F
+8003F800007F0003F800007F0003F800007F0003F80000FE0003F80000FE0003F80001FC
+0003F80001F80003F80003F00003F80007E00003F8001FC00003F800FF8000FFFFFFFE00
+00FFFFFFE0000029257EA42F>68 D<FFFFFFFF00FFFFFFFF0003F8007F0003F8000F8003
+F800078003F800038003F800038003F800018003F800018003F800018003F80000C003F8
+0600C003F80600C003F806000003F806000003F80E000003F81E000003FFFE000003FFFE
+000003F81E000003F80E000003F806000003F806000003F806006003F806006003F80000
+6003F80000C003F80000C003F80000C003F80000C003F80001C003F80003C003F80003C0
+03F8000F8003F8003F80FFFFFFFF80FFFFFFFF8023257EA428>I<FFFFFFFE00FFFFFFFE
+0003F800FE0003F8001F0003F8000F0003F800070003F800070003F800030003F8000300
+03F800030003F800018003F803018003F803018003F803000003F803000003F807000003
+F80F000003FFFF000003FFFF000003F80F000003F807000003F803000003F803000003F8
+03000003F803000003F800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F8000000FFFFF00000FFFFF0000021257EA4
+27>I<FFFFE0FFFFE0FFFFE0FFFFE003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003FFFF
+FFF80003FFFFFFF80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800FFFFE0
+FFFFE0FFFFE0FFFFE02B257EA430>72 D<FFFFE0FFFFE003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F800FFFFE0FFFFE013257EA417>I<FFFFF000FFFFF00003
+F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003
+F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003
+F8000003F8000003F8000003F8000303F8000303F8000303F8000603F8000603F8000603
+F8000E03F8000E03F8001E03F8003E03F8007C03F803FCFFFFFFFCFFFFFFFC20257EA425
+>76 D<FFF8000000FFF8FFFC000001FFF803FC000001FE00037E0000037E00037E000003
+7E00037E0000037E00033F0000067E00033F0000067E00031F80000C7E00031F80000C7E
+00030FC000187E00030FC000187E000307E000307E000307E000307E000307E000307E00
+0303F000607E000303F000607E000301F800C07E000301F800C07E000300FC01807E0003
+00FC01807E0003007E03007E0003007E03007E0003007E03007E0003003F06007E000300
+3F06007E0003001F8C007E0003001F8C007E0003000FD8007E0003000FD8007E00030007
+F0007E00030007F0007E00030007F0007E00030003E0007E00078003E0007E00FFFC01C0
+1FFFF8FFFC01C01FFFF835257EA43A>I<00FF008007FFE3800F80F7801E001F803C000F
+807800078078000380F8000380F8000180F8000180FC000180FC000000FF0000007FE000
+007FFE00003FFFE0003FFFF8001FFFFE0007FFFF0003FFFF80007FFF800003FFC000003F
+C000000FE0000007E0000007E0C00003E0C00003E0C00003E0C00003C0E00003C0F00007
+C0F8000780FC000F00FFC03E00E3FFF800803FE0001B257DA422>83
+D<FFFF81FFFE01FFF0FFFF81FFFE01FFF007F0001FC0000F0007F0001FE000060003F800
+0FE0000C0003F8000FE0000C0003F80007F0000C0001FC0007F000180001FC0007F00018
+0001FE000FF800380000FE000FF800300000FE001FFC003000007F0019FC006000007F00
+19FC006000007F8030FE006000003F8030FE00C000003F8030FF00C000003FC0607F01C0
+00001FC0607F018000001FC0E07F818000000FE0C03F830000000FE0C03F830000000FF1
+801FC300000007F1801FC600000007F1801FE600000007FB000FEE00000003FB000FEC00
+000003FF000FFC00000001FE0007F800000001FE0007F800000001FC0003F800000000FC
+0003F000000000FC0003F000000000F80001F000000000780001E000000000780001E000
+000000300000C000003C257FA43F>87 D<07FF00001FFFE0003E03F0003F00F8003F00FC
+003F007E001E007E0000007E0000007E0000007E00001FFE0003FE7E000FC07E001F007E
+003E007E007E007E00FC007E00FC007E00FC007E00FC00BE007E01BE003F073E001FFE1F
+E007F00FE01B187E971E>97 D<FFC00000FFC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC1FC
+000FCFFF000FFC0FC00FF007E00FC003F00FC003F00FC001F80FC001F80FC001FC0FC001
+FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001F80FC001F80FC003
+F00FE003F00FF007E00F1C1F800E0FFF000C03F8001E267FA522>I<007FE003FFF807C0
+7C1F80FC1F00FC3F00FC7E00787E0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE00007E00007F00003F000C1F800C1FC01807E07003FFE0007F0016187E971B>I<00
+00FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC0007F0FC003FFCFC00FE0FFC01F803FC03F
+000FC03F000FC07E000FC07E000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE
+000FC0FE000FC0FE000FC07E000FC07E000FC03F000FC03F001FC01F803FC00FC0EFC003
+FFCFFC00FE0FFC1E267EA522>I<007F0003FFC007C1F00F80F81F00F83F007C7E007C7E
+007EFE007EFE007EFFFFFEFFFFFEFE0000FE0000FE00007E00007E00007E00063F00061F
+000C0F801807E07003FFE0007F8017187E971C>I<001FC0007FF001F8F003E1F807E1F8
+07C1F80FC0F00FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFF00FFFF000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE0015267EA513>I<01FF
+07C007FFDFE00F83F1E01F01F1E03E00F8007E00FC007E00FC007E00FC007E00FC007E00
+FC007E00FC003E00F8001F01F0000F83E0000FFFC00011FF000030000000300000003800
+00003C0000003FFFE0001FFFFC001FFFFE000FFFFF001FFFFF803C003F8078000FC0F800
+07C0F80007C0F80007C0F80007C07C000F803E001F001F807E0007FFF80000FFC0001B24
+7E971F>I<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC0FE000FC3FF800FCE0F
+C00FD80FC00FD007E00FE007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E0FFFC7FFEFFFC7FFE1F267EA522>I<0F001F803FC03FC03FC03FC01F800F00
+00000000000000000000000000007FC07FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D277EA611>I<FFC0FF
+C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F
+C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFF
+FC0E267EA511>108 D<FF80FE007F00FF83FF81FFC00F8E0FC707E00F980FCC07E00F90
+07E803F00FA007F003F00FA007F003F00FC007E003F00FC007E003F00FC007E003F00FC0
+07E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC0
+07E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F0FFFC
+7FFE3FFFFFFC7FFE3FFF30187E9733>I<FF80FE00FF83FF800F8E0FC00F980FC00F9007
+E00FA007E00FA007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC7F
+FEFFFC7FFE1F187E9722>I<007F800003FFF00007C0F8001F807E003F003F003F003F00
+7E001F807E001F80FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0
+FE001FC07E001F807E001F803F003F003F003F001F807E000FC0FC0003FFF000007F8000
+1A187E971F>I<FFC1FC00FFCFFF000FFC1FC00FF007E00FC007F00FC003F00FC003F80F
+C001F80FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0F
+C003F80FC003F80FC003F00FE007F00FF00FE00FDC1F800FCFFF000FC3F8000FC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FF
+FC00001E237F9722>I<FF83E0FF8FF80F8C7C0F90FC0FB0FC0FA0FC0FA0780FE0000FC0
+000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+000FC000FFFE00FFFE0016187F9719>114 D<07F8C01FFFC03C07C07001C0F000C0F000
+C0F000C0FC0000FF80007FFC007FFE003FFF800FFFC003FFC0001FE00003E0C001E0C001
+E0E001E0E001C0F003C0FC0780EFFF00C3FC0013187E9718>I<00C00000C00000C00000
+C00001C00001C00001C00003C00007C0000FC0001FC000FFFFC0FFFFC00FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0600FC0600F
+C0600FC0600FC0600FC06007E0C007E1C001FF80007E0013237FA218>I<FFC07FE0FFC0
+7FE00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC00FE00FC0
+0FE007C017E007E067E003FFC7FE007F07FE1F187E9722>I<FFF80FF8FFF80FF80FC001
+C00FC0018007E0030007E0030007F0070003F0060003F80E0001F80C0001FC0C0000FC18
+0000FE1800007E3000007E3000003F6000003F6000003FE000001FC000001FC000000F80
+00000F800000070000000700001D187F9720>I<FFF83FF0FFF83FF00FC00F0007E00E00
+03F01C0003F8380001FC700000FC6000007EC000003F8000003F8000001F8000000FC000
+001FE000001FF0000033F8000061F80000E0FC0001C07E0003807F0007003F800F001F80
+FFC07FF8FFC07FF81D187F9720>120 D<FFF80FF8FFF80FF80FC001C00FC0018007E003
+0007E0030007F0070003F0060003F80E0001F80C0001FC0C0000FC180000FE1800007E30
+00007E3000003F6000003F6000003FE000001FC000001FC000000F8000000F8000000700
+00000700000006000000060000000C0000300C0000781C0000FC180000FC300000FC7000
+0068E000007FC000001F0000001D237F9720>I<7FFFF87FFFF87C03F07007F0600FE0E0
+0FC0E01F80C03F80C03F00C07E0000FE0000FC0001F80003F80C03F00C07E00C0FE00C0F
+C01C1F80183F80387F00787E01F8FFFFF8FFFFF816187E971B>I
+E /Fj 30 122 df<0003F07C001E0DC600380F0F00701E0F00E01E0E00E00C0001C01C00
+01C01C0001C01C0001C01C0001C01C00038038007FFFFFC0038038000380380003803800
+038038000700700007007000070070000700700007007000070070000E00E0000E00E000
+0E00E0000E00E0000E00E0000E00E0001C01C0001E01E000FF8FFC0020207E9F1B>11
+D<0003E0001C1800381800703C00E03C00E03801C00001C00001C00001C00001C0000380
+007FFFF00380700380700380700380700700E00700E00700E00700E00700E00700E00E01
+C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF0FF016207E9F19>I<0003F03F
+00001E09E08000380F80C000701F01E000E03E01E000E01E01C001C01C000001C01C0000
+01C01C000001C01C000001C01C000003803800007FFFFFFF800380380380038038038003
+803803800380380380070070070007007007000700700700070070070007007007000700
+7007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C0
+1C001E01E01E00FF8FF8FFC023207E9F26>14 D<00200000600000600000600000600030
+61C03C43800E4E0007780001E00001E00007B8001C9C00708F00E0830001800001800001
+800001800001000012147AA117>42 D<0018003801F80E700070007000700070007000E0
+00E000E000E000E000E001C001C001C001C001C001C00380038003800380038003800700
+0780FFFC0E1E7B9D17>49 D<003F8000C1E00100700200780400780400780F007C0F807C
+0F807C0F00780600780000F80000F00001E00001C0000380000700000E00001C00003800
+00600000C0000180000300200600200800401000403FFFC07FFF80FFFF80161E7E9D17>
+I<00FF01FE01800180018001800180030003000300030003000300060006000600060006
+0006000C000C000C000C000C000C00180018001800180018001800300030003000300030
+003000600060006000600060006000FF00FF00102D7EA10D>91 D<00FF01FE0006000600
+0600060006000C000C000C000C000C000C00180018001800180018001800300030003000
+300030003000600060006000600060006000C000C000C000C000C000C001800180018001
+8001800180FF00FF00102D82A10D>93 D<07F8000C0C001E06001E07001C070000070000
+070000070000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F01E10F02E2078
+4F401F878014147D9317>97 D<00FE000383000E07801C0780380700380000780000F000
+00F00000F00000F00000E00000E00000E00000F00000F001007002003804001C180007E0
+0011147D9314>99 D<0000380001F8000078000038000038000070000070000070000070
+0000700000700000E000FCE00382E00601E01C01E03C00E03801C07801C0F001C0F001C0
+F001C0F001C0E00380E00380E00380E00380F00380700780380F001C378007C7E015207D
+9F19>I<00F800070E000E07001C0700380380780380700380F00380F00380FFFF80F000
+00E00000E00000E00000E00000F001007002003004001C180007E00011147D9314>I<00
+07C0001C600030F00060F000E0E000C00001C00001C00001C00001C00001C0000380003F
+FC000380000380000380000380000700000700000700000700000700000700000E00000E
+00000E00000E00000E00000E00001C00001E0000FFC00014207F9F0E>I<00000E003E11
+00E1A301C1C20381E00780E00701E00F01E00F01E00F01E00703C007038007870004FC00
+0800000800001800001C00000FFF000FFFC00FFFE01800F0300030600030C00030C00030
+C000306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E0
+0001C00001C00001C00001C00001C00001C000038000038F800390E003A0E003C0600380
+600780E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01
+C01C03801E03C0FF8FF014207E9F19>I<01C003E003E003C00180000000000000000000
+00000003801F800780038003800700070007000700070007000E000E000E000E000E000E
+001C001E00FF800B1F7F9E0C>I<00E007E001E000E000E001C001C001C001C001C001C0
+0380038003800380038003800700070007000700070007000E000E000E000E000E000E00
+1C001E00FF800B207F9F0C>108 D<0387C07C001F9861860007A072070003C034030003
+803803000780780700070070070007007007000700700700070070070007007007000E00
+E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E0
+1E00FFCFFCFFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E007
+00E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF
+8FF014147E9319>I<00FC000387000E01801C00C03800E03800E07000F0F000F0F000F0
+F000F0F000F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007E00014147D
+9317>I<00E3E00007EC380000F01C0000E00E0000E00F0001C0070001C0078001C00780
+01C0078001C0078001C0078003800F0003800F0003800E0003801E0003801C0003803800
+074070000761C000071F00000700000007000000070000000E0000000E0000000E000000
+0E0000001E000000FFC00000191D809319>I<00FC200382600702601E01E03C01E03801
+C07801C0F001C0F001C0F001C0F001C0E00380E00380F00380F00380F00780700780380F
+001C370007C700000700000700000700000E00000E00000E00000E00001E0000FFC0131D
+7D9318>I<038E001FB38007C78003C78003830007800007000007000007000007000007
+00000E00000E00000E00000E00000E00000E00001C00001E0000FFC00011147E9312>I<
+01F9060708031803180138023C001F001FF007FC01FE001F40074003400360036006F004
+C81887E010147F9312>I<0080010001000100030007000F001E00FFF80E000E000E000E
+001C001C001C001C001C001C00380038103810381038103820382018400F800D1C7C9B12
+>I<1C0380FC1F803C07801C03801C038038070038070038070038070038070038070070
+0E00700E00700E00700E00701E00701E00703C00305E001F9F8011147B9319>I<FF83F8
+1E00E01C00C01C00801E00800E01000E03000E02000E0400070400070800070800071000
+03900003A00003E00003C00003800001800001000015147C9318>I<FF9FE1FC3C078070
+1C0300601C0380601C0380401C0380800E0780800E0D81000E0981000E19C2000E11C200
+0F21C4000720C4000740C8000740E8000780F0000780F0000300E0000300600002004000
+1E147C9321>I<1FF0FF03C07801C07001C04000E0C000E180007300007600003C00003C
+00001C00002E00004E000087000107000203800403800C01C03C03E0FE07FC18147F9318
+>I<0FF83F8001E00E0001C00C0001C0080001E0080000E0100000E0300000E0200000E0
+40000070400000708000007080000071000000390000003A0000003E0000003C00000038
+000000180000001000000010000000200000002000000040000070C00000F0800000F100
+0000E600000078000000191D809318>I E /Fk 36 122 df<0001C0000003C000000FC0
+00007FC0001FFFC000FFFFC000FFBFC000E03FC000003FC000003FC000003FC000003FC0
+00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
+00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
+00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
+00003FC000003FC000003FC000003FC0007FFFFFF07FFFFFF07FFFFFF01C2E7AAD28>49
+D<003FE00001FFFE0007FFFF800F80FFC01E003FE038001FF07C000FF87E0007FCFF0007
+FCFF8007FEFF8007FEFF8003FEFF8003FE7F0003FE3E0007FE000007FE000007FC000007
+FC00000FF800000FF800000FF000001FE000001FC000003F8000007F0000007E000000F8
+000001F0000003E0000007C000000F0000001E000E003C000E0038000E0070001E00E000
+1C01C0001C0300003C07FFFFFC0FFFFFFC1FFFFFFC3FFFFFFC7FFFFFF8FFFFFFF8FFFFFF
+F8FFFFFFF81F2E7CAD28>I<0000007800000000000078000000000000FC000000000000
+FC000000000000FC000000000001FE000000000001FE000000000003FF000000000003FF
+000000000007FF800000000007FF800000000007FF80000000000FFFC0000000000E7FC0
+000000001E7FE0000000001C3FE0000000001C3FE000000000383FF000000000381FF000
+000000781FF800000000700FF800000000700FF800000000E00FFC00000000E007FC0000
+0001E007FE00000001C003FE00000001C003FE000000038001FF000000038001FF000000
+078001FF800000070000FF8000000F0000FFC000000FFFFFFFC000000FFFFFFFC000001F
+FFFFFFE000001C00003FE000003C00003FF000003800001FF000003800001FF000007000
+001FF800007000000FF80000F000000FFC0000E0000007FC0000E0000007FC0001C00000
+07FE0003E0000003FE00FFFF0001FFFFFCFFFF0001FFFFFCFFFF0001FFFFFC36317DB03D
+>65 D<FFFFFFFFC00000FFFFFFFFFC0000FFFFFFFFFF000001FE0000FF800001FE00007F
+E00001FE00003FF00001FE00001FF00001FE00000FF80001FE00000FF80001FE00000FFC
+0001FE000007FC0001FE000007FC0001FE000007FC0001FE000007FC0001FE00000FFC00
+01FE00000FFC0001FE00000FF80001FE00000FF80001FE00001FF00001FE00003FE00001
+FE00007FC00001FE0001FF800001FE001FFE000001FFFFFFFC000001FFFFFFFF800001FE
+00003FE00001FE00000FF00001FE000007FC0001FE000007FC0001FE000003FE0001FE00
+0003FF0001FE000001FF0001FE000001FF8001FE000001FF8001FE000001FF8001FE0000
+01FF8001FE000001FF8001FE000001FF8001FE000001FF8001FE000001FF0001FE000003
+FF0001FE000003FE0001FE000007FE0001FE00000FFC0001FE00001FF80001FE0000FFF0
+00FFFFFFFFFFC000FFFFFFFFFF0000FFFFFFFFF8000031317DB039>I<000003FF800180
+00003FFFF003800001FFFFFC07800007FF003F0F80001FF800079F80003FC00001FF8000
+FF800000FF8001FE0000007F8003FC0000003F8007FC0000001F8007F80000000F800FF0
+0000000F801FF000000007801FF000000007803FE000000007803FE000000003807FE000
+000003807FE000000003807FC000000000007FC00000000000FFC00000000000FFC00000
+000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000
+0000FFC00000000000FFC000000000007FC000000000007FC000000000007FE000000000
+007FE000000003803FE000000003803FE000000003801FF000000003801FF00000000780
+0FF0000000070007F8000000070007FC0000000E0003FC0000001E0001FE0000001C0000
+FF8000007800003FC00000F000001FF80003E0000007FF003F80000001FFFFFE00000000
+3FFFF80000000003FF80000031317CB03A>I<FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFF
+E000FF80007FE000FF80000FF000FF800003F000FF800001F000FF800001F000FF800000
+F000FF800000F000FF8000007000FF8000007000FF8000007000FF8000003800FF800000
+3800FF8007003800FF8007003800FF8007000000FF8007000000FF8007000000FF800F00
+0000FF801F000000FF803F000000FFFFFF000000FFFFFF000000FFFFFF000000FF803F00
+0000FF801F000000FF800F000000FF8007000000FF8007000000FF8007000000FF800700
+0000FF8007000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF80000000FFFFFFC00000FFFFFFC00000FFFFFFC000002D317EB033>70
+D<000003FF00030000007FFFF007000001FFFFFC0F000007FF007E1F00001FF0000FBF00
+007FC00003FF0000FF800001FF0001FE0000007F0003FC0000007F0007FC0000003F000F
+F80000001F000FF00000001F001FF00000000F001FF00000000F003FE000000007003FE0
+00000007007FE000000007007FE000000007007FC00000000000FFC00000000000FFC000
+00000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000
+000000FFC00000000000FFC00000000000FFC00000000000FFC00007FFFFF87FC00007FF
+FFF87FE00007FFFFF87FE0000001FF003FE0000001FF003FE0000001FF001FF0000001FF
+001FF0000001FF000FF0000001FF000FF8000001FF0007FC000001FF0003FC000001FF00
+01FE000001FF0000FF800001FF00007FC00003FF00001FF800077F000007FF003E3F0000
+01FFFFFC1F0000007FFFF00F00000003FF80030035317CB03F>I<FFFFFF807FFFFFC0FF
+FFFF807FFFFFC0FFFFFF807FFFFFC000FF8000007FC00000FF8000007FC00000FF800000
+7FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000
+FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF800000
+7FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000
+FF8000007FC00000FF8000007FC00000FF8000007FC00000FFFFFFFFFFC00000FFFFFFFF
+FFC00000FFFFFFFFFFC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000
+FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF800000
+7FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000
+FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF800000
+7FC00000FF8000007FC00000FF8000007FC00000FF8000007FC00000FF8000007FC000FF
+FFFF807FFFFFC0FFFFFF807FFFFFC0FFFFFF807FFFFFC03A317EB03F>I<FFFFFF80FFFF
+FF80FFFFFF8000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000FFFF
+FF80FFFFFF80FFFFFF8019317EB01E>I<FFFF800001FFFFC0FFFFC00001FFFFC0FFFFE0
+0001FFFFC000FFF0000003E00000FFF8000001C00000EFFC000001C00000E7FC000001C0
+0000E7FE000001C00000E3FF000001C00000E1FF800001C00000E0FFC00001C00000E07F
+E00001C00000E03FE00001C00000E03FF00001C00000E01FF80001C00000E00FFC0001C0
+0000E007FE0001C00000E003FE0001C00000E001FF0001C00000E001FF8001C00000E000
+FFC001C00000E0007FE001C00000E0003FF001C00000E0001FF001C00000E0001FF801C0
+0000E0000FFC01C00000E00007FE01C00000E00003FF01C00000E00001FF81C00000E000
+00FF81C00000E00000FFC1C00000E000007FE1C00000E000003FF1C00000E000001FF9C0
+0000E000000FFDC00000E0000007FDC00000E0000007FFC00000E0000003FFC00000E000
+0001FFC00000E0000000FFC00000E00000007FC00000E00000003FC00000E00000003FC0
+0000E00000001FC00000E00000000FC00001F000000007C000FFFFE0000003C000FFFFE0
+000001C000FFFFE0000001C0003A317EB03F>78 D<FFFFFFFFE000FFFFFFFFFE00FFFFFF
+FFFF8000FF8000FFE000FF80003FF000FF80000FF800FF800007FC00FF800007FC00FF80
+0003FE00FF800003FE00FF800003FF00FF800003FF00FF800003FF00FF800003FF00FF80
+0003FF00FF800003FF00FF800003FF00FF800003FE00FF800003FE00FF800007FC00FF80
+0007F800FF80000FF800FF80003FE000FF8000FFC000FFFFFFFF0000FFFFFFF80000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF80000000FFFFFF800000FFFFFF800000FFFFFF80000030317EB037>80
+D<7FFFFFFFFFFF007FFFFFFFFFFF007FFFFFFFFFFF007FC00FF801FF007E000FF8003F00
+7C000FF8001F0078000FF8000F0078000FF8000F0070000FF8000700F0000FF8000780F0
+000FF8000780F0000FF8000780E0000FF8000380E0000FF8000380E0000FF8000380E000
+0FF8000380E0000FF800038000000FF800000000000FF800000000000FF800000000000F
+F800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF8
+00000000000FF800000000000FF800000000000FF800000000000FF800000000000FF800
+000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80000
+0000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000
+00000FF800000000000FF800000000000FF800000000000FF8000000007FFFFFFF000000
+7FFFFFFF0000007FFFFFFF000031307DAF38>84 D<FFFFFF8003FFFF80FFFFFF8003FFFF
+80FFFFFF8003FFFF8000FF80000007C00000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF800000038000007F800000038000007F8000000700
+00007FC00000070000003FC000000E0000003FC000000E0000001FE000001C0000000FF0
+00003800000007F800007000000003FC0001E000000000FF801FC0000000003FFFFF8000
+0000000FFFFE000000000000FFE000000039317EB03E>I<FFFFFC0000FFFFFFFFFC0000
+FFFFFFFFFC0000FFFF03FF00000003C001FF000000038001FF800000078000FF80000007
+0000FFC000000700007FC000000E00007FC000000E00007FE000001E00003FE000001C00
+003FF000003C00001FF000003800001FF800003800000FF800007000000FFC0000700000
+07FC0000E0000007FC0000E0000007FE0001E0000003FE0001C0000003FF0003C0000001
+FF000380000001FF800380000000FF800700000000FF800700000000FFC00F000000007F
+C00E000000007FE01E000000003FE01C000000003FF03C000000001FF038000000001FF8
+38000000000FF870000000000FF870000000000FFCF00000000007FCE00000000007FFE0
+0000000003FFC00000000003FFC00000000001FF800000000001FF800000000000FF0000
+00000000FF000000000000FF0000000000007E0000000000007E0000000000003C000000
+0000003C00000038317EB03D>I<00FFF0000003FFFF00000F803F80000FC00FE0001FE0
+07F0001FE007F0001FE003F8000FC003FC00078003FC00000003FC00000003FC00000003
+FC00000003FC000000FFFC00001FFFFC0000FFE3FC0003FC03FC000FF003FC001FC003FC
+003FC003FC007F8003FC007F8003FC00FF0003FC00FF0003FC00FF0003FC00FF0007FC00
+FF0007FC007F800DFC003FC01DFE001FE078FFF007FFE07FF000FF803FF024207E9F27>
+97 D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F800000007F800
+000007F800000007F800000007F800000007F800000007F800000007F800000007F80000
+0007F800000007F800000007F800000007F800000007F83FE00007F8FFFC0007FBE07F00
+07FF001F8007FE000FC007FC000FE007F80007F007F80007F807F80007F807F80003FC07
+F80003FC07F80003FC07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F8
+0003FE07F80003FE07F80003FE07F80003FC07F80003FC07F80003FC07F80007F807F800
+07F807F80007F007FC000FE007FE000FC007E7003F8007C3C0FE000780FFF80007003FC0
+0027327EB12D>I<000FFF00007FFFC001FC01F003F003F007E007F80FE007F81FC007F8
+3FC003F03FC001E07F8000007F8000007F800000FF800000FF800000FF800000FF800000
+FF800000FF800000FF800000FF8000007F8000007F8000007F8000003FC0001C3FC0001C
+1FC000380FE0003807E0007003F001E001FC07C0007FFF00000FF8001E207D9F24>I<00
+00000FC0000007FFC0000007FFC0000007FFC00000007FC00000003FC00000003FC00000
+003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000000
+3FC00000003FC00000003FC00000003FC00007F83FC0003FFF3FC000FE07BFC003F801FF
+C007E0007FC00FE0007FC01FC0003FC03FC0003FC03FC0003FC07F80003FC07F80003FC0
+7F80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF
+80003FC0FF80003FC07F80003FC07F80003FC07F80003FC03FC0003FC03FC0003FC01FC0
+003FC00FE0007FC007E000FFC003F003FFE001FC0F3FFE007FFE3FFE000FF03FFE27327D
+B12D>I<000FFC00007FFF8001FC0FC003F003E007E001F00FE001F81FC000FC3FC000FE
+3FC000FE7F80007E7F80007F7F80007FFF80007FFF80007FFFFFFFFFFFFFFFFFFF800000
+FF800000FF800000FF8000007F8000007F8000007F8000003FC000071FC000071FC0000E
+0FE0000E07F0001C03F8007800FE03E0003FFFC00007FE0020207E9F25>I<0001FE0000
+0FFF80001FC3C0007F07E000FE0FF001FE0FF001FC0FF003FC0FF003FC07E003FC018003
+FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFFFC00FF
+FFFC00FFFFFC0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003
+FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003
+FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003
+FC00007FFFF0007FFFF0007FFFF0001C327EB119>I<001FF007C000FFFE3FE001F83F79
+F007E00FC3F00FE00FE1F00FC007E0E01FC007F0001FC007F0003FC007F8003FC007F800
+3FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FC007E0000FE00FE00007
+E00FC00003F83F000006FFFE00000E1FF000000E000000001E000000001E000000001F00
+0000001F800000001FFFFF80000FFFFFF0000FFFFFFC0007FFFFFE0003FFFFFF0003FFFF
+FF800FFFFFFFC03F00007FC07E00001FE07C00000FE0FC000007E0FC000007E0FC000007
+E0FC000007E07E00000FC03E00000F803F00001F800FC0007E0007F803FC0001FFFFF000
+001FFF0000242F7E9F28>I<01F8000000FFF8000000FFF8000000FFF80000000FF80000
+0007F800000007F800000007F800000007F800000007F800000007F800000007F8000000
+07F800000007F800000007F800000007F800000007F800000007F800000007F807F80007
+F83FFE0007F8783F0007F8C03F8007F9801FC007FB001FC007FE001FE007FC001FE007FC
+001FE007FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F800
+1FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001F
+E007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFF
+FFFFC3FFFFFFFFC3FFFF28327DB12D>I<03C00007E0000FF0001FF8001FF8001FF8001F
+F8000FF00007E00003C00000000000000000000000000000000000000000000000000000
+000001F8007FF8007FF8007FF80007F80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>I<01F800
+FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFC0FFFFC0
+FFFFC012327DB117>108 D<03F007F8001FE000FFF03FFE00FFF800FFF0783F01E0FC00
+FFF0C03F8300FE000FF1801FC6007F0007F3001FCC007F0007F6001FF8007F8007FC001F
+F0007F8007FC001FF0007F8007FC001FF0007F8007F8001FE0007F8007F8001FE0007F80
+07F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001F
+E0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F80
+07F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001F
+E0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F80FFFFC3FFFF0FFFFC
+FFFFC3FFFF0FFFFCFFFFC3FFFF0FFFFC3E207D9F43>I<03F007F800FFF03FFE00FFF078
+3F00FFF0C03F800FF1801FC007F3001FC007F6001FE007FC001FE007FC001FE007FC001F
+E007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0
+07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
+F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FFFFFFFF
+C3FFFF28207D9F2D>I<0007FC0000007FFFC00001FC07F00003F001F80007E000FC000F
+C0007E001FC0007F003FC0007F803F80003F807F80003FC07F80003FC07F80003FC0FF80
+003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF8000
+3FE07F80003FC07F80003FC07F80003FC03FC0007F803FC0007F801FC0007F000FE000FE
+0007E000FC0003F803F80001FE0FF000007FFFC0000007FC000023207E9F28>I<01F83F
+E000FFF8FFFC00FFFBE07F00FFFF003F8007FE001FC007FC000FE007F8000FF007F80007
+F807F80007F807F80007FC07F80003FC07F80003FC07F80003FE07F80003FE07F80003FE
+07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FC07F80007FC07
+F80007FC07F80007F807F80007F807F8000FF007FC000FE007FE001FC007FF003F8007FB
+C0FE0007F8FFF80007F83FC00007F800000007F800000007F800000007F800000007F800
+000007F800000007F800000007F800000007F800000007F800000007F8000000FFFFC000
+00FFFFC00000FFFFC00000272E7E9F2D>I<03F03F00FFF07FC0FFF1C3E0FFF187E00FF3
+0FF007F60FF007F60FF007FC07E007FC03C007FC000007FC000007F8000007F8000007F8
+000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8
+000007F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE000FFFF
+E0001C207E9F21>114 D<01FF860007FFFE001F00FE003C003E0078001E0078000E00F8
+000E00F8000E00F8000E00FC000000FF800000FFFC00007FFFC0003FFFF0003FFFF8001F
+FFFC0007FFFE0001FFFF00003FFF000000FF8000003F8060001F80E0000F80E0000F80F0
+000F80F0000F00F8000F00FC001E00FE001C00FF807800F3FFF000C07F800019207D9F20
+>I<001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C0000007C
+0000007C000000FC000001FC000003FC000007FC00001FFFFE00FFFFFE00FFFFFE0003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC038003FC038003FC
+038003FC038003FC038003FC038003FC038001FC038001FC070000FE0700007F0E00003F
+FC000007F000192E7FAD1F>I<01F80007E0FFF803FFE0FFF803FFE0FFF803FFE00FF800
+3FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001F
+E007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0
+07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8003FE007F8003FE003
+F8007FE003F8007FE001FC00DFF000FE039FFF007FFF1FFF000FFC1FFF28207D9F2D>I<
+FFFF001FFCFFFF001FFCFFFF001FFC0FF80003C007F800038007FC00078003FC00070003
+FE00070001FE000E0001FF000E0000FF001C0000FF001C0000FF803C00007F803800007F
+C07800003FC07000003FE0F000001FE0E000001FF1E000000FF1C000000FF9C0000007FB
+80000007FB80000007FF80000003FF00000003FF00000001FE00000001FE00000000FC00
+000000FC00000000780000000078000026207E9F2B>I<FFFF1FFFE03FF8FFFF1FFFE03F
+F8FFFF1FFFE03FF80FF000FE0007800FF800FE00038007F800FF00070007F8007F000700
+07FC007F000F0003FC00FF800E0003FC00FF800E0001FE01FFC01C0001FE01DFC01C0001
+FF01DFC03C0000FF038FE0380000FF038FE03800007F878FF07000007F8707F07000007F
+C707F0F000003FCF07F8E000003FCE03F8E000001FFE03F9C000001FFC01FDC000001FFC
+01FFC000000FFC01FF8000000FF800FF8000000FF800FF80000007F0007F00000007F000
+7F00000003F0007E00000003E0003E00000003E0003E00000001C0001C000035207E9F3A
+>I<7FFF807FFC7FFF807FFC7FFF807FFC03FC000F0001FE001E0000FF003C0000FF8038
+00007FC07800003FC0F000001FE1E000000FF3C000000FFF80000007FF00000003FE0000
+0001FE00000000FF00000000FF80000000FFC0000001FFC0000003DFE00000078FF00000
+078FF800000F07FC00001E03FE00003C01FE00007800FF0000F000FF8001E0007FC003E0
+003FE0FFFC01FFFFFFFC01FFFFFFFC01FFFF28207F9F2B>I<FFFF001FFCFFFF001FFCFF
+FF001FFC0FF80003C007F800038007FC00078003FC00070003FE00070001FE000E0001FF
+000E0000FF001C0000FF001C0000FF803C00007F803800007FC07800003FC07000003FE0
+F000001FE0E000001FF1E000000FF1C000000FF9C0000007FB80000007FB80000007FF80
+000003FF00000003FF00000001FE00000001FE00000000FC00000000FC00000000780000
+0000780000000070000000007000000000F000000000E000000001E000007C01C00000FE
+03C00000FE03800000FE07000000FE0F000000FC1E000000787C0000003FF00000000FC0
+000000262E7E9F2B>I E /Fl 1 14 df<0000FF00000007FFE000001F00F8000078001E
+0000E0000700018000018003000000C006000000600C000000300C000000301800000018
+300000000C300000000C6000000006600000000660000000066000000006C000000003C0
+00000003C000000003C000000003C000000003C000000003C000000003C000000003C000
+0000036000000006600000000660000000066000000006300000000C300000000C180000
+00180C000000300C00000030060000006003000000C0018000018000E00007000078001E
+00001F00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fm
+45 122 df<3C007F00FF80FF80FFC0FFC0FFC07FC03EC000C000C0018001800180030003
+0006000E001C00380010000A157B8813>44 D<1C007F007F00FF80FF80FF807F007F001C
+0009097B8813>46 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE00FFFFFEFFFFFEFFFFFE17277BA622>49 D<00FF800007FFF0000FFF
+FC001E03FE003800FF807C003F80FE003FC0FF001FC0FF001FE0FF000FE0FF000FE07E00
+0FE03C001FE000001FE000001FC000001FC000003F8000003F0000007E000000FC000000
+F8000001F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C0
+01C0038001C0060001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFF
+FF801B277DA622>I<007F800003FFF00007FFFC000F81FE001F007F003F807F003F803F
+803F803F803F803F801F803F801F003F8000007F0000007F0000007E000000FC000001F8
+000007F00000FFC00000FFC0000001F80000007E0000003F0000003F8000001FC000001F
+C000001FE000001FE03C001FE07E001FE0FF001FE0FF001FE0FF001FC0FF003FC0FE003F
+807C007F003F01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000F0000000F00
+00001F0000003F0000007F000000FF000001FF000001FF000003BF0000073F00000E3F00
+001C3F00003C3F0000383F0000703F0000E03F0001C03F0003803F0007803F0007003F00
+0E003F001C003F0038003F0070003F00F0003F00FFFFFFF8FFFFFFF8FFFFFFF800007F00
+00007F0000007F0000007F0000007F0000007F0000007F0000007F00001FFFF8001FFFF8
+001FFFF81D277EA622>I<180003001F801F001FFFFE001FFFFC001FFFF8001FFFF0001F
+FFC0001FFF00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C
+7FC0001DFFF8001F80FC001E003F0008003F0000001F8000001FC000001FC000001FE000
+001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078
+003F803C007F001F01FE000FFFFC0003FFF00000FF80001B277DA622>I<000007800000
+00000780000000000FC0000000000FC0000000000FC0000000001FE0000000001FE00000
+00003FF0000000003FF0000000003FF00000000077F80000000077F800000000F7FC0000
+0000E3FC00000000E3FC00000001C1FE00000001C1FE00000003C1FF0000000380FF0000
+000380FF00000007007F80000007007F8000000F007FC000000E003FC000000E003FC000
+001C001FE000001C001FE000003FFFFFF000003FFFFFF000003FFFFFF00000700007F800
+00700007F80000F00007FC0000E00003FC0001E00003FE0001C00001FE0001C00001FE00
+03C00001FF00FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E297EA833>65
+D<FFFFFFF800FFFFFFFF00FFFFFFFFC003F8001FE003F8000FF003F80007F803F80003F8
+03F80003FC03F80003FC03F80001FC03F80001FC03F80001FC03F80003FC03F80003F803
+F80003F803F80007F003F8000FF003F8001FC003F800FF8003FFFFFE0003FFFFFFC003F8
+000FF003F80003F803F80001FC03F80001FE03F80000FE03F80000FE03F80000FF03F800
+00FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FE03F80001FE03F80003
+FC03F80007FC03F8001FF8FFFFFFFFE0FFFFFFFFC0FFFFFFFE0028297DA830>I<00007F
+E0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000FF03F800007F07F00000
+3F0FE000001F1FC000001F1FC000000F3F8000000F3F800000077F800000077F80000007
+7F00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF
+00000000FF00000000FF000000007F000000007F800000007F800000073F800000073F80
+0000071FC00000071FC000000E0FE000000E07F000001C03F800003C01FC00007800FF00
+01F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA831>I<FFFFFFFFE0FFFF
+FFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC0000F003FC00
+007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC03C0
+0003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C000
+03FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03
+FC00001C03FC00003C03FC00003803FC00007803FC0000F803FC0001F803FC0003F803FC
+001FF8FFFFFFFFF0FFFFFFFFF0FFFFFFFFF027297EA82C>69 D<FFFFFFFFC0FFFFFFFFC0
+FFFFFFFFC003FC003FC003FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003
+FC0000E003FC0000E003FC0000F003FC01C07003FC01C07003FC01C07003FC01C00003FC
+03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03
+C00003FC03C00003FC01C00003FC01C00003FC01C00003FC01C00003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+FFFFFC0000FFFFFC0000FFFFFC000024297EA82A>I<00007FE003000007FFFC0700001F
+FFFF0F00007FF00F9F0000FF0001FF0001FC0000FF0003F800007F0007F000003F000FE0
+00001F001FC000001F001FC000000F003F8000000F003F80000007007F80000007007F80
+000007007F0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000FFFFF87F0000FFFFF87F80
+00FFFFF87F800000FF003F800000FF003F800000FF001FC00000FF001FC00000FF000FE0
+0000FF0007F00000FF0003F80000FF0001FC0000FF0000FF0001FF00007FF007FF00001F
+FFFF9F000007FFFE0F0000007FF003002D297CA835>I<FFFFF00FFFFFFFFFF00FFFFFFF
+FFF00FFFFF03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FFFFFFFFC003FFFFFFFFC003
+FFFFFFFFC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0FF
+FFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF30297EA835>I<FFFFF0FFFFF0FFFFF003FC00
+03FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC00
+03FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC00
+03FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC00FFFFF0FFFFF0
+FFFFF014297EA819>I<FFFE0000003FFF80FFFE0000003FFF80FFFF0000007FFF8003FF
+0000007FE00003FF0000007FE00003BF800000EFE00003BF800000EFE000039FC00001CF
+E000039FC00001CFE000038FE000038FE000038FE000038FE000038FE000038FE0000387
+F000070FE0000387F000070FE0000383F8000E0FE0000383F8000E0FE0000381FC001C0F
+E0000381FC001C0FE0000381FC001C0FE0000380FE00380FE0000380FE00380FE0000380
+7F00700FE00003807F00700FE00003803F80E00FE00003803F80E00FE00003803F80E00F
+E00003801FC1C00FE00003801FC1C00FE00003800FE3800FE00003800FE3800FE0000380
+07F7000FE000038007F7000FE000038007F7000FE000038003FE000FE000038003FE000F
+E000038001FC000FE000038001FC000FE000038000F8000FE000FFFE00F803FFFF80FFFE
+00F803FFFF80FFFE007003FFFF8039297DA840>77 D<FFFC00007FFFFFFE00007FFFFFFF
+00007FFF03FF800001C003FFC00001C003BFE00001C0039FE00001C0039FF00001C0038F
+F80001C00387FC0001C00383FE0001C00381FF0001C00380FF8001C003807F8001C00380
+7FC001C003803FE001C003801FF001C003800FF801C0038007FC01C0038003FC01C00380
+03FE01C0038001FF01C0038000FF81C00380007FC1C00380003FE1C00380001FF1C00380
+000FF1C00380000FF9C003800007FDC003800003FFC003800001FFC003800000FFC00380
+00007FC0038000007FC0038000003FC0038000001FC0038000000FC00380000007C0FFFE
+000003C0FFFE000001C0FFFE000001C030297EA835>I<FFFFFFF800FFFFFFFF00FFFFFF
+FFC003FC003FE003FC0007F003FC0003F803FC0003FC03FC0001FC03FC0001FE03FC0001
+FE03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC0001FC03FC0003FC
+03FC0003F803FC0007F003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFFF0
+0000FFFFF00000FFFFF0000027297EA82E>80 D<FFFFFFE00000FFFFFFFE0000FFFFFFFF
+800003FC003FE00003FC000FF00003FC0007F80003FC0003FC0003FC0001FC0003FC0001
+FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001
+FC0003FC0003F80003FC0007F80003FC000FE00003FC003FC00003FFFFFE000003FFFFFE
+000003FC00FF800003FC003FC00003FC001FE00003FC000FF00003FC0007F80003FC0007
+F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007
+F80003FC0007F80003FC0007F80E03FC0007F80E03FC0003F80E03FC0001FC1CFFFFF000
+FE1CFFFFF0007FF8FFFFF0000FE02F297EA832>82 D<00FF806003FFF0E00FFFF8E01F80
+FDE03F001FE03E0007E07C0003E07C0003E0FC0001E0FC0001E0FC0000E0FE0000E0FE00
+00E0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE001FFFFF0007FFFF8003FF
+FFC000FFFFC0000FFFE000007FE000001FF000000FF0000007F0E00003F0E00003F0E000
+03F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F80FFE03F80E3FFFE00E1FF
+FC00C01FF0001C297CA825>I<FFFFF000FFFEFFFFF000FFFEFFFFF000FFFE03FC000003
+8003FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC000003
+8003FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC000003
+8003FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC000003
+8003FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC000003
+8003FC0000038003FC0000038003FC0000038001FC0000070001FE0000070000FE00000E
+00007F00000E00003F00003C00001FC0007800000FF003F0000007FFFFE0000000FFFF80
+0000001FFC00002F297EA834>85 D<FFFFF0007FFFFFFFF0007FFFFFFFF0007FFF03FE00
+0001C001FE0000038001FE0000038001FF0000078000FF0000070000FF80000F00007F80
+000E00007FC0000E00003FC0001C00003FC0001C00003FE0003C00001FE0003800001FF0
+007800000FF0007000000FF80070000007F800E0000007F800E0000003FC01C0000003FC
+01C0000003FE03C0000001FE0380000001FF0780000000FF0700000000FF87000000007F
+8E000000007F8E000000007FDE000000003FDC000000003FFC000000001FF8000000001F
+F8000000000FF0000000000FF0000000000FF00000000007E00000000007E00000000003
+C00000000003C0000030297FA833>I<FFFFE07FFFE01FFFC0FFFFE07FFFE01FFFC0FFFF
+E07FFFE01FFFC003FC0003FC0000700003FC0003FC0000700003FE0001FE0000700001FE
+0001FE0000E00001FE0001FE0000E00001FF0001FF0001E00000FF0001FF0001C00000FF
+0003FF8001C00000FF8003FF8003C000007F8003FF80038000007F8007FFC0038000003F
+C0073FC0070000003FC0073FC0070000003FE00E1FE00F0000001FE00E1FE00E0000001F
+E00E1FF00E0000001FF01C0FF01E0000000FF01C0FF01C0000000FF03C0FF81C00000007
+F83807F83800000007F83807F83800000007F87807FC3800000003FC7003FC7000000003
+FC7003FC7000000003FEE001FEF000000001FEE001FEE000000001FFE001FFE000000001
+FFC000FFE000000000FFC000FFC000000000FFC000FFC0000000007F80007F8000000000
+7F80007F80000000007F80007F80000000003F00003F00000000003F00003F0000000000
+3E00001F00000000001E00001E00000000001E00001E00000042297FA845>I<03FF8000
+0FFFF0001F01FC003F80FE003F807F003F803F003F803F801F003F8000003F8000003F80
+00003F8000003F80003FFF8001FC3F800FE03F801F803F803F003F807E003F80FC003F80
+FC003F80FC003F80FC003F80FC005F807E00DF803F839FFC1FFE0FFC03FC03FC1E1B7E9A
+21>97 D<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE00000
+0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE1FE000FEFFF80
+0FFE07E00FF803F00FF001F80FE000FC0FE000FC0FE0007E0FE0007E0FE0007F0FE0007F
+0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE0007E0FE0007E
+0FE000FC0FE000FC0FF001F80FF803F00F9C0FE00F0FFF800E01FC00202A7EA925>I<00
+3FF00001FFFC0003F03E000FC07F001F807F003F007F003F007F007F003E007E0000007E
+000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E
+0000007F0000003F0003803F8003801F8007000FE00E0003F83C0001FFF800003FC00019
+1B7E9A1E>I<00007FF000007FF000007FF0000007F0000007F0000007F0000007F00000
+07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0003F87F001FF
+F7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E0007F0FE00
+07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E0007F07E00
+07F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF202A7EA925>
+I<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E000F807E000F
+C07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE0000007E0000
+007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FFFC00003FE0
+001A1B7E9A1F>I<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F03E07F00007
+F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007
+F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007
+F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF80
+F003FFE3F80FC1FE1C1F007C7C3F007E7C3E003E107E003F007E003F007E003F007E003F
+007E003F007E003F003E003E003F007E001F007C000FC1F8000BFFE00018FF8000180000
+0038000000380000003C0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01FFFFF
+F03C0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F07C0001F03F0007
+E00FC01F8007FFFF00007FF0001E287E9A22>I<FFE00000FFE00000FFE000000FE00000
+0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
+0FE000000FE000000FE07E000FE1FF800FE30FC00FE40FE00FE807E00FF807F00FF007F0
+0FF007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0
+0FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0FFFE3FFF
+FFFE3FFFFFFE3FFF202A7DA925>I<07000F801FC03FE03FE03FE01FC00F800700000000
+0000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12>I<
+FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE0FFFEFFFEFFFE0F2A7EA912>108 D<FFC07F001FC000FFC1FFC07FF000FF
+C307E0C1F8000FC407F101FC000FC803F200FC000FD803FE00FE000FD003FC00FE000FD0
+03FC00FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003
+F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F8
+00FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800
+FE000FE003F800FE00FFFE3FFF8FFFE0FFFE3FFF8FFFE0FFFE3FFF8FFFE0331B7D9A38>
+I<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807F00FD007F00FD007F00FE007
+F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007
+F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0FFFE3FFFFFFE3FFFFFFE3F
+FF201B7D9A25>I<003FE00001FFFC0003F07E000FC01F801F800FC03F0007E03F0007E0
+7E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8
+FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC00FC01F8007F07F00
+01FFFC00003FE0001D1B7E9A22>I<FFE1FE00FFEFFF80FFFE0FE00FF803F00FF001F80F
+E001FC0FE000FC0FE000FE0FE000FE0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0F
+E0007F0FE0007F0FE0007F0FE0007E0FE000FE0FE000FE0FE000FC0FE001FC0FF001F80F
+F807F00FFC0FE00FEFFF800FE1FC000FE000000FE000000FE000000FE000000FE000000F
+E000000FE000000FE000000FE00000FFFE0000FFFE0000FFFE000020277E9A25>I<FFC1
+F0FFC7FCFFC63E0FCC7F0FD87F0FD07F0FD07F0FF03E0FE0000FE0000FE0000FE0000FE0
+000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000FFFF
+00FFFF00FFFF00181B7F9A1B>114 D<03FE300FFFF03E03F07800F07000F0F00070F000
+70F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF80007FC0000FCE000
+7CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E9A1B>I<00E00000
+E00000E00000E00001E00001E00001E00003E00003E00007E0000FE0001FFFE0FFFFE0FF
+FFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000F
+E0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE07007F0E003F0C001FF8000
+7F0014267FA51A>I<FFE07FF0FFE07FF0FFE07FF00FE007F00FE007F00FE007F00FE007
+F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007
+F00FE007F00FE007F00FE007F00FE007F00FE007F00FE00FF00FE00FF007E017F003F067
+FF01FFC7FF007F87FF201B7D9A25>I<FFFC03FFFFFC03FFFFFC03FF0FF000F007F000E0
+07F800E003F801C003F801C003FC03C001FC038001FE078000FE070000FF0700007F0E00
+007F0E00007F9E00003F9C00003FFC00001FF800001FF800000FF000000FF000000FF000
+0007E0000007E0000003C0000003C000201B7F9A23>I<FFFC7FFC1FFCFFFC7FFC1FFCFF
+FC7FFC1FFC0FE00FE001C007F007E0038007F007E0038007F807F0078003F807F0070003
+F80FF8070003FC0FF80F0001FC0FF80E0001FC1FFC0E0000FE1CFC1C0000FE1CFE1C0000
+FF387E3C00007F387E3800007F787F3800003FF03F7000003FF03FF000003FE01FF00000
+1FE01FE000001FE01FE000000FC00FC000000FC00FC000000F8007C00000078007800000
+07800780002E1B7F9A31>I<FFFC1FFEFFFC1FFEFFFC1FFE07F0038003F8078003FC0F00
+01FE1E0000FE3C00007F3800007FF800003FF000001FE000000FE000000FF0000007F800
+000FF800001FFC00003CFE000038FF0000787F0000F03F8001E01FC003C01FE003800FE0
+FFF03FFFFFF03FFFFFF03FFF201B7F9A23>I<FFFC03FFFFFC03FFFFFC03FF0FF000F007
+F000E007F800E003F801C003F801C003FC03C001FC038001FE078000FE070000FF070000
+7F0E00007F0E00007F9E00003F9C00003FFC00001FF800001FF800000FF000000FF00000
+0FF0000007E0000007E0000003C0000003C000000380000003800000078000380700007C
+0F0000FE0E0000FE1E0000FE1C0000FE38000074F000003FE000000F80000020277F9A23
+>I E /Fn 75 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8
+F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E038E038E038
+60300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007FFFC0FFFFE0
+FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC0
+1E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C00001C00001C0
+0001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780F1C00079C0
+003FC0001FE0000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380E1C380E1C7
+0071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D9F18>I<38
+03007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C0038
+7C0000780000780000F80000F00001F00001E00001E00003E00003C00003C00007C00007
+83800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C018038013
+247E9F18>I<01C00007E0000FF0000E70001C38001C38001C38001C38001C73F81CF3F8
+1CE3F80FC1C00FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0FC00E07C00
+E07870E0787070FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E0E0E1C1C38
+F8F0C0070E789B18>I<007000F001E003C007800F001E001C0038003800700070007000
+7000E000E000E000E000E000E000E000E0007000700070007000380038001C001E000F00
+078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780038001C001
+C000E000E000E000E00070007000700070007000700070007000E000E000E000E001C001
+C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000
+41C100F1C780FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1C78041C100
+01C00001C00001C00001C00011147D9718>I<00600000F00000F00000F00000F00000F0
+0000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F0
+0000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFFC0FF
+FFE0FFFFE07FFFC013047E8F18>I<3078FCFC78300606778518>I<000300000780000780
+000F80000F00001F00001E00001E00003E00003C00007C0000780000780000F80000F000
+01F00001E00003E00003C00003C00007C0000780000F80000F00000F00001F00001E0000
+3E00003C00003C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F0
+0007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0E000E0E000
+E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C07001F1F
+000FFE0007FC0001F000131C7E9B18>I<01800380038007800F803F80FF80FB80438003
+800380038003800380038003800380038003800380038003800380038003807FFCFFFE7F
+FC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E06000E000
+00E00000E00001C00001C00003C0000780000F00001E00003C0000780000F00001E00007
+C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F00003F00007700
+00770000E70001E70001C7000387000787000707000E07001E07003C0700380700780700
+F00700FFFFF8FFFFF8FFFFF8000700000700000700000700000700000700007FF0007FF0
+007FF0151C7F9B18>52 D<007E0001FF0007FF800F83C01E03C01C03C038018038000070
+0000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000E070
+00E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>54
+D<3078FCFC783000000000000000003078FCFC78300614779318>58
+D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I<0000
+C00003E00007E0001FC0003F8000FE0001FC0007F0000FE0003F80007F0000FC0000FC00
+007F00003F80000FE00007F00001FC0000FE00003F80001FC00007E00003E00000C01318
+7E9918>I<7FFFC0FFFFE0FFFFE07FFFC00000000000000000000000007FFFC0FFFFE0FF
+FFE07FFFC0130C7E9318>I<600000F80000FC00007F00003F80000FE00007F00001FC00
+00FE00003F80001FC00007E00007E0001FC0003F8000FE0001FC0007F0000FE0003F8000
+7F0000FC0000F8000060000013187E9918>I<0FF0003FFC007FFF00700F00F00380F003
+80600780000F00003E00007C0001F00001E00003C00003C00003C00003C00003C0000380
+0000000000000000000000000000000003800007C00007C00007C000038000111C7D9B18
+>I<00700000F80000F80000D80000D80001DC0001DC0001DC00018C00038E00038E0003
+8E00038E000707000707000707000707000707000FFF800FFF800FFF800E03801C01C01C
+01C01C01C07F07F0FF07F87F07F0151C7F9B18>65 D<7FF800FFFE007FFF001C0F801C03
+C01C03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C00
+701C00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C
+7F9B18>68 D<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E00
+1C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C0038
+1C00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>I<FFFFF8FFFFF8FFFFF81C00
+381C00381C00381C00381C00001C00001C07001C07001C07001FFF001FFF001FFF001C07
+001C07001C07001C00001C00001C00001C00001C00001C00001C0000FFC000FFC000FFC0
+00151C7F9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C
+01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01C01C01C01C01C01C
+01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>72
+D<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C0007FFF00FFFF807FFF00111C7D9B18>I<FFC000FFC000FFC0001C00001C00001C
+00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C00001C00E01C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE0131C7E9B
+18>76 D<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1
+C01CE1C01C61C01C71C01C71C01C31C01C39C01C39C01C39C01C19C01C19C01C1DC01C0D
+C01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18>78 D<0FFE003FFF807FFFC07803C0
+7001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
+E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07C07C07FFFC03FFF800FFE00
+131C7E9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C00701C00701C00701C00
+701C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C00001C00001C00
+001C00001C00001C0000FF8000FF8000FF8000141C7F9B18>I<7FF800FFFE007FFF001C
+0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C
+0F001C07001C03801C03801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F
+00F0161C7F9B18>82 D<03F1C01FFFC03FFFC07C0FC07003C0E001C0E001C0E001C0E000
+007000007800003F00001FF00007FE0000FF00000F800003C00001C00000E00000E06000
+E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F800131C7E9B18>I<7FFFF8FFFFF8FF
+FFF8E07038E07038E07038E0703800700000700000700000700000700000700000700000
+700000700000700000700000700000700000700000700000700000700000700007FF0007
+FF0007FF00151C7F9B18>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00701C0070
+1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C0070
+1C00701C00700E00E00F01E00783C003FF8001FF00007C00171C809B18>I<FE03F8FF07
+F8FE03F81C01C01E03C00E03800F0780070700070700038E00038E0001DC0001DC0001DC
+0000F80000F80000700000700000700000700000700000700000700000700000700001FC
+0003FE0001FC00151C7F9B18>89 D<FFF8FFF8FFF8E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000FFF8FFF8FFF80D24779F18>91 D<600000F00000F00000F8000078
+00007C00003C00003C00003E00001E00001F00000F00000F00000F800007800007C00003
+C00003C00003E00001E00001F00000F00000F800007800007800007C00003C00003E0000
+1E00001E00001F00000F00000F8000078000078000030011247D9F18>I<FFF8FFF8FFF8
+003800380038003800380038003800380038003800380038003800380038003800380038
+003800380038003800380038003800380038003800380038FFF8FFF8FFF80D247F9F18>
+I<018007C01FF07EFCF83EE00E0F067C9B18>I<7FFFC0FFFFE0FFFFE07FFFC013047E7F
+18>I<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<0FF0001FFC003FFE003C0F0018
+070000038000038000FF8007FF801FFF807F0380780380E00380E00380E00380F0078078
+0F803FFFF81FFDF807F0F815147E9318>I<7E0000FE00007E00000E00000E00000E0000
+0E00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E0038
+0E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>
+I<01FE0007FF001FFF803E0780380300700000700000E00000E00000E00000E00000E000
+00E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F8000
+3F80001F8000038000038000038000038000038003E3800FFB801FFF803C1F80380F8070
+0780700380E00380E00380E00380E00380E00380E00380700780700780380F803C1F801F
+FFF00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380
+E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E07C01FFF8007FF00
+01F80012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFF
+C0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80F
+FFF81E1E301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039
+E0003800001C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E0003878
+00F07E03F01FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E0000
+0E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7FC171C80
+9B18>I<038007C007C007C0038000000000000000007FC0FFC07FC001C001C001C001C0
+01C001C001C001C001C001C001C001C001C001C0FFFFFFFFFFFF101D7C9C18>I<FFC000
+FFC000FFC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+FFFF80FFFF80FFFF80111C7D9B18>108 D<F9C1C0FFF7F0FFFFF03E3E383C3C383C3C38
+383838383838383838383838383838383838383838383838383838383838383838FE3E3E
+FE7E7EFE3E3E1714809318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7
+FC1714809318>I<01F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E0
+00E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF000FFE0001F00013147E93
+18>I<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E0038
+0E00380E00380F00700F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E0000
+0E00000E00000E00000E00007FC000FFE0007FC000151E809318>I<01F38007FB801FFF
+803E1F80380F80700780700780E00380E00380E00380E00380E00380E003807007807007
+80380F803C1F801FFF800FFB8003E3800003800003800003800003800003800003800003
+80001FF0003FF8001FF0151E7E9318>I<FF0FC0FF3FE0FF7FF007F0F007E06007C00007
+8000078000070000070000070000070000070000070000070000070000070000FFFC00FF
+FE00FFFC0014147E9318>I<07F7003FFF007FFF00780F00E00700E00700E007007C0000
+7FE0001FFC0003FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F000
+11147D9318>I<0180000380000380000380000380007FFFC0FFFFC0FFFFC00380000380
+000380000380000380000380000380000380000380000380400380E00380E00380E001C1
+C001FFC000FF80003E0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E
+00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03
+FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01C01C00E03800E03800E0380070700
+070700070700078F00038E00038E00038E0001DC0001DC0001DC0000F80000F800007000
+15147F9318>I<FF07F8FF8FF8FF07F83800E03800E03800E03800E01C01C01C71C01CF9
+C01CF9C01CD9C01DDDC00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318
+>I<7F8FF07F9FF07F8FF00F0700078E00039E0001DC0001F80000F80000700000F00000
+F80001DC00039E00038E000707000E07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0
+FF8FF87F8FF00E01C00E03800E0380070380070700070700038700038700038E0001CE00
+01CE0001CC0000CC0000DC0000780000780000780000700000700000700000F00000E000
+79E0007BC0007F80003F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003
+C0700780000F00001E00003C0000F80001F00003C0000780000F00701E00703C00707800
+70FFFFF0FFFFF0FFFFF014147F9318>I<0007E0001FE0007FE000780000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF
+80007FC00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E000007800007FE0001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF00
+00FFC00003C00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000F000007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00003C000FFC000FF00007C000013247E9F18
+>I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I E /Fo 74 123
+df<001F83E000F06E3001C078780380F8780300F0300700700007007000070070000700
+7000070070000700700007007000FFFFFF80070070000700700007007000070070000700
+700007007000070070000700700007007000070070000700700007007000070070000700
+7000070070000700700007007000070070003FE3FF001D20809F1B>11
+D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700
+00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
+E00700E00700E00700E00700E00700E00700E00700E03FC3FC1620809F19>I<003FE000
+E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE007
+00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007
+00E00700E00700E00700E00700E00700E03FE7FC1620809F19>I<001F81F80000F04F04
+0001C07C06000380F80F000300F00F000700F00F00070070000007007000000700700000
+070070000007007000000700700000FFFFFFFF0007007007000700700700070070070007
+007007000700700700070070070007007007000700700700070070070007007007000700
+700700070070070007007007000700700700070070070007007007000700700700070070
+07003FE3FE3FE02320809F26>I<7038F87CFC7EFC7E743A040204020402080408041008
+1008201040200F0E7F9F17>34 D<70F8FCFC74040404080810102040060E7C9F0D>39
+D<0040008001000300060004000C001800180038003000300070006000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600060007000300030
+003800180018000C000400060003000100008000400A2E7BA112>I<8000400020003000
+180008000C00060006000700030003000380018001800180018001C001C001C001C001C0
+01C001C001C001C001C001C001C001800180018001800380030003000700060006000C00
+0800180030002000400080000A2E7EA112>I<70F0F8F878080808101010202040050E7C
+840D>44 D<FFF0FFF00C02808A0F>I<70F8F8F87005057C840D>I<03F0000E1C001C0E00
+180600380700700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0
+F003C0F003C0F003C0F003C0F003C0F003C0F003C0700380700380700380780780380700
+1806001C0E000E1C0003F000121F7E9D17>48 D<008003800F80F3800380038003800380
+038003800380038003800380038003800380038003800380038003800380038003800380
+0380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E00200700400780800780F007C0
+F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C00003800007000
+00600000C0000180000300000600400C00401800401000803FFF807FFF80FFFF80121E7E
+9D17>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80000F00000F
+00001E00001C0000700007F000003C00000E00000F000007800007800007C02007C0F807
+C0F807C0F807C0F00780400780400F00200E00183C0007F000121F7E9D17>I<00060000
+0600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E00020E0004
+0E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E0000
+0E00000E00000E00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE000
+10000010000010000010000010000010000011F000161C00180E00100700100780000380
+0003800003C00003C00003C07003C0F003C0F003C0E00380400380400700200600100C00
+08380007E000121F7E9D17>I<007C000182000701000E03800C07801807803803003800
+00780000700000700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003
+C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C0001F000121F
+7E9D17>I<4000007FFFE07FFFC07FFFC040008080010080010080020000040000040000
+080000100000100000200000200000600000600000E00000C00001C00001C00001C00001
+C00003C00003C00003C00003C00003C00003C00003C000018000131F7E9D17>I<03F000
+0C0C001006003003002001806001806001806001807001807803003E03003F06001FC800
+0FF00003F80007FC000C7E00103F00300F806007806001C0C001C0C000C0C000C0C000C0
+C000806001802001001002000C0C0003F000121F7E9D17>I<03F0000E18001C0C003806
+00380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007
+C03807C0180BC00E13C003E3C0000380000380000380000700300700780600780E00700C
+002018001070000FC000121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F8
+7005147C930D>I<70F8F8F8700000000000000000000070F0F8F8780808081010102020
+40051D7C930D>I<000100000003800000038000000380000007C0000007C0000007C000
+0009E0000009E0000009E0000010F0000010F0000010F000002078000020780000207800
+00403C0000403C0000C03E0000801E0000801E0001FFFF0001000F0001000F0002000780
+0200078002000780040003C0040003C00C0003C01E0003E0FF801FFE1F207F9F22>65
+D<FFFFE0000F0078000F001E000F001E000F000F000F000F800F000F800F000F800F000F
+800F000F800F000F000F001F000F001E000F007C000FFFF0000F007C000F001F000F000F
+800F0007C00F0003C00F0003E00F0003E00F0003E00F0003E00F0003E00F0003C00F0007
+C00F0007800F000F000F003E00FFFFF0001B1F7E9E20>I<000FE01000381C3000E00270
+03C00170078000F00F0000701E0000701E0000303C0000303C0000107C00001078000010
+F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000
+780000007C0000103C0000103C0000101E0000201E0000200F0000200780004003C00080
+00E0030000380C00000FF0001C217E9F21>I<FFFFF80007801E0007800780078003C007
+8001E0078000F00780007007800078078000780780003C0780003C0780003C0780003E07
+80003E0780003E0780003E0780003E0780003E0780003E0780003E0780003C0780003C07
+80007C0780007807800078078000F0078001E0078003C00780078007801E00FFFFF8001F
+1F7F9E23>I<FFFFFF800F000F800F0003800F0001800F0000800F0000C00F0000400F00
+00400F0000400F0040400F0040000F0040000F00C0000F01C0000FFFC0000F01C0000F00
+C0000F0040000F0040000F0040000F0000200F0000200F0000200F0000400F0000400F00
+00400F0000C00F0001C00F0003800F000F80FFFFFF801B1F7E9E1F>I<FFFFFF80078007
+80078001800780018007800080078000C007800040078000400780004007800040078020
+000780200007802000078060000780E00007FFE0000780E0000780600007802000078020
+000780200007800000078000000780000007800000078000000780000007800000078000
+0007C00000FFFE00001A1F7F9E1E>I<000FE01000381C3000E0027003C00170078000F0
+0F0000701E0000701E0000303C0000303C0000107C00001078000010F8000000F8000000
+F8000000F8000000F8000000F8000000F8000000F8003FFEF80001F0780000F07C0000F0
+3C0000F03C0000F01E0000F01E0000F00F0000F0078000F003C0017000E0023000380C10
+000FF0001F217E9F24>I<FFF07FF80F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800FFFFF800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F000780FFF07FF81D1F7E9E22>I<FFF0
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F00FFF00C1F7E9E10>I<FFF8000F80
+000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00000F00020F00020F00020F00020F00060F00
+040F00040F000C0F001C0F007CFFFFFC171F7E9E1C>76 D<FF800007FE07800007C00780
+0007C005C0000BC005C0000BC004E00013C004E00013C004E00013C004700023C0047000
+23C004380043C004380043C004380043C0041C0083C0041C0083C0040E0103C0040E0103
+C0040E0103C004070203C004070203C004070203C004038403C004038403C00401C803C0
+0401C803C00401C803C00400F003C00400F003C004006003C01F006003C0FFE0607FFE27
+1F7F9E2A>I<FF000FF80F8003E00F8000800BC0008009E0008009E0008008F000800878
+008008780080083C0080081E0080081E0080080F008008078080080780800803C0800801
+E0800801E0800800F080080078800800788008003C8008001E8008001E8008000F800800
+07800800078008000380080001803E000180FF8000801D1F7E9E22>I<001FE000007038
+0001C00E0003800700070003800F0003C01E0001E03C0000F03C0000F07C0000F87C0000
+F878000078F800007CF800007CF800007CF800007CF800007CF800007CF800007CF80000
+7CF800007C780000787C0000F87C0000F83C0000F03E0001F01E0001E00F0003C0070003
+800380070001E01E0000703800001FE0001E217E9F23>I<FFFFE0000F007C000F001E00
+0F000F000F0007800F0007800F0007C00F0007C00F0007C00F0007C00F0007800F000780
+0F000F000F001E000F007C000FFFE0000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+FFF000001A1F7E9E1F>I<001FE0000070380001C00E0003800700070003800F0003C01E
+0001E03E0001F03C0000F07C0000F87C0000F878000078F800007CF800007CF800007CF8
+00007CF800007CF800007CF800007CF800007CF800007C780000787C0000F87C0000F83C
+0000F03E0781F01E0841E00F1023C0071023800390170001D01E0000783804001FF80400
+001C0400000C0C00000E1C00000FF800000FF8000007F8000007F0000001E01E297E9F23
+>I<FFFF80000F00F0000F003C000F001E000F000F000F000F000F000F800F000F800F00
+0F800F000F800F000F000F000F000F001E000F003C000F00F0000FFF80000F01C0000F00
+70000F0070000F0038000F003C000F003C000F003C000F003E000F003E000F003E000F00
+3E040F003F040F001F040F000F08FFF00788000001F01E207E9E21>I<03F0400C0CC018
+03C03001C06000C06000C0E000C0E00040E00040E00040F00000F800007C00007F80003F
+F8001FFF0007FF8000FFC0001FE00003E00001E00000F000007080007080007080007080
+0070C00060C000E0E000C0F80180C6030081FC0014217E9F19>I<7FFFFFE0780F01E060
+0F0060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+1F800003FFFC001C1F7E9E21>I<FFF00FF80F0003E00F0000800F0000800F0000800F00
+00800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F00
+00800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F00
+00800700010007800100038001000380020001C0040000E0080000383000000FC0001D20
+7E9E22>I<FFF003FE1F8000F80F0000600F00002007800040078000400780004003C000
+8003C0008003E0018001E0010001E0010000F0020000F0020000F8020000780400007804
+00003C0800003C0800003C0800001E1000001E1000001F1000000F2000000F20000007C0
+000007C0000007C000000380000003800000038000000100001F207F9E22>I<FFF07FF8
+1FF01F000FC007C00F00078001800F00078001000F0007C001000F8007C00300078007C0
+0200078009E0020007C009E0020003C009E0040003C019F0040003C010F0040001E010F0
+080001E010F0080001E02078080000F02078100000F02078100000F0403C10000078403C
+20000078403C20000078801E2000007C801E6000003C801E4000003D000F4000003F000F
+4000001F000F8000001F000F8000001E00078000000E00070000000E00070000000C0003
+00000004000200002C207F9E2F>I<FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FFFF082D7CA10D>91
+D<080410082010201040204020804080408040B85CFC7EFC7E7C3E381C0F0E7A9F17>I<
+FFFF03030303030303030303030303030303030303030303030303030303030303030303
+03030303030303FFFF082D80A10D>I<081020204040808080B8FCFC7C38060E7D9F0D>
+96 D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00
+380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>I<1C00
+00FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C
+001D87001E01801E00C01C00E01C00701C00701C00781C00781C00781C00781C00781C00
+781C00701C00F01C00E01E00C01A0180198700107C0015207E9F19>I<01FC000706001C
+0F00380F00380600780000700000F00000F00000F00000F00000F00000F0000070000078
+00003800803800801C010007060001F80011147F9314>I<0001C0000FC00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C001F1C0070DC00C03C01801C0
+3801C07801C07001C0F001C0F001C0F001C0F001C0F001C0F001C07001C07001C03801C0
+1803C00C03C0070DC001F1F815207F9F19>I<03F0000E1C001C0E003807003807007007
+00700380F00380F00380FFFF80F00000F00000F000007000007000003800803800801C01
+0007060001F80011147F9314>I<007C01C6030F070F0E060E000E000E000E000E000E00
+0E00FFF00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E007FE01020809F0E>I<0000E003E3300E3C301C1C30380E00780F00780F00780F
+00780F00780F00380E001C1C001E380033E0002000002000003000003000003FFE001FFF
+801FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003FC00141F
+7F9417>I<1C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C7C001C86001D03001E03801E03801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF014207E9F19>I<
+38007C007C007C0038000000000000000000000000001C00FC001C001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C00FF80091F7F9E0C>I<00E001
+F001F001F000E0000000000000000000000000007007F000F00070007000700070007000
+700070007000700070007000700070007000700070007000700070007000706070F060F0
+C061803F000C28829E0E>I<1C0000FC00001C00001C00001C00001C00001C00001C0000
+1C00001C00001C00001C00001C1FE01C07801C06001C04001C08001C10001C20001C6000
+1CE0001DF0001E70001C38001C3C001C1C001C0E001C0F001C07001C07801C07C0FF9FF0
+14207E9F18>I<1C00FC001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF8009
+207F9F0C>I<1C3E03E000FCC30C30001D039038001E01E01C001E01E01C001C01C01C00
+1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C
+01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF802114
+7E9326>I<1C7C00FC86001D03001E03801E03801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF014147E9319>I<
+01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0
+F000F07000E07000E03801C03801C01C0380070E0001F80014147F9317>I<1C7C00FD87
+001E01801E01C01C00E01C00F01C00701C00781C00781C00781C00781C00781C00781C00
+701C00F01C00E01E01C01E03801D87001C7C001C00001C00001C00001C00001C00001C00
+001C00001C0000FF8000151D7E9319>I<01F040070CC00E02C01C03C03801C07801C070
+01C0F001C0F001C0F001C0F001C0F001C0F001C07001C07801C03801C01C03C00C05C007
+09C001F1C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8151D7F93
+18>I<1CF0FD181E3C1E3C1E181C001C001C001C001C001C001C001C001C001C001C001C
+001C001C00FFC00E147E9312>I<0FC830386018C008C008C008E0007C003FE01FF007F8
+003C800E8006C006C006C004E00CD81887E00F147F9312>I<020002000200060006000E
+000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E
+040E040708030801F00E1C7F9B12>I<1C0380FC1F801C03801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C0780061B
+8003E3F014147E9319>I<FF83F83E00E01C00C00E00800E00800E008007010007010007
+830003820003820001C40001C40001E40000E80000E80000700000700000700000200015
+147F9318>I<FF9FE1FC3C0780701C0300601C0380200E0380400E0380400E03C0400704
+C0800704E0800704E08003886100038871000388710001D0320001D03A0001D03E0000E0
+1C0000E01C0000601800004008001E147F9321>I<FF87F81E03C00E01800E0300070200
+03840001C80001D80000F00000700000780000F800009C00010E00020E00060700040380
+0C03C03C03E0FE07FC16147F9318>I<FF83F83E00E01C00C00E00800E00800E00800701
+0007010007830003820003820001C40001C40001E40000E80000E8000070000070000070
+00002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318
+>I<7FFF700E600E401C40384078407000E001E001C00380078007010E011E011C033802
+7006700EFFFE10147F9314>I E /Fp 13 122 df<0000001FFC0000C000000003FFFFC0
+01C00000001FFFFFF003C00000007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F
+9FC000000FFE000007FFC000003FF8000003FFC000007FF0000000FFC00000FFE0000000
+7FC00001FFC00000007FC00001FF800000003FC00003FF000000001FC00007FE00000000
+1FC0000FFE000000000FC0000FFC000000000FC0001FFC0000000007C0001FFC00000000
+07C0003FF80000000007C0003FF80000000003C0003FF80000000003C0007FF800000000
+03C0007FF80000000003C0007FF0000000000000007FF000000000000000FFF000000000
+000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000000000
+000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000000000
+000000FFF000000000000000FFF000001FFFFFFF807FF000001FFFFFFF807FF000001FFF
+FFFF807FF800001FFFFFFF807FF800000001FFC0003FF800000001FFC0003FF800000001
+FFC0003FF800000001FFC0001FFC00000001FFC0001FFC00000001FFC0000FFE00000001
+FFC0000FFE00000001FFC00007FF00000001FFC00003FF00000001FFC00001FF80000001
+FFC00001FFC0000001FFC00000FFE0000001FFC000007FF0000003FFC000003FFC000003
+FFC000000FFF000007FFC0000007FFC0001FBFC0000001FFFC00FF1FC00000007FFFFFFE
+0FC00000001FFFFFF803C000000003FFFFE000C0000000001FFE00000000413D7BBB4C>
+71 D<FFFFFFF803FFFFFFE0FFFFFFF803FFFFFFE0FFFFFFF803FFFFFFE0FFFFFFF803FF
+FFFFE0007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FFFFFFFFFFFC000007FFFFFFFFF
+FFC000007FFFFFFFFFFFC000007FFFFFFFFFFFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001
+FFC000007FF0000001FFC000007FF0000001FFC000007FF0000001FFC000FFFFFFF803FF
+FFFFE0FFFFFFF803FFFFFFE0FFFFFFF803FFFFFFE0FFFFFFF803FFFFFFE0433B7CBA4C>
+I<FFFFFFFE000000FFFFFFFE000000FFFFFFFE000000FFFFFFFE000000007FF000000000
+007FF000000000007FF000000000007FF000000000007FF000000000007FF00000000000
+7FF000000000007FF000000000007FF000000000007FF000000000007FF000000000007F
+F000000000007FF000000000007FF000000000007FF000000000007FF000000000007FF0
+00000000007FF000000000007FF000000000007FF000000000007FF000000000007FF000
+000000007FF000000000007FF000000000007FF000000000007FF000000000007FF00000
+0000007FF000000000007FF000000000007FF000000000007FF000000000007FF0000003
+C0007FF0000003C0007FF0000003C0007FF0000003C0007FF0000003C0007FF0000007C0
+007FF000000780007FF000000780007FF000000780007FF000000F80007FF000000F8000
+7FF000000F80007FF000001F80007FF000001F80007FF000003F80007FF000007F80007F
+F00000FF80007FF00001FF80007FF00007FF00007FF0003FFF00FFFFFFFFFFFF00FFFFFF
+FFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00323B7DBA3A>76 D<FFFFF0000007FFFFE0FF
+FFF8000007FFFFE0FFFFFC000007FFFFE0FFFFFE000007FFFFE0007FFE00000007E00000
+7FFF00000003C000007FFF80000003C000007BFFC0000003C000007BFFE0000003C00000
+79FFE0000003C0000078FFF0000003C00000787FF8000003C00000783FFC000003C00000
+783FFE000003C00000781FFE000003C00000780FFF000003C000007807FF800003C00000
+7803FFC00003C000007803FFE00003C000007801FFE00003C000007800FFF00003C00000
+78007FF80003C0000078003FFC0003C0000078003FFE0003C0000078001FFF0003C00000
+78000FFF0003C00000780007FF8003C00000780003FFC003C00000780003FFE003C00000
+780001FFF003C00000780000FFF003C000007800007FF803C000007800003FFC03C00000
+7800003FFE03C000007800001FFF03C000007800000FFF03C0000078000007FF83C00000
+78000003FFC3C0000078000003FFE3C0000078000001FFF3C0000078000000FFF3C00000
+780000007FFBC00000780000003FFFC00000780000003FFFC00000780000001FFFC00000
+780000000FFFC000007800000007FFC000007800000003FFC000007800000003FFC00000
+7800000001FFC000007800000000FFC0000078000000007FC0000078000000003FC00000
+78000000003FC00000FC000000001FC000FFFFFC0000000FC000FFFFFC00000007C000FF
+FFFC00000003C000FFFFFC00000003C000433B7CBA4C>78 D<FFFFFFF80007FFFFE0FFFF
+FFF80007FFFFE0FFFFFFF80007FFFFE0FFFFFFF80007FFFFE0007FF000000007E000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000007FF000000003C000007F
+F000000003C000007FF000000003C000007FF000000003C000003FF0000000078000003F
+F0000000078000003FF8000000078000001FF80000000F0000001FF80000000F0000000F
+FC0000001E00000007FC0000003E00000007FE0000007C00000003FF000000F800000001
+FF800001F8000000007FE0000FE0000000003FFC007FC0000000000FFFFFFF8000000000
+03FFFFFE0000000000007FFFF000000000000007FF80000000433C7DBA4A>85
+D<003FFE00000001FFFFE0000007FFFFF800000FE007FC00000FF001FE00001FF800FF00
+001FF8007F80001FF8007FC0001FF8003FC0000FF0003FE00007E0003FE00003C0003FE0
+000000003FE0000000003FE0000000003FE0000000003FE0000000FFFFE000001FFFFFE0
+00007FF83FE00003FF803FE00007FC003FE0000FF0003FE0001FE0003FE0003FE0003FE0
+007FC0003FE0007FC0003FE000FF80003FE000FF80003FE000FF80003FE000FF80003FE0
+00FF80007FE0007FC0007FE0007FC000DFE0003FE0039FF0001FF80F0FFFE007FFFE0FFF
+E001FFFC07FFE0003FE000FFE02B267DA52F>97 D<00FE00000000FFFE00000000FFFE00
+000000FFFE00000000FFFE0000000007FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE01FF000003FE1FFFF00003FE7FFFFC0003FEFC03FE0003FFF0
+00FF0003FFC0003F8003FF00001FC003FE00001FE003FE00000FF003FE00000FF803FE00
+000FF803FE000007FC03FE000007FC03FE000007FC03FE000007FE03FE000007FE03FE00
+0007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE00
+0007FE03FE000007FC03FE000007FC03FE000007FC03FE00000FFC03FE00000FF803FE00
+000FF003FE00001FF003FF00001FE003FF80003FC003FFC0007F8003F9E000FF0003F0FC
+07FE0003F07FFFF80003E01FFFE00003C003FE00002F3C7DBB36>I<01E00007F8000FFC
+000FFC001FFE001FFE001FFE001FFE000FFC000FFC0007F80001E0000000000000000000
+0000000000000000000000000000000000000000000000000000FE007FFE007FFE007FFE
+007FFE0007FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE00FFFFF0FFFFF0FFFFF0FFFFF0143D7DBC1A
+>105 D<0001FFC00000000FFFF80000007FFFFF000000FF80FF800003FE003FE00007F8
+000FF0000FF00007F8000FF00007F8001FE00003FC003FE00003FE003FE00003FE007FC0
+0001FF007FC00001FF007FC00001FF007FC00001FF00FFC00001FF80FFC00001FF80FFC0
+0001FF80FFC00001FF80FFC00001FF80FFC00001FF80FFC00001FF80FFC00001FF80FFC0
+0001FF807FC00001FF007FC00001FF007FC00001FF003FE00003FE003FE00003FE001FE0
+0003FC001FF00007FC000FF00007F80007F8000FF00003FE003FE00000FF80FF8000007F
+FFFF0000000FFFF800000001FFC0000029267DA530>111 D<01FC03F000FFFC0FFC00FF
+FC1FFF00FFFC3C3F80FFFC707F8007FCE0FFC003FCC0FFC003FD80FFC003FD80FFC003FF
+807F8003FF003F0003FF001E0003FF00000003FE00000003FE00000003FE00000003FE00
+000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE0000
+0003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000000
+03FE00000003FE00000003FE000000FFFFFC0000FFFFFC0000FFFFFC0000FFFFFC000022
+267DA528>114 D<003FF03803FFFE7807FFFFF81FC00FF83F0003F83E0000F87C0000F8
+7C000078FC000078FC000078FE000078FF000000FFC00000FFFC00007FFFF0003FFFFE00
+3FFFFF801FFFFFC00FFFFFE003FFFFF000FFFFF8001FFFFC00007FFC000007FE700001FE
+F00000FEF000007EF800007EF800007EFC00007EFC00007CFE0000FCFF0000F8FF8001F0
+FFF00FE0F9FFFFC0F07FFF00C01FF8001F267DA526>I<000F0000000F0000000F000000
+0F0000000F0000001F0000001F0000001F0000001F0000003F0000003F0000007F000000
+7F000000FF000001FF000003FF000007FF00001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001
+FF000001FF000001FF000001FF000001FF000001FF000001FF000001FF000001FF000001
+FF000001FF000001FF000001FF000001FF000001FF000001FF000001FF000001FF000001
+FF000001FF003C01FF003C01FF003C01FF003C01FF003C01FF003C01FF003C01FF003C00
+FF007800FF8078007F80F0003FC1E0001FFFC0000FFF800001FE001E377EB626>I<FFFF
+F000FFFCFFFFF000FFFCFFFFF000FFFCFFFFF000FFFC03FE00001F8003FF00001F0001FF
+00001E0001FF80001E0000FF80003C0000FF80003C0000FFC0007C00007FC0007800007F
+E000F800003FE000F000003FF001F000001FF001E000001FF803E000000FF803C000000F
+F803C000000FFC07C0000007FC0780000007FE0F80000003FE0F00000003FF1F00000001
+FF1E00000001FFBE00000000FFBC00000000FFFC000000007FF8000000007FF800000000
+7FF8000000003FF0000000003FF0000000001FE0000000001FE0000000000FC000000000
+0FC0000000000780000000000780000000000F80000000000F00000000001F0000000000
+1E00000008003E0000007F003C0000007F007C000000FF8078000000FF80F8000000FF81
+F0000000FF83E00000007F07C00000007C1F800000003FFF000000001FFC0000000007F0
+000000002E377EA533>121 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 75 693 a Fp(GNU)33 b(History)f(Library)p 75 743
+1800 17 v 960 791 a Fo(Edition)16 b(4.0,)e(for)h Fn(History)f(Library)g
+Fo(V)l(ersion)i(4.0.)1572 845 y(Decem)o(b)q(er)g(1998)75
+2467 y Fm(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23
+b(Soft)n(w)n(are)f(F)-6 b(oundation)75 2534 y(Chet)22
+b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n
+(ersit)n(y)p 75 2570 1800 9 v eop
+%%Page: 2 2
+2 1 bop 75 250 a Fo(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f
+(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o
+(vides)h(a)75 305 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g
+(recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75
+373 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
+(oundation)75 427 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)75
+482 y(Cam)o(bridge,)h(MA)g(02139)f(USA)75 549 y(P)o(ermission)j(is)f
+(gran)o(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i
+(of)f(this)h(man)o(ual)f(pro)o(vided)h(the)75 604 y(cop)o(yrigh)o(t)e
+(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h
+(on)f(all)h(copies.)75 671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
+(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h
+(man)o(ual)g(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h
+(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g
+(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g
+(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
+848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
+(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
+g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
+(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
+(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
+(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are)
+d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289
+2661 y Fl(\015)i Fo(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+(oundation,)h(Inc.)p eop
+%%Page: 1 3
+1 2 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
+(ely)1007 b(1)75 183 y Fk(1)41 b(Using)26 b(History)h(In)n(teractiv)n
+(ely)137 317 y Fo(This)16 b(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h
+(use)g(the)g(GNU)g(History)g(Library)h(in)o(teractiv)o(ely)l(,)g(from)e
+(a)h(user's)75 372 y(standp)q(oin)o(t.)35 b(It)20 b(should)g(b)q(e)h
+(considered)h(a)d(user's)h(guide.)35 b(F)l(or)19 b(information)h(on)g
+(using)h(the)f(GNU)75 427 y(History)d(Library)h(in)h(y)o(our)e(o)o(wn)g
+(programs,)f(see)i(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],)
+75 482 y(page)e(3.)75 625 y Fm(1.1)33 b(History)22 b(Expansion)137
+727 y Fo(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h
+(expansion)h(feature)e(that)h(is)g(similar)h(to)e(the)h(history)75
+782 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fn(csh)p Fo(.)18
+b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e(used)h(to)g
+(manipulate)h(the)f(history)75 836 y(information.)137
+909 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i
+(history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75
+964 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o
+(ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75
+1019 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f
+(quic)o(kly)l(.)137 1092 y(History)j(expansion)i(tak)o(es)d(place)i(in)
+h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i
+(whic)o(h)f(line)h(from)75 1147 y(the)h(history)f(list)i(should)g(b)q
+(e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f
+(select)i(p)q(ortions)e(of)75 1202 y(that)15 b(line)i(for)d(inclusion)k
+(in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e
+(the)g(history)g(is)h(called)h(the)75 1256 y Fj(ev)o(en)o(t)p
+Fo(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted)
+h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fo(.)i(V)l(arious)c
+Fj(mo)q(di\014ers)75 1311 y Fo(are)i(a)o(v)m(ailable)i(to)e(manipulate)
+i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o
+(to)h(w)o(ords)e(in)j(the)e(same)75 1366 y(fashion)c(that)e(Bash)i(do)q
+(es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes)
+h(are)f(considered)h(one)g(w)o(ord.)75 1421 y(History)18
+b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g
+(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1475
+y(whic)o(h)d(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)75
+1599 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137
+1701 y Fo(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f
+(a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75
+1789 y Fn(!)216 b Fo(Start)16 b(a)g(history)h(substitution,)g(except)h
+(when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315
+1844 y(the)e(line,)i(`)p Fn(=)p Fo(')d(or)h(`)p Fn(\()p
+Fo('.)75 1929 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i
+Fj(n)p Fo(.)75 2015 y Fn(!-)p Fj(n)167 b Fo(Refer)16
+b(to)e(the)i(command)f Fj(n)g Fo(lines)i(bac)o(k.)75
+2100 y Fn(!!)192 b Fo(Refer)16 b(to)e(the)i(previous)f(command.)20
+b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fn(!-1)p Fo('.)75
+2186 y Fn(!)p Fj(string)102 b Fo(Refer)16 b(to)e(the)i(most)e(recen)o
+(t)h(command)g(starting)g(with)g Fj(string)p Fo(.)75
+2271 y Fn(!?)p Fj(string)t Fn([?])315 2326 y Fo(Refer)i(to)f(the)h
+(most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p
+Fo(.)25 b(The)17 b(trailing)g(`)p Fn(?)p Fo(')f(ma)o(y)g(b)q(e)315
+2381 y(omitted)f(if)h(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f
+(immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fn(^)p
+Fj(string1)t Fn(^)p Fj(string2)t Fn(^)315 2521 y Fo(Quic)o(k)i
+(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h
+Fj(string1)i Fo(with)e Fj(string2)p Fo(.)315 2576 y(Equiv)m(alen)o(t)g
+(to)d Fn(!!:s/)p Fj(string1)t Fn(/)p Fj(string2)t Fn(/)p
+Fo(.)75 2661 y Fn(!#)192 b Fo(The)15 b(en)o(tire)h(command)f(line)i(t)o
+(yp)q(ed)f(so)e(far.)p eop
+%%Page: 2 4
+2 3 bop 75 -58 a Fo(2)1347 b(GNU)15 b(History)g(Library)75
+183 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279
+y Fo(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o
+(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fn(:)p
+Fo(')e(separates)h(the)75 333 y(ev)o(en)o(t)j(sp)q(eci\014cation)h
+(from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h
+(omitted)g(if)g(the)g(w)o(ord)f(designator)75 388 y(b)q(egins)f(with)g
+(a)e(`)p Fn(^)p Fo(',)h(`)p Fn($)p Fo(',)f(`)p Fn(*)p
+Fo(',)g(`)p Fn(-)p Fo(',)g(or)h(`)p Fn(\045)p Fo('.)24
+b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i
+(of)e(the)g(line,)75 443 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h
+(denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i
+(in)o(to)f(the)g(curren)o(t)f(line)75 498 y(separated)c(b)o(y)g(single)
+i(spaces.)75 575 y Fn(0)e(\(zero\))57 b Fo(The)15 b Fn(0)p
+Fo(th)g(w)o(ord.)20 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g
+(the)f(command)g(w)o(ord.)75 653 y Fj(n)215 b Fo(The)15
+b Fj(n)p Fo(th)h(w)o(ord.)75 731 y Fn(^)216 b Fo(The)15
+b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)75
+808 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)75 886
+y Fn(\045)216 b Fo(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g(most)g
+(recen)o(t)g(`)p Fn(?)p Fj(string)t Fn(?)p Fo(')f(searc)o(h.)75
+964 y Fj(x)p Fn(-)p Fj(y)168 b Fo(A)15 b(range)g(of)g(w)o(ords;)f(`)p
+Fn(-)p Fj(y)t Fo(')g(abbreviates)i(`)p Fn(0-)p Fj(y)t
+Fo('.)75 1042 y Fn(*)216 b Fo(All)15 b(of)f(the)f(w)o(ords,)g(except)i
+(the)f Fn(0)p Fo(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p
+Fn(1-$)p Fo('.)18 b(It)c(is)g(not)g(an)g(error)315 1096
+y(to)g(use)h(`)p Fn(*)p Fo(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f
+(in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g
+(in)315 1151 y(that)f(case.)75 1229 y Fj(x)s Fn(*)189
+b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')75 1307
+y Fj(x)p Fn(-)192 b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p
+Fo(')e(lik)o(e)i(`)p Fj(x)s Fn(*)p Fo(',)e(but)i(omits)f(the)g(last)g
+(w)o(ord.)137 1384 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h
+(without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h
+(command)75 1439 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75
+1548 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 1643 y Fo(After)10
+b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g
+(sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75
+1698 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p
+Fn(:)p Fo('.)75 1776 y Fn(h)216 b Fo(Remo)o(v)o(e)15
+b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the)
+f(head.)75 1854 y Fn(t)216 b Fo(Remo)o(v)o(e)15 b(all)h(leading)h
+(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75
+1931 y Fn(r)216 b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g
+(the)g(form)g(`)p Fn(.)p Fj(su\016x)s Fo(',)f(lea)o(ving)i(the)f
+(basename.)75 2009 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f
+(trailing)h(su\016x.)75 2087 y Fn(p)216 b Fo(Prin)o(t)15
+b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)75
+2164 y Fn(s/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)315 2219
+y Fo(Substitute)h Fj(new)j Fo(for)c(the)h(\014rst)e(o)q(ccurrence)j(of)
+e Fj(old)i Fo(in)f(the)g(ev)o(en)o(t)f(line.)25 b(An)o(y)16
+b(delimiter)315 2274 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g(of)f(`)p
+Fn(/)p Fo('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h(quoted)f(in)i
+Fj(old)g Fo(and)f Fj(new)k Fo(with)12 b(a)315 2329 y(single)j(bac)o
+(kslash.)20 b(If)15 b(`)p Fn(&)p Fo(')e(app)q(ears)h(in)h
+Fj(new)p Fo(,)f(it)g(is)h(replaced)g(b)o(y)f Fj(old)p
+Fo(.)20 b(A)14 b(single)i(bac)o(kslash)315 2383 y(will)j(quote)e(the)h
+(`)p Fn(&)p Fo('.)25 b(The)17 b(\014nal)i(delimiter)g(is)f(optional)g
+(if)f(it)h(is)g(the)f(last)g(c)o(haracter)g(on)315 2438
+y(the)e(input)h(line.)75 2516 y Fn(&)216 b Fo(Rep)q(eat)16
+b(the)f(previous)h(substitution.)75 2594 y Fn(g)216 b
+Fo(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o(v)o(er)e(the)g
+(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20 b(in)g(conjunction)315
+2648 y(with)c(`)p Fn(s)p Fo(',)d(as)i(in)h Fn(gs/)p Fj(old)r
+Fn(/)p Fj(new)t Fn(/)p Fo(,)f(or)g(with)g(`)p Fn(&)p
+Fo('.)p eop
+%%Page: 3 5
+3 4 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(3)75 183 y Fk(2)41 b(Programming)28 b(with)e(GNU)i
+(History)137 323 y Fo(This)16 b(c)o(hapter)e(describ)q(es)j(ho)o(w)d
+(to)g(in)o(terface)h(programs)e(that)h(y)o(ou)h(write)g(with)g(the)g
+(GNU)f(History)75 378 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g
+(considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15
+b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75
+433 y(of)e(GNU)g(History)l(,)g(see)g(Chapter)g(1)g([Using)g(History)g
+(In)o(teractiv)o(ely],)h(page)f(1.)75 581 y Fm(2.1)33
+b(In)n(tro)r(duction)24 b(to)e(History)137 685 y Fo(Man)o(y)c(programs)
+g(read)h(input)g(from)f(the)h(user)g(a)f(line)j(at)d(a)g(time.)31
+b(The)19 b(GNU)g(History)f(library)75 740 y(is)k(able)g(to)e(k)o(eep)i
+(trac)o(k)e(of)h(those)g(lines,)j(asso)q(ciate)d(arbitrary)g(data)f
+(with)i(eac)o(h)f(line,)j(and)e(utilize)75 795 y(information)15
+b(from)g(previous)h(lines)h(in)f(comp)q(osing)f(new)h(ones.)137
+870 y(The)e(programmer)f(using)h(the)g(History)g(library)g(has)g(a)o(v)
+m(ailable)h(functions)g(for)e(remem)o(b)q(ering)h(lines)75
+924 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g(arbitrary)f(data)f
+(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d(the)i(list,)h(searc)o
+(hing)75 979 y(through)17 b(the)h(list)g(for)f(a)h(line)h(con)o
+(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o
+(y)e(line)i(in)75 1034 y(the)c(list)i(directly)l(.)22
+b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fo(function)h(is)e
+(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75
+1089 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g
+(programs.)137 1164 y(The)f(user)h(using)f(programs)f(written)h(with)g
+(the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h
+(consisten)o(t)75 1219 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f
+(w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g
+(previous)75 1273 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f
+(commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d
+(are)75 1328 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o
+(vided)g(b)o(y)g Fn(csh)p Fo(.)137 1403 y(If)f(the)g(programmer)f
+(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f
+(includes)j(some)c(history)75 1458 y(manipulation)j(b)o(y)e(default,)g
+(and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i
+(editing.)75 1606 y Fm(2.2)33 b(History)22 b(Storage)137
+1710 y Fo(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f(of)g(history)i
+(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h(declared)g(as)f(follo)o
+(ws:)195 1782 y Fn(typedef)23 b(struct)g(_hist_entry)f({)243
+1834 y(char)h(*line;)243 1886 y(char)g(*data;)195 1938
+y(})h(HIST_ENTRY;)137 2013 y Fo(The)16 b(history)f(list)h(itself)g
+(migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2085
+y Fn(HIST_ENTRY)22 b(**the_history_list;)137 2160 y Fo(The)16
+b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g(in)o(to)f
+(a)g(single)i(structure:)195 2232 y Fn(/*)24 b(A)f(structure)g(used)g
+(to)h(pass)f(the)h(current)f(state)g(of)g(the)h(history)f(stuff)g
+(around.)g(*/)p 2033 2242 21 42 v 195 2284 a(typedef)g(struct)g
+(_hist_state)f({)243 2336 y(HIST_ENTRY)g(**entries;)214
+b(/*)23 b(Pointer)g(to)h(the)f(entries)g(themselves.)f(*/)243
+2387 y(int)h(offset;)453 b(/*)23 b(The)h(location)e(pointer)h(within)g
+(this)h(array.)f(*/)p 2033 2398 V 243 2439 a(int)g(length;)453
+b(/*)23 b(Number)g(of)h(elements)f(within)g(this)g(array.)g(*/)p
+1985 2449 V 243 2491 a(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f
+(allocated)g(to)g(this)h(array.)f(*/)p 2057 2501 V 243
+2543 a(int)g(flags;)195 2595 y(})h(HISTORY_STATE;)137
+2670 y Fo(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j
+Fn(HS_STIFLED)p Fo(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)p
+eop
+%%Page: 4 6
+4 5 bop 75 -58 a Fo(4)1347 b(GNU)15 b(History)g(Library)75
+183 y Fm(2.3)33 b(History)22 b(F)-6 b(unctions)137 278
+y Fo(This)21 b(section)g(describ)q(es)h(the)f(calling)h(sequence)g(for)
+e(the)g(v)m(arious)h(functions)g(presen)o(t)g(in)g(GNU)75
+333 y(History)l(.)75 441 y Fi(2.3.1)30 b(Initializing)20
+b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fo(This)e(section)g
+(describ)q(es)h(functions)f(used)g(to)e(initialize)21
+b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75
+591 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g
+(functions)h(in)g(y)o(our)f(program.)1650 679 y(F)l(unction)-1749
+b Fh(void)20 b Fg(using)p 333 679 18 3 v 20 w(history)j
+Ff(\(\))195 734 y Fo(Begin)18 b(a)f(session)h(in)g(whic)o(h)g(the)g
+(history)f(functions)h(migh)o(t)f(b)q(e)h(used.)27 b(This)18
+b(initializes)195 788 y(the)d(in)o(teractiv)o(e)h(v)m(ariables.)1650
+877 y(F)l(unction)-1749 b Fh(HISTORY_STATE)21 b(*)e Fg(history)p
+657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877
+V 21 w(state)j Ff(\(\))195 931 y Fo(Return)16 b(a)f(structure)g
+(describing)i(the)e(curren)o(t)g(state)f(of)h(the)g(input)i(history)l
+(.)1650 1019 y(F)l(unction)-1749 b Fh(void)20 b Fg(history)p
+377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019
+V 21 w(state)j Ff(\()p Fn(HISTORY_STATE)13 b(*state)p
+Ff(\))195 1074 y Fo(Set)i(the)h(state)e(of)h(the)g(history)g(list)h
+(according)g(to)e Fj(state)p Fo(.)75 1182 y Fi(2.3.2)30
+b(History)20 b(List)h(Managemen)n(t)137 1277 y Fo(These)11
+b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f
+(list,)i(or)f(set)f(parameters)g(managing)75 1332 y(the)15
+b(list)h(itself.)1650 1420 y(F)l(unction)-1749 b Fh(void)20
+b Fg(add)p 294 1420 V 20 w(history)j Ff(\()p Fn(char)14
+b(*string)p Ff(\))195 1475 y Fo(Place)i Fj(string)j Fo(at)c(the)g(end)i
+(of)d(the)i(history)f(list.)22 b(The)15 b(asso)q(ciated)h(data)f
+(\014eld)h(\(if)g(an)o(y\))e(is)195 1530 y(set)h(to)g
+Fn(NULL)p Fo(.)1650 1618 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
+b(*)e Fg(remo)n(v)n(e)p 584 1618 V 20 w(history)k Ff(\()p
+Fn(int)14 b(which)p Ff(\))195 1673 y Fo(Remo)o(v)o(e)g(history)g(en)o
+(try)f(at)h(o\013set)f Fj(whic)o(h)h Fo(from)g(the)g(history)l(.)19
+b(The)14 b(remo)o(v)o(ed)g(elemen)o(t)g(is)195 1727 y(returned)i(so)e
+(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)h
+(structure.)1650 1816 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
+b(*)e Fg(replace)p 580 1816 V 22 w(history)p 777 1816
+V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)283
+1870 y(*line,)g(char)g(*data)p Ff(\))195 1925 y Fo(Mak)o(e)f(the)h
+(history)f(en)o(try)g(at)g(o\013set)g Fj(whic)o(h)h Fo(ha)o(v)o(e)g
+Fj(line)k Fo(and)13 b Fj(data)p Fo(.)19 b(This)14 b(returns)g(the)f
+(old)195 1980 y(en)o(try)k(so)g(y)o(ou)g(can)g(disp)q(ose)i(of)d(the)i
+(data.)25 b(In)18 b(the)f(case)h(of)f(an)g(in)o(v)m(alid)i
+Fj(whic)o(h)p Fo(,)g(a)e Fn(NULL)195 2035 y Fo(p)q(oin)o(ter)f(is)f
+(returned.)1650 2123 y(F)l(unction)-1749 b Fh(void)20
+b Fg(clear)p 320 2123 V 21 w(history)j Ff(\(\))195 2178
+y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f
+(en)o(tries.)1650 2266 y(F)l(unction)-1749 b Fh(void)20
+b Fg(sti\015e)p 320 2266 V 21 w(history)j Ff(\()p Fn(int)14
+b(max)p Ff(\))195 2321 y Fo(Sti\015e)i(the)f(history)h(list,)f(remem)o
+(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fo(en)o(tries.)1650
+2409 y(F)l(unction)-1749 b Fh(int)20 b Fg(unsti\015e)p
+358 2409 V 21 w(history)i Ff(\(\))195 2463 y Fo(Stop)e(sti\015ing)i
+(the)f(history)l(.)36 b(This)21 b(returns)g(the)f(previous)i(amoun)o(t)
+e(the)g(history)h(w)o(as)195 2518 y(sti\015ed.)g(The)15
+b(v)m(alue)i(is)e(p)q(ositiv)o(e)i(if)e(the)g(history)h(w)o(as)e
+(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.)1650
+2606 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351
+2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Ff(\(\))195
+2661 y Fo(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,)
+g(zero)f(if)g(it)h(is)g(not.)p eop
+%%Page: 5 7
+5 6 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(5)75 183 y Fi(2.3.3)30 b(Information)19
+b(Ab)r(out)i(the)f(History)h(List)137 279 y Fo(These)13
+b(functions)h(return)f(information)g(ab)q(out)f(the)h(en)o(tire)h
+(history)e(list)i(or)e(individual)k(list)e(en)o(tries.)1650
+371 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p
+605 371 18 3 v 21 w(list)24 b Ff(\(\))195 426 y Fo(Return)f(a)g
+Fn(NULL)f Fo(terminated)g(arra)o(y)g(of)g Fn(HIST_ENTRY)f
+Fo(whic)o(h)j(is)f(the)f(curren)o(t)h(input)195 481 y(history)l(.)j
+(Elemen)o(t)18 b(0)e(of)h(this)h(list)g(is)f(the)h(b)q(eginning)h(of)e
+(time.)26 b(If)17 b(there)g(is)h(no)f(history)l(,)195
+535 y(return)e Fn(NULL)p Fo(.)1650 627 y(F)l(unction)-1749
+b Fh(int)20 b Fg(where)p 325 627 V 20 w(history)j Ff(\(\))195
+682 y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history)
+g(elemen)o(t.)1650 773 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21
+b(*)e Fg(curren)n(t)p 587 773 V 21 w(history)k Ff(\(\))195
+828 y Fo(Return)g(the)f(history)g(en)o(try)g(at)f(the)h(curren)o(t)g(p)
+q(osition,)j(as)c(determined)j(b)o(y)e Fn(where_)195
+883 y(history)14 b(\(\))p Fo(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try)
+g(there,)g(return)g(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)1650
+975 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(*)e Fg(history)p
+579 975 V 21 w(get)j Ff(\()p Fn(int)15 b(offset)p Ff(\))195
+1029 y Fo(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i
+Fj(o\013set)p Fo(,)e(starting)g(from)g Fn(history_base)p
+Fo(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g
+(if)g Fj(o\013set)h Fo(is)g(greater)e(than)h(the)h(history)f(length,)h
+(return)f(a)195 1139 y Fn(NULL)f Fo(p)q(oin)o(ter.)1650
+1231 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351
+1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Ff(\(\))195
+1285 y Fo(Return)c(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h
+(primary)h(history)f(en)o(tries)g(are)g(using.)29 b(This)195
+1340 y(function)16 b(returns)f(the)g(sum)h(of)e(the)i(lengths)f(of)g
+(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1452 y
+Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137
+1548 y Fo(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g
+(in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.)
+1650 1640 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p
+351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Ff(\()p
+Fn(int)15 b(pos)p Ff(\))195 1694 y Fo(Set)g(the)h(p)q(osition)g(in)g
+(the)f(history)g(list)h(to)f Fj(p)q(os)p Fo(,)g(an)g(absolute)g(index)i
+(in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749
+b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p 615 1786 V 20
+w(history)k Ff(\(\))195 1841 y Fo(Bac)o(k)17 b(up)h(the)f(curren)o(t)g
+(history)g(o\013set)f(to)h(the)g(previous)h(history)f(en)o(try)l(,)g
+(and)g(return)g(a)195 1896 y(p)q(oin)o(ter)f(to)e(that)h(en)o(try)l(.)k
+(If)d(there)f(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g
+Fn(NULL)f Fo(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749
+b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 1987 V 21 w(history)k
+Ff(\(\))195 2042 y Fo(Mo)o(v)o(e)17 b(the)h(curren)o(t)g(history)f
+(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g
+(and)g(return)195 2097 y(the)d(a)g(p)q(oin)o(ter)h(to)e(that)h(en)o
+(try)l(.)20 b(If)15 b(there)g(is)h(no)f(next)g(en)o(try)l(,)g(return)g
+(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)75 2208 y Fi(2.3.5)30
+b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fo(These)14
+b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i(history)f(list)h
+(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c)i(string.)75
+2359 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o
+(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g(history)f(p)q
+(osition.)75 2414 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i
+Fj(anc)o(hored)p Fo(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc)
+o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 2469 y(history)g(en)o(try)l
+(.)1650 2560 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p
+351 2560 V 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h
+(direction)p Ff(\))195 2615 y Fo(Searc)o(h)g(the)h(history)f(for)f
+Fj(string)p Fo(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g
+(o\013set.)k(If)d Fj(direction)195 2670 y Fn(<)j Fo(0,)g(then)g(the)h
+(searc)o(h)e(is)i(through)e(previous)i(en)o(tries,)g(else)g(through)f
+(subsequen)o(t.)32 b(If)p eop
+%%Page: 6 8
+6 7 bop 75 -58 a Fo(6)1347 b(GNU)15 b(History)g(Library)195
+183 y Fj(string)k Fo(is)d(found,)f(then)h(the)f(curren)o(t)g(history)g
+(index)i(is)f(set)f(to)f(that)h(history)g(en)o(try)l(,)g(and)195
+238 y(the)g(v)m(alue)h(returned)f(is)g(the)g(o\013set)f(in)h(the)g
+(line)h(of)e(the)h(en)o(try)g(where)g Fj(string)j Fo(w)o(as)c(found.)
+195 293 y(Otherwise,)i(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
+(returned.)1650 396 y(F)l(unction)-1749 b Fh(int)20 b
+Fg(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396
+V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g(direction)p
+Ff(\))195 451 y Fo(Searc)o(h)i(the)f(history)g(for)g
+Fj(string)p Fo(,)g(starting)g(at)g(the)g(curren)o(t)h(history)f
+(o\013set.)k(The)d(searc)o(h)195 506 y(is)h(anc)o(hored:)23
+b(matc)o(hing)17 b(lines)h(m)o(ust)e(b)q(egin)i(with)f
+Fj(string)p Fo(.)25 b(If)17 b Fj(direction)h Fn(<)e Fo(0,)h(then)g(the)
+195 560 y(searc)o(h)f(is)g(through)f(previous)i(en)o(tries,)f(else)g
+(through)g(subsequen)o(t.)22 b(If)16 b Fj(string)k Fo(is)c(found,)195
+615 y(then)i(the)g(curren)o(t)g(history)g(index)h(is)g(set)e(to)h(that)
+f(en)o(try)l(,)h(and)g(the)g(return)g(v)m(alue)h(is)g(0.)195
+670 y(Otherwise,)d(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
+(returned.)1650 773 y(F)l(unction)-1749 b Fh(int)20 b
+Fg(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21
+w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g(direction,)g(int)283
+828 y(pos)p Ff(\))195 883 y Fo(Searc)o(h)h(for)g Fj(string)k
+Fo(in)d(the)f(history)g(list,)g(starting)g(at)f Fj(p)q(os)p
+Fo(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937
+y(list.)21 b(If)15 b Fj(direction)h Fo(is)g(negativ)o(e,)f(the)g(searc)
+o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p
+Fo(,)h(otherwise)195 992 y(forw)o(ard.)27 b(Returns)18
+b(the)g(absolute)g(index)h(of)f(the)g(history)f(elemen)o(t)i(where)f
+Fj(string)k Fo(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75
+1170 y Fi(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137
+1272 y Fo(The)16 b(History)g(library)h(can)e(read)h(the)g(history)g
+(from)f(and)h(write)g(it)g(to)f(a)h(\014le.)22 b(This)17
+b(section)f(do)q(cu-)75 1327 y(men)o(ts)f(the)g(functions)h(for)f
+(managing)g(a)g(history)g(\014le.)1650 1430 y(F)l(unction)-1749
+b Fh(int)20 b Fg(read)p 286 1430 V 20 w(history)i Ff(\()p
+Fn(char)15 b(*filename)p Ff(\))195 1485 y Fo(Add)h(the)f(con)o(ten)o
+(ts)f(of)h Fj(\014lename)j Fo(to)d(the)g(history)g(list,)g(a)g(line)h
+(at)f(a)f(time.)21 b(If)15 b Fj(\014lename)j Fo(is)195
+1539 y Fn(NULL)p Fo(,)c(then)i(read)f(from)f(`)p Fn(~/.history)p
+Fo('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650
+1643 y(F)l(unction)-1749 b Fh(int)20 b Fg(read)p 286
+1643 V 20 w(history)p 481 1643 V 20 w(range)i Ff(\()p
+Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))195
+1697 y Fo(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fj(\014lename)p
+Fo(,)i(adding)f(them)g(to)f(the)g(history)h(list.)36
+b(Start)195 1752 y(reading)15 b(at)e(line)j Fj(from)e
+Fo(and)g(end)h(at)e Fj(to)p Fo(.)19 b(If)c Fj(from)e
+Fo(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15
+b Fj(to)195 1807 y Fo(is)i(less)g(than)f Fj(from)p Fo(,)g(then)h(read)f
+(un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17
+b Fj(\014lename)j Fo(is)d Fn(NULL)p Fo(,)f(then)195 1862
+y(read)f(from)g(`)p Fn(~/.history)p Fo('.)i(Returns)f(0)f(if)h
+(successful,)g(or)e Fn(errno)h Fo(if)h(not.)1650 1965
+y(F)l(unction)-1749 b Fh(int)20 b Fg(write)p 304 1965
+V 22 w(history)i Ff(\()p Fn(char)15 b(*filename)p Ff(\))195
+2020 y Fo(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f
+Fj(\014lename)p Fo(,)j(o)o(v)o(erwriting)d Fj(\014lename)k
+Fo(if)d(necessary)l(.)42 b(If)195 2074 y Fj(\014lename)20
+b Fo(is)d Fn(NULL)p Fo(,)f(then)g(write)h(the)f(history)h(list)g(to)f
+(`)p Fn(~/.history)p Fo('.)21 b(V)l(alues)d(returned)195
+2129 y(are)d(as)g(in)h Fn(read_history)d(\(\))p Fo(.)1650
+2232 y(F)l(unction)-1749 b Fh(int)20 b Fg(app)r(end)p
+360 2232 V 19 w(history)j Ff(\()p Fn(int)14 b(nelements,)g(char)h
+(*filename)p Ff(\))195 2287 y Fo(App)q(end)i(the)e(last)g
+Fj(nelemen)o(ts)j Fo(of)d(the)g(history)g(list)h(to)f
+Fj(\014lename)p Fo(.)1650 2390 y(F)l(unction)-1749 b
+Fh(int)20 b Fg(history)p 351 2390 V 20 w(truncate)p 582
+2390 V 21 w(\014le)k Ff(\()p Fn(char)14 b(*filename,)g(int)h(nlines)p
+Ff(\))195 2445 y Fo(T)l(runcate)g(the)h(history)f(\014le)h
+Fj(\014lename)p Fo(,)g(lea)o(ving)g(only)g(the)f(last)g
+Fj(nlines)k Fo(lines.)75 2568 y Fi(2.3.7)30 b(History)20
+b(Expansion)137 2670 y Fo(These)c(functions)g(implemen)o(t)g
+Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)p eop
+%%Page: 7 9
+7 8 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(7)1650 183 y(F)l(unction)-1749 b Fh(int)20
+b Fg(history)p 351 183 18 3 v 20 w(expand)j Ff(\()p Fn(char)14
+b(*string,)g(char)h(**output)p Ff(\))195 238 y Fo(Expand)k
+Fj(string)p Fo(,)g(placing)h(the)e(result)h(in)o(to)g
+Fj(output)p Fo(,)g(a)f(p)q(oin)o(ter)h(to)f(a)g(string)h(\(see)f(Sec-)
+195 293 y(tion)d(1.1)g([History)f(In)o(teraction],)h(page)g(1\).)k
+(Returns:)195 370 y Fn(0)216 b Fo(If)16 b(no)g(expansions)h(to)q(ok)e
+(place)i(\(or,)d(if)j(the)f(only)g(c)o(hange)g(in)h(the)e(text)h(w)o
+(as)435 425 y(the)f(de-slashifying)j(of)c(the)i(history)f(expansion)h
+(c)o(haracter\);)195 502 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g
+(tak)o(e)e(place;)195 580 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an)
+h(error)g(in)h(expansion;)195 657 y Fn(2)216 b Fo(if)16
+b(the)g(returned)g(line)i(should)f(only)f(b)q(e)h(displa)o(y)o(ed,)f
+(but)g(not)g(executed,)g(as)435 712 y(with)g(the)f Fn(:p)g
+Fo(mo)q(di\014er)h(\(see)f(Section)h(1.1.3)e([Mo)q(di\014ers],)g(page)i
+(2\).)195 789 y(If)f(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h
+Fj(output)f Fo(con)o(tains)g(a)g(descriptiv)o(e)i(error)d(mes-)195
+844 y(sage.)1650 932 y(F)l(unction)-1749 b Fh(char)20
+b(*)f Fg(history)p 422 932 V 21 w(arg)p 524 932 V 19
+w(extract)24 b Ff(\()p Fn(int)14 b(first,)h(int)g(last,)f(char)283
+987 y(*string)p Ff(\))195 1042 y Fo(Extract)g(a)g(string)g(segmen)o(t)g
+(consisting)i(of)e(the)g Fj(\014rst)i Fo(through)e Fj(last)h
+Fo(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fj(string)p
+Fo(.)k(Argumen)o(ts)15 b(are)f(brok)o(en)i(up)f(as)g(in)h(Bash.)1650
+1185 y(F)l(unction)-1749 b Fh(char)20 b(*)f Fg(get)p
+324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25
+b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,)f(int)283
+1240 y(qchar)p Ff(\))195 1295 y Fo(Returns)h(the)g(text)f(of)g(the)h
+(history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fj(string)k
+Fn(+)d Fj(*cindex)p Fo(.)20 b Fj(*cindex)f Fo(is)195
+1350 y(mo)q(di\014ed)e(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o
+(t)f(sp)q(eci\014er.)23 b(A)o(t)16 b(function)g(en)o(try)l(,)f
+Fj(cindex)21 b Fo(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o
+(to)e Fj(string)21 b Fo(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q
+(eci\014cation)h(b)q(egins.)26 b Fj(qc)o(har)19 b Fo(is)195
+1459 y(a)h(c)o(haracter)g(that)g(is)h(allo)o(w)o(ed)f(to)g(end)h(the)g
+(ev)o(en)o(t)f(sp)q(eci\014cation)i(in)g(addition)f(to)f(the)195
+1514 y(\\normal")15 b(terminating)g(c)o(haracters.)1650
+1602 y(F)l(unction)-1749 b Fh(char)20 b(**)f Fg(history)p
+448 1602 V 21 w(tok)n(enize)25 b Ff(\()p Fn(char)14 b(*string)p
+Ff(\))195 1657 y Fo(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h
+(out)g(of)f Fj(string)p Fo(,)h(m)o(uc)o(h)g(as)f(the)h(shell)h(migh)o
+(t.)25 b(The)195 1712 y(tok)o(ens)d(are)g(split)i(on)f(white)g(space)g
+(and)f(on)h(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)h(and)f(shell)
+195 1767 y(quoting)15 b(con)o(v)o(en)o(tions)h(are)e(ob)q(ey)o(ed.)75
+1892 y Fm(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987
+y Fo(This)23 b(section)f(describ)q(es)h(the)f(externally)h(visible)h(v)
+m(ariables)f(exp)q(orted)f(b)o(y)g(the)g(GNU)f(History)75
+2042 y(Library)l(.)1661 2130 y(V)l(ariable)-1749 b Fh(int)20
+b Fg(history)p 351 2130 V 20 w(base)195 2185 y Fo(The)15
+b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f
+(history)g(list.)1661 2274 y(V)l(ariable)-1749 b Fh(int)20
+b Fg(history)p 351 2274 V 20 w(length)195 2329 y Fo(The)15
+b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the)
+f(history)g(list.)1661 2417 y(V)l(ariable)-1749 b Fh(int)20
+b Fg(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195
+2472 y Fo(The)14 b(maxim)o(um)f(n)o(um)o(b)q(er)h(of)e(history)i(en)o
+(tries.)19 b(This)14 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)g
+Fn(stifle_)195 2527 y(history)g(\(\))p Fo(.)1661 2615
+y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 2615
+V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y
+Fo(The)15 b(c)o(haracter)g(that)f(starts)g(a)h(history)g(ev)o(en)o(t.)
+20 b(The)15 b(default)h(is)g(`)p Fn(!)p Fo('.)p eop
+%%Page: 8 10
+8 9 bop 75 -58 a Fo(8)1347 b(GNU)15 b(History)g(Library)1661
+183 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377
+183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238
+y Fo(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g(w)o(ord)g
+(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g(line.)21
+b(The)195 293 y(default)16 b(is)f(`)p Fn(^)p Fo('.)1661
+388 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377
+388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443
+y Fo(During)e(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)i(seen)f
+(as)g(the)g(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)195
+498 y(then)e(it)g(and)g(all)h(subsequen)o(t)g(c)o(haracters)e(up)h(to)g
+(a)f(newline)j(are)e(ignored,)g(suppressing)195 553 y(history)f
+(expansion)h(for)f(the)g(remainder)h(of)f(the)g(line.)22
+b(This)15 b(is)h(disabled)h(b)o(y)e(default.)1661 648
+y(V)l(ariable)-1749 b Fh(char)20 b(*)f Fg(history)p 422
+648 V 21 w(no)p 504 648 V 20 w(expand)p 704 648 V 20
+w(c)n(hars)195 703 y Fo(The)j(list)h(of)f(c)o(haracters)f(whic)o(h)i
+(inhibit)h(history)e(expansion)h(if)g(found)f(immediately)195
+758 y(follo)o(wing)16 b Fj(history)p 528 758 14 2 v 16
+w(expansion)p 739 758 V 18 w(c)o(har)p Fo(.)j(The)d(default)f(is)h
+(whitespace)g(and)g(`)p Fn(=)p Fo('.)1661 853 y(V)l(ariable)-1749
+b Fh(char)20 b(*)f Fg(history)p 422 853 18 3 v 21 w(searc)n(h)p
+599 853 V 20 w(delimiter)p 843 853 V 23 w(c)n(hars)195
+908 y Fo(The)f(list)h(of)e(additional)i(c)o(haracters)e(whic)o(h)i(can)
+f(delimit)h(a)f(history)g(searc)o(h)f(string,)h(in)195
+963 y(addition)c(to)d(whitespace,)j(`)p Fn(:)p Fo(')d(and)i(`)p
+Fn(?)p Fo(')f(in)h(the)f(case)h(of)f(a)g(substring)h(searc)o(h.)19
+b(The)12 b(default)195 1018 y(is)k(empt)o(y)l(.)1661
+1113 y(V)l(ariable)-1749 b Fh(int)20 b Fg(history)p 351
+1113 V 20 w(quotes)p 533 1113 V 21 w(inhibit)p 717 1113
+V 23 w(expansion)195 1168 y Fo(If)13 b(non-zero,)f(single-quoted)i(w)o
+(ords)e(are)g(not)g(scanned)h(for)f(the)g(history)h(expansion)g(c)o
+(har-)195 1223 y(acter.)19 b(The)d(default)g(v)m(alue)g(is)g(0.)1661
+1318 y(V)l(ariable)-1749 b Fh(Function)20 b(*)g Fg(history)p
+527 1318 V 20 w(inhibit)p 710 1318 V 23 w(expansion)p
+980 1318 V 21 w(function)195 1373 y Fo(This)12 b(should)g(b)q(e)g(set)f
+(to)f(the)i(address)f(of)g(a)g(function)h(that)e(tak)o(es)h(t)o(w)o(o)f
+(argumen)o(ts:)17 b(a)11 b Fn(char)195 1428 y(*)j Fo(\()p
+Fj(string)t Fo(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g
+(string)g(\()p Fj(i)r Fo(\).)20 b(It)14 b(should)h(return)f(a)g
+(non-zero)195 1482 y(v)m(alue)g(if)e(the)h(history)f(expansion)h
+(starting)f(at)g Fj(string[i])i Fo(should)f(not)f(b)q(e)h(p)q
+(erformed;)g(zero)195 1537 y(if)g(the)h(expansion)f(should)h(b)q(e)g
+(done.)20 b(It)13 b(is)g(in)o(tended)i(for)d(use)h(b)o(y)g
+(applications)i(lik)o(e)f(Bash)195 1592 y(that)j(use)h(the)g(history)f
+(expansion)i(c)o(haracter)e(for)g(additional)i(purp)q(oses.)28
+b(By)18 b(default,)195 1647 y(this)e(v)m(ariable)g(is)g(set)f(to)f
+(NULL.)75 1780 y Fm(2.5)33 b(History)22 b(Programming)h(Example)137
+1878 y Fo(The)16 b(follo)o(wing)g(program)e(demonstrates)g(simple)j
+(use)e(of)g(the)g(GNU)g(History)g(Library)l(.)195 1944
+y Fn(main)23 b(\(\))195 1995 y({)243 2047 y(char)g(line[1024],)f(*t;)
+243 2099 y(int)h(len,)g(done)h(=)g(0;)243 2203 y(line[0])f(=)g(0;)243
+2307 y(using_history)f(\(\);)243 2359 y(while)h(\(!done\))290
+2411 y({)338 2462 y(printf)g(\("history$)g("\);)338 2514
+y(fflush)g(\(stdout\);)338 2566 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g
+(\(line\))g(-)h(1,)f(stdin\);)338 2618 y(if)h(\(t)f(&&)h(*t\))386
+2670 y({)p eop
+%%Page: 9 11
+9 10 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(History)889 b(9)434 183 y Fn(len)23 b(=)h(strlen)f(\(t\);)434
+235 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 287 y(t[len)h(-)f(1])h
+(=)g('\\0';)386 339 y(})338 443 y(if)g(\(!t\))386 495
+y(strcpy)f(\(line,)g("quit"\);)338 598 y(if)h(\(line[0]\))386
+650 y({)434 702 y(char)f(*expansion;)434 754 y(int)g(result;)434
+858 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434
+910 y(if)g(\(result\))481 962 y(fprintf)g(\(stderr,)g("\045s\\n",)g
+(expansion\);)434 1065 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h
+(2\))481 1117 y({)529 1169 y(free)f(\(expansion\);)529
+1221 y(continue;)481 1273 y(})434 1377 y(add_history)f(\(expansion\);)
+434 1429 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h
+(1\);)434 1480 y(free)f(\(expansion\);)386 1532 y(})338
+1636 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))386
+1688 y(done)g(=)h(1;)338 1740 y(else)f(if)h(\(strcmp)f(\(line,)g
+("save"\))g(==)h(0\))386 1792 y(write_history)e(\("history_file"\);)338
+1844 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386
+1896 y(read_history)e(\("history_file"\);)338 1947 y(else)h(if)h
+(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 1999 y({)434
+2051 y(register)e(HIST_ENTRY)h(**the_list;)434 2103 y(register)f(int)i
+(i;)434 2207 y(the_list)e(=)i(history_list)e(\(\);)434
+2259 y(if)h(\(the_list\))481 2311 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e
+(i++\))529 2363 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g
+(history_base,)e(the_list[i]->line\);)386 2414 y(})338
+2466 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386
+2518 y({)434 2570 y(int)f(which;)434 2622 y(if)g(\(\(sscanf)g(\(line)g
+(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop
+%%Page: 10 12
+10 11 bop 75 -58 a Fo(10)1324 b(GNU)15 b(History)g(Library)481
+183 y Fn({)529 235 y(HIST_ENTRY)23 b(*entry)g(=)g(remove_history)f
+(\(which\);)529 287 y(if)i(\(!entry\))577 339 y(fprintf)f(\(stderr,)f
+("No)i(such)f(entry)g(\045d\\n",)g(which\);)529 391 y(else)577
+443 y({)625 495 y(free)g(\(entry->line\);)625 546 y(free)g(\(entry\);)
+577 598 y(})481 650 y(})434 702 y(else)481 754 y({)529
+806 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f
+(`delete'\\n"\);)481 858 y(})386 910 y(})290 962 y(})195
+1013 y(})p eop
+%%Page: 11 13
+11 12 bop 75 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1196
+b(11)75 183 y Fk(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75
+359 y Fm(A)75 417 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)7
+b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
+b Fe(5)75 517 y Fm(E)75 575 y Fe(ev)o(en)o(t)d(designators)c
+Fd(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21
+b Fe(1)1012 359 y Fm(H)1012 417 y Fe(history)15 b(ev)o(en)o(ts)s
+Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)16 b Fe(1)1012 467 y(history)f(expansion)6 b Fd(.)j(.)d(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(1)1012 517 y(History)14
+b(Searc)o(hing)5 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)18 b Fe(5)p eop
+%%Page: 12 14
+12 13 bop 75 -58 a Fo(12)1324 b(GNU)15 b(History)g(Library)p
+eop
+%%Page: 13 15
+13 14 bop 75 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l
+(ariable)g(Index)919 b(13)75 183 y Fk(App)r(endix)25
+b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
+b(Index)75 359 y Fm(A)75 417 y Fc(add)p 137 417 12 2
+v 13 w(history)6 b Fd(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(4)75 467 y Fc(append)p
+197 467 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)23 b Fe(6)75 567 y Fm(C)75 625 y Fc(clear)p
+177 625 V 12 w(history)s Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(4)75 675 y Fc(current)p
+217 675 V 11 w(history)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)22 b Fe(5)75 774 y Fm(G)75 832 y Fc(get)p
+137 832 V 13 w(history)p 290 832 V 11 w(event)8 b Fd(.)e(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(7)75 932 y Fm(H)75
+990 y Fc(history)p 217 990 V 11 w(arg)p 288 990 V 13
+w(extract)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
+b Fe(7)75 1040 y Fc(history)p 217 1040 V 11 w(base)f
+Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19
+b Fe(7)75 1090 y Fc(history_co)o(mm)o(ent)o(_c)o(har)h
+Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Fe(8)75 1139 y Fc(history)p
+217 1139 V 11 w(expand)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)23 b Fe(7)75 1189 y Fc(history)p 217
+1189 V 11 w(expansion)p 408 1189 V 11 w(char)17 b Fd(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)18 b Fe(7)75 1239 y Fc(history)p 217
+1239 V 11 w(get)6 b Fd(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(5)75 1289 y Fc(history)p
+217 1289 V 11 w(get)p 288 1289 V 13 w(history)p 441 1289
+V 12 w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(4)75 1339 y Fc(history_in)o(hi)o
+(bit)o(_e)o(xpa)o(nsi)o(on)o(_fu)o(nc)o(tio)o(n)d Fd(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(8)75 1389 y Fc(history)p
+217 1389 V 11 w(is)p 268 1389 V 14 w(stifled)8 b Fd(.)s(.)f(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)21 b Fe(4)75 1438 y Fc(history)p
+217 1438 V 11 w(length)15 b Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)17 b Fe(7)75 1488 y Fc(history)p 217
+1488 V 11 w(list)5 b Fd(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)17 b Fe(5)75 1538 y Fc(history_no)o(_e)o(xpa)o(nd)o
+(_ch)o(ars)f Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(8)75 1588 y Fc(history_qu)o(ot)o
+(es_)o(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)14 b Fd(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(8)75
+1638 y Fc(history)p 217 1638 V 11 w(search)9 b Fd(.)d(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(5)75 1687
+y Fc(history_se)o(ar)o(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)16
+b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19
+b Fe(8)75 1737 y Fc(history)p 217 1737 V 11 w(search)p
+348 1737 V 12 w(pos)8 b Fd(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Fe(6)75 1787 y Fc(history)p 217 1787 V 11 w(search)p
+348 1787 V 12 w(prefix)5 b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Fe(6)75 1837 y Fc(history)p 217 1837 V 11 w(set)p 288
+1837 V 13 w(history)p 441 1837 V 12 w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
+b Fe(4)75 1887 y Fc(history)p 217 1887 V 11 w(set)p 288
+1887 V 13 w(pos)t Fd(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)16 b Fe(5)1012 359 y Fc(history_sub)o(st)o(_ch)o(ar)e
+Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(8)1012
+409 y Fc(history)p 1154 409 V 12 w(tokenize)8 b Fd(.)s(.)e(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(7)1012 459 y Fc(history)p
+1154 459 V 12 w(total)p 1266 459 V 12 w(bytes)7 b Fd(.)t(.)f(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)20 b Fe(5)1012 509 y Fc(history)p
+1154 509 V 12 w(truncate)p 1326 509 V 11 w(file)5 b Fd(.)t(.)h(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)18 b Fe(6)1012 612 y Fm(M)1012 670 y Fc(max)p
+1074 670 V 13 w(input)p 1187 670 V 13 w(history)13 b
+Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)16 b
+Fe(7)1012 773 y Fm(N)1012 831 y Fc(next)p 1094 831 V
+13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)18 b Fe(5)1012 934 y Fm(P)1012 992 y
+Fc(previous)p 1174 992 V 11 w(history)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(5)1012 1096 y Fm(R)1012
+1154 y Fc(read)p 1094 1154 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(6)1012
+1204 y Fc(read)p 1094 1204 V 13 w(history)p 1247 1204
+V 11 w(range)8 b Fd(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
+b Fe(6)1012 1253 y Fc(remove)p 1134 1253 V 12 w(history)8
+b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
+b Fe(4)1012 1303 y Fc(replace)p 1154 1303 V 12 w(history)p
+1306 1303 V 11 w(entry)5 b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
+b Fe(4)1012 1406 y Fm(S)1012 1464 y Fc(stifle)p 1134
+1464 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)24 b Fe(4)1012 1568 y Fm(U)1012 1626 y Fc(unstifle)p
+1174 1626 V 11 w(history)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)21 b Fe(4)1012 1676 y Fc(using)p 1114 1676 V
+13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)17 b Fe(4)1012 1779 y Fm(W)1012 1837 y Fc(where)p
+1114 1837 V 13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(5)1012 1887 y Fc(write)p
+1114 1887 V 13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)p eop
+%%Page: 14 16
+14 15 bop 75 -58 a Fo(14)1324 b(GNU)15 b(History)g(Library)p
+eop
+%%Page: -1 17
+-1 16 bop 1862 -58 a Fo(i)75 183 y Fk(T)-7 b(able)27
+b(of)f(Con)n(ten)n(ts)75 354 y Fm(1)67 b(Using)22 b(History)h(In)n
+(teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)h(.)31 b Fm(1)224 423 y Fo(1.1)45 b(History)15
+b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fo(1)374 478 y(1.1.1)44
+b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)26 b Fo(1)374 532 y(1.1.2)44 b(W)l(ord)15
+b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)19 b Fo(2)374 587 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8
+b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)19 b Fo(2)75 708 y Fm(2)67 b(Programming)23
+b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+(.)g(.)38 b Fm(3)224 777 y Fo(2.1)45 b(In)o(tro)q(duction)16
+b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)24 b Fo(3)224 832 y(2.2)45 b(History)15
+b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fo(3)224 886
+y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h
+(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26
+b Fo(4)374 941 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e
+(Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b
+Fo(4)374 996 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d
+Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)29 b Fo(4)374 1051 y(2.3.3)44
+b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c
+Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26
+b Fo(5)374 1106 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g
+(List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)25 b Fo(5)374 1160 y(2.3.5)44 b(Searc)o(hing)16
+b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
+b Fo(5)374 1215 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6
+b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)20 b Fo(6)374 1270 y(2.3.7)44
+b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)24 b Fo(6)224 1325 y(2.4)45 b(History)15 b(V)l(ariables)6
+b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)21 b Fo(7)224 1380 y(2.5)45 b(History)15
+b(Programming)f(Example)7 b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
+b Fo(8)75 1501 y Fm(App)r(endix)i(A)67 b(Concept)22 b(Index)17
+b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
+(.)38 b Fm(11)75 1636 y(App)r(endix)24 b(B)67 b(F)-6
+b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16 b Fb(.)10
+b(.)g(.)g(.)38 b Fm(13)p eop
+%%Page: -2 18
+-2 17 bop 75 -58 a Fo(ii)1346 b(GNU)15 b(History)g(Library)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/readline/doc/hsuser.texinfo b/readline/doc/hsuser.texinfo
index 7c4582d..76cb63b 100644
--- a/readline/doc/hsuser.texinfo
+++ b/readline/doc/hsuser.texinfo
@@ -117,7 +117,7 @@ history list and history file.
@table @code
@item fc
-@comment btindex fc
+@btindex fc
@example
@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]}
@code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
@@ -149,7 +149,7 @@ that typing @samp{r cc} runs the last command beginning with @code{cc}
and typing @samp{r} re-executes the last command (@pxref{Aliases}).
@item history
-@comment btindex history
+@btindex history
@example
history [-c] [@var{n}]
history [-anrw] [@var{filename}]
diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi
new file mode 100644
index 0000000..8335d6a2
--- /dev/null
+++ b/readline/doc/readline.dvi
Binary files differ
diff --git a/readline/doc/readline.html b/readline/doc/readline.html
new file mode 100644
index 0000000..f4ea74d
--- /dev/null
+++ b/readline/doc/readline.html
@@ -0,0 +1,4230 @@
+<HTML>
+<HEAD>
+<!-- This HTML file has been created by texi2html 1.52
+ from /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo on 31 December 1998 -->
+
+<TITLE>GNU Readline Library</TITLE>
+</HEAD>
+<BODY>
+<H1>GNU Readline Library</H1>
+<H2>Edition 4.0, for <CODE>Readline Library</CODE> Version 4.0.</H2>
+<H2>December 1998</H2>
+<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
+<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
+<P>
+<P><HR><P>
+<H1>Table of Contents</H1>
+<UL>
+<LI><A NAME="TOC1" HREF="readline.html#SEC1">Command Line Editing</A>
+<UL>
+<LI><A NAME="TOC2" HREF="readline.html#SEC2">Introduction to Line Editing</A>
+<LI><A NAME="TOC3" HREF="readline.html#SEC3">Readline Interaction</A>
+<UL>
+<LI><A NAME="TOC4" HREF="readline.html#SEC4">Readline Bare Essentials</A>
+<LI><A NAME="TOC5" HREF="readline.html#SEC5">Readline Movement Commands</A>
+<LI><A NAME="TOC6" HREF="readline.html#SEC6">Readline Killing Commands</A>
+<LI><A NAME="TOC7" HREF="readline.html#SEC7">Readline Arguments</A>
+<LI><A NAME="TOC8" HREF="readline.html#SEC8">Searching for Commands in the History</A>
+</UL>
+<LI><A NAME="TOC9" HREF="readline.html#SEC9">Readline Init File</A>
+<UL>
+<LI><A NAME="TOC10" HREF="readline.html#SEC10">Readline Init File Syntax</A>
+<LI><A NAME="TOC11" HREF="readline.html#SEC11">Conditional Init Constructs</A>
+<LI><A NAME="TOC12" HREF="readline.html#SEC12">Sample Init File</A>
+</UL>
+<LI><A NAME="TOC13" HREF="readline.html#SEC13">Bindable Readline Commands</A>
+<UL>
+<LI><A NAME="TOC14" HREF="readline.html#SEC14">Commands For Moving</A>
+<LI><A NAME="TOC15" HREF="readline.html#SEC15">Commands For Manipulating The History</A>
+<LI><A NAME="TOC16" HREF="readline.html#SEC16">Commands For Changing Text</A>
+<LI><A NAME="TOC17" HREF="readline.html#SEC17">Killing And Yanking</A>
+<LI><A NAME="TOC18" HREF="readline.html#SEC18">Specifying Numeric Arguments</A>
+<LI><A NAME="TOC19" HREF="readline.html#SEC19">Letting Readline Type For You</A>
+<LI><A NAME="TOC20" HREF="readline.html#SEC20">Keyboard Macros</A>
+<LI><A NAME="TOC21" HREF="readline.html#SEC21">Some Miscellaneous Commands</A>
+</UL>
+<LI><A NAME="TOC22" HREF="readline.html#SEC22">Readline vi Mode</A>
+</UL>
+<LI><A NAME="TOC23" HREF="readline.html#SEC23">Programming with GNU Readline</A>
+<UL>
+<LI><A NAME="TOC24" HREF="readline.html#SEC24">Basic Behavior</A>
+<LI><A NAME="TOC25" HREF="readline.html#SEC25">Custom Functions</A>
+<UL>
+<LI><A NAME="TOC26" HREF="readline.html#SEC26">The Function Type</A>
+<LI><A NAME="TOC27" HREF="readline.html#SEC27">Writing a New Function</A>
+</UL>
+<LI><A NAME="TOC28" HREF="readline.html#SEC28">Readline Variables</A>
+<LI><A NAME="TOC29" HREF="readline.html#SEC29">Readline Convenience Functions</A>
+<UL>
+<LI><A NAME="TOC30" HREF="readline.html#SEC30">Naming a Function</A>
+<LI><A NAME="TOC31" HREF="readline.html#SEC31">Selecting a Keymap</A>
+<LI><A NAME="TOC32" HREF="readline.html#SEC32">Binding Keys</A>
+<LI><A NAME="TOC33" HREF="readline.html#SEC33">Associating Function Names and Bindings</A>
+<LI><A NAME="TOC34" HREF="readline.html#SEC34">Allowing Undoing</A>
+<LI><A NAME="TOC35" HREF="readline.html#SEC35">Redisplay</A>
+<LI><A NAME="TOC36" HREF="readline.html#SEC36">Modifying Text</A>
+<LI><A NAME="TOC37" HREF="readline.html#SEC37">Utility Functions</A>
+<LI><A NAME="TOC38" HREF="readline.html#SEC38">Alternate Interface</A>
+<LI><A NAME="TOC39" HREF="readline.html#SEC39">An Example</A>
+</UL>
+<LI><A NAME="TOC40" HREF="readline.html#SEC40">Readline Signal Handling</A>
+<LI><A NAME="TOC41" HREF="readline.html#SEC41">Custom Completers</A>
+<UL>
+<LI><A NAME="TOC42" HREF="readline.html#SEC42">How Completing Works</A>
+<LI><A NAME="TOC43" HREF="readline.html#SEC43">Completion Functions</A>
+<LI><A NAME="TOC44" HREF="readline.html#SEC44">Completion Variables</A>
+<LI><A NAME="TOC45" HREF="readline.html#SEC45">A Short Completion Example</A>
+</UL>
+</UL>
+<LI><A NAME="TOC46" HREF="readline.html#SEC46">Concept Index</A>
+<LI><A NAME="TOC47" HREF="readline.html#SEC47">Function and Variable Index</A>
+</UL>
+<P><HR><P>
+
+<P>
+This document describes the GNU Readline Library, a utility which aids
+in the consistency of user interface across discrete programs that need
+to provide a command line interface.
+
+</P>
+<P>
+Published by the Free Software Foundation <BR>
+675 Massachusetts Avenue, <BR>
+Cambridge, MA 02139 USA
+
+</P>
+<P>
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+</P>
+<P>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+</P>
+<P>
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Free Software Foundation.
+
+</P>
+<P>
+Copyright (C) 1988-1999 Free Software Foundation, Inc.
+
+</P>
+
+
+
+<H1><A NAME="SEC1" HREF="readline.html#TOC1">Command Line Editing</A></H1>
+
+<P>
+This chapter describes the basic features of the GNU
+command line editing interface.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC2">Introduction and Notation</A>: Notation used in this text.
+<LI><A HREF="readline.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line.
+<LI><A HREF="readline.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view.
+<LI><A HREF="readline.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands
+ available for binding
+<LI><A HREF="readline.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline
+ behave like the vi editor.
+</UL>
+
+
+
+<H2><A NAME="SEC2" HREF="readline.html#TOC2">Introduction to Line Editing</A></H2>
+
+<P>
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+</P>
+<P>
+The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
+produced when the <KBD>k</KBD> key is pressed while the Control key
+is depressed.
+
+</P>
+<P>
+The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
+produced when the meta key (if you have one) is depressed, and the <KBD>k</KBD>
+key is pressed. If you do not have a meta key, the identical keystroke
+can be generated by typing <KBD>ESC</KBD> <I>first</I>, and then typing <KBD>k</KBD>.
+Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+
+</P>
+<P>
+The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
+character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+
+</P>
+<P>
+In addition, several keys have their own names. Specifically,
+<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
+stand for themselves when seen in this text, or in an init file
+(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="readline.html#TOC3">Readline Interaction</A></H2>
+<P>
+<A NAME="IDX1"></A>
+
+</P>
+<P>
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+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 <KBD>RETURN</KBD>. You do not have to be at the
+end of the line to press <KBD>RETURN</KBD>; the entire line is accepted
+regardless of the location of the cursor within the line.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline.
+<LI><A HREF="readline.html#SEC5">Readline Movement Commands</A>: Moving about the input line.
+<LI><A HREF="readline.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back!
+<LI><A HREF="readline.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands.
+<LI><A HREF="readline.html#SEC8">Searching</A>: Searching through previous lines.
+</UL>
+
+
+
+<H3><A NAME="SEC4" HREF="readline.html#TOC4">Readline Bare Essentials</A></H3>
+<P>
+<A NAME="IDX2"></A>
+<A NAME="IDX3"></A>
+<A NAME="IDX4"></A>
+
+</P>
+<P>
+In order to enter characters into the line, simply type them. The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right. If you mistype a character, you can use your
+erase character to back up and delete the mistyped character.
+
+</P>
+<P>
+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 <KBD>C-b</KBD> to move the cursor to the left, and then
+correct your mistake. Afterwards, you can move the cursor to the right
+with <KBD>C-f</KBD>.
+
+</P>
+<P>
+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.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-b</KBD>
+<DD>
+Move back one character.
+<DT><KBD>C-f</KBD>
+<DD>
+Move forward one character.
+<DT><KBD>DEL</KBD>
+<DD>
+Delete the character to the left of the cursor.
+<DT><KBD>C-d</KBD>
+<DD>
+Delete the character underneath the cursor.
+<DT>Printing characters
+<DD>
+Insert the character into the line at the cursor.
+<DT><KBD>C-_</KBD>
+<DD>
+Undo the last editing command. You can undo all the way back to an
+empty line.
+</DL>
+
+
+
+<H3><A NAME="SEC5" HREF="readline.html#TOC5">Readline Movement Commands</A></H3>
+
+<P>
+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 <KBD>C-b</KBD>, <KBD>C-f</KBD>,
+<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly
+about the line.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-a</KBD>
+<DD>
+Move to the start of the line.
+<DT><KBD>C-e</KBD>
+<DD>
+Move to the end of the line.
+<DT><KBD>M-f</KBD>
+<DD>
+Move forward a word, where a word is composed of letters and digits.
+<DT><KBD>M-b</KBD>
+<DD>
+Move backward a word.
+<DT><KBD>C-l</KBD>
+<DD>
+Clear the screen, reprinting the current line at the top.
+</DL>
+
+<P>
+Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
+forward a word. It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+</P>
+
+
+<H3><A NAME="SEC6" HREF="readline.html#TOC6">Readline Killing Commands</A></H3>
+
+<P>
+<A NAME="IDX5"></A>
+<A NAME="IDX6"></A>
+
+</P>
+<P>
+<EM>Killing</EM> text means to delete the text from the line, but to save
+it away for later use, usually by <EM>yanking</EM> (re-inserting)
+it back into the line.
+If the description for a command says that it `kills' text, then you can
+be sure that you can get the text back in a different (or the same)
+place later.
+
+</P>
+<P>
+When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all. The kill
+ring is not line specific; the text that you killed on a previously
+typed line is available to be yanked back later, when you are typing
+another line.
+<A NAME="IDX7"></A>
+
+</P>
+<P>
+Here is the list of commands for killing text.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-k</KBD>
+<DD>
+Kill the text from the current cursor position to the end of the line.
+
+<DT><KBD>M-d</KBD>
+<DD>
+Kill from the cursor to the end of the current word, or if between
+words, to the end of the next word.
+
+<DT><KBD>M-DEL</KBD>
+<DD>
+Kill from the cursor the start of the previous word, or if between
+words, to the start of the previous word.
+
+<DT><KBD>C-w</KBD>
+<DD>
+Kill from the cursor to the previous whitespace. This is different than
+<KBD>M-DEL</KBD> because the word boundaries differ.
+
+</DL>
+
+<P>
+Here is how to <EM>yank</EM> the text back into the line. Yanking
+means to copy the most-recently-killed text from the kill buffer.
+
+</P>
+<DL COMPACT>
+
+<DT><KBD>C-y</KBD>
+<DD>
+Yank the most recently killed text back into the buffer at the cursor.
+
+<DT><KBD>M-y</KBD>
+<DD>
+Rotate the kill-ring, and yank the new top. You can only do this if
+the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
+</DL>
+
+
+
+<H3><A NAME="SEC7" HREF="readline.html#TOC7">Readline Arguments</A></H3>
+
+<P>
+You can pass numeric arguments to Readline commands. Sometimes the
+argument acts as a repeat count, other times it is the <I>sign</I> of the
+argument that is significant. If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction. For example, to kill text back to the
+start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+
+</P>
+<P>
+The general way to pass numeric arguments to a command is to type meta
+digits before the command. If the first `digit' typed is a minus
+sign (<KBD>-</KBD>), then the sign of the argument will be negative. Once
+you have typed one meta digit to get the argument started, you can type
+the remainder of the digits, and then the command. For example, to give
+the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>.
+
+</P>
+
+
+<H3><A NAME="SEC8" HREF="readline.html#TOC8">Searching for Commands in the History</A></H3>
+
+<P>
+Readline provides commands for searching through the command history
+for lines containing a specified string.
+There are two search modes: <VAR>incremental</VAR> and <VAR>non-incremental</VAR>.
+
+</P>
+<P>
+Incremental searches begin before the user has finished typing the
+search string.
+As each character of the search string is typed, Readline displays
+the next entry from the history matching the string typed so far.
+An incremental search requires only as many characters as needed to
+find the desired history entry.
+The characters present in the value of the <VAR>isearch-terminators</VAR> variable
+are used to terminate an incremental search.
+If that variable has not been assigned a value, the <KBD>ESC</KBD> and
+<KBD>C-J</KBD> characters will terminate an incremental search.
+<KBD>C-g</KBD> will abort an incremental search and restore the original line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+To find other matching entries in the history list, type <KBD>C-s</KBD> or
+<KBD>C-r</KBD> as appropriate.
+This will search backward or forward in the history for the next
+entry matching the search string typed so far.
+Any other key sequence bound to a Readline command will terminate
+the search and execute that command.
+For instance, a <KBD>RET</KBD> will terminate the search and accept
+the line, thereby executing the command from the history list.
+
+</P>
+<P>
+Non-incremental searches read the entire search string before starting
+to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+
+</P>
+
+
+<H2><A NAME="SEC9" HREF="readline.html#TOC9">Readline Init File</A></H2>
+<P>
+<A NAME="IDX8"></A>
+
+</P>
+<P>
+Although the Readline library comes with a set of <CODE>emacs</CODE>-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.
+Any user can customize programs that use Readline by putting
+commands in an <EM>inputrc</EM> file in his home directory.
+The name of this
+file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If
+that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+
+</P>
+<P>
+When a program which uses the Readline library starts up, the
+init file is read, and the key bindings are set.
+
+</P>
+<P>
+In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file.
+
+<LI><A HREF="readline.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file.
+
+<LI><A HREF="readline.html#SEC12">Sample Init File</A>: An example inputrc file.
+</UL>
+
+
+
+<H3><A NAME="SEC10" HREF="readline.html#TOC10">Readline Init File Syntax</A></H3>
+
+<P>
+There are only a few basic constructs allowed in the
+Readline init file. Blank lines are ignored.
+Lines beginning with a <SAMP>`#'</SAMP> are comments.
+Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
+constructs (see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>). Other lines
+denote variable settings and key bindings.
+
+</P>
+<DL COMPACT>
+
+<DT>Variable Settings
+<DD>
+You can modify the run-time behavior of Readline by
+altering the values of variables in Readline
+using the <CODE>set</CODE> command within the init file. Here is how to
+change from the default Emacs-like key binding to use
+<CODE>vi</CODE> line editing commands:
+
+
+<PRE>
+set editing-mode vi
+</PRE>
+
+A great deal of run-time behavior is changeable with the following
+variables.
+
+<DL COMPACT>
+
+<DT><CODE>bell-style</CODE>
+<DD>
+<A NAME="IDX9"></A>
+Controls what happens when Readline wants to ring the terminal bell.
+If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to
+<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
+If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
+the terminal's bell.
+
+<DT><CODE>comment-begin</CODE>
+<DD>
+<A NAME="IDX10"></A>
+The string to insert at the beginning of the line when the
+<CODE>insert-comment</CODE> command is executed. The default value
+is <CODE>"#"</CODE>.
+
+<DT><CODE>completion-ignore-case</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is <SAMP>`off'</SAMP>.
+
+<DT><CODE>completion-query-items</CODE>
+<DD>
+<A NAME="IDX11"></A>
+The number of possible completions that determines when the user is
+asked whether he wants to see the list of possibilities. If the
+number of possible completions is greater than this value,
+Readline will ask the user whether or not he wishes to view
+them; otherwise, they are simply listed. The default limit is
+<CODE>100</CODE>.
+
+<DT><CODE>convert-meta</CODE>
+<DD>
+<A NAME="IDX12"></A>
+If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
+eighth bit set to an ASCII key sequence by stripping the eighth
+bit and prepending an <KBD>ESC</KBD> character, converting them to a
+meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>.
+
+<DT><CODE>disable-completion</CODE>
+<DD>
+<A NAME="IDX13"></A>
+If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
+Completion characters will be inserted into the line as if they had
+been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>editing-mode</CODE>
+<DD>
+<A NAME="IDX14"></A>
+The <CODE>editing-mode</CODE> variable controls which default set of
+key bindings is used. By default, Readline starts up in Emacs editing
+mode, where the keystrokes are most similar to Emacs. This variable can be
+set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+
+<DT><CODE>enable-keypad</CODE>
+<DD>
+<A NAME="IDX15"></A>
+When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys. The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>expand-tilde</CODE>
+<DD>
+<A NAME="IDX16"></A>
+If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
+attempts word completion. The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>horizontal-scroll-mode</CODE>
+<DD>
+<A NAME="IDX17"></A>
+This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it
+to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
+horizontally on a single screen line when they are longer than the width
+of the screen, instead of wrapping onto a new screen line. By default,
+this variable is set to <SAMP>`off'</SAMP>.
+
+<DT><CODE>input-meta</CODE>
+<DD>
+<A NAME="IDX18"></A>
+<A NAME="IDX19"></A>
+If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
+will not strip the eighth bit from the characters it reads),
+regardless of what the terminal claims it can support. The
+default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a
+synonym for this variable.
+
+<DT><CODE>isearch-terminators</CODE>
+<DD>
+<A NAME="IDX20"></A>
+The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">Searching for Commands in the History</A>).
+If this variable has not been given a value, the characters <KBD>ESC</KBD> and
+<KBD>C-J</KBD> will terminate an incremental search.
+
+<DT><CODE>keymap</CODE>
+<DD>
+<A NAME="IDX21"></A>
+Sets Readline's idea of the current keymap for key binding commands.
+Acceptable <CODE>keymap</CODE> names are
+<CODE>emacs</CODE>,
+<CODE>emacs-standard</CODE>,
+<CODE>emacs-meta</CODE>,
+<CODE>emacs-ctlx</CODE>,
+<CODE>vi</CODE>,
+<CODE>vi-command</CODE>, and
+<CODE>vi-insert</CODE>.
+<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is
+equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>.
+The value of the <CODE>editing-mode</CODE> variable also affects the
+default keymap.
+
+<DT><CODE>mark-directories</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+appended. The default is <SAMP>`on'</SAMP>.
+
+<DT><CODE>mark-modified-lines</CODE>
+<DD>
+<A NAME="IDX22"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
+asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
+This variable is <SAMP>`off'</SAMP> by default.
+
+<DT><CODE>output-meta</CODE>
+<DD>
+<A NAME="IDX23"></A>
+If set to <SAMP>`on'</SAMP>, Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence. The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>print-completions-horizontally</CODE>
+<DD>
+If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is <SAMP>`off'</SAMP>.
+
+<DT><CODE>show-all-if-ambiguous</CODE>
+<DD>
+<A NAME="IDX24"></A>
+This alters the default behavior of the completion functions. If
+set to <SAMP>`on'</SAMP>,
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is <SAMP>`off'</SAMP>.
+
+<DT><CODE>visible-stats</CODE>
+<DD>
+<A NAME="IDX25"></A>
+If set to <SAMP>`on'</SAMP>, a character denoting a file's type
+is appended to the filename when listing possible
+completions. The default is <SAMP>`off'</SAMP>.
+
+</DL>
+
+<DT>Key Bindings
+<DD>
+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 sections contain tables of the command
+name, the default keybinding, if any, and a short description of what
+the command does.
+
+Once you know the name of the command, simply place the name of the key
+you wish to bind the command to, a colon, and then the name of the
+command on a line in the init file. The name of the key
+can be expressed in different ways, depending on which is most
+comfortable for you.
+
+<DL COMPACT>
+
+<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
+<DD>
+<VAR>keyname</VAR> is the name of a key spelled out in English. For example:
+
+<PRE>
+Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "&#62; output"
+</PRE>
+
+In the above example, <KBD>C-u</KBD> is bound to the function
+<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+<SAMP>`&#62; output'</SAMP> into the line).
+
+<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
+<DD>
+<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+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.
+
+
+<PRE>
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+</PRE>
+
+In the above example, <KBD>C-u</KBD> is bound to the function
+<CODE>universal-argument</CODE> (just as it was in the first example),
+<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
+and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
+the text <SAMP>`Function Key 1'</SAMP>.
+
+</DL>
+
+The following GNU Emacs style escape sequences are available when
+specifying key sequences:
+
+<DL COMPACT>
+
+<DT><CODE><KBD>\C-</KBD></CODE>
+<DD>
+control prefix
+<DT><CODE><KBD>\M-</KBD></CODE>
+<DD>
+meta prefix
+<DT><CODE><KBD>\e</KBD></CODE>
+<DD>
+an escape character
+<DT><CODE><KBD>\\</KBD></CODE>
+<DD>
+backslash
+<DT><CODE><KBD>\"</KBD></CODE>
+<DD>
+<KBD>"</KBD>
+<DT><CODE><KBD>\'</KBD></CODE>
+<DD>
+<KBD>'</KBD>
+</DL>
+
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+
+<DL COMPACT>
+
+<DT><CODE>\a</CODE>
+<DD>
+alert (bell)
+<DT><CODE>\b</CODE>
+<DD>
+backspace
+<DT><CODE>\d</CODE>
+<DD>
+delete
+<DT><CODE>\f</CODE>
+<DD>
+form feed
+<DT><CODE>\n</CODE>
+<DD>
+newline
+<DT><CODE>\r</CODE>
+<DD>
+carriage return
+<DT><CODE>\t</CODE>
+<DD>
+horizontal tab
+<DT><CODE>\v</CODE>
+<DD>
+vertical tab
+<DT><CODE>\<VAR>nnn</VAR></CODE>
+<DD>
+the character whose ASCII code is the octal value <VAR>nnn</VAR>
+(one to three digits)
+<DT><CODE>\x<VAR>nnn</VAR></CODE>
+<DD>
+the character whose ASCII code is the hexadecimal value <VAR>nnn</VAR>
+(one to three digits)
+</DL>
+
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
+For example, the following binding will make <SAMP>`C-x \'</SAMP>
+insert a single <SAMP>`\'</SAMP> into the line:
+
+<PRE>
+"\C-x\\": "\\"
+</PRE>
+
+</DL>
+
+
+
+<H3><A NAME="SEC11" HREF="readline.html#TOC11">Conditional Init Constructs</A></H3>
+
+<P>
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests. There are four parser directives used.
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>$if</CODE>
+<DD>
+The <CODE>$if</CODE> construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+Readline. The text of the test extends to the end of the line;
+no characters are required to isolate it.
+
+<DL COMPACT>
+
+<DT><CODE>mode</CODE>
+<DD>
+The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
+This may be used in conjunction
+with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
+the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
+Readline is starting out in <CODE>emacs</CODE> mode.
+
+<DT><CODE>term</CODE>
+<DD>
+The <CODE>term=</CODE> form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys. The word on the right side of the
+<SAMP>`='</SAMP> is tested against both the full name of the terminal and
+the portion of the terminal name before the first <SAMP>`-'</SAMP>. This
+allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
+for instance.
+
+<DT><CODE>application</CODE>
+<DD>
+The <VAR>application</VAR> construct is used to include
+application-specific settings. Each program using the Readline
+library sets the <VAR>application name</VAR>, and you can test for it.
+This could be used to bind key sequences to functions useful for
+a specific program. For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+
+<PRE>
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+</PRE>
+
+</DL>
+
+<DT><CODE>$endif</CODE>
+<DD>
+This command, as seen in the previous example, terminates an
+<CODE>$if</CODE> command.
+
+<DT><CODE>$else</CODE>
+<DD>
+Commands in this branch of the <CODE>$if</CODE> directive are executed if
+the test fails.
+
+<DT><CODE>$include</CODE>
+<DD>
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+
+<PRE>
+$include /etc/inputrc
+</PRE>
+
+</DL>
+
+
+
+<H3><A NAME="SEC12" HREF="readline.html#TOC12">Sample Init File</A></H3>
+
+<P>
+Here is an example of an inputrc file. This illustrates key
+binding, variable assignment, and conditional syntax.
+
+</P>
+
+<PRE>
+# This file controls the behaviour of line input editing for
+# programs that use the Gnu Readline library. Existing programs
+# include FTP, Bash, and Gdb.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable assignments from
+# /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs
+
+$if mode=emacs
+
+Meta-Control-h: backward-kill-word Text after the function name is ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD": backward-char
+#"\M-OC": forward-char
+#"\M-OA": previous-history
+#"\M-OB": next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D": backward-char
+"\M-[C": forward-char
+"\M-[A": previous-history
+"\M-[B": next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD": backward-char
+#"\M-\C-OC": forward-char
+#"\M-\C-OA": previous-history
+#"\M-\C-OB": next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D": backward-char
+#"\M-\C-[C": forward-char
+#"\M-\C-[A": previous-history
+#"\M-\C-[B": next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding. This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word -- insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather than converted to
+# prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly rather than
+# as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for a word, ask the
+# user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+</PRE>
+
+
+
+<H2><A NAME="SEC13" HREF="readline.html#TOC13">Bindable Readline Commands</A></H2>
+
+
+<UL>
+<LI><A HREF="readline.html#SEC14">Commands For Moving</A>: Moving about the line.
+<LI><A HREF="readline.html#SEC15">Commands For History</A>: Getting at previous lines.
+<LI><A HREF="readline.html#SEC16">Commands For Text</A>: Commands for changing text.
+<LI><A HREF="readline.html#SEC17">Commands For Killing</A>: Commands for killing and yanking.
+<LI><A HREF="readline.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts.
+<LI><A HREF="readline.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you.
+<LI><A HREF="readline.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters
+<LI><A HREF="readline.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands.
+</UL>
+
+<P>
+This section describes Readline commands that may be bound to key
+sequences.
+
+</P>
+
+
+<H3><A NAME="SEC14" HREF="readline.html#TOC14">Commands For Moving</A></H3>
+<DL COMPACT>
+
+<DT><CODE>beginning-of-line (C-a)</CODE>
+<DD>
+<A NAME="IDX26"></A>
+Move to the start of the current line.
+
+<DT><CODE>end-of-line (C-e)</CODE>
+<DD>
+<A NAME="IDX27"></A>
+Move to the end of the line.
+
+<DT><CODE>forward-char (C-f)</CODE>
+<DD>
+<A NAME="IDX28"></A>
+Move forward a character.
+
+<DT><CODE>backward-char (C-b)</CODE>
+<DD>
+<A NAME="IDX29"></A>
+Move back a character.
+
+<DT><CODE>forward-word (M-f)</CODE>
+<DD>
+<A NAME="IDX30"></A>
+Move forward to the end of the next word. Words are composed of
+letters and digits.
+
+<DT><CODE>backward-word (M-b)</CODE>
+<DD>
+<A NAME="IDX31"></A>
+Move back to the start of this, or the previous, word. Words are
+composed of letters and digits.
+
+<DT><CODE>clear-screen (C-l)</CODE>
+<DD>
+<A NAME="IDX32"></A>
+Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+
+<DT><CODE>redraw-current-line ()</CODE>
+<DD>
+<A NAME="IDX33"></A>
+Refresh the current line. By default, this is unbound.
+
+</DL>
+
+
+
+<H3><A NAME="SEC15" HREF="readline.html#TOC15">Commands For Manipulating The History</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>accept-line (Newline, Return)</CODE>
+<DD>
+<A NAME="IDX34"></A>
+Accept the line regardless of where the cursor is. If this line is
+non-empty, add it to the history list. If this line was a history
+line, then restore the history line to its original state.
+
+<DT><CODE>previous-history (C-p)</CODE>
+<DD>
+<A NAME="IDX35"></A>
+Move `up' through the history list.
+
+<DT><CODE>next-history (C-n)</CODE>
+<DD>
+<A NAME="IDX36"></A>
+Move `down' through the history list.
+
+<DT><CODE>beginning-of-history (M-&#60;)</CODE>
+<DD>
+<A NAME="IDX37"></A>
+Move to the first line in the history.
+
+<DT><CODE>end-of-history (M-&#62;)</CODE>
+<DD>
+<A NAME="IDX38"></A>
+Move to the end of the input history, i.e., the line currently
+being entered.
+
+<DT><CODE>reverse-search-history (C-r)</CODE>
+<DD>
+<A NAME="IDX39"></A>
+Search backward starting at the current line and moving `up' through
+the history as necessary. This is an incremental search.
+
+<DT><CODE>forward-search-history (C-s)</CODE>
+<DD>
+<A NAME="IDX40"></A>
+Search forward starting at the current line and moving `down' through
+the the history as necessary. This is an incremental search.
+
+<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
+<DD>
+<A NAME="IDX41"></A>
+Search backward starting at the current line and moving `up'
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+<DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
+<DD>
+<A NAME="IDX42"></A>
+Search forward starting at the current line and moving `down'
+through the the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+<DT><CODE>history-search-forward ()</CODE>
+<DD>
+<A NAME="IDX43"></A>
+Search forward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the <VAR>point</VAR>). This is a non-incremental search. By
+default, this command is unbound.
+
+<DT><CODE>history-search-backward ()</CODE>
+<DD>
+<A NAME="IDX44"></A>
+Search backward through the history for the string of characters
+between the start of the current line and the point. This
+is a non-incremental search. By default, this command is unbound.
+
+<DT><CODE>yank-nth-arg (M-C-y)</CODE>
+<DD>
+<A NAME="IDX45"></A>
+Insert the first argument to the previous command (usually
+the second word on the previous line). With an argument <VAR>n</VAR>,
+insert the <VAR>n</VAR>th word from the previous command (the words
+in the previous command begin with word 0). A negative argument
+inserts the <VAR>n</VAR>th word from the end of the previous command.
+
+<DT><CODE>yank-last-arg (M-., M-_)</CODE>
+<DD>
+<A NAME="IDX46"></A>
+Insert last argument to the previous command (the last word of the
+previous history entry). With an
+argument, behave exactly like <CODE>yank-nth-arg</CODE>.
+Successive calls to <CODE>yank-last-arg</CODE> move back through the history
+list, inserting the last argument of each line in turn.
+
+</DL>
+
+
+
+<H3><A NAME="SEC16" HREF="readline.html#TOC16">Commands For Changing Text</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>delete-char (C-d)</CODE>
+<DD>
+<A NAME="IDX47"></A>
+Delete the character under the cursor. If the cursor is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to <CODE>delete-char</CODE>, then
+return <CODE>EOF</CODE>.
+
+<DT><CODE>backward-delete-char (Rubout)</CODE>
+<DD>
+<A NAME="IDX48"></A>
+Delete the character behind the cursor. A numeric argument means
+to kill the characters instead of deleting them.
+
+<DT><CODE>forward-backward-delete-char ()</CODE>
+<DD>
+<A NAME="IDX49"></A>
+Delete the character under the cursor, unless the cursor is at the
+end of the line, in which case the character behind the cursor is
+deleted. By default, this is not bound to a key.
+
+<DT><CODE>quoted-insert (C-q, C-v)</CODE>
+<DD>
+<A NAME="IDX50"></A>
+Add the next character typed to the line verbatim. This is
+how to insert key sequences like <KBD>C-q</KBD>, for example.
+
+<DT><CODE>tab-insert (M-TAB)</CODE>
+<DD>
+<A NAME="IDX51"></A>
+Insert a tab character.
+
+<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
+<DD>
+<A NAME="IDX52"></A>
+Insert yourself.
+
+<DT><CODE>transpose-chars (C-t)</CODE>
+<DD>
+<A NAME="IDX53"></A>
+Drag the character before the cursor forward over
+the character at the cursor, moving the
+cursor forward as well. If the insertion point
+is at the end of the line, then this
+transposes the last two characters of the line.
+Negative arguments don't work.
+
+<DT><CODE>transpose-words (M-t)</CODE>
+<DD>
+<A NAME="IDX54"></A>
+Drag the word behind the cursor past the word in front of the cursor
+moving the cursor over that word as well.
+
+<DT><CODE>upcase-word (M-u)</CODE>
+<DD>
+<A NAME="IDX55"></A>
+Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move the cursor.
+
+<DT><CODE>downcase-word (M-l)</CODE>
+<DD>
+<A NAME="IDX56"></A>
+Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move the cursor.
+
+<DT><CODE>capitalize-word (M-c)</CODE>
+<DD>
+<A NAME="IDX57"></A>
+Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move the cursor.
+
+</DL>
+
+
+
+<H3><A NAME="SEC17" HREF="readline.html#TOC17">Killing And Yanking</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>kill-line (C-k)</CODE>
+<DD>
+<A NAME="IDX58"></A>
+Kill the text from the current cursor position to the end of the line.
+
+<DT><CODE>backward-kill-line (C-x Rubout)</CODE>
+<DD>
+<A NAME="IDX59"></A>
+Kill backward to the beginning of the line.
+
+<DT><CODE>unix-line-discard (C-u)</CODE>
+<DD>
+<A NAME="IDX60"></A>
+Kill backward from the cursor to the beginning of the current line.
+The killed text is saved on the kill-ring.
+
+<DT><CODE>kill-whole-line ()</CODE>
+<DD>
+<A NAME="IDX61"></A>
+Kill all characters on the current line, no matter where the
+cursor is. By default, this is unbound.
+
+<DT><CODE>kill-word (M-d)</CODE>
+<DD>
+<A NAME="IDX62"></A>
+Kill from the cursor to the end of the current word, or if between
+words, to the end of the next word. Word boundaries are the same
+as <CODE>forward-word</CODE>.
+
+<DT><CODE>backward-kill-word (M-DEL)</CODE>
+<DD>
+<A NAME="IDX63"></A>
+Kill the word behind the cursor. Word boundaries are the same
+as <CODE>backward-word</CODE>.
+
+<DT><CODE>unix-word-rubout (C-w)</CODE>
+<DD>
+<A NAME="IDX64"></A>
+Kill the word behind the cursor, using white space as a word
+boundary. The killed text is saved on the kill-ring.
+
+<DT><CODE>delete-horizontal-space ()</CODE>
+<DD>
+<A NAME="IDX65"></A>
+Delete all spaces and tabs around point. By default, this is unbound.
+
+<DT><CODE>kill-region ()</CODE>
+<DD>
+<A NAME="IDX66"></A>
+Kill the text between the point and the <EM>mark</EM> (saved
+cursor position). This text is referred to as the <VAR>region</VAR>.
+By default, this command is unbound.
+
+<DT><CODE>copy-region-as-kill ()</CODE>
+<DD>
+<A NAME="IDX67"></A>
+Copy the text in the region to the kill buffer, so it can be yanked
+right away. By default, this command is unbound.
+
+<DT><CODE>copy-backward-word ()</CODE>
+<DD>
+<A NAME="IDX68"></A>
+Copy the word before point to the kill buffer.
+The word boundaries are the same as <CODE>backward-word</CODE>.
+By default, this command is unbound.
+
+<DT><CODE>copy-forward-word ()</CODE>
+<DD>
+<A NAME="IDX69"></A>
+Copy the word following point to the kill buffer.
+The word boundaries are the same as <CODE>forward-word</CODE>.
+By default, this command is unbound.
+
+<DT><CODE>yank (C-y)</CODE>
+<DD>
+<A NAME="IDX70"></A>
+Yank the top of the kill ring into the buffer at the current
+cursor position.
+
+<DT><CODE>yank-pop (M-y)</CODE>
+<DD>
+<A NAME="IDX71"></A>
+Rotate the kill-ring, and yank the new top. You can only do this if
+the prior command is yank or yank-pop.
+</DL>
+
+
+
+<H3><A NAME="SEC18" HREF="readline.html#TOC18">Specifying Numeric Arguments</A></H3>
+<DL COMPACT>
+
+<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE>
+<DD>
+<A NAME="IDX72"></A>
+Add this digit to the argument already accumulating, or start a new
+argument. <KBD>M--</KBD> starts a negative argument.
+
+<DT><CODE>universal-argument ()</CODE>
+<DD>
+<A NAME="IDX73"></A>
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing <CODE>universal-argument</CODE>
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+By default, this is not bound to a key.
+</DL>
+
+
+
+<H3><A NAME="SEC19" HREF="readline.html#TOC19">Letting Readline Type For You</A></H3>
+
+<DL COMPACT>
+
+<DT><CODE>complete (TAB)</CODE>
+<DD>
+<A NAME="IDX74"></A>
+Attempt to do completion on the text before the cursor. This is
+application-specific. Generally, if you are typing a filename
+argument, you can do filename completion; if you are typing a command,
+you can do command completion; if you are typing in a symbol to GDB, you
+can do symbol name completion; if you are typing in a variable to Bash,
+you can do variable name completion, and so on.
+
+<DT><CODE>possible-completions (M-?)</CODE>
+<DD>
+<A NAME="IDX75"></A>
+List the possible completions of the text before the cursor.
+
+<DT><CODE>insert-completions (M-*)</CODE>
+<DD>
+<A NAME="IDX76"></A>
+Insert all completions of the text before point that would have
+been generated by <CODE>possible-completions</CODE>.
+
+<DT><CODE>menu-complete ()</CODE>
+<DD>
+<A NAME="IDX77"></A>
+Similar to <CODE>complete</CODE>, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of <CODE>menu-complete</CODE> steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung and the
+original text is restored.
+An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to <CODE>TAB</CODE>, but is unbound
+by default.
+
+<DT><CODE>delete-char-or-list ()</CODE>
+<DD>
+<A NAME="IDX78"></A>
+Deletes the character under the cursor if not at the beginning or
+end of the line (like <CODE>delete-char</CODE>).
+If at the end of the line, behaves identically to
+<CODE>possible-completions</CODE>.
+This command is unbound by default.
+
+</DL>
+
+
+
+<H3><A NAME="SEC20" HREF="readline.html#TOC20">Keyboard Macros</A></H3>
+<DL COMPACT>
+
+<DT><CODE>start-kbd-macro (C-x ()</CODE>
+<DD>
+<A NAME="IDX79"></A>
+Begin saving the characters typed into the current keyboard macro.
+
+<DT><CODE>end-kbd-macro (C-x ))</CODE>
+<DD>
+<A NAME="IDX80"></A>
+Stop saving the characters typed into the current keyboard macro
+and save the definition.
+
+<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
+<DD>
+<A NAME="IDX81"></A>
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+
+</DL>
+
+
+
+<H3><A NAME="SEC21" HREF="readline.html#TOC21">Some Miscellaneous Commands</A></H3>
+<DL COMPACT>
+
+<DT><CODE>re-read-init-file (C-x C-r)</CODE>
+<DD>
+<A NAME="IDX82"></A>
+Read in the contents of the inputrc file, and incorporate
+any bindings or variable assignments found there.
+
+<DT><CODE>abort (C-g)</CODE>
+<DD>
+<A NAME="IDX83"></A>
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+<CODE>bell-style</CODE>).
+
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
+<DD>
+<A NAME="IDX84"></A>
+If the metafied character <VAR>x</VAR> is lowercase, run the command
+that is bound to the corresponding uppercase character.
+
+<DT><CODE>prefix-meta (ESC)</CODE>
+<DD>
+<A NAME="IDX85"></A>
+Make the next character typed be metafied. This is for keyboards
+without a meta key. Typing <SAMP>`ESC f'</SAMP> is equivalent to typing
+<SAMP>`M-f'</SAMP>.
+
+<DT><CODE>undo (C-_, C-x C-u)</CODE>
+<DD>
+<A NAME="IDX86"></A>
+Incremental undo, separately remembered for each line.
+
+<DT><CODE>revert-line (M-r)</CODE>
+<DD>
+<A NAME="IDX87"></A>
+Undo all changes made to this line. This is like executing the <CODE>undo</CODE>
+command enough times to get back to the beginning.
+
+<DT><CODE>tilde-expand (M-~)</CODE>
+<DD>
+<A NAME="IDX88"></A>
+Perform tilde expansion on the current word.
+
+<DT><CODE>set-mark (C-@)</CODE>
+<DD>
+<A NAME="IDX89"></A>
+Set the mark to the current point. If a
+numeric argument is supplied, the mark is set to that position.
+
+<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
+<DD>
+<A NAME="IDX90"></A>
+Swap the point with the mark. The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+
+<DT><CODE>character-search (C-])</CODE>
+<DD>
+<A NAME="IDX91"></A>
+A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+
+<DT><CODE>character-search-backward (M-C-])</CODE>
+<DD>
+<A NAME="IDX92"></A>
+A character is read and point is moved to the previous occurrence
+of that character. A negative count searches for subsequent
+occurrences.
+
+<DT><CODE>insert-comment (M-#)</CODE>
+<DD>
+<A NAME="IDX93"></A>
+The value of the <CODE>comment-begin</CODE>
+variable is inserted at the beginning of the current line,
+and the line is accepted as if a newline had been typed.
+
+<DT><CODE>dump-functions ()</CODE>
+<DD>
+<A NAME="IDX94"></A>
+Print all of the functions and their key bindings to the
+Readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file. This command is unbound by default.
+
+<DT><CODE>dump-variables ()</CODE>
+<DD>
+<A NAME="IDX95"></A>
+Print all of the settable variables and their values to the
+Readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file. This command is unbound by default.
+
+<DT><CODE>dump-macros ()</CODE>
+<DD>
+<A NAME="IDX96"></A>
+Print all of the Readline key sequences bound to macros and the
+strings they ouput. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an <VAR>inputrc</VAR> file. This command is unbound by default.
+
+</DL>
+
+
+
+<H2><A NAME="SEC22" HREF="readline.html#TOC22">Readline vi Mode</A></H2>
+
+<P>
+While the Readline library does not have a full set of <CODE>vi</CODE>
+editing functions, it does contain enough to allow simple editing
+of the line. The Readline <CODE>vi</CODE> mode behaves as specified in
+the POSIX 1003.2 standard.
+
+</P>
+<P>
+In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
+editing modes, use the command M-C-j (toggle-editing-mode).
+The Readline default is <CODE>emacs</CODE> mode.
+
+</P>
+<P>
+When you enter a line in <CODE>vi</CODE> mode, you are already placed in
+`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD>
+switches you into `command' mode, where you can edit the text of the
+line with the standard <CODE>vi</CODE> movement keys, move to previous
+history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
+so forth.
+
+</P>
+
+
+
+<H1><A NAME="SEC23" HREF="readline.html#TOC23">Programming with GNU Readline</A></H1>
+
+<P>
+This chapter describes the interface between the GNU Readline Library and
+other programs. If you are a programmer, and you wish to include the
+features found in GNU Readline
+such as completion, line editing, and interactive history manipulation
+in your own programs, this section is for you.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC24">Basic Behavior</A>: Using the default behavior of Readline.
+<LI><A HREF="readline.html#SEC25">Custom Functions</A>: Adding your own functions to Readline.
+<LI><A HREF="readline.html#SEC28">Readline Variables</A>: Variables accessible to custom
+ functions.
+<LI><A HREF="readline.html#SEC29">Readline Convenience Functions</A>: Functions which Readline supplies to
+ aid in writing your own custom
+ functions.
+<LI><A HREF="readline.html#SEC40">Readline Signal Handling</A>: How Readline behaves when it receives signals.
+<LI><A HREF="readline.html#SEC41">Custom Completers</A>: Supplanting or supplementing Readline's
+ completion functions.
+</UL>
+
+
+
+<H2><A NAME="SEC24" HREF="readline.html#TOC24">Basic Behavior</A></H2>
+
+<P>
+Many programs provide a command line interface, such as <CODE>mail</CODE>,
+<CODE>ftp</CODE>, and <CODE>sh</CODE>. For such programs, the default behaviour of
+Readline is sufficient. This section describes how to use Readline in
+the simplest way possible, perhaps to replace calls in your code to
+<CODE>gets()</CODE> or <CODE>fgets ()</CODE>.
+
+</P>
+<P>
+<A NAME="IDX97"></A>
+<A NAME="IDX98"></A>
+The function <CODE>readline ()</CODE> prints a prompt and then reads and returns
+a single line of text from the user. The line <CODE>readline</CODE>
+returns is allocated with <CODE>malloc ()</CODE>; you should <CODE>free ()</CODE>
+the line when you are done with it. The declaration for <CODE>readline</CODE>
+in ANSI C is
+
+</P>
+
+<PRE>
+<CODE>char *readline (char *<VAR>prompt</VAR>);</CODE>
+</PRE>
+
+<P>
+So, one might say
+
+<PRE>
+<CODE>char *line = readline ("Enter a line: ");</CODE>
+</PRE>
+
+<P>
+in order to read a line of text from the user.
+The line returned has the final newline removed, so only the
+text remains.
+
+</P>
+<P>
+If <CODE>readline</CODE> encounters an <CODE>EOF</CODE> while reading the line, and the
+line is empty at that point, then <CODE>(char *)NULL</CODE> is returned.
+Otherwise, the line is ended just as if a newline had been typed.
+
+</P>
+<P>
+If you want the user to be able to get at the line later, (with
+<KBD>C-p</KBD> for example), you must call <CODE>add_history ()</CODE> to save the
+line away in a <EM>history</EM> list of such lines.
+
+</P>
+
+<PRE>
+<CODE>add_history (line)</CODE>;
+</PRE>
+
+<P>
+For full details on the GNU History Library, see the associated manual.
+
+</P>
+<P>
+It is preferable to avoid saving empty lines on the history list, since
+users rarely have a burning need to reuse a blank line. Here is
+a function which usefully replaces the standard <CODE>gets ()</CODE> library
+function, and has the advantage of no static buffer to overflow:
+
+</P>
+
+<PRE>
+/* A static variable for holding the line. */
+static char *line_read = (char *)NULL;
+
+/* Read a string, and return a pointer to it. Returns NULL on EOF. */
+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 &#38;&#38; *line_read)
+ add_history (line_read);
+
+ return (line_read);
+}
+</PRE>
+
+<P>
+This function gives the user the default behaviour of <KBD>TAB</KBD>
+completion: completion on file names. If you do not want Readline to
+complete on filenames, you can change the binding of the <KBD>TAB</KBD> key
+with <CODE>rl_bind_key ()</CODE>.
+
+</P>
+
+<PRE>
+<CODE>int rl_bind_key (int <VAR>key</VAR>, int (*<VAR>function</VAR>)());</CODE>
+</PRE>
+
+<P>
+<CODE>rl_bind_key ()</CODE> takes two arguments: <VAR>key</VAR> is the character that
+you want to bind, and <VAR>function</VAR> is the address of the function to
+call when <VAR>key</VAR> is pressed. Binding <KBD>TAB</KBD> to <CODE>rl_insert ()</CODE>
+makes <KBD>TAB</KBD> insert itself.
+<CODE>rl_bind_key ()</CODE> returns non-zero if <VAR>key</VAR> is not a valid
+ASCII character code (between 0 and 255).
+
+</P>
+<P>
+Thus, to disable the default <KBD>TAB</KBD> behavior, the following suffices:
+
+<PRE>
+<CODE>rl_bind_key ('\t', rl_insert);</CODE>
+</PRE>
+
+<P>
+This code should be executed once at the start of your program; you
+might write a function called <CODE>initialize_readline ()</CODE> which
+performs this and other desired initializations, such as installing
+custom completers (see section <A HREF="readline.html#SEC41">Custom Completers</A>).
+
+</P>
+
+
+<H2><A NAME="SEC25" HREF="readline.html#TOC25">Custom Functions</A></H2>
+
+<P>
+Readline provides many functions for manipulating the text of
+the line, but it isn't possible to anticipate the needs of all
+programs. This section describes the various functions and variables
+defined within the Readline library which allow a user program to add
+customized functionality to Readline.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC26">The Function Type</A>: C declarations to make code readable.
+<LI><A HREF="readline.html#SEC27">Function Writing</A>: Variables and calling conventions.
+</UL>
+
+
+
+<H3><A NAME="SEC26" HREF="readline.html#TOC26">The Function Type</A></H3>
+
+<P>
+For readabilty, we declare a new type of object, called
+<EM>Function</EM>. A <CODE>Function</CODE> is a C function which
+returns an <CODE>int</CODE>. The type declaration for <CODE>Function</CODE> is:
+
+</P>
+<P>
+<CODE>typedef int Function ();</CODE>
+
+</P>
+<P>
+The reason for declaring this new type is to make it easier to write
+code describing pointers to C functions. Let us say we had a variable
+called <VAR>func</VAR> which was a pointer to a function. Instead of the
+classic C declaration
+
+</P>
+<P>
+<CODE>int (*)()func;</CODE>
+
+</P>
+<P>
+we may write
+
+</P>
+<P>
+<CODE>Function *func;</CODE>
+
+</P>
+<P>
+Similarly, there are
+
+</P>
+
+<PRE>
+typedef void VFunction ();
+typedef char *CPFunction (); and
+typedef char **CPPFunction ();
+</PRE>
+
+<P>
+for functions returning no value, <CODE>pointer to char</CODE>, and
+<CODE>pointer to pointer to char</CODE>, respectively.
+
+</P>
+
+
+<H3><A NAME="SEC27" HREF="readline.html#TOC27">Writing a New Function</A></H3>
+
+<P>
+In order to write new functions for Readline, you need to know the
+calling conventions for keyboard-invoked functions, and the names of the
+variables that describe the current state of the line read so far.
+
+</P>
+<P>
+The calling sequence for a command <CODE>foo</CODE> looks like
+
+</P>
+
+<PRE>
+<CODE>foo (int count, int key)</CODE>
+</PRE>
+
+<P>
+where <VAR>count</VAR> is the numeric argument (or 1 if defaulted) and
+<VAR>key</VAR> is the key that invoked this function.
+
+</P>
+<P>
+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.
+
+</P>
+
+
+<H2><A NAME="SEC28" HREF="readline.html#TOC28">Readline Variables</A></H2>
+
+<P>
+These variables are available to function writers.
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_line_buffer</B>
+<DD><A NAME="IDX99"></A>
+This is the line gathered so far. You are welcome to modify the
+contents of the line, but see section <A HREF="readline.html#SEC34">Allowing Undoing</A>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_point</B>
+<DD><A NAME="IDX100"></A>
+The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
+(the <EM>point</EM>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_end</B>
+<DD><A NAME="IDX101"></A>
+The number of characters present in <CODE>rl_line_buffer</CODE>. When
+<CODE>rl_point</CODE> is at the end of the line, <CODE>rl_point</CODE> and
+<CODE>rl_end</CODE> are equal.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_mark</B>
+<DD><A NAME="IDX102"></A>
+The mark (saved position) in the current line. If set, the mark
+and point define a <EM>region</EM>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_done</B>
+<DD><A NAME="IDX103"></A>
+Setting this to a non-zero value causes Readline to return the current
+line immediately.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_pending_input</B>
+<DD><A NAME="IDX104"></A>
+Setting this to a value makes it the next keystroke read. This is a
+way to stuff a single character into the input stream.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_erase_empty_line</B>
+<DD><A NAME="IDX105"></A>
+Setting this to a non-zero value causes Readline to completely erase
+the current line, including any prompt, any time a newline is typed as
+the only character on an otherwise-empty line. The cursor is moved to
+the beginning of the newly-blank line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_prompt</B>
+<DD><A NAME="IDX106"></A>
+The prompt Readline uses. This is set from the argument to
+<CODE>readline ()</CODE>, and should not be assigned to directly.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_library_version</B>
+<DD><A NAME="IDX107"></A>
+The version number of this revision of the library.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_terminal_name</B>
+<DD><A NAME="IDX108"></A>
+The terminal type, used for initialization.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_readline_name</B>
+<DD><A NAME="IDX109"></A>
+This variable is set to a unique name by each application using Readline.
+The value allows conditional parsing of the inputrc file
+(see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> FILE * <B>rl_instream</B>
+<DD><A NAME="IDX110"></A>
+The stdio stream from which Readline reads input.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> FILE * <B>rl_outstream</B>
+<DD><A NAME="IDX111"></A>
+The stdio stream to which Readline performs output.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_startup_hook</B>
+<DD><A NAME="IDX112"></A>
+If non-zero, this is the address of a function to call just
+before <CODE>readline</CODE> prints the first prompt.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_pre_input_hook</B>
+<DD><A NAME="IDX113"></A>
+If non-zero, this is the address of a function to call after
+the first prompt has been printed and just before <CODE>readline</CODE>
+starts reading input characters.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_event_hook</B>
+<DD><A NAME="IDX114"></A>
+If non-zero, this is the address of a function to call periodically
+when readline is waiting for terminal input.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_getc_function</B>
+<DD><A NAME="IDX115"></A>
+If non-zero, <CODE>readline</CODE> will call indirectly through this pointer
+to get a character from the input stream. By default, it is set to
+<CODE>rl_getc</CODE>, the default <CODE>readline</CODE> character input function
+(see section <A HREF="readline.html#SEC37">Utility Functions</A>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> VFunction * <B>rl_redisplay_function</B>
+<DD><A NAME="IDX116"></A>
+If non-zero, <CODE>readline</CODE> will call indirectly through this pointer
+to update the display with the current contents of the editing buffer.
+By default, it is set to <CODE>rl_redisplay</CODE>, the default <CODE>readline</CODE>
+redisplay function (see section <A HREF="readline.html#SEC35">Redisplay</A>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B>
+<DD><A NAME="IDX117"></A>
+This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+currently executing readline function was found.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B>
+<DD><A NAME="IDX118"></A>
+This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+last key binding occurred.
+</DL>
+
+</P>
+
+
+<H2><A NAME="SEC29" HREF="readline.html#TOC29">Readline Convenience Functions</A></H2>
+
+
+<UL>
+<LI><A HREF="readline.html#SEC30">Function Naming</A>: How to give a function you write a name.
+<LI><A HREF="readline.html#SEC31">Keymaps</A>: Making keymaps.
+<LI><A HREF="readline.html#SEC32">Binding Keys</A>: Changing Keymaps.
+<LI><A HREF="readline.html#SEC33">Associating Function Names and Bindings</A>: Translate function names to
+ key sequences.
+<LI><A HREF="readline.html#SEC34">Allowing Undoing</A>: How to make your functions undoable.
+<LI><A HREF="readline.html#SEC35">Redisplay</A>: Functions to control line display.
+<LI><A HREF="readline.html#SEC36">Modifying Text</A>: Functions to modify <CODE>rl_line_buffer</CODE>.
+<LI><A HREF="readline.html#SEC37">Utility Functions</A>: Generally useful functions and hooks.
+<LI><A HREF="readline.html#SEC38">Alternate Interface</A>: Using Readline in a `callback' fashion.
+</UL>
+
+
+
+<H3><A NAME="SEC30" HREF="readline.html#TOC30">Naming a Function</A></H3>
+
+<P>
+The user can dynamically change the bindings of keys while using
+Readline. This is done by representing the function with a descriptive
+name. The user is able to type the descriptive name when referring to
+the function. Thus, in an init file, one might find
+
+</P>
+
+<PRE>
+Meta-Rubout: backward-kill-word
+</PRE>
+
+<P>
+This binds the keystroke <KBD>Meta-Rubout</KBD> to the function
+<EM>descriptively</EM> named <CODE>backward-kill-word</CODE>. You, as the
+programmer, should bind the functions you write to descriptive names as
+well. Readline provides a function for doing that:
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(char *name, Function *function, int key)</I>
+<DD><A NAME="IDX119"></A>
+Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be
+the function that gets called. If <VAR>key</VAR> is not -1, then bind it to
+<VAR>function</VAR> using <CODE>rl_bind_key ()</CODE>.
+</DL>
+
+</P>
+<P>
+Using this function alone is sufficient for most applications. It is
+the recommended way to add a few functions to the default functions that
+Readline has built in. If you need to do something other
+than adding a function to Readline, you may need to use the
+underlying functions described below.
+
+</P>
+
+
+<H3><A NAME="SEC31" HREF="readline.html#TOC31">Selecting a Keymap</A></H3>
+
+<P>
+Key bindings take place on a <EM>keymap</EM>. The keymap is the
+association between the keys that the user types and the functions that
+get run. You can make your own keymaps, copy existing keymaps, and tell
+Readline which keymap to use.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>()</I>
+<DD><A NAME="IDX120"></A>
+Returns a new, empty keymap. The space for the keymap is allocated with
+<CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> it when you are done.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I>
+<DD><A NAME="IDX121"></A>
+Return a new keymap which is a copy of <VAR>map</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>()</I>
+<DD><A NAME="IDX122"></A>
+Return a new keymap with the printing characters bound to rl_insert,
+the lowercase Meta characters bound to run their equivalents, and
+the Meta digits bound to produce numeric arguments.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I>
+<DD><A NAME="IDX123"></A>
+Free the storage associated with <VAR>keymap</VAR>.
+</DL>
+
+</P>
+<P>
+Readline has several internal keymaps. These functions allow you to
+change which keymap is active.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>()</I>
+<DD><A NAME="IDX124"></A>
+Returns the currently active keymap.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I>
+<DD><A NAME="IDX125"></A>
+Makes <VAR>keymap</VAR> the currently active keymap.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(char *name)</I>
+<DD><A NAME="IDX126"></A>
+Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I>
+<DD><A NAME="IDX127"></A>
+Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC32" HREF="readline.html#TOC32">Binding Keys</A></H3>
+
+<P>
+You associate keys with functions through the keymap. Readline has
+several internal keymaps: <CODE>emacs_standard_keymap</CODE>,
+<CODE>emacs_meta_keymap</CODE>, <CODE>emacs_ctlx_keymap</CODE>,
+<CODE>vi_movement_keymap</CODE>, and <CODE>vi_insertion_keymap</CODE>.
+<CODE>emacs_standard_keymap</CODE> is the default, and the examples in
+this manual assume that.
+
+</P>
+<P>
+These functions manage key bindings.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, Function *function)</I>
+<DD><A NAME="IDX128"></A>
+Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
+Returns non-zero in the case of an invalid <VAR>key</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, Function *function, Keymap map)</I>
+<DD><A NAME="IDX129"></A>
+Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. Returns non-zero in the case
+of an invalid <VAR>key</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I>
+<DD><A NAME="IDX130"></A>
+Bind <VAR>key</VAR> to the null function in the currently active keymap.
+Returns non-zero in case of error.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I>
+<DD><A NAME="IDX131"></A>
+Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
+Returns non-zero in case of error.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(Function *function, Keymap map)</I>
+<DD><A NAME="IDX132"></A>
+Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(char *command, Keymap map)</I>
+<DD><A NAME="IDX133"></A>
+Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, char *keyseq, char *data, Keymap map)</I>
+<DD><A NAME="IDX134"></A>
+Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
+pointer <VAR>data</VAR>. <VAR>type</VAR> says what kind of data is pointed to by
+<VAR>data</VAR>; this can be a function (<CODE>ISFUNC</CODE>), a macro
+(<CODE>ISMACR</CODE>), or a keymap (<CODE>ISKMAP</CODE>). This makes new keymaps as
+necessary. The initial keymap in which to do bindings is <VAR>map</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I>
+<DD><A NAME="IDX135"></A>
+Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
+perform any key bindings and variable assignments found
+(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(char *filename)</I>
+<DD><A NAME="IDX136"></A>
+Read keybindings and variable assignments from <VAR>filename</VAR>
+(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC33" HREF="readline.html#TOC33">Associating Function Names and Bindings</A></H3>
+
+<P>
+These functions allow you to find out what keys invoke named functions
+and the functions invoked by a particular key sequence.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Function * <B>rl_named_function</B> <I>(char *name)</I>
+<DD><A NAME="IDX137"></A>
+Return the function with name <VAR>name</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> Function * <B>rl_function_of_keyseq</B> <I>(char *keyseq, Keymap map, int *type)</I>
+<DD><A NAME="IDX138"></A>
+Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
+If <VAR>map</VAR> is NULL, the current keymap is used. If <VAR>type</VAR> is
+not NULL, the type of the object is returned in it (one of <CODE>ISFUNC</CODE>,
+<CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(Function *function)</I>
+<DD><A NAME="IDX139"></A>
+Return an array of strings representing the key sequences used to
+invoke <VAR>function</VAR> in the current keymap.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(Function *function, Keymap map)</I>
+<DD><A NAME="IDX140"></A>
+Return an array of strings representing the key sequences used to
+invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I>
+<DD><A NAME="IDX141"></A>
+Print the readline function names and the key sequences currently
+bound to them to <CODE>rl_outstream</CODE>. If <VAR>readable</VAR> is non-zero,
+the list is formatted in such a way that it can be made part of an
+<CODE>inputrc</CODE> file and re-read.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>()</I>
+<DD><A NAME="IDX142"></A>
+Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC34" HREF="readline.html#TOC34">Allowing Undoing</A></H3>
+
+<P>
+Supporting the undo command is a painless thing, and makes your
+functions much more useful. It is certainly easy to try
+something if you know you can undo it. I could use an undo function for
+the stock market.
+
+</P>
+<P>
+If your function simply inserts text once, or deletes text once, and
+uses <CODE>rl_insert_text ()</CODE> or <CODE>rl_delete_text ()</CODE> to do it, then
+undoing is already done for you automatically.
+
+</P>
+<P>
+If you do multiple insertions or multiple deletions, or any combination
+of these operations, you should group them together into one operation.
+This is done with <CODE>rl_begin_undo_group ()</CODE> and
+<CODE>rl_end_undo_group ()</CODE>.
+
+</P>
+<P>
+The types of events that can be undone are:
+
+</P>
+
+<PRE>
+enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
+</PRE>
+
+<P>
+Notice that <CODE>UNDO_DELETE</CODE> means to insert some text, and
+<CODE>UNDO_INSERT</CODE> means to delete some text. That is, the undo code
+tells undo what to undo, not how to undo it. <CODE>UNDO_BEGIN</CODE> and
+<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group ()</CODE> and
+<CODE>rl_end_undo_group ()</CODE>.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>()</I>
+<DD><A NAME="IDX143"></A>
+Begins saving undo information in a group construct. The undo
+information usually comes from calls to <CODE>rl_insert_text ()</CODE> and
+<CODE>rl_delete_text ()</CODE>, but could be the result of calls to
+<CODE>rl_add_undo ()</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>()</I>
+<DD><A NAME="IDX144"></A>
+Closes the current undo group started with <CODE>rl_begin_undo_group
+()</CODE>. There should be one call to <CODE>rl_end_undo_group ()</CODE>
+for each call to <CODE>rl_begin_undo_group ()</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I>
+<DD><A NAME="IDX145"></A>
+Remember how to undo an event (according to <VAR>what</VAR>). The affected
+text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>free_undo_list</B> <I>()</I>
+<DD><A NAME="IDX146"></A>
+Free the existing undo list.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_do_undo</B> <I>()</I>
+<DD><A NAME="IDX147"></A>
+Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was
+nothing to undo, non-zero if something was undone.
+</DL>
+
+</P>
+<P>
+Finally, if you neither insert nor delete text, but directly modify the
+existing text (e.g., change its case), call <CODE>rl_modifying ()</CODE>
+once, just before you modify the text. You must supply the indices of
+the text range that you are going to modify.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I>
+<DD><A NAME="IDX148"></A>
+Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
+single undo unit. It is assumed that you will subsequently modify
+that text.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC35" HREF="readline.html#TOC35">Redisplay</A></H3>
+
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_redisplay</B> <I>()</I>
+<DD><A NAME="IDX149"></A>
+Change what's displayed on the screen to reflect the current contents
+of <CODE>rl_line_buffer</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>()</I>
+<DD><A NAME="IDX150"></A>
+Force the line to be updated and redisplayed, whether or not
+Readline thinks the screen display is correct.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>()</I>
+<DD><A NAME="IDX151"></A>
+Tell the update routines that we have moved onto a new (empty) line,
+usually after ouputting a newline.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>()</I>
+<DD><A NAME="IDX152"></A>
+Reset the display state to a clean state and redisplay the current line
+starting on a new line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_message</B> <I>(va_alist)</I>
+<DD><A NAME="IDX153"></A>
+The arguments are a string as would be supplied to <CODE>printf</CODE>. The
+resulting string is displayed in the <EM>echo area</EM>. The echo area
+is also used to display numeric arguments and search strings.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_clear_message</B> <I>()</I>
+<DD><A NAME="IDX154"></A>
+Clear the message in the echo area.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>()</I>
+<DD><A NAME="IDX155"></A>
+Save the local Readline prompt display state in preparation for
+displaying a new message in the message area with <CODE>rl_message</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>()</I>
+<DD><A NAME="IDX156"></A>
+Restore the local Readline prompt display state saved by the most
+recent call to <CODE>rl_save_prompt</CODE>.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC36" HREF="readline.html#TOC36">Modifying Text</A></H3>
+
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(char *text)</I>
+<DD><A NAME="IDX157"></A>
+Insert <VAR>text</VAR> into the line at the current cursor position.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I>
+<DD><A NAME="IDX158"></A>
+Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I>
+<DD><A NAME="IDX159"></A>
+Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
+the current line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I>
+<DD><A NAME="IDX160"></A>
+Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
+to the kill ring, appending or prepending to the last kill if the
+last command was a kill command. The text is deleted.
+If <VAR>start</VAR> is less than <VAR>end</VAR>,
+the text is appended, otherwise prepended. If the last command was
+not a kill, a new kill ring slot is used.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC37" HREF="readline.html#TOC37">Utility Functions</A></H3>
+
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_read_key</B> <I>()</I>
+<DD><A NAME="IDX161"></A>
+Return the next character available. This handles input inserted into
+the input stream via <VAR>pending input</VAR> (see section <A HREF="readline.html#SEC28">Readline Variables</A>)
+and <CODE>rl_stuff_char ()</CODE>, macros, and characters read from the keyboard.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *)</I>
+<DD><A NAME="IDX162"></A>
+Return the next character available from the keyboard.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I>
+<DD><A NAME="IDX163"></A>
+Insert <VAR>c</VAR> into the Readline input stream. It will be "read"
+before Readline attempts to read characters from the terminal with
+<CODE>rl_read_key ()</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> rl_extend_line_buffer <B>(int</B> <I>len)</I>
+<DD><A NAME="IDX164"></A>
+Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
+characters, possibly reallocating it if necessary.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_initialize</B> <I>()</I>
+<DD><A NAME="IDX165"></A>
+Initialize or re-initialize Readline's internal state.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(char *terminal_name)</I>
+<DD><A NAME="IDX166"></A>
+Reinitialize Readline's idea of the terminal settings using
+<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>).
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>alphabetic</B> <I>(int c)</I>
+<DD><A NAME="IDX167"></A>
+Return 1 if <VAR>c</VAR> is an alphabetic character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>numeric</B> <I>(int c)</I>
+<DD><A NAME="IDX168"></A>
+Return 1 if <VAR>c</VAR> is a numeric character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>ding</B> <I>()</I>
+<DD><A NAME="IDX169"></A>
+Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I>
+<DD><A NAME="IDX170"></A>
+A convenience function for displaying a list of strings in
+columnar format on Readline's output stream. <CODE>matches</CODE> is the list
+of strings, in argv format, such as a list of completion matches.
+<CODE>len</CODE> is the number of strings in <CODE>matches</CODE>, and <CODE>max</CODE>
+is the length of the longest string in <CODE>matches</CODE>. This function uses
+the setting of <CODE>print-completions-horizontally</CODE> to select how the
+matches are displayed (see section <A HREF="readline.html#SEC10">Readline Init File Syntax</A>).
+</DL>
+
+</P>
+<P>
+The following are implemented as macros, defined in <CODE>chartypes.h</CODE>.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>uppercase_p</B> <I>(int c)</I>
+<DD><A NAME="IDX171"></A>
+Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>lowercase_p</B> <I>(int c)</I>
+<DD><A NAME="IDX172"></A>
+Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>digit_p</B> <I>(int c)</I>
+<DD><A NAME="IDX173"></A>
+Return 1 if <VAR>c</VAR> is a numeric character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>to_upper</B> <I>(int c)</I>
+<DD><A NAME="IDX174"></A>
+If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
+uppercase character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>to_lower</B> <I>(int c)</I>
+<DD><A NAME="IDX175"></A>
+If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
+lowercase character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>digit_value</B> <I>(int c)</I>
+<DD><A NAME="IDX176"></A>
+If <VAR>c</VAR> is a number, return the value it represents.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC38" HREF="readline.html#TOC38">Alternate Interface</A></H3>
+
+<P>
+An alternate interface is available to plain <CODE>readline()</CODE>. Some
+applications need to interleave keyboard I/O with file, device, or
+window system I/O, typically by using a main loop to <CODE>select()</CODE>
+on various file descriptors. To accomodate this need, readline can
+also be invoked as a `callback' function from an event loop. There
+are functions available to make this easy.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(char *prompt, Vfunction *lhandler)</I>
+<DD><A NAME="IDX177"></A>
+Set up the terminal for readline I/O and display the initial
+expanded value of <VAR>prompt</VAR>. Save the value of <VAR>lhandler</VAR> to
+use as a callback when a complete line of input has been entered.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>()</I>
+<DD><A NAME="IDX178"></A>
+Whenever an application determines that keyboard input is available, it
+should call <CODE>rl_callback_read_char()</CODE>, which will read the next
+character from the current input source. If that character completes the
+line, <CODE>rl_callback_read_char</CODE> will invoke the <VAR>lhandler</VAR>
+function saved by <CODE>rl_callback_handler_install</CODE> to process the
+line. <CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a
+<CODE>NULL</CODE> line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>()</I>
+<DD><A NAME="IDX179"></A>
+Restore the terminal to its initial state and remove the line handler.
+This may be called from within a callback as well as independently.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC39" HREF="readline.html#TOC39">An Example</A></H3>
+
+<P>
+Here is a function which changes lowercase characters to their uppercase
+equivalents, and uppercase characters to lowercase. If
+this function was bound to <SAMP>`M-c'</SAMP>, then typing <SAMP>`M-c'</SAMP> would
+change the case of the character under point. Typing <SAMP>`M-1 0 M-c'</SAMP>
+would change the case of the following 10 characters, leaving the cursor on
+the last character changed.
+
+</P>
+
+<PRE>
+/* 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 &#62;= rl_end)
+ return (0);
+
+ if (count &#60; 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 &#62; rl_end)
+ end = rl_end;
+ else if (end &#60; 0)
+ end = 0;
+
+ if (start == end)
+ return (0);
+
+ if (start &#62; 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);
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC40" HREF="readline.html#TOC40">Readline Signal Handling</A></H2>
+
+<P>
+Signals are asynchronous events sent to a process by the Unix kernel,
+sometimes on behalf of another process. They are intended to indicate
+exceptional events, like a user pressing the interrupt key on his
+terminal, or a network connection being broken. There is a class of
+signals that can be sent to the process currently reading input from
+the keyboard. Since Readline changes the terminal attributes when it
+is called, it needs to perform special processing when a signal is
+received to restore the terminal to a sane state, or provide application
+writers with functions to do so manually.
+
+</P>
+<P>
+Readline contains an internal signal handler that is installed for a
+number of signals (<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>,
+<CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>).
+When one of these signals is received, the signal handler
+will reset the terminal attributes to those that were in effect before
+<CODE>readline ()</CODE> was called, reset the signal handling to what it was
+before <CODE>readline ()</CODE> was called, and resend the signal to the calling
+application.
+If and when the calling application's signal handler returns, Readline
+will reinitialize the terminal and continue to accept input.
+When a <CODE>SIGINT</CODE> is received, the Readline signal handler performs
+some additional work, which will cause any partially-entered line to be
+aborted (see the description of <CODE>rl_free_line_state ()</CODE>).
+
+</P>
+<P>
+There is an additional Readline signal handler, for <CODE>SIGWINCH</CODE>, which
+the kernel sends to a process whenever the terminal's size changes (for
+example, if a user resizes an <CODE>xterm</CODE>). The Readline <CODE>SIGWINCH</CODE>
+handler updates Readline's internal screen size state, and then calls any
+<CODE>SIGWINCH</CODE> signal handler the calling application has installed.
+Readline calls the application's <CODE>SIGWINCH</CODE> signal handler without
+resetting the terminal to its original state. If the application's signal
+handler does more than update its idea of the terminal size and return (for
+example, a <CODE>longjmp</CODE> back to a main processing loop), it <EM>must</EM>
+call <CODE>rl_cleanup_after_signal ()</CODE> (described below), to restore the
+terminal state.
+
+</P>
+<P>
+Readline provides two variables that allow application writers to
+control whether or not it will catch certain signals and act on them
+when they are received. It is important that applications change the
+values of these variables only when calling <CODE>readline ()</CODE>, not in
+a signal handler, so Readline's internal signal state is not corrupted.
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_catch_signals</B>
+<DD><A NAME="IDX180"></A>
+If this variable is non-zero, Readline will install signal handlers for
+<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>,
+<CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>.
+
+</P>
+<P>
+The default value of <CODE>rl_catch_signals</CODE> is 1.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B>
+<DD><A NAME="IDX181"></A>
+If this variable is non-zero, Readline will install a signal handler for
+<CODE>SIGWINCH</CODE>.
+
+</P>
+<P>
+The default value of <CODE>rl_catch_sigwinch</CODE> is 1.
+</DL>
+
+</P>
+<P>
+If an application does not wish to have Readline catch any signals, or
+to handle signals other than those Readline catches (<CODE>SIGHUP</CODE>,
+for example),
+Readline provides convenience functions to do the necessary terminal
+and internal state cleanup upon receipt of a signal.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I>
+<DD><A NAME="IDX182"></A>
+This function will reset the state of the terminal to what it was before
+<CODE>readline ()</CODE> was called, and remove the Readline signal handlers for
+all signals, depending on the values of <CODE>rl_catch_signals</CODE> and
+<CODE>rl_catch_sigwinch</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I>
+<DD><A NAME="IDX183"></A>
+This will free any partial state associated with the current input line
+(undo information, any partial history entry, any partially-entered
+keyboard macro, and any partially-entered numeric argument). This
+should be called before <CODE>rl_cleanup_after_signal ()</CODE>. The
+Readline signal handler for <CODE>SIGINT</CODE> calls this to abort the
+current input line.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I>
+<DD><A NAME="IDX184"></A>
+This will reinitialize the terminal and reinstall any Readline signal
+handlers, depending on the values of <CODE>rl_catch_signals</CODE> and
+<CODE>rl_catch_sigwinch</CODE>.
+</DL>
+
+</P>
+<P>
+If an application does not wish Readline to catch <CODE>SIGWINCH</CODE>, it may
+call <CODE>rl_resize_terminal ()</CODE> to force Readline to update its idea of
+the terminal size when a <CODE>SIGWINCH</CODE> is received.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I>
+<DD><A NAME="IDX185"></A>
+Update Readline's internal screen size.
+</DL>
+
+</P>
+<P>
+The following functions install and remove Readline's signal handlers.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I>
+<DD><A NAME="IDX186"></A>
+Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
+<CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>,
+<CODE>SIGTTOU</CODE>, and <CODE>SIGWINCH</CODE>, depending on the values of
+<CODE>rl_catch_signals</CODE> and <CODE>rl_catch_sigwinch</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I>
+<DD><A NAME="IDX187"></A>
+Remove all of the Readline signal handlers installed by
+<CODE>rl_set_signals ()</CODE>.
+</DL>
+
+</P>
+
+
+<H2><A NAME="SEC41" HREF="readline.html#TOC41">Custom Completers</A></H2>
+
+<P>
+Typically, a program that reads commands from the user has a way of
+disambiguating commands and data. If your program is one of these, then
+it can provide completion for commands, data, or both.
+The following sections describe how your program and Readline
+cooperate to provide this service.
+
+</P>
+
+<UL>
+<LI><A HREF="readline.html#SEC42">How Completing Works</A>: The logic used to do completion.
+<LI><A HREF="readline.html#SEC43">Completion Functions</A>: Functions provided by Readline.
+<LI><A HREF="readline.html#SEC44">Completion Variables</A>: Variables which control completion.
+<LI><A HREF="readline.html#SEC45">A Short Completion Example</A>: An example of writing completer subroutines.
+</UL>
+
+
+
+<H3><A NAME="SEC42" HREF="readline.html#TOC42">How Completing Works</A></H3>
+
+<P>
+In order to complete some text, the full list of possible completions
+must be available. That is, it is not possible to accurately
+expand a partial word without knowing all of the possible words
+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.
+
+</P>
+<P>
+There are three major functions used to perform completion:
+
+</P>
+
+<OL>
+<LI>
+
+The user-interface function <CODE>rl_complete ()</CODE>. This function is
+called with the same arguments as other Readline
+functions intended for interactive use: <VAR>count</VAR> and
+<VAR>invoking_key</VAR>. It isolates the word to be completed and calls
+<CODE>completion_matches ()</CODE> to generate a list of possible completions.
+It then either lists the possible completions, inserts the possible
+completions, or actually performs the
+completion, depending on which behavior is desired.
+
+<LI>
+
+The internal function <CODE>completion_matches ()</CODE> uses your
+<EM>generator</EM> function to generate the list of possible matches, and
+then returns the array of these matches. You should place the address
+of your generator function in <CODE>rl_completion_entry_function</CODE>.
+
+<LI>
+
+The generator function is called repeatedly from
+<CODE>completion_matches ()</CODE>, returning a string each time. The
+arguments to the generator function are <VAR>text</VAR> and <VAR>state</VAR>.
+<VAR>text</VAR> is the partial word to be completed. <VAR>state</VAR> is zero the
+first time the function is called, allowing the generator to perform
+any necessary initialization, and a positive non-zero integer for
+each subsequent call. When the generator function returns
+<CODE>(char *)NULL</CODE> this signals <CODE>completion_matches ()</CODE> that there are
+no more possibilities left. Usually the generator function computes the
+list of possible completions when <VAR>state</VAR> is zero, and returns them
+one at a time on subsequent calls. Each string the generator function
+returns as a match must be allocated with <CODE>malloc()</CODE>; Readline
+frees the strings when it has finished with them.
+
+</OL>
+
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
+<DD><A NAME="IDX188"></A>
+Complete the word at or before point. You have supplied the function
+that does the initial simple matching selection algorithm (see
+<CODE>completion_matches ()</CODE>). The default is to do filename completion.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B>
+<DD><A NAME="IDX189"></A>
+This is a pointer to the generator function for <CODE>completion_matches
+()</CODE>. If the value of <CODE>rl_completion_entry_function</CODE> is
+<CODE>(Function *)NULL</CODE> then the default filename generator function,
+<CODE>filename_completion_function ()</CODE>, is used.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC43" HREF="readline.html#TOC43">Completion Functions</A></H3>
+
+<P>
+Here is the complete list of callable completion functions present in
+Readline.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I>
+<DD><A NAME="IDX190"></A>
+Complete the word at or before point. <VAR>what_to_do</VAR> says what to do
+with the completion. A value of <SAMP>`?'</SAMP> means list the possible
+completions. <SAMP>`TAB'</SAMP> means do standard completion. <SAMP>`*'</SAMP> means
+insert all of the possible completions. <SAMP>`!'</SAMP> means to display
+all of the possible completions, if there is more than one, as well as
+performing partial completion.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
+<DD><A NAME="IDX191"></A>
+Complete the word at or before point. You have supplied the function
+that does the initial simple matching selection algorithm (see
+<CODE>completion_matches ()</CODE> and <CODE>rl_completion_entry_function</CODE>).
+The default is to do filename
+completion. This calls <CODE>rl_complete_internal ()</CODE> with an
+argument depending on <VAR>invoking_key</VAR>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key))</I>
+<DD><A NAME="IDX192"></A>
+List the possible completions. See description of <CODE>rl_complete
+()</CODE>. This calls <CODE>rl_complete_internal ()</CODE> with an argument of
+<SAMP>`?'</SAMP>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key))</I>
+<DD><A NAME="IDX193"></A>
+Insert the list of possible completions into the line, deleting the
+partially-completed word. See description of <CODE>rl_complete ()</CODE>.
+This calls <CODE>rl_complete_internal ()</CODE> with an argument of <SAMP>`*'</SAMP>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char ** <B>completion_matches</B> <I>(char *text, CPFunction *entry_func)</I>
+<DD><A NAME="IDX194"></A>
+Returns an array of <CODE>(char *)</CODE> which is a list of completions for
+<VAR>text</VAR>. If there are no completions, returns <CODE>(char **)NULL</CODE>.
+The first entry in the returned array is the substitution for <VAR>text</VAR>.
+The remaining entries are the possible completions. The array is
+terminated with a <CODE>NULL</CODE> pointer.
+
+</P>
+<P>
+<VAR>entry_func</VAR> is a function of two args, and returns a
+<CODE>(char *)</CODE>. The first argument is <VAR>text</VAR>. The second is a
+state argument; it is zero on the first call, and non-zero on subsequent
+calls. <VAR>entry_func</VAR> returns a <CODE>NULL</CODE> pointer to the caller
+when there are no more matches.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>filename_completion_function</B> <I>(char *text, int state)</I>
+<DD><A NAME="IDX195"></A>
+A generator function for filename completion in the general case. Note
+that completion in Bash is a little different because of all
+the pathnames that must be followed when looking up completions for a
+command. The Bash source is a useful reference for writing custom
+completion functions.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> char * <B>username_completion_function</B> <I>(char *text, int state)</I>
+<DD><A NAME="IDX196"></A>
+A completion generator for usernames. <VAR>text</VAR> contains a partial
+username preceded by a random character (usually <SAMP>`~'</SAMP>). As with all
+completion generators, <VAR>state</VAR> is zero on the first call and non-zero
+for subsequent calls.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC44" HREF="readline.html#TOC44">Completion Variables</A></H3>
+
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B>
+<DD><A NAME="IDX197"></A>
+A pointer to the generator function for <CODE>completion_matches ()</CODE>.
+<CODE>NULL</CODE> means to use <CODE>filename_entry_function ()</CODE>, the default
+filename completer.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> CPPFunction * <B>rl_attempted_completion_function</B>
+<DD><A NAME="IDX198"></A>
+A pointer to an alternative function to create matches.
+The function is called with <VAR>text</VAR>, <VAR>start</VAR>, and <VAR>end</VAR>.
+<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> saying
+what the boundaries of <VAR>text</VAR> are. If this function exists and
+returns <CODE>NULL</CODE>, or if this variable is set to <CODE>NULL</CODE>, then
+<CODE>rl_complete ()</CODE> will call the value of
+<CODE>rl_completion_entry_function</CODE> to generate matches, otherwise the
+array of strings returned will be used.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> CPFunction * <B>rl_filename_quoting_function</B>
+<DD><A NAME="IDX199"></A>
+A pointer to a function that will quote a filename in an application-
+specific fashion. This is called if filename completion is being
+attempted and one of the characters in <CODE>rl_filename_quote_characters</CODE>
+appears in a completed filename. The function is called with
+<VAR>text</VAR>, <VAR>match_type</VAR>, and <VAR>quote_pointer</VAR>. The <VAR>text</VAR>
+is the filename to be quoted. The <VAR>match_type</VAR> is either
+<CODE>SINGLE_MATCH</CODE>, if there is only one completion match, or
+<CODE>MULT_MATCH</CODE>. Some functions use this to decide whether or not to
+insert a closing quote character. The <VAR>quote_pointer</VAR> is a pointer
+to any opening quote character the user typed. Some functions choose
+to reset this character.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> CPFunction * <B>rl_filename_dequoting_function</B>
+<DD><A NAME="IDX200"></A>
+A pointer to a function that will remove application-specific quoting
+characters from a filename before completion is attempted, so those
+characters do not interfere with matching the text against names in
+the filesystem. It is called with <VAR>text</VAR>, the text of the word
+to be dequoted, and <VAR>quote_char</VAR>, which is the quoting character
+that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>). If
+<VAR>quote_char</VAR> is zero, the filename was not in an embedded string.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_char_is_quoted_p</B>
+<DD><A NAME="IDX201"></A>
+A pointer to a function to call that determines whether or not a specific
+character in the line buffer is quoted, according to whatever quoting
+mechanism the program calling readline uses. The function is called with
+two arguments: <VAR>text</VAR>, the text of the line, and <VAR>index</VAR>, the
+index of the character in the line. It is used to decide whether a
+character found in <CODE>rl_completer_word_break_characters</CODE> should be
+used to break words for the completer.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_query_items</B>
+<DD><A NAME="IDX202"></A>
+Up to this many items will be displayed in response to a
+possible-completions call. After that, we ask the user if she is sure
+she wants to see them all. The default value is 100.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_basic_word_break_characters</B>
+<DD><A NAME="IDX203"></A>
+The basic list of characters that signal a break between words for the
+completer routine. The default value of this variable is the characters
+which break words for completion in Bash, i.e.,
+<CODE>" \t\n\"\\'`@$&#62;&#60;=;|&#38;{("</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_basic_quote_characters</B>
+<DD><A NAME="IDX204"></A>
+List of quote characters which can cause a word break.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_completer_word_break_characters</B>
+<DD><A NAME="IDX205"></A>
+The list of characters that signal a break between words for
+<CODE>rl_complete_internal ()</CODE>. The default list is the value of
+<CODE>rl_basic_word_break_characters</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_completer_quote_characters</B>
+<DD><A NAME="IDX206"></A>
+List of characters which can be used to quote a substring of the line.
+Completion occurs on the entire substring, and within the substring
+<CODE>rl_completer_word_break_characters</CODE> are treated as any other character,
+unless they also appear within this list.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_filename_quote_characters</B>
+<DD><A NAME="IDX207"></A>
+A list of characters that cause a filename to be quoted by the completer
+when they appear in a completed filename. The default is the null string.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> char * <B>rl_special_prefixes</B>
+<DD><A NAME="IDX208"></A>
+The list of characters that are word break characters, but should be
+left in <VAR>text</VAR> when it is passed to the completion function.
+Programs can use this to help determine what kind of completing to do.
+For instance, Bash sets this variable to "$@" so that it can complete
+shell variables and hostnames.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_completion_append_character</B>
+<DD><A NAME="IDX209"></A>
+When a single completion alternative matches at the end of the command
+line, this character is appended to the inserted completion text. The
+default is a space character (<SAMP>` '</SAMP>). Setting this to the null
+character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically.
+This can be changed in custom completion functions to
+provide the "most sensible word separator character" according to
+an application-specific command line syntax specification.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
+<DD><A NAME="IDX210"></A>
+If non-zero, then disallow duplicates in the matches. Default is 1.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
+<DD><A NAME="IDX211"></A>
+Non-zero means that the results of the matches are to be treated as
+filenames. This is <EM>always</EM> zero on entry, and can only be changed
+within a completion entry generator function. If it is set to a non-zero
+value, directory names have a slash appended and Readline attempts to
+quote completed filenames if they contain any embedded word break
+characters.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
+<DD><A NAME="IDX212"></A>
+Non-zero means that the results of the matches are to be quoted using
+double quotes (or an application-specific quoting mechanism) if the
+completed filename contains any characters in
+<CODE>rl_filename_quote_chars</CODE>. This is <EM>always</EM> non-zero
+on entry, and can only be changed within a completion entry generator
+function. The quoting is effected via a call to the function pointed to
+by <CODE>rl_filename_quoting_function</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
+<DD><A NAME="IDX213"></A>
+If this variable is non-zero, completion is inhibit&#60;ed. The completion
+character will be inserted as any other bound to <CODE>self-insert</CODE>.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_ignore_some_completions_function</B>
+<DD><A NAME="IDX214"></A>
+This function, if defined, is called by the completer when real filename
+completion is done, after all the matching names have been generated.
+It is passed a <CODE>NULL</CODE> terminated array of matches.
+The first element (<CODE>matches[0]</CODE>) is the
+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.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> Function * <B>rl_directory_completion_hook</B>
+<DD><A NAME="IDX215"></A>
+This function, if defined, is allowed to modify the directory portion
+of filenames Readline completes. It is called with the address of a
+string (the current directory name) as an argument. It could be used
+to expand symbolic links or shell variables in pathnames.
+</DL>
+
+</P>
+<P>
+<DL>
+<DT><U>Variable:</U> VFunction * <B>rl_completion_display_matches_hook</B>
+<DD><A NAME="IDX216"></A>
+If non-zero, then this is the address of a function to call when
+completing a word would normally display the list of possible matches.
+This function is called in lieu of Readline displaying the list.
+It takes three arguments:
+(<CODE>char **</CODE><VAR>matches</VAR>, <CODE>int</CODE> <VAR>num_matches</VAR>, <CODE>int</CODE> <VAR>max_length</VAR>)
+where <VAR>matches</VAR> is the array of matching strings,
+<VAR>num_matches</VAR> is the number of strings in that array, and
+<VAR>max_length</VAR> is the length of the longest string in that array.
+Readline provides a convenience function, <CODE>rl_display_match_list</CODE>,
+that takes care of doing the display to Readline's output stream. That
+function may be called from this hook.
+</DL>
+
+</P>
+
+
+<H3><A NAME="SEC45" HREF="readline.html#TOC45">A Short Completion Example</A></H3>
+
+<P>
+Here is a small application demonstrating the use of the GNU Readline
+library. It is called <CODE>fileman</CODE>, and the source code resides in
+<TT>`examples/fileman.c'</TT>. This sample application provides
+completion of command names, line editing features, and access to the
+history list.
+
+</P>
+
+<PRE>
+/* fileman.c -- A tiny application which demonstrates how to use the
+ GNU Readline library. This application interactively allows users
+ to manipulate files and their modes. */
+
+#include &#60;stdio.h&#62;
+#include &#60;sys/types.h&#62;
+#include &#60;sys/file.h&#62;
+#include &#60;sys/stat.h&#62;
+#include &#60;sys/errno.h&#62;
+
+#include &#60;readline/readline.h&#62;
+#include &#60;readline/history.h&#62;
+
+extern char *getwd ();
+extern char *xmalloc ();
+
+/* The names of functions that actually do the manipulation. */
+int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
+int com_delete (), com_help (), com_cd (), com_quit ();
+
+/* 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] &#38;&#38; whitespace (line[i]))
+ i++;
+ word = line + i;
+
+ while (line[i] &#38;&#38; !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-&#62;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 (&#38;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 &#62; s &#38;&#38; whitespace (*t))
+ t--;
+ *++t = '\0';
+
+ return s;
+}
+
+/* **************************************************************** */
+/* */
+/* Interface to Readline Completion */
+/* */
+/* **************************************************************** */
+
+char *command_generator ();
+char **fileman_completion ();
+
+/* Tell the GNU Readline library how to complete. We want to try to complete
+ on command names if this is the first word in the line, or on filenames
+ if not. */
+initialize_readline ()
+{
+ /* Allow conditional parsing of the ~/.inputrc file. */
+ rl_readline_name = "FileMan";
+
+ /* Tell the completer that we want a crack first. */
+ rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+}
+
+/* Attempt to complete on the contents of TEXT. START and END bound the
+ region of rl_line_buffer that contains the word to complete. TEXT is
+ the word to complete. We can use the entire contents of rl_line_buffer
+ in case we want to do some simple parsing. Return the array of matches,
+ or NULL if there aren't any. */
+char **
+fileman_completion (text, start, end)
+ char *text;
+ int start, end;
+{
+ char **matches;
+
+ matches = (char **)NULL;
+
+ /* If this word is at the start of the line, then it is a command
+ to complete. Otherwise it is the name of a file in the current
+ directory. */
+ if (start == 0)
+ matches = completion_matches (text, command_generator);
+
+ return (matches);
+}
+
+/* Generator function for command completion. STATE lets us know whether
+ to start from scratch; without any state (i.e. STATE == 0), then we
+ start at the top of the list. */
+char *
+command_generator (text, state)
+ char *text;
+ int state;
+{
+ static int list_index, len;
+ char *name;
+
+ /* If this is a new word to complete, initialize now. This includes
+ saving the length of TEXT for efficiency, and initializing the index
+ variable to 0. */
+ if (!state)
+ {
+ list_index = 0;
+ len = strlen (text);
+ }
+
+ /* Return the next name which partially matches from the command list. */
+ while (name = commands[list_index].name)
+ {
+ list_index++;
+
+ if (strncmp (name, text, len) == 0)
+ return (dupstr(name));
+ }
+
+ /* If no names matched, then return NULL. */
+ return ((char *)NULL);
+}
+
+/* **************************************************************** */
+/* */
+/* FileMan Commands */
+/* */
+/* **************************************************************** */
+
+/* String to pass to system (). This is for the LIST, VIEW and RENAME
+ commands. */
+static char syscom[1024];
+
+/* List the file(s) named in arg. */
+com_list (arg)
+ char *arg;
+{
+ if (!arg)
+ arg = "";
+
+ sprintf (syscom, "ls -FClg %s", arg);
+ return (system (syscom));
+}
+
+com_view (arg)
+ char *arg;
+{
+ if (!valid_argument ("view", arg))
+ return 1;
+
+ sprintf (syscom, "more %s", arg);
+ return (system (syscom));
+}
+
+com_rename (arg)
+ char *arg;
+{
+ too_dangerous ("rename");
+ return (1);
+}
+
+com_stat (arg)
+ char *arg;
+{
+ struct stat finfo;
+
+ if (!valid_argument ("stat", arg))
+ return (1);
+
+ if (stat (arg, &#38;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 (&#38;finfo.st_ctime));
+ printf (" Last access at: %s", ctime (&#38;finfo.st_atime));
+ printf (" Last modified at: %s", ctime (&#38;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);
+}
+</PRE>
+
+
+
+<H1><A NAME="SEC46" HREF="readline.html#TOC46">Concept Index</A></H1>
+<P>
+Jump to:
+<A HREF="#c">c</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#n">n</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#y">y</A>
+<P>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX3">command editing</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX4">editing command lines</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX8">initialization file, readline</A>
+<LI><A HREF="readline.html#IDX1">interaction, readline</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX7">kill ring</A>
+<LI><A HREF="readline.html#IDX5">killing text</A>
+</DIR>
+<H2><A NAME="n">n</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX2">notation, readline</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX98">readline, function</A>
+</DIR>
+<H2><A NAME="y">y</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX6">yanking text</A>
+</DIR>
+
+</P>
+
+
+<H1><A NAME="SEC47" HREF="readline.html#TOC47">Function and Variable Index</A></H1>
+<P>
+Jump to:
+<A HREF="#(">(</A>
+-
+<A HREF="#a">a</A>
+-
+<A HREF="#b">b</A>
+-
+<A HREF="#c">c</A>
+-
+<A HREF="#d">d</A>
+-
+<A HREF="#e">e</A>
+-
+<A HREF="#f">f</A>
+-
+<A HREF="#h">h</A>
+-
+<A HREF="#i">i</A>
+-
+<A HREF="#k">k</A>
+-
+<A HREF="#l">l</A>
+-
+<A HREF="#m">m</A>
+-
+<A HREF="#n">n</A>
+-
+<A HREF="#o">o</A>
+-
+<A HREF="#p">p</A>
+-
+<A HREF="#q">q</A>
+-
+<A HREF="#r">r</A>
+-
+<A HREF="#s">s</A>
+-
+<A HREF="#t">t</A>
+-
+<A HREF="#u">u</A>
+-
+<A HREF="#v">v</A>
+-
+<A HREF="#y">y</A>
+<P>
+<H2><A NAME="(">(</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX164">(int</A>
+</DIR>
+<H2><A NAME="a">a</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX83">abort (C-g)</A>
+<LI><A HREF="readline.html#IDX34">accept-line (Newline, Return)</A>
+<LI><A HREF="readline.html#IDX167">alphabetic</A>
+</DIR>
+<H2><A NAME="b">b</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX29">backward-char (C-b)</A>
+<LI><A HREF="readline.html#IDX48">backward-delete-char (Rubout)</A>
+<LI><A HREF="readline.html#IDX59">backward-kill-line (C-x Rubout)</A>
+<LI><A HREF="readline.html#IDX63">backward-kill-word (M-DEL)</A>
+<LI><A HREF="readline.html#IDX31">backward-word (M-b)</A>
+<LI><A HREF="readline.html#IDX37">beginning-of-history (M-&#38;#60;)</A>
+<LI><A HREF="readline.html#IDX26">beginning-of-line (C-a)</A>
+<LI><A HREF="readline.html#IDX9">bell-style</A>
+</DIR>
+<H2><A NAME="c">c</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX81">call-last-kbd-macro (C-x e)</A>
+<LI><A HREF="readline.html#IDX57">capitalize-word (M-c)</A>
+<LI><A HREF="readline.html#IDX91">character-search (C-])</A>
+<LI><A HREF="readline.html#IDX92">character-search-backward (M-C-])</A>
+<LI><A HREF="readline.html#IDX32">clear-screen (C-l)</A>
+<LI><A HREF="readline.html#IDX10">comment-begin</A>
+<LI><A HREF="readline.html#IDX74">complete (TAB)</A>
+<LI><A HREF="readline.html#IDX11">completion-query-items</A>
+<LI><A HREF="readline.html#IDX194">completion_matches</A>
+<LI><A HREF="readline.html#IDX12">convert-meta</A>
+<LI><A HREF="readline.html#IDX68">copy-backward-word ()</A>
+<LI><A HREF="readline.html#IDX69">copy-forward-word ()</A>
+<LI><A HREF="readline.html#IDX67">copy-region-as-kill ()</A>
+</DIR>
+<H2><A NAME="d">d</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX47">delete-char (C-d)</A>
+<LI><A HREF="readline.html#IDX78">delete-char-or-list ()</A>
+<LI><A HREF="readline.html#IDX65">delete-horizontal-space ()</A>
+<LI><A HREF="readline.html#IDX72">digit-argument (M-0, M-1, ... M--)</A>
+<LI><A HREF="readline.html#IDX173">digit_p</A>
+<LI><A HREF="readline.html#IDX176">digit_value</A>
+<LI><A HREF="readline.html#IDX169">ding</A>
+<LI><A HREF="readline.html#IDX13">disable-completion</A>
+<LI><A HREF="readline.html#IDX84">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A>
+<LI><A HREF="readline.html#IDX56">downcase-word (M-l)</A>
+<LI><A HREF="readline.html#IDX94">dump-functions ()</A>
+<LI><A HREF="readline.html#IDX96">dump-macros ()</A>
+<LI><A HREF="readline.html#IDX95">dump-variables ()</A>
+</DIR>
+<H2><A NAME="e">e</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX14">editing-mode</A>
+<LI><A HREF="readline.html#IDX15">enable-keypad</A>
+<LI><A HREF="readline.html#IDX80">end-kbd-macro (C-x ))</A>
+<LI><A HREF="readline.html#IDX38">end-of-history (M-&#38;#62;)</A>
+<LI><A HREF="readline.html#IDX27">end-of-line (C-e)</A>
+<LI><A HREF="readline.html#IDX90">exchange-point-and-mark (C-x C-x)</A>
+<LI><A HREF="readline.html#IDX16">expand-tilde</A>
+</DIR>
+<H2><A NAME="f">f</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX195">filename_completion_function</A>
+<LI><A HREF="readline.html#IDX49">forward-backward-delete-char ()</A>
+<LI><A HREF="readline.html#IDX28">forward-char (C-f)</A>
+<LI><A HREF="readline.html#IDX40">forward-search-history (C-s)</A>
+<LI><A HREF="readline.html#IDX30">forward-word (M-f)</A>
+<LI><A HREF="readline.html#IDX146">free_undo_list</A>
+</DIR>
+<H2><A NAME="h">h</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX44">history-search-backward ()</A>
+<LI><A HREF="readline.html#IDX43">history-search-forward ()</A>
+<LI><A HREF="readline.html#IDX17">horizontal-scroll-mode</A>
+</DIR>
+<H2><A NAME="i">i</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX18">input-meta</A>
+<LI><A HREF="readline.html#IDX93">insert-comment (M-#)</A>
+<LI><A HREF="readline.html#IDX76">insert-completions (M-*)</A>
+<LI><A HREF="readline.html#IDX20">isearch-terminators</A>
+</DIR>
+<H2><A NAME="k">k</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX21">keymap</A>
+<LI><A HREF="readline.html#IDX58">kill-line (C-k)</A>
+<LI><A HREF="readline.html#IDX66">kill-region ()</A>
+<LI><A HREF="readline.html#IDX61">kill-whole-line ()</A>
+<LI><A HREF="readline.html#IDX62">kill-word (M-d)</A>
+</DIR>
+<H2><A NAME="l">l</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX172">lowercase_p</A>
+</DIR>
+<H2><A NAME="m">m</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX22">mark-modified-lines</A>
+<LI><A HREF="readline.html#IDX77">menu-complete ()</A>
+<LI><A HREF="readline.html#IDX19">meta-flag</A>
+</DIR>
+<H2><A NAME="n">n</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX36">next-history (C-n)</A>
+<LI><A HREF="readline.html#IDX42">non-incremental-forward-search-history (M-n)</A>
+<LI><A HREF="readline.html#IDX41">non-incremental-reverse-search-history (M-p)</A>
+<LI><A HREF="readline.html#IDX168">numeric</A>
+</DIR>
+<H2><A NAME="o">o</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX23">output-meta</A>
+</DIR>
+<H2><A NAME="p">p</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX75">possible-completions (M-?)</A>
+<LI><A HREF="readline.html#IDX85">prefix-meta (ESC)</A>
+<LI><A HREF="readline.html#IDX35">previous-history (C-p)</A>
+</DIR>
+<H2><A NAME="q">q</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX50">quoted-insert (C-q, C-v)</A>
+</DIR>
+<H2><A NAME="r">r</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX82">re-read-init-file (C-x C-r)</A>
+<LI><A HREF="readline.html#IDX97">readline</A>
+<LI><A HREF="readline.html#IDX33">redraw-current-line ()</A>
+<LI><A HREF="readline.html#IDX39">reverse-search-history (C-r)</A>
+<LI><A HREF="readline.html#IDX87">revert-line (M-r)</A>
+<LI><A HREF="readline.html#IDX119">rl_add_defun</A>
+<LI><A HREF="readline.html#IDX145">rl_add_undo</A>
+<LI><A HREF="readline.html#IDX198">rl_attempted_completion_function</A>
+<LI><A HREF="readline.html#IDX204">rl_basic_quote_characters</A>
+<LI><A HREF="readline.html#IDX203">rl_basic_word_break_characters</A>
+<LI><A HREF="readline.html#IDX143">rl_begin_undo_group</A>
+<LI><A HREF="readline.html#IDX128">rl_bind_key</A>
+<LI><A HREF="readline.html#IDX129">rl_bind_key_in_map</A>
+<LI><A HREF="readline.html#IDX118">rl_binding_keymap</A>
+<LI><A HREF="readline.html#IDX177">rl_callback_handler_install</A>
+<LI><A HREF="readline.html#IDX179">rl_callback_handler_remove</A>
+<LI><A HREF="readline.html#IDX178">rl_callback_read_char</A>
+<LI><A HREF="readline.html#IDX180">rl_catch_signals</A>
+<LI><A HREF="readline.html#IDX181">rl_catch_sigwinch</A>
+<LI><A HREF="readline.html#IDX201">rl_char_is_quoted_p</A>
+<LI><A HREF="readline.html#IDX182">rl_cleanup_after_signal</A>
+<LI><A HREF="readline.html#IDX154">rl_clear_message</A>
+<LI><A HREF="readline.html#IDX187">rl_clear_signals</A>
+<LI><A HREF="readline.html#IDX188">rl_complete</A>, <A HREF="rlman.html#IDX191">rl_complete</A>
+<LI><A HREF="readline.html#IDX190">rl_complete_internal</A>
+<LI><A HREF="readline.html#IDX206">rl_completer_quote_characters</A>
+<LI><A HREF="readline.html#IDX205">rl_completer_word_break_characters</A>
+<LI><A HREF="readline.html#IDX209">rl_completion_append_character</A>
+<LI><A HREF="readline.html#IDX216">rl_completion_display_matches_hook</A>
+<LI><A HREF="readline.html#IDX189">rl_completion_entry_function</A>, <A HREF="rlman.html#IDX197">rl_completion_entry_function</A>
+<LI><A HREF="readline.html#IDX202">rl_completion_query_items</A>
+<LI><A HREF="readline.html#IDX121">rl_copy_keymap</A>
+<LI><A HREF="readline.html#IDX159">rl_copy_text</A>
+<LI><A HREF="readline.html#IDX158">rl_delete_text</A>
+<LI><A HREF="readline.html#IDX215">rl_directory_completion_hook</A>
+<LI><A HREF="readline.html#IDX123">rl_discard_keymap</A>
+<LI><A HREF="readline.html#IDX170">rl_display_match_list</A>
+<LI><A HREF="readline.html#IDX147">rl_do_undo</A>
+<LI><A HREF="readline.html#IDX103">rl_done</A>
+<LI><A HREF="readline.html#IDX101">rl_end</A>
+<LI><A HREF="readline.html#IDX144">rl_end_undo_group</A>
+<LI><A HREF="readline.html#IDX105">rl_erase_empty_line</A>
+<LI><A HREF="readline.html#IDX114">rl_event_hook</A>
+<LI><A HREF="readline.html#IDX117">rl_executing_keymap</A>
+<LI><A HREF="readline.html#IDX211">rl_filename_completion_desired</A>
+<LI><A HREF="readline.html#IDX200">rl_filename_dequoting_function</A>
+<LI><A HREF="readline.html#IDX207">rl_filename_quote_characters</A>
+<LI><A HREF="readline.html#IDX212">rl_filename_quoting_desired</A>
+<LI><A HREF="readline.html#IDX199">rl_filename_quoting_function</A>
+<LI><A HREF="readline.html#IDX150">rl_forced_update_display</A>
+<LI><A HREF="readline.html#IDX183">rl_free_line_state</A>
+<LI><A HREF="readline.html#IDX141">rl_function_dumper</A>
+<LI><A HREF="readline.html#IDX138">rl_function_of_keyseq</A>
+<LI><A HREF="readline.html#IDX134">rl_generic_bind</A>
+<LI><A HREF="readline.html#IDX124">rl_get_keymap</A>
+<LI><A HREF="readline.html#IDX126">rl_get_keymap_by_name</A>
+<LI><A HREF="readline.html#IDX127">rl_get_keymap_name</A>
+<LI><A HREF="readline.html#IDX162">rl_getc</A>
+<LI><A HREF="readline.html#IDX115">rl_getc_function</A>
+<LI><A HREF="readline.html#IDX210">rl_ignore_completion_duplicates</A>
+<LI><A HREF="readline.html#IDX214">rl_ignore_some_completions_function</A>
+<LI><A HREF="readline.html#IDX213">rl_inhibit_completion</A>
+<LI><A HREF="readline.html#IDX165">rl_initialize</A>
+<LI><A HREF="readline.html#IDX193">rl_insert_completions</A>
+<LI><A HREF="readline.html#IDX157">rl_insert_text</A>
+<LI><A HREF="readline.html#IDX110">rl_instream</A>
+<LI><A HREF="readline.html#IDX139">rl_invoking_keyseqs</A>
+<LI><A HREF="readline.html#IDX140">rl_invoking_keyseqs_in_map</A>
+<LI><A HREF="readline.html#IDX160">rl_kill_text</A>
+<LI><A HREF="readline.html#IDX107">rl_library_version</A>
+<LI><A HREF="readline.html#IDX99">rl_line_buffer</A>
+<LI><A HREF="readline.html#IDX142">rl_list_funmap_names</A>
+<LI><A HREF="readline.html#IDX120">rl_make_bare_keymap</A>
+<LI><A HREF="readline.html#IDX122">rl_make_keymap</A>
+<LI><A HREF="readline.html#IDX102">rl_mark</A>
+<LI><A HREF="readline.html#IDX153">rl_message</A>
+<LI><A HREF="readline.html#IDX148">rl_modifying</A>
+<LI><A HREF="readline.html#IDX137">rl_named_function</A>
+<LI><A HREF="readline.html#IDX151">rl_on_new_line</A>
+<LI><A HREF="readline.html#IDX111">rl_outstream</A>
+<LI><A HREF="readline.html#IDX135">rl_parse_and_bind</A>
+<LI><A HREF="readline.html#IDX104">rl_pending_input</A>
+<LI><A HREF="readline.html#IDX100">rl_point</A>
+<LI><A HREF="readline.html#IDX192">rl_possible_completions</A>
+<LI><A HREF="readline.html#IDX113">rl_pre_input_hook</A>
+<LI><A HREF="readline.html#IDX106">rl_prompt</A>
+<LI><A HREF="readline.html#IDX136">rl_read_init_file</A>
+<LI><A HREF="readline.html#IDX161">rl_read_key</A>
+<LI><A HREF="readline.html#IDX109">rl_readline_name</A>
+<LI><A HREF="readline.html#IDX149">rl_redisplay</A>
+<LI><A HREF="readline.html#IDX116">rl_redisplay_function</A>
+<LI><A HREF="readline.html#IDX184">rl_reset_after_signal</A>
+<LI><A HREF="readline.html#IDX152">rl_reset_line_state</A>
+<LI><A HREF="readline.html#IDX166">rl_reset_terminal</A>
+<LI><A HREF="readline.html#IDX185">rl_resize_terminal</A>
+<LI><A HREF="readline.html#IDX156">rl_restore_prompt</A>
+<LI><A HREF="readline.html#IDX155">rl_save_prompt</A>
+<LI><A HREF="readline.html#IDX125">rl_set_keymap</A>
+<LI><A HREF="readline.html#IDX186">rl_set_signals</A>
+<LI><A HREF="readline.html#IDX208">rl_special_prefixes</A>
+<LI><A HREF="readline.html#IDX112">rl_startup_hook</A>
+<LI><A HREF="readline.html#IDX163">rl_stuff_char</A>
+<LI><A HREF="readline.html#IDX108">rl_terminal_name</A>
+<LI><A HREF="readline.html#IDX133">rl_unbind_command_in_map</A>
+<LI><A HREF="readline.html#IDX132">rl_unbind_function_in_map</A>
+<LI><A HREF="readline.html#IDX130">rl_unbind_key</A>
+<LI><A HREF="readline.html#IDX131">rl_unbind_key_in_map</A>
+</DIR>
+<H2><A NAME="s">s</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX52">self-insert (a, b, A, 1, !, ...)</A>
+<LI><A HREF="readline.html#IDX89">set-mark (C-@)</A>
+<LI><A HREF="readline.html#IDX24">show-all-if-ambiguous</A>
+<LI><A HREF="readline.html#IDX79">start-kbd-macro (C-x ()</A>
+</DIR>
+<H2><A NAME="t">t</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX51">tab-insert (M-TAB)</A>
+<LI><A HREF="readline.html#IDX88">tilde-expand (M-~)</A>
+<LI><A HREF="readline.html#IDX175">to_lower</A>
+<LI><A HREF="readline.html#IDX174">to_upper</A>
+<LI><A HREF="readline.html#IDX53">transpose-chars (C-t)</A>
+<LI><A HREF="readline.html#IDX54">transpose-words (M-t)</A>
+</DIR>
+<H2><A NAME="u">u</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX86">undo (C-_, C-x C-u)</A>
+<LI><A HREF="readline.html#IDX73">universal-argument ()</A>
+<LI><A HREF="readline.html#IDX60">unix-line-discard (C-u)</A>
+<LI><A HREF="readline.html#IDX64">unix-word-rubout (C-w)</A>
+<LI><A HREF="readline.html#IDX55">upcase-word (M-u)</A>
+<LI><A HREF="readline.html#IDX171">uppercase_p</A>
+<LI><A HREF="readline.html#IDX196">username_completion_function</A>
+</DIR>
+<H2><A NAME="v">v</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX25">visible-stats</A>
+</DIR>
+<H2><A NAME="y">y</A></H2>
+<DIR>
+<LI><A HREF="readline.html#IDX70">yank (C-y)</A>
+<LI><A HREF="readline.html#IDX46">yank-last-arg (M-., M-_)</A>
+<LI><A HREF="readline.html#IDX45">yank-nth-arg (M-C-y)</A>
+<LI><A HREF="readline.html#IDX71">yank-pop (M-y)</A>
+</DIR>
+
+</P>
+<P><HR><P>
+This document was generated on 31 December 1998 using the
+<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
+translator version 1.52.</P>
+</BODY>
+</HTML>
diff --git a/readline/doc/readline.info b/readline/doc/readline.info
new file mode 100644
index 0000000..1aa2848
--- /dev/null
+++ b/readline/doc/readline.info
@@ -0,0 +1,3039 @@
+This is Info file readline.info, produced by Makeinfo version 1.67 from
+the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo.
+
+INFO-DIR-SECTION Libraries
+START-INFO-DIR-ENTRY
+* Readline: (readline). The GNU readline library API
+END-INFO-DIR-ENTRY
+
+ 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-1999 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 Free Software Foundation.
+
+
+File: readline.info, Node: Top, Next: Command Line Editing, 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 <k> key is pressed while the Control key is depressed.
+
+ The text <M-k> is read as `Meta-K' and describes the character
+produced when the meta key (if you have one) is depressed, and the <k>
+key is pressed. 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::.).
+
+
+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.
+* Searching:: Searching through previous lines.
+
+
+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 editing command. 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, where a word is composed of letters and
+ digits.
+
+<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.
+
+ 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, Next: Searching, 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' typed 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: Searching, Prev: Readline Arguments, Up: Readline Interaction
+
+Searching for Commands in the History
+-------------------------------------
+
+ Readline provides commands for searching through the command history
+for lines containing a specified string. There are two search modes:
+INCREMENTAL and NON-INCREMENTAL.
+
+ Incremental searches begin before the user has finished typing the
+search string. As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far. An incremental search requires only as many characters
+as needed to find the desired history entry. The characters present in
+the value of the ISEARCH-TERMINATORS variable are used to terminate an
+incremental search. If that variable has not been assigned a value,
+the <ESC> and <C-J> characters will terminate an incremental search.
+<C-g> will abort an incremental search and restore the original line.
+When the search is terminated, the history entry containing the search
+string becomes the current line. To find other matching entries in the
+history list, type <C-s> or <C-r> as appropriate. This will search
+backward or forward in the history for the next entry matching the
+search string typed so far. Any other key sequence bound to a Readline
+command will terminate the search and execute that command. For
+instance, a <RET> will terminate the search and accept the line,
+thereby executing the command from the history list.
+
+ Non-incremental searches read the entire search string before
+starting to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+
+
+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 to use a different set
+of keybindings. Any user can customize programs that use Readline by
+putting commands in an "inputrc" file in his 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 File Syntax:: Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
+
+* Sample Init File:: An example inputrc file.
+
+
+File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
+
+Readline Init File Syntax
+-------------------------
+
+ There are only a few basic constructs allowed in the Readline init
+file. Blank lines are ignored. Lines beginning with a `#' 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 modify the run-time behavior of Readline by altering the
+ values of variables in Readline using the `set' command within the
+ init file. Here is how to change from the default Emacs-like key
+ binding to use `vi' line editing commands:
+
+ set editing-mode vi
+
+ A great deal of run-time behavior is changeable with the following
+ variables.
+
+ `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
+ `insert-comment' command is executed. The default value is
+ `"#"'.
+
+ `completion-ignore-case'
+ If set to `on', Readline performs filename matching and
+ completion in a case-insensitive fashion. The default value
+ 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'.
+
+ `convert-meta'
+ If set to `on', Readline will convert characters with the
+ eighth bit set to an ASCII key sequence by stripping the
+ eighth bit and prepending an <ESC> character, converting them
+ to a meta-prefixed key sequence. The default value is `on'.
+
+ `disable-completion'
+ If set to `On', Readline will inhibit word completion.
+ Completion characters will be inserted into the line as if
+ they had been mapped to `self-insert'. The default is `off'.
+
+ `editing-mode'
+ The `editing-mode' variable controls which default set of key
+ bindings is used. By default, Readline starts up in Emacs
+ editing mode, where the keystrokes are most similar to Emacs.
+ This variable can be set to either `emacs' or `vi'.
+
+ `enable-keypad'
+ When set to `on', Readline will try to enable the application
+ keypad when it is called. Some systems need this to enable
+ the arrow keys. The default is `off'.
+
+ `expand-tilde'
+ If set to `on', tilde expansion is performed when Readline
+ attempts word completion. The default is `off'.
+
+ `horizontal-scroll-mode'
+ This variable can be set to either `on' or `off'. Setting it
+ to `on' means that the text of the lines being edited will
+ 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'.
+
+ `input-meta'
+ 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'. The name `meta-flag' is a synonym
+ for this variable.
+
+ `isearch-terminators'
+ The string of characters that should terminate an incremental
+ search without subsequently executing the character as a
+ command (*note Searching::.). If this variable has not been
+ given a value, the characters <ESC> and <C-J> will terminate
+ an incremental search.
+
+ `keymap'
+ Sets Readline's idea of the current keymap for key binding
+ commands. Acceptable `keymap' names are `emacs',
+ `emacs-standard', `emacs-meta', `emacs-ctlx', `vi',
+ `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.
+
+ `mark-directories'
+ If set to `on', completed directory names have a slash
+ appended. The default is `on'.
+
+ `mark-modified-lines'
+ This variable, when set to `on', causes Readline to display an
+ asterisk (`*') at the start of history lines which have been
+ modified. This variable is `off' by default.
+
+ `output-meta'
+ If set to `on', Readline will display characters with the
+ eighth bit set directly rather than as a meta-prefixed escape
+ sequence. The default is `off'.
+
+ `print-completions-horizontally'
+ If set to `on', Readline will display completions with matches
+ sorted horizontally in alphabetical order, rather than down
+ the screen. The default is `off'.
+
+ `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'.
+
+ `visible-stats'
+ If set to `on', a character denoting a file's type is
+ appended to the filename when listing possible completions.
+ 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 sections contain tables of the
+ command name, the default keybinding, if any, and a short
+ description of what the command does.
+
+ Once you know the name of the command, simply place the name of
+ the key you wish to bind the command to, a colon, and then the
+ name of the command on a line in the init file. The name of the
+ key can be expressed in different ways, depending on which is most
+ comfortable for you.
+
+ 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 GNU Emacs style escape sequences are available when
+ specifying key sequences:
+
+ `\C-'
+ control prefix
+
+ `\M-'
+ meta prefix
+
+ `\e'
+ an escape character
+
+ `\\'
+ backslash
+
+ `\"'
+ <">
+
+ `\''
+ <'>
+
+ In addition to the GNU Emacs style escape sequences, a second set
+ of backslash escapes is available:
+
+ `\a'
+ alert (bell)
+
+ `\b'
+ backspace
+
+ `\d'
+ delete
+
+ `\f'
+ form feed
+
+ `\n'
+ newline
+
+ `\r'
+ carriage return
+
+ `\t'
+ horizontal tab
+
+ `\v'
+ vertical tab
+
+ `\NNN'
+ the character whose ASCII code is the octal value NNN (one to
+ three digits)
+
+ `\xNNN'
+ the character whose ASCII code is the hexadecimal value NNN
+ (one to three digits)
+
+ When entering the text of a macro, single or double quotes must be
+ used to indicate a macro definition. Unquoted text is assumed to
+ be a function name. In the macro body, the backslash escapes
+ described above are expanded. Backslash will quote any other
+ 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, Next: Sample Init File, Prev: Readline Init File 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 four 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 both 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 seen in the previous example, terminates an `$if'
+ command.
+
+`$else'
+ Commands in this branch of the `$if' directive are executed if the
+ test fails.
+
+`$include'
+ This directive takes a single filename as an argument and reads
+ commands and bindings from that file.
+ $include /etc/inputrc
+
+
+File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
+
+Sample Init File
+----------------
+
+ Here is an example of an inputrc file. This illustrates key
+binding, variable assignment, and conditional syntax.
+
+
+ # This file controls the behaviour of line input editing for
+ # programs that use the Gnu Readline library. Existing programs
+ # include FTP, Bash, and Gdb.
+ #
+ # You can re-read the inputrc file with C-x C-r.
+ # Lines beginning with '#' are comments.
+ #
+ # First, include any systemwide bindings and variable assignments from
+ # /etc/Inputrc
+ $include /etc/Inputrc
+
+ #
+ # Set various bindings for emacs mode.
+
+ set editing-mode emacs
+
+ $if mode=emacs
+
+ Meta-Control-h: backward-kill-word Text after the function name is ignored
+
+ #
+ # Arrow keys in keypad mode
+ #
+ #"\M-OD": backward-char
+ #"\M-OC": forward-char
+ #"\M-OA": previous-history
+ #"\M-OB": next-history
+ #
+ # Arrow keys in ANSI mode
+ #
+ "\M-[D": backward-char
+ "\M-[C": forward-char
+ "\M-[A": previous-history
+ "\M-[B": next-history
+ #
+ # Arrow keys in 8 bit keypad mode
+ #
+ #"\M-\C-OD": backward-char
+ #"\M-\C-OC": forward-char
+ #"\M-\C-OA": previous-history
+ #"\M-\C-OB": next-history
+ #
+ # Arrow keys in 8 bit ANSI mode
+ #
+ #"\M-\C-[D": backward-char
+ #"\M-\C-[C": forward-char
+ #"\M-\C-[A": previous-history
+ #"\M-\C-[B": next-history
+
+ C-q: quoted-insert
+
+ $endif
+
+ # An old-style binding. This happens to be the default.
+ TAB: complete
+
+ # Macros that are convenient for shell interaction
+ $if Bash
+ # edit the path
+ "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+ # prepare to type a quoted word -- insert open and close double quotes
+ # and move to just after the open quote
+ "\C-x\"": "\"\"\C-b"
+ # insert a backslash (testing backslash escapes in sequences and macros)
+ "\C-x\\": "\\"
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ # Add a binding to refresh the line, which is unbound
+ "\C-xr": redraw-current-line
+ # Edit variable on current line.
+ "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+ $endif
+
+ # use a visible bell if one is available
+ set bell-style visible
+
+ # don't strip characters to 7 bits when reading
+ set input-meta on
+
+ # allow iso-latin1 characters to be inserted rather than converted to
+ # prefix-meta sequences
+ set convert-meta off
+
+ # display characters with the eighth bit set directly rather than
+ # as meta-prefixed characters
+ set output-meta on
+
+ # if there are more than 150 possible completions for a word, ask the
+ # user if he wants to see all of them
+ set completion-query-items 150
+
+ # For FTP
+ $if Ftp
+ "\C-xg": "get \M-?"
+ "\C-xt": "put \M-?"
+ "\M-.": yank-last-arg
+ $endif
+
+
+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.
+
+ This section describes Readline commands that may be bound to key
+sequences.
+
+
+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 currently
+ being entered.
+
+`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 cursor
+ position (the 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 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 of the
+ previous history entry). With an argument, behave exactly like
+ `yank-nth-arg'. Successive calls to `yank-last-arg' move back
+ through the history list, inserting the last argument of each line
+ in turn.
+
+
+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 bound to `delete-char', then
+ return `EOF'.
+
+`backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric argument means
+ to kill the characters instead of deleting them.
+
+`forward-backward-delete-char ()'
+ Delete the character under the cursor, unless the cursor is at the
+ end of the line, in which case the character behind the cursor is
+ deleted. By default, this is not bound to a key.
+
+`quoted-insert (C-q, C-v)'
+ Add the next character typed 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 arguments 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, uppercase the previous word, but do not move the cursor.
+
+`downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move the cursor.
+
+`capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize 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.
+ The killed text is saved 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.
+
+`kill-region ()'
+ Kill the text between the point and the *mark* (saved cursor
+ position). This text is referred to as the REGION. By default,
+ this command is unbound.
+
+`copy-region-as-kill ()'
+ Copy the text in the region to the kill buffer, so it can be yanked
+ right away. By default, this command is unbound.
+
+`copy-backward-word ()'
+ Copy the word before point to the kill buffer. The word
+ boundaries are the same as `backward-word'. By default, this
+ command is unbound.
+
+`copy-forward-word ()'
+ Copy the word following point to the kill buffer. The word
+ boundaries are the same as `forward-word'. By default, this
+ command 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 ()'
+ This is another way to specify an argument. If this command is
+ followed by one or more digits, optionally with a leading minus
+ sign, those digits define the argument. If the command is
+ followed by digits, executing `universal-argument' again ends the
+ numeric argument, but is otherwise ignored. As a special case, if
+ this command is immediately followed by a character that is
+ neither a digit or minus sign, the argument count for the next
+ command is multiplied by four. The argument count is initially
+ one, so executing this function the first time makes the argument
+ count four, a second time makes the argument count sixteen, and so
+ on. 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 (M-*)'
+ Insert all completions of the text before point that would have
+ been generated by `possible-completions'.
+
+`menu-complete ()'
+ Similar to `complete', but replaces the word to be completed with
+ a single match from the list of possible completions. Repeated
+ execution of `menu-complete' steps through the list of possible
+ completions, inserting each match in turn. At the end of the list
+ of completions, the bell is rung and the original text is restored.
+ An argument of N moves N positions forward in the list of matches;
+ a negative argument may be used to move backward through the list.
+ This command is intended to be bound to `TAB', but is unbound by
+ default.
+
+`delete-char-or-list ()'
+ Deletes the character under the cursor if not at the beginning or
+ end of the line (like `delete-char'). If at the end of the line,
+ behaves identically to `possible-completions'. This command is
+ unbound by default.
+
+
+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 the inputrc 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, M-X, ...)'
+ If the metafied character X is lowercase, run the command that is
+ bound to the corresponding uppercase character.
+
+`prefix-meta (ESC)'
+ Make the next character typed be metafied. This is for keyboards
+ without a meta key. Typing `ESC f' is equivalent to typing `M-f'.
+
+`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 executing the
+ `undo' command enough times to get back to the beginning.
+
+`tilde-expand (M-~)'
+ Perform tilde expansion on the current word.
+
+`set-mark (C-@)'
+ Set the mark to the current point. If a numeric argument is
+ supplied, the mark is set to that position.
+
+`exchange-point-and-mark (C-x C-x)'
+ Swap the point with the mark. The current cursor position is set
+ to the saved position, and the old cursor position is saved as the
+ mark.
+
+`character-search (C-])'
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous
+ occurrences.
+
+`character-search-backward (M-C-])'
+ A character is read and point is moved to the previous occurrence
+ of that character. A negative count searches for subsequent
+ occurrences.
+
+`insert-comment (M-#)'
+ The value of the `comment-begin' variable is inserted at the
+ beginning of the current line, and the line is accepted as if a
+ newline had been typed.
+
+`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. This command is unbound by default.
+
+`dump-variables ()'
+ Print all of the settable variables and their values to the
+ Readline output stream. If a numeric argument is supplied, the
+ output is formatted in such a way that it can be made part of an
+ INPUTRC file. This command is unbound by default.
+
+`dump-macros ()'
+ Print all of the Readline key sequences bound to macros and the
+ strings they ouput. If a numeric argument is supplied, the output
+ is formatted in such a way that it can be made part of an INPUTRC
+ file. This command is unbound by default.
+
+
+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 subsequent 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, 1996, 1998, 1999 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 Variables:: Variables accessible to custom
+ functions.
+* Readline Convenience Functions:: Functions which Readline supplies to
+ aid in writing your own custom
+ functions.
+* Readline Signal Handling:: How Readline behaves when it receives signals.
+* 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 Variables, 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.
+
+
+File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline
+
+Readline Variables
+==================
+
+ These variables are available to function writers.
+
+ - 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: int rl_erase_empty_line
+ Setting this to a non-zero value causes Readline to completely
+ erase the current line, including any prompt, any time a newline
+ is typed as the only character on an otherwise-empty line. The
+ cursor is moved to the beginning of the newly-blank line.
+
+ - 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_library_version
+ The version number of this revision of the library.
+
+ - 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.
+
+ - Variable: Function * rl_pre_input_hook
+ If non-zero, this is the address of a function to call after the
+ first prompt has been printed and just before `readline' starts
+ reading input characters.
+
+ - Variable: Function * rl_event_hook
+ If non-zero, this is the address of a function to call periodically
+ when readline is waiting for terminal input.
+
+ - Variable: Function * rl_getc_function
+ If non-zero, `readline' will call indirectly through this pointer
+ to get a character from the input stream. By default, it is set to
+ `rl_getc', the default `readline' character input function (*note
+ Utility Functions::.).
+
+ - Variable: VFunction * rl_redisplay_function
+ If non-zero, `readline' will call indirectly through this pointer
+ to update the display with the current contents of the editing
+ buffer. By default, it is set to `rl_redisplay', the default
+ `readline' redisplay function (*note Redisplay::.).
+
+ - Variable: Keymap rl_executing_keymap
+ This variable is set to the keymap (*note Keymaps::.) in which the
+ currently executing readline function was found.
+
+ - Variable: Keymap rl_binding_keymap
+ This variable is set to the keymap (*note Keymaps::.) in which the
+ last key binding occurred.
+
+
+File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, 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.
+* Alternate Interface:: Using Readline in a `callback' fashion.
+
+
+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::.).
+
+ - Function: char * rl_get_keymap_name (Keymap keymap)
+ Return the name matching KEYMAP. NAME is one which would be
+ supplied in a `set keymap' inputrc line (*note Readline Init
+ File::.).
+
+
+File: 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_unbind_function_in_map (Function *function, Keymap
+ map)
+ Unbind all keys that execute FUNCTION in MAP.
+
+ - Function: int rl_unbind_command_in_map (char *command, Keymap map)
+ Unbind all keys that are bound to COMMAND in MAP.
+
+ - Function: int rl_generic_bind (int type, char *keyseq, char *data,
+ Keymap map)
+ 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::.).
+
+ - Function: int rl_read_init_file (char *filename)
+ Read keybindings and variable assignments from FILENAME (*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.
+
+ - Function: void rl_function_dumper (int readable)
+ Print the readline function names and the key sequences currently
+ bound to them to `rl_outstream'. If READABLE is non-zero, the
+ list is formatted in such a way that it can be made part of an
+ `inputrc' file and re-read.
+
+ - Function: void rl_list_funmap_names ()
+ Print the names of all bindable Readline functions to
+ `rl_outstream'.
+
+
+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: void 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.
+
+ - Function: void rl_save_prompt ()
+ Save the local Readline prompt display state in preparation for
+ displaying a new message in the message area with `rl_message'.
+
+ - Function: void rl_restore_prompt ()
+ Restore the local Readline prompt display state saved by the most
+ recent call to `rl_save_prompt'.
+
+
+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, Next: Alternate Interface, Prev: Modifying Text, Up: Readline Convenience Functions
+
+Utility Functions
+-----------------
+
+ - Function: int rl_read_key ()
+ Return the next character available. This handles input inserted
+ into the input stream via PENDING INPUT (*note Readline
+ Variables::.) and `rl_stuff_char ()', macros, and characters read
+ from the keyboard.
+
+ - Function: int rl_getc (FILE *)
+ Return the next character available from the keyboard.
+
+ - Function: int rl_stuff_char (int c)
+ Insert C into the Readline input stream. It will be "read" before
+ Readline attempts to read characters from the terminal with
+ `rl_read_key ()'.
+
+ - Function: rl_extend_line_buffer (int len)
+ Ensure that `rl_line_buffer' has enough space to hold LEN
+ characters, possibly reallocating it if necessary.
+
+ - Function: int rl_initialize ()
+ Initialize or re-initialize Readline's internal state.
+
+ - Function: int rl_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'.
+
+ - Function: void rl_display_match_list (char **matches, int len, int
+ max)
+ A convenience function for displaying a list of strings in
+ columnar format on Readline's output stream. `matches' is the list
+ of strings, in argv format, such as a list of completion matches.
+ `len' is the number of strings in `matches', and `max' is the
+ length of the longest string in `matches'. This function uses the
+ setting of `print-completions-horizontally' to select how the
+ matches are displayed (*note Readline Init File Syntax::.).
+
+ 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.
+
+
+File: readline.info, Node: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions
+
+Alternate Interface
+-------------------
+
+ An alternate interface is available to plain `readline()'. Some
+applications need to interleave keyboard I/O with file, device, or
+window system I/O, typically by using a main loop to `select()' on
+various file descriptors. To accomodate this need, readline can also
+be invoked as a `callback' function from an event loop. There are
+functions available to make this easy.
+
+ - Function: void rl_callback_handler_install (char *prompt, Vfunction
+ *lhandler)
+ Set up the terminal for readline I/O and display the initial
+ expanded value of PROMPT. Save the value of LHANDLER to use as a
+ callback when a complete line of input has been entered.
+
+ - Function: void rl_callback_read_char ()
+ Whenever an application determines that keyboard input is
+ available, it should call `rl_callback_read_char()', which will
+ read the next character from the current input source. If that
+ character completes the line, `rl_callback_read_char' will invoke
+ the LHANDLER function saved by `rl_callback_handler_install' to
+ process the line. `EOF' is indicated by calling LHANDLER with a
+ `NULL' line.
+
+ - Function: void rl_callback_handler_remove ()
+ Restore the terminal to its initial state and remove the line
+ handler. This may be called from within a callback as well as
+ independently.
+
+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: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline
+
+Readline Signal Handling
+========================
+
+ Signals are asynchronous events sent to a process by the Unix kernel,
+sometimes on behalf of another process. They are intended to indicate
+exceptional events, like a user pressing the interrupt key on his
+terminal, or a network connection being broken. There is a class of
+signals that can be sent to the process currently reading input from
+the keyboard. Since Readline changes the terminal attributes when it
+is called, it needs to perform special processing when a signal is
+received to restore the terminal to a sane state, or provide application
+writers with functions to do so manually.
+
+ Readline contains an internal signal handler that is installed for a
+number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM',
+`SIGTSTP', `SIGTTIN', and `SIGTTOU'). When one of these signals is
+received, the signal handler will reset the terminal attributes to
+those that were in effect before `readline ()' was called, reset the
+signal handling to what it was before `readline ()' was called, and
+resend the signal to the calling application. If and when the calling
+application's signal handler returns, Readline will reinitialize the
+terminal and continue to accept input. When a `SIGINT' is received,
+the Readline signal handler performs some additional work, which will
+cause any partially-entered line to be aborted (see the description of
+`rl_free_line_state ()').
+
+ There is an additional Readline signal handler, for `SIGWINCH', which
+the kernel sends to a process whenever the terminal's size changes (for
+example, if a user resizes an `xterm'). The Readline `SIGWINCH'
+handler updates Readline's internal screen size state, and then calls
+any `SIGWINCH' signal handler the calling application has installed.
+Readline calls the application's `SIGWINCH' signal handler without
+resetting the terminal to its original state. If the application's
+signal handler does more than update its idea of the terminal size and
+return (for example, a `longjmp' back to a main processing loop), it
+*must* call `rl_cleanup_after_signal ()' (described below), to restore
+the terminal state.
+
+ Readline provides two variables that allow application writers to
+control whether or not it will catch certain signals and act on them
+when they are received. It is important that applications change the
+values of these variables only when calling `readline ()', not in a
+signal handler, so Readline's internal signal state is not corrupted.
+
+ - Variable: int rl_catch_signals
+ If this variable is non-zero, Readline will install signal
+ handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', `SIGTSTP',
+ `SIGTTIN', and `SIGTTOU'.
+
+ The default value of `rl_catch_signals' is 1.
+
+ - Variable: int rl_catch_sigwinch
+ If this variable is non-zero, Readline will install a signal
+ handler for `SIGWINCH'.
+
+ The default value of `rl_catch_sigwinch' is 1.
+
+ If an application does not wish to have Readline catch any signals,
+or to handle signals other than those Readline catches (`SIGHUP', for
+example), Readline provides convenience functions to do the necessary
+terminal and internal state cleanup upon receipt of a signal.
+
+ - Function: void rl_cleanup_after_signal (void)
+ This function will reset the state of the terminal to what it was
+ before `readline ()' was called, and remove the Readline signal
+ handlers for all signals, depending on the values of
+ `rl_catch_signals' and `rl_catch_sigwinch'.
+
+ - Function: void rl_free_line_state (void)
+ This will free any partial state associated with the current input
+ line (undo information, any partial history entry, any
+ partially-entered keyboard macro, and any partially-entered
+ numeric argument). This should be called before
+ `rl_cleanup_after_signal ()'. The Readline signal handler for
+ `SIGINT' calls this to abort the current input line.
+
+ - Function: void rl_reset_after_signal (void)
+ This will reinitialize the terminal and reinstall any Readline
+ signal handlers, depending on the values of `rl_catch_signals' and
+ `rl_catch_sigwinch'.
+
+ If an application does not wish Readline to catch `SIGWINCH', it may
+call `rl_resize_terminal ()' to force Readline to update its idea of
+the terminal size when a `SIGWINCH' is received.
+
+ - Function: void rl_resize_terminal (void)
+ Update Readline's internal screen size.
+
+ The following functions install and remove Readline's signal
+handlers.
+
+ - Function: int rl_set_signals (void)
+ Install Readline's signal handler for `SIGINT', `SIGQUIT',
+ `SIGTERM', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU', and
+ `SIGWINCH', depending on the values of `rl_catch_signals' and
+ `rl_catch_sigwinch'.
+
+ - Function: int rl_clear_signals (void)
+ Remove all of the Readline signal handlers installed by
+ `rl_set_signals ()'.
+
+
+File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, 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_completion_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: CPFunction * rl_filename_quoting_function
+ A pointer to a function that will quote a filename in an
+ application- specific fashion. This is called if filename
+ completion is being attempted and one of the characters in
+ `rl_filename_quote_characters' appears in a completed filename.
+ The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER.
+ The TEXT is the filename to be quoted. The MATCH_TYPE is either
+ `SINGLE_MATCH', if there is only one completion match, or
+ `MULT_MATCH'. Some functions use this to decide whether or not to
+ insert a closing quote character. The QUOTE_POINTER is a pointer
+ to any opening quote character the user typed. Some functions
+ choose to reset this character.
+
+ - Variable: CPFunction * rl_filename_dequoting_function
+ A pointer to a function that will remove application-specific
+ quoting characters from a filename before completion is attempted,
+ so those characters do not interfere with matching the text
+ against names in the filesystem. It is called with TEXT, the text
+ of the word to be dequoted, and QUOTE_CHAR, which is the quoting
+ character that delimits the filename (usually `'' or `"'). If
+ QUOTE_CHAR is zero, the filename was not in an embedded string.
+
+ - Variable: Function * rl_char_is_quoted_p
+ A pointer to a function to call that determines whether or not a
+ specific character in the line buffer is quoted, according to
+ whatever quoting mechanism the program calling readline uses. The
+ function is called with two arguments: TEXT, the text of the line,
+ and INDEX, the index of the character in the line. It is used to
+ decide whether a character found in
+ `rl_completer_word_break_characters' should be used to break words
+ for the completer.
+
+ - Variable: int rl_completion_query_items
+ Up to this many items will be displayed in response to a
+ possible-completions call. After that, we ask the user if she is
+ sure she wants to see them all. The default value is 100.
+
+ - Variable: char * rl_basic_word_break_characters
+ The basic list of characters that signal a break between words for
+ the completer routine. The default value of this variable is the
+ characters which break words for completion in Bash, i.e., `"
+ \t\n\"\\'`@$><=;|&{("'.
+
+ - Variable: char * rl_basic_quote_characters
+ List of quote characters which can cause a word break.
+
+ - Variable: char * rl_completer_word_break_characters
+ The list of characters that signal a break between words for
+ `rl_complete_internal ()'. The default list is the value of
+ `rl_basic_word_break_characters'.
+
+ - Variable: char * rl_completer_quote_characters
+ List of characters which can be used to quote a substring of the
+ line. Completion occurs on the entire substring, and within the
+ substring `rl_completer_word_break_characters' are treated as any
+ other character, unless they also appear within this list.
+
+ - Variable: char * rl_filename_quote_characters
+ A list of characters that cause a filename to be quoted by the
+ completer when they appear in a completed filename. The default
+ is the null string.
+
+ - Variable: char * rl_special_prefixes
+ The list of characters that are word break characters, but should
+ be left in TEXT when it is passed to the completion function.
+ Programs can use this to help determine what kind of completing to
+ do. For instance, Bash sets this variable to "$@" so that it can
+ complete shell variables and hostnames.
+
+ - Variable: int rl_completion_append_character
+ When a single completion alternative matches at the end of the
+ command line, this character is appended to the inserted
+ completion text. The default is a space character (` '). Setting
+ this to the null character (`\0') prevents anything being appended
+ automatically. This can be changed in custom completion functions
+ to provide the "most sensible word separator character" according
+ to an application-specific command line syntax specification.
+
+ - Variable: int rl_ignore_completion_duplicates
+ If non-zero, then disallow duplicates in the matches. Default is
+ 1.
+
+ - Variable: int rl_filename_completion_desired
+ Non-zero means that the results of the matches are to be treated as
+ filenames. This is *always* zero on entry, and can only be changed
+ within a completion entry generator function. If it is set to a
+ non-zero value, directory names have a slash appended and Readline
+ attempts to quote completed filenames if they contain any embedded
+ word break characters.
+
+ - Variable: int rl_filename_quoting_desired
+ Non-zero means that the results of the matches are to be quoted
+ using double quotes (or an application-specific quoting mechanism)
+ if the completed filename contains any characters in
+ `rl_filename_quote_chars'. This is *always* non-zero on entry,
+ and can only be changed within a completion entry generator
+ function. The quoting is effected via a call to the function
+ pointed to by `rl_filename_quoting_function'.
+
+ - Variable: int rl_inhibit_completion
+ If this variable is non-zero, completion is inhibit<ed. The
+ completion character will be inserted as any other bound to
+ `self-insert'.
+
+ - Variable: Function * rl_ignore_some_completions_function
+ 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: Function * rl_directory_completion_hook
+ This function, if defined, is allowed to modify the directory
+ portion of filenames Readline completes. It is called with the
+ address of a string (the current directory name) as an argument.
+ It could be used to expand symbolic links or shell variables in
+ pathnames.
+
+ - Variable: VFunction * rl_completion_display_matches_hook
+ If non-zero, then this is the address of a function to call when
+ completing a word would normally display the list of possible
+ matches. This function is called in lieu of Readline displaying
+ the list. It takes three arguments: (`char **'MATCHES, `int'
+ NUM_MATCHES, `int' MAX_LENGTH) where MATCHES is the array of
+ matching strings, NUM_MATCHES is the number of strings in that
+ array, and MAX_LENGTH is the length of the longest string in that
+ array. Readline provides a convenience function,
+ `rl_display_match_list', that takes care of doing the display to
+ Readline's output stream. That function may be called from this
+ hook.
+
+
+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 bound the
+ region of rl_line_buffer that contains the word to complete. TEXT is
+ the word to complete. We can use the entire contents of rl_line_buffer
+ in case we want to do some simple parsing. Return the array of matches,
+ or NULL if there aren't any. */
+ char **
+ fileman_completion (text, start, end)
+ char *text;
+ int start, end;
+ {
+ char **matches;
+
+ matches = (char **)NULL;
+
+ /* If this word is at the start of the line, then it is a command
+ to complete. Otherwise it is the name of a file in the current
+ directory. */
+ if (start == 0)
+ matches = completion_matches (text, command_generator);
+
+ return (matches);
+ }
+
+ /* Generator function for command completion. STATE lets us know whether
+ to start from scratch; without any state (i.e. STATE == 0), then we
+ start at the top of the list. */
+ char *
+ command_generator (text, state)
+ char *text;
+ int state;
+ {
+ static int list_index, len;
+ char *name;
+
+ /* If this is a new word to complete, initialize now. This includes
+ saving the length of TEXT for efficiency, and initializing the index
+ variable to 0. */
+ if (!state)
+ {
+ list_index = 0;
+ len = strlen (text);
+ }
+
+ /* Return the next name which partially matches from the command list. */
+ while (name = commands[list_index].name)
+ {
+ list_index++;
+
+ if (strncmp (name, text, len) == 0)
+ return (dupstr(name));
+ }
+
+ /* If no names matched, then return NULL. */
+ return ((char *)NULL);
+ }
+
+ /* **************************************************************** */
+ /* */
+ /* FileMan Commands */
+ /* */
+ /* **************************************************************** */
+
+ /* String to pass to system (). This is for the LIST, VIEW and RENAME
+ commands. */
+ static char syscom[1024];
+
+ /* List the file(s) named in arg. */
+ com_list (arg)
+ char *arg;
+ {
+ if (!arg)
+ arg = "";
+
+ sprintf (syscom, "ls -FClg %s", arg);
+ return (system (syscom));
+ }
+
+ com_view (arg)
+ char *arg;
+ {
+ if (!valid_argument ("view", arg))
+ return 1;
+
+ sprintf (syscom, "more %s", arg);
+ return (system (syscom));
+ }
+
+ com_rename (arg)
+ char *arg;
+ {
+ too_dangerous ("rename");
+ return (1);
+ }
+
+ com_stat (arg)
+ char *arg;
+ {
+ struct stat finfo;
+
+ if (!valid_argument ("stat", arg))
+ return (1);
+
+ if (stat (arg, &finfo) == -1)
+ {
+ perror (arg);
+ return (1);
+ }
+
+ printf ("Statistics for `%s':\n", arg);
+
+ printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
+ finfo.st_nlink,
+ (finfo.st_nlink == 1) ? "" : "s",
+ finfo.st_size,
+ (finfo.st_size == 1) ? "" : "s");
+ printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
+ printf (" Last access at: %s", ctime (&finfo.st_atime));
+ printf (" Last modified at: %s", ctime (&finfo.st_mtime));
+ return (0);
+ }
+
+ com_delete (arg)
+ char *arg;
+ {
+ too_dangerous ("delete");
+ return (1);
+ }
+
+ /* Print out help for ARG, or for all of the commands if ARG is
+ not present. */
+ com_help (arg)
+ char *arg;
+ {
+ register int i;
+ int printed = 0;
+
+ for (i = 0; commands[i].name; i++)
+ {
+ if (!*arg || (strcmp (arg, commands[i].name) == 0))
+ {
+ printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
+ printed++;
+ }
+ }
+
+ if (!printed)
+ {
+ printf ("No commands match `%s'. Possibilties are:\n", arg);
+
+ for (i = 0; commands[i].name; i++)
+ {
+ /* Print in six columns. */
+ if (printed == 6)
+ {
+ printed = 0;
+ printf ("\n");
+ }
+
+ printf ("%s\t", commands[i].name);
+ printed++;
+ }
+
+ if (printed)
+ printf ("\n");
+ }
+ return (0);
+ }
+
+ /* Change to the directory ARG. */
+ com_cd (arg)
+ char *arg;
+ {
+ if (chdir (arg) == -1)
+ {
+ perror (arg);
+ return 1;
+ }
+
+ com_pwd ("");
+ return (0);
+ }
+
+ /* Print out the current working directory. */
+ com_pwd (ignore)
+ char *ignore;
+ {
+ char dir[1024], *s;
+
+ s = getwd (dir);
+ if (s == 0)
+ {
+ printf ("Error getting pwd: %s\n", dir);
+ return 1;
+ }
+
+ printf ("Current directory is %s\n", dir);
+ return 0;
+ }
+
+ /* The user wishes to quit using this program. Just set DONE non-zero. */
+ com_quit (arg)
+ char *arg;
+ {
+ done = 1;
+ return (0);
+ }
+
+ /* Function which tells you that you can't do this. */
+ too_dangerous (caller)
+ char *caller;
+ {
+ fprintf (stderr,
+ "%s: Too dangerous for me to distribute. Write it yourself.\n",
+ caller);
+ }
+
+ /* Return non-zero if ARG is a valid argument for CALLER, else print
+ an error message and return zero. */
+ int
+ valid_argument (caller, arg)
+ char *caller, *arg;
+ {
+ if (!arg || !*arg)
+ {
+ fprintf (stderr, "%s: Argument required.\n", caller);
+ return (0);
+ }
+
+ return (1);
+ }
+
+
+File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top
+
+Concept Index
+*************
+
+* Menu:
+
+* command editing: Readline Bare Essentials.
+* editing command lines: Readline Bare Essentials.
+* initialization file, readline: Readline Init File.
+* interaction, readline: Readline Interaction.
+* kill ring: Readline Killing Commands.
+* killing text: Readline Killing Commands.
+* notation, readline: Readline Bare Essentials.
+* 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:
+
+* (: Utility Functions.
+* 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 File Syntax.
+* call-last-kbd-macro (C-x e): Keyboard Macros.
+* capitalize-word (M-c): Commands For Text.
+* character-search (C-]): Miscellaneous Commands.
+* character-search-backward (M-C-]): Miscellaneous Commands.
+* clear-screen (C-l): Commands For Moving.
+* comment-begin: Readline Init File Syntax.
+* complete (TAB): Commands For Completion.
+* completion-query-items: Readline Init File Syntax.
+* completion_matches: Completion Functions.
+* convert-meta: Readline Init File Syntax.
+* copy-backward-word (): Commands For Killing.
+* copy-forward-word (): Commands For Killing.
+* copy-region-as-kill (): Commands For Killing.
+* delete-char (C-d): Commands For Text.
+* delete-char-or-list (): Commands For Completion.
+* delete-horizontal-space (): Commands For Killing.
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments.
+* digit_p: Utility Functions.
+* digit_value: Utility Functions.
+* ding: Utility Functions.
+* disable-completion: Readline Init File Syntax.
+* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
+* downcase-word (M-l): Commands For Text.
+* dump-functions (): Miscellaneous Commands.
+* dump-macros (): Miscellaneous Commands.
+* dump-variables (): Miscellaneous Commands.
+* editing-mode: Readline Init File Syntax.
+* enable-keypad: Readline Init File Syntax.
+* end-kbd-macro (C-x )): Keyboard Macros.
+* end-of-history (M->): Commands For History.
+* end-of-line (C-e): Commands For Moving.
+* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
+* expand-tilde: Readline Init File Syntax.
+* filename_completion_function: Completion Functions.
+* forward-backward-delete-char (): Commands For Text.
+* forward-char (C-f): Commands For Moving.
+* forward-search-history (C-s): Commands For History.
+* forward-word (M-f): Commands For Moving.
+* free_undo_list: Allowing Undoing.
+* history-search-backward (): Commands For History.
+* history-search-forward (): Commands For History.
+* horizontal-scroll-mode: Readline Init File Syntax.
+* input-meta: Readline Init File Syntax.
+* insert-comment (M-#): Miscellaneous Commands.
+* insert-completions (M-*): Commands For Completion.
+* isearch-terminators: Readline Init File Syntax.
+* keymap: Readline Init File Syntax.
+* kill-line (C-k): Commands For Killing.
+* kill-region (): Commands For Killing.
+* kill-whole-line (): Commands For Killing.
+* kill-word (M-d): Commands For Killing.
+* lowercase_p: Utility Functions.
+* mark-modified-lines: Readline Init File Syntax.
+* menu-complete (): Commands For Completion.
+* meta-flag: Readline Init File Syntax.
+* next-history (C-n): Commands For History.
+* non-incremental-forward-search-history (M-n): Commands For History.
+* non-incremental-reverse-search-history (M-p): Commands For History.
+* numeric: Utility Functions.
+* output-meta: Readline Init File Syntax.
+* 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_quote_characters: 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_binding_keymap: Readline Variables.
+* rl_callback_handler_install: Alternate Interface.
+* rl_callback_handler_remove: Alternate Interface.
+* rl_callback_read_char: Alternate Interface.
+* rl_catch_signals: Readline Signal Handling.
+* rl_catch_sigwinch: Readline Signal Handling.
+* rl_char_is_quoted_p: Completion Variables.
+* rl_cleanup_after_signal: Readline Signal Handling.
+* rl_clear_message: Redisplay.
+* rl_clear_signals: Readline Signal Handling.
+* rl_complete <1>: Completion Functions.
+* rl_complete: How Completing Works.
+* rl_complete_internal: Completion Functions.
+* rl_completer_quote_characters: Completion Variables.
+* rl_completer_word_break_characters: Completion Variables.
+* rl_completion_append_character: Completion Variables.
+* rl_completion_display_matches_hook: Completion Variables.
+* rl_completion_entry_function <1>: How Completing Works.
+* rl_completion_entry_function: Completion Variables.
+* rl_completion_query_items: Completion Variables.
+* rl_copy_keymap: Keymaps.
+* rl_copy_text: Modifying Text.
+* rl_delete_text: Modifying Text.
+* rl_directory_completion_hook: Completion Variables.
+* rl_discard_keymap: Keymaps.
+* rl_display_match_list: Utility Functions.
+* rl_do_undo: Allowing Undoing.
+* rl_done: Readline Variables.
+* rl_end: Readline Variables.
+* rl_end_undo_group: Allowing Undoing.
+* rl_erase_empty_line: Readline Variables.
+* rl_event_hook: Readline Variables.
+* rl_executing_keymap: Readline Variables.
+* rl_filename_completion_desired: Completion Variables.
+* rl_filename_dequoting_function: Completion Variables.
+* rl_filename_quote_characters: Completion Variables.
+* rl_filename_quoting_desired: Completion Variables.
+* rl_filename_quoting_function: Completion Variables.
+* rl_forced_update_display: Redisplay.
+* rl_free_line_state: Readline Signal Handling.
+* rl_function_dumper: Associating Function Names and Bindings.
+* 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_get_keymap_name: Keymaps.
+* rl_getc: Utility Functions.
+* rl_getc_function: Readline Variables.
+* rl_ignore_completion_duplicates: Completion Variables.
+* rl_ignore_some_completions_function: Completion Variables.
+* rl_inhibit_completion: Completion Variables.
+* rl_initialize: Utility Functions.
+* rl_insert_completions: Completion Functions.
+* rl_insert_text: Modifying Text.
+* rl_instream: Readline Variables.
+* rl_invoking_keyseqs: Associating Function Names and Bindings.
+* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings.
+* rl_kill_text: Modifying Text.
+* rl_library_version: Readline Variables.
+* rl_line_buffer: Readline Variables.
+* rl_list_funmap_names: Associating Function Names and Bindings.
+* rl_make_bare_keymap: Keymaps.
+* rl_make_keymap: Keymaps.
+* rl_mark: Readline Variables.
+* rl_message: Redisplay.
+* rl_modifying: Allowing Undoing.
+* rl_named_function: Associating Function Names and Bindings.
+* rl_on_new_line: Redisplay.
+* rl_outstream: Readline Variables.
+* rl_parse_and_bind: Binding Keys.
+* rl_pending_input: Readline Variables.
+* rl_point: Readline Variables.
+* rl_possible_completions: Completion Functions.
+* rl_pre_input_hook: Readline Variables.
+* rl_prompt: Readline Variables.
+* rl_read_init_file: Binding Keys.
+* rl_read_key: Utility Functions.
+* rl_readline_name: Readline Variables.
+* rl_redisplay: Redisplay.
+* rl_redisplay_function: Readline Variables.
+* rl_reset_after_signal: Readline Signal Handling.
+* rl_reset_line_state: Redisplay.
+* rl_reset_terminal: Utility Functions.
+* rl_resize_terminal: Readline Signal Handling.
+* rl_restore_prompt: Redisplay.
+* rl_save_prompt: Redisplay.
+* rl_set_keymap: Keymaps.
+* rl_set_signals: Readline Signal Handling.
+* rl_special_prefixes: Completion Variables.
+* rl_startup_hook: Readline Variables.
+* rl_stuff_char: Utility Functions.
+* rl_terminal_name: Readline Variables.
+* rl_unbind_command_in_map: Binding Keys.
+* rl_unbind_function_in_map: Binding Keys.
+* rl_unbind_key: Binding Keys.
+* rl_unbind_key_in_map: Binding Keys.
+* self-insert (a, b, A, 1, !, ...): Commands For Text.
+* set-mark (C-@): Miscellaneous Commands.
+* show-all-if-ambiguous: Readline Init File Syntax.
+* start-kbd-macro (C-x (): Keyboard Macros.
+* to_lower: Utility Functions.
+* to_upper: Utility Functions.
+* transpose-chars (C-t): Commands For Text.
+* transpose-words (M-t): Commands For Text.
+* undo (C-_, C-x C-u): Miscellaneous Commands.
+* universal-argument (): Numeric Arguments.
+* unix-line-discard (C-u): Commands For Killing.
+* unix-word-rubout (C-w): Commands For Killing.
+* upcase-word (M-u): Commands For Text.
+* uppercase_p: Utility Functions.
+* username_completion_function: Completion Functions.
+* visible-stats: Readline Init File Syntax.
+* yank (C-y): Commands For Killing.
+* yank-last-arg (M-., M-_): Commands For History.
+* yank-nth-arg (M-C-y): Commands For History.
+* yank-pop (M-y): Commands For Killing.
+
+
+
+Tag Table:
+Node: Top1190
+Node: Command Line Editing1789
+Node: Introduction and Notation2440
+Node: Readline Interaction3479
+Node: Readline Bare Essentials4672
+Node: Readline Movement Commands6213
+Node: Readline Killing Commands7179
+Node: Readline Arguments8895
+Node: Searching9870
+Node: Readline Init File11583
+Node: Readline Init File Syntax12630
+Node: Conditional Init Constructs21837
+Node: Sample Init File24276
+Node: Bindable Readline Commands27446
+Node: Commands For Moving28197
+Node: Commands For History29045
+Node: Commands For Text31797
+Node: Commands For Killing33816
+Node: Numeric Arguments35966
+Node: Commands For Completion37093
+Node: Keyboard Macros38841
+Node: Miscellaneous Commands39400
+Node: Readline vi Mode42204
+Node: Programming with GNU Readline43974
+Node: Basic Behavior44942
+Node: Custom Functions48268
+Node: The Function Type48869
+Node: Function Writing49714
+Node: Readline Variables50798
+Node: Readline Convenience Functions54407
+Node: Function Naming55145
+Node: Keymaps56373
+Node: Binding Keys58087
+Node: Associating Function Names and Bindings60295
+Node: Allowing Undoing61873
+Node: Redisplay64458
+Node: Modifying Text65853
+Node: Utility Functions66764
+Node: Alternate Interface69448
+Node: Readline Signal Handling72742
+Node: Custom Completers77788
+Node: How Completing Works78503
+Node: Completion Functions81499
+Node: Completion Variables84514
+Node: A Short Completion Example92412
+Node: Concept Index104718
+Node: Function and Variable Index105472
+
+End Tag Table
diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps
new file mode 100644
index 0000000..cff4c3c
--- /dev/null
+++ b/readline/doc/readline.ps
@@ -0,0 +1,5225 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: readline.dvi
+%%Pages: 56
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentPaperSizes: A4
+%%EndComments
+%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1998.12.31:1253
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 300 300 (readline.dvi)
+@start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1
+47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46
+D E /Fc 1 59 df<60F0F06004047D830B>58 D E /Fd 53 127
+df<60F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600417789614>33
+D<071C00071C00071C00071C00071C00FFFF80FFFF807FFF800E38000E38000E38000E38
+000E38000E38000E38007FFF80FFFF80FFFF801C70001C70001C70001C70001C70001117
+7F9614>35 D<0180038006000C001C0018003800700070007000E000E000E000E000E000
+E000E000E000E000700070007000380018001C000C00060003800180091D799914>40
+D<80C0603038181C0E0E0E0707070707070707070E0E0E1C18383060C080081D7C9914>
+I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E638C0380038003800F107E
+9214>I<70F8FCFC7C0C1830E0C0060A798414>44 D<FFFEFFFEFFFE0F037E8C14>I<70F8
+F8F8700505798414>I<07C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00E
+E00EE00EE00E701C701C383838381C700FE007C00F177E9614>48
+D<0300030007000F003F00F7004700070007000700070007000700070007000700070007
+000700070007007FF07FF00C177C9614>I<0006001E003E00F801F003C00F801F003C00
+F800F000F8003C001F000F8003C001F000F8003E001E00060F157E9514>60
+D<C000F000F8003E001F00078003E001F00078003E001E003E007801F003E007801F003E
+00F800F000C0000F157E9514>62 D<1FE03FF8701CE00EE00E400E003C007000E001C003
+800380038003800300000000000000000003000780078003000F177E9614>I<01E007F0
+0E38181C38FC71FC731E771EEE0EEE0EEE0EEE0EEE0EEE0EEE0E771C731871F038E01806
+0E1E07F801F00F177E9614>I<01C00003E00003E0000360000360000770000770000770
+000770000630000E38000E38000E38000E38001C1C001FFC001FFC001C1C001C1C00380E
+00380E00FE3F80FE3F8011177F9614>I<FFF0FFFC381E380E3807380738073807380E38
+1E3FFC3FFC381E380E38073807380738073807380E381EFFFCFFF810177F9614>I<01F1
+8007FF800E1F801C0780380780700380700380700380E00000E00000E00000E00000E000
+00E00000E000007003807003807003803807001C07000E0E0007FC0001F00011177F9614
+>I<FFE000FFF800383C00381E00380E0038070038070038070038038038038038038038
+0380380380380380380380380380380700380700380E00381E00383C00FFF800FFE00011
+177F9614>I<FFFF00FFFF00380700380700380700380700380000380000383800383800
+3FF8003FF800383800383800380000380000380000380380380380380380380380FFFF80
+FFFF8011177F9614>I<FF00FF0038003800380038003800380038003800380038003800
+38003800380038003807380738073807FFFFFFFF10177E9614>76
+D<FC1F80FC1F807C1F007637007637007637007637007777007777007367007367007367
+0073E70071C70071C700700700700700700700700700700700700700F80F80F80F801117
+7F9614>I<FE3F80FE3F803E0E003B0E003B0E003B0E003B0E003B8E00398E00398E0039
+CE0039CE0039CE0038CE0038CE0038EE00386E00386E00386E00386E00383E00FE3E00FE
+3E0011177F9614>I<FFE000FFF800383C00381C00380E00380E00380E00380E00381C00
+383C003FF8003FF000383800381C00381C00381C00381C00381C00381C80381DC0381DC0
+FE0F80FE070012177F9614>82 D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE0
+0FF001F8001C001E000E600EE00EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF
+80E1C380E1C380E1C380E1C38001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C0000FF8000FF80011177F9614>I<FF
+E0FFE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E0FFE0FFE00B1D7F9914>93
+D<FFFEFFFEFFFE0F037E7E14>95 D<1FC0007FF000707800201800001C00001C0007FC00
+1FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>97
+D<FC0000FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03
+801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217
+809614>I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03
+F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C
+3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001F
+EFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000
+380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE070007
+000700070007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001F
+FF80383B80301800701C00701C00701C003018003838003FF00037C0007000007000003F
+F8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011
+197F8F14>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F8600
+1E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0
+FF8FE01317809614>I<06000F000F0006000000000000000000FF00FF00070007000700
+070007000700070007000700070007000700FFF8FFF80D187C9714>I<FC0000FC00001C
+00001C00001C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC0001F
+E0001FE0001E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>107
+D<FF80FF8003800380038003800380038003800380038003800380038003800380038003
+80038003800380FFFEFFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E380
+38E38038E38038E38038E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>
+I<FC7800FDFE001F86001E07001C07001C07001C07001C07001C07001C07001C07001C07
+001C07001C0700FF8FE0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00E
+E00EE00EE00E701C783C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C
+03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C
+00001C00001C00001C00001C00001C0000FF8000FF80001218808F14>I<03E7000FF700
+1C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F001C3F00
+0FF70007C700000700000700000700000700000700000700003FE0003FE013187F8F14>
+I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E00000E00000E00000E00
+000E00000E0000FFF000FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF0
+07F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFF
+FC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<
+FC3F00FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
+1C07001C1F000FFFE003E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C
+000E38000E38000E380006300007700007700007700003E00003E00003E00011107F8F14
+>I<FE3F80FE3F80700700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A
+6C001A6C001E7C001E7C000E380011107F8F14>I<7E3F007E3F001E3C000E7800077000
+07E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F
+8F14>I<FE3F80FE3F801C0E001C1C001C1C000E1C000E38000E38000738000730000730
+0003700003700003E00001E00001E00001C00001C00001C0000380007380007700007E00
+003C000011187F8F14>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738
+077007FFFFFFFF10107F8F14>I<1C103F38E7E041C00D047D9614>126
+D E /Fe 2 121 df<7070F06004047D830B>46 D<3FC7E007838007020003840003C800
+01D80000F00000E00000F00001F000013800023800041C00081E00381E00FC3FC013107F
+8F14>120 D E /Ff 38 123 df<00FE000381000601800E03801C01001C00001C00001C
+00001C00001C0000FFFF801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F07010101020204040040B7D830B>44
+D<FFC0FFC00A0280880D>I<03000700FF00070007000700070007000700070007000700
+070007000700070007000700070007000700070007007FF80D187D9713>49
+D<0F80106020304038803CC01CE01C401C003C003800380070006000C001800100020004
+040804100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C
+001C0038007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F97
+13>I<001800180038007800F800B8013802380238043808381838103820384038C038FF
+FF00380038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000
+200020002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E18
+7E9713>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E0
+07E007600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008
+80108010002000400040008001800100030003000700060006000E000E000E000E000E00
+040010197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF830
+7C601E600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C
+600EE006E006E007E007E0076007700F3017182707C700070006000E000C700C70186030
+30600F8010187F9713>I<1FC000387000383800101C00001C00001C0003FC001E1C0038
+1C00701C00E01C00E01C80E01C80E03C80705F801F8F0011107F8F13>97
+D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001CFC001D07
+001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01801E03
+0019060010F800131A809915>I<07F81C1C381C70087000E000E000E000E000E000E000
+7000700438081C1807E00E107F8F11>I<003F0000070000070000070000070000070000
+070000070000070000070003E7000C1700180F00300700700700E00700E00700E00700E0
+0700E00700E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C303018
+7018600CE00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<01F007
+180E381C101C001C001C001C001C001C00FFC01C001C001C001C001C001C001C001C001C
+001C001C001C001C001C00FF800D1A80990C>I<0FCF0018718030300070380070380070
+38007038003030001860002FC0006000006000007000003FF0003FFC001FFE00600F00C0
+0300C00300C00300C00300600600381C0007E00011187F8F13>I<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C7C001D87001E03801E03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF0141A80
+9915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A>I<
+FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FC01C0F00
+1C0C001C18001C20001C40001CE0001DE0001E70001C78001C38001C1C001C1E001C0F00
+1C0F80FF9FE0131A809914>107 D<FC001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A
+>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C07
+01C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>
+I<FC7C001D87001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03
+801C03801C03801C0380FF9FF01410808F15>I<07E01C38300C700E6006E007E007E007
+E007E007E0076006700E381C1C3807E010107F8F13>I<FCFC001D07001E03801C01C01C
+01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01801E03001D06001CF8001C
+00001C00001C00001C00001C00001C0000FF80001317808F15>I<03E1000C1300180B00
+300F00700700E00700E00700E00700E00700E00700E00700700700700700380F001C3700
+07C700000700000700000700000700000700000700003FE013177F8F14>I<FC781D9C1E
+1C1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10808F0F>I<1F20
+60E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>
+I<0800080008000800180018003800FFC038003800380038003800380038003800382038
+203820382018201C4007800B177F960F>I<FC1F801C03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C07800C07800E0B8003F3F01410808F15>
+I<FF0F803C07001C06001C04001C04000E08000E080007100007100007100003A00003A0
+0001C00001C00001C00000800011107F8F14>I<FE7F1F80381C07003C1C06001C0C0400
+1C0E04000E1608000E1708000E170800072310000723900007A3900003C1A00003C1E000
+0180C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08000E10000F30000760
+0003C00001C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14
+>I<FF0F803C07001C06001C04001C04000E08000E080007100007100007100003A00003
+A00001C00001C00001C000008000008000010000010000E10000E20000E4000078000011
+177F8F14>I<FFF8E070C07080E081C081C00380070007000E041C041C04380870087038
+FFF80E107F8F11>I E /Fg 2 42 df<00E001C00380078007000F001E001E001C003C00
+3C0038007800780078007000F000F000F000F000F000F000F000F000F000F000F000F000
+F000F000700078007800780038003C003C001C001E001E000F0007000780038001C000E0
+0B2E7CA112>40 D<E000700038003C001C001E000F000F00070007800780038003C003C0
+03C001C001E001E001E001E001E001E001E001E001E001E001E001E001E001E001C003C0
+03C003C003800780078007000F000F001E001C003C0038007000E0000B2E7EA112>I
+E /Fh 28 123 df<000FF83F00007FFDFFC001FC1FE3E003F03FC7E007E03FC7E00FC03F
+87E00FC03F83C00FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80
+00FFFFFFFC00FFFFFFFC000FC01F80000FC01F80000FC01F80000FC01F80000FC01F8000
+0FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000F
+C01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80007FF8FFF8007FF8
+FFF80023237FA221>11 D<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000F
+C03F000FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800F
+C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800F
+C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F807F
+F8FFF07FF8FFF01C237FA220>I<00180030006000C001C00380078007000F001E001E00
+3E003C003C007C007C007C007800F800F800F800F800F800F800F800F800F800F800F800
+F800F80078007C007C007C003C003C003E001E001E000F0007000780038001C000C00060
+003000180D317BA416>40 D<07FE00001FFF80003F07E0003F03F0003F01F0003F01F800
+1E01F8000001F8000001F800003FF80003FDF8001F81F8003E01F8007C01F800F801F800
+F801F800F801F800F801F8007C02F8007E0CF8001FF87F8007E03F8019167E951C>97
+D<FF800000FF8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
+001F8000001F8000001F8000001F8000001F87F0001FBFFC001FF03E001FC01F001F800F
+801F800FC01F8007C01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F8007
+E01F8007C01F8007C01F800FC01F800F801FC01F001E707E001C3FFC00180FE0001B237E
+A220>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC00
+00FC0000FC0000FC00007C00007E00007E00003E00181F00300FC06007FFC000FF001516
+7E9519>I<0001FF000001FF0000003F0000003F0000003F0000003F0000003F0000003F
+0000003F0000003F0000003F0000003F0000003F0000FE3F0007FFBF000FC1FF001F007F
+003E003F007E003F007C003F007C003F00FC003F00FC003F00FC003F00FC003F00FC003F
+00FC003F00FC003F007C003F007E003F003E003F001F007F000F81FF0007FF3FE001FC3F
+E01B237EA220>I<00FE0007FF800F83C01E01E03E00F07E00F07C00F87C0078FC0078FF
+FFF8FFFFF8FC0000FC0000FC00007C00007C00003E00183E00181F00300F80E003FFC000
+FF0015167E951A>I<001F8000FFE001F1F003E3F007E3F00FC3F00FC1E00FC0000FC000
+0FC0000FC0000FC0000FC000FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
+7FFC007FFC0014237EA212>I<00FE0F8003FF9FC00F83E3C01F01F3C01E00F0003E00F8
+003E00F8003E00F8003E00F8003E00F8001E00F0001F01F0000F83E0000BFF800008FE00
+0018000000180000001C0000001FFFE0001FFFFC000FFFFF0007FFFF001FFFFF807C001F
+C078000FC0F80007C0F80007C0F80007C07C000F803E001F001F807E000FFFFC0001FFE0
+001A217F951D>I<FF800000FF8000001F8000001F8000001F8000001F8000001F800000
+1F8000001F8000001F8000001F8000001F8000001F8000001F83F0001F8FFC001F987E00
+1FA03E001FC03F001FC03F001F803F001F803F001F803F001F803F001F803F001F803F00
+1F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00FFF1FFE0
+FFF1FFE01B237DA220>I<1E003F007F807F807F807F803F001E00000000000000000000
+000000FF80FF801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F
+801F801F801F80FFF0FFF00C247EA30F>I<FF800000FF8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+FF801F80FF801F803C001F8030001F80E0001F81C0001F8300001F8600001F9E00001FBE
+00001FFF00001FDF80001F8FC0001F07C0001F07E0001F03F0001F01F8001F00F8001F00
+FC001F007E00FFE1FFC0FFE1FFC01A237EA21E>107 D<FF80FF801F801F801F801F801F
+801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F
+801F801F801F801F801F801F801F801F80FFF0FFF00C237EA20F>I<FF03F803F800FF0F
+FE0FFE001F183F183F001F201F201F001F401FC01F801F401FC01F801F801F801F801F80
+1F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80
+1F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F80
+1F801F80FFF0FFF0FFF0FFF0FFF0FFF02C167D9531>I<FF03F000FF0FFC001F187E001F
+203E001F403F001F403F001F803F001F803F001F803F001F803F001F803F001F803F001F
+803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F00FFF1FFE0FF
+F1FFE01B167D9520>I<00FF0007FFE00F81F01F00F83E007C7C003E7C003E7C003EFC00
+3FFC003FFC003FFC003FFC003FFC003FFC003F7C003E7E007E3E007C1F00F80F81F007FF
+E000FF0018167E951D>I<FF87F000FFBFFC001FF07E001FC01F001F800F801F800FC01F
+800FC01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F8007E01F8007C01F
+800FC01F800FC01F801F801FC01F001FF07E001FBFFC001F8FE0001F8000001F8000001F
+8000001F8000001F8000001F8000001F8000001F800000FFF00000FFF000001B207E9520
+>I<00FE030007FF07000FC1CF001F00DF003F007F007E003F007E003F007C003F00FC00
+3F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F007E003F007E003F003E00
+7F001F00FF000FC1FF0007FF3F0000FC3F0000003F0000003F0000003F0000003F000000
+3F0000003F0000003F0000003F000001FFE00001FFE01B207E951E>I<FF0F80FF1FE01F
+33F01F63F01F43F01F43F01FC1E01F80001F80001F80001F80001F80001F80001F80001F
+80001F80001F80001F80001F80001F8000FFF800FFF80014167E9518>I<07F9801FFF80
+380780700380F00180F00180F80000FF0000FFF8007FFE003FFF001FFF8007FF80003FC0
+C007C0C003C0E003C0E003C0F00380FC0F00EFFE00C3F80012167E9517>I<0180000180
+000180000180000380000380000780000780000F80003F8000FFFF00FFFF001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F81801F81801F81
+801F81801F81800F83000FC30007FE0001F80011207F9F16>I<FF81FF00FF81FF001F80
+3F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F803F001F80
+3F001F803F001F803F001F803F001F803F001F803F001F807F001F80FF000FC1BF0007FF
+3FE001FC3FE01B167D9520>I<FFF01FE0FFF01FE01FC007000FC006000FE00E0007E00C
+0007F00C0003F0180003F0180001F8300001F8300000FC600000FC600000FEE000007EC0
+00007FC000003F8000003F8000001F0000001F0000000E0000000E00001B167F951E>I<
+FFF3FF83FCFFF3FF83FC1F807C00E00FC07C00C00FC03E00C00FE03E01C007E07F018007
+E07F018003F07F030003F0CF830003F8CF870001F9CFC60001F987C60000FD87EC0000FF
+03EC0000FF03FC00007F03F800007E01F800003E01F000003C00F000003C00F000001800
+600026167F9529>I<FFF07FC0FFF07FC00FC01C0007E0380007F0700003F0E00001F8C0
+0000FD8000007F8000007F0000003F0000001F8000003FC0000037E0000067F00000C3F0
+0001C1F8000380FC000700FE000E007F00FF81FFE0FF81FFE01B167F951E>I<FFF01FE0
+FFF01FE01FC007000FC006000FE00E0007E00C0007F00C0003F0180003F0180001F83000
+01F8300000FC600000FC600000FEE000007EC000007FC000003F8000003F8000001F0000
+001F0000000E0000000E0000000C0000000C00000018000078180000FC380000FC300000
+FC60000069C000007F8000001F0000001B207F951E>I<7FFFF07FFFF07C07E0700FC060
+1FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0701F
+80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E /Fi
+29 122 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC0001
+F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E00013157D99
+1A>42 D<007C3801FF3807FFF80F83F81E00F81C00783800783800387000387000387000
+00E00000E00000E00000E00000E00000E00000E00000E000007000007000387000383800
+383800381C00701E00F00F83E007FFC001FF80007C00151E7E9D1A>67
+D<FFFFF8FFFFF8FFFFF81C00381C00381C00381C00381C00381C00001C00001C0E001C0E
+001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00001C001C1C00
+1C1C001C1C001C1C001CFFFFFCFFFFFCFFFFFC161E7E9D1A>69 D<7FFFFCFFFFFC7FFFFC
+0E001C0E001C0E001C0E001C0E001C0E00000E00000E03800E03800E03800FFF800FFF80
+0FFF800E03800E03800E03800E00000E00000E00000E00000E00000E00000E00000E0000
+7FE000FFE0007FE000161E7F9D1A>I<FFFF80FFFF80FFFF8001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF80111E
+7C9D1A>73 D<7F03F8FF87FC7F03F81C01E01C03C01C03801C07001C0F001C1E001C1C00
+1C38001C78001CF0001CF8001DF8001FDC001F9C001F0E001E0F001E07001C07801C0380
+1C01C01C01C01C00E01C00E01C00707F00FCFF81FE7F00FC171E7F9D1A>75
+D<7FE000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001C0E00
+1C0E001C0E001C0E001C7FFFFCFFFFFC7FFFFC161E7F9D1A>I<FFFE00FFFF80FFFFC01C
+03E01C00F01C00701C00781C00381C00381C00381C00381C00781C00701C00F01C03E01F
+FFC01FFF801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF
+8000FF8000FF8000151E7E9D1A>80 D<FF01FEFF01FEFF01FE1C00701C00701C00701E00
+F00E00E00E00E00E00E00701C00701C00701C00701C003838003838003838003838001C7
+0001C70001C70001C70000C60000EE0000EE0000EE00006C00007C00007C00003800171E
+7F9D1A>86 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 D<1FF0003FFC007FFE0078
+0F00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380E0
+0380700780780F803FFFFC1FFDFC07F0FC16157D941A>97 D<FE0000FE0000FE00000E00
+000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1F00F80700F00380E00
+380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFF
+C00EFF80063E00161E7F9D1A>I<00FF8003FFC00FFFE01F01E03C00C078000070000070
+0000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003
+FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C0
+0001C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0
+E001C0E001C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>
+I<01F80007FF000FFF801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFF
+F0E000007000007000007800703C00701F01F00FFFE003FF8000FE0014157D941A>I<00
+07E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E0003FFF807FFFC03FFF80151E7F9D1A>I<FE0000FE0000FE00000E0000
+0E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FE
+FFE7FEFFE3FE171E7F9D1A>104 D<01C00003E00003E00003E00001C000000000000000
+0000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80
+121F7C9E1A>I<FFE000FFE000FFE00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>108
+D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C
+001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
+007F1F1F00FF9F9F807F1F1F00191580941A>I<FE3E00FEFF80FFFFC00FC1C00F80E00F
+00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
+00E0FFE3FEFFE7FEFFE3FE17157F941A>I<01F00007FC001FFF003E0F803C07807803C0
+7001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F80
+1FFF0007FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F00F80700F00380E00
+380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFF
+C00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000FFE0
+00FFE00016207F941A>I<7F81F8FF8FFC7F9FFE03FE1E03F80C03E00003E00003C00003
+80000380000380000380000380000380000380000380000380000380007FFF00FFFF007F
+FF0017157F941A>114 D<0180000380000380000380000380000380000380007FFFE0FF
+FFE0FFFFE003800003800003800003800003800003800003800003800003800003800003
+807003807003807003807001C1E001FFE000FF80003F00141C7F9B1A>116
+D<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03FFFE00FCFE17157F941A>I<7F
+C7FCFFC7FE7FC7FC0E00E00E00E00E00E00701C00701C00701C003838003838003838001
+C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<7FC7F8
+7FCFFC7FC7F80703C003838003C70001EF0000FE00007C00007800003800007C0000EE00
+01EE0001C7000383800783C00701C07FC7FCFFC7FE7FC7FC17157F941A>120
+D<7FC7FCFFC7FE7FC7FC0E00E00E00E00700E00701C00781C00381C003838001C38001C3
+8001C70000E70000E70000E600006600006E00003C00003C00003C000038000038000038
+0000780000700030700078E00071E0007FC0003F80001E000017207F941A>I
+E /Fj 1 59 df<70F8F8F87005057C840D>58 D E /Fk 6 102 df<06000F001F800F80
+0F800380070007000F000E003C007C00F0006000090E769B18>39
+D<7FFFC0FFFFE0FFFFE07FFFC013047C8F18>45 D<003E1800FFB801FFF807C1F8078078
+0E00781E00781C0070380030380000700000700000700000E00000E00000E00000E00000
+E00000E00000E000C07001C07001C07003C03807803C0F001FFE000FFC0003F000151C7C
+9B18>67 D<07E01F800FE03FC007E03F8003B02E0003B06E0003B06E0003B0CE000730DC
+000731DC0007319C0007319C0007339C0007331C000E3338000E3738000E3638000E3E38
+000E3C38000E1838001C0070001C0070001C0070001C0070001C0070001C007000FE03F8
+00FF03FC00FE03F8001A1C7F9B18>77 D<6000F000F000F000F8007800780078007C003C
+003C003C003E001E001E001E001F000F000F000F000F8007800780078007C003C003C003
+C003C003E001E001E001E001F000F000600C24789F18>92 D<00F80007FE000FFF001F07
+803C03807801C07001C0E001C0E001C0FFFFC0FFFFC0FFFF80E00000E00000E003007007
+80780F003FFE001FFC0007F00012147B9318>101 D E /Fl 52 122
+df<3C7EFFFFFFFF7E3C08087C8711>46 D<007F800003FFF00007E1F8000F807C001F00
+3E003F003F003E001F007E001F807E001F807E001F807E001F80FE001FC0FE001FC0FE00
+1FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE00
+1FC0FE001FC07E001F807E001F807E001F807E001F803F003F003F003F001F003E000F80
+7C0007E1F80003FFF000007F80001A237EA21F>48 D<001C00003C0000FC00FFFC00FFFC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC007FFFFC7FFFFC16237CA21F>I<01FF0007FFC01E07F038
+03F86001FC7C00FEFE00FEFE00FFFE007FFE007F7C007F3800FF0000FF0000FE0000FE00
+01FC0001F80003F00007E0000780000F00001E00003C0000700000E00301C00303800707
+00060600060FFFFE1FFFFE3FFFFE7FFFFCFFFFFCFFFFFC18237DA21F>I<01FF0007FFE0
+1E03F03801F83C01FC7E00FE7E00FE7E00FE3E00FE1C01FE0001FC0001FC0003F80007F0
+000FC001FF0001FF000007E00001F00001F80000FC0000FE0000FF0000FF1000FF7C00FF
+FE00FFFE00FFFE00FEFE00FE7C01FC7001F83E07F00FFFC001FF0018237DA21F>I<0000
+380000007800000078000000F8000001F8000003F8000007F8000006F800000CF800001C
+F8000038F8000030F8000060F80000E0F80001C0F8000180F8000300F8000700F8000E00
+F8001C00F8001800F8003000F8007000F800E000F800FFFFFFC0FFFFFFC00001F8000001
+F8000001F8000001F8000001F8000001F8000001F800007FFFC0007FFFC01A237EA21F>
+I<18000C1F007C1FFFF81FFFF01FFFE01FFFC01FFF801FFC001800001800001800001800
+0018000018FF001BFFE01F03F01C00F80800FC00007E00007E00007E00007F00007F7800
+7FFC007FFC007FFC007FFC007EF8007E6000FC7000FC3801F81E07E007FFC001FE001823
+7DA21F>I<001FC0007FF001F03803E00C07803E0F807E1F007E3F007E3F007E7E003C7E
+00007E00007E0000FE3FC0FE7FF0FE80F8FF80FCFF007CFF007EFE007EFE007FFE007FFE
+007FFE007F7E007F7E007F7E007F7E007F3E007E3F007E1F007C0F80F807C1F003FFC000
+7F0018237DA21F>I<300000003C0000003FFFFFC03FFFFFC03FFFFF807FFFFF007FFFFE
+007FFFFC006000180060001800E0003000C0006000C000C0000001800000018000000300
+0000060000000E0000000E0000001C0000001C0000003C0000003C000000780000007800
+0000F8000000F8000000F8000000F8000001F8000001F8000001F8000001F8000001F800
+0001F8000000F00000006000001A257DA41F>I<00FF8003FFE00F01F81C007C38003C38
+001E78001E78001E7C001E7E001E7F803C7FE03C3FF8781FFDF01FFFC00FFFC003FFE003
+FFF80FFFFC1E1FFC3C07FE7803FE7800FFF0003FF0001FF0000FF0000FF0000FF0000E78
+000E78001C3C00381F80F007FFE001FF0018237DA21F>I<00FF0003FFC00F83E01F00F0
+3F00F87E007C7E007C7E007EFE007EFE007EFE007EFE007FFE007FFE007FFE007F7E007F
+7E00FF3E00FF3F01FF1F017F0FFE7F03FC7F00007F00007E00007E3C007E7E00FC7E00FC
+7E00F87E00F07C01F03003E01C0F800FFF0003F80018237DA21F>I<00001C0000000000
+1C00000000003E00000000003E00000000003E00000000007F00000000007F0000000000
+FF8000000000FF8000000000FF80000000019FC0000000019FC0000000031FE000000003
+0FE0000000070FF00000000607F00000000607F00000000C07F80000000C03F80000001C
+03FC0000001801FC0000001801FC0000003000FE0000003000FE0000007FFFFF0000007F
+FFFF000000E0007F800000C0003F800000C0003F80000180003FC0000180001FC0000380
+001FE0000300000FE0000300000FE00007000007F000FFF000FFFF80FFF000FFFF802925
+7EA42E>65 D<FFFFFFE000FFFFFFFC0003F0007F0003F0003F8003F0001FC003F0000FE0
+03F0000FE003F0000FF003F0000FF003F00007F003F0000FF003F0000FF003F0000FE003
+F0001FE003F0001FC003F0007F8003F001FE0003FFFFF80003FFFFFF0003F0003FC003F0
+000FE003F00007F003F00007F803F00003F803F00003FC03F00003FC03F00003FC03F000
+03FC03F00003FC03F00003FC03F00003F803F00007F803F0000FF003F0001FE003F0007F
+C0FFFFFFFF00FFFFFFF80026257EA42C>I<0000FF8008000FFFF018003FC03C7800FE00
+06F801F80003F803F00001F807E00000F80FC00000781FC00000783F800000383F800000
+387F800000187F000000187F00000018FF00000000FF00000000FF00000000FF00000000
+FF00000000FF00000000FF00000000FF00000000FF000000007F000000007F000000187F
+800000183F800000183F800000181FC00000300FC000003007E000006003F00000C001F8
+00018000FE000700003FC01E00000FFFF8000000FFC00025257DA42C>I<FFFFFFFF00FF
+FFFFFF0003F8007F0003F8000F8003F800078003F800038003F800038003F800018003F8
+00018003F800018003F80000C003F80600C003F80600C003F806000003F806000003F80E
+000003F81E000003FFFE000003FFFE000003F81E000003F80E000003F806000003F80600
+0003F806006003F806006003F800006003F80000C003F80000C003F80000C003F80000C0
+03F80001C003F80003C003F80003C003F8000F8003F8003F80FFFFFFFF80FFFFFFFF8023
+257EA428>69 D<FFFFFFFE00FFFFFFFE0003F800FE0003F8001F0003F8000F0003F80007
+0003F800070003F800030003F800030003F800030003F800018003F803018003F8030180
+03F803000003F803000003F807000003F80F000003FFFF000003FFFF000003F80F000003
+F807000003F803000003F803000003F803000003F803000003F800000003F800000003F8
+00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+0000FFFFF00000FFFFF0000021257EA427>I<FFFFE0FFFFE0FFFFE0FFFFE003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003FFFFFFF80003FFFFFFF80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F800FFFFE0FFFFE0FFFFE0FFFFE02B257EA430>72
+D<FFFFE0FFFFE003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800FFFF
+E0FFFFE013257EA417>I<FFFFE007FF80FFFFE007FF8003F80000780003F80000600003
+F80000C00003F80001800003F80007000003F8000E000003F80018000003F80030000003
+F80060000003F800C0000003F80380000003F80700000003F80E00000003F81F00000003
+F83F80000003F87F80000003F8DFC0000003FB8FE0000003FF0FF0000003FC07F0000003
+F803F8000003F803FC000003F801FE000003F800FE000003F8007F000003F8007F800003
+F8003F800003F8001FC00003F8000FE00003F8000FF00003F80007F00003F80003F80003
+F80003FC00FFFFE03FFFC0FFFFE03FFFC02A257EA430>75 D<FFFFF000FFFFF00003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800
+0003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800
+0003F8000003F8000003F8000303F8000303F8000303F8000603F8000603F8000603F800
+0E03F8000E03F8001E03F8003E03F8007C03F803FCFFFFFFFCFFFFFFFC20257EA425>I<
+FFF8000000FFF8FFFC000001FFF803FC000001FE00037E0000037E00037E0000037E0003
+7E0000037E00033F0000067E00033F0000067E00031F80000C7E00031F80000C7E00030F
+C000187E00030FC000187E000307E000307E000307E000307E000307E000307E000303F0
+00607E000303F000607E000301F800C07E000301F800C07E000300FC01807E000300FC01
+807E0003007E03007E0003007E03007E0003007E03007E0003003F06007E0003003F0600
+7E0003001F8C007E0003001F8C007E0003000FD8007E0003000FD8007E00030007F0007E
+00030007F0007E00030007F0007E00030003E0007E00078003E0007E00FFFC01C01FFFF8
+FFFC01C01FFFF835257EA43A>I<FFF80007FFE0FFFC0007FFE003FE00003C0003FF0000
+1800037F00001800033F80001800031FC0001800031FE0001800030FF00018000307F800
+18000303F80018000301FC0018000300FE0018000300FF00180003007F80180003003FC0
+180003001FC0180003000FE0180003000FF01800030007F81800030003FC1800030001FC
+1800030000FE18000300007F18000300007F98000300003FD8000300001FF8000300000F
+F80003000007F80003000003F80003000003F80003000001F80003000000F80003000000
+7800078000003800FFFC00001800FFFC000018002B257EA430>I<FFFFFF800000FFFFFF
+F8000003F801FE000003F8007F000003F8003F800003F8001FC00003F8001FC00003F800
+1FE00003F8001FE00003F8001FE00003F8001FE00003F8001FE00003F8001FC00003F800
+1FC00003F8003F800003F8007F000003F801FE000003FFFFF8000003FFFFC0000003F803
+F0000003F801F8000003F800FC000003F8007E000003F8007E000003F8007F000003F800
+7F000003F8007F000003F8007F000003F8007F800003F8007F800003F8007F800003F800
+7F806003F8003FC06003F8003FC0C003F8001FE1C0FFFFE00FFF80FFFFE001FE002B257E
+A42E>82 D<00FF008007FFE3800F80F7801E001F803C000F807800078078000380F80003
+80F8000180F8000180FC000180FC000000FF0000007FE000007FFE00003FFFE0003FFFF8
+001FFFFE0007FFFF0003FFFF80007FFF800003FFC000003FC000000FE0000007E0000007
+E0C00003E0C00003E0C00003E0C00003C0E00003C0F00007C0F8000780FC000F00FFC03E
+00E3FFF800803FE0001B257DA422>I<7FFFFFFFF87FFFFFFFF87E00FE01F87800FE0078
+7000FE00386000FE00186000FE0018E000FE001CE000FE000CC000FE000CC000FE000CC0
+00FE000CC000FE000C0000FE00000000FE00000000FE00000000FE00000000FE00000000
+FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
+000000FE000000FFFFFE0000FFFFFE0026247EA32B>I<FFFFE00FFFC0FFFFE00FFFC003
+F80000780003F80000300003F80000300003F80000300003F80000300003F80000300003
+F80000300003F80000300003F80000300003F80000300003F80000300003F80000300003
+F80000300003F80000300003F80000300003F80000300003F80000300003F80000300003
+F80000300003F80000300003F80000300003F80000300003F80000300003F80000300003
+F80000300003F80000300001F80000600001FC0000600000FC0000C000007C0000C00000
+3E00018000001F00070000000FE03E00000003FFF8000000007FC000002A257EA42F>I<
+FFFF8001FFE0FFFF8001FFE007F800001C0003F80000180003F80000180003FC00003800
+01FC0000300001FE0000700000FE0000600000FF00006000007F0000C000007F8000C000
+003F80018000003F80018000003FC0038000001FC0030000001FE0070000000FE0060000
+000FF00600000007F00C00000007F00C00000003F81800000003F81800000003FC380000
+0001FC3000000001FE7000000000FE6000000000FF60000000007FC0000000007FC00000
+00003F80000000003F80000000003F80000000001F00000000001F00000000000E000000
+00000E0000002B257FA42E>I<FFFF81FFFE01FFF0FFFF81FFFE01FFF007F0001FC0000F
+0007F0001FE000060003F8000FE0000C0003F8000FE0000C0003F80007F0000C0001FC00
+07F000180001FC0007F000180001FE000FF800380000FE000FF800300000FE001FFC0030
+00007F0019FC006000007F0019FC006000007F8030FE006000003F8030FE00C000003F80
+30FF00C000003FC0607F01C000001FC0607F018000001FC0E07F818000000FE0C03F8300
+00000FE0C03F830000000FF1801FC300000007F1801FC600000007F1801FE600000007FB
+000FEE00000003FB000FEC00000003FF000FFC00000001FE0007F800000001FE0007F800
+000001FC0003F800000000FC0003F000000000FC0003F000000000F80001F00000000078
+0001E000000000780001E000000000300000C000003C257FA43F>I<FFFFC001FFE0FFFF
+C001FFE007F800001C0003FC0000180003FC0000380001FE0000300000FF0000600000FF
+0000E000007F8000C000003FC0018000003FC0038000001FE0030000000FF0060000000F
+F00E00000007F80C00000003FC1800000003FC3800000001FE7000000000FF6000000000
+FFE0000000007FC0000000003F80000000003F80000000003F80000000003F8000000000
+3F80000000003F80000000003F80000000003F80000000003F80000000003F8000000000
+3F80000000003F80000000003F80000000003F800000000FFFFC0000000FFFFC00002B25
+7FA42E>89 D<07FF00001FFFE0003E03F0003F00F8003F00FC003F007E001E007E000000
+7E0000007E0000007E00001FFE0003FE7E000FC07E001F007E003E007E007E007E00FC00
+7E00FC007E00FC007E00FC00BE007E01BE003F073E001FFE1FE007F00FE01B187E971E>
+97 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC1FC000FCFFF000FFC0FC00F
+F007E00FC003F00FC003F00FC001F80FC001F80FC001FC0FC001FC0FC001FC0FC001FC0F
+C001FC0FC001FC0FC001FC0FC001FC0FC001F80FC001F80FC003F00FE003F00FF007E00F
+1C1F800E0FFF000C03F8001E267FA522>I<007FE003FFF807C07C1F80FC1F00FC3F00FC
+7E00787E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00007E00007F0000
+3F000C1F800C1FC01807E07003FFE0007F0016187E971B>I<0000FFC00000FFC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC0007F0FC003FFCFC00FE0FFC01F803FC03F000FC03F000FC07E000F
+C07E000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000F
+C07E000FC07E000FC03F000FC03F001FC01F803FC00FC0EFC003FFCFFC00FE0FFC1E267E
+A522>I<007F0003FFC007C1F00F80F81F00F83F007C7E007C7E007EFE007EFE007EFFFF
+FEFFFFFEFE0000FE0000FE00007E00007E00007E00063F00061F000C0F801807E07003FF
+E0007F8017187E971C>I<001FC0007FF001F8F003E1F807E1F807C1F80FC0F00FC0000F
+C0000FC0000FC0000FC0000FC0000FC000FFFF00FFFF000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC000FFFE00FFFE0015267EA513>I<01FF07C007FFDFE00F83F1E0
+1F01F1E03E00F8007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC003E00F800
+1F01F0000F83E0000FFFC00011FF00003000000030000000380000003C0000003FFFE000
+1FFFFC001FFFFE000FFFFF001FFFFF803C003F8078000FC0F80007C0F80007C0F80007C0
+F80007C07C000F803E001F001F807E0007FFF80000FFC0001B247E971F>I<FFC00000FF
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC000000FC000000FC0FE000FC3FF800FCE0FC00FD80FC00FD007E00F
+E007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00F
+C007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC7FFEFF
+FC7FFE1F267EA522>I<0F001F803FC03FC03FC03FC01F800F0000000000000000000000
+000000007FC07FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC0FFF8FFF80D277EA611>I<FFC00000FFC000000FC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC01FF00FC01FF00FC007800FC00E000FC01C000FC030000FC060000F
+C1C0000FC380000FC780000FDF80000FFFC0000FE7E0000FC3F0000F81F0000F81F8000F
+80FC000F807E000F803F000F803F000F801F800F800FC0FFF83FF8FFF83FF81D267FA520
+>107 D<FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC0FFFCFFFC0E267EA511>I<FF80FE007F00FF83FF81FFC00F8E0FC707E00F980F
+CC07E00F9007E803F00FA007F003F00FA007F003F00FC007E003F00FC007E003F00FC007
+E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007
+E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007E003F00FC007
+E003F0FFFC7FFE3FFFFFFC7FFE3FFF30187E9733>I<FF80FE00FF83FF800F8E0FC00F98
+0FC00F9007E00FA007E00FA007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E0FFFC7FFEFFFC7FFE1F187E9722>I<007F800003FFF00007C0F8001F807E003F003F
+003F003F007E001F807E001F80FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001F
+C0FE001FC0FE001FC07E001F807E001F803F003F003F003F001F807E000FC0FC0003FFF0
+00007F80001A187E971F>I<FFC1FC00FFCFFF000FFC1FC00FF007E00FC007F00FC003F0
+0FC003F80FC001F80FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC0FC001FC
+0FC001FC0FC003F80FC003F80FC003F00FE007F00FF00FE00FDC1F800FCFFF000FC3F800
+0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000
+FFFC0000FFFC00001E237F9722>I<FF83E0FF8FF80F8C7C0F90FC0FB0FC0FA0FC0FA078
+0FE0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC000FFFE00FFFE0016187F9719>114 D<07F8C01FFFC03C07C07001C0
+F000C0F000C0F000C0FC0000FF80007FFC007FFE003FFF800FFFC003FFC0001FE00003E0
+C001E0C001E0E001E0E001C0F003C0FC0780EFFF00C3FC0013187E9718>I<00C00000C0
+0000C00000C00001C00001C00001C00003C00007C0000FC0001FC000FFFFC0FFFFC00FC0
+000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+600FC0600FC0600FC0600FC0600FC06007E0C007E1C001FF80007E0013237FA218>I<FF
+C07FE0FFC07FE00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00F
+C007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00F
+C00FE00FC00FE007C017E007E067E003FFC7FE007F07FE1F187E9722>I<FFF80FF8FFF8
+0FF80FC001C00FC0018007E0030007E0030007F0070003F0060003F80E0001F80C0001FC
+0C0000FC180000FE1800007E3000007E3000003F6000003F6000003FE000001FC000001F
+C000000F8000000F800000070000000700001D187F9720>I<FFF9FFE0FF80FFF9FFE0FF
+801FC03F001C000FC01F0018000FC01F80180007E01F80300007E01F80300007F03FC070
+0003F037C0600003F037E0600001F863E0C00001F863E0C00001FCE3F1C00000FCC1F180
+0000FCC1F98000007F80FB0000007F80FB0000007F80FF0000003F007E0000003F007E00
+00001E003C0000001E003C0000001E003C0000000C0018000029187F972C>I<FFF83FF0
+FFF83FF00FC00F0007E00E0003F01C0003F8380001FC700000FC6000007EC000003F8000
+003F8000001F8000000FC000001FE000001FF0000033F8000061F80000E0FC0001C07E00
+03807F0007003F800F001F80FFC07FF8FFC07FF81D187F9720>I<FFF80FF8FFF80FF80F
+C001C00FC0018007E0030007E0030007F0070003F0060003F80E0001F80C0001FC0C0000
+FC180000FE1800007E3000007E3000003F6000003F6000003FE000001FC000001FC00000
+0F8000000F800000070000000700000006000000060000000C0000300C0000781C0000FC
+180000FC300000FC70000068E000007FC000001F0000001D237F9720>I
+E /Fm 28 122 df<0003E0001C1800381800703C00E03C00E03801C00001C00001C00001
+C00001C0000380007FFFF00380700380700380700380700700E00700E00700E00700E007
+00E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF0FF016207E9F
+19>12 D<FFF0FFF00C027E8A0F>45 D<07FFFFF800F80078007800380078001800F00018
+00F0000800F0000800F0000800F0000800F0000801E0080001E0080001E0080001E01800
+01E0380001FFF80003C0300003C0100003C0100003C0100003C0100003C0000007800000
+07800000078000000780000007800000078000000F0000000F800000FFFC00001D1F7E9E
+1E>70 D<07FF803FE000F8001F000078000C00007800180000F000200000F000400000F0
+00800000F001000000F002000000F008000001E010000001E020000001E060000001E0F0
+000001E1F0000001E4F8000003C878000003D07C000003E03C000003C03E000003C01E00
+0003C01F000007800F000007800F80000780078000078007C000078003C000078003E000
+0F0001E0000F8003F000FFF00FFE00231F7E9E23>75 D<07F8000C0C001E06001E07001C
+070000070000070000070000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F0
+1E10F02E20784F401F878014147D9317>97 D<0700003F00000F00000700000700000E00
+000E00000E00000E00000E00000E00001C00001C7C001D83001E01801C01C01C00E03800
+E03800F03800F03800F03800F03800F07001E07001E07001C07003C0700380700700E80E
+00CC380083E00014207B9F19>I<00FE000383000E07801C0780380700380000780000F0
+0000F00000F00000F00000E00000E00000E00000F00000F001007002003804001C180007
+E00011147D9314>I<0000380001F8000078000038000038000070000070000070000070
+0000700000700000E000FCE00382E00601E01C01E03C00E03801C07801C0F001C0F001C0
+F001C0F001C0E00380E00380E00380E00380F00380700780380F001C378007C7E015207D
+9F19>I<00F800070E000E07001C0700380380780380700380F00380F00380FFFF80F000
+00E00000E00000E00000E00000F001007002003004001C180007E00011147D9314>I<00
+07C0001C600030F00060F000E0E000C00001C00001C00001C00001C00001C0000380003F
+FC000380000380000380000380000700000700000700000700000700000700000E00000E
+00000E00000E00000E00000E00001C00001E0000FFC00014207F9F0E>I<00000E003E11
+00E1A301C1C20381E00780E00701E00F01E00F01E00F01E00703C007038007870004FC00
+0800000800001800001C00000FFF000FFFC00FFFE01800F0300030600030C00030C00030
+C000306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E0
+0001C00001C00001C00001C00001C00001C000038000038F800390E003A0E003C0600380
+600780E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01
+C01C03801E03C0FF8FF014207E9F19>I<01C003E003E003C00180000000000000000000
+00000003801F800780038003800700070007000700070007000E000E000E000E000E000E
+001C001E00FF800B1F7F9E0C>I<00E00007E00001E00000E00000E00001C00001C00001
+C00001C00001C00001C0000380000381FC0380F00380C003818003810007040007080007
+1800073800077C00071C000E1C000E0E000E0E000E0F000E07000E07801C03801E07C0FF
+8FF016207E9F18>107 D<00E007E001E000E000E001C001C001C001C001C001C0038003
+8003800380038003800700070007000700070007000E000E000E000E000E000E001C001E
+00FF800B207F9F0C>I<0387C07C001F9861860007A072070003C0340300038038030007
+80780700070070070007007007000700700700070070070007007007000E00E00E000E00
+E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FFCFFC
+FFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E00700E00700E0
+0700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF8FF014147E
+9319>I<00FC000387000E01801C00C03800E03800E07000F0F000F0F000F0F000F0F000
+F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007E00014147D9317>I<00
+E3E00007EC380000F01C0000E00E0000E00F0001C0070001C0078001C0078001C0078001
+C0078001C0078003800F0003800F0003800E0003801E0003801C00038038000740700007
+61C000071F00000700000007000000070000000E0000000E0000000E0000000E0000001E
+000000FFC00000191D809319>I<00FC200382600702601E01E03C01E03801C07801C0F0
+01C0F001C0F001C0F001C0E00380E00380F00380F00380F00780700780380F001C370007
+C700000700000700000700000E00000E00000E00000E00001E0000FFC0131D7D9318>I<
+038E001FB38007C78003C7800383000780000700000700000700000700000700000E0000
+0E00000E00000E00000E00000E00001C00001E0000FFC00011147E9312>I<01F9060708
+031803180138023C001F001FF007FC01FE001F40074003400360036006F004C81887E010
+147F9312>I<0080010001000100030007000F001E00FFF80E000E000E000E001C001C00
+1C001C001C001C00380038103810381038103820382018400F800D1C7C9B12>I<1C0380
+FC1F803C07801C03801C0380380700380700380700380700380700380700700E00700E00
+700E00700E00701E00701E00703C00305E001F9F8011147B9319>I<FF83F81E00E01C00
+C01C00801E00800E01000E03000E02000E040007040007080007080007100003900003A0
+0003E00003C00003800001800001000015147C9318>I<FF9FE1FC3C0780701C0300601C
+0380601C0380401C0380800E0780800E0D81000E0981000E19C2000E11C2000F21C40007
+20C4000740C8000740E8000780F0000780F0000300E00003006000020040001E147C9321
+>I<1FF0FF03C07801C07001C04000E0C000E180007300007600003C00003C00001C0000
+2E00004E000087000107000203800403800C01C03C03E0FE07FC18147F9318>I<0FF83F
+8001E00E0001C00C0001C0080001E0080000E0100000E0300000E0200000E04000007040
+0000708000007080000071000000390000003A0000003E0000003C000000380000001800
+00001000000010000000200000002000000040000070C00000F0800000F1000000E60000
+0078000000191D809318>I E /Fn 38 124 df<60F0F070101020204040040A7D960A>
+39 D<FF80FF80090280870C>45 D<06000E00FE000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107
+0002038002038002038007FFC00401C00401C00800E00800E01800F03800F0FE03FE1717
+7F961A>65 D<FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C01C0
+1FFF801FFFC01C00E01C00701C00301C00381C00381C00381C00381C00701C00E01C01C0
+FFFF0015177F9619>I<00FC100383300E00B01C0070380030300030700010600010E000
+10E00000E00000E00000E00000E00000E000106000107000103000203800201C00400E00
+8003830000FC0014177E9619>I<FFFF001C01C01C00E01C00301C00381C00181C001C1C
+000C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000C1C001C1C001C1C00381C
+00301C00601C01C0FFFF0017177F961B>I<FFFFE01C00E01C00601C00201C00101C0010
+1C00101C04001C04001C04001C0C001FFC001C0C001C04001C04081C04081C00081C0018
+1C00101C00101C00301C00F0FFFFF015177F9618>I<FFFFE01C00E01C00601C00201C00
+101C00101C00101C04001C04001C04001C0C001FFC001C0C001C04001C04001C04001C00
+001C00001C00001C00001C00001C0000FFC00014177F9617>I<0FF800E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F00
+0D177E9612>74 D<FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C00001C00001C00001C00201C00201C00201C00601C00601C00401C00C01C
+03C0FFFFC013177F9616>76 D<FE0003F81E0003C0170005C0170005C0170005C0138009
+C0138009C011C011C011C011C011C011C010E021C010E021C0107041C0107041C0107041
+C0103881C0103881C0101D01C0101D01C0100E01C0100E01C0380E01C0FE040FF81D177F
+9620>I<FC00FE1E00381F001017001013801011C01011C01010E0101070101038101038
+10101C10100E10100F101007101003901001D01001D01000F0100070100030380030FE00
+1017177F961A>I<FFFE001C03801C00C01C00601C00701C00701C00701C00701C00601C
+00C01C03801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+0000FF800014177F9618>80 D<FFFC001C03801C00C01C00E01C00701C00701C00701C00
+701C00E01C00C01C03801FFE001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00
+E11C00E11C0072FF803C18177F961A>82 D<0FC4302C601C400CC004C004C004E0007000
+7F003FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E9614>I<7F
+FFF860381840380840380880380480380480380400380000380000380000380000380000
+380000380000380000380000380000380000380000380000380000380003FF8016177F96
+19>I<FF80FE1C00381C00101C00101C00101C00101C00101C00101C00101C00101C0010
+1C00101C00101C00101C00101C00101C00101C00100E0020060020030040018180007E00
+17177F961A>I<FCFCC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0FCFC06217D980A>91 D<3FC0706070302038003803F81E3830387038E039E039E079
+70FF1F1E100E7F8D12>97 D<F80000380000380000380000380000380000380000380000
+38000039F0003E0C00380600380700380300380380380380380380380380380300380700
+380600361C0021F00011177F9614>I<003E00000E00000E00000E00000E00000E00000E
+00000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E
+00700E00301E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000
+E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C001C001C001C
+001C00FF801C001C001C001C001C001C001C001C001C001C001C001C007F800C1780960B
+>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006
+C006600C38380FE010157F8D12>I<F80038003800380038003800380038003800383E38
+3838303840388039803FC039E038E038F03878383C383CFE7F10177F9613>107
+D<F8383838383838383838383838383838383838383838FE07177F960A>I<07C0183030
+18600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12>111
+D<F9F0003E1C00380600380700380300380380380380380380380380380300380700380E
+003E1C0039F000380000380000380000380000380000FE000011147F8D14>I<07C2001C
+2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007
+CE00000E00000E00000E00000E00000E00003F8011147F8D13>I<F9E03A703C70382038
+0038003800380038003800380038003800FF000C0E7F8D0E>I<1F4060C0C040C040E000
+FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<0800080008001800180038
+00FFC0380038003800380038003800380038403840384038401C800F000A147F930E>I<
+F83E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00381E00
+1C2E0007CF80110E7F8D14>I<FEFE7C383838383810383C101C3C201C4C201E4E600ECE
+400E8740078780070380070380030300020100160E7F8D19>119
+D<FE3F3C1C1C100E20074007C0038001C002E004F008701838383CFC7F100E7F8D13>I<
+FE1F380E3C0C1C081C080E100E100720072007E003C003C00180018001000100E200E200
+A400780010147F8D13>I<FFFF801101808812>123 D E /Fo 2 106
+df<00800180030003000300060006000C000C000C001800180018003000300060006000
+6000C000C000600060006000300030001800180018000C000C000C000600060003000300
+03000180008009267D9B0F>104 D<C000C000600060006000300030001800180018000C
+000C000C000600060003000300030001800180030003000300060006000C000C000C0018
+001800180030003000600060006000C000C00009267E9B0F>I E
+/Fp 8 89 df<0007F008003C0C1800E0033801C000B8078000780F0000380E0000381E00
+00183C0000183C0000087C0000087800000878000000F8000000F8000000F8000000F800
+0000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E00
+00780E0000780F0000780780007801C000B800E00118003C0E080007F00020217C9F27>
+71 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF00C1F7D9E12>73
+D<FF000FF80F8003E00F8000800BC0008009E0008009E0008008F0008008780080087800
+80083C0080081E0080081E0080080F008008078080080780800803C0800801E0800801E0
+800800F080080078800800788008003C8008001E8008001E8008000F8008000780080007
+8008000380080001803E000180FF8000801D1F7C9E25>78 D<001FE0000070380001C00E
+0003800700070003800F0003C01E0001E03C0000F03C0000F07C0000F87C0000F8780000
+78F800007CF800007CF800007CF800007CF800007CF800007CF800007CF800007CF80000
+7C780000787C0000F87C0000F83C0000F03E0001F01E0001E00F0003C007000380038007
+0001E01E0000703800001FE0001E217C9F26>I<FFFFF0000F803E0007800F0007800780
+078003C0078003C0078003E0078003E0078003E0078003E0078003C0078003C007800780
+07800F0007803E0007FFF000078000000780000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000000FC00000FFFC0000
+1B1F7D9E22>I<03F0200C0C601803E03000E06000E0600060E00060E00020E00020E000
+20F00000F800007C00007F80003FFC001FFF0007FF8001FFC0000FE00003E00001E00000
+F0000070800070800070800070800070C00060C000E0E000C0F80180C6030081FC001421
+7C9F1C>83 D<FFF00FF80F0003E00F0000800F0000800F0000800F0000800F0000800F00
+00800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F00
+00800F0000800F0000800F0000800F0000800F0000800F0000800F000080070001000780
+0100038001000380020001C0040000E0080000383000000FC0001D207C9E25>85
+D<7FF807FE000FE001F00007C001C00003E000800001E001000001F002000000F8060000
+0078040000003C080000003E180000001F100000000F200000000FC000000007C0000000
+03C000000001E000000003F000000006F80000000478000000087C000000183E00000010
+1E000000201F000000400F800000C0078000008003C000010003E000030001F000070000
+F0001F8001F800FFC007FF80211F7E9E25>88 D E /Fq 34 121
+df<0001C0000003C000000FC000007FC0001FFFC000FFFFC000FFBFC000E03FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC0007FFFFFF07FFF
+FFF07FFFFFF01C2E7AAD28>49 D<003FE00001FFFE0007FFFF800F80FFC01E003FE03800
+1FF07C000FF87E0007FCFF0007FCFF8007FEFF8007FEFF8003FEFF8003FE7F0003FE3E00
+07FE000007FE000007FC000007FC00000FF800000FF800000FF000001FE000001FC00000
+3F8000007F0000007E000000F8000001F0000003E0000007C000000F0000001E000E003C
+000E0038000E0070001E00E0001C01C0001C0300003C07FFFFFC0FFFFFFC1FFFFFFC3FFF
+FFFC7FFFFFF8FFFFFFF8FFFFFFF8FFFFFFF81F2E7CAD28>I<000003FF80018000003FFF
+F003800001FFFFFC07800007FF003F0F80001FF800079F80003FC00001FF8000FF800000
+FF8001FE0000007F8003FC0000003F8007FC0000001F8007F80000000F800FF00000000F
+801FF000000007801FF000000007803FE000000007803FE000000003807FE00000000380
+7FE000000003807FC000000000007FC00000000000FFC00000000000FFC00000000000FF
+C00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0
+0000000000FFC000000000007FC000000000007FC000000000007FE000000000007FE000
+000003803FE000000003803FE000000003801FF000000003801FF000000007800FF00000
+00070007F8000000070007FC0000000E0003FC0000001E0001FE0000001C0000FF800000
+7800003FC00000F000001FF80003E0000007FF003F80000001FFFFFE000000003FFFF800
+00000003FF80000031317CB03A>67 D<FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000FF
+80003FF000FF800007F800FF800003F800FF800000F800FF800000F800FF8000007800FF
+8000007800FF8000003800FF8000003800FF8000003800FF8000001C00FF8007001C00FF
+8007001C00FF8007001C00FF8007000000FF8007000000FF800F000000FF801F000000FF
+803F000000FFFFFF000000FFFFFF000000FFFFFF000000FF803F000000FF801F000000FF
+800F000000FF8007000000FF8007000000FF8007000700FF8007000700FF8007000700FF
+8000000E00FF8000000E00FF8000000E00FF8000000E00FF8000001E00FF8000001E00FF
+8000003C00FF8000003C00FF8000007C00FF800000FC00FF800001FC00FF800007FC00FF
+80003FFCFFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF830317EB035>69
+D<FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE000FF80007FE000FF80000FF000FF800003
+F000FF800001F000FF800001F000FF800000F000FF800000F000FF8000007000FF800000
+7000FF8000007000FF8000003800FF8000003800FF8007003800FF8007003800FF800700
+0000FF8007000000FF8007000000FF800F000000FF801F000000FF803F000000FFFFFF00
+0000FFFFFF000000FFFFFF000000FF803F000000FF801F000000FF800F000000FF800700
+0000FF8007000000FF8007000000FF8007000000FF8007000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF80000000FFFFFFC00000FFFFFFC000
+00FFFFFFC000002D317EB033>I<000003FF00030000007FFFF007000001FFFFFC0F0000
+07FF007E1F00001FF0000FBF00007FC00003FF0000FF800001FF0001FE0000007F0003FC
+0000007F0007FC0000003F000FF80000001F000FF00000001F001FF00000000F001FF000
+00000F003FE000000007003FE000000007007FE000000007007FE000000007007FC00000
+000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000
+0000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000000
+00FFC00007FFFFF87FC00007FFFFF87FE00007FFFFF87FE0000001FF003FE0000001FF00
+3FE0000001FF001FF0000001FF001FF0000001FF000FF0000001FF000FF8000001FF0007
+FC000001FF0003FC000001FF0001FE000001FF0000FF800001FF00007FC00003FF00001F
+F800077F000007FF003E3F000001FFFFFC1F0000007FFFF00F00000003FF80030035317C
+B03F>I<FFFFFF80FFFFFF80FFFFFF8000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF8000FFFFFF80FFFFFF80FFFFFF8019317EB01E>73
+D<FFFFFF800000FFFFFF800000FFFFFF80000001FF0000000001FF0000000001FF000000
+0001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000000
+0001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000000
+0001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000000
+0001FF0000000001FF0000000001FF0000000001FF0000000001FF0000000001FF000000
+0001FF0000038001FF0000038001FF0000038001FF0000038001FF0000078001FF000007
+0001FF0000070001FF00000F0001FF00000F0001FF00000F0001FF00001F0001FF00003F
+0001FF00007F0001FF0000FF0001FF0001FE0001FF000FFE00FFFFFFFFFE00FFFFFFFFFE
+00FFFFFFFFFE0029317DB030>76 D<FFFF800001FFFFC0FFFFC00001FFFFC0FFFFE00001
+FFFFC000FFF0000003E00000FFF8000001C00000EFFC000001C00000E7FC000001C00000
+E7FE000001C00000E3FF000001C00000E1FF800001C00000E0FFC00001C00000E07FE000
+01C00000E03FE00001C00000E03FF00001C00000E01FF80001C00000E00FFC0001C00000
+E007FE0001C00000E003FE0001C00000E001FF0001C00000E001FF8001C00000E000FFC0
+01C00000E0007FE001C00000E0003FF001C00000E0001FF001C00000E0001FF801C00000
+E0000FFC01C00000E00007FE01C00000E00003FF01C00000E00001FF81C00000E00000FF
+81C00000E00000FFC1C00000E000007FE1C00000E000003FF1C00000E000001FF9C00000
+E000000FFDC00000E0000007FDC00000E0000007FFC00000E0000003FFC00000E0000001
+FFC00000E0000000FFC00000E00000007FC00000E00000003FC00000E00000003FC00000
+E00000001FC00000E00000000FC00001F000000007C000FFFFE0000003C000FFFFE00000
+01C000FFFFE0000001C0003A317EB03F>78 D<FFFFFFFFE000FFFFFFFFFE00FFFFFFFFFF
+8000FF8000FFE000FF80003FF000FF80000FF800FF800007FC00FF800007FC00FF800003
+FE00FF800003FE00FF800003FF00FF800003FF00FF800003FF00FF800003FF00FF800003
+FF00FF800003FF00FF800003FF00FF800003FE00FF800003FE00FF800007FC00FF800007
+F800FF80000FF800FF80003FE000FF8000FFC000FFFFFFFF0000FFFFFFF80000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF80000000FFFFFF800000FFFFFF800000FFFFFF80000030317EB037>80
+D<FFFFFFFF80000000FFFFFFFFF8000000FFFFFFFFFE00000000FF8003FF80000000FF80
+007FE0000000FF80001FF0000000FF80000FF8000000FF80000FF8000000FF80000FFC00
+0000FF800007FC000000FF800007FE000000FF800007FE000000FF800007FE000000FF80
+0007FE000000FF800007FE000000FF800007FE000000FF800007FC000000FF80000FFC00
+0000FF80000FF8000000FF80001FF0000000FF80003FE0000000FF80007FC0000000FF80
+03FF00000000FFFFFFF800000000FFFFFFE000000000FF8007F800000000FF8001FC0000
+0000FF8000FE00000000FF80007F00000000FF80007F80000000FF80003FC0000000FF80
+003FC0000000FF80003FE0000000FF80003FE0000000FF80003FE0000000FF80003FE000
+0000FF80003FE0000000FF80003FF0000000FF80003FF0000000FF80003FF0000000FF80
+003FF0000000FF80003FF0038000FF80003FF8038000FF80001FF8038000FF80001FF803
+0000FF80000FFC0700FFFFFF8003FE0E00FFFFFF8001FFFC00FFFFFF80001FF00039317E
+B03C>82 D<7FFFFFFFFFFF007FFFFFFFFFFF007FFFFFFFFFFF007FC00FF801FF007E000F
+F8003F007C000FF8001F0078000FF8000F0078000FF8000F0070000FF8000700F0000FF8
+000780F0000FF8000780F0000FF8000780E0000FF8000380E0000FF8000380E0000FF800
+0380E0000FF8000380E0000FF800038000000FF800000000000FF800000000000FF80000
+0000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000
+00000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000
+000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000000
+0FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000F
+F800000000000FF800000000000FF800000000000FF800000000000FF8000000007FFFFF
+FF0000007FFFFFFF0000007FFFFFFF000031307DAF38>84 D<FFFFFF8003FFFF80FFFFFF
+8003FFFF80FFFFFF8003FFFF8000FF80000007C00000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF80000003800000FF80000003800000FF80
+000003800000FF80000003800000FF80000003800000FF80000003800000FF8000000380
+0000FF80000003800000FF80000003800000FF800000038000007F800000038000007F80
+0000070000007FC00000070000003FC000000E0000003FC000000E0000001FE000001C00
+00000FF000003800000007F800007000000003FC0001E000000000FF801FC0000000003F
+FFFF80000000000FFFFE000000000000FFE000000039317EB03E>I<FFFFFC0000FFFFFF
+FFFC0000FFFFFFFFFC0000FFFF03FF00000003C001FF000000038001FF800000078000FF
+800000070000FFC000000700007FC000000E00007FC000000E00007FE000001E00003FE0
+00001C00003FF000003C00001FF000003800001FF800003800000FF800007000000FFC00
+0070000007FC0000E0000007FC0000E0000007FE0001E0000003FE0001C0000003FF0003
+C0000001FF000380000001FF800380000000FF800700000000FF800700000000FFC00F00
+0000007FC00E000000007FE01E000000003FE01C000000003FF03C000000001FF0380000
+00001FF838000000000FF870000000000FF870000000000FFCF00000000007FCE0000000
+0007FFE00000000003FFC00000000003FFC00000000001FF800000000001FF8000000000
+00FF000000000000FF000000000000FF0000000000007E0000000000007E000000000000
+3C0000000000003C00000038317EB03D>I<00FFF0000003FFFF00000F803F80000FC00F
+E0001FE007F0001FE007F0001FE003F8000FC003FC00078003FC00000003FC00000003FC
+00000003FC00000003FC000000FFFC00001FFFFC0000FFE3FC0003FC03FC000FF003FC00
+1FC003FC003FC003FC007F8003FC007F8003FC00FF0003FC00FF0003FC00FF0003FC00FF
+0007FC00FF0007FC007F800DFC003FC01DFE001FE078FFF007FFE07FF000FF803FF02420
+7E9F27>97 D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F8000000
+07F800000007F800000007F800000007F800000007F800000007F800000007F800000007
+F800000007F800000007F800000007F800000007F800000007F83FE00007F8FFFC0007FB
+E07F0007FF001F8007FE000FC007FC000FE007F80007F007F80007F807F80007F807F800
+03FC07F80003FC07F80003FC07F80003FE07F80003FE07F80003FE07F80003FE07F80003
+FE07F80003FE07F80003FE07F80003FE07F80003FC07F80003FC07F80003FC07F80007F8
+07F80007F807F80007F007FC000FE007FE000FC007E7003F8007C3C0FE000780FFF80007
+003FC00027327EB12D>I<000FFF00007FFFC001FC01F003F003F007E007F80FE007F81F
+C007F83FC003F03FC001E07F8000007F8000007F800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF8000007F8000007F8000007F8000003FC0001C3F
+C0001C1FC000380FE0003807E0007003F001E001FC07C0007FFF00000FF8001E207D9F24
+>I<0000000FC0000007FFC0000007FFC0000007FFC00000007FC00000003FC00000003F
+C00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0
+0000003FC00000003FC00000003FC00000003FC00007F83FC0003FFF3FC000FE07BFC003
+F801FFC007E0007FC00FE0007FC01FC0003FC03FC0003FC03FC0003FC07F80003FC07F80
+003FC07F80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF8000
+3FC0FF80003FC0FF80003FC07F80003FC07F80003FC07F80003FC03FC0003FC03FC0003F
+C01FC0003FC00FE0007FC007E000FFC003F003FFE001FC0F3FFE007FFE3FFE000FF03FFE
+27327DB12D>I<000FFC00007FFF8001FC0FC003F003E007E001F00FE001F81FC000FC3F
+C000FE3FC000FE7F80007E7F80007F7F80007FFF80007FFF80007FFFFFFFFFFFFFFFFFFF
+800000FF800000FF800000FF8000007F8000007F8000007F8000003FC000071FC000071F
+C0000E0FE0000E07F0001C03F8007800FE03E0003FFFC00007FE0020207E9F25>I<0001
+FE00000FFF80001FC3C0007F07E000FE0FF001FE0FF001FC0FF003FC0FF003FC07E003FC
+018003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFF
+FC00FFFFFC00FFFFFC0003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC00007FFFF0007FFFF0007FFFF0001C327EB119>I<001FF007C000FFFE3FE001
+F83F79F007E00FC3F00FE00FE1F00FC007E0E01FC007F0001FC007F0003FC007F8003FC0
+07F8003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FC007E0000FE00F
+E00007E00FC00003F83F000006FFFE00000E1FF000000E000000001E000000001E000000
+001F000000001F800000001FFFFF80000FFFFFF0000FFFFFFC0007FFFFFE0003FFFFFF00
+03FFFFFF800FFFFFFFC03F00007FC07E00001FE07C00000FE0FC000007E0FC000007E0FC
+000007E0FC000007E07E00000FC03E00000F803F00001F800FC0007E0007F803FC0001FF
+FFF000001FFF0000242F7E9F28>I<01F8000000FFF8000000FFF8000000FFF80000000F
+F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8
+00000007F800000007F800000007F800000007F800000007F800000007F800000007F807
+F80007F83FFE0007F8783F0007F8C03F8007F9801FC007FB001FC007FE001FE007FC001F
+E007FC001FE007FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0
+07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
+F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFF
+C3FFFFFFFFC3FFFFFFFFC3FFFF28327DB12D>I<03C00007E0000FF0001FF8001FF8001F
+F8001FF8000FF00007E00003C00000000000000000000000000000000000000000000000
+000000000001F8007FF8007FF8007FF80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>I<
+01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFC0
+FFFFC0FFFFC012327DB117>108 D<03F007F8001FE000FFF03FFE00FFF800FFF0783F01
+E0FC00FFF0C03F8300FE000FF1801FC6007F0007F3001FCC007F0007F6001FF8007F8007
+FC001FF0007F8007FC001FF0007F8007FC001FF0007F8007F8001FE0007F8007F8001FE0
+007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
+F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0
+007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
+F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F80FFFFC3FFFF
+0FFFFCFFFFC3FFFF0FFFFCFFFFC3FFFF0FFFFC3E207D9F43>I<03F007F800FFF03FFE00
+FFF0783F00FFF0C03F800FF1801FC007F3001FC007F6001FE007FC001FE007FC001FE007
+FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
+001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F800
+1FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FF
+FFFFFFC3FFFF28207D9F2D>I<0007FC0000007FFFC00001FC07F00003F001F80007E000
+FC000FC0007E001FC0007F003FC0007F803F80003F807F80003FC07F80003FC07F80003F
+C0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0
+FF80003FE07F80003FC07F80003FC07F80003FC03FC0007F803FC0007F801FC0007F000F
+E000FE0007E000FC0003F803F80001FE0FF000007FFFC0000007FC000023207E9F28>I<
+01F83FE000FFF8FFFC00FFFBE07F00FFFF003F8007FE001FC007FC000FE007F8000FF007
+F80007F807F80007F807F80007FC07F80003FC07F80003FC07F80003FE07F80003FE07F8
+0003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FC07F800
+07FC07F80007FC07F80007F807F80007F807F8000FF007FC000FE007FE001FC007FF003F
+8007FBC0FE0007F8FFF80007F83FC00007F800000007F800000007F800000007F8000000
+07F800000007F800000007F800000007F800000007F800000007F800000007F8000000FF
+FFC00000FFFFC00000FFFFC00000272E7E9F2D>I<03F03F00FFF07FC0FFF1C3E0FFF187
+E00FF30FF007F60FF007F60FF007FC07E007FC03C007FC000007FC000007F8000007F800
+0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
+0007F8000007F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE0
+00FFFFE0001C207E9F21>114 D<01FF860007FFFE001F00FE003C003E0078001E007800
+0E00F8000E00F8000E00F8000E00FC000000FF800000FFFC00007FFFC0003FFFF0003FFF
+F8001FFFFC0007FFFE0001FFFF00003FFF000000FF8000003F8060001F80E0000F80E000
+0F80F0000F80F0000F00F8000F00FC001E00FE001C00FF807800F3FFF000C07F80001920
+7D9F20>I<001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C00
+00007C0000007C000000FC000001FC000003FC000007FC00001FFFFE00FFFFFE00FFFFFE
+0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
+0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC038003FC03
+8003FC038003FC038003FC038003FC038003FC038001FC038001FC070000FE0700007F0E
+00003FFC000007F000192E7FAD1F>I<01F80007E0FFF803FFE0FFF803FFE0FFF803FFE0
+0FF8003FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
+F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
+001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8003FE007F800
+3FE003F8007FE003F8007FE001FC00DFF000FE039FFF007FFF1FFF000FFC1FFF28207D9F
+2D>I<FFFF1FFFE03FF8FFFF1FFFE03FF8FFFF1FFFE03FF80FF000FE0007800FF800FE00
+038007F800FF00070007F8007F00070007FC007F000F0003FC00FF800E0003FC00FF800E
+0001FE01FFC01C0001FE01DFC01C0001FF01DFC03C0000FF038FE0380000FF038FE03800
+007F878FF07000007F8707F07000007FC707F0F000003FCF07F8E000003FCE03F8E00000
+1FFE03F9C000001FFC01FDC000001FFC01FFC000000FFC01FF8000000FF800FF8000000F
+F800FF80000007F0007F00000007F0007F00000003F0007E00000003E0003E00000003E0
+003E00000001C0001C000035207E9F3A>119 D<7FFF807FFC7FFF807FFC7FFF807FFC03
+FC000F0001FE001E0000FF003C0000FF803800007FC07800003FC0F000001FE1E000000F
+F3C000000FFF80000007FF00000003FE00000001FE00000000FF00000000FF80000000FF
+C0000001FFC0000003DFE00000078FF00000078FF800000F07FC00001E03FE00003C01FE
+00007800FF0000F000FF8001E0007FC003E0003FE0FFFC01FFFFFFFC01FFFFFFFC01FFFF
+28207F9F2B>I E /Fr 1 14 df<0000FF00000007FFE000001F00F8000078001E0000E0
+000700018000018003000000C006000000600C000000300C000000301800000018300000
+000C300000000C6000000006600000000660000000066000000006C000000003C0000000
+03C000000003C000000003C000000003C000000003C000000003C000000003C000000003
+6000000006600000000660000000066000000006300000000C300000000C18000000180C
+000000300C00000030060000006003000000C0018000018000E00007000078001E00001F
+00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fs 56 122
+df<0006000C00180038007000E001E003C003C0078007800F800F001F001F003E003E00
+3E007E007E007E007C007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00
+FC00FC007C007C007E007E007E003E003E003E001F001F000F000F800780078003C003C0
+01E000E0007000380018000C00060F3C7AAC1A>40 D<3C007F00FF80FF80FFC0FFC0FFC0
+7FC03EC000C000C00180018001800300030006000E001C00380010000A157B8813>44
+D<1C007F007F00FF80FF80FF807F007F001C0009097B8813>46 D<000E00001E00007E00
+07FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFEFFFFFE
+17277BA622>49 D<00FF800007FFF0000FFFFC001E03FE003800FF807C003F80FE003FC0
+FF001FC0FF001FE0FF000FE0FF000FE07E000FE03C001FE000001FE000001FC000001FC0
+00003F8000003F0000007E000000FC000000F8000001F0000003E00000078000000F0000
+001E0000003C00E0007000E000E000E001C001C0038001C0060001C00FFFFFC01FFFFFC0
+3FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007
+FFFC000F81FE001F007F003F807F003F803F803F803F803F803F801F803F801F003F8000
+007F0000007F0000007E000000FC000001F8000007F00000FFC00000FFC0000001F80000
+007E0000003F0000003F8000001FC000001FC000001FE000001FE03C001FE07E001FE0FF
+001FE0FF001FE0FF001FC0FF003FC0FE003F807C007F003F01FE001FFFFC0007FFF00000
+FF80001B277DA622>I<00000F0000000F0000001F0000003F0000007F000000FF000001
+FF000001FF000003BF0000073F00000E3F00001C3F00003C3F0000383F0000703F0000E0
+3F0001C03F0003803F0007803F0007003F000E003F001C003F0038003F0070003F00F000
+3F00FFFFFFF8FFFFFFF8FFFFFFF800007F0000007F0000007F0000007F0000007F000000
+7F0000007F0000007F00001FFFF8001FFFF8001FFFF81D277EA622>I<180003001F801F
+001FFFFE001FFFFC001FFFF8001FFFF0001FFFC0001FFF00001C0000001C0000001C0000
+001C0000001C0000001C0000001C0000001C7FC0001DFFF8001F80FC001E003F0008003F
+0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001F
+E0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF0
+0000FF80001B277DA622>I<0007F800003FFE0000FFFF0001FC078003F00FC007C01FC0
+0F801FC01F801FC01F001FC03F000F803F0000007E0000007E0000007E000000FE020000
+FE1FF000FE3FFC00FE603E00FE801F00FF801F80FF000FC0FF000FC0FE000FE0FE000FE0
+FE000FE0FE000FE07E000FE07E000FE07E000FE07E000FE03E000FE03F000FC01F000FC0
+1F001F800F801F0007E07E0003FFFC0001FFF800003FC0001B277DA622>I<380000003E
+0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070
+000E0070001C00E0003800E0007000E000E0000001C0000001C000000380000007800000
+070000000F0000001F0000001E0000003E0000003E0000007E0000007C0000007C000000
+FC000000FC000000FC000000FC000001FC000001FC000001FC000001FC000001FC000001
+FC000001FC000000F80000007000001C297CA822>I<007F800001FFF00007FFF8000FC0
+FC001F803E003F001F007E001F807E001F807E000F80FE000FC0FE000FC0FE000FC0FE00
+0FE0FE000FE0FE000FE0FE000FE0FE000FE07E001FE07E001FE03F003FE01F002FE00F80
+CFE007FF8FE001FF0FE000080FE000000FC000000FC000000FC000001F803E001F807F00
+1F807F003F007F003E007F007E007E00FC003E03F8001FFFE0000FFF800001FE00001B27
+7DA622>57 D<00000780000000000780000000000FC0000000000FC0000000000FC00000
+00001FE0000000001FE0000000003FF0000000003FF0000000003FF00000000077F80000
+000077F800000000F7FC00000000E3FC00000000E3FC00000001C1FE00000001C1FE0000
+0003C1FF0000000380FF0000000380FF00000007007F80000007007F8000000F007FC000
+000E003FC000000E003FC000001C001FE000001C001FE000003FFFFFF000003FFFFFF000
+003FFFFFF00000700007F80000700007F80000F00007FC0000E00003FC0001E00003FE00
+01C00001FE0001C00001FE0003C00001FF00FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC
+2E297EA833>65 D<FFFFFFF800FFFFFFFF00FFFFFFFFC003F8001FE003F8000FF003F800
+07F803F80003F803F80003FC03F80003FC03F80001FC03F80001FC03F80001FC03F80003
+FC03F80003F803F80003F803F80007F003F8000FF003F8001FC003F800FF8003FFFFFE00
+03FFFFFFC003F8000FF003F80003F803F80001FC03F80001FE03F80000FE03F80000FE03
+F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FF03F80000FE03F8
+0001FE03F80003FC03F80007FC03F8001FF8FFFFFFFFE0FFFFFFFFC0FFFFFFFE0028297D
+A830>I<00007FE0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000FF03F8
+00007F07F000003F0FE000001F1FC000001F1FC000000F3F8000000F3F800000077F8000
+00077F800000077F00000000FF00000000FF00000000FF00000000FF00000000FF000000
+00FF00000000FF00000000FF00000000FF000000007F000000007F800000007F80000007
+3F800000073F800000071FC00000071FC000000E0FE000000E07F000001C03F800003C01
+FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA831>I<
+FFFFFFFC0000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0003FC0003FC0000FE00
+03FC00007F0003FC00003F8003FC00001FC003FC00001FC003FC00000FE003FC00000FE0
+03FC000007F003FC000007F003FC000007F003FC000007F003FC000007F803FC000007F8
+03FC000007F803FC000007F803FC000007F803FC000007F803FC000007F803FC000007F8
+03FC000007F803FC000007F803FC000007F003FC000007F003FC000007F003FC00000FE0
+03FC00000FE003FC00000FC003FC00001FC003FC00003F8003FC00007F0003FC0000FF00
+03FC0003FC0003FC001FF800FFFFFFFFF000FFFFFFFF8000FFFFFFFC00002D297EA834>
+I<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F0
+03FC0000F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803
+FC01C03803FC03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC
+0FC00003FC03C00003FC03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00
+001C03FC00001C03FC00001C03FC00003C03FC00003803FC00007803FC0000F803FC0001
+F803FC0003F803FC001FF8FFFFFFFFF0FFFFFFFFF0FFFFFFFFF027297EA82C>I<FFFFFF
+FFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC000FE003FC0003E003FC0001E003FC0001
+E003FC0000E003FC0000E003FC0000E003FC0000F003FC01C07003FC01C07003FC01C070
+03FC01C00003FC03C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003
+FC0FC00003FC03C00003FC03C00003FC01C00003FC01C00003FC01C00003FC01C00003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297EA82A>I<00007FE0030000
+07FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC0000FF0003F800007F0007
+F000003F000FE000001F001FC000001F001FC000000F003F8000000F003F80000007007F
+80000007007F80000007007F0000000000FF0000000000FF0000000000FF0000000000FF
+0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000FFFFF87F
+0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F800000FF001FC00000FF001F
+C00000FF000FE00000FF0007F00000FF0003F80000FF0001FC0000FF0000FF0001FF0000
+7FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D297CA835>I<FFFFF00FFFFF
+FFFFF00FFFFFFFFFF00FFFFF03FC00003FC003FC00003FC003FC00003FC003FC00003FC0
+03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0
+03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FFFFFFFFC0
+03FFFFFFFFC003FFFFFFFFC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0
+03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0
+03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0
+03FC00003FC0FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF30297EA835>I<FFFFF0FFFF
+F0FFFFF003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+00FFFFF0FFFFF0FFFFF014297EA819>I<FFFFF000FFFEFFFFF000FFFEFFFFF000FFFE03
+FC00000F0003FC00001E0003FC00003C0003FC0000780003FC0000E00003FC0003C00003
+FC0007800003FC000F000003FC001E000003FC003C000003FC00F0000003FC01E0000003
+FC03C0000003FC07C0000003FC0FC0000003FC1FE0000003FC7FF0000003FCFFF8000003
+FDE7F8000003FFC3FC000003FF83FE000003FE01FF000003FC00FF000003FC007F800003
+FC007FC00003FC003FE00003FC001FE00003FC000FF00003FC000FF80003FC0007F80003
+FC0003FC0003FC0001FE0003FC0001FF0003FC0000FF0003FC00007F80FFFFF00FFFFEFF
+FFF00FFFFEFFFFF00FFFFE2F297EA835>75 D<FFFFFC0000FFFFFC0000FFFFFC000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0001C0
+03FC0001C003FC0001C003FC0001C003FC0003C003FC00038003FC00038003FC00078003
+FC00078003FC000F8003FC000F8003FC001F8003FC007F8003FC01FF00FFFFFFFF00FFFF
+FFFF00FFFFFFFF0022297EA828>I<FFFE0000003FFF80FFFE0000003FFF80FFFF000000
+7FFF8003FF0000007FE00003FF0000007FE00003BF800000EFE00003BF800000EFE00003
+9FC00001CFE000039FC00001CFE000038FE000038FE000038FE000038FE000038FE00003
+8FE0000387F000070FE0000387F000070FE0000383F8000E0FE0000383F8000E0FE00003
+81FC001C0FE0000381FC001C0FE0000381FC001C0FE0000380FE00380FE0000380FE0038
+0FE00003807F00700FE00003807F00700FE00003803F80E00FE00003803F80E00FE00003
+803F80E00FE00003801FC1C00FE00003801FC1C00FE00003800FE3800FE00003800FE380
+0FE000038007F7000FE000038007F7000FE000038007F7000FE000038003FE000FE00003
+8003FE000FE000038001FC000FE000038001FC000FE000038000F8000FE000FFFE00F803
+FFFF80FFFE00F803FFFF80FFFE007003FFFF8039297DA840>I<FFFC00007FFFFFFE0000
+7FFFFFFF00007FFF03FF800001C003FFC00001C003BFE00001C0039FE00001C0039FF000
+01C0038FF80001C00387FC0001C00383FE0001C00381FF0001C00380FF8001C003807F80
+01C003807FC001C003803FE001C003801FF001C003800FF801C0038007FC01C0038003FC
+01C0038003FE01C0038001FF01C0038000FF81C00380007FC1C00380003FE1C00380001F
+F1C00380000FF1C00380000FF9C003800007FDC003800003FFC003800001FFC003800000
+FFC0038000007FC0038000007FC0038000003FC0038000001FC0038000000FC003800000
+07C0FFFE000003C0FFFE000001C0FFFE000001C030297EA835>I<0000FFC00000000FFF
+FC0000003F807F000000FE001FC00001F80007E00003F00003F00007E00001F8000FE000
+01FC001FC00000FE001FC00000FE003F8000007F003F8000007F007F8000007F807F0000
+003F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF0000
+003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000
+003FC07F0000003F807F8000007F807F8000007F803F8000007F003F8000007F001FC000
+00FE001FC00000FE000FE00001FC0007F00003F80003F80007F00001FC000FE00000FE00
+1FC000003FC0FF0000000FFFFC00000000FFC000002A297CA833>I<FFFFFFF800FFFFFF
+FF00FFFFFFFFC003FC003FE003FC0007F003FC0003F803FC0003FC03FC0001FC03FC0001
+FE03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC0001FE03FC0001FC
+03FC0003FC03FC0003F803FC0007F003FC003FE003FFFFFF8003FFFFFE0003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+0000FFFFF00000FFFFF00000FFFFF0000027297EA82E>I<0000FFC00000000FFFFC0000
+003FC0FF000000FE001FC00001FC000FE00003F00003F00007F00003F8000FE00001FC00
+1FC00000FE001FC00000FE003F8000007F003F8000007F007F8000007F807F8000007F80
+7F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0
+FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0
+7F0000003F807F8000007F807F8000007F803F8000007F003F8000007F001FC00000FE00
+1FC03E00FE000FE07F81FC0007E0C1C1F80003F18063F00001F98067E00000FF803FC000
+003FC07F0000000FFFFC00000000FFF800C00000003C00C00000001E00C00000001E01C0
+0000001F83C00000001FFFC00000000FFF800000000FFF800000000FFF0000000007FF00
+00000003FE0000000001FC0000000000F8002A357CA833>I<FFFFFFE00000FFFFFFFE00
+00FFFFFFFF800003FC003FE00003FC000FF00003FC0007F80003FC0003FC0003FC0001FC
+0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE
+0003FC0001FC0003FC0003F80003FC0007F80003FC000FE00003FC003FC00003FFFFFE00
+0003FFFFFE000003FC00FF800003FC003FC00003FC001FE00003FC000FF00003FC0007F8
+0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8
+0003FC0007F80003FC0007F80003FC0007F80E03FC0007F80E03FC0003F80E03FC0001FC
+1CFFFFF000FE1CFFFFF0007FF8FFFFF0000FE02F297EA832>I<00FF806003FFF0E00FFF
+F8E01F80FDE03F001FE03E0007E07C0003E07C0003E0FC0001E0FC0001E0FC0000E0FE00
+00E0FE0000E0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE001FFFFF0007FF
+FF8003FFFFC000FFFFC0000FFFE000007FE000001FF000000FF0000007F0E00003F0E000
+03F0E00003F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F80FFE03F80E3FF
+FE00E1FFFC00C01FF0001C297CA825>I<7FFFFFFFFF807FFFFFFFFF807FFFFFFFFF807F
+807F807F807C007F800F8078007F80078078007F80078070007F800380F0007F8003C0F0
+007F8003C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F8001C000
+007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
+007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
+007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
+007F80000000007F80000000007F80000000007F80000000FFFFFFC00000FFFFFFC00000
+FFFFFFC0002A287EA72F>I<FFFFF000FFFEFFFFF000FFFEFFFFF000FFFE03FC00000380
+03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380
+03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380
+03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380
+03FC0000038003FC0000038003FC0000038003FC0000038003FC0000038003FC00000380
+03FC0000038003FC0000038003FC0000038001FC0000070001FE0000070000FE00000E00
+007F00000E00003F00003C00001FC0007800000FF003F0000007FFFFE0000000FFFF8000
+00001FFC00002F297EA834>I<FFFFF0007FFFFFFFF0007FFFFFFFF0007FFF03FE000001
+C001FE0000038001FE0000038001FF0000078000FF0000070000FF80000F00007F80000E
+00007FC0000E00003FC0001C00003FC0001C00003FE0003C00001FE0003800001FF00078
+00000FF0007000000FF80070000007F800E0000007F800E0000003FC01C0000003FC01C0
+000003FE03C0000001FE0380000001FF0780000000FF0700000000FF87000000007F8E00
+0000007F8E000000007FDE000000003FDC000000003FFC000000001FF8000000001FF800
+0000000FF0000000000FF0000000000FF00000000007E00000000007E00000000003C000
+00000003C0000030297FA833>I<FFFFE07FFFE01FFFC0FFFFE07FFFE01FFFC0FFFFE07F
+FFE01FFFC003FC0003FC0000700003FC0003FC0000700003FE0001FE0000700001FE0001
+FE0000E00001FE0001FE0000E00001FF0001FF0001E00000FF0001FF0001C00000FF0003
+FF8001C00000FF8003FF8003C000007F8003FF80038000007F8007FFC0038000003FC007
+3FC0070000003FC0073FC0070000003FE00E1FE00F0000001FE00E1FE00E0000001FE00E
+1FF00E0000001FF01C0FF01E0000000FF01C0FF01C0000000FF03C0FF81C00000007F838
+07F83800000007F83807F83800000007F87807FC3800000003FC7003FC7000000003FC70
+03FC7000000003FEE001FEF000000001FEE001FEE000000001FFE001FFE000000001FFC0
+00FFE000000000FFC000FFC000000000FFC000FFC0000000007F80007F80000000007F80
+007F80000000007F80007F80000000003F00003F00000000003F00003F00000000003E00
+001F00000000001E00001E00000000001E00001E00000042297FA845>I<FFFFF0003FFF
+FFFFF0003FFFFFFFF0003FFF03FE000003C001FF0000038000FF8000070000FF80000F00
+007FC0000E00007FE0001C00003FE0003C00001FF0003800001FF8007000000FF800F000
+0007FC00E0000007FE01C0000003FE03C0000001FF0380000001FF8700000000FF8F0000
+00007FCE000000007FFC000000003FFC000000001FF8000000001FF0000000000FF00000
+00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
+00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
+00000FF000000003FFFFC0000003FFFFC0000003FFFFC00030297FA833>89
+D<03FF80000FFFF0001F01FC003F80FE003F807F003F803F003F803F801F003F8000003F
+8000003F8000003F8000003F80003FFF8001FC3F800FE03F801F803F803F003F807E003F
+80FC003F80FC003F80FC003F80FC003F80FC005F807E00DF803F839FFC1FFE0FFC03FC03
+FC1E1B7E9A21>97 D<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000
+000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE1FE
+000FEFFF800FFE07E00FF803F00FF001F80FE000FC0FE000FC0FE0007E0FE0007E0FE000
+7F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE000
+7E0FE0007E0FE000FC0FE000FC0FF001F80FF803F00F9C0FE00F0FFF800E01FC00202A7E
+A925>I<003FF00001FFFC0003F03E000FC07F001F807F003F007F003F007F007F003E00
+7E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000
+7E0000007E0000007F0000003F0003803F8003801F8007000FE00E0003F83C0001FFF800
+003FC000191B7E9A1E>I<00007FF000007FF000007FF0000007F0000007F0000007F000
+0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000
+3F87F001FFF7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E
+0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E
+0007F07E0007F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF20
+2A7EA925>I<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E00
+0F807E000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE00
+00007E0000007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FF
+FC00003FE0001A1B7E9A1F>I<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F0
+3E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915
+>I<00FF80F003FFE3F80FC1FE1C1F007C7C3F007E7C3E003E107E003F007E003F007E00
+3F007E003F007E003F007E003F003E003E003F007E001F007C000FC1F8000BFFE00018FF
+80001800000038000000380000003C0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FF
+FFF01FFFFFF03C0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F07C00
+01F03F0007E00FC01F8007FFFF00007FF0001E287E9A22>I<FFE00000FFE00000FFE000
+000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000
+000FE000000FE000000FE000000FE07E000FE1FF800FE30FC00FE40FE00FE807E00FF807
+F00FF007F00FF007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007
+F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007
+F0FFFE3FFFFFFE3FFFFFFE3FFF202A7DA925>I<07000F801FC03FE03FE03FE01FC00F80
+07000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B
+7EAA12>I<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7EA912>108 D<FFC07F001FC000FFC1FF
+C07FF000FFC307E0C1F8000FC407F101FC000FC803F200FC000FD803FE00FE000FD003FC
+00FE000FD003FC00FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800
+FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE
+000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE000FE003F800FE00
+0FE003F800FE000FE003F800FE00FFFE3FFF8FFFE0FFFE3FFF8FFFE0FFFE3FFF8FFFE033
+1B7D9A38>I<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807F00FD007F00FD0
+07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE0
+07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0FFFE3FFFFFFE
+3FFFFFFE3FFF201B7D9A25>I<003FE00001FFFC0003F07E000FC01F801F800FC03F0007
+E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003
+F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC00FC01F
+8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE00FFEFFF80FFFE0FE00FF803F0
+0FF001F80FE001FC0FE000FC0FE000FE0FE000FE0FE0007F0FE0007F0FE0007F0FE0007F
+0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE000FE0FE000FE0FE000FC0FE001FC
+0FF001F80FF807F00FFC0FE00FEFFF800FE1FC000FE000000FE000000FE000000FE00000
+0FE000000FE000000FE000000FE000000FE00000FFFE0000FFFE0000FFFE000020277E9A
+25>I<FFC1F0FFC7FCFFC63E0FCC7F0FD87F0FD07F0FD07F0FF03E0FE0000FE0000FE000
+0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
+0FE000FFFF00FFFF00FFFF00181B7F9A1B>114 D<03FE300FFFF03E03F07800F07000F0
+F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF80007FC
+0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E9A1B>
+I<00E00000E00000E00000E00001E00001E00001E00003E00003E00007E0000FE0001FFF
+E0FFFFE0FFFFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0
+000FE0000FE0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE07007F0E003F0
+C001FF80007F0014267FA51A>I<FFE07FF0FFE07FF0FFE07FF00FE007F00FE007F00FE0
+07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE0
+07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE00FF00FE00FF007E0
+17F003F067FF01FFC7FF007F87FF201B7D9A25>I<FFFC03FFFFFC03FFFFFC03FF0FF000
+F007F000E007F800E003F801C003F801C003FC03C001FC038001FE078000FE070000FF07
+00007F0E00007F0E00007F9E00003F9C00003FFC00001FF800001FF800000FF000000FF0
+00000FF0000007E0000007E0000003C0000003C000201B7F9A23>I<FFFC7FFC1FFCFFFC
+7FFC1FFCFFFC7FFC1FFC0FE00FE001C007F007E0038007F007E0038007F807F0078003F8
+07F0070003F80FF8070003FC0FF80F0001FC0FF80E0001FC1FFC0E0000FE1CFC1C0000FE
+1CFE1C0000FF387E3C00007F387E3800007F787F3800003FF03F7000003FF03FF000003F
+E01FF000001FE01FE000001FE01FE000000FC00FC000000FC00FC000000F8007C0000007
+800780000007800780002E1B7F9A31>I<FFFC1FFEFFFC1FFEFFFC1FFE07F0038003F807
+8003FC0F0001FE1E0000FE3C00007F3800007FF800003FF000001FE000000FE000000FF0
+000007F800000FF800001FFC00003CFE000038FF0000787F0000F03F8001E01FC003C01F
+E003800FE0FFF03FFFFFF03FFFFFF03FFF201B7F9A23>I<FFFC03FFFFFC03FFFFFC03FF
+0FF000F007F000E007F800E003F801C003F801C003FC03C001FC038001FE078000FE0700
+00FF0700007F0E00007F0E00007F9E00003F9C00003FFC00001FF800001FF800000FF000
+000FF000000FF0000007E0000007E0000003C0000003C000000380000003800000078000
+380700007C0F0000FE0E0000FE1E0000FE1C0000FE38000074F000003FE000000F800000
+20277F9A23>I E /Ft 90 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000
+000070F8F8F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E0
+38E038E03860300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007F
+FFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FF
+FFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C000
+01C00001C00001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780
+F1C00079C0003FC0001FE0000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380
+E1C380E1C70071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D
+9F18>I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C
+007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C0
+0007C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07
+C018038013247E9F18>I<01C00007E0000FF0000E70001C38001C38001C38001C38001C
+73F81CF3F81CE3F80FC1C00FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0
+FC00E07C00E07870E0787070FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E
+0E0E1C1C38F8F0C0070E789B18>I<007000F001E003C007800F001E001C003800380070
+00700070007000E000E000E000E000E000E000E000E0007000700070007000380038001C
+001E000F00078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780
+038001C001C000E000E000E000E00070007000700070007000700070007000E000E000E0
+00E001C001C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001
+C00001C00041C100F1C780FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1
+C78041C10001C00001C00001C00001C00011147D9718>I<00600000F00000F00000F000
+00F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F000
+00F00000F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>
+I<7FFFC0FFFFE0FFFFE07FFFC013047E8F18>I<3078FCFC78300606778518>I<00030000
+0780000780000F80000F00001F00001E00001E00003E00003C00007C0000780000780000
+F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F00000F00001F
+00001E00003E00003C00003C00007C0000780000F80000F00000F0000060000011247D9F
+18>I<01F00007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0
+E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C0380380
+1C07001F1F000FFE0007FC0001F000131C7E9B18>I<01800380038007800F803F80FF80
+FB8043800380038003800380038003800380038003800380038003800380038003800380
+7FFCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000
+E06000E00000E00000E00001C00001C00003C0000780000F00001E00003C0000780000F0
+0001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F0000
+3F0000770000770000E70001E70001C7000387000787000707000E07001E07003C070038
+0700780700F00700FFFFF8FFFFF8FFFFF800070000070000070000070000070000070000
+7FF0007FF0007FF0151C7F9B18>52 D<3FFF803FFF803FFF803800003800003800003800
+003800003800003800003800003BF8003FFE003FFF003C07803003C00001C00000E00000
+E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18>I<00
+7E0001FF0007FF800F83C01E03C01C03C0380180380000700000700000E1F800E7FE00FF
+FF00FE0780F803C0F001C0F000E0E000E0F000E07000E07000E07000E03801C03C03C01E
+07800FFF0007FE0001F800131C7E9B18>I<E00000FFFFE0FFFFE0FFFFC0E00380E00700
+000F00001E00001C0000380000380000700000F00000E00000E00001C00001C00001C000
+038000038000038000038000070000070000070000070000070000070000070000131D7E
+9C18>I<03F8000FFE001FFF003E0F803803807001C07001C07001C07001C03803803C07
+801FFF0007FC000FFE001F1F003C07807001C0F001E0E000E0E000E0E000E0E000E07001
+C07803C03E0F801FFF000FFE0003F800131C7E9B18>I<3078FCFC783000000000000000
+003078FCFC78300614779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E
+1C3C78F060071A789318>I<0000C00003E00007E0001FC0003F8000FE0001FC0007F000
+0FE0003F80007F0000FC0000FC00007F00003F80000FE00007F00001FC0000FE00003F80
+001FC00007E00003E00000C013187E9918>I<7FFFC0FFFFE0FFFFE07FFFC00000000000
+000000000000007FFFC0FFFFE0FFFFE07FFFC0130C7E9318>I<600000F80000FC00007F
+00003F80000FE00007F00001FC0000FE00003F80001FC00007E00007E0001FC0003F8000
+FE0001FC0007F0000FE0003F80007F0000FC0000F8000060000013187E9918>I<0FF000
+3FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F00001E00003C000
+03C00003C00003C00003C00003800000000000000000000000000000000003800007C000
+07C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E03C03C1DC0387F
+C070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1
+C071E3C070FF80387F003C1C001E00E00F83E007FFC001FF80007E00131C7E9B18>I<00
+700000F80000F80000D80000D80001DC0001DC0001DC00018C00038E00038E00038E0003
+8E000707000707000707000707000707000FFF800FFF800FFF800E03801C01C01C01C01C
+01C07F07F0FF07F87F07F0151C7F9B18>I<7FFC00FFFF007FFF801C03C01C01C01C00E0
+1C00E01C00E01C00E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F0
+1C00701C00701C00701C00701C00F01C00E01C03E07FFFC0FFFF807FFE00141C7F9B18>
+I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E000
+00E00000E00000E00000E00000E00000E000007000007000E07000E03800E03C00E01E01
+C00F07C007FF8003FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C
+03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C
+00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B
+18>I<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E00
+1C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C0038
+1C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>I<FFFFF8FFFFF8FFFFF81C00381C00
+381C00381C00381C00001C00001C07001C07001C07001FFF001FFF001FFF001C07001C07
+001C07001C00001C00001C00001C00001C00001C00001C0000FFC000FFC000FFC000151C
+7F9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E0
+0000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C038
+03C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0
+151C7F9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>I<01FFC001FFC001FFC000
+0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00F00E00F00E00F03C007FFC003FF0000F
+C000121C7D9B18>I<7F07F0FF87F87F07F01C03C01C07801C07001C0E001C1E001C3C00
+1C38001C70001CF0001DF0001DF0001FB8001FB8001F1C001E1C001C0E001C0E001C0700
+1C07001C03801C03801C01C07F03F0FF87F87F03F0151C7F9B18>I<FFC000FFC000FFC0
+001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00E01C00E01C00E01C00E01C00E0FFFFE0FFFF
+E0FFFFE0131C7E9B18>I<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B
+8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E038
+00E03800E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF8
+7F07F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C0
+1C71C01C31C01C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0
+FF87C07F03C0151C7F9B18>I<0FFE003FFF807FFFC07803C07001C0F001E0E000E0E000
+E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000
+E0E000E0E000E0F001E07001C07C07C07FFFC03FFF800FFE00131C7E9B18>I<FFFE00FF
+FF80FFFFC01C03C01C01E01C00E01C00701C00701C00701C00701C00701C00E01C01E01C
+03C01FFFC01FFF801FFE001C00001C00001C00001C00001C00001C00001C00001C0000FF
+8000FF8000FF8000141C7F9B18>I<0FFE003FFF807FFFC07803C07001C0F001E0E000E0
+E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
+E000E0E070E0E070E0F079E07039C0783FC07FFFC03FFF800FFE00000F00000780000780
+0003C00001C00001C013227E9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01
+C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03
+801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>I<03
+F1C01FFFC03FFFC07C0FC07003C0E001C0E001C0E001C0E000007000007800003F00001F
+F00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F8
+0780FFFF80FFFE00E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038
+E07038007000007000007000007000007000007000007000007000007000007000007000
+00700000700000700000700000700000700000700007FF0007FF0007FF00151C7F9B18>
+I<FF83FEFF83FEFF83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00
+701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00700E00E00F01
+E00783C003FF8001FF00007C00171C809B18>I<FE03F8FF07F8FE03F83C01E01C01C01C
+01C01C01C01E03C00E03800E03800E03800E0380070700070700070700070700038E0003
+8E00038E00038E00018C0001DC0001DC0001DC0000D80000F80000F800007000151C7F9B
+18>I<FE03F8FE03F8FE03F87000707000707000703800E03800E03800E03800E03800E0
+38F8E039FCE039DCE039DCE019DCC019DCC019DCC0198CC0198CC01D8DC01D8DC01D8DC0
+1D05C00D05800F07800F07800E0380151C7F9B18>I<7F0FE07F9FE07F0FE00E07000F07
+00070E00078E00039C0003DC0001F80001F80000F80000F00000700000F00000F80001FC
+0001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF07F87F07F0151C
+7F9B18>I<FE03F8FF07F8FE03F81C01C01E03C00E03800F0780070700070700038E0003
+8E0001DC0001DC0001DC0000F80000F80000700000700000700000700000700000700000
+700000700000700001FC0003FE0001FC00151C7F9B18>I<FFF8FFF8FFF8E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000FFF8FFF8FFF80D24779F18>91
+D<600000F00000F00000F800007800007C00003C00003C00003E00001E00001F00000F00
+000F00000F800007800007C00003C00003C00003E00001E00001F00000F00000F8000078
+00007800007C00003C00003E00001E00001E00001F00000F00000F800007800007800003
+0011247D9F18>I<FFF8FFF8FFF800380038003800380038003800380038003800380038
+003800380038003800380038003800380038003800380038003800380038003800380038
+0038FFF8FFF8FFF80D247F9F18>I<7FFFC0FFFFE0FFFFE07FFFC013047E7F18>95
+D<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<0FF0001FFC003FFE003C0F001807
+0000038000038000FF8007FF801FFF807F0380780380E00380E00380E00380F00780780F
+803FFFF81FFDF807F0F815147E9318>I<7E0000FE00007E00000E00000E00000E00000E
+00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E
+00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<
+01FE0007FF001FFF803E0780380300700000700000E00000E00000E00000E00000E00000
+E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F
+80001F8000038000038000038000038000038003E3800FFB801FFF803C1F80380F807007
+80700380E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF
+F00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380E0
+01C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E07C01FFF8007FF0001
+F80012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0
+FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFF
+F81E1E301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0
+003800001C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800
+F07E03F01FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E
+00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E
+00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7FC171C809B
+18>I<038007C007C007C0038000000000000000007FC0FFC07FC001C001C001C001C001
+C001C001C001C001C001C001C001C001C001C0FFFFFFFFFFFF101D7C9C18>I<0038007C
+007C007C003800000000000000000FFC0FFC0FFC001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07FE0
+3F800E277E9C18>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3FF0
+0E3FF00E3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E00
+0E0F000E07000E03800E03C07FC7F8FFC7F87FC7F8151C7F9B18>I<FFC000FFC000FFC0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF
+80FFFF80111C7D9B18>I<F9C1C0FFF7F0FFFFF03E3E383C3C383C3C3838383838383838
+3838383838383838383838383838383838383838383838383838FE3E3EFE7E7EFE3E3E17
+14809318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7FC1714809318>
+I<01F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000
+E0F001E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FE
+FF807FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F
+00700F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E
+00000E00007FC000FFE0007FC000151E809318>I<01F38007FB801FFF803E1F80380F80
+700780700780E00380E00380E00380E00380E00380E00380700780700780380F803C1F80
+1FFF800FFB8003E380000380000380000380000380000380000380000380001FF0003FF8
+001FF0151E7E9318>I<FF0FC0FF3FE0FF7FF007F0F007E06007C0000780000780000700
+00070000070000070000070000070000070000070000070000FFFC00FFFE00FFFC001414
+7E9318>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003
+FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<
+0180000380000380000380000380007FFFC0FFFFC0FFFFC0038000038000038000038000
+0380000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80
+003E0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714
+809318>I<7F8FF0FF8FF87F8FF01C01C00E03800E03800E038007070007070007070007
+8F00038E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<
+FF07F8FF8FF8FF07F83800E03800E03800E03800E01C01C01C71C01CF9C01CF9C01CD9C0
+1DDDC00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9F
+F07F8FF00F0700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E
+00038E000707000E07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E
+01C00E03800E0380070380070700070700038700038700038E0001CE0001CE0001CC0000
+CC0000DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F
+80003F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00
+001E00003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0
+FFFFF014147F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000078
+00007FE0001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F000
+007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00003C000FFC000FF00007C000013247E9F18>I<060C1F1E3F
+BEFBF8F1F060C00F067C9B18>I E /Fu 77 123 df<001F83E000F06E3001C078780380
+F8780300F03007007000070070000700700007007000070070000700700007007000FFFF
+FF8007007000070070000700700007007000070070000700700007007000070070000700
+700007007000070070000700700007007000070070000700700007007000070070000700
+70003FE3FF001D20809F1B>11 D<003F0000E0C001C0C00381E00701E00701E007000007
+0000070000070000070000070000FFFFE00700E00700E00700E00700E00700E00700E007
+00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E03F
+C3FC1620809F19>I<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E0
+0700E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0
+0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E03FE7FC162080
+9F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F000700
+70000007007000000700700000070070000007007000000700700000FFFFFFFF00070070
+070007007007000700700700070070070007007007000700700700070070070007007007
+000700700700070070070007007007000700700700070070070007007007000700700700
+0700700700070070070007007007003FE3FE3FE02320809F26>I<7038F87CFC7EFC7E74
+3A0402040204020804080410081008201040200F0E7F9F17>34 D<00400000400003F000
+0C4E00104100204080604080404040C041C0C043C0C043C0E04180E040007040007C4000
+3FC0001FF8000FFC0003FE00007F00004F800043800041C00041C0F040C0F040C0F040C0
+8040C08040804041802041003042000C4C0003F00000400000400000400012257EA117>
+36 D<70F8FCFC74040404080810102040060E7C9F0D>39 D<0040008001000300060004
+000C001800180038003000300070006000600060006000E000E000E000E000E000E000E0
+00E000E000E000E000E00060006000600060007000300030003800180018000C00040006
+0003000100008000400A2E7BA112>I<8000400020003000180008000C00060006000700
+030003000380018001800180018001C001C001C001C001C001C001C001C001C001C001C0
+01C001800180018001800380030003000700060006000C00080018003000200040008000
+0A2E7EA112>I<70F0F8F878080808101010202040050E7C840D>44
+D<FFF0FFF00C02808A0F>I<70F8F8F87005057C840D>I<0000400000C000018000018000
+0180000300000300000300000600000600000C00000C00000C0000180000180000180000
+300000300000600000600000600000C00000C00000C00001800001800001800003000003
+00000600000600000600000C00000C00000C000018000018000030000030000030000060
+0000600000600000C00000C00000122D7EA117>I<03F0000E1C001C0E00180600380700
+700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0
+F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E00
+0E1C0003F000121F7E9D17>I<008003800F80F380038003800380038003800380038003
+80038003800380038003800380038003800380038003800380038003800380038007C0FF
+FE0F1E7C9D17>I<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F8
+03C02007C00007C0000780000780000F00000E00001C0000380000700000600000C00001
+80000300000600400C00401800401000803FFF807FFF80FFFF80121E7E9D17>I<03F000
+0C1C00100E00200F00780F80780780780780380F80000F80000F00000F00001E00001C00
+00700007F000003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0
+F00780400780400F00200E00183C0007F000121F7E9D17>I<000600000600000E00000E
+00001E00002E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E
+00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E
+00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE00010000010000010
+000010000010000010000011F000161C00180E001007001007800003800003800003C000
+03C00003C07003C0F003C0F003C0E00380400380400700200600100C0008380007E00012
+1F7E9D17>I<007C000182000701000E03800C0780180780380300380000780000700000
+700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F003C0
+7003C07003C07003803803803807001807000C0E00061C0001F000121F7E9D17>I<4000
+007FFFE07FFFC07FFFC04000808001008001008002000004000004000008000010000010
+0000200000200000600000600000E00000C00001C00001C00001C00001C00003C00003C0
+0003C00003C00003C00003C00003C000018000131F7E9D17>I<03F0000C0C0010060030
+03002001806001806001806001807001807803003E03003F06001FC8000FF00003F80007
+FC000C7E00103F00300F806007806001C0C001C0C000C0C000C0C000C0C0008060018020
+01001002000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700
+700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC0
+0E13C003E3C0000380000380000380000700300700780600780E00700C00201800107000
+0FC000121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>I<
+70F8F8F8700000000000000000000070F0F8F878080808101010202040051D7C930D>I<
+000100000003800000038000000380000007C0000007C0000007C0000009E0000009E000
+0009E0000010F0000010F0000010F00000207800002078000020780000403C0000403C00
+00C03E0000801E0000801E0001FFFF0001000F0001000F00020007800200078002000780
+040003C0040003C00C0003C01E0003E0FF801FFE1F207F9F22>65
+D<FFFFE0000F0078000F001E000F001E000F000F000F000F800F000F800F000F800F000F
+800F000F800F000F000F001F000F001E000F007C000FFFF0000F007C000F001F000F000F
+800F0007C00F0003C00F0003E00F0003E00F0003E00F0003E00F0003E00F0003C00F0007
+C00F0007800F000F000F003E00FFFFF0001B1F7E9E20>I<000FE01000381C3000E00270
+03C00170078000F00F0000701E0000701E0000303C0000303C0000107C00001078000010
+F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000
+780000007C0000103C0000103C0000101E0000201E0000200F0000200780004003C00080
+00E0030000380C00000FF0001C217E9F21>I<FFFFF80007801E0007800780078003C007
+8001E0078000F00780007007800078078000780780003C0780003C0780003C0780003E07
+80003E0780003E0780003E0780003E0780003E0780003E0780003E0780003C0780003C07
+80007C0780007807800078078000F0078001E0078003C00780078007801E00FFFFF8001F
+1F7F9E23>I<FFFFFF800F000F800F0003800F0001800F0000800F0000C00F0000400F00
+00400F0000400F0040400F0040000F0040000F00C0000F01C0000FFFC0000F01C0000F00
+C0000F0040000F0040000F0040000F0000200F0000200F0000200F0000400F0000400F00
+00400F0000C00F0001C00F0003800F000F80FFFFFF801B1F7E9E1F>I<FFFFFF80078007
+80078001800780018007800080078000C007800040078000400780004007800040078020
+000780200007802000078060000780E00007FFE0000780E0000780600007802000078020
+000780200007800000078000000780000007800000078000000780000007800000078000
+0007C00000FFFE00001A1F7F9E1E>I<000FE01000381C3000E0027003C00170078000F0
+0F0000701E0000701E0000303C0000303C0000107C00001078000010F8000000F8000000
+F8000000F8000000F8000000F8000000F8000000F8003FFEF80001F0780000F07C0000F0
+3C0000F03C0000F01E0000F01E0000F00F0000F0078000F003C0017000E0023000380C10
+000FF0001F217E9F24>I<FFF07FF80F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800FFFFF800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F000780FFF07FF81D1F7E9E22>I<FFF0
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F00FFF00C1F7E9E10>I<FFF007FC0F
+0003E00F0001800F0001000F0002000F0004000F0008000F0010000F0020000F0040000F
+0080000F0100000F0300000F0780000F0F80000F13C0000F21E0000F41E0000F80F0000F
+0078000F0078000F003C000F001E000F001E000F000F000F0007800F0007800F0003C00F
+0003E00F0003F0FFF01FFE1F1F7E9E23>75 D<FFF8000F80000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00020F00020F00020F00020F00060F00040F00040F000C0F001C0F00
+7CFFFFFC171F7E9E1C>I<FF800007FE07800007C007800007C005C0000BC005C0000BC0
+04E00013C004E00013C004E00013C004700023C004700023C004380043C004380043C004
+380043C0041C0083C0041C0083C0040E0103C0040E0103C0040E0103C004070203C00407
+0203C004070203C004038403C004038403C00401C803C00401C803C00401C803C00400F0
+03C00400F003C004006003C01F006003C0FFE0607FFE271F7F9E2A>I<FF000FF80F8003
+E00F8000800BC0008009E0008009E0008008F000800878008008780080083C0080081E00
+80081E0080080F008008078080080780800803C0800801E0800801E0800800F080080078
+800800788008003C8008001E8008001E8008000F80080007800800078008000380080001
+803E000180FF8000801D1F7E9E22>I<001FE0000070380001C00E000380070007000380
+0F0003C01E0001E03C0000F03C0000F07C0000F87C0000F878000078F800007CF800007C
+F800007CF800007CF800007CF800007CF800007CF800007CF800007C780000787C0000F8
+7C0000F83C0000F03E0001F01E0001E00F0003C0070003800380070001E01E0000703800
+001FE0001E217E9F23>I<FFFFE0000F007C000F001E000F000F000F0007800F0007800F
+0007C00F0007C00F0007C00F0007C00F0007800F0007800F000F000F001E000F007C000F
+FFE0000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000000F0000000F0000000F0000000F0000000F000000FFF000001A1F7E9E1F>I<FFFF
+80000F00F0000F003C000F001E000F000F000F000F000F000F800F000F800F000F800F00
+0F800F000F000F000F000F001E000F003C000F00F0000FFF80000F01C0000F0070000F00
+70000F0038000F003C000F003C000F003C000F003E000F003E000F003E000F003E040F00
+3F040F001F040F000F08FFF00788000001F01E207E9E21>82 D<03F0400C0CC01803C030
+01C06000C06000C0E000C0E00040E00040E00040F00000F800007C00007F80003FF8001F
+FF0007FF8000FFC0001FE00003E00001E00000F0000070800070800070800070800070C0
+0060C000E0E000C0F80180C6030081FC0014217E9F19>I<7FFFFFE0780F01E0600F0060
+400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F0000
+000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
+000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F8000
+03FFFC001C1F7E9E21>I<FFF00FF80F0003E00F0000800F0000800F0000800F0000800F
+0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F
+0000800F0000800F0000800F0000800F0000800F0000800F0000800F0000800F00008007
+00010007800100038001000380020001C0040000E0080000383000000FC0001D207E9E22
+>I<FFF003FE1F8000F80F0000600F00002007800040078000400780004003C0008003C0
+008003E0018001E0010001E0010000F0020000F0020000F802000078040000780400003C
+0800003C0800003C0800001E1000001E1000001F1000000F2000000F20000007C0000007
+C0000007C000000380000003800000038000000100001F207F9E22>I<FFF07FF81FF01F
+000FC007C00F00078001800F00078001000F0007C001000F8007C00300078007C0020007
+8009E0020007C009E0020003C009E0040003C019F0040003C010F0040001E010F0080001
+E010F0080001E02078080000F02078100000F02078100000F0403C10000078403C200000
+78403C20000078801E2000007C801E6000003C801E4000003D000F4000003F000F400000
+1F000F8000001F000F8000001E00078000000E00070000000E00070000000C0003000000
+04000200002C207F9E2F>I<FFF001FF1F8000780F8000600780006007C0004003C00080
+03E0008001F0010000F0010000F80200007C0600003C0400003E0800001E0800001F1000
+000FB0000007A0000007E0000003C0000003C0000003C0000003C0000003C0000003C000
+0003C0000003C0000003C0000003C0000003C0000003C000003FFC00201F7F9E22>89
+D<FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0FFFF082D7CA10D>91 D<080410082010201040204020804080408040
+B85CFC7EFC7E7C3E381C0F0E7A9F17>I<FFFF0303030303030303030303030303030303
+030303030303030303030303030303030303030303030303FFFF082D80A10D>I<081020
+204040808080B8FCFC7C38060E7D9F0D>96 D<1FE000303000781800781C00300E00000E
+00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E
+103867200F83C014147E9317>I<1C0000FC00001C00001C00001C00001C00001C00001C
+00001C00001C00001C00001C00001C7C001D87001E01801E00C01C00E01C00701C00701C
+00781C00781C00781C00781C00781C00781C00701C00F01C00E01E00C01A018019870010
+7C0015207E9F19>I<01FC000706001C0F00380F00380600780000700000F00000F00000
+F00000F00000F00000F000007000007800003800803800801C010007060001F80011147F
+9314>I<0001C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C001F1C0070DC00C03C01801C03801C07801C07001C0F001C0F001C0F001C0F001
+C0F001C0F001C07001C07001C03801C01803C00C03C0070DC001F1F815207F9F19>I<03
+F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F0
+00007000007000003800803800801C010007060001F80011147F9314>I<007C01C6030F
+070F0E060E000E000E000E000E000E000E00FFF00E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E007FE01020809F0E>I<0000E003E3300E
+3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E00020
+00002000003000003000003FFE001FFF801FFFC03001E0600070C00030C00030C00030C0
+00306000603000C01C038003FC00141F7F9417>I<1C0000FC00001C00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C7C001C86001D03001E03801E0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C03801C0380FF8FF014207E9F19>I<38007C007C007C00380000000000000000000000
+00001C00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C00FF80091F7F9E0C>I<00E001F001F001F000E000000000000000000000000000
+7007F000F000700070007000700070007000700070007000700070007000700070007000
+70007000700070007000706070F060F0C061803F000C28829E0E>I<1C0000FC00001C00
+001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FE01C07801C06
+001C04001C08001C10001C20001C60001CE0001DF0001E70001C38001C3C001C1C001C0E
+001C0F001C07001C07801C07C0FF9FF014207E9F18>I<1C00FC001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C00FF8009207F9F0C>I<1C3E03E000FCC30C30001D039038
+001E01E01C001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C
+01C01C001C01C01C00FF8FF8FF8021147E9326>I<1C7C00FC86001D03001E03801E0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C03801C0380FF8FF014147E9319>I<01F800070E001C03803801C03801C07000E07000
+E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380070E
+0001F80014147F9317>I<1C7C00FD87001E01801E01C01C00E01C00F01C00701C00781C
+00781C00781C00781C00781C00781C00701C00F01C00E01E01C01E03801D87001C7C001C
+00001C00001C00001C00001C00001C00001C00001C0000FF8000151D7E9319>I<01F040
+070CC00E02C01C03C03801C07801C07001C0F001C0F001C0F001C0F001C0F001C0F001C0
+7001C07801C03801C01C03C00C05C00709C001F1C00001C00001C00001C00001C00001C0
+0001C00001C00001C0000FF8151D7F9318>I<1CF0FD181E3C1E3C1E181C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FFC00E147E9312>I<0FC830386018
+C008C008C008E0007C003FE01FF007F8003C800E8006C006C006C004E00CD81887E00F14
+7F9312>I<020002000200060006000E000E003E00FFF80E000E000E000E000E000E000E
+000E000E000E000E000E040E040E040E040E040708030801F00E1C7F9B12>I<1C0380FC
+1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C03801C07800C0780061B8003E3F014147E9319>I<FF83F83E00E01C00C0
+0E00800E00800E008007010007010007830003820003820001C40001C40001E40000E800
+00E80000700000700000700000200015147F9318>I<FF9FE1FC3C0780701C0300601C03
+80200E0380400E0380400E03C0400704C0800704E0800704E08003886100038871000388
+710001D0320001D03A0001D03E0000E01C0000E01C0000601800004008001E147F9321>
+I<FF87F81E03C00E01800E030007020003840001C80001D80000F00000700000780000F8
+00009C00010E00020E000607000403800C03C03C03E0FE07FC16147F9318>I<FF83F83E
+00E01C00C00E00800E00800E008007010007010007830003820003820001C40001C40001
+E40000E80000E800007000007000007000002000002000004000004000004000F08000F0
+8000F100006200003C0000151D7F9318>I<7FFF700E600E401C40384078407000E001E0
+01C00380078007010E011E011C0338027006700EFFFE10147F9314>I
+E /Fv 14 122 df<0000001FFC0000C000000003FFFFC001C00000001FFFFFF003C00000
+007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F9FC000000FFE000007FFC00000
+3FF8000003FFC000007FF0000000FFC00000FFE00000007FC00001FFC00000007FC00001
+FF800000003FC00003FF000000001FC00007FE000000001FC0000FFE000000000FC0000F
+FC000000000FC0001FFC0000000007C0001FFC0000000007C0003FF80000000007C0003F
+F80000000003C0003FF80000000003C0007FF80000000003C0007FF80000000003C0007F
+F0000000000000007FF000000000000000FFF000000000000000FFF000000000000000FF
+F000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FF
+F000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FF
+F000001FFFFFFF807FF000001FFFFFFF807FF000001FFFFFFF807FF800001FFFFFFF807F
+F800000001FFC0003FF800000001FFC0003FF800000001FFC0003FF800000001FFC0001F
+FC00000001FFC0001FFC00000001FFC0000FFE00000001FFC0000FFE00000001FFC00007
+FF00000001FFC00003FF00000001FFC00001FF80000001FFC00001FFC0000001FFC00000
+FFE0000001FFC000007FF0000003FFC000003FFC000003FFC000000FFF000007FFC00000
+07FFC0001FBFC0000001FFFC00FF1FC00000007FFFFFFE0FC00000001FFFFFF803C00000
+0003FFFFE000C0000000001FFE00000000413D7BBB4C>71 D<FFFFFFFE000000FFFFFFFE
+000000FFFFFFFE000000FFFFFFFE000000007FF000000000007FF000000000007FF00000
+0000007FF000000000007FF000000000007FF000000000007FF000000000007FF0000000
+00007FF000000000007FF000000000007FF000000000007FF000000000007FF000000000
+007FF000000000007FF000000000007FF000000000007FF000000000007FF00000000000
+7FF000000000007FF000000000007FF000000000007FF000000000007FF000000000007F
+F000000000007FF000000000007FF000000000007FF000000000007FF000000000007FF0
+00000000007FF000000000007FF000000000007FF0000003C0007FF0000003C0007FF000
+0003C0007FF0000003C0007FF0000003C0007FF0000007C0007FF000000780007FF00000
+0780007FF000000780007FF000000F80007FF000000F80007FF000000F80007FF000001F
+80007FF000001F80007FF000003F80007FF000007F80007FF00000FF80007FF00001FF80
+007FF00007FF00007FF0003FFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FF
+FFFFFFFFFF00323B7DBA3A>76 D<FFFFF0000007FFFFE0FFFFF8000007FFFFE0FFFFFC00
+0007FFFFE0FFFFFE000007FFFFE0007FFE00000007E000007FFF00000003C000007FFF80
+000003C000007BFFC0000003C000007BFFE0000003C0000079FFE0000003C0000078FFF0
+000003C00000787FF8000003C00000783FFC000003C00000783FFE000003C00000781FFE
+000003C00000780FFF000003C000007807FF800003C000007803FFC00003C000007803FF
+E00003C000007801FFE00003C000007800FFF00003C0000078007FF80003C0000078003F
+FC0003C0000078003FFE0003C0000078001FFF0003C0000078000FFF0003C00000780007
+FF8003C00000780003FFC003C00000780003FFE003C00000780001FFF003C00000780000
+FFF003C000007800007FF803C000007800003FFC03C000007800003FFE03C00000780000
+1FFF03C000007800000FFF03C0000078000007FF83C0000078000003FFC3C00000780000
+03FFE3C0000078000001FFF3C0000078000000FFF3C00000780000007FFBC00000780000
+003FFFC00000780000003FFFC00000780000001FFFC00000780000000FFFC00000780000
+0007FFC000007800000003FFC000007800000003FFC000007800000001FFC00000780000
+0000FFC0000078000000007FC0000078000000003FC0000078000000003FC00000FC0000
+00001FC000FFFFFC0000000FC000FFFFFC00000007C000FFFFFC00000003C000FFFFFC00
+000003C000433B7CBA4C>78 D<FFFFFFFFF800000000FFFFFFFFFFC0000000FFFFFFFFFF
+F8000000FFFFFFFFFFFE000000007FF0001FFF000000007FF00003FFC00000007FF00000
+FFE00000007FF000007FF00000007FF000003FF80000007FF000003FF80000007FF00000
+3FFC0000007FF000001FFC0000007FF000001FFC0000007FF000001FFE0000007FF00000
+1FFE0000007FF000001FFE0000007FF000001FFE0000007FF000001FFE0000007FF00000
+1FFE0000007FF000001FFC0000007FF000001FFC0000007FF000003FFC0000007FF00000
+3FF80000007FF000007FF00000007FF000007FE00000007FF00001FFC00000007FF00003
+FF800000007FF0001FFE000000007FFFFFFFF8000000007FFFFFFFC0000000007FFFFFFF
+C0000000007FF0007FF0000000007FF0001FF8000000007FF0000FFC000000007FF00007
+FE000000007FF00003FF000000007FF00003FF800000007FF00001FF800000007FF00001
+FF800000007FF00001FFC00000007FF00001FFC00000007FF00001FFC00000007FF00001
+FFC00000007FF00001FFC00000007FF00001FFE00000007FF00001FFE00000007FF00001
+FFE00000007FF00001FFE00000007FF00001FFE00000007FF00001FFE001E0007FF00001
+FFE001E0007FF00000FFF001E0007FF00000FFF001E0007FF00000FFF003C0007FF00000
+7FF803C0FFFFFFF8003FFC0780FFFFFFF8001FFE0F80FFFFFFF80007FFFF00FFFFFFF800
+01FFFC000000000000001FF000433C7CBA48>82 D<FFFFFFF80007FFFFE0FFFFFFF80007
+FFFFE0FFFFFFF80007FFFFE0FFFFFFF80007FFFFE0007FF000000007E000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000007FF000000003C000007FF0000000
+03C000007FF000000003C000007FF000000003C000003FF0000000078000003FF0000000
+078000003FF8000000078000001FF80000000F0000001FF80000000F0000000FFC000000
+1E00000007FC0000003E00000007FE0000007C00000003FF000000F800000001FF800001
+F8000000007FE0000FE0000000003FFC007FC0000000000FFFFFFF800000000003FFFFFE
+0000000000007FFFF000000000000007FF80000000433C7DBA4A>85
+D<003FFE00000001FFFFE0000007FFFFF800000FE007FC00000FF001FE00001FF800FF00
+001FF8007F80001FF8007FC0001FF8003FC0000FF0003FE00007E0003FE00003C0003FE0
+000000003FE0000000003FE0000000003FE0000000003FE0000000FFFFE000001FFFFFE0
+00007FF83FE00003FF803FE00007FC003FE0000FF0003FE0001FE0003FE0003FE0003FE0
+007FC0003FE0007FC0003FE000FF80003FE000FF80003FE000FF80003FE000FF80003FE0
+00FF80007FE0007FC0007FE0007FC000DFE0003FE0039FF0001FF80F0FFFE007FFFE0FFF
+E001FFFC07FFE0003FE000FFE02B267DA52F>97 D<00FE00000000FFFE00000000FFFE00
+000000FFFE00000000FFFE0000000007FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00
+00000003FE0000000003FE01FF000003FE1FFFF00003FE7FFFFC0003FEFC03FE0003FFF0
+00FF0003FFC0003F8003FF00001FC003FE00001FE003FE00000FF003FE00000FF803FE00
+000FF803FE000007FC03FE000007FC03FE000007FC03FE000007FE03FE000007FE03FE00
+0007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE00
+0007FE03FE000007FC03FE000007FC03FE000007FC03FE00000FFC03FE00000FF803FE00
+000FF003FE00001FF003FF00001FE003FF80003FC003FFC0007F8003F9E000FF0003F0FC
+07FE0003F07FFFF80003E01FFFE00003C003FE00002F3C7DBB36>I<000000003F800000
+003FFF800000003FFF800000003FFF800000003FFF8000000001FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000
+0000FF8000000000FF8000000000FF800000FF80FF80000FFFF0FF80003FFFFCFF8000FF
+C03FFF8001FE000FFF8003FC0003FF8007F80001FF800FF00000FF801FF00000FF803FE0
+0000FF803FE00000FF807FE00000FF807FC00000FF807FC00000FF807FC00000FF80FFC0
+0000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC0
+0000FF80FFC00000FF80FFC00000FF807FC00000FF807FC00000FF807FC00000FF803FE0
+0000FF803FE00000FF801FE00000FF800FF00001FF8007F80003FF8003F80007FF8001FE
+001FFFC000FF807EFFFE007FFFF8FFFE000FFFE0FFFE0001FF00FFFE2F3C7DBB36>100
+D<0001FF8000000FFFF000007FFFFC0000FF81FE0003FE007F8007F8003F800FF0001FC0
+0FF0000FE01FE0000FE03FE0000FF03FE00007F07FC00007F07FC00007F87FC00007F8FF
+C00007F8FFC00007F8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFC0000000FFC0000000FFC0
+000000FFC00000007FC00000007FC00000007FC00000003FE00000003FE00000781FE000
+00781FF00000780FF00000F007F80001F003FC0003E001FE000FC000FFC07F80003FFFFE
+00000FFFF8000000FFC00025267DA52C>I<01E00007F8000FFC000FFC001FFE001FFE00
+1FFE001FFE000FFC000FFC0007F80001E000000000000000000000000000000000000000
+00000000000000000000000000000000FE007FFE007FFE007FFE007FFE0007FE0003FE00
+03FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00
+03FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00
+03FE0003FE0003FE00FFFFF0FFFFF0FFFFF0FFFFF0143D7DBC1A>105
+D<00FE00FFFE00FFFE00FFFE00FFFE0007FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE
+0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00FFFFF8FFFFF8FFFFF8FFFF
+F8153C7DBB1A>108 D<01FC00FF8000FFFC03FFF000FFFC0FFFF800FFFC1E03FC00FFFC
+3801FE0007FC6001FF0003FCC000FF0003FDC000FF8003FD8000FF8003FF0000FF8003FF
+0000FF8003FF0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE
+0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE
+0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE
+0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF80FFFF
+F83FFFFEFFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F267CA536>110
+D<01FC03F000FFFC0FFC00FFFC1FFF00FFFC3C3F80FFFC707F8007FCE0FFC003FCC0FFC0
+03FD80FFC003FD80FFC003FF807F8003FF003F0003FF001E0003FF00000003FE00000003
+FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE
+00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00
+000003FE00000003FE00000003FE00000003FE00000003FE000000FFFFFC0000FFFFFC00
+00FFFFFC0000FFFFFC000022267DA528>114 D<FFFFF000FFFCFFFFF000FFFCFFFFF000
+FFFCFFFFF000FFFC03FE00001F8003FF00001F0001FF00001E0001FF80001E0000FF8000
+3C0000FF80003C0000FFC0007C00007FC0007800007FE000F800003FE000F000003FF001
+F000001FF001E000001FF803E000000FF803C000000FF803C000000FFC07C0000007FC07
+80000007FE0F80000003FE0F00000003FF1F00000001FF1E00000001FFBE00000000FFBC
+00000000FFFC000000007FF8000000007FF8000000007FF8000000003FF0000000003FF0
+000000001FE0000000001FE0000000000FC0000000000FC0000000000780000000000780
+000000000F80000000000F00000000001F00000000001E00000008003E0000007F003C00
+00007F007C000000FF8078000000FF80F8000000FF81F0000000FF83E00000007F07C000
+00007C1F800000003FFF000000001FFC0000000007F0000000002E377EA533>121
+D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 75 693 a Fv(GNU)33 b(Readline)h(Library)p 75
+743 1800 17 v 936 791 a Fu(Edition)17 b(4.0,)c(for)i
+Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.0.)1572 845
+y(Decem)o(b)q(er)g(1998)75 2467 y Fs(Brian)23 b(F)-6
+b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75
+2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
+b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop
+%%Page: 2 2
+2 1 bop 75 250 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f
+(GNU)g(Readline)i(Library)l(,)e(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h
+(the)f(consistency)75 305 y(of)h(user)g(in)o(terface)h(across)e
+(discrete)i(programs)e(that)h(need)h(to)e(pro)o(vide)i(a)f(command)g
+(line)i(in)o(terface.)75 373 y(Published)g(b)o(y)f(the)f(F)l(ree)g
+(Soft)o(w)o(are)f(F)l(oundation)75 427 y(675)g(Massac)o(h)o(usetts)g
+(Av)o(en)o(ue,)75 482 y(Cam)o(bridge,)h(MA)g(02139)f(USA)75
+549 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g
+(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o
+(vided)h(the)75 604 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q
+(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)75
+671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g
+(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h(man)o(ual)g
+(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,)
+g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g(deriv)o(ed)g(w)o
+(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g(of)g(a)f(p)q
+(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
+848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
+(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
+g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
+(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
+(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
+(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are)
+d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289
+2661 y Fr(\015)i Fu(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+(oundation,)h(Inc.)p eop
+%%Page: 1 3
+1 2 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(1)75 183 y Fq(1)41 b(Command)28 b(Line)e(Editing)137
+294 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f
+(of)g(the)g Fp(GNU)g Fu(command)g(line)i(editing)f(in)o(terface.)75
+419 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137
+514 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e
+(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137
+580 y(The)h(text)327 578 y Fo(h)p 339 552 56 2 v 339
+580 a Fn(C-k)p 339 587 V 393 578 a Fo(i)424 580 y Fu(is)f(read)g(as)g
+(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q
+(duced)h(when)f(the)1831 578 y Fo(h)p 1844 552 19 2 v
+1844 580 a Fn(k)p 1844 587 V 1860 578 a Fo(i)75 634 y
+Fu(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h
+(depressed.)137 700 y(The)g(text)325 698 y Fo(h)p 337
+672 63 2 v 337 700 a Fn(M-k)p 337 708 V 398 698 a Fo(i)428
+700 y Fu(is)f(read)g(as)g(`Meta-K')f(and)h(describ)q(es)i(the)e(c)o
+(haracter)g(pro)q(duced)h(when)f(the)h(meta)75 755 y(k)o(ey)d(\(if)h(y)
+o(ou)f(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)g(the)922
+753 y Fo(h)p 935 727 19 2 v 935 755 a Fn(k)p 935 763
+V 951 753 a Fo(i)979 755 y Fu(k)o(ey)g(is)f(pressed.)20
+b(If)14 b(y)o(ou)f(do)g(not)g(ha)o(v)o(e)g(a)g(meta)g(k)o(ey)l(,)75
+810 y(the)k(iden)o(tical)i(k)o(eystrok)o(e)d(can)h(b)q(e)h(generated)f
+(b)o(y)g(t)o(yping)1110 808 y Fo(h)p 1122 782 70 2 v
+1122 810 a Fn(ESC)p 1122 818 V 1189 808 a Fo(i)1221 810
+y Fm(\014rst)p Fu(,)f(and)i(then)f(t)o(yping)1668 808
+y Fo(h)p 1681 782 19 2 v 1681 810 a Fn(k)p 1681 818 V
+1697 808 a Fo(i)1712 810 y Fu(.)26 b(Either)75 865 y(pro)q(cess)15
+b(is)h(kno)o(wn)f(as)g Fm(metafying)k Fu(the)773 863
+y Fo(h)p 785 837 V 785 865 a Fn(k)p 785 873 V 802 863
+a Fo(i)832 865 y Fu(k)o(ey)l(.)137 931 y(The)h(text)334
+929 y Fo(h)p 347 903 100 2 v 347 931 a Fn(M-C-k)p 347
+938 V 444 929 a Fo(i)479 931 y Fu(is)g(read)g(as)f(`Meta-Con)o(trol-k')
+f(and)i(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75
+986 y Fm(metafying)291 984 y Fo(h)p 303 958 56 2 v 303
+986 a Fn(C-k)p 303 993 V 357 984 a Fo(i)372 986 y Fu(.)137
+1052 y(In)e(addition,)h(sev)o(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o
+(wn)f(names.)30 b(Sp)q(eci\014cally)l(,)1384 1050 y Fo(h)p
+1396 1024 73 2 v 1396 1052 a Fn(DEL)p 1396 1059 V 1467
+1050 a Fo(i)1482 1052 y Fu(,)1514 1050 y Fo(h)p 1526
+1024 70 2 v 1526 1052 a Fn(ESC)p 1526 1059 V 1593 1050
+a Fo(i)1608 1052 y Fu(,)1640 1050 y Fo(h)p 1652 1024
+72 2 v 1652 1052 a Fn(LFD)p 1652 1059 V 1722 1050 a Fo(i)1737
+1052 y Fu(,)1768 1050 y Fo(h)p 1780 1024 70 2 v 1780
+1052 a Fn(SPC)p 1780 1059 V 1847 1050 a Fo(i)1862 1052
+y Fu(,)75 1104 y Fo(h)p 87 1078 76 2 v 87 1106 a Fn(RET)p
+87 1114 V 160 1104 a Fo(i)175 1106 y Fu(,)23 b(and)306
+1104 y Fo(h)p 318 1078 74 2 v 318 1106 a Fn(T)m(AB)p
+318 1114 V 390 1104 a Fo(i)427 1106 y Fu(all)f(stand)g(for)f(themselv)o
+(es)h(when)h(seen)f(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g
+(\(see)75 1161 y(Section)16 b(1.3)e([Readline)j(Init)g(File],)e(page)g
+(3\).)75 1286 y Fs(1.2)33 b(Readline)23 b(In)n(teraction)137
+1381 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o(e)h(session)g(y)o
+(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,)h(only)g(to)f
+(notice)h(that)f(the)75 1436 y(\014rst)k(w)o(ord)f(on)h(the)h(line)h
+(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e(giv)o(es)f(y)o
+(ou)g(a)g(set)g(of)g(commands)g(for)75 1491 y(manipulating)g(the)f
+(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,)g(allo)o(wing)h(y)o(ou)f
+(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g(and)h(not)g(forcing)75
+1545 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s(jorit)o(y)f(of)h(the)g
+(line.)21 b(Using)15 b(these)f(editing)h(commands,)f(y)o(ou)g(mo)o(v)o
+(e)f(the)h(cursor)75 1600 y(to)i(the)i(place)g(that)e(needs)i
+(correction,)g(and)f(delete)h(or)f(insert)g(the)h(text)e(of)h(the)g
+(corrections.)26 b(Then,)75 1655 y(when)16 b(y)o(ou)f(are)h
+(satis\014ed)g(with)g(the)f(line,)i(y)o(ou)e(simply)i(press)1160
+1653 y Fo(h)p 1172 1627 155 2 v 1172 1655 a Fn(RETURN)p
+1172 1663 V 1324 1653 a Fo(i)1339 1655 y Fu(.)k(Y)l(ou)16
+b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75 1710 y(the)g(end)g(of)f
+(the)g(line)i(to)e(press)634 1708 y Fo(h)p 646 1682 V
+646 1710 a Fn(RETURN)p 646 1717 V 798 1708 a Fo(i)813
+1710 y Fu(;)g(the)h(en)o(tire)g(line)h(is)f(accepted)g(regardless)g(of)
+f(the)g(lo)q(cation)75 1765 y(of)f(the)g(cursor)g(within)h(the)g(line.)
+75 1873 y Fl(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137
+1968 y Fu(In)12 b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g
+(the)h(line,)h(simply)g(t)o(yp)q(e)f(them.)18 b(The)12
+b(t)o(yp)q(ed)g(c)o(haracter)f(app)q(ears)75 2023 y(where)16
+b(the)h(cursor)f(w)o(as,)f(and)h(then)h(the)f(cursor)g(mo)o(v)o(es)g
+(one)g(space)g(to)g(the)g(righ)o(t.)23 b(If)17 b(y)o(ou)f(mist)o(yp)q
+(e)g(a)75 2077 y(c)o(haracter,)e(y)o(ou)h(can)g(use)h(y)o(our)f(erase)g
+(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h(delete)g(the)f(mist)o(yp)q
+(ed)h(c)o(haracter.)137 2143 y(Sometimes)j(y)o(ou)f(ma)o(y)g(miss)h(t)o
+(yping)g(a)f(c)o(haracter)g(that)f(y)o(ou)i(w)o(an)o(ted)f(to)f(t)o(yp)
+q(e,)i(and)g(not)f(notice)75 2198 y(y)o(our)c(error)f(un)o(til)i(y)o
+(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(sev)o(eral)h(other)e(c)o(haracters.)19
+b(In)c(that)e(case,)h(y)o(ou)g(can)g(t)o(yp)q(e)1739
+2196 y Fo(h)p 1751 2170 57 2 v 1751 2198 a Fn(C-b)p 1751
+2206 V 1806 2196 a Fo(i)1835 2198 y Fu(to)75 2253 y(mo)o(v)o(e)h(the)h
+(cursor)g(to)f(the)h(left,)g(and)g(then)h(correct)e(y)o(our)h(mistak)o
+(e.)21 b(Afterw)o(ards,)15 b(y)o(ou)h(can)g(mo)o(v)o(e)f(the)75
+2308 y(cursor)g(to)f(the)i(righ)o(t)f(with)559 2306 y
+Fo(h)p 571 2280 49 2 v 571 2308 a Fn(C-f)p 571 2315 V
+617 2306 a Fo(i)632 2308 y Fu(.)137 2374 y(When)i(y)o(ou)f(add)g(text)g
+(in)h(the)g(middle)h(of)e(a)f(line,)j(y)o(ou)e(will)i(notice)f(that)f
+(c)o(haracters)f(to)h(the)g(righ)o(t)75 2428 y(of)e(the)g(cursor)g(are)
+g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h(ro)q(om)g(for)f(the)i(text)f
+(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 b(Lik)o(ewise,)75
+2483 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j(the)e(cursor,)g(c)o
+(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h(cursor)g(are)f(`pulled)75
+2538 y(bac)o(k')d(to)h(\014ll)h(in)g(the)f(blank)g(space)h(created)f(b)
+o(y)f(the)h(remo)o(v)m(al)g(of)g(the)g(text.)21 b(A)16
+b(list)h(of)e(the)h(basic)h(bare)75 2593 y(essen)o(tials)f(for)f
+(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o(ws.)75
+2668 y Fo(h)p 87 2642 57 2 v 87 2670 a Fn(C-b)p 87 2678
+V 142 2668 a Fo(i)315 2670 y Fu(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o
+(haracter.)p eop
+%%Page: 2 4
+2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)i(Library)75
+181 y Fo(h)p 87 155 49 2 v 87 183 a Fn(C-f)p 87 191 V
+133 181 a Fo(i)315 183 y Fu(Mo)o(v)o(e)d(forw)o(ard)g(one)h(c)o
+(haracter.)75 258 y Fo(h)p 87 232 73 2 v 87 260 a Fn(DEL)p
+87 268 V 158 258 a Fo(i)315 260 y Fu(Delete)h(the)f(c)o(haracter)g(to)f
+(the)h(left)h(of)f(the)g(cursor.)75 335 y Fo(h)p 87 309
+57 2 v 87 337 a Fn(C-d)p 87 344 V 142 335 a Fo(i)315
+337 y Fu(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75
+413 y(Prin)o(ting)h(c)o(haracters)315 468 y(Insert)f(the)h(c)o
+(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75
+543 y Fo(h)p 87 517 50 2 v 87 545 a Fn(C-)p 126 545 11
+2 v 87 553 50 2 v 135 543 a Fo(i)315 545 y Fu(Undo)i(the)g(last)f
+(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o
+(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 600 y(line.)75
+707 y Fl(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137
+802 y Fu(The)17 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)f(most)g
+(basic)g(p)q(ossible)i(k)o(eystrok)o(es)d(that)g(y)o(ou)h(need)h(in)g
+(order)f(to)75 857 y(do)e(editing)h(of)f(the)g(input)h(line.)22
+b(F)l(or)13 b(y)o(our)h(con)o(v)o(enience,)h(man)o(y)f(other)f
+(commands)h(ha)o(v)o(e)g(b)q(een)h(added)75 912 y(in)f(addition)g(to)
+356 910 y Fo(h)p 368 884 57 2 v 368 912 a Fn(C-b)p 368
+919 V 423 910 a Fo(i)438 912 y Fu(,)464 910 y Fo(h)p
+476 884 49 2 v 476 912 a Fn(C-f)p 476 919 V 522 910 a
+Fo(i)537 912 y Fu(,)563 910 y Fo(h)p 575 884 57 2 v 575
+912 a Fn(C-d)p 575 919 V 629 910 a Fo(i)644 912 y Fu(,)f(and)756
+910 y Fo(h)p 768 884 73 2 v 768 912 a Fn(DEL)p 768 919
+V 839 910 a Fo(i)854 912 y Fu(.)19 b(Here)13 b(are)g(some)g(commands)f
+(for)g(mo)o(ving)h(more)g(rapidly)75 966 y(ab)q(out)i(the)g(line.)75
+1041 y Fo(h)p 87 1015 55 2 v 87 1043 a Fn(C-a)p 87 1051
+V 140 1041 a Fo(i)315 1043 y Fu(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h
+(the)g(line.)75 1118 y Fo(h)p 87 1092 53 2 v 87 1120
+a Fn(C-e)p 87 1127 V 138 1118 a Fo(i)315 1120 y Fu(Mo)o(v)o(e)f(to)h
+(the)g(end)h(of)f(the)g(line.)75 1194 y Fo(h)p 87 1168
+55 2 v 87 1196 a Fn(M-f)p 87 1204 V 140 1194 a Fo(i)315
+1196 y Fu(Mo)o(v)o(e)f(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)
+h(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75
+1271 y Fo(h)p 87 1245 64 2 v 87 1273 a Fn(M-b)p 87 1281
+V 149 1271 a Fo(i)315 1273 y Fu(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o
+(ord.)75 1348 y Fo(h)p 87 1322 48 2 v 87 1350 a Fn(C-l)p
+87 1358 V 132 1348 a Fo(i)315 1350 y Fu(Clear)g(the)h(screen,)f(reprin)
+o(ting)h(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137
+1427 y(Notice)d(ho)o(w)368 1425 y Fo(h)p 380 1399 49
+2 v 380 1427 a Fn(C-f)p 380 1434 V 426 1425 a Fo(i)452
+1427 y Fu(mo)o(v)o(es)f(forw)o(ard)f(a)i(c)o(haracter,)f(while)1105
+1425 y Fo(h)p 1117 1399 55 2 v 1117 1427 a Fn(M-f)p 1117
+1434 V 1170 1425 a Fo(i)1197 1427 y Fu(mo)o(v)o(es)f(forw)o(ard)h(a)g
+(w)o(ord.)18 b(It)12 b(is)g(a)g(lo)q(ose)75 1481 y(con)o(v)o(en)o(tion)
+j(that)f(con)o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o
+(haracters)h(while)h(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75
+1536 y(w)o(ords.)75 1644 y Fl(1.2.3)30 b(Readline)20
+b(Killing)h(Commands)137 1739 y Fm(Killing)26 b Fu(text)18
+b(means)g(to)g(delete)i(the)f(text)f(from)g(the)h(line,)i(but)d(to)g
+(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for)h(later)h(use,)75
+1793 y(usually)h(b)o(y)e Fm(y)o(anking)k Fu(\(re-inserting\))d(it)g
+(bac)o(k)f(in)o(to)g(the)h(line.)31 b(If)18 b(the)h(description)g(for)f
+(a)g(command)75 1848 y(sa)o(ys)e(that)f(it)i(`kills')g(text,)f(then)h
+(y)o(ou)f(can)h(b)q(e)g(sure)f(that)g(y)o(ou)g(can)h(get)f(the)g(text)g
+(bac)o(k)g(in)i(a)e(di\013eren)o(t)75 1903 y(\(or)e(the)i(same\))e
+(place)i(later.)137 1969 y(When)c(y)o(ou)g(use)g(a)f(kill)i(command,)f
+(the)g(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fm(kill-ring)p
+Fu(.)21 b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75
+2023 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d
+(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o
+(ou)g(get)g(it)h(all.)22 b(The)75 2078 y(kill)c(ring)f(is)f(not)g(line)
+i(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g
+(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75
+2133 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f
+(are)g(t)o(yping)g(another)g(line.)137 2199 y(Here)h(is)f(the)h(list)g
+(of)e(commands)h(for)g(killing)j(text.)75 2274 y Fo(h)p
+87 2247 56 2 v 87 2276 a Fn(C-k)p 87 2283 V 141 2274
+a Fo(i)315 2276 y Fu(Kill)f(the)f(text)e(from)h(the)g(curren)o(t)g
+(cursor)g(p)q(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75
+2350 y Fo(h)p 87 2324 64 2 v 87 2352 a Fn(M-d)p 87 2360
+V 149 2350 a Fo(i)315 2352 y Fu(Kill)h(from)d(the)i(cursor)e(to)h(the)g
+(end)g(of)g(the)g(curren)o(t)g(w)o(ord,)f(or)h(if)g(b)q(et)o(w)o(een)g
+(w)o(ords,)g(to)f(the)315 2407 y(end)j(of)f(the)g(next)g(w)o(ord.)75
+2482 y Fo(h)p 87 2456 118 2 v 87 2484 a Fn(M-DEL)p 87
+2491 V 202 2482 a Fo(i)315 2484 y Fu(Kill)i(from)d(the)g(cursor)h(the)f
+(start)g(of)g(the)g(previous)i(w)o(ord,)d(or)h(if)h(b)q(et)o(w)o(een)g
+(w)o(ords,)f(to)g(the)315 2539 y(start)g(of)h(the)g(previous)h(w)o
+(ord.)75 2613 y Fo(h)p 87 2587 63 2 v 87 2615 a Fn(C-w)p
+87 2623 V 148 2613 a Fo(i)315 2615 y Fu(Kill)i(from)d(the)h(cursor)g
+(to)f(the)h(previous)h(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g
+(than)1733 2613 y Fo(h)p 1745 2587 118 2 v 1745 2615
+a Fn(M-DEL)p 1745 2623 V 1860 2613 a Fo(i)315 2670 y
+Fu(b)q(ecause)g(the)f(w)o(ord)g(b)q(oundaries)h(di\013er.)p
+eop
+%%Page: 3 5
+3 4 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(3)137 183 y(Here)21 b(is)h(ho)o(w)e(to)g Fm(y)o(ank)j
+Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21
+b(means)g(to)f(cop)o(y)h(the)g(most-)75 238 y(recen)o(tly-killed)d
+(text)d(from)f(the)i(kill)h(bu\013er.)75 316 y Fo(h)p
+87 290 56 2 v 87 318 a Fn(C-y)p 87 326 V 141 316 a Fo(i)315
+318 y Fu(Y)l(ank)e(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g
+(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 396
+y Fo(h)p 87 370 63 2 v 87 398 a Fn(M-y)p 87 406 V 148
+396 a Fo(i)315 398 y Fu(Rotate)h(the)g(kill-ring,)j(and)d(y)o(ank)g
+(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f(this)h(if)f(the)h
+(prior)315 453 y(command)d(is)568 451 y Fo(h)p 580 425
+56 2 v 580 453 a Fn(C-y)p 580 461 V 634 451 a Fo(i)664
+453 y Fu(or)719 451 y Fo(h)p 732 425 63 2 v 732 453 a
+Fn(M-y)p 732 461 V 792 451 a Fo(i)807 453 y Fu(.)75 566
+y Fl(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 662 y
+Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g(Readline)i
+(commands.)k(Sometimes)15 b(the)g(argumen)o(t)e(acts)75
+717 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,)h(other)f(times)g(it)h(is)g
+(the)f Fm(sign)h Fu(of)f(the)g(argumen)o(t)f(that)h(is)h(signi\014can)o
+(t.)36 b(If)20 b(y)o(ou)75 772 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)f
+(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g
+(direction,)i(that)75 827 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o
+(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o
+(k)g(to)g(the)h(start)e(of)75 881 y(the)f(line,)i(y)o(ou)e(migh)o(t)g
+(t)o(yp)q(e)g(`)p Ft(M--)f(C-k)p Fu('.)137 949 y(The)h(general)f(w)o(a)
+o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)h
+(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1004
+y(the)h(command.)23 b(If)16 b(the)g(\014rst)g(`digit')g(t)o(yp)q(ed)g
+(is)h(a)f(min)o(us)g(sign)h(\()1194 1002 y Fo(h)p 1206
+976 12 2 v 1206 1004 a Fn(-)p 1206 1011 V 1215 1002 a
+Fo(i)1230 1004 y Fu(\),)f(then)g(the)g(sign)h(of)f(the)g(argumen)o(t)75
+1059 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o
+(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g
+(started,)f(y)o(ou)h(can)75 1113 y(t)o(yp)q(e)19 b(the)g(remainder)g
+(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30
+b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1111
+y Fo(h)p 1805 1085 57 2 v 1805 1113 a Fn(C-d)p 1805 1121
+V 1860 1111 a Fo(i)75 1168 y Fu(command)c(an)g(argumen)o(t)g(of)f(10,)h
+(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Ft(M-1)f(0)h(C-d)p
+Fu('.)75 1281 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f
+(the)h(History)137 1377 y Fu(Readline)e(pro)o(vides)d(commands)g(for)g
+(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-)
+75 1432 y(taining)e(a)f(sp)q(eci\014ed)i(string.)j(There)c(are)e(t)o(w)
+o(o)g(searc)o(h)h(mo)q(des:)20 b Fm(incremen)o(tal)e
+Fu(and)e Fm(non-incremen)o(tal)p Fu(.)137 1500 y(Incremen)o(tal)e
+(searc)o(hes)f(b)q(egin)h(b)q(efore)f(the)g(user)g(has)g(\014nished)h
+(t)o(yping)f(the)g(searc)o(h)g(string.)19 b(As)13 b(eac)o(h)75
+1555 y(c)o(haracter)k(of)g(the)h(searc)o(h)g(string)f(is)h(t)o(yp)q
+(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en)o(try)f(from)g(the)h
+(history)75 1609 y(matc)o(hing)e(the)g(string)g(t)o(yp)q(ed)h(so)e
+(far.)22 b(An)17 b(incremen)o(tal)g(searc)o(h)f(requires)h(only)f(as)g
+(man)o(y)g(c)o(haracters)75 1664 y(as)k(needed)j(to)d(\014nd)h(the)g
+(desired)h(history)f(en)o(try)l(.)37 b(The)21 b(c)o(haracters)f(presen)
+o(t)h(in)g(the)g(v)m(alue)h(of)f(the)75 1719 y Fm(isearc)o
+(h-terminators)e Fu(v)m(ariable)f(are)f(used)h(to)e(terminate)h(an)g
+(incremen)o(tal)i(searc)o(h.)25 b(If)17 b(that)g(v)m(ariable)75
+1774 y(has)f(not)f(b)q(een)i(assigned)f(a)g(v)m(alue,)g(the)774
+1772 y Fo(h)p 786 1746 70 2 v 786 1774 a Fn(ESC)p 786
+1781 V 853 1772 a Fo(i)884 1774 y Fu(and)973 1772 y Fo(h)p
+985 1746 56 2 v 985 1774 a Fn(C-J)p 985 1781 V 1038 1772
+a Fo(i)1069 1774 y Fu(c)o(haracters)f(will)i(terminate)f(an)g(incremen)
+o(tal)75 1828 y(searc)o(h.)230 1826 y Fo(h)p 242 1800
+55 2 v 242 1828 a Fn(C-g)p 242 1836 V 295 1826 a Fo(i)323
+1828 y Fu(will)f(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f(and)h
+(restore)f(the)g(original)h(line.)21 b(When)14 b(the)f(searc)o(h)75
+1883 y(is)k(terminated,)g(the)f(history)h(en)o(try)f(con)o(taining)h
+(the)g(searc)o(h)f(string)h(b)q(ecomes)g(the)f(curren)o(t)h(line.)25
+b(T)l(o)75 1938 y(\014nd)18 b(other)f(matc)o(hing)h(en)o(tries)g(in)g
+(the)g(history)f(list,)i(t)o(yp)q(e)1125 1936 y Fo(h)p
+1137 1910 52 2 v 1137 1938 a Fn(C-s)p 1137 1946 V 1186
+1936 a Fo(i)1219 1938 y Fu(or)1277 1936 y Fo(h)p 1289
+1910 51 2 v 1289 1938 a Fn(C-r)p 1289 1946 V 1338 1936
+a Fo(i)1370 1938 y Fu(as)e(appropriate.)27 b(This)18
+b(will)75 1993 y(searc)o(h)h(bac)o(kw)o(ard)f(or)h(forw)o(ard)e(in)j
+(the)f(history)h(for)e(the)h(next)g(en)o(try)g(matc)o(hing)g(the)g
+(searc)o(h)g(string)75 2048 y(t)o(yp)q(ed)g(so)g(far.)30
+b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)
+i(command)d(will)j(terminate)e(the)75 2102 y(searc)o(h)h(and)h(execute)
+g(that)f(command.)35 b(F)l(or)20 b(instance,)i(a)1151
+2100 y Fo(h)p 1163 2074 76 2 v 1163 2102 a Fn(RET)p 1163
+2110 V 1236 2100 a Fo(i)1271 2102 y Fu(will)g(terminate)f(the)f(searc)o
+(h)h(and)75 2157 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i
+(the)e(command)g(from)g(the)g(history)g(list.)137 2225
+y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)f(en)o(tire)h(searc)
+o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o(h)i(for)75
+2280 y(matc)o(hing)d(history)h(lines.)39 b(The)22 b(searc)o(h)f(string)
+g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f(user)h(or)e(b)q(e)i
+(part)f(of)g(the)75 2334 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f
+(line.)75 2464 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137
+2560 y Fu(Although)18 b(the)g(Readline)i(library)e(comes)g(with)f(a)h
+(set)f(of)g Ft(emacs)p Fu(-lik)o(e)h(k)o(eybindings)i(installed)f(b)o
+(y)75 2615 y(default,)13 b(it)g(is)g(p)q(ossible)h(to)e(use)g(a)g
+(di\013eren)o(t)h(set)f(of)g(k)o(eybindings.)21 b(An)o(y)12
+b(user)h(can)f(customize)h(programs)75 2670 y(that)g(use)i(Readline)h
+(b)o(y)e(putting)g(commands)g(in)h(an)f Fm(inputrc)j
+Fu(\014le)e(in)g(his)g(home)f(directory)l(.)20 b(The)14
+b(name)p eop
+%%Page: 4 6
+4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75
+183 y(of)e(this)h(\014le)h(is)f(tak)o(en)f(from)g(the)g(v)m(alue)i(of)e
+(the)h(en)o(vironmen)o(t)g(v)m(ariable)h Ft(INPUTRC)p
+Fu(.)j(If)c(that)e(v)m(ariable)j(is)75 238 y(unset,)e(the)g(default)h
+(is)g(`)p Ft(~/.inputrc)p Fu('.)137 310 y(When)f(a)g(program)f(whic)o
+(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i(the)g(init)h
+(\014le)g(is)f(read,)g(and)g(the)75 364 y(k)o(ey)g(bindings)i(are)e
+(set.)137 436 y(In)f(addition,)h(the)e Ft(C-x)i(C-r)e
+Fu(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us)e(incorp)q
+(orating)h(an)o(y)f(c)o(hanges)75 491 y(that)h(y)o(ou)h(migh)o(t)g(ha)o
+(v)o(e)g(made)g(to)g(it.)75 612 y Fl(1.3.1)30 b(Readline)20
+b(Init)g(File)h(Syn)n(tax)137 712 y Fu(There)c(are)g(only)g(a)g(few)f
+(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g(Readline)i(init)f
+(\014le.)26 b(Blank)18 b(lines)g(are)75 767 y(ignored.)36
+b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p Ft(#)p Fu(')e(are)h(commen)o
+(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e(a)f(`)p Ft($)p
+Fu(')f(indicate)75 822 y(conditional)c(constructs)f(\(see)g(Section)g
+(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h(8\).)k(Other)c
+(lines)75 877 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f
+(bindings.)75 963 y(V)l(ariable)h(Settings)315 1018 y(Y)l(ou)k(can)h
+(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)k(b)o(y)d
+(altering)h(the)f(v)m(alues)h(of)315 1073 y(v)m(ariables)13
+b(in)g(Readline)i(using)d(the)g Ft(set)g Fu(command)g(within)h(the)f
+(init)h(\014le.)20 b(Here)13 b(is)f(ho)o(w)g(to)315 1127
+y(c)o(hange)e(from)g(the)g(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i
+(to)e(use)g Ft(vi)g Fu(line)i(editing)g(commands:)435
+1194 y Ft(set)23 b(editing-mode)g(vi)315 1263 y Fu(A)15
+b(great)g(deal)g(of)g(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g
+(with)f(the)h(follo)o(wing)f(v)m(ariables.)315 1347 y
+Ft(bell-style)555 1402 y Fu(Con)o(trols)21 b(what)h(happ)q(ens)h(when)f
+(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f(termi-)555
+1457 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p Ft(none)p
+Fu(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32
+b(If)19 b(set)g(to)555 1512 y(`)p Ft(visible)p Fu(',)c(Readline)j(uses)
+f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
+b(If)16 b(set)h(to)555 1567 y(`)p Ft(audible)p Fu(')g(\(the)h
+(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555
+1621 y(b)q(ell.)315 1705 y Ft(comment-begin)555 1760
+y Fu(The)c(string)f(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h
+(line)h(when)f(the)g Ft(insert-)555 1815 y(comment)f
+Fu(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g
+Ft("#")p Fu(.)315 1899 y Ft(completion-ignore-case)555
+1954 y Fu(If)e(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)j(p)q(erforms)d
+(\014lename)i(matc)o(hing)f(and)g(completion)555 2009
+y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k(The)15 b(default)h(v)m
+(alue)g(is)g(`)p Ft(off)p Fu('.)315 2093 y Ft(completion-query-items)
+555 2148 y Fu(The)d(n)o(um)o(b)q(er)h(of)e(p)q(ossible)j(completions)g
+(that)d(determines)i(when)g(the)f(user)555 2202 y(is)21
+b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i(see)g(the)g(list)h(of)e
+(p)q(ossibilitie)q(s.)40 b(If)21 b(the)555 2257 y(n)o(um)o(b)q(er)14
+b(of)f(p)q(ossible)i(completions)f(is)g(greater)f(than)g(this)h(v)m
+(alue,)h(Readline)555 2312 y(will)g(ask)e(the)g(user)h(whether)f(or)g
+(not)g(he)g(wishes)h(to)f(view)h(them;)f(otherwise,)555
+2367 y(they)i(are)g(simply)i(listed.)k(The)15 b(default)h(limit)h(is)e
+Ft(100)p Fu(.)315 2451 y Ft(convert-meta)555 2506 y Fu(If)c(set)g(to)g
+(`)p Ft(on)p Fu(',)f(Readline)j(will)g(con)o(v)o(ert)d(c)o(haracters)h
+(with)g(the)g(eigh)o(th)h(bit)f(set)555 2560 y(to)i(an)h(ASCI)q(I)h(k)o
+(ey)e(sequence)i(b)o(y)f(stripping)g(the)g(eigh)o(th)g(bit)g(and)g
+(prep)q(end-)555 2615 y(ing)j(an)695 2613 y Fo(h)p 708
+2587 70 2 v 708 2615 a Fn(ESC)p 708 2623 V 775 2613 a
+Fo(i)805 2615 y Fu(c)o(haracter,)f(con)o(v)o(erting)f(them)h(to)g(a)f
+(meta-pre\014xed)i(k)o(ey)f(se-)555 2670 y(quence.)21
+b(The)15 b(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)p
+eop
+%%Page: 5 7
+5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(5)315 183 y Ft(disable-completion)555 238 y Fu(If)19
+b(set)f(to)f(`)p Ft(On)p Fu(',)h(Readline)j(will)f(inhibit)g(w)o(ord)e
+(completion.)30 b(Completion)555 293 y(c)o(haracters)12
+b(will)j(b)q(e)f(inserted)g(in)o(to)f(the)g(line)h(as)f(if)h(they)f
+(had)g(b)q(een)h(mapp)q(ed)555 348 y(to)h Ft(self-insert)p
+Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 432
+y Ft(editing-mode)555 487 y Fu(The)f Ft(editing-mode)d
+Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g
+(bind-)555 542 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g
+(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 597
+y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g(similar)i(to)d(Emacs.)
+20 b(This)15 b(v)m(ariable)h(can)555 652 y(b)q(e)g(set)f(to)f(either)i
+(`)p Ft(emacs)p Fu(')e(or)h(`)p Ft(vi)p Fu('.)315 736
+y Ft(enable-keypad)555 791 y Fu(When)d(set)f(to)h(`)p
+Ft(on)p Fu(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f
+(application)h(k)o(eypad)555 846 y(when)h(it)f(is)h(called.)21
+b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g(arro)o(w)e(k)o
+(eys.)555 901 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315
+986 y Ft(expand-tilde)555 1040 y Fu(If)e(set)g(to)f(`)p
+Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g
+(Readline)i(attempts)555 1095 y(w)o(ord)f(completion.)21
+b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 1180
+y Ft(horizontal-scroll-mode)555 1235 y Fu(This)k(v)m(ariable)g(can)f(b)
+q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p
+Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p
+Fu(')555 1290 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q
+(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555
+1344 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h
+(than)g(the)g(width)g(of)g(the)555 1399 y(screen,)e(instead)f(of)g
+(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13
+b(default,)h(this)555 1454 y(v)m(ariable)j(is)e(set)g(to)g(`)p
+Ft(off)p Fu('.)315 1539 y Ft(input-meta)555 1594 y Fu(If)h(set)g(to)f
+(`)p Ft(on)p Fu(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h
+(\(it)f(will)h(not)f(strip)555 1648 y(the)f(eigh)o(th)g(bit)h(from)e
+(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555
+1703 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34
+b(The)20 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33
+b(The)555 1758 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)
+f(this)i(v)m(ariable.)315 1843 y Ft(isearch-terminators)555
+1898 y Fu(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i
+(terminate)f(an)g(incremen)o(tal)555 1952 y(searc)o(h)e(without)h
+(subsequen)o(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(com-)555
+2007 y(mand)19 b(\(see)f(Section)i(1.2.5)d([Searc)o(hing],)i(page)f
+(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has)555 2062
+y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o(haracters)
+1312 2060 y Fo(h)p 1324 2034 70 2 v 1324 2062 a Fn(ESC)p
+1324 2070 V 1391 2060 a Fo(i)1419 2062 y Fu(and)1505
+2060 y Fo(h)p 1518 2034 56 2 v 1518 2062 a Fn(C-J)p 1518
+2070 V 1571 2060 a Fo(i)1599 2062 y Fu(will)i(terminate)555
+2117 y(an)g(incremen)o(tal)h(searc)o(h.)315 2202 y Ft(keymap)114
+b Fu(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f
+(for)g(k)o(ey)g(binding)j(com-)555 2256 y(mands.)41 b(Acceptable)23
+b Ft(keymap)f Fu(names)g(are)f Ft(emacs)p Fu(,)i Ft(emacs-standard)p
+Fu(,)555 2311 y Ft(emacs-meta)p Fu(,)15 b Ft(emacs-ctlx)p
+Fu(,)h Ft(vi)p Fu(,)g Ft(vi-command)p Fu(,)g(and)h Ft(vi-insert)p
+Fu(.)23 b Ft(vi)16 b Fu(is)555 2366 y(equiv)m(alen)o(t)e(to)f
+Ft(vi-command)p Fu(;)e Ft(emacs)h Fu(is)i(equiv)m(alen)o(t)g(to)e
+Ft(emacs-standard)p Fu(.)555 2421 y(The)f(default)h(v)m(alue)g(is)f
+Ft(emacs)p Fu(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Ft(editing-mode)f
+Fu(v)m(ariable)555 2476 y(also)15 b(a\013ects)g(the)g(default)h(k)o
+(eymap.)315 2560 y Ft(mark-directories)555 2615 y Fu(If)j(set)g(to)g(`)
+p Ft(on)p Fu(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h
+(slash)h(app)q(ended.)555 2670 y(The)15 b(default)h(is)g(`)p
+Ft(on)p Fu('.)p eop
+%%Page: 6 8
+6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)i(Library)315
+183 y Ft(mark-modified-lines)555 238 y Fu(This)i(v)m(ariable,)g(when)g
+(set)e(to)h(`)p Ft(on)p Fu(',)f(causes)h(Readline)i(to)d(displa)o(y)i
+(an)f(as-)555 293 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g
+(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q
+(di\014ed.)555 348 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p
+Fu(')e(b)o(y)h(default.)315 425 y Ft(output-meta)555
+480 y Fu(If)j(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)j(will)g(displa)o
+(y)f(c)o(haracters)d(with)j(the)e(eigh)o(th)h(bit)555
+535 y(set)g(directly)i(rather)d(than)h(as)g(a)g(meta-pre\014xed)h
+(escap)q(e)g(sequence.)30 b(The)555 590 y(default)16
+b(is)f(`)p Ft(off)p Fu('.)315 667 y Ft(print-completions-horizont)o
+(ally)555 722 y Fu(If)d(set)g(to)f(`)p Ft(on)p Fu(',)h(Readline)i(will)
+f(displa)o(y)h(completions)f(with)f(matc)o(hes)f(sorted)555
+777 y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e
+(than)g(do)o(wn)h(the)g(screen.)555 832 y(The)15 b(default)h(is)g(`)p
+Ft(off)p Fu('.)315 909 y Ft(show-all-if-ambiguous)555
+964 y Fu(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h
+(completion)h(functions.)21 b(If)15 b(set)555 1019 y(to)e(`)p
+Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h
+(p)q(ossible)i(completion)f(cause)555 1074 y(the)20 b(matc)o(hes)f(to)f
+(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q
+(ell.)555 1128 y(The)c(default)h(v)m(alue)h(is)e(`)p
+Ft(off)p Fu('.)315 1206 y Ft(visible-stats)555 1261 y
+Fu(If)h(set)g(to)f(`)p Ft(on)p Fu(',)g(a)h(c)o(haracter)f(denoting)h(a)
+g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555
+1316 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c
+(default)g(is)f(`)p Ft(off)p Fu('.)75 1393 y(Key)h(Bindings)315
+1448 y(The)e(syn)o(tax)f(for)g(con)o(trolling)i(k)o(ey)f(bindings)i(in)
+e(the)g(init)h(\014le)g(is)f(simple.)21 b(First)14 b(y)o(ou)f(ha)o(v)o
+(e)315 1503 y(to)19 b(kno)o(w)f(the)i(name)f(of)g(the)g(command)g(that)
+f(y)o(ou)h(w)o(an)o(t)f(to)h(c)o(hange.)32 b(The)19 b(follo)o(wing)315
+1558 y(sections)f(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g
+(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
+1612 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
+(es.)315 1679 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f(of)g(the)h
+(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey)315
+1733 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g(colon,)h
+(and)g(then)f(the)h(name)f(of)h(the)f(command)315 1788
+y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34 b(The)19
+b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g(di\013eren)
+o(t)315 1843 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o(h)h(is)g
+(most)e(comfortable)h(for)g(y)o(ou.)315 1921 y Fm(k)o(eyname)s
+Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555 1976 y(k)o(eyname)i
+Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out)d(in)h
+(English.)21 b(F)l(or)13 b(example:)675 2039 y Ft(Control-u:)22
+b(universal-argument)675 2091 y(Meta-Rubout:)g(backward-kill-word)675
+2143 y(Control-o:)g(">)i(output")555 2209 y Fu(In)19
+b(the)f(ab)q(o)o(v)o(e)g(example,)1023 2207 y Fo(h)p
+1035 2181 57 2 v 1035 2209 a Fn(C-u)p 1035 2216 V 1090
+2207 a Fo(i)1123 2209 y Fu(is)h(b)q(ound)g(to)f(the)g(function)h
+Ft(universal-)555 2264 y(argument)p Fu(,)g(and)872 2262
+y Fo(h)p 884 2236 55 2 v 884 2264 a Fn(C-o)p 884 2271
+V 937 2262 a Fo(i)971 2264 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)
+g(expressed)h(on)g(the)555 2318 y(righ)o(t)13 b(hand)h(side)h(\(that)e
+(is,)h(to)f(insert)h(the)g(text)f(`)p Ft(>)h(output)p
+Fu(')f(in)o(to)g(the)h(line\).)315 2396 y Ft(")p Fm(k)o(eyseq)q
+Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555
+2451 y(k)o(eyseq)i Fu(di\013ers)e(from)g Fm(k)o(eyname)j
+Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555
+2506 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q(eci\014ed,)i(b)o
+(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 2560
+y(double)c(quotes.)19 b(Some)13 b(GNU)g(Emacs)f(st)o(yle)h(k)o(ey)g
+(escap)q(es)g(can)g(b)q(e)h(used,)f(as)555 2615 y(in)18
+b(the)f(follo)o(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o
+(haracter)d(names)h(are)f(not)555 2670 y(recognized.)p
+eop
+%%Page: 7 9
+7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(7)675 183 y Ft("\\C-u":)23 b(universal-argument)675
+235 y("\\C-x\\C-r":)f(re-read-init-file)675 287 y("\\e[11~":)h
+("Function)f(Key)i(1")555 358 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g
+(example,)1023 356 y Fo(h)p 1035 330 57 2 v 1035 358
+a Fn(C-u)p 1035 365 V 1090 356 a Fo(i)1123 358 y Fu(is)h(b)q(ound)g(to)
+f(the)g(function)h Ft(universal-)555 412 y(argument)9
+b Fu(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`)
+1463 410 y Fo(h)p 1475 384 56 2 v 1475 412 a Fn(C-x)p
+1475 420 V 1529 410 a Fo(i)k(h)p 1571 384 51 2 v 1571
+412 a Fn(C-r)p 1571 420 V 1620 410 a Fo(i)1635 412 y
+Fu(')10 b(is)h(b)q(ound)h(to)555 467 y(the)k(function)i
+Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 465 y Fo(h)p
+1363 439 70 2 v 1363 467 a Fn(ESC)p 1363 475 V 1430 465
+a Fo(i)f(h)p 1472 439 10 2 v 1472 467 a Fn([)p 1472 475
+V 1480 465 a Fo(i)g(h)p 1522 439 18 2 v 1522 467 a Fn(1)p
+1522 475 V 1538 465 a Fo(i)g(h)p 1580 439 V 1580 467
+a Fn(1)p 1580 475 V 1595 465 a Fo(i)g(h)p 1637 439 24
+2 v 1637 467 a Ft(~)p 1637 475 V 1659 465 a Fo(i)1674
+467 y Fu(')h(is)h(b)q(ound)555 522 y(to)e(insert)g(the)g(text)g(`)p
+Ft(Function)f(Key)h(1)p Fu('.)315 608 y(The)e(follo)o(wing)h(GNU)f
+(Emacs)f(st)o(yle)h(escap)q(e)h(sequences)g(are)f(a)o(v)m(ailable)i
+(when)e(sp)q(ecifying)315 663 y(k)o(ey)i(sequences:)315
+749 y Fk(\\C-)168 b Fu(con)o(trol)15 b(pre\014x)315 835
+y Fk(\\M-)168 b Fu(meta)15 b(pre\014x)315 922 y Fk(\\e)192
+b Fu(an)15 b(escap)q(e)h(c)o(haracter)315 1008 y Fk(\\\\)192
+b Fu(bac)o(kslash)315 1094 y Fk(\\)p Ft(")555 1092 y
+Fo(h)p 567 1066 V 567 1094 a Ft(")p 567 1102 V 589 1092
+a Fo(i)315 1180 y Fk(\\')555 1178 y Fo(h)p 567 1152 10
+2 v 567 1180 a Fn(')p 567 1188 V 575 1178 a Fo(i)315
+1267 y Fu(In)13 b(addition)g(to)f(the)g(GNU)h(Emacs)f(st)o(yle)g(escap)
+q(e)h(sequences,)h(a)e(second)h(set)f(of)g(bac)o(kslash)315
+1321 y(escap)q(es)k(is)g(a)o(v)m(ailable:)315 1408 y
+Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 1494 y Ft(\\b)192
+b Fu(bac)o(kspace)315 1580 y Ft(\\d)g Fu(delete)315 1666
+y Ft(\\f)g Fu(form)14 b(feed)315 1752 y Ft(\\n)192 b
+Fu(newline)315 1839 y Ft(\\r)g Fu(carriage)15 b(return)315
+1925 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 2011
+y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 2097 y Ft(\\)p
+Fm(nnn)141 b Fu(the)12 b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)g
+(is)f(the)g(o)q(ctal)g(v)m(alue)h Fm(nnn)g Fu(\(one)f(to)f(three)555
+2152 y(digits\))315 2238 y Ft(\\x)p Fm(nnn)117 b Fu(the)14
+b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)f(is)g(the)g(hexadecimal)i
+(v)m(alue)f Fm(nnn)f Fu(\(one)555 2293 y(to)h(three)g(digits\))315
+2379 y(When)k(en)o(tering)g(the)g(text)f(of)g(a)h(macro,)f(single)i(or)
+e(double)i(quotes)f(m)o(ust)f(b)q(e)h(used)h(to)315 2434
+y(indicate)12 b(a)f(macro)f(de\014nition.)20 b(Unquoted)11
+b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i(name.)18
+b(In)315 2489 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o(kslash)g
+(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.)20
+b(Bac)o(kslash)315 2544 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter)
+f(in)i(the)f(macro)f(text,)h(including)j(`)p Ft(")p Fu(')c(and)h(`)p
+Ft(')p Fu('.)34 b(F)l(or)315 2599 y(example,)14 b(the)f(follo)o(wing)g
+(binding)i(will)g(mak)o(e)d(`)p Ft(C-x)i(\\)p Fu(')f(insert)g(a)g
+(single)h(`)p Ft(\\)p Fu(')e(in)o(to)h(the)g(line:)435
+2666 y Ft("\\C-x\\\\":)23 b("\\\\")p eop
+%%Page: 8 10
+8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)75
+183 y Fl(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137
+280 y Fu(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g
+(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75
+334 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g
+(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f
+(as)75 389 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g
+(directiv)o(es)h(used.)75 469 y Ft($if)168 b Fu(The)16
+b Ft($if)f Fu(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g
+(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 524
+y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e
+(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 578
+y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f
+(are)h(required)i(to)d(isolate)i(it.)315 658 y Ft(mode)144
+b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h Ft($if)f
+Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555
+713 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20
+b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
+768 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f
+(set)h(bindings)h(in)g(the)f Ft(emacs-)555 823 y(standard)d
+Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)h(is)f
+(starting)f(out)555 877 y(in)k Ft(emacs)f Fu(mo)q(de.)315
+957 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h
+(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
+1012 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
+(output)e(b)o(y)g(the)g(terminal's)555 1067 y(function)13
+b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
+(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 1121
+y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
+(ortion)h(of)e(the)h(terminal)555 1176 y(name)i(b)q(efore)g(the)g
+(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g
+Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555
+1231 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 1311 y
+Ft(application)555 1365 y Fu(The)d Fm(application)i Fu(construct)e(is)g
+(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555
+1420 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j
+(library)e(sets)f(the)g Fm(application)555 1475 y(name)p
+Fu(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18
+b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555
+1530 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i
+(program.)j(F)l(or)12 b(instance,)h(the)555 1585 y(follo)o(wing)i
+(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren)
+o(t)e(or)555 1639 y(previous)j(w)o(ord)e(in)i(Bash:)675
+1704 y Ft($if)23 b(Bash)675 1756 y(#)h(Quote)f(the)g(current)g(or)h
+(previous)f(word)675 1808 y("\\C-xq":)g("\\eb\\"\\ef\\"")675
+1859 y($endif)75 1939 y($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h
+(in)g(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f
+Fu(command.)75 2019 y Ft($else)120 b Fu(Commands)15 b(in)h(this)f
+(branc)o(h)h(of)e(the)i Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)
+g(the)f(test)g(fails.)75 2099 y Ft($include)48 b Fu(This)14
+b(directiv)o(e)i(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f
+(argumen)o(t)g(and)h(reads)g(commands)g(and)315 2153
+y(bindings)j(from)e(that)f(\014le.)435 2218 y Ft($include)23
+b(/etc/inputrc)75 2330 y Fl(1.3.3)30 b(Sample)20 b(Init)h(File)137
+2426 y Fu(Here)16 b(is)g(an)f(example)h(of)f(an)h(inputrc)g(\014le.)22
+b(This)16 b(illustrates)g(k)o(ey)g(binding,)h(v)m(ariable)f(assignmen)o
+(t,)75 2481 y(and)f(conditional)i(syn)o(tax.)p eop
+%%Page: 9 11
+9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(9)195 235 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i
+(line)f(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f
+(the)h(Gnu)f(Readline)g(library.)47 b(Existing)22 b(programs)195
+339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391
+y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h
+(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h
+(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g
+(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195
+650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195
+806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)
+195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195
+1169 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the)
+f(function)g(name)g(is)h(ignored)p 1986 1179 21 38 v
+195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195
+1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195
+1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g
+(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195
+1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195
+1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195
+1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g
+(previous-history)195 1947 y("\\M-[B":)g(next-history)195
+1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode)
+195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195
+2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g
+(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195
+2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode)
+195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195
+2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g
+(previous-history)p eop
+%%Page: 10 12
+10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)i(Library)195
+183 y Ft(#"\\M-\\C-[B":)165 b(next-history)195 287 y(C-q:)23
+b(quoted-insert)195 391 y($endif)195 495 y(#)h(An)f(old-style)g
+(binding.)47 b(This)23 b(happens)g(to)g(be)h(the)f(default.)195
+546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are)h(convenient)e
+(for)h(shell)h(interaction)195 702 y($if)f(Bash)195 754
+y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g
+("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g
+(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g
+(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g
+(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013
+y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i
+(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195
+1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195
+1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f
+(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195
+1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g
+(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f
+("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195
+1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195
+1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g
+(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740
+y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters)
+h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195
+1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off)
+195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h
+(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f
+(characters)195 2155 y(set)h(output-meta)g(on)195 2259
+y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f
+(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g
+(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e
+(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195
+2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p
+eop
+%%Page: 11 13
+11 12 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(11)195 183 y Ft("\\M-.":)23 b(yank-last-arg)195 235
+y($endif)75 369 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137
+467 y Fu(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that)
+g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)75
+583 y Fl(1.4.1)30 b(Commands)21 b(F)-5 b(or)19 b(Mo)n(ving)75
+695 y Ft(beginning-of-line)13 b(\(C-a\))315 749 y Fu(Mo)o(v)o(e)h(to)h
+(the)g(start)f(of)h(the)g(curren)o(t)g(line.)75 831 y
+Ft(end-of-line)f(\(C-e\))315 886 y Fu(Mo)o(v)o(e)g(to)h(the)g(end)h(of)
+f(the)g(line.)75 967 y Ft(forward-char)f(\(C-f\))315
+1022 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)75
+1104 y Ft(backward-char)e(\(C-b\))315 1159 y Fu(Mo)o(v)o(e)h(bac)o(k)h
+(a)g(c)o(haracter.)75 1240 y Ft(forward-word)f(\(M-f\))315
+1295 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(to)g(the)i(end)g(of)e(the)h(next)h
+(w)o(ord.)j(W)l(ords)c(are)f(comp)q(osed)i(of)f(letters)g(and)315
+1350 y(digits.)75 1431 y Ft(backward-word)e(\(M-b\))315
+1486 y Fu(Mo)o(v)o(e)i(bac)o(k)h(to)g(the)g(start)f(of)h(this,)g(or)g
+(the)g(previous,)h(w)o(ord.)22 b(W)l(ords)16 b(are)g(comp)q(osed)g(of)
+315 1541 y(letters)f(and)h(digits.)75 1623 y Ft(clear-screen)e(\(C-l\))
+315 1677 y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o
+(t)g(line,)i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315
+1732 y(of)i(the)g(screen.)75 1814 y Ft(redraw-current-line)e(\(\))315
+1869 y Fu(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15
+b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1985 y Fl(1.4.2)30
+b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75
+2096 y Ft(accept-line)14 b(\(Newline,)g(Return\))315
+2151 y Fu(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor)
+f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315
+2206 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o
+(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315
+2261 y(to)h(its)g(original)h(state.)75 2342 y Ft(previous-history)d
+(\(C-p\))315 2397 y Fu(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g
+(list.)75 2479 y Ft(next-history)f(\(C-n\))315 2534 y
+Fu(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)75
+2615 y Ft(beginning-of-history)d(\(M-<\))315 2670 y Fu(Mo)o(v)o(e)i(to)
+h(the)g(\014rst)g(line)i(in)f(the)f(history)l(.)p eop
+%%Page: 12 14
+12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Ft(end-of-history)c(\(M->\))315 238 y Fu(Mo)o(v)o(e)h(to)h(the)g
+(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i(curren)o
+(tly)f(b)q(eing)g(en)o(tered.)75 324 y Ft(reverse-search-history)c
+(\(C-r\))315 379 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)
+h(curren)o(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315
+433 y(tory)e(as)h(necessary)l(.)20 b(This)c(is)g(an)f(incremen)o(tal)h
+(searc)o(h.)75 519 y Ft(forward-search-history)c(\(C-s\))315
+574 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f(curren)o(t)h
+(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the)315
+629 y(history)g(as)g(necessary)l(.)20 b(This)c(is)g(an)f(incremen)o
+(tal)h(searc)o(h.)75 715 y Ft(non-incremental-reverse-se)o(arch-hi)o
+(story)c(\(M-p\))315 769 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h
+(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)
+h(his-)315 824 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o
+(tal)j(searc)o(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315
+879 y(user.)75 965 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12
+b(\(M-n\))315 1019 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f
+(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the)
+315 1074 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i
+(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315
+1129 y(user.)75 1215 y Ft(history-search-forward)f(\(\))315
+1270 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f
+(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315
+1324 y(start)15 b(of)h(the)h(curren)o(t)f(line)i(and)e(the)h(curren)o
+(t)f(cursor)g(p)q(osition)i(\(the)e Fm(p)q(oin)o(t)q
+Fu(\).)23 b(This)17 b(is)g(a)315 1379 y(non-incremen)o(tal)g(searc)o
+(h.)i(By)d(default,)f(this)h(command)f(is)h(un)o(b)q(ound.)75
+1465 y Ft(history-search-backward)c(\(\))315 1520 y Fu(Searc)o(h)18
+b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f
+(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1575 y(start)e(of)h(the)h
+(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18
+b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315
+1629 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75
+1715 y Ft(yank-nth-arg)e(\(M-C-y\))315 1770 y Fu(Insert)f(the)g
+(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h
+(the)f(second)h(w)o(ord)e(on)315 1825 y(the)i(previous)i(line\).)21
+b(With)14 b(an)h(argumen)o(t)e Fm(n)p Fu(,)i(insert)f(the)h
+Fm(n)p Fu(th)f(w)o(ord)g(from)g(the)g(previous)315 1879
+y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q
+(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315
+1934 y(argumen)o(t)g(inserts)i(the)f Fm(n)p Fu(th)h(w)o(ord)e(from)h
+(the)g(end)h(of)e(the)i(previous)g(command.)75 2020 y
+Ft(yank-last-arg)d(\(M-.,)i(M-_\))315 2075 y Fu(Insert)j(last)f
+(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f
+(of)g(the)g(previous)315 2130 y(history)e(en)o(try\).)20
+b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g
+Ft(yank-nth-arg)p Fu(.)j(Succes-)315 2184 y(siv)o(e)f(calls)g(to)f
+Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g
+(list,)i(inserting)f(the)315 2239 y(last)d(argumen)o(t)g(of)f(eac)o(h)i
+(line)g(in)g(turn.)75 2363 y Fl(1.4.3)30 b(Commands)21
+b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2481 y Ft(delete-char)14
+b(\(C-d\))315 2536 y Fu(Delete)j(the)f(c)o(haracter)g(under)h(the)f
+(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of)
+e(the)315 2591 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g
+(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not)
+315 2646 y(b)q(ound)g(to)f Ft(delete-char)p Fu(,)e(then)j(return)f
+Ft(EOF)p Fu(.)p eop
+%%Page: 13 15
+13 14 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(13)75 183 y Ft(backward-delete-char)12 b(\(Rubout\))315
+238 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
+(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315
+293 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
+374 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315
+429 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
+(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
+483 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
+(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
+538 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 619
+y Ft(quoted-insert)e(\(C-q,)i(C-v\))315 674 y Fu(Add)j(the)f(next)g(c)o
+(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
+b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 729
+y(sequences)f(lik)o(e)605 727 y Fo(h)p 617 701 56 2 v
+617 729 a Fn(C-q)p 617 737 V 671 727 a Fo(i)685 729 y
+Fu(,)f(for)g(example.)75 810 y Ft(tab-insert)f(\(M-TAB\))315
+865 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 946 y Ft(self-insert)f
+(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1001 y Fu(Insert)g(y)o(ourself.)
+75 1082 y Ft(transpose-chars)e(\(C-t\))315 1136 y Fu(Drag)i(the)h(c)o
+(haracter)f(b)q(efore)h(the)h(cursor)e(forw)o(ard)g(o)o(v)o(er)g(the)h
+(c)o(haracter)f(at)h(the)g(cursor,)315 1191 y(mo)o(ving)i(the)f(cursor)
+h(forw)o(ard)e(as)i(w)o(ell.)28 b(If)18 b(the)g(insertion)h(p)q(oin)o
+(t)f(is)g(at)f(the)h(end)h(of)e(the)315 1246 y(line,)c(then)e(this)h
+(transp)q(oses)e(the)h(last)g(t)o(w)o(o)f(c)o(haracters)g(of)h(the)g
+(line.)20 b(Negativ)o(e)11 b(argumen)o(ts)315 1301 y(don't)k(w)o(ork.)
+75 1382 y Ft(transpose-words)e(\(M-t\))315 1437 y Fu(Drag)j(the)h(w)o
+(ord)f(b)q(ehind)k(the)d(cursor)f(past)h(the)g(w)o(ord)g(in)g(fron)o(t)
+g(of)f(the)h(cursor)g(mo)o(ving)315 1491 y(the)e(cursor)g(o)o(v)o(er)g
+(that)f(w)o(ord)g(as)h(w)o(ell.)75 1572 y Ft(upcase-word)f(\(M-u\))315
+1627 y Fu(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
+(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315
+1682 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f
+(the)i(cursor.)75 1763 y Ft(downcase-word)d(\(M-l\))315
+1818 y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h
+(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o
+(ercase)315 1873 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o
+(v)o(e)f(the)h(cursor.)75 1954 y Ft(capitalize-word)e(\(M-c\))315
+2008 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
+(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
+2063 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2178 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5
+b(anking)75 2289 y Ft(kill-line)14 b(\(C-k\))315 2344
+y Fu(Kill)j(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q
+(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 2425
+y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 2479 y
+Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g(line.)
+75 2560 y Ft(unix-line-discard)e(\(C-u\))315 2615 y Fu(Kill)18
+b(bac)o(kw)o(ard)d(from)g(the)h(cursor)g(to)f(the)h(b)q(eginning)i(of)e
+(the)g(curren)o(t)g(line.)24 b(The)16 b(killed)315 2670
+y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h(kill-ring.)p eop
+%%Page: 14 16
+14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Ft(kill-whole-line)c(\(\))315 238 y Fu(Kill)h(all)e(c)o
+(haracters)f(on)g(the)g(curren)o(t)h(line,)h(no)f(matter)e(where)h(the)
+h(cursor)f(is.)19 b(By)12 b(default,)315 293 y(this)k(is)f(un)o(b)q
+(ound.)75 374 y Ft(kill-word)f(\(M-d\))315 429 y Fu(Kill)i(from)d(the)i
+(cursor)e(to)h(the)g(end)g(of)g(the)g(curren)o(t)g(w)o(ord,)f(or)h(if)g
+(b)q(et)o(w)o(een)g(w)o(ords,)g(to)f(the)315 483 y(end)j(of)f(the)g
+(next)g(w)o(ord.)k(W)l(ord)c(b)q(oundaries)i(are)e(the)g(same)g(as)g
+Ft(forward-word)p Fu(.)75 564 y Ft(backward-kill-word)e(\(M-DEL\))315
+619 y Fu(Kill)18 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor.)20
+b(W)l(ord)c(b)q(oundaries)g(are)f(the)h(same)f(as)g Ft(backward-)315
+674 y(word)p Fu(.)75 755 y Ft(unix-word-rubout)e(\(C-w\))315
+810 y Fu(Kill)20 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor,)h(using)g
+(white)g(space)g(as)f(a)g(w)o(ord)g(b)q(oundary)l(.)28
+b(The)315 865 y(killed)17 b(text)e(is)h(sa)o(v)o(ed)f(on)g(the)g
+(kill-ring.)75 946 y Ft(delete-horizontal-space)d(\(\))315
+1001 y Fu(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k
+(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1082
+y Ft(kill-region)e(\(\))315 1136 y Fu(Kill)h(the)e(text)f(b)q(et)o(w)o
+(een)h(the)g(p)q(oin)o(t)g(and)g(the)g Fm(mark)i Fu(\(sa)o(v)o(ed)d
+(cursor)g(p)q(osition\).)20 b(This)13 b(text)315 1191
+y(is)j(referred)f(to)g(as)f(the)i Fm(region)p Fu(.)k(By)15
+b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+1272 y Ft(copy-region-as-kill)d(\(\))315 1327 y Fu(Cop)o(y)j(the)i
+(text)e(in)i(the)f(region)g(to)g(the)g(kill)h(bu\013er,)f(so)g(it)g
+(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o(a)o(y)l(.)315
+1382 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75
+1463 y Ft(copy-backward-word)d(\(\))315 1518 y Fu(Cop)o(y)19
+b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i(kill)h
+(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315
+1572 y(same)c(as)g Ft(backward-word)p Fu(.)j(By)d(default,)g(this)h
+(command)f(is)h(un)o(b)q(ound.)75 1653 y Ft(copy-forward-word)d(\(\))
+315 1708 y Fu(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f
+(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e
+(the)315 1763 y(same)g(as)g Ft(forward-word)p Fu(.)j(By)d(default,)h
+(this)f(command)g(is)h(un)o(b)q(ound.)75 1844 y Ft(yank)f(\(C-y\))315
+1899 y Fu(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the)
+h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75
+1980 y Ft(yank-pop)f(\(M-y\))315 2035 y Fu(Rotate)j(the)g(kill-ring,)j
+(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f
+(this)h(if)f(the)h(prior)315 2089 y(command)d(is)h(y)o(ank)f(or)f(y)o
+(ank-p)q(op.)75 2204 y Fl(1.4.5)30 b(Sp)r(ecifying)20
+b(Numeric)h(Argumen)n(ts)75 2315 y Ft(digit-argument)13
+b(\(M-0,)i(M-1,)f(...)h(M--\))315 2370 y Fu(Add)f(this)g(digit)g(to)f
+(the)h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)
+h(argumen)o(t.)315 2423 y Fo(h)p 327 2397 50 2 v 327
+2425 a Fn(M{)p 327 2432 V 375 2423 a Fo(i)405 2425 y
+Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2506 y
+Ft(universal-argument)e(\(\))315 2560 y Fu(This)g(is)h(another)e(w)o(a)
+o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13
+b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315
+2615 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o
+(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315
+2670 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g
+(digits,)g(executing)g Ft(universal-argument)p eop
+%%Page: 15 17
+15 16 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(15)315 183 y(again)16 b(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)
+h(is)h(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315
+238 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f
+(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315
+293 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the)
+g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315
+348 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f
+(executing)i(this)f(function)h(the)e(\014rst)h(time)315
+402 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g
+(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315
+457 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f
+(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 565 y Fl(1.4.6)30
+b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5
+b(ou)75 671 y Ft(complete)14 b(\(TAB\))315 726 y Fu(A)o(ttempt)j(to)g
+(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27
+b(This)18 b(is)g(application-)315 781 y(sp)q(eci\014c.)k(Generally)l(,)
+15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y)
+o(ou)g(can)h(do)g(\014lename)315 835 y(completion;)h(if)g(y)o(ou)f(are)
+g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;)
+h(if)315 890 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e
+(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315
+945 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g
+(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315
+1000 y(so)g(on.)75 1077 y Ft(possible-completions)d(\(M-?\))315
+1131 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b)
+q(efore)h(the)f(cursor.)75 1208 y Ft(insert-completions)e(\(M-*\))315
+1263 y Fu(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p)
+q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315
+1318 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1395
+y Ft(menu-complete)e(\(\))315 1450 y Fu(Similar)g(to)f
+Ft(complete)p Fu(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i
+(completed)f(with)h(a)e(single)j(matc)o(h)315 1504 y(from)k(the)h(list)
+h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20
+b(execution)g(of)f Ft(menu-complete)315 1559 y Fu(steps)h(through)g
+(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f
+(matc)o(h)f(in)i(turn.)315 1614 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g
+(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i
+(text)d(is)315 1669 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g
+Fm(n)g Fu(mo)o(v)o(es)g Fm(n)g Fu(p)q(ositions)h(forw)o(ard)e(in)i(the)
+g(list)g(of)f(matc)o(hes;)315 1724 y(a)j(negativ)o(e)g(argumen)o(t)f
+(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g
+(the)h(list.)35 b(This)315 1778 y(command)15 b(is)h(in)o(tended)g(to)f
+(b)q(e)h(b)q(ound)g(to)f Ft(TAB)p Fu(,)f(but)h(is)h(un)o(b)q(ound)g(b)o
+(y)f(default.)75 1855 y Ft(delete-char-or-list)e(\(\))315
+1910 y Fu(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h
+(not)f(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315
+1965 y(\(lik)o(e)i Ft(delete-char)p Fu(\).)j(If)d(at)f(the)h(end)g(of)f
+(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d
+Ft(possible-)315 2020 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o
+(b)q(ound)g(b)o(y)f(default.)75 2127 y Fl(1.4.7)30 b(Keyb)r(oard)20
+b(Macros)75 2233 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315
+2288 y Fu(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o
+(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 2365
+y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 2420 y Fu(Stop)f(sa)o(ving)f(the)
+h(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q
+(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 2475 y(de\014nition.)75
+2552 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 2606
+y Fu(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i
+(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315
+2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o
+(eyb)q(oard.)p eop
+%%Page: 16 18
+16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Fl(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75
+298 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 353
+y Fu(Read)e(in)g(the)f(con)o(ten)o(ts)g(of)f(the)i(inputrc)g(\014le,)g
+(and)g(incorp)q(orate)f(an)o(y)g(bindings)i(or)e(v)m(ariable)315
+407 y(assignmen)o(ts)k(found)h(there.)75 491 y Ft(abort)e(\(C-g\))315
+546 y Fu(Ab)q(ort)f(the)g(curren)o(t)h(editing)g(command)f(and)h(ring)f
+(the)h(terminal's)f(b)q(ell)i(\(sub)s(ject)e(to)g(the)315
+600 y(setting)i(of)g Ft(bell-style)p Fu(\).)75 684 y
+Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p Fm(x)p
+Ft(,)h Fj(:)8 b(:)g(:)n Ft(\))315 739 y Fu(If)14 b(the)g(meta\014ed)g
+(c)o(haracter)f Fm(x)k Fu(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f
+(that)h(is)g(b)q(ound)h(to)e(the)315 794 y(corresp)q(onding)j(upp)q
+(ercase)g(c)o(haracter.)75 877 y Ft(prefix-meta)e(\(ESC\))315
+932 y Fu(Mak)o(e)j(the)i(next)f(c)o(haracter)f(t)o(yp)q(ed)i(b)q(e)g
+(meta\014ed.)28 b(This)19 b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)
+315 987 y(meta)d(k)o(ey)l(.)20 b(T)o(yping)15 b(`)p Ft(ESC)g(f)p
+Fu(')f(is)i(equiv)m(alen)o(t)h(to)d(t)o(yping)i(`)p Ft(M-f)p
+Fu('.)75 1070 y Ft(undo)f(\(C-_,)f(C-x)h(C-u\))315 1125
+y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q(ered)g(for)e
+(eac)o(h)h(line.)75 1209 y Ft(revert-line)f(\(M-r\))315
+1263 y Fu(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26
+b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Ft(undo)f
+Fu(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g
+(b)q(eginning.)75 1402 y Ft(tilde-expand)f(\(M-~\))315
+1456 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o
+(ord.)75 1540 y Ft(set-mark)f(\(C-@\))315 1595 y Fu(Set)g(the)f(mark)g
+(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g
+(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f
+(that)h(p)q(osition.)75 1733 y Ft(exchange-point-and-mark)d(\(C-x)j
+(C-x\))315 1788 y Fu(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k
+(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o
+(v)o(ed)315 1843 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q
+(osition)h(is)g(sa)o(v)o(ed)f(as)g(the)g(mark.)75 1926
+y Ft(character-search)e(\(C-]\))315 1981 y Fu(A)f(c)o(haracter)g(is)h
+(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q
+(ccurrence)g(of)f(that)g(c)o(haracter.)315 2036 y(A)j(negativ)o(e)h
+(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75
+2119 y Ft(character-search-backward)c(\(M-C-]\))315 2174
+y Fu(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v)
+o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315
+2229 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f
+(subsequen)o(t)i(o)q(ccurrences.)75 2312 y Ft(insert-comment)d(\(M-#\))
+315 2367 y Fu(The)19 b(v)m(alue)i(of)e(the)g Ft(comment-begin)e
+Fu(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315
+2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if)
+i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506
+y Ft(dump-functions)d(\(\))315 2560 y Fu(Prin)o(t)g(all)h(of)f(the)g
+(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)h
+(output)e(stream.)315 2615 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i
+(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o
+(y)f(that)315 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g
+Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o
+(y)f(default.)p eop
+%%Page: 17 19
+17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055
+b(17)75 183 y Ft(dump-variables)13 b(\(\))315 238 y Fu(Prin)o(t)e(all)g
+(of)f(the)h(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e
+(the)h(Readline)i(output)d(stream.)315 293 y(If)16 b(a)g(n)o(umeric)g
+(argumen)o(t)f(is)i(supplied,)h(the)e(output)f(is)i(formatted)d(in)j
+(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 348 y(it)g(can)h(b)q(e)g(made)f
+(part)f(of)h(an)g Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h
+(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Ft(dump-macros)f(\(\))315
+482 y Fu(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b)
+q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315
+537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i
+(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315
+592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h
+Fm(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o
+(y)315 647 y(default.)75 775 y Fs(1.5)33 b(Readline)23
+b(vi)h(Mo)r(de)137 871 y Fu(While)13 b(the)f(Readline)j(library)d(do)q
+(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Ft(vi)g
+Fu(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75
+926 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h(of)d(the)i(line.)
+27 b(The)17 b(Readline)i Ft(vi)e Fu(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g
+(sp)q(eci\014ed)i(in)75 981 y(the)c Fp(POSIX)h Fu(1003.2)d(standard.)
+137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o
+(w)o(een)f Ft(emacs)e Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f
+(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21
+b(The)15 b(Readline)j(default)d(is)h Ft(emacs)f Fu(mo)q(de.)137
+1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Ft(vi)g
+Fu(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q
+(de,)g(as)g(if)g(y)o(ou)75 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p
+Ft(i)p Fu('.)18 b(Pressing)608 1223 y Fo(h)p 620 1197
+70 2 v 620 1225 a Fn(ESC)p 620 1233 V 687 1223 a Fo(i)715
+1225 y Fu(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i
+(where)f(y)o(ou)g(can)g(edit)h(the)75 1280 y(text)i(of)h(the)g(line)h
+(with)g(the)f(standard)f Ft(vi)h Fu(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o
+(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1335
+y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p
+Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop
+%%Page: 18 20
+18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)i(Library)p
+eop
+%%Page: 19 21
+19 20 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(19)75 183 y Fq(2)41 b(Programming)28
+b(with)e(GNU)i(Readline)137 305 y Fu(This)16 b(c)o(hapter)f(describ)q
+(es)i(the)f(in)o(terface)g(b)q(et)o(w)o(een)f(the)h(GNU)f(Readline)j
+(Library)e(and)f(other)g(pro-)75 360 y(grams.)38 b(If)22
+b(y)o(ou)f(are)g(a)g(programmer,)h(and)f(y)o(ou)g(wish)i(to)d(include)k
+(the)e(features)f(found)h(in)g(GNU)75 414 y(Readline)16
+b(suc)o(h)e(as)f(completion,)h(line)h(editing,)g(and)f(in)o(teractiv)o
+(e)g(history)f(manipulation)i(in)g(y)o(our)d(o)o(wn)75
+469 y(programs,)i(this)h(section)h(is)g(for)e(y)o(ou.)75
+602 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 700 y Fu(Man)o(y)15
+b(programs)f(pro)o(vide)i(a)f(command)g(line)i(in)o(terface,)e(suc)o(h)
+h(as)f Ft(mail)p Fu(,)f Ft(ftp)p Fu(,)h(and)g Ft(sh)p
+Fu(.)20 b(F)l(or)15 b(suc)o(h)75 754 y(programs,)e(the)h(default)h(b)q
+(eha)o(viour)g(of)f(Readline)j(is)d(su\016cien)o(t.)21
+b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75
+809 y(Readline)19 b(in)g(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p)
+q(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e
+Ft(gets\(\))g Fu(or)75 864 y Ft(fgets)e(\(\))p Fu(.)137
+933 y(The)j(function)h Ft(readline)c(\(\))j Fu(prin)o(ts)g(a)g(prompt)f
+(and)h(then)g(reads)g(and)g(returns)g(a)g(single)h(line)g(of)75
+988 y(text)12 b(from)f(the)i(user.)19 b(The)12 b(line)i
+Ft(readline)d Fu(returns)h(is)h(allo)q(cated)g(with)g
+Ft(malloc)h(\(\))p Fu(;)e(y)o(ou)g(should)i Ft(free)75
+1042 y(\(\))h Fu(the)g(line)i(when)f(y)o(ou)f(are)f(done)i(with)g(it.)k
+(The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)195
+1108 y Ft(char)23 b(*readline)g(\(char)g(*)p Fm(prompt)q
+Ft(\);)75 1177 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195
+1243 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)
+75 1312 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f
+(the)i(user.)19 b(The)11 b(line)j(returned)d(has)h(the)f(\014nal)h
+(newline)i(remo)o(v)o(ed,)75 1366 y(so)h(only)h(the)f(text)g(remains.)
+137 1435 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g
+Ft(EOF)g Fu(while)i(reading)f(the)f(line,)j(and)d(the)h(line)g(is)g
+(empt)o(y)f(at)g(that)75 1490 y(p)q(oin)o(t,)15 b(then)g
+Ft(\(char)f(*\)NULL)g Fu(is)h(returned.)21 b(Otherwise,)15
+b(the)g(line)h(is)f(ended)h(just)e(as)h(if)g(a)f(newline)j(had)75
+1545 y(b)q(een)f(t)o(yp)q(ed.)137 1614 y(If)d(y)o(ou)g(w)o(an)o(t)f
+(the)h(user)g(to)f(b)q(e)i(able)g(to)e(get)g(at)h(the)g(line)h(later,)f
+(\(with)1325 1612 y Fo(h)p 1338 1586 57 2 v 1338 1614
+a Fn(C-p)p 1338 1621 V 1392 1612 a Fo(i)1420 1614 y Fu(for)f
+(example\),)i(y)o(ou)f(m)o(ust)75 1668 y(call)j Ft(add_history)e(\(\))h
+Fu(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)f
+Fm(history)k Fu(list)d(of)e(suc)o(h)i(lines.)195 1734
+y Ft(add_history)22 b(\(line\);)75 1803 y Fu(F)l(or)15
+b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f
+(asso)q(ciated)g(man)o(ual.)137 1872 y(It)h(is)g(preferable)h(to)e(a)o
+(v)o(oid)g(sa)o(ving)h(empt)o(y)f(lines)i(on)f(the)g(history)f(list,)i
+(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1927 y(burning)h(need)g(to)
+e(reuse)h(a)g(blank)g(line.)22 b(Here)15 b(is)g(a)g(function)g(whic)o
+(h)h(usefully)h(replaces)e(the)g(standard)75 1981 y Ft(gets)g(\(\))f
+Fu(library)i(function,)g(and)g(has)f(the)g(adv)m(an)o(tage)f(of)h(no)g
+(static)g(bu\013er)h(to)e(o)o(v)o(er\015o)o(w:)195 2047
+y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/)
+195 2099 y(static)g(char)g(*line_read)g(=)h(\(char)f(*\)NULL;)195
+2203 y(/*)h(Read)f(a)h(string,)f(and)g(return)g(a)h(pointer)f(to)g(it.)
+48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)195 2255 y(char)f(*)195
+2307 y(rl_gets)g(\(\))195 2359 y({)243 2411 y(/*)g(If)h(the)f(buffer)g
+(has)h(already)f(been)g(allocated,)g(return)g(the)g(memory)314
+2462 y(to)h(the)f(free)h(pool.)f(*/)243 2514 y(if)g(\(line_read\))290
+2566 y({)338 2618 y(free)g(\(line_read\);)338 2670 y(line_read)g(=)h
+(\(char)f(*\)NULL;)p eop
+%%Page: 20 22
+20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)i(Library)290
+183 y Ft(})243 287 y(/*)23 b(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)
+243 339 y(line_read)f(=)i(readline)f(\(""\);)243 443
+y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f
+(the)h(history.)f(*/)243 495 y(if)g(\(line_read)g(&&)g(*line_read\))290
+546 y(add_history)g(\(line_read\);)243 650 y(return)g(\(line_read\);)
+195 702 y(})137 771 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h
+(the)g(default)h(b)q(eha)o(viour)g(of)1169 769 y Fo(h)p
+1181 742 74 2 v 1181 771 a Fn(T)m(AB)p 1181 778 V 1253
+769 a Fo(i)1280 771 y Fu(completion:)19 b(completion)13
+b(on)f(\014le)75 825 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t)
+f(Readline)k(to)c(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o
+(hange)h(the)f(binding)75 880 y(of)g(the)205 878 y Fo(h)p
+217 852 V 217 880 a Fn(T)m(AB)p 217 888 V 289 878 a Fo(i)319
+880 y Fu(k)o(ey)g(with)h Ft(rl_bind_key)d(\(\))p Fu(.)195
+946 y Ft(int)23 b(rl_bind_key)g(\(int)g Fm(k)o(ey)p Ft(,)h(int)f(\(*)p
+Fm(function)p Ft(\)\(\)\);)137 1014 y(rl_bind_key)14
+b(\(\))h Fu(tak)o(es)g(t)o(w)o(o)g(argumen)o(ts:)20 b
+Fm(k)o(ey)f Fu(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)g
+(to)g(bind,)i(and)75 1069 y Fm(function)i Fu(is)f(the)g(address)g(of)g
+(the)g(function)g(to)g(call)h(when)f Fm(k)o(ey)k Fu(is)c(pressed.)29
+b(Binding)1628 1067 y Fo(h)p 1641 1041 V 1641 1069 a
+Fn(T)m(AB)p 1641 1076 V 1712 1067 a Fo(i)1745 1069 y
+Fu(to)17 b Ft(rl_)75 1124 y(insert)d(\(\))i Fu(mak)o(es)433
+1122 y Fo(h)p 446 1096 V 446 1124 a Fn(T)m(AB)p 446 1131
+V 517 1122 a Fo(i)548 1124 y Fu(insert)g(itself.)22 b
+Ft(rl_bind_key)13 b(\(\))i Fu(returns)h(non-zero)g(if)g
+Fm(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1178 y(ASCI)q(I)h(c)o
+(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137
+1247 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1245
+y Fo(h)p 716 1219 V 716 1247 a Fn(T)m(AB)p 716 1254 V
+787 1245 a Fo(i)817 1247 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h
+(su\016ces:)195 1312 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137
+1381 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e
+(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a)
+g(func-)75 1435 y(tion)i(called)h Ft(initialize_readline)d(\(\))h
+Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g
+(initializations,)75 1490 y(suc)o(h)h(as)e(installing)k(custom)c
+(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h
+(32\).)75 1622 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137
+1719 y Fu(Readline)15 b(pro)o(vides)e(man)o(y)e(functions)i(for)f
+(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q
+(ossi-)75 1774 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h
+(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h
+(functions)g(and)75 1829 y(v)m(ariables)g(de\014ned)h(within)f(the)f
+(Readline)j(library)d(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h
+(add)g(customized)75 1884 y(functionalit)o(y)j(to)f(Readline.)75
+1998 y Fl(2.2.1)30 b(The)20 b(F)-5 b(unction)20 b(T)n(yp)r(e)137
+2095 y Fu(F)l(or)f(readabilt)o(y)l(,)h(w)o(e)f(declare)h(a)f(new)g(t)o
+(yp)q(e)g(of)g(ob)s(ject,)g(called)i Fm(F)l(unction)p
+Fu(.)32 b(A)19 b Ft(Function)f Fu(is)h(a)g(C)75 2150
+y(function)d(whic)o(h)g(returns)f(an)g Ft(int)p Fu(.)20
+b(The)15 b(t)o(yp)q(e)g(declaration)h(for)f Ft(Function)f
+Fu(is:)75 2218 y Ft(typedef)g(int)h(Function)f(\(\);)137
+2287 y Fu(The)21 b(reason)g(for)f(declaring)i(this)g(new)f(t)o(yp)q(e)g
+(is)g(to)g(mak)o(e)f(it)h(easier)g(to)g(write)g(co)q(de)g(describing)75
+2342 y(p)q(oin)o(ters)16 b(to)f(C)g(functions.)21 b(Let)16
+b(us)f(sa)o(y)g(w)o(e)g(had)h(a)f(v)m(ariable)i(called)g
+Fm(func)i Fu(whic)o(h)d(w)o(as)e(a)i(p)q(oin)o(ter)f(to)g(a)75
+2396 y(function.)21 b(Instead)15 b(of)g(the)g(classic)i(C)e
+(declaration)137 2465 y Ft(int)g(\(*\)\(\)func;)75 2533
+y Fu(w)o(e)g(ma)o(y)f(write)137 2602 y Ft(Function)g(*func;)75
+2670 y Fu(Similarly)l(,)j(there)e(are)p eop
+%%Page: 21 23
+21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(21)195 183 y Ft(typedef)23 b(void)g(VFunction)g(\(\);)
+195 235 y(typedef)g(char)g(*CPFunction)g(\(\);)g Fu(and)195
+287 y Ft(typedef)g(char)g(**CPPFunction)f(\(\);)75 353
+y Fu(for)17 b(functions)h(returning)g(no)f(v)m(alue,)h
+Ft(pointer)d(to)g(char)p Fu(,)h(and)i Ft(pointer)c(to)h(pointer)f(to)h
+(char)p Fu(,)i(re-)75 408 y(sp)q(ectiv)o(ely)l(.)75 517
+y Fl(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 b(unction)137
+612 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g(for)e
+(Readline,)j(y)o(ou)e(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o(v)o
+(en)o(tions)75 667 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h
+(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d
+(describ)q(e)k(the)d(curren)o(t)75 722 y(state)c(of)h(the)g(line)i
+(read)e(so)g(far.)137 788 y(The)h(calling)h(sequence)f(for)f(a)f
+(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 851 y Ft(foo)23
+b(\(int)h(count,)f(int)g(key\))75 917 y Fu(where)18 b
+Fm(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o(t)e(\(or)h(1)f(if)i
+(defaulted\))f(and)g Fm(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v)o
+(ok)o(ed)75 972 y(this)f(function.)137 1038 y(It)c(is)g(completely)h
+(up)f(to)f(the)g(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g
+(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 1093 y(Some)20
+b(functions)h(use)f(it)g(as)g(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g
+(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)75
+1148 y(b)q(eha)o(vior)i(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d
+(opp)q(osed)h(to)f(refreshing)i(the)e(screen,)j(for)d(example\).)75
+1203 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18
+b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o(umeric)h(argumen)o(t)
+d(as)i(a)f(rep)q(eat)75 1258 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h
+(to)e(do)h(something)h(useful)g(with)f(b)q(oth)g(negativ)o(e)g(and)g(p)
+q(ositiv)o(e)h(argumen)o(ts.)75 1312 y(A)o(t)g(the)g(v)o(ery)g(least,)g
+(it)g(should)h(b)q(e)g(a)o(w)o(are)e(that)h(it)g(can)g(b)q(e)h(passed)g
+(a)f(negativ)o(e)g(argumen)o(t.)75 1438 y Fs(2.3)33 b(Readline)23
+b(V)-6 b(ariables)137 1533 y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m
+(ailable)i(to)e(function)h(writers.)1661 1622 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 1622 18 3 v 21 w(line)p
+395 1622 V 23 w(bu\013er)195 1677 y Fu(This)c(is)f(the)h(line)h
+(gathered)e(so)f(far.)19 b(Y)l(ou)c(are)f(w)o(elcome)g(to)g(mo)q(dify)g
+(the)h(con)o(ten)o(ts)e(of)h(the)195 1732 y(line,)i(but)g(see)f
+(Section)h(2.4.5)e([Allo)o(wing)i(Undoing],)f(page)g(26.)1661
+1821 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1821
+V 21 w(p)r(oin)n(t)195 1876 y Fu(The)15 b(o\013set)g(of)f(the)i(curren)
+o(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d
+Fu(\(the)i Fm(p)q(oin)o(t)q Fu(\).)1661 1965 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 1965 V 21 w(end)195 2019 y
+Fu(The)e(n)o(um)o(b)q(er)g(of)f(c)o(haracters)g(presen)o(t)h(in)g
+Ft(rl_line_buffer)p Fu(.)26 b(When)18 b Ft(rl_point)e
+Fu(is)j(at)195 2074 y(the)c(end)h(of)f(the)g(line,)i
+Ft(rl_point)d Fu(and)h Ft(rl_end)f Fu(are)h(equal.)1661
+2163 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2163
+V 21 w(mark)195 2218 y Fu(The)14 b(mark)e(\(sa)o(v)o(ed)h(p)q
+(osition\))h(in)g(the)g(curren)o(t)f(line.)21 b(If)14
+b(set,)f(the)h(mark)e(and)i(p)q(oin)o(t)g(de\014ne)195
+2273 y(a)h Fm(region)p Fu(.)1661 2362 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 2362 V 21 w(done)195 2417 y
+Fu(Setting)j(this)g(to)f(a)h(non-zero)g(v)m(alue)h(causes)f(Readline)i
+(to)d(return)h(the)g(curren)o(t)f(line)195 2471 y(immediately)l(.)1661
+2560 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2560
+V 21 w(p)r(ending)p 436 2560 V 20 w(input)195 2615 y
+Fu(Setting)15 b(this)h(to)f(a)f(v)m(alue)j(mak)o(es)d(it)i(the)f(next)g
+(k)o(eystrok)o(e)f(read.)20 b(This)c(is)f(a)g(w)o(a)o(y)f(to)h(stu\013)
+195 2670 y(a)g(single)h(c)o(haracter)f(in)o(to)g(the)g(input)i(stream.)
+p eop
+%%Page: 22 24
+22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)i(Library)1661
+183 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 183
+18 3 v 21 w(erase)p 363 183 V 20 w(empt)n(y)p 540 183
+V 20 w(line)195 238 y Fu(Setting)13 b(this)h(to)e(a)h(non-zero)g(v)m
+(alue)h(causes)f(Readline)j(to)c(completely)i(erase)f(the)g(curren)o(t)
+195 293 y(line,)19 b(including)g(an)o(y)e(prompt,)f(an)o(y)h(time)g(a)f
+(newline)j(is)f(t)o(yp)q(ed)f(as)f(the)h(only)h(c)o(haracter)195
+348 y(on)13 b(an)f(otherwise-empt)o(y)h(line.)20 b(The)13
+b(cursor)g(is)g(mo)o(v)o(ed)f(to)g(the)g(b)q(eginning)j(of)d(the)h
+(newly-)195 402 y(blank)j(line.)1661 499 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 499 V 21 w(prompt)195
+554 y Fu(The)14 b(prompt)f(Readline)j(uses.)k(This)14
+b(is)g(set)g(from)f(the)g(argumen)o(t)g(to)g Ft(readline)h(\(\))p
+Fu(,)g(and)195 609 y(should)i(not)f(b)q(e)h(assigned)g(to)e(directly)l
+(.)1661 705 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p
+286 705 V 21 w(library)p 475 705 V 22 w(v)n(ersion)195
+760 y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g
+(of)f(the)g(library)l(.)1661 856 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 856 V 21 w(terminal)p
+518 856 V 21 w(name)195 911 y Fu(The)c(terminal)h(t)o(yp)q(e,)f(used)h
+(for)f(initialization.)1661 1008 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 1008 V 21 w(readline)p
+505 1008 V 22 w(name)195 1063 y Fu(This)d(v)m(ariable)h(is)f(set)f(to)g
+(a)g(unique)i(name)f(b)o(y)f(eac)o(h)g(application)j(using)e(Readline.)
+23 b(The)195 1117 y(v)m(alue)12 b(allo)o(ws)e(conditional)i(parsing)f
+(of)f(the)g(inputrc)h(\014le)h(\(see)e(Section)h(1.3.2)e([Conditional)
+195 1172 y(Init)16 b(Constructs],)e(page)h(8\).)1661
+1269 y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286
+1269 V 21 w(instream)195 1324 y Fu(The)c(stdio)h(stream)e(from)h(whic)o
+(h)h(Readline)h(reads)e(input.)1661 1420 y(V)l(ariable)-1749
+b Fi(FILE)20 b(*)f Fh(rl)p 286 1420 V 21 w(outstream)195
+1475 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q
+(erforms)e(output.)1661 1571 y(V)l(ariable)-1749 b Fi(Function)20
+b(*)g Fh(rl)p 391 1571 V 21 w(startup)p 595 1571 V 20
+w(ho)r(ok)195 1626 y Fu(If)15 b(non-zero,)f(this)h(is)g(the)f(address)h
+(of)e(a)h(function)i(to)d(call)j(just)e(b)q(efore)h Ft(readline)e
+Fu(prin)o(ts)195 1681 y(the)i(\014rst)g(prompt.)1661
+1778 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
+391 1778 V 21 w(pre)p 494 1778 V 20 w(input)p 647 1778
+V 21 w(ho)r(ok)195 1832 y Fu(If)d(non-zero,)h(this)f(is)h(the)f
+(address)g(of)g(a)g(function)h(to)e(call)i(after)f(the)g(\014rst)f
+(prompt)h(has)195 1887 y(b)q(een)f(prin)o(ted)g(and)g(just)f(b)q(efore)
+g Ft(readline)f Fu(starts)g(reading)i(input)g(c)o(haracters.)1661
+1984 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
+391 1984 V 21 w(ev)n(en)n(t)p 544 1984 V 22 w(ho)r(ok)195
+2039 y Fu(If)d(non-zero,)f(this)h(is)f(the)h(address)f(of)g(a)g
+(function)h(to)f(call)h(p)q(erio)q(dically)j(when)c(readline)195
+2093 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661
+2190 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
+391 2190 V 21 w(getc)p 514 2190 V 21 w(function)195 2245
+y Fu(If)13 b(non-zero,)g Ft(readline)e Fu(will)k(call)e(indirectly)i
+(through)d(this)h(p)q(oin)o(ter)g(to)f(get)g(a)h(c)o(haracter)195
+2299 y(from)i(the)i(input)g(stream.)22 b(By)16 b(default,)h(it)f(is)h
+(set)f(to)f Ft(rl_getc)p Fu(,)g(the)h(default)h Ft(readline)195
+2354 y Fu(c)o(haracter)d(input)j(function)f(\(see)f(Section)h(2.4.8)e
+([Utilit)o(y)h(F)l(unctions],)h(page)f(28\).)1661 2451
+y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417
+2451 V 21 w(redispla)n(y)p 661 2451 V 22 w(function)195
+2506 y Fu(If)g(non-zero,)h Ft(readline)d Fu(will)j(call)g(indirectly)h
+(through)d(this)h(p)q(oin)o(ter)h(to)e(up)q(date)h(the)195
+2560 y(displa)o(y)h(with)f(the)g(curren)o(t)g(con)o(ten)o(ts)g(of)f
+(the)h(editing)i(bu\013er.)34 b(By)20 b(default,)h(it)g(is)f(set)195
+2615 y(to)f Ft(rl_redisplay)p Fu(,)f(the)i(default)g
+Ft(readline)e Fu(redispla)o(y)j(function)f(\(see)f(Section)i(2.4.6)195
+2670 y([Redispla)o(y],)16 b(page)f(27\).)p eop
+%%Page: 23 25
+23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(23)1661 183 y(V)l(ariable)-1749 b Fi(Keymap)20
+b Fh(rl)p 293 183 18 3 v 21 w(executing)p 551 183 V 22
+w(k)n(eymap)195 238 y Fu(This)g(v)m(ariable)g(is)f(set)g(to)f(the)h(k)o
+(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g(23\))f(in)195
+293 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g(readline)h(function)f
+(w)o(as)f(found.)1661 392 y(V)l(ariable)-1749 b Fi(Keymap)20
+b Fh(rl)p 293 392 V 21 w(binding)p 501 392 V 22 w(k)n(eymap)195
+447 y Fu(This)g(v)m(ariable)g(is)f(set)g(to)f(the)h(k)o(eymap)g(\(see)g
+(Section)h(2.4.2)d([Keymaps],)i(page)g(23\))f(in)195
+501 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q(ccurred.)75
+639 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6
+b(unctions)75 787 y Fl(2.4.1)30 b(Naming)20 b(a)g(F)-5
+b(unction)137 886 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e
+(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)36
+b(This)20 b(is)75 941 y(done)f(b)o(y)f(represen)o(ting)h(the)g
+(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19
+b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 996 y(descriptiv)o(e)e
+(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14
+b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195
+1064 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 1134
+y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 1132
+y Fo(h)p 671 1106 209 2 v 671 1134 a Fn(Meta-Rub)q(out)p
+671 1142 V 878 1132 a Fo(i)912 1134 y Fu(to)f(the)h(function)g
+Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75
+1189 y(kill-word)p Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f
+(should)i(bind)f(the)g(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o
+(e)75 1244 y(names)e(as)g(w)o(ell.)21 b(Readline)c(pro)o(vides)f(a)f
+(function)h(for)e(doing)i(that:)1650 1343 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1343 18 3 v 21 w(add)p 328
+1343 V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g
+(*function,)g(int)h(key)p Fg(\))195 1398 y Fu(Add)i Fm(name)h
+Fu(to)e(the)g(list)h(of)e(named)i(functions.)23 b(Mak)o(e)15
+b Fm(function)i Fu(b)q(e)g(the)f(function)h(that)195
+1453 y(gets)e(called.)21 b(If)16 b Fm(k)o(ey)j Fu(is)c(not)g(-1,)g
+(then)g(bind)i(it)e(to)g Fm(function)h Fu(using)g Ft(rl_bind_key)d
+(\(\))p Fu(.)137 1552 y(Using)j(this)f(function)h(alone)g(is)f
+(su\016cien)o(t)h(for)f(most)f(applications.)21 b(It)15
+b(is)h(the)f(recommended)h(w)o(a)o(y)75 1606 y(to)d(add)h(a)f(few)g
+(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)j(has)d
+(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75
+1661 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e
+(Readline,)j(y)o(ou)e(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75
+1716 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 1835
+y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1935 y
+Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fm(k)o(eymap)p
+Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o
+(een)g(the)f(k)o(eys)75 1989 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
+(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o
+(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 2044 y(existing)i(k)o(eymaps,)
+f(and)g(tell)h(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1650
+2143 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
+2143 V 21 w(mak)n(e)p 445 2143 V 20 w(bare)p 575 2143
+V 20 w(k)n(eymap)j Fg(\(\))195 2198 y Fu(Returns)d(a)f(new,)i(empt)o(y)
+e(k)o(eymap.)32 b(The)20 b(space)g(for)e(the)i(k)o(eymap)f(is)h(allo)q
+(cated)h(with)195 2253 y Ft(malloc)14 b(\(\))p Fu(;)h(y)o(ou)g(should)h
+Ft(free)e(\(\))h Fu(it)h(when)g(y)o(ou)e(are)h(done.)1650
+2352 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
+2352 V 21 w(cop)n(y)p 428 2352 V 21 w(k)n(eymap)j Fg(\()p
+Ft(Keymap)14 b(map)p Fg(\))195 2407 y Fu(Return)i(a)f(new)g(k)o(eymap)g
+(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fm(map)p Fu(.)1650
+2506 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293
+2506 V 21 w(mak)n(e)p 445 2506 V 20 w(k)n(eymap)j Fg(\(\))195
+2560 y Fu(Return)15 b(a)f(new)h(k)o(eymap)f(with)h(the)g(prin)o(ting)h
+(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1443 2560 14 2
+v 17 w(insert,)g(the)h(lo)o(w-)195 2615 y(ercase)21 b(Meta)f(c)o
+(haracters)g(b)q(ound)i(to)f(run)g(their)g(equiv)m(alen)o(ts,)j(and)d
+(the)g(Meta)f(digits)195 2670 y(b)q(ound)c(to)f(pro)q(duce)h(n)o
+(umeric)g(argumen)o(ts.)p eop
+%%Page: 24 26
+24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)i(Library)1650
+183 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 183
+18 3 v 21 w(discard)p 441 183 V 21 w(k)n(eymap)i Fg(\()p
+Ft(Keymap)14 b(keymap)p Fg(\))195 238 y Fu(F)l(ree)h(the)h(storage)d
+(asso)q(ciated)j(with)f Fm(k)o(eymap)p Fu(.)137 330 y(Readline)25
+b(has)e(sev)o(eral)g(in)o(ternal)g(k)o(eymaps.)42 b(These)23
+b(functions)g(allo)o(w)g(y)o(ou)f(to)g(c)o(hange)h(whic)o(h)75
+384 y(k)o(eymap)15 b(is)h(activ)o(e.)1650 476 y(F)l(unction)-1749
+b Fi(Keymap)20 b Fh(rl)p 293 476 V 21 w(get)p 391 476
+V 21 w(k)n(eymap)i Fg(\(\))195 531 y Fu(Returns)16 b(the)f(curren)o
+(tly)h(activ)o(e)f(k)o(eymap.)1650 622 y(F)l(unction)-1749
+b Fi(void)20 b Fh(rl)p 241 622 V 21 w(set)p 333 622 V
+21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195
+677 y Fu(Mak)o(es)g Fm(k)o(eymap)j Fu(the)e(curren)o(tly)h(activ)o(e)f
+(k)o(eymap.)1650 768 y(F)l(unction)-1749 b Fi(Keymap)20
+b Fh(rl)p 293 768 V 21 w(get)p 391 768 V 21 w(k)n(eymap)p
+605 768 V 20 w(b)n(y)p 685 768 V 21 w(name)i Fg(\()p
+Ft(char)14 b(*name)p Fg(\))195 823 y Fu(Return)h(the)f(k)o(eymap)g
+(matc)o(hing)h Fm(name)p Fu(.)k Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o
+(ould)f(b)q(e)h(supplied)i(in)e(a)195 878 y Ft(set)g(keymap)f
+Fu(inputrc)i(line)h(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f
+(page)g(3\).)1650 970 y(F)l(unction)-1749 b Fi(char)20
+b(*)f Fh(rl)p 286 970 V 21 w(get)p 384 970 V 21 w(k)n(eymap)p
+598 970 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p
+Fg(\))195 1024 y Fu(Return)h(the)f(name)h(matc)o(hing)f
+Fm(k)o(eymap)p Fu(.)19 b Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f
+(b)q(e)h(supplied)i(in)e(a)195 1079 y Ft(set)g(keymap)f
+Fu(inputrc)i(line)h(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f
+(page)g(3\).)75 1191 y Fl(2.4.3)30 b(Binding)20 b(Keys)137
+1287 y Fu(Y)l(ou)j(asso)q(ciate)f(k)o(eys)g(with)h(functions)g(through)
+f(the)g(k)o(eymap.)41 b(Readline)25 b(has)d(sev)o(eral)h(in)o(ter-)75
+1342 y(nal)h(k)o(eymaps:)35 b Ft(emacs_standard_keymap)p
+Fu(,)22 b Ft(emacs_meta_keymap)p Fu(,)g Ft(emacs_ctlx_keymap)p
+Fu(,)g Ft(vi_)75 1396 y(movement_keymap)p Fu(,)e(and)i
+Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18
+b Fu(is)k(the)f(default,)75 1451 y(and)15 b(the)h(examples)g(in)g(this)
+f(man)o(ual)h(assume)f(that.)137 1518 y(These)h(functions)g(manage)e(k)
+o(ey)i(bindings.)1650 1610 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 1610 V 21 w(bind)p 347 1610 V 21 w(k)n(ey)k
+Fg(\()p Ft(int)14 b(key,)h(Function)f(*function)p Fg(\))195
+1664 y Fu(Binds)i Fm(k)o(ey)j Fu(to)14 b Fm(function)h
+Fu(in)h(the)f(curren)o(tly)g(activ)o(e)g(k)o(eymap.)20
+b(Returns)15 b(non-zero)g(in)h(the)195 1719 y(case)f(of)g(an)g(in)o(v)m
+(alid)j Fm(k)o(ey)p Fu(.)1650 1811 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1811 V 21 w(bind)p 347 1811
+V 21 w(k)n(ey)p 452 1811 V 21 w(in)p 520 1811 V 22 w(map)h
+Fg(\()p Ft(int)14 b(key,)h(Function)f(*function,)283
+1866 y(Keymap)g(map)p Fg(\))195 1920 y Fu(Bind)i Fm(k)o(ey)j
+Fu(to)c Fm(function)h Fu(in)g Fm(map)p Fu(.)k(Returns)15
+b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j
+Fm(k)o(ey)p Fu(.)1650 2012 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 2012 V 21 w(un)n(bind)p 409 2012 V 21 w(k)n(ey)k
+Fg(\()p Ft(int)14 b(key)p Fg(\))195 2067 y Fu(Bind)g
+Fm(k)o(ey)j Fu(to)c(the)g(n)o(ull)i(function)f(in)g(the)f(curren)o(tly)
+h(activ)o(e)f(k)o(eymap.)19 b(Returns)14 b(non-zero)195
+2121 y(in)i(case)f(of)g(error.)1650 2213 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 2213 V 21 w(un)n(bind)p 409
+2213 V 21 w(k)n(ey)p 514 2213 V 21 w(in)p 582 2213 V
+22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f(map)p
+Fg(\))195 2268 y Fu(Bind)i Fm(k)o(ey)j Fu(to)c(the)g(n)o(ull)i
+(function)f(in)g Fm(map)p Fu(.)k(Returns)15 b(non-zero)h(in)g(case)f
+(of)g(error.)1650 2359 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 2359 V 21 w(un)n(bind)p 409 2359 V 21 w(function)p
+635 2359 V 21 w(in)p 703 2359 V 21 w(map)h Fg(\()p Ft(Function)14
+b(*function,)283 2414 y(Keymap)g(map)p Fg(\))195 2469
+y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i Fm(function)g
+Fu(in)g Fm(map)p Fu(.)1650 2560 y(F)l(unction)-1749 b
+Fi(int)20 b Fh(rl)p 215 2560 V 21 w(un)n(bind)p 409 2560
+V 21 w(command)p 674 2560 V 17 w(in)p 738 2560 V 22 w(map)h
+Fg(\()p Ft(char)14 b(*command,)g(Keymap)283 2615 y(map)p
+Fg(\))195 2670 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(are)h(b)q(ound)h
+(to)f Fm(command)i Fu(in)f Fm(map)p Fu(.)p eop
+%%Page: 25 27
+25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(25)1650 183 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 183 18 3 v 21 w(generic)p 413 183 V 21
+w(bind)j Fg(\()p Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)
+283 238 y(Keymap)f(map)p Fg(\))195 293 y Fu(Bind)g(the)f(k)o(ey)g
+(sequence)i(represen)o(ted)e(b)o(y)g(the)g(string)g Fm(k)o(eyseq)h
+Fu(to)f(the)g(arbitrary)f(p)q(oin)o(ter)195 348 y Fm(data)p
+Fu(.)19 b Fm(t)o(yp)q(e)e Fu(sa)o(ys)c(what)h(kind)i(of)e(data)f(is)i
+(p)q(oin)o(ted)g(to)f(b)o(y)g Fm(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f
+(function)195 402 y(\()p Ft(ISFUNC)p Fu(\),)f(a)h(macro)g(\()p
+Ft(ISMACR)p Fu(\),)f(or)i(a)f(k)o(eymap)h(\()p Ft(ISKMAP)p
+Fu(\).)j(This)d(mak)o(es)f(new)h(k)o(eymaps)195 457 y(as)g(necessary)l
+(.)20 b(The)c(initial)h(k)o(eymap)e(in)h(whic)o(h)g(to)e(do)i(bindings)
+h(is)e Fm(map)p Fu(.)1650 567 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 567 V 21 w(parse)p 369 567 V 19 w(and)p
+480 567 V 21 w(bind)j Fg(\()p Ft(char)14 b(*line)p Fg(\))195
+622 y Fu(P)o(arse)k Fm(line)23 b Fu(as)c(if)g(it)g(had)g(b)q(een)h
+(read)e(from)h(the)f Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)g(an)o
+(y)f(k)o(ey)195 677 y(bindings)i(and)e(v)m(ariable)i(assignmen)o(ts)d
+(found)i(\(see)f(Section)h(1.3)e([Readline)j(Init)f(File],)195
+731 y(page)c(3\).)1650 841 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 841 V 21 w(read)p 346 841 V 20 w(init)p
+450 841 V 22 w(\014le)k Fg(\()p Ft(char)14 b(*filename)p
+Fg(\))195 896 y Fu(Read)25 b(k)o(eybindings)i(and)e(v)m(ariable)h
+(assignmen)o(ts)e(from)g Fm(\014lename)29 b Fu(\(see)24
+b(Section)i(1.3)195 951 y([Readline)17 b(Init)f(File],)g(page)f(3\).)75
+1080 y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20
+b(Names)h(and)f(Bindings)137 1185 y Fu(These)11 b(functions)h(allo)o(w)
+e(y)o(ou)h(to)f(\014nd)h(out)f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f
+(named)h(functions)h(and)e(the)h(functions)75 1240 y(in)o(v)o(ok)o(ed)k
+(b)o(y)h(a)e(particular)i(k)o(ey)f(sequence.)1650 1350
+y(F)l(unction)-1749 b Fi(Function)20 b(*)g Fh(rl)p 391
+1350 V 21 w(named)p 579 1350 V 19 w(function)j Fg(\()p
+Ft(char)14 b(*name)p Fg(\))195 1405 y Fu(Return)i(the)f(function)h
+(with)g(name)f Fm(name)p Fu(.)1650 1514 y(F)l(unction)-1749
+b Fi(Function)20 b(*)g Fh(rl)p 391 1514 V 21 w(function)p
+617 1514 V 21 w(of)p 685 1514 V 19 w(k)n(eyseq)k Fg(\()p
+Ft(char)15 b(*keyseq,)f(Keymap)283 1569 y(map,)g(int)h(*type)p
+Fg(\))195 1624 y Fu(Return)j(the)f(function)g(in)o(v)o(ok)o(ed)g(b)o(y)
+g Fm(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fm(map)p Fu(.)25
+b(If)17 b Fm(map)h Fu(is)f(NULL,)h(the)195 1679 y(curren)o(t)13
+b(k)o(eymap)g(is)h(used.)20 b(If)14 b Fm(t)o(yp)q(e)i
+Fu(is)e(not)f(NULL,)h(the)f(t)o(yp)q(e)g(of)g(the)h(ob)s(ject)f(is)h
+(returned)195 1734 y(in)i(it)f(\(one)g(of)g Ft(ISFUNC)p
+Fu(,)f Ft(ISKMAP)p Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1650
+1843 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p
+312 1843 V 21 w(in)n(v)n(oking)p 541 1843 V 23 w(k)n(eyseqs)k
+Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 1898 y
+Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o
+(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195
+1953 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650
+2063 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p
+312 2063 V 21 w(in)n(v)n(oking)p 541 2063 V 23 w(k)n(eyseqs)p
+750 2063 V 21 w(in)p 818 2063 V 22 w(map)i Fg(\()p Ft(Function)14
+b(*function,)283 2117 y(Keymap)g(map)p Fg(\))195 2172
+y Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)
+o(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195
+2227 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650
+2337 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 2337
+V 21 w(function)p 467 2337 V 21 w(dump)r(er)g Fg(\()p
+Ft(int)15 b(readable)p Fg(\))195 2392 y Fu(Prin)o(t)k(the)h(readline)g
+(function)g(names)g(and)f(the)g(k)o(ey)g(sequences)i(curren)o(tly)e(b)q
+(ound)i(to)195 2446 y(them)16 b(to)f Ft(rl_outstream)p
+Fu(.)k(If)d Fm(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)g
+(formatted)f(in)h(suc)o(h)g(a)195 2501 y(w)o(a)o(y)e(that)h(it)g(can)g
+(b)q(e)h(made)g(part)e(of)h(an)g Ft(inputrc)f Fu(\014le)i(and)g
+(re-read.)1650 2611 y(F)l(unction)-1749 b Fi(void)20
+b Fh(rl)p 241 2611 V 21 w(list)p 337 2611 V 22 w(funmap)p
+550 2611 V 18 w(names)h Fg(\(\))195 2666 y Fu(Prin)o(t)15
+b(the)g(names)h(of)e(all)j(bindable)g(Readline)g(functions)f(to)f
+Ft(rl_outstream)p Fu(.)p eop
+%%Page: 26 28
+26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Fl(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 287
+y Fu(Supp)q(orting)14 b(the)g(undo)f(command)g(is)h(a)f(painless)h
+(thing,)g(and)f(mak)o(es)g(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75
+341 y(useful.)28 b(It)17 b(is)h(certainly)h(easy)e(to)g(try)g
+(something)g(if)h(y)o(ou)f(kno)o(w)g(y)o(ou)h(can)f(undo)h(it.)27
+b(I)18 b(could)g(use)g(an)75 396 y(undo)e(function)g(for)e(the)i(sto)q
+(c)o(k)e(mark)o(et.)137 471 y(If)g(y)o(our)e(function)i(simply)h
+(inserts)f(text)e(once,)i(or)e(deletes)j(text)d(once,)i(and)f(uses)h
+Ft(rl_insert_text)75 525 y(\(\))h Fu(or)g Ft(rl_delete_text)e(\(\))i
+Fu(to)f(do)h(it,)g(then)h(undoing)g(is)g(already)f(done)h(for)f(y)o(ou)
+f(automatically)l(.)137 600 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i
+(insertions)f(or)f(m)o(ultiple)i(deletions,)g(or)e(an)o(y)g(com)o
+(bination)h(of)f(these)g(op)q(erations,)75 655 y(y)o(ou)19
+b(should)h(group)e(them)h(together)g(in)o(to)g(one)g(op)q(eration.)31
+b(This)20 b(is)f(done)h(with)f Ft(rl_begin_undo_)75 709
+y(group)14 b(\(\))h Fu(and)h Ft(rl_end_undo_group)d(\(\))p
+Fu(.)137 784 y(The)j(t)o(yp)q(es)f(of)g(ev)o(en)o(ts)g(that)f(can)h(b)q
+(e)h(undone)g(are:)195 855 y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)
+e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)137 930
+y Fu(Notice)16 b(that)e Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g(some)
+g(text,)f(and)i Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75
+985 y(some)d(text.)18 b(That)12 b(is,)h(the)f(undo)g(co)q(de)h(tells)g
+(undo)g(what)e(to)h(undo,)h(not)f(ho)o(w)f(to)h(undo)g(it.)19
+b Ft(UNDO_BEGIN)75 1039 y Fu(and)c Ft(UNDO_END)f Fu(are)h(tags)g(added)
+g(b)o(y)h Ft(rl_begin_undo_group)c(\(\))j Fu(and)g Ft
+(rl_end_undo_group)e(\(\))p Fu(.)1650 1146 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1146 18 3 v 21 w(b)r(egin)p
+372 1146 V 20 w(undo)p 517 1146 V 20 w(group)h Fg(\(\))195
+1201 y Fu(Begins)e(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g
+(construct.)29 b(The)19 b(undo)g(information)195 1255
+y(usually)f(comes)f(from)f(calls)h(to)g Ft(rl_insert_text)c(\(\))j
+Fu(and)h Ft(rl_delete_text)c(\(\))p Fu(,)k(but)195 1310
+y(could)f(b)q(e)g(the)f(result)h(of)f(calls)h(to)f Ft(rl_add_undo)e
+(\(\))p Fu(.)1650 1417 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 1417 V 21 w(end)p 326 1417 V 20 w(undo)p
+471 1417 V 20 w(group)h Fg(\(\))195 1471 y Fu(Closes)c(the)g(curren)o
+(t)g(undo)h(group)e(started)h(with)g Ft(rl_begin_undo_group)c(\(\))p
+Fu(.)25 b(There)195 1526 y(should)17 b(b)q(e)f(one)f(call)i(to)e
+Ft(rl_end_undo_group)e(\(\))i Fu(for)g(eac)o(h)g(call)i(to)e
+Ft(rl_begin_undo_)195 1581 y(group)f(\(\))p Fu(.)1650
+1687 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1687
+V 21 w(add)p 354 1687 V 20 w(undo)i Fg(\()p Ft(enum)14
+b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)283 1742
+y(char)g(*text)p Fg(\))195 1797 y Fu(Remem)o(b)q(er)j(ho)o(w)f(to)f
+(undo)i(an)f(ev)o(en)o(t)g(\(according)h(to)e Fm(what)q
+Fu(\).)23 b(The)16 b(a\013ected)g(text)g(runs)195 1852
+y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h(encompasses)f
+Fm(text)p Fu(.)1650 1958 y(F)l(unction)-1749 b Fi(void)20
+b Fh(free)p 296 1958 V 20 w(undo)p 441 1958 V 20 w(list)k
+Fg(\(\))195 2013 y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1650
+2119 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2119
+V 21 w(do)p 297 2119 V 20 w(undo)i Fg(\(\))195 2174 y
+Fu(Undo)16 b(the)g(\014rst)f(thing)h(on)g(the)f(undo)h(list.)22
+b(Returns)17 b Ft(0)e Fu(if)h(there)g(w)o(as)f(nothing)h(to)f(undo,)195
+2229 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137
+2336 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i
+(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,)
+75 2390 y(c)o(hange)i(its)h(case\),)g(call)g Ft(rl_modifying)14
+b(\(\))k Fu(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f
+(text.)29 b(Y)l(ou)19 b(m)o(ust)75 2445 y(supply)d(the)g(indices)h(of)e
+(the)g(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)
+1650 2552 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
+2552 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p
+Fg(\))195 2606 y Fu(T)l(ell)i(Readline)i(to)c(sa)o(v)o(e)g(the)i(text)e
+(b)q(et)o(w)o(een)h Fm(start)g Fu(and)g Fm(end)j Fu(as)c(a)h(single)h
+(undo)g(unit.)23 b(It)195 2661 y(is)16 b(assumed)f(that)g(y)o(ou)f
+(will)j(subsequen)o(tly)g(mo)q(dify)e(that)g(text.)p
+eop
+%%Page: 27 29
+27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(27)75 183 y Fl(2.4.6)30 b(Redispla)n(y)1650
+300 y Fu(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241
+300 18 3 v 21 w(redispla)n(y)k Fg(\(\))195 355 y Fu(Change)19
+b(what's)f(displa)o(y)o(ed)i(on)f(the)f(screen)i(to)e(re\015ect)h(the)g
+(curren)o(t)g(con)o(ten)o(ts)f(of)g Ft(rl_)195 410 y(line_buffer)p
+Fu(.)1650 497 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
+215 497 V 21 w(forced)p 390 497 V 20 w(up)r(date)p 584
+497 V 20 w(displa)n(y)k Fg(\(\))195 552 y Fu(F)l(orce)17
+b(the)f(line)j(to)d(b)q(e)i(up)q(dated)f(and)g(redispla)o(y)o(ed,)h
+(whether)f(or)g(not)f(Readline)j(thinks)195 607 y(the)c(screen)h
+(displa)o(y)g(is)g(correct.)1650 694 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 694 V 21 w(on)p 297 694 V 20
+w(new)p 416 694 V 21 w(line)k Fg(\(\))195 749 y Fu(T)l(ell)17
+b(the)f(up)q(date)g(routines)g(that)f(w)o(e)g(ha)o(v)o(e)g(mo)o(v)o(ed)
+g(on)o(to)g(a)g(new)h(\(empt)o(y\))f(line,)i(usually)195
+804 y(after)d(ouputting)i(a)f(newline.)1650 892 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 892 V 21 w(reset)p 357 892
+V 20 w(line)p 465 892 V 23 w(state)j Fg(\(\))195 947
+y Fu(Reset)17 b(the)f(displa)o(y)h(state)f(to)f(a)h(clean)h(state)f
+(and)g(redispla)o(y)h(the)g(curren)o(t)f(line)i(starting)195
+1001 y(on)d(a)g(new)g(line.)1650 1089 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1089 V 21 w(message)g Fg(\()p
+Ft(va_alist)p Fg(\))195 1144 y Fu(The)h(argumen)o(ts)f(are)g(a)g
+(string)h(as)f(w)o(ould)h(b)q(e)g(supplied)i(to)d Ft(printf)p
+Fu(.)35 b(The)21 b(resulting)195 1199 y(string)h(is)g(displa)o(y)o(ed)h
+(in)g(the)f Fm(ec)o(ho)g(area)p Fu(.)39 b(The)23 b(ec)o(ho)f(area)f(is)
+h(also)g(used)h(to)e(displa)o(y)195 1253 y(n)o(umeric)16
+b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)1650 1341
+y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1341 V
+21 w(clear)p 354 1341 V 21 w(message)h Fg(\(\))195 1396
+y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1650
+1483 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1483
+V 21 w(sa)n(v)n(e)p 365 1483 V 21 w(prompt)h Fg(\(\))195
+1538 y Fu(Sa)o(v)o(e)e(the)h(lo)q(cal)h(Readline)h(prompt)d(displa)o(y)
+i(state)e(in)h(preparation)g(for)f(displa)o(ying)i(a)195
+1593 y(new)15 b(message)g(in)h(the)f(message)g(area)g(with)g
+Ft(rl_message)p Fu(.)1650 1681 y(F)l(unction)-1749 b
+Fi(void)20 b Fh(rl)p 241 1681 V 21 w(restore)p 436 1681
+V 20 w(prompt)g Fg(\(\))195 1736 y Fu(Restore)c(the)h(lo)q(cal)h
+(Readline)g(prompt)e(displa)o(y)i(state)e(sa)o(v)o(ed)g(b)o(y)g(the)h
+(most)e(recen)o(t)i(call)195 1790 y(to)e Ft(rl_save_prompt)p
+Fu(.)75 1898 y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650
+2015 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
+2015 V 21 w(insert)p 378 2015 V 21 w(text)k Fg(\()p Ft(char)14
+b(*text)p Fg(\))195 2069 y Fu(Insert)h Fm(text)h Fu(in)o(to)f(the)h
+(line)g(at)f(the)g(curren)o(t)g(cursor)g(p)q(osition.)1650
+2157 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2157
+V 21 w(delete)p 383 2157 V 22 w(text)k Fg(\()p Ft(int)14
+b(start,)h(int)f(end)p Fg(\))195 2212 y Fu(Delete)i(the)f(text)g(b)q
+(et)o(w)o(een)g Fm(start)g Fu(and)h Fm(end)h Fu(in)f(the)g(curren)o(t)f
+(line.)1650 2300 y(F)l(unction)-1749 b Fi(char)20 b(*)f
+Fh(rl)p 286 2300 V 21 w(cop)n(y)p 421 2300 V 21 w(text)24
+b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195
+2354 y Fu(Return)h(a)f(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i
+Fm(start)f Fu(and)g Fm(end)j Fu(in)e(the)f(curren)o(t)g(line.)1650
+2442 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2442
+V 21 w(kill)p 311 2442 V 23 w(text)k Fg(\()p Ft(int)14
+b(start,)h(int)g(end)p Fg(\))195 2497 y Fu(Cop)o(y)j(the)h(text)f(b)q
+(et)o(w)o(een)h Fm(start)f Fu(and)h Fm(end)i Fu(in)e(the)g(curren)o(t)f
+(line)i(to)e(the)h(kill)h(ring,)g(ap-)195 2552 y(p)q(ending)15
+b(or)f(prep)q(ending)h(to)e(the)h(last)f(kill)j(if)e(the)g(last)f
+(command)h(w)o(as)f(a)g(kill)i(command.)195 2606 y(The)j(text)f(is)h
+(deleted.)28 b(If)18 b Fm(start)f Fu(is)h(less)g(than)f
+Fm(end)p Fu(,)i(the)e(text)g(is)h(app)q(ended,)i(otherwise)195
+2661 y(prep)q(ended.)i(If)15 b(the)g(last)h(command)f(w)o(as)f(not)h(a)
+g(kill,)h(a)f(new)h(kill)h(ring)e(slot)g(is)h(used.)p
+eop
+%%Page: 28 30
+28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650
+304 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
+304 18 3 v 21 w(read)p 346 304 V 20 w(k)n(ey)k Fg(\(\))195
+359 y Fu(Return)14 b(the)g(next)g(c)o(haracter)e(a)o(v)m(ailable.)22
+b(This)14 b(handles)h(input)f(inserted)h(in)o(to)e(the)h(input)195
+414 y(stream)k(via)g Fm(p)q(ending)j(input)f Fu(\(see)f(Section)g(2.3)f
+([Readline)i(V)l(ariables],)g(page)e(21\))g(and)195 469
+y Ft(rl_stuff_char)13 b(\(\))p Fu(,)i(macros,)f(and)h(c)o(haracters)g
+(read)g(from)f(the)i(k)o(eyb)q(oard.)1650 561 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 561 V 21 w(getc)j Fg(\()p Ft(FILE)14
+b(*)p Fg(\))195 616 y Fu(Return)i(the)f(next)g(c)o(haracter)g(a)o(v)m
+(ailable)i(from)d(the)h(k)o(eyb)q(oard.)1650 708 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 708 V 21 w(stu\013)p 346 708
+V 20 w(c)n(har)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 763
+y Fu(Insert)22 b Fm(c)i Fu(in)o(to)e(the)g(Readline)i(input)f(stream.)
+38 b(It)22 b(will)h(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)g
+(Readline)195 817 y(attempts)14 b(to)h(read)g(c)o(haracters)f(from)h
+(the)g(terminal)h(with)f Ft(rl_read_key)f(\(\))p Fu(.)1650
+910 y(F)l(unction)-1749 b Fi(rl_extend_line_buffer)22
+b Fh(\(in)n(t)j Ft(len)p Fg(\))195 964 y Fu(Ensure)14
+b(that)e Ft(rl_line_buffer)g Fu(has)h(enough)h(space)f(to)g(hold)h
+Fm(len)h Fu(c)o(haracters,)d(p)q(ossibly)195 1019 y(reallo)q(cating)k
+(it)g(if)f(necessary)l(.)1650 1111 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1111 V 21 w(initiali)q(z)q(e)26
+b Fg(\(\))195 1166 y Fu(Initialize)18 b(or)d(re-initialize)j
+(Readline's)f(in)o(ternal)f(state.)1650 1258 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1258 V 21 w(reset)p 357 1258
+V 20 w(terminal)j Fg(\()p Ft(char)15 b(*terminal_name)p
+Fg(\))195 1313 y Fu(Reinitializ)q(e)h(Readline's)g(idea)e(of)f(the)h
+(terminal)g(settings)g(using)g Fm(terminal)p 1501 1313
+14 2 v 17 w(name)j Fu(as)c(the)195 1368 y(terminal)j(t)o(yp)q(e)f
+(\(e.g.,)f Ft(vt100)p Fu(\).)1650 1460 y(F)l(unction)-1749
+b Fi(int)20 b Fh(alphab)r(etic)k Fg(\()p Ft(int)14 b(c)p
+Fg(\))195 1515 y Fu(Return)i(1)f(if)g Fm(c)j Fu(is)e(an)f(alphab)q
+(etic)i(c)o(haracter.)1650 1607 y(F)l(unction)-1749 b
+Fi(int)20 b Fh(n)n(umeric)i Fg(\()p Ft(int)15 b(c)p Fg(\))195
+1662 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o
+(haracter.)1650 1754 y(F)l(unction)-1749 b Fi(int)20
+b Fh(ding)i Fg(\(\))195 1808 y Fu(Ring)16 b(the)f(terminal)h(b)q(ell,)h
+(ob)q(eying)f(the)g(setting)f(of)g Ft(bell-style)p Fu(.)1650
+1901 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1901
+18 3 v 21 w(displa)n(y)p 435 1901 V 22 w(matc)n(h)p 611
+1901 V 20 w(list)25 b Fg(\()p Ft(char)14 b(**matches,)g(int)g(len,)h
+(int)283 1955 y(max)p Fg(\))195 2010 y Fu(A)j(con)o(v)o(enience)i
+(function)g(for)d(displa)o(ying)j(a)e(list)i(of)e(strings)g(in)h
+(columnar)g(format)e(on)195 2065 y(Readline's)e(output)e(stream.)18
+b Ft(matches)12 b Fu(is)h(the)g(list)h(of)f(strings,)f(in)i(argv)e
+(format,)g(suc)o(h)h(as)195 2120 y(a)h(list)h(of)e(completion)j(matc)o
+(hes.)j Ft(len)13 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h
+Ft(matches)p Fu(,)e(and)h Ft(max)195 2174 y Fu(is)k(the)g(length)h(of)e
+(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)27 b(This)18
+b(function)h(uses)f(the)g(setting)195 2229 y(of)13 b
+Ft(print-completions-horizontally)d Fu(to)k(select)g(ho)o(w)g(the)g
+(matc)o(hes)f(are)h(displa)o(y)o(ed)195 2284 y(\(see)h(Section)h(1.3.1)
+e([Readline)j(Init)f(File)g(Syn)o(tax],)e(page)h(4\).)137
+2376 y(The)h(follo)o(wing)g(are)f(implemen)o(ted)h(as)f(macros,)f
+(de\014ned)j(in)f Ft(chartypes.h)p Fu(.)1650 2468 y(F)l(unction)-1749
+b Fi(int)20 b Fh(upp)r(ercase)p 426 2468 V 19 w(p)j Fg(\()p
+Ft(int)14 b(c)p Fg(\))195 2523 y Fu(Return)i(1)f(if)g
+Fm(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)f(c)o(haracter.)1650
+2615 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p
+409 2615 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195
+2670 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g
+(alphab)q(etic)i(c)o(haracter.)p eop
+%%Page: 29 31
+29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(29)1650 183 y(F)l(unction)-1749 b Fi(int)20
+b Fh(digit)p 289 183 18 3 v 22 w(p)i Fg(\()p Ft(int)15
+b(c)p Fg(\))195 238 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(n)o
+(umeric)h(c)o(haracter.)1650 328 y(F)l(unction)-1749
+b Fi(int)20 b Fh(to)p 227 328 V 20 w(upp)r(er)i Fg(\()p
+Ft(int)14 b(c)p Fg(\))195 383 y Fu(If)21 b Fm(c)i Fu(is)e(a)g(lo)o(w)o
+(ercase)f(alphab)q(etic)i(c)o(haracter,)f(return)g(the)f(corresp)q
+(onding)i(upp)q(ercase)195 437 y(c)o(haracter.)1650 527
+y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 527 V 20
+w(lo)n(w)n(er)k Fg(\()p Ft(int)15 b(c)p Fg(\))195 582
+y Fu(If)j Fm(c)j Fu(is)e(an)f(upp)q(ercase)h(alphab)q(etic)h(c)o
+(haracter,)e(return)g(the)g(corresp)q(onding)h(lo)o(w)o(ercase)195
+637 y(c)o(haracter.)1650 727 y(F)l(unction)-1749 b Fi(int)20
+b Fh(digit)p 289 727 V 22 w(v)m(alue)j Fg(\()p Ft(int)15
+b(c)p Fg(\))195 781 y Fu(If)g Fm(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g
+(return)g(the)h(v)m(alue)g(it)g(represen)o(ts.)75 891
+y Fl(2.4.9)30 b(Alternate)20 b(In)n(terface)137 987 y
+Fu(An)j(alternate)f(in)o(terface)h(is)g(a)o(v)m(ailable)h(to)d(plain)j
+Ft(readline\(\))p Fu(.)40 b(Some)22 b(applications)i(need)g(to)75
+1042 y(in)o(terlea)o(v)o(e)15 b(k)o(eyb)q(oard)f(I/O)h(with)g(\014le,)h
+(device,)f(or)f(windo)o(w)h(system)f(I/O,)h(t)o(ypically)h(b)o(y)e
+(using)h(a)g(main)75 1096 y(lo)q(op)f(to)g Ft(select\(\))e
+Fu(on)i(v)m(arious)g(\014le)h(descriptors.)20 b(T)l(o)14
+b(accomo)q(date)f(this)h(need,)h(readline)g(can)f(also)g(b)q(e)75
+1151 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o(k')h(function)h(from)d
+(an)i(ev)o(en)o(t)f(lo)q(op.)22 b(There)16 b(are)f(functions)h(a)o(v)m
+(ailable)i(to)c(mak)o(e)75 1206 y(this)i(easy)l(.)1650
+1296 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1296
+V 21 w(callbac)n(k)p 458 1296 V 23 w(handler)p 670 1296
+V 21 w(install)25 b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283
+1351 y(*lhandler)p Fg(\))195 1405 y Fu(Set)i(up)h(the)g(terminal)g(for)
+f(readline)i(I/O)e(and)h(displa)o(y)g(the)g(initial)h(expanded)g(v)m
+(alue)f(of)195 1460 y Fm(prompt)p Fu(.)24 b(Sa)o(v)o(e)17
+b(the)g(v)m(alue)h(of)e Fm(lhandler)22 b Fu(to)17 b(use)g(as)f(a)h
+(callbac)o(k)h(when)f(a)g(complete)g(line)195 1515 y(of)e(input)h(has)f
+(b)q(een)h(en)o(tered.)1650 1605 y(F)l(unction)-1749
+b Fi(void)20 b Fh(rl)p 241 1605 V 21 w(callbac)n(k)p
+458 1605 V 23 w(read)p 591 1605 V 20 w(c)n(har)j Fg(\(\))195
+1660 y Fu(Whenev)o(er)14 b(an)f(application)i(determines)f(that)f(k)o
+(eyb)q(oard)g(input)h(is)g(a)o(v)m(ailable,)h(it)f(should)195
+1714 y(call)20 b Ft(rl_callback_read_char\(\))p Fu(,)c(whic)o(h)k(will)
+g(read)f(the)g(next)g(c)o(haracter)f(from)g(the)195 1769
+y(curren)o(t)25 b(input)h(source.)48 b(If)25 b(that)g(c)o(haracter)f
+(completes)h(the)g(line,)k Ft(rl_callback_)195 1824 y(read_char)14
+b Fu(will)k(in)o(v)o(ok)o(e)e(the)f Fm(lhandler)21 b
+Fu(function)c(sa)o(v)o(ed)e(b)o(y)h Ft(rl_callback_handler_)195
+1879 y(install)g Fu(to)h(pro)q(cess)g(the)g(line.)27
+b Ft(EOF)17 b Fu(is)h(indicated)g(b)o(y)f(calling)i Fm(lhandler)j
+Fu(with)c(a)f Ft(NULL)195 1934 y Fu(line.)1650 2023 y(F)l(unction)-1749
+b Fi(void)20 b Fh(rl)p 241 2023 V 21 w(callbac)n(k)p
+458 2023 V 23 w(handler)p 670 2023 V 21 w(remo)n(v)n(e)i
+Fg(\(\))195 2078 y Fu(Restore)15 b(the)g(terminal)g(to)g(its)g(initial)
+i(state)d(and)h(remo)o(v)o(e)f(the)h(line)h(handler.)21
+b(This)16 b(ma)o(y)195 2133 y(b)q(e)g(called)h(from)d(within)j(a)d
+(callbac)o(k)j(as)d(w)o(ell)j(as)d(indep)q(enden)o(tly)m(.)75
+2243 y Fl(2.4.10)29 b(An)21 b(Example)137 2338 y Fu(Here)f(is)g(a)f
+(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o(ercase)h(c)o(haracters)e
+(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o(ts,)75 2393
+y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o(ercase.)31
+b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p
+Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 2448 y(`)p Ft(M-c)p
+Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g
+(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p
+Fu(')d(w)o(ould)i(c)o(hange)75 2503 y(the)h(case)g(of)g(the)h(follo)o
+(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h
+(last)f(c)o(haracter)f(c)o(hanged.)195 2566 y Ft(/*)24
+b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h
+(*/)195 2618 y(int)195 2670 y(invert_case_line)f(\(count,)h(key\))p
+eop
+%%Page: 30 32
+30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)314
+183 y Ft(int)24 b(count,)f(key;)195 235 y({)243 287 y(register)f(int)i
+(start,)f(end,)g(i;)243 391 y(start)g(=)h(rl_point;)243
+495 y(if)f(\(rl_point)g(>=)h(rl_end\))290 546 y(return)f(\(0\);)243
+650 y(if)g(\(count)g(<)h(0\))290 702 y({)338 754 y(direction)f(=)h(-1;)
+338 806 y(count)f(=)h(-count;)290 858 y(})243 910 y(else)290
+962 y(direction)f(=)h(1;)243 1065 y(/*)f(Find)h(the)f(end)h(of)f(the)h
+(range)f(to)g(modify.)g(*/)243 1117 y(end)g(=)h(start)f(+)h(\(count)f
+(*)h(direction\);)243 1221 y(/*)f(Force)g(it)h(to)g(be)f(within)g
+(range.)g(*/)243 1273 y(if)g(\(end)h(>)f(rl_end\))290
+1325 y(end)h(=)g(rl_end;)243 1377 y(else)f(if)h(\(end)f(<)h(0\))290
+1429 y(end)g(=)g(0;)243 1532 y(if)f(\(start)g(==)h(end\))290
+1584 y(return)f(\(0\);)243 1688 y(if)g(\(start)g(>)h(end\))290
+1740 y({)338 1792 y(int)g(temp)f(=)h(start;)338 1844
+y(start)f(=)h(end;)338 1896 y(end)g(=)f(temp;)290 1947
+y(})243 2051 y(/*)g(Tell)h(readline)e(that)i(we)f(are)h(modifying)e
+(the)i(line,)f(so)h(it)f(will)h(save)314 2103 y(the)g(undo)f
+(information.)f(*/)243 2155 y(rl_modifying)g(\(start,)h(end\);)243
+2259 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290
+2311 y({)338 2363 y(if)h(\(uppercase_p)e(\(rl_line_buffer[i]\)\))386
+2414 y(rl_line_buffer[i])f(=)j(to_lower)f(\(rl_line_buffer[i]\);)338
+2466 y(else)g(if)h(\(lowercase_p)e(\(rl_line_buffer[i]\)\))386
+2518 y(rl_line_buffer[i])f(=)j(to_upper)f(\(rl_line_buffer[i]\);)290
+2570 y(})243 2622 y(/*)g(Move)h(point)f(to)g(on)h(top)f(of)h(the)f
+(last)h(character)e(changed.)h(*/)p eop
+%%Page: 31 33
+31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(31)243 183 y Ft(rl_point)22 b(=)i(\(direction)f(==)g
+(1\))h(?)g(end)f(-)h(1)g(:)f(start;)243 235 y(return)g(\(0\);)195
+287 y(})75 408 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137
+502 y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f(to)
+h(a)f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f(on)75
+557 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34 b(They)20
+b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o(ts,)f
+(lik)o(e)h(a)f(user)75 612 y(pressing)c(the)f(in)o(terrupt)g(k)o(ey)g
+(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q(eing)
+g(brok)o(en.)k(There)15 b(is)75 667 y(a)e(class)g(of)g(signals)h(that)f
+(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h
+(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 721
+y(Since)i(Readline)g(c)o(hanges)f(the)f(terminal)h(attributes)f(when)h
+(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75
+776 y(pro)q(cessing)22 b(when)f(a)g(signal)h(is)g(receiv)o(ed)g(to)e
+(restore)g(the)i(terminal)f(to)g(a)g(sane)g(state,)g(or)f(pro)o(vide)75
+831 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o
+(ually)l(.)137 896 y(Readline)23 b(con)o(tains)d(an)g(in)o(ternal)h
+(signal)g(handler)g(that)f(is)h(installed)h(for)d(a)h(n)o(um)o(b)q(er)g
+(of)g(signals)75 951 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p
+Fu(,)g Ft(SIGTERM)p Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p
+Fu(,)g Ft(SIGTTIN)p Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36
+b(When)21 b(one)g(of)75 1005 y(these)16 b(signals)h(is)f(receiv)o(ed,)h
+(the)f(signal)h(handler)f(will)i(reset)e(the)g(terminal)g(attributes)g
+(to)f(those)h(that)75 1060 y(w)o(ere)22 b(in)h(e\013ect)f(b)q(efore)g
+Ft(readline)14 b(\(\))22 b Fu(w)o(as)f(called,)k(reset)d(the)g(signal)h
+(handling)h(to)d(what)g(it)i(w)o(as)75 1115 y(b)q(efore)e
+Ft(readline)14 b(\(\))20 b Fu(w)o(as)f(called,)k(and)e(resend)g(the)f
+(signal)i(to)d(the)i(calling)h(application.)37 b(If)21
+b(and)75 1170 y(when)15 b(the)f(calling)i(application's)g(signal)f
+(handler)g(returns,)f(Readline)j(will)e(reinitialize)j(the)c(terminal)
+75 1225 y(and)21 b(con)o(tin)o(ue)h(to)e(accept)h(input.)39
+b(When)21 b(a)g Ft(SIGINT)f Fu(is)h(receiv)o(ed,)j(the)d(Readline)i
+(signal)f(handler)75 1279 y(p)q(erforms)c(some)f(additional)j(w)o(ork,)
+d(whic)o(h)i(will)h(cause)e(an)o(y)g(partially-en)o(tered)h(line)h(to)d
+(b)q(e)i(ab)q(orted)75 1334 y(\(see)c(the)g(description)i(of)e
+Ft(rl_free_line_state)e(\(\))p Fu(\).)137 1399 y(There)i(is)h(an)f
+(additional)h(Readline)h(signal)f(handler,)g(for)e Ft(SIGWINCH)p
+Fu(,)g(whic)o(h)h(the)g(k)o(ernel)h(sends)g(to)75 1454
+y(a)i(pro)q(cess)h(whenev)o(er)h(the)e(terminal's)h(size)h(c)o(hanges)f
+(\(for)f(example,)i(if)f(a)f(user)h(resizes)h(an)e Ft(xterm)p
+Fu(\).)75 1509 y(The)k(Readline)h Ft(SIGWINCH)d Fu(handler)j(up)q
+(dates)e(Readline's)i(in)o(ternal)g(screen)e(size)i(state,)e(and)h
+(then)75 1563 y(calls)c(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g
+(the)f(calling)i(application)f(has)f(installed.)27 b(Readline)19
+b(calls)f(the)75 1618 y(application's)h Ft(SIGWINCH)d
+Fu(signal)j(handler)f(without)g(resetting)g(the)f(terminal)i(to)e(its)g
+(original)i(state.)75 1673 y(If)d(the)g(application's)h(signal)g
+(handler)g(do)q(es)g(more)e(than)h(up)q(date)h(its)f(idea)h(of)e(the)h
+(terminal)h(size)g(and)75 1728 y(return)e(\(for)f(example,)h(a)g
+Ft(longjmp)f Fu(bac)o(k)g(to)h(a)f(main)h(pro)q(cessing)h(lo)q(op\),)f
+(it)g Fm(m)o(ust)g Fu(call)i Ft(rl_cleanup_)75 1783 y(after_signal)d
+(\(\))g Fu(\(describ)q(ed)j(b)q(elo)o(w\),)e(to)g(restore)f(the)i
+(terminal)g(state.)137 1847 y(Readline)h(pro)o(vides)e(t)o(w)o(o)e(v)m
+(ariables)i(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g
+(whether)h(or)e(not)75 1902 y(it)k(will)h(catc)o(h)e(certain)h(signals)
+h(and)f(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25
+b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 1957 y(applications)j(c)o
+(hange)e(the)g(v)m(alues)i(of)d(these)i(v)m(ariables)g(only)g(when)g
+(calling)g Ft(readline)d(\(\))p Fu(,)h(not)h(in)h(a)75
+2012 y(signal)e(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g
+(state)e(is)i(not)f(corrupted.)1661 2097 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 2097 18 3 v 21 w(catc)n(h)p
+366 2097 V 22 w(signals)195 2151 y Fu(If)h(this)h(v)m(ariable)g(is)g
+(non-zero,)g(Readline)i(will)e(install)h(signal)f(handlers)g(for)e
+Ft(SIGINT)p Fu(,)195 2206 y Ft(SIGQUIT)p Fu(,)14 b Ft(SIGTERM)p
+Fu(,)g Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)h Ft(SIGTTIN)p
+Fu(,)g(and)h Ft(SIGTTOU)p Fu(.)195 2271 y(The)g(default)h(v)m(alue)h
+(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1661 2356 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 2356 V 21 w(catc)n(h)p 366
+2356 V 22 w(sigwinc)n(h)195 2411 y Fu(If)15 b(this)h(v)m(ariable)g(is)g
+(non-zero,)f(Readline)i(will)g(install)f(a)f(signal)h(handler)g(for)e
+Ft(SIGWINCH)p Fu(.)195 2476 y(The)h(default)h(v)m(alue)h(of)d
+Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 2560 y(If)g(an)f(application)j
+(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)j(catc)o(h)e(an)o(y)
+f(signals,)h(or)f(to)f(handle)j(signals)75 2615 y(other)i(than)g(those)
+g(Readline)j(catc)o(hes)d(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h
+(Readline)i(pro)o(vides)d(con)o(v)o(enience)75 2670 y(functions)d(to)f
+(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o
+(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)p eop
+%%Page: 32 34
+32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)1650
+183 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 183
+18 3 v 21 w(clean)n(up)p 450 183 V 22 w(after)p 590 183
+V 20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 238 y Fu(This)12
+b(function)h(will)g(reset)f(the)g(state)f(of)g(the)h(terminal)h(to)e
+(what)g(it)h(w)o(as)f(b)q(efore)h Ft(readline)195 293
+y(\(\))f Fu(w)o(as)f(called,)j(and)e(remo)o(v)o(e)g(the)g(Readline)i
+(signal)f(handlers)g(for)e(all)i(signals,)h(dep)q(ending)195
+348 y(on)i(the)g(v)m(alues)i(of)e Ft(rl_catch_signals)d
+Fu(and)k Ft(rl_catch_sigwinch)p Fu(.)1650 437 y(F)l(unction)-1749
+b Fi(void)20 b Fh(rl)p 241 437 V 21 w(free)p 356 437
+V 20 w(line)p 464 437 V 23 w(state)j Fg(\()p Ft(void)p
+Fg(\))195 492 y Fu(This)e(will)h(free)e(an)o(y)g(partial)g(state)g
+(asso)q(ciated)g(with)g(the)h(curren)o(t)f(input)h(line)h(\(undo)195
+546 y(information,)d(an)o(y)f(partial)h(history)f(en)o(try)l(,)h(an)o
+(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)195
+601 y(and)c(an)o(y)f(partially-en)o(tered)i(n)o(umeric)f(argumen)o
+(t\).)k(This)c(should)h(b)q(e)f(called)h(b)q(efore)e
+Ft(rl_)195 656 y(cleanup_after_signal)f(\(\))p Fu(.)23
+b(The)16 b(Readline)j(signal)e(handler)g(for)f Ft(SIGINT)f
+Fu(calls)j(this)195 711 y(to)d(ab)q(ort)f(the)h(curren)o(t)h(input)g
+(line.)1650 800 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p
+241 800 V 21 w(reset)p 383 800 V 20 w(after)p 521 800
+V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 855 y Fu(This)d(will)h
+(reinitialize)i(the)c(terminal)i(and)e(reinstall)i(an)o(y)e(Readline)j
+(signal)e(handlers,)195 910 y(dep)q(ending)d(on)f(the)f(v)m(alues)h(of)
+f Ft(rl_catch_signals)e Fu(and)i Ft(rl_catch_sigwinch)p
+Fu(.)137 999 y(If)20 b(an)g(application)h(do)q(es)f(not)g(wish)g
+(Readline)i(to)d(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f(call)h
+Ft(rl_resize_)75 1054 y(terminal)14 b(\(\))i Fu(to)g(force)g(Readline)j
+(to)d(up)q(date)h(its)g(idea)g(of)f(the)g(terminal)i(size)f(when)g(a)f
+Ft(SIGWINCH)f Fu(is)75 1109 y(receiv)o(ed.)1650 1198
+y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1198 V
+21 w(resize)p 401 1198 V 22 w(terminal)j Fg(\()p Ft(void)p
+Fg(\))195 1253 y Fu(Up)q(date)16 b(Readline's)h(in)o(ternal)f(screen)f
+(size.)137 1342 y(The)h(follo)o(wing)g(functions)g(install)g(and)g
+(remo)o(v)o(e)e(Readline's)j(signal)f(handlers.)1650
+1431 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1431
+V 21 w(set)p 307 1431 V 20 w(signals)j Fg(\()p Ft(void)p
+Fg(\))195 1486 y Fu(Install)28 b(Readline's)g(signal)f(handler)h(for)e
+Ft(SIGINT)p Fu(,)i Ft(SIGQUIT)p Fu(,)f Ft(SIGTERM)p Fu(,)h
+Ft(SIGALRM)p Fu(,)195 1541 y Ft(SIGTSTP)p Fu(,)19 b Ft(SIGTTIN)p
+Fu(,)h Ft(SIGTTOU)p Fu(,)f(and)h Ft(SIGWINCH)p Fu(,)g(dep)q(ending)i
+(on)d(the)h(v)m(alues)h(of)e Ft(rl_)195 1596 y(catch_signals)13
+b Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)1650 1685 y(F)l(unction)-1749
+b Fi(int)20 b Fh(rl)p 215 1685 V 21 w(clear)p 354 1685
+V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1740 y Fu(Remo)o(v)o(e)15
+b(all)h(of)f(the)g(Readline)j(signal)e(handlers)g(installed)h(b)o(y)e
+Ft(rl_set_signals)e(\(\))p Fu(.)75 1865 y Fs(2.6)33 b(Custom)21
+b(Completers)137 1961 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h
+(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g
+(disam)o(biguating)75 2016 y(commands)i(and)f(data.)27
+b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can)
+f(pro)o(vide)i(completion)g(for)75 2070 y(commands,)14
+b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g
+(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75
+2125 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75
+2234 y Fl(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137
+2330 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i
+(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m
+(ailable.)75 2385 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f
+(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g
+(all)h(of)f(the)75 2439 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f
+(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)i(library)e
+(pro)o(vides)g(the)g(user)75 2494 y(in)o(terface)f(to)f(completion,)i
+(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:)
+23 b(\014lename)18 b(and)75 2549 y(username.)h(F)l(or)10
+b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f
+(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75
+2604 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g
+(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137
+2670 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q
+(erform)g(completion:)p eop
+%%Page: 33 35
+33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(33)100 183 y(1.)29 b(The)21 b(user-in)o(terface)g
+(function)g Ft(rl_complete)14 b(\(\))p Fu(.)35 b(This)21
+b(function)g(is)g(called)h(with)f(the)f(same)165 238
+y(argumen)o(ts)c(as)g(other)h(Readline)i(functions)f(in)o(tended)g(for)
+e(in)o(teractiv)o(e)i(use:)23 b Fm(coun)o(t)18 b Fu(and)f
+Fm(in)o(v)o(ok-)165 293 y(ing)p 228 293 14 2 v 17 w(k)o(ey)p
+Fu(.)34 b(It)20 b(isolates)g(the)g(w)o(ord)f(to)h(b)q(e)g(completed)h
+(and)f(calls)h Ft(completion_matches)13 b(\(\))20 b Fu(to)165
+348 y(generate)f(a)f(list)i(of)e(p)q(ossible)j(completions.)32
+b(It)18 b(then)i(either)f(lists)h(the)f(p)q(ossible)h(completions,)165
+402 y(inserts)g(the)f(p)q(ossible)j(completions,)f(or)e(actually)h(p)q
+(erforms)f(the)h(completion,)h(dep)q(ending)h(on)165
+457 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)100
+525 y(2.)29 b(The)11 b(in)o(ternal)g(function)g Ft(completion_matches)i
+(\(\))d Fu(uses)h(y)o(our)e Fm(generator)k Fu(function)e(to)f(generate)
+165 580 y(the)16 b(list)h(of)f(p)q(ossible)i(matc)o(hes,)d(and)h(then)h
+(returns)f(the)g(arra)o(y)f(of)g(these)i(matc)o(hes.)22
+b(Y)l(ou)16 b(should)165 635 y(place)g(the)f(address)h(of)e(y)o(our)h
+(generator)f(function)i(in)g Ft(rl_completion_entry_function)p
+Fu(.)100 703 y(3.)29 b(The)19 b(generator)e(function)j(is)f(called)h
+(rep)q(eatedly)f(from)f Ft(completion_matches)13 b(\(\))p
+Fu(,)18 b(returning)165 758 y(a)e(string)g(eac)o(h)h(time.)24
+b(The)17 b(argumen)o(ts)e(to)h(the)g(generator)g(function)h(are)f
+Fm(text)h Fu(and)g Fm(state)p Fu(.)22 b Fm(text)165 813
+y Fu(is)17 b(the)f(partial)g(w)o(ord)f(to)h(b)q(e)h(completed.)23
+b Fm(state)18 b Fu(is)e(zero)g(the)g(\014rst)g(time)g(the)g(function)h
+(is)g(called,)165 868 y(allo)o(wing)f(the)e(generator)g(to)g(p)q
+(erform)h(an)o(y)f(necessary)h(initialization,)j(and)d(a)f(p)q(ositiv)o
+(e)i(non-zero)165 922 y(in)o(teger)i(for)f(eac)o(h)g(subsequen)o(t)h
+(call.)28 b(When)18 b(the)g(generator)f(function)h(returns)f
+Ft(\(char)e(*\)NULL)165 977 y Fu(this)h(signals)h Ft
+(completion_matches)c(\(\))i Fu(that)g(there)h(are)g(no)g(more)f(p)q
+(ossibilitie)q(s)j(left.)23 b(Usually)165 1032 y(the)c(generator)g
+(function)h(computes)g(the)f(list)h(of)f(p)q(ossible)i(completions)g
+(when)e Fm(state)j Fu(is)d(zero,)165 1087 y(and)13 b(returns)g(them)f
+(one)h(at)f(a)h(time)g(on)g(subsequen)o(t)g(calls.)20
+b(Eac)o(h)13 b(string)f(the)h(generator)f(function)165
+1141 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h(b)q(e)g(allo)q(cated)h
+(with)g Ft(malloc\(\))p Fu(;)d(Readline)19 b(frees)d(the)g(strings)f
+(when)165 1196 y(it)g(has)h(\014nished)g(with)g(them.)1650
+1292 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1292
+18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
+(invoking_key)p Fg(\))195 1347 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g
+(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j
+(the)e(function)h(that)195 1402 y(do)q(es)15 b(the)g(initial)h(simple)h
+(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches)
+195 1456 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g
+(\014lename)h(completion.)1661 1552 y(V)l(ariable)-1749
+b Fi(Function)20 b(*)g Fh(rl)p 391 1552 V 21 w(completion)p
+686 1552 V 21 w(en)n(try)p 839 1552 V 21 w(function)195
+1607 y Fu(This)c(is)f(a)g(p)q(oin)o(ter)g(to)g(the)g(generator)f
+(function)i(for)e Ft(completion_matches)f(\(\))p Fu(.)20
+b(If)15 b(the)195 1662 y(v)m(alue)21 b(of)e Ft
+(rl_completion_entry_functio)o(n)e Fu(is)j Ft(\(Function)14
+b(*\)NULL)19 b Fu(then)h(the)f(de-)195 1717 y(fault)11
+b(\014lename)h(generator)d(function,)j Ft(filename_completion_function)
+g(\(\))p Fu(,)f(is)g(used.)75 1832 y Fl(2.6.2)30 b(Completion)20
+b(F)-5 b(unctions)137 1930 y Fu(Here)16 b(is)f(the)h(complete)g(list)g
+(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.)
+1650 2026 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215
+2026 V 21 w(complete)p 460 2026 V 21 w(in)n(ternal)k
+Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 2081 y Fu(Complete)k(the)f
+(w)o(ord)g(at)g(or)g(b)q(efore)g(p)q(oin)o(t.)30 b Fm(what)p
+1105 2081 14 2 v 16 w(to)p 1162 2081 V 16 w(do)21 b Fu(sa)o(ys)c(what)h
+(to)g(do)g(with)h(the)195 2136 y(completion.)33 b(A)19
+b(v)m(alue)h(of)f(`)p Ft(?)p Fu(')f(means)h(list)h(the)f(p)q(ossible)i
+(completions.)33 b(`)p Ft(TAB)p Fu(')18 b(means)195 2191
+y(do)g(standard)g(completion.)30 b(`)p Ft(*)p Fu(')18
+b(means)g(insert)g(all)i(of)d(the)i(p)q(ossible)h(completions.)30
+b(`)p Ft(!)p Fu(')195 2245 y(means)17 b(to)f(displa)o(y)i(all)g(of)e
+(the)h(p)q(ossible)i(completions,)f(if)f(there)g(is)g(more)g(than)f
+(one,)h(as)195 2300 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f
+(completion.)1650 2396 y(F)l(unction)-1749 b Fi(int)20
+b Fh(rl)p 215 2396 18 3 v 21 w(complete)j Fg(\()p Ft(int)14
+b(ignore,)g(int)h(invoking_key)p Fg(\))195 2451 y Fu(Complete)20
+b(the)g(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)34
+b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j(the)e(function)h(that)195
+2506 y(do)q(es)15 b(the)g(initial)h(simple)h(matc)o(hing)d(selection)i
+(algorithm)f(\(see)f Ft(completion_matches)195 2560 y(\(\))h
+Fu(and)h Ft(rl_completion_entry_functi)o(on)p Fu(\).)i(The)e(default)g
+(is)g(to)f(do)g(\014lename)i(com-)195 2615 y(pletion.)k(This)15
+b(calls)g Ft(rl_complete_internal)e(\(\))h Fu(with)h(an)f(argumen)o(t)f
+(dep)q(ending)k(on)195 2670 y Fm(in)o(v)o(oking)p 364
+2670 14 2 v 17 w(k)o(ey)p Fu(.)p eop
+%%Page: 34 36
+34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)i(Library)1650
+183 y(F)l(unction)-1749 b Fi(int)19 b Fh(rl)p 214 183
+18 3 v 21 w(p)r(ossible)p 432 183 V 20 w(completions)k
+Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))195
+238 y Fu(List)k(the)f(p)q(ossible)i(completions.)29 b(See)19
+b(description)h(of)d Ft(rl_complete)d(\(\))p Fu(.)28
+b(This)19 b(calls)195 293 y Ft(rl_complete_internal)12
+b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p
+Fu('.)1650 396 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p
+215 396 V 21 w(insert)p 378 396 V 21 w(completions)j
+Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195
+451 y Fu(Insert)24 b(the)h(list)f(of)g(p)q(ossible)i(completions)f(in)o
+(to)f(the)g(line,)k(deleting)e(the)e(partially-)195 505
+y(completed)16 b(w)o(ord.)j(See)c(description)i(of)d
+Ft(rl_complete)g(\(\))p Fu(.)19 b(This)d(calls)g Ft(rl_complete_)195
+560 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p
+Ft(*)p Fu('.)1650 663 y(F)l(unction)-1749 b Fi(char)20
+b(**)f Fh(completion)p 547 663 V 21 w(matc)n(hes)j Fg(\()p
+Ft(char)15 b(*text,)f(CPFunction)283 718 y(*entry_func)p
+Fg(\))195 773 y Fu(Returns)f(an)f(arra)o(y)f(of)h Ft(\(char)j(*\))d
+Fu(whic)o(h)h(is)g(a)f(list)h(of)f(completions)i(for)e
+Fm(text)p Fu(.)18 b(If)13 b(there)f(are)195 828 y(no)17
+b(completions,)g(returns)g Ft(\(char)d(**\)NULL)p Fu(.)23
+b(The)17 b(\014rst)f(en)o(try)g(in)i(the)e(returned)h(arra)o(y)195
+882 y(is)c(the)h(substitution)f(for)g Fm(text)p Fu(.)18
+b(The)13 b(remaining)i(en)o(tries)e(are)f(the)i(p)q(ossible)g
+(completions.)195 937 y(The)h(arra)o(y)f(is)i(terminated)g(with)f(a)g
+Ft(NULL)g Fu(p)q(oin)o(ter.)195 1010 y Fm(en)o(try)p
+302 1010 14 2 v 16 w(func)g Fu(is)d(a)f(function)h(of)g(t)o(w)o(o)e
+(args,)h(and)g(returns)h(a)f Ft(\(char)k(*\))p Fu(.)j(The)12
+b(\014rst)f(argumen)o(t)195 1065 y(is)j Fm(text)p Fu(.)19
+b(The)14 b(second)g(is)g(a)f(state)f(argumen)o(t;)h(it)h(is)g(zero)f
+(on)h(the)f(\014rst)g(call,)i(and)f(non-zero)195 1120
+y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714
+1120 V 16 w(func)c Fu(returns)d(a)f Ft(NULL)h Fu(p)q(oin)o(ter)g(to)f
+(the)h(caller)h(when)g(there)195 1174 y(are)g(no)g(more)g(matc)o(hes.)
+1650 1277 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(\014lename)p
+455 1277 18 3 v 20 w(completion)p 749 1277 V 21 w(function)k
+Fg(\()p Ft(char)15 b(*text,)f(int)283 1332 y(state)p
+Fg(\))195 1387 y Fu(A)19 b(generator)g(function)h(for)f(\014lename)h
+(completion)h(in)f(the)f(general)h(case.)33 b(Note)19
+b(that)195 1442 y(completion)e(in)f(Bash)f(is)h(a)f(little)i
+(di\013eren)o(t)f(b)q(ecause)g(of)f(all)h(the)g(pathnames)f(that)g(m)o
+(ust)195 1497 y(b)q(e)i(follo)o(w)o(ed)g(when)g(lo)q(oking)h(up)f
+(completions)h(for)e(a)g(command.)24 b(The)17 b(Bash)g(source)f(is)195
+1551 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h
+(functions.)1650 1654 y(F)l(unction)-1749 b Fi(char)20
+b(*)f Fh(username)p 487 1654 V 19 w(completion)p 780
+1654 V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283
+1709 y(state)p Fg(\))195 1764 y Fu(A)k(completion)g(generator)f(for)g
+(usernames.)28 b Fm(text)18 b Fu(con)o(tains)f(a)h(partial)g(username)g
+(pre-)195 1819 y(ceded)f(b)o(y)f(a)g(random)f(c)o(haracter)h(\(usually)
+h(`)p Ft(~)p Fu('\).)k(As)16 b(with)g(all)h(completion)g(generators,)
+195 1874 y Fm(state)g Fu(is)f(zero)f(on)g(the)g(\014rst)g(call)h(and)g
+(non-zero)f(for)g(subsequen)o(t)h(calls.)75 1997 y Fl(2.6.3)30
+b(Completion)20 b(V)-5 b(ariables)1661 2129 y Fu(V)l(ariable)-1749
+b Fi(Function)20 b(*)g Fh(rl)p 391 2129 V 21 w(completion)p
+686 2129 V 21 w(en)n(try)p 839 2129 V 21 w(function)195
+2183 y Fu(A)c(p)q(oin)o(ter)h(to)e(the)i(generator)e(function)i(for)e
+Ft(completion_matches)e(\(\))p Fu(.)22 b Ft(NULL)16 b
+Fu(means)195 2238 y(to)f(use)g Ft(filename_entry_function)d(\(\))p
+Fu(,)j(the)g(default)h(\014lename)g(completer.)1661 2341
+y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p
+469 2341 V 21 w(attempted)p 749 2341 V 20 w(completion)p
+1043 2341 V 21 w(function)195 2396 y Fu(A)d(p)q(oin)o(ter)h(to)f(an)g
+(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)23
+b(The)16 b(function)i(is)e(called)195 2451 y(with)f Fm(text)p
+Fu(,)g Fm(start)p Fu(,)e(and)i Fm(end)p Fu(.)21 b Fm(start)15
+b Fu(and)g Fm(end)i Fu(are)e(indices)i(in)f Ft(rl_line_buffer)d
+Fu(sa)o(ying)195 2506 y(what)22 b(the)h(b)q(oundaries)h(of)e
+Fm(text)h Fu(are.)42 b(If)23 b(this)g(function)h(exists)f(and)f
+(returns)h Ft(NULL)p Fu(,)195 2560 y(or)c(if)h(this)g(v)m(ariable)h(is)
+f(set)g(to)e Ft(NULL)p Fu(,)i(then)g Ft(rl_complete)14
+b(\(\))19 b Fu(will)i(call)g(the)f(v)m(alue)g(of)195
+2615 y Ft(rl_completion_entry_functi)o(on)14 b Fu(to)j(generate)g(matc)
+o(hes,)g(otherwise)g(the)g(arra)o(y)f(of)195 2670 y(strings)f(returned)
+h(will)h(b)q(e)e(used.)p eop
+%%Page: 35 37
+35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(35)1661 183 y(V)l(ariable)-1749 b Fi(CPFunction)21
+b(*)e Fh(rl)p 443 183 18 3 v 21 w(\014lename)p 672 183
+V 20 w(quoting)p 881 183 V 21 w(function)195 238 y Fu(A)g(p)q(oin)o
+(ter)g(to)f(a)h(function)g(that)g(will)h(quote)f(a)f(\014lename)i(in)g
+(an)e(application-)j(sp)q(eci\014c)195 293 y(fashion.)33
+b(This)20 b(is)g(called)h(if)f(\014lename)g(completion)h(is)f(b)q(eing)
+g(attempted)f(and)h(one)f(of)195 348 y(the)13 b(c)o(haracters)f(in)h
+Ft(rl_filename_quote_characte)o(rs)d Fu(app)q(ears)i(in)i(a)e
+(completed)i(\014le-)195 402 y(name.)29 b(The)18 b(function)h(is)g
+(called)h(with)e Fm(text)p Fu(,)g Fm(matc)o(h)p 1144
+402 14 2 v 16 w(t)o(yp)q(e)p Fu(,)h(and)f Fm(quote)p
+1480 402 V 16 w(p)q(oin)o(ter)p Fu(.)30 b(The)195 457
+y Fm(text)17 b Fu(is)h(the)f(\014lename)h(to)e(b)q(e)h(quoted.)25
+b(The)17 b Fm(matc)o(h)p 1115 457 V 16 w(t)o(yp)q(e)i
+Fu(is)f(either)f Ft(SINGLE_MATCH)p Fu(,)e(if)195 512
+y(there)j(is)g(only)h(one)f(completion)h(matc)o(h,)f(or)f
+Ft(MULT_MATCH)p Fu(.)27 b(Some)18 b(functions)g(use)h(this)195
+567 y(to)13 b(decide)i(whether)f(or)g(not)f(to)g(insert)h(a)f(closing)i
+(quote)f(c)o(haracter.)k(The)c Fm(quote)p 1600 567 V
+16 w(p)q(oin)o(ter)195 622 y Fu(is)20 b(a)g(p)q(oin)o(ter)g(to)f(an)o
+(y)g(op)q(ening)i(quote)e(c)o(haracter)g(the)h(user)g(t)o(yp)q(ed.)34
+b(Some)19 b(functions)195 676 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o
+(haracter.)1661 765 y(V)l(ariable)-1749 b Fi(CPFunction)21
+b(*)e Fh(rl)p 443 765 18 3 v 21 w(\014lename)p 672 765
+V 20 w(dequoting)p 939 765 V 21 w(function)195 820 y
+Fu(A)14 b(p)q(oin)o(ter)g(to)e(a)i(function)g(that)f(will)i(remo)o(v)o
+(e)e(application-sp)q(eci\014c)k(quoting)d(c)o(haracters)195
+875 y(from)21 b(a)g(\014lename)h(b)q(efore)f(completion)i(is)f
+(attempted,)g(so)f(those)g(c)o(haracters)f(do)h(not)195
+930 y(in)o(terfere)e(with)f(matc)o(hing)h(the)f(text)g(against)g(names)
+g(in)h(the)f(\014lesystem.)30 b(It)19 b(is)f(called)195
+985 y(with)g Fm(text)p Fu(,)g(the)g(text)g(of)g(the)g(w)o(ord)f(to)g(b)
+q(e)i(dequoted,)g(and)f Fm(quote)p 1381 985 14 2 v 16
+w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 1039 y(quoting)e(c)o
+(haracter)f(that)g(delimits)i(the)f(\014lename)h(\(usually)f(`)p
+Ft(')p Fu(')f(or)g(`)p Ft(")p Fu('\).)23 b(If)17 b Fm(quote)p
+1657 1039 V 16 w(c)o(har)195 1094 y Fu(is)f(zero,)e(the)i(\014lename)g
+(w)o(as)e(not)h(in)h(an)f(em)o(b)q(edded)i(string.)1661
+1183 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p
+391 1183 18 3 v 21 w(c)n(har)p 519 1183 V 20 w(is)p 577
+1183 V 22 w(quoted)p 770 1183 V 20 w(p)195 1238 y Fu(A)c(p)q(oin)o(ter)
+g(to)f(a)h(function)g(to)g(call)g(that)g(determines)g(whether)g(or)g
+(not)f(a)g(sp)q(eci\014c)j(c)o(har-)195 1293 y(acter)12
+b(in)i(the)f(line)i(bu\013er)e(is)g(quoted,)g(according)h(to)e(whatev)o
+(er)g(quoting)h(mec)o(hanism)h(the)195 1348 y(program)e(calling)j
+(readline)g(uses.)20 b(The)13 b(function)h(is)g(called)h(with)f(t)o(w)o
+(o)e(argumen)o(ts:)18 b Fm(text)p Fu(,)195 1403 y(the)11
+b(text)g(of)g(the)g(line,)i(and)f Fm(index)p Fu(,)g(the)g(index)g(of)f
+(the)g(c)o(haracter)g(in)h(the)f(line.)20 b(It)11 b(is)h(used)g(to)195
+1457 y(decide)20 b(whether)e(a)g(c)o(haracter)g(found)h(in)g
+Ft(rl_completer_word_break_)o(charact)o(ers)195 1512
+y Fu(should)d(b)q(e)g(used)g(to)e(break)i(w)o(ords)e(for)h(the)g
+(completer.)1661 1601 y(V)l(ariable)-1749 b Fi(int)20
+b Fh(rl)p 215 1601 V 21 w(completion)p 510 1601 V 21
+w(query)p 673 1601 V 21 w(items)195 1656 y Fu(Up)d(to)e(this)i(man)o(y)
+f(items)h(will)h(b)q(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)f(a)g
+(p)q(ossible-completions)195 1711 y(call.)26 b(After)16
+b(that,)g(w)o(e)h(ask)f(the)h(user)g(if)g(she)g(is)h(sure)e(she)i(w)o
+(an)o(ts)d(to)h(see)h(them)g(all.)26 b(The)195 1766 y(default)16
+b(v)m(alue)g(is)g(100.)1661 1855 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 1855 V 21 w(basic)p 430
+1855 V 21 w(w)n(ord)p 575 1855 V 21 w(break)p 736 1855
+V 20 w(c)n(haracters)195 1910 y Fu(The)13 b(basic)h(list)f(of)g(c)o
+(haracters)f(that)g(signal)i(a)e(break)h(b)q(et)o(w)o(een)g(w)o(ords)f
+(for)g(the)h(completer)195 1964 y(routine.)20 b(The)c(default)g(v)m
+(alue)g(of)f(this)g(v)m(ariable)i(is)f(the)f(c)o(haracters)g(whic)o(h)h
+(break)f(w)o(ords)195 2019 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g
+Ft(")g(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 2108 y(V)l(ariable)-1749
+b Fi(char)20 b(*)f Fh(rl)p 286 2108 V 21 w(basic)p 430
+2108 V 21 w(quote)p 590 2108 V 21 w(c)n(haracters)195
+2163 y Fu(List)d(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)f(cause)h
+(a)f(w)o(ord)f(break.)1661 2252 y(V)l(ariable)-1749 b
+Fi(char)20 b(*)f Fh(rl)p 286 2252 V 21 w(completer)p
+555 2252 V 21 w(w)n(ord)p 700 2252 V 20 w(break)p 860
+2252 V 20 w(c)n(haracters)195 2307 y Fu(The)j(list)g(of)f(c)o
+(haracters)g(that)g(signal)h(a)g(break)f(b)q(et)o(w)o(een)h(w)o(ords)f
+(for)g Ft(rl_complete_)195 2362 y(internal)14 b(\(\))p
+Fu(.)k(The)10 b(default)h(list)g(is)g(the)f(v)m(alue)h(of)f
+Ft(rl_basic_word_break_charac)o(ters)p Fu(.)p 1909 2366
+21 36 v 1661 2451 a(V)l(ariable)-1749 b Fi(char)20 b(*)f
+Fh(rl)p 286 2451 18 3 v 21 w(completer)p 555 2451 V 21
+w(quote)p 715 2451 V 21 w(c)n(haracters)195 2506 y Fu(List)11
+b(of)g(c)o(haracters)f(whic)o(h)h(can)g(b)q(e)h(used)f(to)g(quote)f(a)h
+(substring)g(of)f(the)h(line.)20 b(Completion)195 2560
+y(o)q(ccurs)c(on)g(the)g(en)o(tire)g(substring,)g(and)g(within)h(the)e
+(substring)h Ft(rl_completer_word_)195 2615 y(break_characters)d
+Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they)
+f(also)g(app)q(ear)195 2670 y(within)h(this)g(list.)p
+eop
+%%Page: 36 38
+36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)1661
+183 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286
+183 18 3 v 21 w(\014lename)p 515 183 V 20 w(quote)p 674
+183 V 21 w(c)n(haracters)195 238 y Fu(A)d(list)g(of)g(c)o(haracters)e
+(that)h(cause)h(a)g(\014lename)h(to)e(b)q(e)h(quoted)g(b)o(y)f(the)h
+(completer)g(when)195 293 y(they)f(app)q(ear)h(in)g(a)f(completed)h
+(\014lename.)21 b(The)15 b(default)h(is)g(the)f(n)o(ull)i(string.)1661
+398 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286
+398 V 21 w(sp)r(ecial)p 473 398 V 22 w(pre\014xes)195
+452 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)g(w)o(ord)g
+(break)h(c)o(haracters,)f(but)h(should)g(b)q(e)h(left)f(in)g
+Fm(text)195 507 y Fu(when)19 b(it)g(is)g(passed)f(to)g(the)h
+(completion)g(function.)31 b(Programs)17 b(can)h(use)h(this)g(to)f
+(help)195 562 y(determine)e(what)e(kind)i(of)e(completing)i(to)e(do.)19
+b(F)l(or)14 b(instance,)h(Bash)g(sets)f(this)i(v)m(ariable)195
+617 y(to)f Ft(")p Fu($)p Ft(@")f Fu(so)h(that)f(it)i(can)f(complete)h
+(shell)h(v)m(ariables)f(and)g(hostnames.)1661 722 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 722 V 21 w(completion)p 510
+722 V 21 w(app)r(end)p 715 722 V 19 w(c)n(haracter)195
+776 y Fu(When)15 b(a)e(single)j(completion)f(alternativ)o(e)f(matc)o
+(hes)g(at)g(the)g(end)h(of)e(the)i(command)f(line,)195
+831 y(this)20 b(c)o(haracter)e(is)i(app)q(ended)h(to)d(the)i(inserted)g
+(completion)g(text.)31 b(The)20 b(default)g(is)f(a)195
+886 y(space)14 b(c)o(haracter)f(\(`)i('\).)j(Setting)c(this)h(to)e(the)
+h(n)o(ull)h(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))f(prev)o(en)o(ts)i(an)
+o(ything)195 941 y(b)q(eing)24 b(app)q(ended)g(automatically)l(.)42
+b(This)23 b(can)g(b)q(e)g(c)o(hanged)f(in)i(custom)e(completion)195
+996 y(functions)15 b(to)e(pro)o(vide)i(the)f(\\most)f(sensible)j(w)o
+(ord)d(separator)g(c)o(haracter")g(according)i(to)195
+1050 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d
+(sp)q(eci\014cation.)1661 1155 y(V)l(ariable)-1749 b
+Fi(int)20 b Fh(rl)p 215 1155 V 21 w(ignore)p 391 1155
+V 20 w(completion)p 685 1155 V 21 w(duplicates)195 1210
+y Fu(If)15 b(non-zero,)h(then)f(disallo)o(w)h(duplicates)h(in)f(the)g
+(matc)o(hes.)j(Default)c(is)h(1.)1661 1315 y(V)l(ariable)-1749
+b Fi(int)20 b Fh(rl)p 215 1315 V 21 w(\014lename)p 444
+1315 V 20 w(completion)p 738 1315 V 21 w(desired)195
+1369 y Fu(Non-zero)15 b(means)g(that)g(the)g(results)h(of)f(the)g(matc)
+o(hes)g(are)f(to)h(b)q(e)h(treated)f(as)f(\014lenames.)195
+1424 y(This)e(is)h Fm(alw)o(a)o(ys)f Fu(zero)g(on)g(en)o(try)l(,)g(and)
+g(can)f(only)i(b)q(e)f(c)o(hanged)g(within)h(a)e(completion)i(en)o(try)
+195 1479 y(generator)f(function.)20 b(If)14 b(it)f(is)h(set)f(to)g(a)g
+(non-zero)g(v)m(alue,)i(directory)e(names)h(ha)o(v)o(e)f(a)g(slash)195
+1534 y(app)q(ended)k(and)f(Readline)h(attempts)e(to)f(quote)i
+(completed)g(\014lenames)g(if)g(they)g(con)o(tain)195
+1589 y(an)o(y)f(em)o(b)q(edded)i(w)o(ord)d(break)h(c)o(haracters.)1661
+1693 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1693
+V 21 w(\014lename)p 444 1693 V 20 w(quoting)p 653 1693
+V 21 w(desired)195 1748 y Fu(Non-zero)c(means)f(that)g(the)h(results)g
+(of)g(the)f(matc)o(hes)h(are)f(to)g(b)q(e)h(quoted)g(using)h(double)195
+1803 y(quotes)12 b(\(or)f(an)g(application-sp)q(eci)q(\014c)k(quoting)d
+(mec)o(hanism\))g(if)g(the)g(completed)h(\014lename)195
+1858 y(con)o(tains)f(an)o(y)g(c)o(haracters)g(in)h Ft
+(rl_filename_quote_chars)p Fu(.)j(This)c(is)h Fm(alw)o(a)o(ys)h
+Fu(non-zero)195 1913 y(on)d(en)o(try)l(,)g(and)h(can)f(only)h(b)q(e)g
+(c)o(hanged)f(within)h(a)f(completion)i(en)o(try)d(generator)g
+(function.)195 1967 y(The)16 b(quoting)h(is)g(e\013ected)f(via)h(a)e
+(call)j(to)d(the)i(function)g(p)q(oin)o(ted)g(to)e(b)o(y)i
+Ft(rl_filename_)195 2022 y(quoting_function)p Fu(.)1661
+2127 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2127
+V 21 w(inhibit)p 399 2127 V 23 w(completion)195 2182
+y Fu(If)15 b(this)f(v)m(ariable)i(is)f(non-zero,)f(completion)i(is)f
+(inhibit)p Ft(<)p Fu(ed.)22 b(The)14 b(completion)i(c)o(haracter)195
+2236 y(will)h(b)q(e)f(inserted)g(as)f(an)o(y)f(other)h(b)q(ound)h(to)f
+Ft(self-insert)p Fu(.)1661 2341 y(V)l(ariable)-1749 b
+Fi(Function)20 b(*)g Fh(rl)p 391 2341 V 21 w(ignore)p
+567 2341 V 20 w(some)p 714 2341 V 19 w(completions)p
+1030 2341 V 21 w(function)195 2396 y Fu(This)15 b(function,)g(if)f
+(de\014ned,)i(is)e(called)i(b)o(y)e(the)h(completer)f(when)h(real)g
+(\014lename)g(comple-)195 2451 y(tion)k(is)g(done,)g(after)f(all)i(the)
+f(matc)o(hing)f(names)h(ha)o(v)o(e)f(b)q(een)i(generated.)30
+b(It)19 b(is)g(passed)195 2506 y(a)h Ft(NULL)f Fu(terminated)h(arra)o
+(y)f(of)g(matc)o(hes.)34 b(The)20 b(\014rst)g(elemen)o(t)h(\()p
+Ft(matches[0])p Fu(\))c(is)k(the)195 2560 y(maximal)e(substring)f
+(common)g(to)g(all)h(matc)o(hes.)29 b(This)19 b(function)g(can)f
+(re-arrange)g(the)195 2615 y(list)h(of)e(matc)o(hes)h(as)f(required,)i
+(but)f(eac)o(h)g(elemen)o(t)h(deleted)g(from)e(the)h(arra)o(y)f(m)o
+(ust)g(b)q(e)195 2670 y(freed.)p eop
+%%Page: 37 39
+37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(37)1661 183 y(V)l(ariable)-1749 b Fi(Function)20
+b(*)g Fh(rl)p 391 183 18 3 v 21 w(directory)p 639 183
+V 21 w(completion)p 934 183 V 21 w(ho)r(ok)195 238 y
+Fu(This)13 b(function,)h(if)g(de\014ned,)g(is)f(allo)o(w)o(ed)h(to)e
+(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)g(\014lenames)195
+293 y(Readline)k(completes.)j(It)15 b(is)g(called)h(with)f(the)g
+(address)g(of)f(a)g(string)h(\(the)f(curren)o(t)h(direc-)195
+348 y(tory)f(name\))g(as)h(an)f(argumen)o(t.)19 b(It)c(could)h(b)q(e)f
+(used)h(to)e(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)195
+402 y(v)m(ariables)j(in)f(pathnames.)1661 495 y(V)l(ariable)-1749
+b Fi(VFunction)20 b(*)g Fh(rl)p 417 495 V 21 w(completion)p
+712 495 V 21 w(displa)n(y)p 906 495 V 22 w(matc)n(hes)p
+1131 495 V 20 w(ho)r(ok)195 549 y Fu(If)g(non-zero,)g(then)f(this)h(is)
+g(the)f(address)h(of)f(a)g(function)h(to)f(call)h(when)g(completing)g
+(a)195 604 y(w)o(ord)h(w)o(ould)h(normally)h(displa)o(y)g(the)f(list)h
+(of)e(p)q(ossible)j(matc)o(hes.)39 b(This)23 b(function)f(is)195
+659 y(called)d(in)f(lieu)h(of)e(Readline)j(displa)o(ying)f(the)e(list.)
+27 b(It)18 b(tak)o(es)e(three)i(argumen)o(ts:)23 b(\()p
+Ft(char)195 714 y(**)p Fm(matc)o(hes)p Fu(,)g Ft(int)e
+Fm(n)o(um)p 623 714 14 2 v 17 w(matc)o(hes)p Fu(,)h Ft(int)g
+Fm(max)p 1015 714 V 16 w(length)p Fu(\))g(where)g Fm(matc)o(hes)i
+Fu(is)e(the)g(arra)o(y)195 769 y(of)17 b(matc)o(hing)h(strings,)f
+Fm(n)o(um)p 702 769 V 17 w(matc)o(hes)h Fu(is)g(the)g(n)o(um)o(b)q(er)g
+(of)f(strings)g(in)h(that)f(arra)o(y)l(,)g(and)195 823
+y Fm(max)p 283 823 V 16 w(length)f Fu(is)h(the)e(length)i(of)e(the)h
+(longest)g(string)f(in)i(that)e(arra)o(y)l(.)20 b(Readline)e(pro)o
+(vides)195 878 y(a)d(con)o(v)o(enience)i(function,)g
+Ft(rl_display_match_list)p Fu(,)12 b(that)j(tak)o(es)g(care)g(of)h
+(doing)g(the)195 933 y(displa)o(y)k(to)f(Readline's)i(output)f(stream.)
+31 b(That)19 b(function)h(ma)o(y)f(b)q(e)h(called)h(from)e(this)195
+988 y(ho)q(ok.)75 1100 y Fl(2.6.4)30 b(A)21 b(Short)f(Completion)g
+(Example)137 1196 y Fu(Here)11 b(is)f(a)g(small)h(application)h
+(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)i(library)l(.)19
+b(It)11 b(is)f(called)75 1251 y Ft(fileman)p Fu(,)17
+b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p Ft
+(examples/fileman.c)p Fu('.)25 b(This)18 b(sample)g(application)75
+1306 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i
+(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p
+eop
+%%Page: 38 40
+38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)195
+183 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h
+(demonstrates)g(how)g(to)h(use)f(the)267 235 y(GNU)g(Readline)g
+(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users)
+267 287 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195
+391 y(#include)f(<stdio.h>)195 443 y(#include)g(<sys/types.h>)195
+495 y(#include)g(<sys/file.h>)195 546 y(#include)g(<sys/stat.h>)195
+598 y(#include)g(<sys/errno.h>)195 702 y(#include)g
+(<readline/readline.h>)195 754 y(#include)g(<readline/history.h>)195
+858 y(extern)g(char)g(*getwd)g(\(\);)195 910 y(extern)g(char)g
+(*xmalloc)g(\(\);)195 1013 y(/*)h(The)f(names)g(of)h(functions)e(that)i
+(actually)f(do)g(the)h(manipulation.)e(*/)195 1065 y(int)h(com_list)g
+(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i(com_stat)f(\(\),)g
+(com_pwd)g(\(\);)195 1117 y(int)g(com_delete)g(\(\),)g(com_help)g
+(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)195 1221 y(/*)h(A)f
+(structure)g(which)g(contains)g(information)f(on)i(the)f(commands)g
+(this)g(program)267 1273 y(can)g(understand.)f(*/)195
+1377 y(typedef)h(struct)g({)243 1429 y(char)g(*name;)g(/*)h(User)f
+(printable)g(name)g(of)h(the)f(function.)g(*/)243 1480
+y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.)
+h(*/)243 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h
+(function.)46 b(*/)195 1584 y(})24 b(COMMAND;)195 1688
+y(COMMAND)f(commands[])f(=)i({)243 1740 y({)f("cd",)h(com_cd,)f
+("Change)f(to)i(directory)f(DIR")g(},)243 1792 y({)g("delete",)g
+(com_delete,)f("Delete)h(FILE")h(},)243 1844 y({)f("help",)g(com_help,)
+g("Display)g(this)g(text")g(},)243 1896 y({)g("?",)h(com_help,)e
+("Synonym)h(for)h(`help'")f(},)243 1947 y({)g("list",)g(com_list,)g
+("List)g(files)g(in)h(DIR")f(},)243 1999 y({)g("ls",)h(com_list,)e
+("Synonym)h(for)g(`list'")g(},)243 2051 y({)g("pwd",)g(com_pwd,)g
+("Print)g(the)h(current)f(working)g(directory")f(},)243
+2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243
+2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g
+(},)243 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g
+(on)h(FILE")f(},)243 2259 y({)g("view",)g(com_view,)g("View)g(the)h
+(contents)e(of)i(FILE")f(},)243 2311 y({)g(\(char)h(*\)NULL,)f
+(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 2363
+y(};)195 2466 y(/*)h(Forward)e(declarations.)h(*/)195
+2518 y(char)g(*stripwhite)g(\(\);)195 2570 y(COMMAND)g(*find_command)f
+(\(\);)p eop
+%%Page: 39 41
+39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(39)195 183 y Ft(/*)24 b(The)f(name)g(of)h(this)f
+(program,)g(as)h(taken)f(from)g(argv[0].)g(*/)195 235
+y(char)g(*progname;)195 339 y(/*)h(When)f(non-zero,)g(this)g(global)g
+(means)g(the)h(user)f(is)g(done)h(using)f(this)g(program.)g(*/)p
+1985 349 21 42 v 195 391 a(int)g(done;)195 495 y(char)g(*)195
+546 y(dupstr)g(\(s\))314 598 y(int)h(s;)195 650 y({)243
+702 y(char)f(*r;)243 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h
+(1\);)243 858 y(strcpy)f(\(r,)g(s\);)243 910 y(return)g(\(r\);)195
+962 y(})195 1065 y(main)g(\(argc,)g(argv\))314 1117 y(int)h(argc;)314
+1169 y(char)g(**argv;)195 1221 y({)243 1273 y(char)f(*line,)g(*s;)243
+1377 y(progname)f(=)i(argv[0];)243 1480 y(initialize_readline)d(\(\);)i
+(/*)h(Bind)f(our)h(completer.)e(*/)243 1584 y(/*)h(Loop)h(reading)f
+(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)243
+1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290 1688 y({)338
+1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338 1844
+y(if)i(\(!line\))386 1896 y(break;)338 1999 y(/*)g(Remove)f(leading)g
+(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410
+2051 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h
+(the)f(history)g(list)410 2103 y(and)g(execute)g(it.)h(*/)338
+2155 y(s)g(=)g(stripwhite)e(\(line\);)338 2259 y(if)i(\(*s\))386
+2311 y({)434 2363 y(add_history)e(\(s\);)434 2414 y(execute_line)g
+(\(s\);)386 2466 y(})338 2570 y(free)h(\(line\);)290
+2622 y(})p eop
+%%Page: 40 42
+40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)243
+183 y Ft(exit)23 b(\(0\);)195 235 y(})195 339 y(/*)h(Execute)e(a)i
+(command)f(line.)g(*/)195 391 y(int)195 443 y(execute_line)f(\(line\))
+314 495 y(char)i(*line;)195 546 y({)243 598 y(register)e(int)i(i;)243
+650 y(COMMAND)f(*command;)243 702 y(char)g(*word;)243
+806 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 858
+y(i)g(=)h(0;)243 910 y(while)f(\(line[i])g(&&)g(whitespace)g
+(\(line[i]\)\))290 962 y(i++;)243 1013 y(word)g(=)h(line)f(+)h(i;)243
+1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290
+1169 y(i++;)243 1273 y(if)g(\(line[i]\))290 1325 y(line[i++])g(=)h
+('\\0';)243 1429 y(command)f(=)g(find_command)g(\(word\);)243
+1532 y(if)g(\(!command\))290 1584 y({)338 1636 y(fprintf)g(\(stderr,)g
+("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338
+1688 y(return)g(\(-1\);)290 1740 y(})243 1844 y(/*)g(Get)h(argument)f
+(to)g(command,)g(if)g(any.)h(*/)243 1896 y(while)f(\(whitespace)f
+(\(line[i]\)\))290 1947 y(i++;)243 2051 y(word)h(=)h(line)f(+)h(i;)243
+2155 y(/*)f(Call)h(the)f(function.)g(*/)243 2207 y(return)g
+(\(\(*\(command->func\)\))e(\(word\)\);)195 2259 y(})195
+2363 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g
+(and)h(return)f(a)g(pointer)g(to)h(that)267 2414 y(command.)46
+b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f
+(name.)g(*/)195 2466 y(COMMAND)g(*)195 2518 y(find_command)f(\(name\))
+314 2570 y(char)i(*name;)195 2622 y({)p eop
+%%Page: 41 43
+41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(41)243 183 y Ft(register)22 b(int)i(i;)243
+287 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
+339 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338
+391 y(return)g(\(&commands[i]\);)243 495 y(return)g(\(\(COMMAND)f
+(*\)NULL\);)195 546 y(})195 650 y(/*)i(Strip)f(whitespace)f(from)i(the)
+f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267
+702 y(into)g(STRING.)g(*/)195 754 y(char)g(*)195 806
+y(stripwhite)f(\(string\))314 858 y(char)i(*string;)195
+910 y({)243 962 y(register)e(char)i(*s,)f(*t;)243 1065
+y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290
+1117 y(;)243 1221 y(if)g(\(*s)h(==)f(0\))290 1273 y(return)g(\(s\);)243
+1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1429
+y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290
+1480 y(t--;)243 1532 y(*++t)h(=)h('\\0';)243 1636 y(return)f(s;)195
+1688 y(})195 1792 y(/*)h(***********************)o(*******)o(********)o
+(*******)o(*******)o(********)o(****)d(*/)195 1844 y(/*)1575
+b(*/)195 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381
+b(*/)195 1947 y(/*)1575 b(*/)195 1999 y(/*)24 b
+(***********************)o(*******)o(********)o(*******)o(*******)o
+(********)o(****)d(*/)195 2103 y(char)i(*command_generator)f(\(\);)195
+2155 y(char)h(**fileman_completion)e(\(\);)195 2259 y(/*)j(Tell)f(the)g
+(GNU)h(Readline)f(library)f(how)i(to)g(complete.)46 b(We)24
+b(want)f(to)h(try)f(to)h(complete)p 2034 2269 21 42 v
+267 2311 a(on)f(command)g(names)g(if)h(this)f(is)h(the)f(first)g(word)h
+(in)f(the)h(line,)f(or)h(on)f(filenames)p 1962 2317 21
+35 v 267 2363 a(if)g(not.)g(*/)195 2414 y(initialize_readline)e(\(\))
+195 2466 y({)243 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h
+(~/.inputrc)e(file.)h(*/)243 2570 y(rl_readline_name)e(=)j("FileMan";)p
+eop
+%%Page: 42 44
+42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)243
+183 y Ft(/*)23 b(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)
+f(first.)g(*/)243 235 y(rl_attempted_completion_)o(functio)o(n)e(=)j
+(\(CPPFunction)e(*\)fileman_completion;)195 287 y(})195
+391 y(/*)i(Attempt)e(to)i(complete)f(on)g(the)h(contents)f(of)g(TEXT.)
+47 b(START)23 b(and)h(END)f(bound)h(the)267 443 y(region)f(of)g
+(rl_line_buffer)f(that)h(contains)g(the)h(word)f(to)h(complete.)46
+b(TEXT)23 b(is)267 495 y(the)g(word)g(to)h(complete.)46
+b(We)24 b(can)f(use)h(the)f(entire)g(contents)g(of)h(rl_line_buffer)p
+1963 505 21 38 v 267 546 a(in)f(case)g(we)h(want)f(to)h(do)g(some)f
+(simple)g(parsing.)47 b(Return)23 b(the)g(array)g(of)h(matches,)p
+1986 557 V 267 598 a(or)f(NULL)g(if)h(there)f(aren't)g(any.)h(*/)195
+650 y(char)f(**)195 702 y(fileman_completion)e(\(text,)i(start,)g
+(end\))314 754 y(char)h(*text;)314 806 y(int)g(start,)f(end;)195
+858 y({)243 910 y(char)g(**matches;)243 1013 y(matches)g(=)g(\(char)h
+(**\)NULL;)243 1117 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g
+(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314
+1169 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h
+(a)f(file)h(in)f(the)h(current)314 1221 y(directory.)f(*/)243
+1273 y(if)g(\(start)g(==)h(0\))290 1325 y(matches)f(=)h
+(completion_matches)d(\(text,)j(command_generator\);)243
+1429 y(return)f(\(matches\);)195 1480 y(})195 1584 y(/*)h(Generator)e
+(function)h(for)g(command)g(completion.)47 b(STATE)23
+b(lets)g(us)h(know)f(whether)p 1938 1594 21 42 v 267
+1636 a(to)g(start)g(from)h(scratch;)e(without)h(any)h(state)f(\(i.e.)g
+(STATE)g(==)h(0\),)f(then)h(we)267 1688 y(start)f(at)g(the)h(top)f(of)h
+(the)f(list.)g(*/)195 1740 y(char)g(*)195 1792 y(command_generator)f
+(\(text,)h(state\))314 1844 y(char)h(*text;)314 1896
+y(int)g(state;)195 1947 y({)243 1999 y(static)f(int)g(list_index,)g
+(len;)243 2051 y(char)g(*name;)243 2155 y(/*)g(If)h(this)f(is)h(a)g
+(new)f(word)g(to)h(complete,)f(initialize)f(now.)47 b(This)24
+b(includes)314 2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f
+(efficiency,)g(and)g(initializing)f(the)i(index)p 1938
+2217 21 38 v 314 2259 a(variable)f(to)h(0.)f(*/)243 2311
+y(if)g(\(!state\))290 2363 y({)338 2414 y(list_index)g(=)g(0;)338
+2466 y(len)h(=)f(strlen)g(\(text\);)290 2518 y(})243
+2622 y(/*)g(Return)g(the)h(next)f(name)g(which)h(partially)e(matches)h
+(from)g(the)h(command)f(list.)g(*/)p 1985 2632 21 42
+v eop
+%%Page: 43 45
+43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(43)243 183 y Ft(while)23 b(\(name)g(=)h
+(commands[list_index].name)o(\))290 235 y({)338 287 y(list_index++;)338
+391 y(if)g(\(strncmp)f(\(name,)g(text,)g(len\))g(==)h(0\))386
+443 y(return)f(\(dupstr\(name\)\);)290 495 y(})243 598
+y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f(NULL.)g(*/)243
+650 y(return)g(\(\(char)g(*\)NULL\);)195 702 y(})195
+806 y(/*)h(***********************)o(*******)o(********)o(*******)o
+(*******)o(********)o(****)d(*/)195 858 y(/*)1575 b(*/)195
+910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 962
+y(/*)1575 b(*/)195 1013 y(/*)24 b(***********************)o(*******)o
+(********)o(*******)o(*******)o(********)o(****)d(*/)195
+1117 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47
+b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267
+1169 y(commands.)f(*/)195 1221 y(static)h(char)g(syscom[1024];)195
+1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195
+1377 y(com_list)g(\(arg\))314 1429 y(char)h(*arg;)195
+1480 y({)243 1532 y(if)f(\(!arg\))290 1584 y(arg)h(=)g("";)243
+1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243
+1740 y(return)g(\(system)g(\(syscom\)\);)195 1792 y(})195
+1896 y(com_view)g(\(arg\))314 1947 y(char)h(*arg;)195
+1999 y({)243 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290
+2103 y(return)g(1;)243 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f
+(arg\);)243 2259 y(return)g(\(system)g(\(syscom\)\);)195
+2311 y(})195 2414 y(com_rename)f(\(arg\))314 2466 y(char)i(*arg;)195
+2518 y({)243 2570 y(too_dangerous)e(\("rename"\);)243
+2622 y(return)h(\(1\);)p eop
+%%Page: 44 46
+44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)195
+183 y Ft(})195 287 y(com_stat)23 b(\(arg\))314 339 y(char)h(*arg;)195
+391 y({)243 443 y(struct)f(stat)g(finfo;)243 546 y(if)g
+(\(!valid_argument)f(\("stat",)h(arg\)\))290 598 y(return)g(\(1\);)243
+702 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290
+754 y({)338 806 y(perror)g(\(arg\);)338 858 y(return)g(\(1\);)290
+910 y(})243 1013 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g
+(arg\);)243 1117 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g
+(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434
+1169 y(finfo.st_nlink,)434 1221 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("")
+h(:)g("s",)434 1273 y(finfo.st_size,)434 1325 y(\(finfo.st_size)e(==)h
+(1\))h(?)f("")h(:)g("s"\);)243 1377 y(printf)f(\("Inode)g(Last)g
+(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243
+1429 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f
+(\(&finfo.st_atime\)\);)243 1480 y(printf)g(\(")95 b(Last)23
+b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243
+1532 y(return)g(\(0\);)195 1584 y(})195 1688 y(com_delete)f(\(arg\))314
+1740 y(char)i(*arg;)195 1792 y({)243 1844 y(too_dangerous)e
+(\("delete"\);)243 1896 y(return)h(\(1\);)195 1947 y(})195
+2051 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f
+(the)h(commands)f(if)g(ARG)h(is)267 2103 y(not)f(present.)g(*/)195
+2155 y(com_help)g(\(arg\))314 2207 y(char)h(*arg;)195
+2259 y({)243 2311 y(register)e(int)i(i;)243 2363 y(int)f(printed)g(=)h
+(0;)243 2466 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
+2518 y({)338 2570 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g
+(commands[i].name\))f(==)i(0\)\))386 2622 y({)p eop
+%%Page: 45 47
+45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)844 b(45)434 183 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e
+(commands[i].name,)h(commands[i].doc\);)434 235 y(printed++;)386
+287 y(})290 339 y(})243 443 y(if)h(\(!printed\))290 495
+y({)338 546 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48
+b(Possibilties)22 b(are:\\n",)h(arg\);)338 650 y(for)h(\(i)f(=)h(0;)g
+(commands[i].name;)d(i++\))386 702 y({)434 754 y(/*)i(Print)g(in)h(six)
+f(columns.)g(*/)434 806 y(if)g(\(printed)g(==)h(6\))481
+858 y({)529 910 y(printed)f(=)h(0;)529 962 y(printf)f(\("\\n"\);)481
+1013 y(})434 1117 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434
+1169 y(printed++;)386 1221 y(})338 1325 y(if)i(\(printed\))386
+1377 y(printf)f(\("\\n"\);)290 1429 y(})243 1480 y(return)g(\(0\);)195
+1532 y(})195 1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195
+1688 y(com_cd)f(\(arg\))314 1740 y(char)h(*arg;)195 1792
+y({)243 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290
+1896 y({)338 1947 y(perror)g(\(arg\);)338 1999 y(return)g(1;)290
+2051 y(})243 2155 y(com_pwd)g(\(""\);)243 2207 y(return)g(\(0\);)195
+2259 y(})195 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f
+(directory.)h(*/)195 2414 y(com_pwd)g(\(ignore\))314
+2466 y(char)h(*ignore;)195 2518 y({)243 2570 y(char)f(dir[1024],)g(*s;)
+p eop
+%%Page: 46 48
+46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)243
+183 y Ft(s)23 b(=)h(getwd)f(\(dir\);)243 235 y(if)g(\(s)h(==)f(0\))290
+287 y({)338 339 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g
+(dir\);)338 391 y(return)g(1;)290 443 y(})243 546 y(printf)g
+(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243
+598 y(return)g(0;)195 650 y(})195 754 y(/*)h(The)f(user)g(wishes)g(to)h
+(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)h(non-zero.)e
+(*/)p 1961 764 21 42 v 195 806 a(com_quit)h(\(arg\))314
+858 y(char)h(*arg;)195 910 y({)243 962 y(done)f(=)h(1;)243
+1013 y(return)f(\(0\);)195 1065 y(})195 1169 y(/*)h(Function)e(which)i
+(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195
+1221 y(too_dangerous)f(\(caller\))314 1273 y(char)i(*caller;)195
+1325 y({)243 1377 y(fprintf)f(\(stderr,)457 1429 y("\045s:)h(Too)f
+(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23
+b(it)h(yourself.\\n",)p 1987 1439 V 457 1480 a(caller\);)195
+1532 y(})195 1636 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid)
+f(argument)g(for)g(CALLER,)g(else)g(print)267 1688 y(an)g(error)g
+(message)g(and)h(return)f(zero.)g(*/)195 1740 y(int)195
+1792 y(valid_argument)f(\(caller,)h(arg\))314 1844 y(char)h(*caller,)e
+(*arg;)195 1896 y({)243 1947 y(if)h(\(!arg)g(||)h(!*arg\))290
+1999 y({)338 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g
+(required.\\n",)f(caller\);)338 2103 y(return)h(\(0\);)290
+2155 y(})243 2259 y(return)g(\(1\);)195 2311 y(})p eop
+%%Page: 47 49
+47 48 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(47)75
+183 y Fq(Concept)27 b(Index)75 359 y Fs(C)75 417 y Ff(command)14
+b(editing)9 b Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(1)75 517 y Fs(E)75 575 y Ff(editing)15 b(command)f(lines)8
+b Fe(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(1)75 675
+y Fs(I)75 733 y Ff(initiali)q(zati)q(on)c(\014le,)e(readline)8
+b Fe(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(3)75 782 y(in)o(teraction,)15
+b(readline)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
+b Ff(1)75 882 y Fs(K)75 940 y Ff(kill)15 b(ring)e Fe(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)24 b Ff(2)1012 359 y(killin)q(g)16 b(text)11
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)24 b Ff(2)1012 495 y Fs(N)1012 553 y Ff(notation,)15
+b(readline)5 b Fe(.)k(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+19 b Ff(1)1012 688 y Fs(R)1012 747 y Ff(readline,)c(function)6
+b Fe(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(19)1012 882 y Fs(Y)1012 940 y Ff(y)o(anking)c(text)6
+b Fe(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)19 b Ff(2)p eop
+%%Page: 48 50
+48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)p
+eop
+%%Page: 49 51
+49 50 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(49)75 183 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
+b(Index)75 345 y Fs(\()75 403 y Fd(\(int)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)24 b Ff(28)75 513 y Fs(A)75 571 y Fd(abort)11 b(\(C-g\))6
+b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)18 b Ff(16)75 621 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\))
+s Fe(.)s(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
+b Ff(11)75 671 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(28)75
+781 y Fs(B)75 839 y Fd(backward-c)o(ha)o(r)10 b(\(C-b\))t
+Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(11)75 889
+y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))f
+Fe(.)s(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(12)75 939 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10
+b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+22 b Ff(13)75 989 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10
+b(\(M-DEL\))d Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+19 b Ff(13,)13 b(14)75 1038 y Fd(backward-w)o(or)o(d)d(\(M-b\))t
+Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(11)75 1088
+y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 b(\(M-<\))t Fe(.)t(.)d(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16
+b Ff(11)75 1138 y Fd(beginning-)o(of)o(-li)o(ne)9 b(\(C-a\))e
+Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)20 b Ff(11)75 1188 y(b)q(ell-st)o(yle)13
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)23 b Ff(4)75 1298 y Fs(C)75 1356
+y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))6
+b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+18 b Ff(15)75 1406 y Fd(capitalize)o(-w)o(ord)9 b(\(M-c\))c
+Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)17 b Ff(12,)c(13)75 1456 y Fd(character-)o(se)o(arc)o(h)d
+(\(C-]\))f Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(16)75 1506 y Fd(character-)o(se)
+o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))s Fe(.)t(.)d(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)16 b Ff(16)75 1555 y Fd(clear-scre)o(en)9
+b(\(C-l\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
+b Ff(11)75 1605 y(commen)o(t-b)q(egin)9 b Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(4)75 1655
+y Fd(complete)10 b(\(TAB\))e Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)23 b Ff(15)75 1705 y(completion-query-i)q(tems)9
+b Fe(.)f(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(4)75 1755 y Fd(completion)p
+276 1755 12 2 v 10 w(matches)5 b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+17 b Ff(34)75 1804 y(con)o(v)o(ert-meta)11 b Fe(.)6 b(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b
+Ff(4)75 1854 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 b(\(\))5
+b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)17 b Ff(13,)c(14)75 1904 y Fd(copy-forwa)o(rd)o(-wo)o(rd)c
+(\(\))d Fe(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)18 b Ff(13,)13 b(14)75 1954 y
+Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)c(\(\))s Fe(.)d(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16
+b Ff(13,)d(14)75 2064 y Fs(D)75 2122 y Fd(delete-cha)o(r)d(\(C-d\))c
+Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(12)75
+2172 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))g
+Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)21 b Ff(15)75 2222 y Fd(delete-hor)o(iz)o(ont)o(al)o
+(-sp)o(ace)9 b(\(\))e Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)19 b Ff(13,)13 b(14)75 2271 y Fd(digit-argu)o(me)o(nt)c(\(M-0,)
+i(M-1,)h(...)f(M--\))t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16
+b Ff(14)75 2321 y Fd(digit_p)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b
+Ff(29)75 2371 y Fd(digit_valu)o(e)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Ff(29)75 2421
+y Fd(ding)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(28)75
+2471 y(disable-comple)q(tion)7 b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)19 b Ff(5)75 2521 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9
+b(\(M-a,)i(M-b,)g(M-)p Fe(x)p Fd(,)h Fc(:)6 b(:)g(:)p
+Fd(\))j Fe(.)d(.)23 b Ff(16)75 2570 y Fd(downcase-w)o(or)o(d)10
+b(\(M-l\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12,)13 b(13)75
+2620 y Fd(dump-funct)o(io)o(ns)c(\(\))d Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)19 b Ff(16)75 2670 y Fd(dump-macro)o(s)10
+b(\(\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17
+b Ff(16,)c(17)1012 345 y Fd(dump-variab)o(le)o(s)d(\(\))f
+Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(16,)13 b(17)1012 463
+y Fs(E)1012 521 y Ff(editing-mo)q(de)g Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Ff(5)1012
+571 y(enable-k)o(eypad)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(5)1012 620 y Fd(end-kbd-mac)o(ro)9
+b(\(C-x)i(\)\))5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(15)1012
+670 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)19
+b Ff(11,)13 b(12)1012 720 y Fd(end-of-line)c(\(C-e\))d
+Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(11)1012
+770 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o(rk)9 b(\(C-x)j(C-x\))7
+b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(16)1012
+820 y(expand-tilde)8 b Fe(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(5)1012 937 y Fs(F)1012
+995 y Fd(filename)p 1174 995 V 11 w(completion)p 1385
+995 V 11 w(function)s Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)16 b Ff(34)1012 1045 y Fd(forward-bac)o(kw)o(ard)o
+(-d)o(ele)o(te)o(-ch)o(ar)9 b(\(\))g Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)
+22 b Ff(12,)13 b(13)1012 1095 y Fd(forward-cha)o(r)d(\(C-f\))5
+b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(11)1012
+1145 y Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))t
+Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b
+Ff(11,)c(12)1012 1194 y Fd(forward-wor)o(d)d(\(M-f\))5
+b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(11)1012
+1244 y Fd(free)p 1094 1244 V 13 w(undo)p 1187 1244 V
+13 w(list)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)17 b Ff(26)1012 1362 y Fs(H)1012 1420 y Fd(history-sea)o(rc)o(h-b)o
+(ac)o(kwa)o(rd)9 b(\(\))e Fe(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)20 b Ff(11,)13 b(12)1012 1470 y Fd(history-sea)o(rc)o(h-f)o
+(or)o(war)o(d)d(\(\))e Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)21 b Ff(11,)13 b(12)1012 1519 y(horizon)o(tal-scrol)q
+(l-mo)r(de)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
+b Ff(5)1012 1637 y Fs(I)1012 1695 y Ff(input-meta)12
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)23 b Ff(5)1012 1745 y Fd(insert-comm)o(en)o(t)10
+b(\(M-#\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(16)1012
+1795 y Fd(insert-comp)o(le)o(tio)o(ns)9 b(\(M-*\))d Fe(.)t(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19
+b Ff(15)1012 1844 y(isearc)o(h-terminators)13 b Fe(.)6
+b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)1012
+1962 y Fs(K)1012 2020 y Ff(k)o(eymap)t Fe(.)7 b(.)g(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(5)1012 2070 y Fd(kill-line)10 b(\(C-k\))f Fe(.)t(.)d(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(13)1012 2120 y Fd(kill-region)9
+b(\(\))c Fe(.)g(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18
+b Ff(13,)13 b(14)1012 2169 y Fd(kill-whole-)o(li)o(ne)c(\(\))f
+Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(13,)13 b(14)1012 2219
+y Fd(kill-word)d(\(M-d\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(13,)c(14)1012 2337 y Fs(L)1012 2395 y Fd(lowercase)p
+1194 2395 V 11 w(p)5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(28)1012 2512 y Fs(M)1012
+2570 y Ff(mark-mo)q(di\014ed-li)q(nes)6 b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)18 b Ff(6)1012 2620 y Fd(menu-comple)o(te)9
+b(\(\))f Fe(.)d(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(15)1012 2670 y(meta-\015ag)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(5)p eop
+%%Page: 50 52
+50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)75
+183 y Fs(N)75 241 y Fd(next-histo)o(ry)9 b(\(C-n\))c
+Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(11)75
+291 y Fd(non-increm)o(en)o(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o
+(st)o(ory)9 b(\(M-n\))158 341 y Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b
+Ff(11,)13 b(12)75 391 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)
+o(ear)o(ch)o(-hi)o(st)o(ory)c(\(M-p\))158 441 y Fe(.)d(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
+b Ff(11,)13 b(12)75 490 y Fd(numeric)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
+b Ff(28)75 591 y Fs(O)75 649 y Ff(output-meta)7 b Fe(.)g(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19
+b Ff(6)75 750 y Fs(P)75 808 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9
+b(\(M-?\))t Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)16 b Ff(15)75 858 y Fd(prefix-met)o(a)10
+b(\(ESC\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
+b Ff(16)75 908 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))f
+Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)21 b Ff(11)75 1008 y Fs(Q)75 1067
+y Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))t Fe(.)t(.)6
+b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(12,)c(13)75 1167 y Fs(R)75 1225 y Fd(re-read-in)o(it)o(-fi)o(le)c
+(\(C-x)i(C-r\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)18 b Ff(16)75 1275 y Fd(readline)6
+b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)19 b Ff(19)75 1325 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)
+9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(11)75 1375 y Fd(reverse-se)o(ar)
+o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)17 b Ff(11,)c(12)75 1425 y Fd(revert-lin)o(e)d(\(M-r\))c
+Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(16)75
+1474 y Fd(rl)p 117 1474 12 2 v 13 w(add)p 190 1474 V
+13 w(defun)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)19 b Ff(23)75 1524 y Fd(rl)p 117 1524 V 13
+w(add)p 190 1524 V 13 w(undo)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(26)75 1574 y
+Fd(rl)p 117 1574 V 13 w(attempted)p 310 1574 V 11 w(completion)p
+520 1574 V 10 w(function)h Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+24 b Ff(34)75 1624 y Fd(rl)p 117 1624 V 13 w(basic)p
+230 1624 V 13 w(quote)p 343 1624 V 12 w(character)o(s)13
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)16 b Ff(35)75 1674 y Fd(rl)p 117 1674 V 13
+w(basic)p 230 1674 V 13 w(word)p 323 1674 V 12 w(break)p
+435 1674 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)21 b Ff(35)75 1724 y Fd(rl)p 117 1724
+V 13 w(begin)p 230 1724 V 13 w(undo)p 323 1724 V 12 w(group)9
+b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(26)75 1773
+y Fd(rl)p 117 1773 V 13 w(bind)p 210 1773 V 13 w(key)8
+b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)20 b Ff(24)75 1823 y Fd(rl)p 117 1823 V 13 w(bind)p
+210 1823 V 13 w(key)p 283 1823 V 13 w(in)p 336 1823 V
+13 w(map)t Fe(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(24)75 1873 y Fd(rl)p 117 1873 V 13 w(binding)p 270
+1873 V 12 w(keymap)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23
+b Ff(23)75 1923 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7
+b Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)20
+b Ff(29)75 1973 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)9
+b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+21 b Ff(29)75 2022 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)6
+b Fe(.)s(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(29)75 2072 y Fd(rl)p
+117 2072 V 13 w(catch)p 230 2072 V 13 w(signals)13 b
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b
+Ff(31)75 2122 y Fd(rl)p 117 2122 V 13 w(catch)p 230 2122
+V 13 w(sigwinch)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23
+b Ff(31)75 2172 y Fd(rl)p 117 2172 V 13 w(char)p 210
+2172 V 13 w(is)p 263 2172 V 13 w(quoted)p 396 2172 V
+12 w(p)18 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b
+Ff(35)75 2222 y Fd(rl)p 117 2222 V 13 w(cleanup)p 270
+2222 V 12 w(after)p 382 2222 V 12 w(signal)t Fe(.)s(.)6
+b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)16 b Ff(32)75 2271 y Fd(rl)p 117 2271 V 13
+w(clear)p 230 2271 V 13 w(message)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)22 b Ff(27)75 2321 y Fd(rl)p 117 2321
+V 13 w(clear)p 230 2321 V 13 w(signals)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)h(.)22 b Ff(32)75 2371 y Fd(rl)p 117
+2371 V 13 w(complete)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(33)75 2421 y Fd(rl)p
+117 2421 V 13 w(complete)p 290 2421 V 11 w(internal)5
+b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(33)75 2471 y
+Fd(rl)p 117 2471 V 13 w(completer)p 310 2471 V 11 w(quote)p
+421 2471 V 12 w(characters)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)19 b Ff(35)75 2521 y Fd(rl)p 117 2521
+V 13 w(completer)p 310 2521 V 11 w(word)p 401 2521 V
+13 w(break)p 514 2521 V 12 w(character)o(s)13 b Fe(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(35)75 2570 y
+Fd(rl)p 117 2570 V 13 w(completion)p 329 2570 V 11 w(append)p
+461 2570 V 11 w(character)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)18 b Ff(36)75 2620 y Fd(rl)p 117 2620 V 13
+w(completion)p 329 2620 V 11 w(display)p 481 2620 V 11
+w(matches)p 632 2620 V 11 w(hook)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)16 b Ff(37)75 2670 y Fd(rl)p 117 2670 V 13 w(completion)p
+329 2670 V 11 w(entry)p 441 2670 V 12 w(function)21 b
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(33,)13
+b(34)1012 183 y Fd(rl)p 1054 183 V 14 w(completio)o(n)p
+1267 183 V 11 w(query)p 1378 183 V 12 w(items)h Fe(.)6
+b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)17 b Ff(35)1012 233 y Fd(rl)p 1054 233 V 14 w(copy)p
+1148 233 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)17 b Ff(23)1012 283 y Fd(rl)p 1054 283
+V 14 w(copy)p 1148 283 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)1012 333
+y Fd(rl)p 1054 333 V 14 w(delete)p 1188 333 V 12 w(text)t
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17
+b Ff(27)1012 382 y Fd(rl)p 1054 382 V 14 w(directory)p
+1247 382 V 10 w(completion)p 1458 382 V 11 w(hook)i Fe(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(37)1012 432 y Fd(rl)p 1054 432 V 14 w(discard)p
+1208 432 V 11 w(keymap)9 b Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+22 b Ff(24)1012 482 y Fd(rl)p 1054 482 V 14 w(display)p
+1208 482 V 11 w(match)p 1319 482 V 12 w(list)6 b Fe(.)f(.)h(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)19 b Ff(28)1012 532 y Fd(rl)p 1054 532 V 14 w(do)p
+1108 532 V 13 w(undo)9 b Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(26)1012 582 y Fd(rl)p
+1054 582 V 14 w(done)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(21)1012
+632 y Fd(rl)p 1054 632 V 14 w(end)f Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18
+b Ff(21)1012 681 y Fd(rl)p 1054 681 V 14 w(end)p 1128
+681 V 13 w(undo)p 1221 681 V 12 w(group)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)25 b Ff(26)1012 731 y Fd(rl)p 1054 731
+V 14 w(erase)p 1168 731 V 12 w(empty)p 1280 731 V 12
+w(line)d Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)24 b Ff(22)1012
+781 y Fd(rl)p 1054 781 V 14 w(event)p 1168 781 V 12 w(hook)18
+b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(22)1012 831 y Fd(rl)p 1054 831 V 14 w(executing)p
+1247 831 V 10 w(keymap)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
+b Ff(23)1012 881 y Fd(rl)p 1054 881 V 14 w(filename)p
+1228 881 V 11 w(completio)o(n)p 1438 881 V 11 w(desired)16
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
+b Ff(36)1012 930 y Fd(rl)p 1054 930 V 14 w(filename)p
+1228 930 V 11 w(dequoting)p 1418 930 V 10 w(function)d
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
+b Ff(35)1012 980 y Fd(rl)p 1054 980 V 14 w(filename)p
+1228 980 V 11 w(quote)p 1339 980 V 12 w(character)o(s)f
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(36)1012 1030 y Fd(rl)p 1054 1030 V 14 w(filename)p
+1228 1030 V 11 w(quoting)p 1379 1030 V 11 w(desired)f
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
+b Ff(36)1012 1080 y Fd(rl)p 1054 1080 V 14 w(filename)p
+1228 1080 V 11 w(quoting)p 1379 1080 V 11 w(function)18
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(35)1012 1130 y Fd(rl)p 1054 1130 V 14 w(forced)p
+1188 1130 V 12 w(update)p 1320 1130 V 11 w(display)9
+b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)24 b Ff(27)1012 1180 y Fd(rl)p 1054 1180
+V 14 w(free)p 1148 1180 V 12 w(line)p 1240 1180 V 13
+w(state)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(32)1012 1229 y Fd(rl)p 1054 1229 V 14 w(function)p
+1228 1229 V 11 w(dumper)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(25)1012 1279 y Fd(rl)p 1054 1279 V 14 w(function)p
+1228 1279 V 11 w(of)p 1279 1279 V 13 w(keyseq)6 b Fe(.)t(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)19 b Ff(25)1012 1329 y Fd(rl)p 1054 1329 V 14
+w(generic)p 1208 1329 V 11 w(bind)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)24 b Ff(25)1012 1379 y Fd(rl)p 1054
+1379 V 14 w(get)p 1128 1379 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(24)1012
+1429 y Fd(rl)p 1054 1429 V 14 w(get)p 1128 1429 V 13
+w(keymap)p 1261 1429 V 11 w(by)p 1312 1429 V 14 w(name)9
+b Fe(.)t(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(24)1012 1478 y Fd(rl)p
+1054 1478 V 14 w(get)p 1128 1478 V 13 w(keymap)p 1261
+1478 V 11 w(name)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Ff(24)1012 1528 y Fd(rl)p 1054 1528 V 14 w(getc)8 b
+Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)23 b Ff(28)1012 1578 y Fd(rl)p 1054 1578
+V 14 w(getc)p 1148 1578 V 12 w(function)13 b Fe(.)7 b(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)1012 1628 y Fd(rl)p
+1054 1628 V 14 w(ignore)p 1188 1628 V 12 w(completi)o(on)p
+1399 1628 V 11 w(duplicate)o(s)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)17 b Ff(36)1012 1678 y Fd(rl)p 1054 1678
+V 14 w(ignore)p 1188 1678 V 12 w(some)p 1280 1678 V 12
+w(completion)o(s)p 1511 1678 V 11 w(function)j Fe(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(36)1012 1727 y Fd(rl)p
+1054 1727 V 14 w(inhibit)p 1208 1727 V 11 w(completion)15
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(36)1012 1777 y Fd(rl)p
+1054 1777 V 14 w(initializ)o(e)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(28)1012 1827 y Fd(rl)p
+1054 1827 V 14 w(insert)p 1188 1827 V 12 w(completi)o(ons)r
+Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(34)1012 1877 y Fd(rl)p
+1054 1877 V 14 w(insert)p 1188 1877 V 12 w(text)t Fe(.)t(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17
+b Ff(27)1012 1927 y Fd(rl)p 1054 1927 V 14 w(instream)g
+Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20
+b Ff(22)1012 1977 y Fd(rl)p 1054 1977 V 14 w(invoking)p
+1228 1977 V 11 w(keyseqs)6 b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(25)1012 2026 y Fd(rl)p 1054 2026 V 14 w(invoking)p
+1228 2026 V 11 w(keyseqs)p 1379 2026 V 11 w(in)p 1430
+2026 V 14 w(map)9 b Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(25)1012 2076 y Fd(rl)p
+1054 2076 V 14 w(kill)p 1148 2076 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)1012
+2126 y Fd(rl)p 1054 2126 V 14 w(library)p 1208 2126 V
+11 w(version)g Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
+b Ff(22)1012 2176 y Fd(rl)p 1054 2176 V 14 w(line)p 1148
+2176 V 12 w(buffer)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)19 b Ff(21)1012 2226 y Fd(rl)p 1054 2226 V
+14 w(list)p 1148 2226 V 12 w(funmap)p 1280 2226 V 12
+w(names)7 b Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(25)1012
+2275 y Fd(rl)p 1054 2275 V 14 w(make)p 1148 2275 V 12
+w(bare)p 1240 2275 V 13 w(keymap)9 b Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+22 b Ff(23)1012 2325 y Fd(rl)p 1054 2325 V 14 w(make)p
+1148 2325 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)17 b Ff(23)1012 2375 y Fd(rl)p 1054 2375
+V 14 w(mark)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(21)1012 2425
+y Fd(rl)p 1054 2425 V 14 w(message)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(27)1012
+2475 y Fd(rl)p 1054 2475 V 14 w(modifying)s Fe(.)s(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(26)1012 2524 y Fd(rl)p 1054 2524 V 14 w(named)p
+1168 2524 V 12 w(function)8 b Fe(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)22 b Ff(25)1012 2574 y Fd(rl)p 1054 2574 V 14 w(on)p
+1108 2574 V 13 w(new)p 1181 2574 V 13 w(line)7 b Fe(.)t(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)1012 2624
+y Fd(rl)p 1054 2624 V 14 w(outstream)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(22)p eop
+%%Page: 51 53
+51 52 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(51)75 183 y Fd(rl)p 117 183 12 2 v 13 w(parse)p 230
+183 V 13 w(and)p 303 183 V 13 w(bind)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)24 b Ff(25)75 233 y Fd(rl)p 117 233 V 13
+w(pending)p 270 233 V 12 w(input)14 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)g(.)16 b Ff(21)75 283 y Fd(rl)p 117 283 V
+13 w(point)22 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(21)75 333 y Fd(rl)p
+117 333 V 13 w(possible)p 290 333 V 11 w(completions)6
+b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)g(.)22 b Ff(34)75 382 y Fd(rl)p 117 382 V
+13 w(pre)p 190 382 V 13 w(input)p 303 382 V 13 w(hook)16
+b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(22)75
+432 y Fd(rl)p 117 432 V 13 w(prompt)i Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(22)75
+482 y Fd(rl)p 117 482 V 13 w(read)p 210 482 V 13 w(init)p
+303 482 V 13 w(file)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24
+b Ff(25)75 532 y Fd(rl)p 117 532 V 13 w(read)p 210 532
+V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)20 b Ff(28)75 582 y Fd(rl)p 117 582 V
+13 w(readline)p 290 582 V 11 w(name)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)16 b Ff(22)75 632 y Fd(rl)p 117 632
+V 13 w(redisplay)t Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)16 b Ff(27)75 681 y Fd(rl)p 117 681 V
+13 w(redisplay)p 310 681 V 11 w(function)f Fe(.)6 b(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18
+b Ff(22)75 731 y Fd(rl)p 117 731 V 13 w(reset)p 230 731
+V 13 w(after)p 343 731 V 12 w(signal)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19
+b Ff(32)75 781 y Fd(rl)p 117 781 V 13 w(reset)p 230 781
+V 13 w(line)p 323 781 V 12 w(state)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)21 b Ff(27)75 831 y Fd(rl)p 117 831 V 13 w(reset)p
+230 831 V 13 w(terminal)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+21 b Ff(28)75 881 y Fd(rl)p 117 881 V 13 w(resize)p 250
+881 V 12 w(terminal)7 b Fe(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20
+b Ff(32)75 930 y Fd(rl)p 117 930 V 13 w(restore)p 270
+930 V 12 w(prompt)9 b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
+b Ff(27)75 980 y Fd(rl)p 117 980 V 13 w(save)p 210 980
+V 13 w(prompt)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)17 b Ff(27)75 1030 y Fd(rl)p 117 1030 V 13 w(set)p
+190 1030 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)18 b Ff(24)75 1080 y Fd(rl)p 117
+1080 V 13 w(set)p 190 1080 V 13 w(signals)t Fe(.)t(.)6
+b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17
+b Ff(32)75 1130 y Fd(rl)p 117 1130 V 13 w(special)p 270
+1130 V 12 w(prefixes)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21
+b Ff(36)75 1180 y Fd(rl)p 117 1180 V 13 w(startup)p 270
+1180 V 12 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)17 b Ff(22)75 1229 y Fd(rl)p 117 1229 V 13 w(stuff)p
+230 1229 V 13 w(char)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)18 b Ff(28)75 1279 y Fd(rl)p 117 1279
+V 13 w(terminal)p 290 1279 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)16 b Ff(22)75 1329 y Fd(rl)p 117
+1329 V 13 w(unbind)p 250 1329 V 12 w(command)p 402 1329
+V 12 w(in)p 454 1329 V 13 w(map)5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18
+b Ff(24)75 1379 y Fd(rl)p 117 1379 V 13 w(unbind)p 250
+1379 V 12 w(function)p 422 1379 V 11 w(in)p 473 1379
+V 14 w(map)t Fe(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(24)75 1429 y Fd(rl)p
+117 1429 V 13 w(unbind)p 250 1429 V 12 w(key)5 b Fe(.)g(.)h(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(24)75
+1478 y Fd(rl)p 117 1478 V 13 w(unbind)p 250 1478 V 12
+w(key)p 322 1478 V 13 w(in)p 375 1478 V 13 w(map)10 b
+Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(24)75 1578 y Fs(S)75
+1636 y Fd(self-inser)o(t)10 b(\(a,)h(b,)h(A,)g(1,)g(!,)g(...\))c
+Fe(.)t(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)20 b Ff(12,)13 b(13)1012
+183 y Fd(set-mark)d(\(C-@\))e Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)24 b Ff(16)1012 233 y(sho)o(w-all-if-am)o(bigu)q(ous)8
+b Fe(.)g(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(6)1012
+283 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))e Fe(.)c(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24
+b Ff(15)1012 389 y Fs(T)1012 447 y Fd(tab-insert)9 b(\(M-TAB\))c
+Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(13)1012
+497 y Fd(tilde-expan)o(d)10 b(\(M-~\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)h(.)18 b Ff(16)1012 546 y Fd(to_lower)6 b Fe(.)s(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
+b Ff(29)1012 596 y Fd(to_upper)6 b Fe(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 b
+Ff(29)1012 646 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))c
+Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)18 b Ff(12,)13 b(13)1012 696 y Fd(transpose-w)o(or)o(ds)c
+(\(M-t\))c Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(12,)13 b(13)1012 802 y
+Fs(U)1012 860 y Fd(undo)f(\(C-)p 1166 860 V 13 w(,)g(C-x)g(C-u\))5
+b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(16)1012
+910 y Fd(universal-a)o(rg)o(ume)o(nt)9 b(\(\))g Fe(.)d(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+23 b Ff(14)1012 959 y Fd(unix-line-d)o(is)o(car)o(d)10
+b(\(C-u\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(13)1012 1009 y Fd(unix-word-r)o(ub)o
+(out)9 b(\(C-w\))s Fe(.)t(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(13,)d(14)1012 1059
+y Fd(upcase-word)c(\(M-u\))f Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23
+b Ff(12,)13 b(13)1012 1109 y Fd(uppercase)p 1194 1109
+V 11 w(p)5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)18 b Ff(28)1012 1159 y Fd(username)p 1174
+1159 V 11 w(completion)p 1385 1159 V 11 w(function)s
+Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16
+b Ff(34)1012 1265 y Fs(V)1012 1323 y Ff(visible-stats)t
+Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)17 b Ff(6)1012 1429 y Fs(Y)1012 1487 y Fd(yank)12
+b(\(C-y\))c Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+23 b Ff(13,)13 b(14)1012 1537 y Fd(yank-last-a)o(rg)c(\(M-.,)i(M-)p
+1433 1537 V 13 w(\))c Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)20 b Ff(11,)13 b(12)1012 1586 y Fd(yank-nth-ar)o(g)
+d(\(M-C-y\))c Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(11,)13 b(12)1012
+1636 y Fd(yank-pop)d(\(M-y\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+g(.)18 b Ff(13,)13 b(14)p eop
+%%Page: 52 54
+52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)i(Library)p
+eop
+%%Page: -1 55
+-1 54 bop 1862 -58 a Fu(i)75 183 y Fq(T)-7 b(able)27
+b(of)f(Con)n(ten)n(ts)75 354 y Fs(1)67 b(Command)22 b(Line)i(Editing)d
+Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
+(.)f(.)g(.)g(.)42 b Fs(1)224 423 y Fu(1.1)j(In)o(tro)q(duction)16
+b(to)f(Line)h(Editing)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)27 b Fu(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8
+b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)23 b Fu(1)374 532 y(1.2.1)44 b(Readline)17
+b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
+b Fu(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands)
+7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
+(.)h(.)21 b Fu(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands)
+11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 697 y(1.2.4)44 b(Readline)17
+b(Argumen)o(ts)12 b Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
+b Fu(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h
+(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27
+b Fu(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e
+Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)29 b Fu(3)374 861 y(1.3.1)44 b(Readline)17
+b(Init)f(File)h(Syn)o(tax)7 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
+b Fu(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5
+b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)g(.)f(.)19 b Fu(8)374 971 y(1.3.3)44 b(Sample)16
+b(Init)g(File)11 b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)26 b Fu(8)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h
+(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
+b Fu(11)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e
+Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(11)374 1135 y(1.4.2)44
+b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9
+b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(11)374 1190 y(1.4.3)44
+b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8
+b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30
+b Fu(12)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9
+b Fa(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(13)374
+1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c
+Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27
+b Fu(14)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l
+(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)25 b Fu(15)374 1409 y(1.4.7)44 b(Keyb)q(oard)15
+b(Macros)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21
+b Fu(15)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7
+b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+22 b Fu(16)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e
+Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)28 b Fu(17)75 1640 y Fs(2)67 b(Programming)23
+b(with)g(GNU)f(Readline)12 b Fb(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35
+b Fs(19)224 1708 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8
+b Fa(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(19)224 1763 y(2.2)45
+b(Custom)14 b(F)l(unctions)7 b Fa(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(20)374
+1818 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)11
+b Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 b Fu(20)374
+1873 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l(unction)6
+b Fa(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 b Fu(21)224 1928 y(2.3)45
+b(Readline)17 b(V)l(ariables)f Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)29 b Fu(21)224
+1982 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7
+b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(23)374 2037 y(2.4.1)44
+b(Naming)15 b(a)g(F)l(unction)e Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)27 b Fu(23)374 2092 y(2.4.2)44 b(Selecting)17
+b(a)e(Keymap)6 b Fa(.)h(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21
+b Fu(23)374 2147 y(2.4.3)44 b(Binding)17 b(Keys)5 b Fa(.)j(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)20 b
+Fu(24)374 2202 y(2.4.4)44 b(Asso)q(ciating)16 b(F)l(unction)g(Names)f
+(and)g(Bindings)8 b Fa(.)h(.)f(.)f(.)h(.)f(.)h(.)23 b
+Fu(25)374 2256 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f
+Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b
+Fu(26)374 2311 y(2.4.6)44 b(Redispla)o(y)10 b Fa(.)f(.)f(.)g(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26
+b Fu(27)374 2366 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7
+b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
+b Fu(27)374 2421 y(2.4.8)44 b(Utilit)o(y)16 b(F)l(unctions)e
+Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28
+b Fu(28)374 2475 y(2.4.9)44 b(Alternate)15 b(In)o(terface)5
+b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b
+Fu(29)374 2530 y(2.4.10)43 b(An)16 b(Example)f Fa(.)8
+b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30
+b Fu(29)224 2585 y(2.5)45 b(Readline)17 b(Signal)g(Handling)12
+b Fa(.)c(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27
+b Fu(31)224 2640 y(2.6)45 b(Custom)14 b(Completers)f
+Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
+h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)28 b Fu(32)p eop
+%%Page: -2 56
+-2 55 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)374
+42 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10
+b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(32)374 96 y(2.6.2)44
+b(Completion)16 b(F)l(unctions)6 b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
+21 b Fu(33)374 151 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c
+Fa(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(34)374 206
+y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b
+Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)20 b Fu(37)75 327 y Fs(Concept)i(Index)10 b Fb(.)i(.)e(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(47)75 462
+y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9
+b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)32 b Fs(49)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/readline/doc/texinfo.tex b/readline/doc/texinfo.tex
new file mode 100644
index 0000000..7d62f26
--- /dev/null
+++ b/readline/doc/texinfo.tex
@@ -0,0 +1,4692 @@
+%% TeX macros to handle texinfo files
+
+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
+% 94, 95, 1996 Free Software Foundation, Inc.
+
+%This texinfo.tex file is free software; you can redistribute it and/or
+%modify it under the terms of the GNU General Public License as
+%published by the Free Software Foundation; either version 2, or (at
+%your option) any later version.
+
+%This texinfo.tex file is distributed in the hope that it will be
+%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%General Public License for more details.
+
+%You should have received a copy of the GNU General Public License
+%along with this texinfo.tex file; see the file COPYING. If not, write
+%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+%Boston, MA 02111-1307, USA.
+
+
+%In other words, you are welcome to use, share and improve this program.
+%You are forbidden to forbid anyone else to use, share and improve
+%what you give them. Help stamp out software-hoarding!
+
+
+% Send bug reports to bug-texinfo@prep.ai.mit.edu.
+% Please include a *precise* test case in each bug report.
+
+
+% Make it possible to create a .fmt file just by loading this file:
+% if the underlying format is not loaded, start by loading it now.
+% Added by gildea November 1993.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+
+% This automatically updates the version number based on RCS.
+\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+\deftexinfoversion$Revision$
+\message{Loading texinfo package [Version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
+ \catcode`+=\active \catcode`\_=\active}
+
+% Save some parts of plain tex whose names we will redefine.
+
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv = \equiv
+\let\ptexi=\i
+\let\ptexlbrace=\{
+\let\ptexrbrace=\}
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextilde=\~
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+\let\~ = \tie % And make it available as @~.
+
+
+\message{Basics,}
+\chardef\other=12
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Set up fixed words for English.
+\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
+\def\putwordInfo{Info}%
+\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
+\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
+\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
+\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
+\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
+\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
+\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
+\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
+\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+\hyphenation{ap-pen-dix}
+\hyphenation{mini-buf-fer mini-buf-fers}
+\hyphenation{eshell}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen \bindingoffset
+\newdimen \normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{\tracingcommands2 \tracingstats2
+ \tracingpages1 \tracingoutput1 \tracinglostchars1
+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+
+%---------------------Begin change-----------------------
+%
+%%%% For @cropmarks command.
+% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\cornerlong \newdimen\cornerthick
+\newdimen \topandbottommargin
+\newdimen \outerhsize \newdimen \outervsize
+\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
+\outerhsize=7in
+%\outervsize=9.5in
+% Alternative @smallbook page size is 9.25in
+\outervsize=9.25in
+\topandbottommargin=.75in
+%
+%---------------------End change-----------------------
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}}
+\def\onepageout#1{%
+ \hoffset=\normaloffset
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ {%
+ \escapechar = `\\ % use backslash in output files.
+ \indexdummies
+ \shipout\vbox{%
+ {\let\hsize=\pagewidth \makeheadline}%
+ \pagebody{#1}%
+ {\let\hsize=\pagewidth \makefootline}%
+ }%
+ }%
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+%%%% For @cropmarks command %%%%
+
+% Here is a modification of the main output routine for Near East Publications
+% This provides right-angle cropmarks at all four corners.
+% The contents of the page are centerlined into the cropmarks,
+% and any desired binding offset is added as an \hskip on either
+% site of the centerlined box. (P. A. MacKay, 12 November, 1986)
+%
+\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
+{\escapechar=`\\\relax % makes sure backslash is used in output files.
+ \shipout
+ \vbox to \outervsize{\hsize=\outerhsize
+ \vbox{\line{\ewtop\hfill\ewtop}}
+ \nointerlineskip
+ \line{\vbox{\moveleft\cornerthick\nstop}
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}}
+ \vskip \topandbottommargin
+ \centerline{\ifodd\pageno\hskip\bindingoffset\fi
+ \vbox{
+ {\let\hsize=\pagewidth \makeheadline}
+ \pagebody{#1}
+ {\let\hsize=\pagewidth \makefootline}}
+ \ifodd\pageno\else\hskip\bindingoffset\fi}
+ \vskip \topandbottommargin plus1fill minus1fill
+ \boxmaxdepth\cornerthick
+ \line{\vbox{\moveleft\cornerthick\nsbot}
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}}
+ \nointerlineskip
+ \vbox{\line{\ewbot\hfill\ewbot}}
+ }}
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+%
+% Do @cropmarks to get crop marks
+\def\cropmarks{\let\onepageout=\croppageout }
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1 \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+%
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg#1{%
+ \let\next = #1%
+ \begingroup
+ \obeylines
+ \futurelet\temp\parseargx
+}
+
+% If the next token is an obeyed space (from an @example environment or
+% the like), remove it and recurse. Otherwise, we're done.
+\def\parseargx{%
+ % \obeyedspace is defined far below, after the definition of \sepspaces.
+ \ifx\obeyedspace\temp
+ \expandafter\parseargdiscardspace
+ \else
+ \expandafter\parseargline
+ \fi
+}
+
+% Remove a single space (as the delimiter token to the macro call).
+{\obeyspaces %
+ \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ %
+ % First remove any @c comment, then any @comment.
+ % Result of each macro is put in \toks0.
+ \argremovec #1\c\relax %
+ \expandafter\argremovecomment \the\toks0 \comment\relax %
+ %
+ % Call the caller's macro, saved as \next in \parsearg.
+ \expandafter\next\expandafter{\the\toks0}%
+ }%
+}
+
+% Since all \c{,omment} does is throw away the argument, we can let TeX
+% do that for us. The \relax here is matched by the \relax in the call
+% in \parseargline; it could be more or less anything, its purpose is
+% just to delimit the argument to the \c.
+\def\argremovec#1\c#2\relax{\toks0 = {#1}}
+\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+
+% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% @end itemize @c foo
+% will have two active spaces as part of the argument with the
+% `itemize'. Here we remove all active spaces from #1, and assign the
+% result to \toks0.
+%
+% This loses if there are any *other* active characters besides spaces
+% in the argument -- _ ^ +, for example -- since they get expanded.
+% Fortunately, Texinfo does not define any such commands. (If it ever
+% does, the catcode of the characters in questionwill have to be changed
+% here.) But this means we cannot call \removeactivespaces as part of
+% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
+% that \parsearg gets might well have any character at all in it.
+%
+\def\removeactivespaces#1{%
+ \begingroup
+ \ignoreactivespaces
+ \edef\temp{#1}%
+ \global\toks0 = \expandafter{\temp}%
+ \endgroup
+}
+
+% Change the active space to expand to nothing.
+%
+\begingroup
+ \obeyspaces
+ \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
+\endgroup
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+%% These are used to keep @begin/@end levels from running away
+%% Call \inENV within environments (after a \begingroup)
+\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+\def\ENVcheck{%
+\ifENV\errmessage{Still within an environment. Type Return to continue.}
+\endgroup\fi} % This is not perfect, but it should reduce lossage
+
+% @begin foo is the same as @foo, for now.
+\newhelp\EMsimple{Type <Return> to continue.}
+
+\outer\def\begin{\parsearg\beginxxx}
+
+\def\beginxxx #1{%
+\expandafter\ifx\csname #1\endcsname\relax
+{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+\csname #1\endcsname\fi}
+
+% @end foo executes the definition of \Efoo.
+%
+\def\end{\parsearg\endxxx}
+\def\endxxx #1{%
+ \removeactivespaces{#1}%
+ \edef\endthing{\the\toks0}%
+ %
+ \expandafter\ifx\csname E\endthing\endcsname\relax
+ \expandafter\ifx\csname \endthing\endcsname\relax
+ % There's no \foo, i.e., no ``environment'' foo.
+ \errhelp = \EMsimple
+ \errmessage{Undefined command `@end \endthing'}%
+ \else
+ \unmatchedenderror\endthing
+ \fi
+ \else
+ % Everything's ok; the right environment has been started.
+ \csname E\endthing\endcsname
+ \fi
+}
+
+% There is an environment #1, but it hasn't been started. Give an error.
+%
+\def\unmatchedenderror#1{%
+ \errhelp = \EMsimple
+ \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+}
+
+% Define the control sequence \E#1 to give an unmatched @end error.
+%
+\def\defineunmatchedend#1{%
+ \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+}
+
+
+% Single-spacing is done by various environments (specifically, in
+% \nonfillstart and \quotations).
+\newskip\singlespaceskip \singlespaceskip = 12.5pt
+\def\singlespace{%
+ % Why was this kern here? It messes up equalizing space above and below
+ % environments. --karl, 6may93
+ %{\advance \baselineskip by -\singlespaceskip
+ %\kern \baselineskip}%
+ \setleading \singlespaceskip
+}
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt \char '100}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt \char '173}}
+\def\myrbrace {{\tt \char '175}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+ % Definitions to produce actual \{ & \} command in an index.
+ \catcode`\{ = 12 \catcode`\} = 12
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\@ = 0 \catcode`\\ = 12
+ @gdef@lbracecmd[\{]%
+ @gdef@rbracecmd[\}]%
+@endgroup
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown
+% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ptexi
+ \else\ifx\temp\jmacro \j
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% @enddots{} is an end-of-sentence ellipsis.
+\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
+
+% @! is an end-of-sentence bang.
+\gdef\!{!\spacefactor=3000 }
+
+% @? is an end-of-sentence query.
+\gdef\?{?\spacefactor=3000 }
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+\def\group{\begingroup
+ \ifnum\catcode13=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ %
+ % The \vtop we start below produces a box with normal height and large
+ % depth; thus, TeX puts \baselineskip glue before it, and (when the
+ % next line of text is done) \lineskip glue after it. (See p.82 of
+ % the TeXbook.) Thus, space below is not quite equal to space
+ % above. But it's pretty close.
+ \def\Egroup{%
+ \egroup % End the \vtop.
+ \endgroup % End the \group.
+ }%
+ %
+ \vtop\bgroup
+ % We have to put a strut on the last line in case the @group is in
+ % the midst of an example, rather than completely enclosing it.
+ % Otherwise, the interline space between the last line of the group
+ % and the first line afterwards is too small. But we can't put the
+ % strut in \Egroup, since there it would be on a line by itself.
+ % Hence this just inserts a strut at the beginning of each line.
+ \everypar = {\strut}%
+ %
+ % Since we have a strut on every line, we don't need any of TeX's
+ % normal interline spacing.
+ \offinterlineskip
+ %
+ % OK, but now we have to do something about blank
+ % lines in the input in @example-like environments, which normally
+ % just turn into \lisppar, which will insert no space now that we've
+ % turned off the interline space. Simplest is to make them be an
+ % empty paragraph.
+ \ifx\par\lisppar
+ \edef\par{\leavevmode \par}%
+ %
+ % Reset ^^M's definition to new definition of \par.
+ \obeylines
+ \fi
+ %
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\def\need{\parsearg\needx}
+
+% Old definition--didn't work.
+%\def\needx #1{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
+%\prevdepth=-1000pt
+%}}
+
+\def\needx#1{%
+ % Go into vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % Don't add any leading before our big empty box, but allow a page
+ % break, since the best break might be right here.
+ \allowbreak
+ \nointerlineskip
+ \vtop to #1\mil{\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+}
+
+% @br forces paragraph break
+
+\let\br = \par
+
+% @dots{} output some dots
+
+\def\dots{$\ldots$}
+
+% @page forces the start of a new page
+
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\def\exdent{\parsearg\exdentyyy}
+\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+
+% This defn is used inside nofill environments such as @example.
+\def\nofillexdent{\parsearg\nofillexdentyyy}
+\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+\leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
+
+\def\inmargin#1{%
+\strut\vadjust{\nobreak\kern-\strutdepth
+ \vtop to \strutdepth{\baselineskip\strutdepth\vss
+ \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+
+%\hbox{{\rm#1}}\hfil\break}}
+
+% @include file insert text of that file as input.
+% Allow normal characters that we make active in the argument (a file name).
+\def\include{\begingroup
+ \catcode`\\=12
+ \catcode`~=12
+ \catcode`^=12
+ \catcode`_=12
+ \catcode`|=12
+ \catcode`<=12
+ \catcode`>=12
+ \catcode`+=12
+ \parsearg\includezzz}
+% Restore active chars for included file.
+\def\includezzz#1{\endgroup\begingroup
+ % Read the included file in a group so nested @include's work.
+ \def\thisfile{#1}%
+ \input\thisfile
+\endgroup}
+
+\def\thisfile{}
+
+% @center line outputs that line, centered
+
+\def\center{\parsearg\centerzzz}
+\def\centerzzz #1{{\advance\hsize by -\leftskip
+\advance\hsize by -\rightskip
+\centerline{#1}}}
+
+% @sp n outputs n lines of vertical space
+
+\def\sp{\parsearg\spxxx}
+\def\spxxx #1{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
+\parsearg \commentxxx}
+
+\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
+
+\let\c=\comment
+
+% @paragraphindent is defined for the Info formatting commands only.
+\let\paragraphindent=\comment
+
+% Prevent errors for section commands.
+% Used in @ignore and in failing conditionals.
+\def\ignoresections{%
+\let\chapter=\relax
+\let\unnumbered=\relax
+\let\top=\relax
+\let\unnumberedsec=\relax
+\let\unnumberedsection=\relax
+\let\unnumberedsubsec=\relax
+\let\unnumberedsubsection=\relax
+\let\unnumberedsubsubsec=\relax
+\let\unnumberedsubsubsection=\relax
+\let\section=\relax
+\let\subsec=\relax
+\let\subsubsec=\relax
+\let\subsection=\relax
+\let\subsubsection=\relax
+\let\appendix=\relax
+\let\appendixsec=\relax
+\let\appendixsection=\relax
+\let\appendixsubsec=\relax
+\let\appendixsubsection=\relax
+\let\appendixsubsubsec=\relax
+\let\appendixsubsubsection=\relax
+\let\contents=\relax
+\let\smallbook=\relax
+\let\titlepage=\relax
+}
+
+% Used in nested conditionals, where we have to parse the Texinfo source
+% and so want to turn off most commands, in case they are used
+% incorrectly.
+%
+\def\ignoremorecommands{%
+ \let\defcodeindex = \relax
+ \let\defcv = \relax
+ \let\deffn = \relax
+ \let\deffnx = \relax
+ \let\defindex = \relax
+ \let\defivar = \relax
+ \let\defmac = \relax
+ \let\defmethod = \relax
+ \let\defop = \relax
+ \let\defopt = \relax
+ \let\defspec = \relax
+ \let\deftp = \relax
+ \let\deftypefn = \relax
+ \let\deftypefun = \relax
+ \let\deftypevar = \relax
+ \let\deftypevr = \relax
+ \let\defun = \relax
+ \let\defvar = \relax
+ \let\defvr = \relax
+ \let\ref = \relax
+ \let\xref = \relax
+ \let\printindex = \relax
+ \let\pxref = \relax
+ \let\settitle = \relax
+ \let\setchapternewpage = \relax
+ \let\setchapterstyle = \relax
+ \let\everyheading = \relax
+ \let\evenheading = \relax
+ \let\oddheading = \relax
+ \let\everyfooting = \relax
+ \let\evenfooting = \relax
+ \let\oddfooting = \relax
+ \let\headings = \relax
+ \let\include = \relax
+ \let\lowersections = \relax
+ \let\down = \relax
+ \let\raisesections = \relax
+ \let\up = \relax
+ \let\set = \relax
+ \let\clear = \relax
+ \let\item = \relax
+}
+
+% Ignore @ignore ... @end ignore.
+%
+\def\ignore{\doignore{ignore}}
+
+% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
+%
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\html{\doignore{html}}
+\def\menu{\doignore{menu}}
+\def\direntry{\doignore{direntry}}
+
+% Also ignore @macro ... @end macro. The user must run texi2dvi,
+% which runs makeinfo to do macro expansion. Ignore @unmacro, too.
+\def\macro{\doignore{macro}}
+\let\unmacro = \comment
+
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory = \comment
+
+% Ignore text until a line `@end #1'.
+%
+\def\doignore#1{\begingroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define a command to swallow text until we reach `@end #1'.
+ \long\def\doignoretext##1\end #1{\enddoignore}%
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \catcode32 = 10
+ %
+ % And now expand that command.
+ \doignoretext
+}
+
+% What we do to finish off ignored text.
+%
+\def\enddoignore{\endgroup\ignorespaces}%
+
+\newif\ifwarnedobs\warnedobsfalse
+\def\obstexwarn{%
+ \ifwarnedobs\relax\else
+ % We need to warn folks that they may have trouble with TeX 3.0.
+ % This uses \immediate\write16 rather than \message to get newlines.
+ \immediate\write16{}
+ \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+ \immediate\write16{If you are running another version of TeX, relax.}
+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+ \immediate\write16{ Then upgrade your TeX installation if you can.}
+ \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
+ \immediate\write16{If you are stuck with version 3.0, run the}
+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+ \global\warnedobstrue
+ \fi
+}
+
+% **In TeX 3.0, setting text in \nullfont hangs tex. For a
+% workaround (which requires the file ``dummy.tfm'' to be installed),
+% uncomment the following line:
+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+
+% Ignore text, except that we keep track of conditional commands for
+% purposes of nesting, up to an `@end #1' command.
+%
+\def\nestedignore#1{%
+ \obstexwarn
+ % We must actually expand the ignored text to look for the @end
+ % command, so that nested ignore constructs work. Thus, we put the
+ % text into a \vbox and then do nothing with the result. To minimize
+ % the change of memory overflow, we follow the approach outlined on
+ % page 401 of the TeXbook: make the current font be a dummy font.
+ %
+ \setbox0 = \vbox\bgroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define `@end #1' to end the box, which will in turn undefine the
+ % @end command again.
+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+ %
+ % We are going to be parsing Texinfo commands. Most cause no
+ % trouble when they are used incorrectly, but some commands do
+ % complicated argument parsing or otherwise get confused, so we
+ % undefine them.
+ %
+ % We can't do anything about stray @-signs, unfortunately;
+ % they'll produce `undefined control sequence' errors.
+ \ignoremorecommands
+ %
+ % Set the current font to be \nullfont, a TeX primitive, and define
+ % all the font commands to also use \nullfont. We don't use
+ % dummy.tfm, as suggested in the TeXbook, because not all sites
+ % might have that installed. Therefore, math mode will still
+ % produce output, but that should be an extremely small amount of
+ % stuff compared to the main input.
+ %
+ \nullfont
+ \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
+ \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
+ \let\tensf = \nullfont
+ % Similarly for index fonts (mostly for their use in
+ % smallexample)
+ \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
+ \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
+ \let\indsf = \nullfont
+ %
+ % Don't complain when characters are missing from the fonts.
+ \tracinglostchars = 0
+ %
+ % Don't bother to do space factor calculations.
+ \frenchspacing
+ %
+ % Don't report underfull hboxes.
+ \hbadness = 10000
+ %
+ % Do minimal line-breaking.
+ \pretolerance = 10000
+ %
+ % Do not execute instructions in @tex
+ \def\tex{\doignore{tex}}
+}
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it. Make sure the catcode of space is correct to avoid
+% losing inside @example, for instance.
+%
+\def\set{\begingroup\catcode` =10 \parsearg\setxxx}
+\def\setxxx#1{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ \def\temp{#2}%
+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \fi
+ \endgroup
+}
+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
+% \next or other control sequences that we've defined might get us into
+% an infinite loop. Consider `@set foo @cite{bar}'.
+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\def\clear{\parsearg\clearxxx}
+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+
+% @value{foo} gets the text saved in variable foo.
+%
+\def\value#1{\expandafter
+ \ifx\csname SET#1\endcsname\relax
+ {\{No value for ``#1''\}}
+ \else \csname SET#1\endcsname \fi}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+\def\ifset{\parsearg\ifsetxxx}
+\def\ifsetxxx #1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \expandafter\ifsetfail
+ \else
+ \expandafter\ifsetsucceed
+ \fi
+}
+\def\ifsetsucceed{\conditionalsucceed{ifset}}
+\def\ifsetfail{\nestedignore{ifset}}
+\defineunmatchedend{ifset}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+\def\ifclear{\parsearg\ifclearxxx}
+\def\ifclearxxx #1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \expandafter\ifclearsucceed
+ \else
+ \expandafter\ifclearfail
+ \fi
+}
+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+\def\ifclearfail{\nestedignore{ifclear}}
+\defineunmatchedend{ifclear}
+
+% @iftex always succeeds; we read the text following, through @end
+% iftex). But `@end iftex' should be valid only after an @iftex.
+%
+\def\iftex{\conditionalsucceed{iftex}}
+\defineunmatchedend{iftex}
+
+% We can't just want to start a group at @iftex (for example) and end it
+% at @end iftex, since then @set commands inside the conditional have no
+% effect (they'd get reverted at the end of the group). So we must
+% define \Eiftex to redefine itself to be its previous value. (We can't
+% just define it to fail again with an ``unmatched end'' error, since
+% the @ifset might be nested.)
+%
+\def\conditionalsucceed#1{%
+ \edef\temp{%
+ % Remember the current value of \E#1.
+ \let\nece{prevE#1} = \nece{E#1}%
+ %
+ % At the `@end #1', redefine \E#1 to be its previous value.
+ \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+ }%
+ \temp
+}
+
+% We need to expand lots of \csname's, but we don't want to expand the
+% control sequences after we've constructed them.
+%
+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math means output in math mode.
+% We don't use $'s directly in the definition of \math because control
+% sequences like \math are expanded when the toc file is written. Then,
+% we read the toc file back, the $'s will be normal characters (as they
+% should be, according to the definition of Texinfo). So we must use a
+% control sequence to switch into and out of math mode.
+%
+% This isn't quite enough for @math to work properly in indices, but it
+% seems unlikely it will ever be needed there.
+%
+\let\implicitmath = $
+\def\math#1{\implicitmath #1\implicitmath}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{\implicitmath\ptexbullet\implicitmath}
+\def\minus{\implicitmath-\implicitmath}
+
+\def\node{\ENVcheck\parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]}
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\let\nwnode=\node
+\let\lastnode=\relax
+
+\def\donoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\setref{\lastnode}\fi
+\global\let\lastnode=\relax}
+
+\def\unnumbnoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
+\global\let\lastnode=\relax}
+
+\def\appendixnoderef{\ifx\lastnode\relax\else
+\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
+\global\let\lastnode=\relax}
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \readauxfile
+ \opencontents
+ \openindices
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+ \comment % Ignore the actual filename.
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
+% \def\macroxxx#1#2 \end macro{%
+% \expandafter\gdef\macrotemp#1{#2}%
+% \endgroup}
+
+%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
+%\def\linemacroxxx#1#2 \end linemacro{%
+%\let\parsearg=\relax
+%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
+%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
+%\expandafter\gdef\macrotempx#1{#2}%
+%\endgroup}
+
+%\def\butfirst#1{}
+
+
+\message{fonts,}
+
+% Font-change commands.
+
+% Texinfo supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf analogous to plain's \rm, etc.
+\newfam\sffam
+\def\sf{\fam=\sffam \tensf}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this one.
+\def\ttsl{\tenttsl}
+
+%% Try out Computer Modern fonts at \magstephalf
+\let\mainmagstep=\magstephalf
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+\ifx\bigger\relax
+\let\mainmagstep=\magstep1
+\setfont\textrm\rmshape{12}{1000}
+\setfont\texttt\ttshape{12}{1000}
+\else
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\fi
+% Instead of cmb10, you many want to use cmbx10.
+% cmbx10 is a prettier font on its own, but cmb10
+% looks better when embedded in a line with cmr10.
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun, etc.
+\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+\setfont\deftt\ttshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+% Fonts for indices and small examples (9pt).
+% We actually use the slanted font rather than the italic,
+% because texinfo normally uses the slanted fonts for that.
+% Do not make many font distinctions in general in the index, since they
+% aren't very useful.
+\setfont\ninett\ttshape{9}{1000}
+\setfont\indrm\rmshape{9}{1000}
+\setfont\indit\slshape{9}{1000}
+\let\indsl=\indit
+\let\indtt=\ninett
+\let\indttsl=\ninett
+\let\indsf=\indrm
+\let\indbf=\indrm
+\setfont\indsc\scshape{10}{900}
+\font\indi=cmmi9
+\font\indsy=cmsy9
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{12}{\magstep2}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
+% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
+% \setfont\ssecsl\slshape{10}{\magstep1}
+% \setfont\ssectt\ttshape{10}{\magstep1}
+% \setfont\ssecsf\sfshape{10}{\magstep1}
+
+%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
+%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
+%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
+%\setfont\ssectt\ttshape{10}{1315}
+%\setfont\ssecsf\sfshape{10}{1315}
+
+%\let\ssecbf=\ssecrm
+
+% Subsection fonts (13.15pt).
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{\magstep1}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{\magstep1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled \magstep1
+% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+% but that is not a standard magnification.
+
+% Fonts for title page:
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\let\authorrm = \secrm
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts, we
+% don't bother to reset \scriptfont and \scriptscriptfont (which would
+% also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
+ \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
+ \textfont\ttfam = \tentt \textfont\sffam = \tensf
+}
+
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this so that font changes will continue to work
+% in math mode, where it is the current \fam that is relevant in most
+% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
+% \tenbf}, for example. By redefining \tenbf, we obviate the need to
+% redefine \bf itself.
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+ \resetmathfonts}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+\def\indexfonts{%
+ \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
+ \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
+ \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
+ \resetmathfonts \setleading{12pt}}
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\textfonts
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bxshape{12}{1000}
+\setfont\shortcontsl\slshape{12}{1000}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\var=\smartitalic
+\let\dfn=\smartitalic
+\let\emph=\smartitalic
+\let\cite=\smartitalic
+
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+\def\t#1{%
+ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+}
+\let\ttfont=\t
+\def\samp #1{`\tclose{#1}'\null}
+\setfont\smallrm\rmshape{8}{1000}
+\font\smallsy=cmsy9
+\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
+ \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
+ \vbox{\hrule\kern-0.4pt
+ \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
+ \kern-0.4pt\hrule}%
+ \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+\let\file=\samp
+\let\url=\samp % perhaps include a hypertex \special eventually
+\def\email#1{$\langle${\tt #1}$\rangle$}
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \frenchspacing
+ #1%
+ }%
+ \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in \code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+\catcode`\-=\active
+\catcode`\_=\active
+\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
+% The following is used by \doprintindex to insure that long function names
+% wrap around. It is necessary for - and _ to be active before the index is
+% read from the file, as \entry parses the arguments long before \code is
+% ever called. -- mycroft
+\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
+}
+
+\def\realdash{-}
+\def\realunder{_}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{\normalunderscore\discretionary{}{}{}}
+\def\codex #1{\tclose{#1}\endgroup}
+
+%\let\exp=\tclose %Was temporary
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+%
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\ttsl\look}}\fi
+\else{\tclose{\ttsl\look}}\fi}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of
+% @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+\def\r#1{{\rm #1}} % roman font
+% Use of \lowercase was suggested.
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @pounds{} is a sterling sign.
+\def\pounds{{\it\$}}
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\def\titlefont#1{{\titlerm #1}}
+
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+\def\shorttitlepage{\parsearg\shorttitlepagezzz}
+\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\def\titlepage{\begingroup \parindent=0pt \textfonts
+ \let\subtitlerm=\tenrm
+% I deinstalled the following change because \cmr12 is undefined.
+% This change was not in the ChangeLog anyway. --rms.
+% \let\subtitlerm=\cmr12
+ \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+ %
+ \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+ %
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ %
+ % Now you can print the title using @title.
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefont{##1}}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Now you can put text using @subtitle.
+ \def\subtitle{\parsearg\subtitlezzz}%
+ \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+ %
+ % @author should come last, but may come many times.
+ \def\author{\parsearg\authorzzz}%
+ \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+ {\authorfont \leftline{##1}}}%
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \oldpage
+ \let\page = \oldpage
+ \hbox{}}%
+% \def\page{\oldpage \hbox{}}
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ \HEADINGSon
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks \evenheadline % Token sequence for heading line of even pages
+\newtoks \oddheadline % Token sequence for heading line of odd pages
+\newtoks \evenfootline % Token sequence for footing line of even pages
+\newtoks \oddfootline % Token sequence for footing line of odd pages
+
+% Now make Tex use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\everyheading{\parsearg\everyheadingxxx}
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\everyfooting{\parsearg\everyfootingxxx}
+
+{\catcode`\@=0 %
+
+\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
+\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
+\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+%
+}% unbind the catcode of @.
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% Produces Day Month Year style of output.
+\def\today{\number\day\space
+\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi
+\space\number\year}
+
+% Use this if you want the Month Day, Year style of output.
+%\def\today{\ifcase\month\or
+%January\or February\or March\or April\or May\or June\or
+%July\or August\or September\or October\or November\or December\fi
+%\space\number\day, \number\year}
+
+% @settitle line... specifies the title of the document, for headings
+% It generates no output of its own
+
+\def\thistitle{No Title}
+\def\settitle{\parsearg\settitlezzz}
+\def\settitlezzz #1{\gdef\thistitle{#1}}
+
+
+\message{tables,}
+
+% @tabs -- simple alignment
+
+% These don't work. For one thing, \+ is defined as outer.
+% So these macros cannot even be defined.
+
+%\def\tabs{\parsearg\tabszzz}
+%\def\tabszzz #1{\settabs\+#1\cr}
+%\def\tabline{\parsearg\tablinezzz}
+%\def\tablinezzz #1{\+#1\cr}
+%\def\&{&}
+
+% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
+
+\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
+
+\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+ \itemzzz {#1}}
+
+\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+ \itemzzz {#1}}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemfont{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % Be sure we are not still in the middle of a paragraph.
+ %{\parskip = 0in
+ %\par
+ %}%
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. Unfortunately
+ % we can't prevent a possible page break at the following
+ % \baselineskip glue.
+ \nobreak
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line. Since that
+ % text will be indented by \tableindent, we make the item text be in
+ % a zero-width box.
+ \noindent
+ \rlap{\hskip -\tableindent\box0}\ignorespaces%
+ \endgroup%
+ \itemxneedsnegativevskiptrue%
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a table}}
+\def\itemx{\errmessage{@itemx while not in a table}}
+\def\kitem{\errmessage{@kitem while not in a table}}
+\def\kitemx{\errmessage{@kitemx while not in a table}}
+\def\xitem{\errmessage{@xitem while not in a table}}
+\def\xitemx{\errmessage{@xitemx while not in a table}}
+
+%% Contains a kludge to get @end[description] to work
+\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+
+\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+{\obeylines\obeyspaces%
+\gdef\tablex #1^^M{%
+\tabley\dontindex#1 \endtabley}}
+
+\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+{\obeylines\obeyspaces%
+\gdef\ftablex #1^^M{%
+\tabley\fnitemindex#1 \endtabley
+\def\Eftable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+{\obeylines\obeyspaces%
+\gdef\vtablex #1^^M{%
+\tabley\vritemindex#1 \endtabley
+\def\Evtable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\dontindex #1{}
+\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+\def\vritemindex #1{\doind {vr}{\code{#1}}}%
+
+{\obeyspaces %
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+
+\def\tablez #1#2#3#4#5#6{%
+\aboveenvbreak %
+\begingroup %
+\def\Edescription{\Etable}% Necessary kludge.
+\let\itemindex=#1%
+\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+\ifnum 0#4>0 \tableindent=#4\mil \fi %
+\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+\def\itemfont{#2}%
+\itemmax=\tableindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \tableindent %
+\exdentamount=\tableindent
+\parindent = 0pt
+\parskip = \smallskipamount
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def\Etable{\endgraf\afterenvbreak\endgroup}%
+\let\item = \internalBitem %
+\let\itemx = \internalBitemx %
+\let\kitem = \internalBkitem %
+\let\kitemx = \internalBkitemx %
+\let\xitem = \internalBxitem %
+\let\xitemx = \internalBxitemx %
+}
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\def\itemize{\parsearg\itemizezzz}
+
+\def\itemizezzz #1{%
+ \begingroup % ended by the @end itemsize
+ \itemizey {#1}{\Eitemize}
+}
+
+\def\itemizey #1#2{%
+\aboveenvbreak %
+\itemmax=\itemindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \itemindent %
+\exdentamount=\itemindent
+\parindent = 0pt %
+\parskip = \smallskipamount %
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def#2{\endgraf\afterenvbreak\endgroup}%
+\def\itemcontents{#1}%
+\let\item=\itemizeitem}
+
+% Set sfcode to normal for the chars that usually have another value.
+% These are `.?!:;,'
+\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
+ \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\def\enumerate{\parsearg\enumeratezzz}
+\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ \begingroup % ended by the @end enumerate
+ %
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call itemizey, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \itemizey{#1.}\Eenumerate\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+% Definition of @item while inside @itemize.
+
+\def\itemizeitem{%
+\advance\itemno by 1
+{\let\par=\endgraf \smallbreak}%
+\ifhmode \errmessage{\in hmode at itemizeitem}\fi
+{\parskip=0in \hskip 0pt
+\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+\vadjust{\penalty 1200}}%
+\flushcr}
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+%
+% For those who want to use more than one line's worth of words in
+% the preamble, break the line within one argument and it
+% will parse correctly, i.e.,
+%
+% @multitable {Column 1 template} {Column 2 template} {Column 3
+% template}
+% Not:
+% @multitable {Column 1 template} {Column 2 template}
+% {Column 3 template}
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab, @multitable or @end multitable do not need to be on their
+% own lines, but it will not hurt if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+
+%%%%
+% Dimensions
+
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+%%%%
+% Macros used to set up halign preamble:
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+%% 2/1/96, to allow fractions to be given with more than one digit.
+\def\pickupwholefraction#1 {\global\advance\colcount by1 %
+\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
+\setuptable}
+
+\newcount\colcount
+\def\setuptable#1{\def\firstarg{#1}%
+\ifx\firstarg\xendsetuptable\let\go\relax%
+\else
+ \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction % In this case arg of setuptable
+ % is the decimal point before the
+ % number given in percent of hsize.
+ % We don't need this so we don't use it.
+ \else
+ \global\advance\colcount by1
+ \setbox0=\hbox{#1 }% Add a normal word space as a separator;
+ % typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi%
+ \fi%
+\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
+\fi\go}
+
+%%%%
+% multitable syntax
+\def\tab{&\hskip1sp\relax} % 2/2/96
+ % tiny skip here makes sure this column space is
+ % maintained, even if it is never used.
+
+
+%%%%
+% @multitable ... @end multitable definitions:
+
+\def\multitable{\parsearg\dotable}
+
+\def\dotable#1{\bgroup
+\let\item\cr
+\tolerance=9500
+\hbadness=9500
+\setmultitablespacing
+\parskip=\multitableparskip
+\parindent=\multitableparindent
+\overfullrule=0pt
+\global\colcount=0\relax%
+\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
+ % To parse everything between @multitable and @item :
+\setuptable#1 \endsetuptable
+ % Need to reset this to 0 after \setuptable.
+\global\colcount=0\relax%
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+\halign\bgroup&\global\advance\colcount by 1\relax%
+\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ % If user has set preamble in terms of percent of \hsize
+ % we will use that dimension as the width of the column, and
+ % the \leftskip will keep entries from bumping into each other.
+ % Table will start at left margin and final column will justify at
+ % right margin.
+\ifnum\colcount=1
+\else
+ \ifsetpercent
+ \else
+ % If user has <not> set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+\leftskip=\multitablecolspace
+\fi
+\noindent##\multistrut}\cr%
+ % \everycr will reset column counter, \colcount, at the end of
+ % each line. Every column entry will cause \colcount to advance by one.
+ % The table preamble
+ % looks at the current \colcount to find the correct column width.
+\global\everycr{\noalign{%
+\filbreak%% keeps underfull box messages off when table breaks over pages.
+\global\colcount=0\relax}}
+}
+
+\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+% If so, do nothing. If not, give it an appropriate dimension based on
+% current baselineskip.
+\ifdim\multitablelinespace=0pt
+%% strut to put in table in case some entry doesn't have descenders,
+%% to keep lines equally spaced
+\let\multistrut = \strut
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%% If so, set to same dimension as multitablelinespace.
+\else
+\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+width0pt\relax} \fi
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi}
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within \newindex.
+{\catcode`\@=11
+\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+
+\def\newindex #1{
+\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\noexpand\doindex {#1}}
+}
+
+% @defindex foo == \newindex{foo}
+
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+
+\def\newcodeindex #1{
+\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\noexpand\docodeindex {#1}}
+}
+
+\def\defcodeindex{\parsearg\newcodeindex}
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+\def\synindex #1 #2 {%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\noexpand\doindex {#2}}%
+}
+
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+\def\syncodeindex #1 #2 {%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\noexpand\docodeindex {#2}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+\def\indexdummies{%
+% Take care of the plain tex accent commands.
+\def\"{\realbackslash "}%
+\def\`{\realbackslash `}%
+\def\'{\realbackslash '}%
+\def\^{\realbackslash ^}%
+\def\~{\realbackslash ~}%
+\def\={\realbackslash =}%
+\def\b{\realbackslash b}%
+\def\c{\realbackslash c}%
+\def\d{\realbackslash d}%
+\def\u{\realbackslash u}%
+\def\v{\realbackslash v}%
+\def\H{\realbackslash H}%
+% Take care of the plain tex special European modified letters.
+\def\oe{\realbackslash oe}%
+\def\ae{\realbackslash ae}%
+\def\aa{\realbackslash aa}%
+\def\OE{\realbackslash OE}%
+\def\AE{\realbackslash AE}%
+\def\AA{\realbackslash AA}%
+\def\o{\realbackslash o}%
+\def\O{\realbackslash O}%
+\def\l{\realbackslash l}%
+\def\L{\realbackslash L}%
+\def\ss{\realbackslash ss}%
+% Take care of texinfo commands likely to appear in an index entry.
+% (Must be a way to avoid doing expansion at all, and thus not have to
+% laboriously list every single command here.)
+\def\@{@}% will be @@ when we switch to @ as escape char.
+%\let\{ = \lbracecmd
+%\let\} = \rbracecmd
+\def\_{{\realbackslash _}}%
+\def\w{\realbackslash w }%
+\def\bf{\realbackslash bf }%
+%\def\rm{\realbackslash rm }%
+\def\sl{\realbackslash sl }%
+\def\sf{\realbackslash sf}%
+\def\tt{\realbackslash tt}%
+\def\gtr{\realbackslash gtr}%
+\def\less{\realbackslash less}%
+\def\hat{\realbackslash hat}%
+%\def\char{\realbackslash char}%
+\def\TeX{\realbackslash TeX}%
+\def\dots{\realbackslash dots }%
+\def\copyright{\realbackslash copyright }%
+\def\tclose##1{\realbackslash tclose {##1}}%
+\def\code##1{\realbackslash code {##1}}%
+\def\dotless##1{\realbackslash dotless {##1}}%
+\def\samp##1{\realbackslash samp {##1}}%
+\def\,##1{\realbackslash ,{##1}}%
+\def\t##1{\realbackslash t {##1}}%
+\def\r##1{\realbackslash r {##1}}%
+\def\i##1{\realbackslash i {##1}}%
+\def\b##1{\realbackslash b {##1}}%
+\def\cite##1{\realbackslash cite {##1}}%
+\def\key##1{\realbackslash key {##1}}%
+\def\file##1{\realbackslash file {##1}}%
+\def\var##1{\realbackslash var {##1}}%
+\def\kbd##1{\realbackslash kbd {##1}}%
+\def\dfn##1{\realbackslash dfn {##1}}%
+\def\emph##1{\realbackslash emph {##1}}%
+\unsepspaces
+}
+
+% If an index command is used in an @example environment, any spaces
+% therein should become regular spaces in the raw index file, not the
+% expansion of \tie (\\leavevmode \penalty \@M \ ).
+{\obeyspaces
+ \gdef\unsepspaces{\obeyspaces\let =\space}}
+
+% \indexnofonts no-ops all font-change commands.
+% This is used when outputting the strings to sort the index by.
+\def\indexdummyfont#1{#1}
+\def\indexdummytex{TeX}
+\def\indexdummydots{...}
+
+\def\indexnofonts{%
+% Just ignore accents.
+\let\,=\indexdummyfont
+\let\"=\indexdummyfont
+\let\`=\indexdummyfont
+\let\'=\indexdummyfont
+\let\^=\indexdummyfont
+\let\~=\indexdummyfont
+\let\==\indexdummyfont
+\let\b=\indexdummyfont
+\let\c=\indexdummyfont
+\let\d=\indexdummyfont
+\let\u=\indexdummyfont
+\let\v=\indexdummyfont
+\let\H=\indexdummyfont
+\let\dotless=\indexdummyfont
+% Take care of the plain tex special European modified letters.
+\def\oe{oe}%
+\def\ae{ae}%
+\def\aa{aa}%
+\def\OE{OE}%
+\def\AE{AE}%
+\def\AA{AA}%
+\def\o{o}%
+\def\O{O}%
+\def\l{l}%
+\def\L{L}%
+\def\ss{ss}%
+\let\w=\indexdummyfont
+\let\t=\indexdummyfont
+\let\r=\indexdummyfont
+\let\i=\indexdummyfont
+\let\b=\indexdummyfont
+\let\emph=\indexdummyfont
+\let\strong=\indexdummyfont
+\let\cite=\indexdummyfont
+\let\sc=\indexdummyfont
+%Don't no-op \tt, since it isn't a user-level command
+% and is used in the definitions of the active chars like <, >, |...
+%\let\tt=\indexdummyfont
+\let\tclose=\indexdummyfont
+\let\code=\indexdummyfont
+\let\file=\indexdummyfont
+\let\samp=\indexdummyfont
+\let\kbd=\indexdummyfont
+\let\key=\indexdummyfont
+\let\var=\indexdummyfont
+\let\TeX=\indexdummytex
+\let\dots=\indexdummydots
+\def\@{@}%
+}
+
+% To define \realbackslash, we must make \ not be an escape.
+% We must first make another character (@) an escape
+% so we do not become unable to do a definition.
+
+{\catcode`\@=0 \catcode`\\=\other
+@gdef@realbackslash{\}}
+
+\let\indexbackslash=0 %overridden during \printindex.
+
+\let\SETmarginindex=\relax %initialize!
+% workhorse for all \fooindexes
+% #1 is name of index, #2 is stuff to put there
+\def\doind #1#2{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+ \fi
+ {%
+ \count255=\lastpenalty
+ {%
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \escapechar=`\\
+ {%
+ \let\folio=0 % We will expand all macros now EXCEPT \folio.
+ \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % First process the index-string with all font commands turned off
+ % to get the string to sort by.
+ {\indexnofonts \xdef\indexsorttmp{#2}}%
+ %
+ % Now produce the complete index entry, with both the sort key and the
+ % original text, including any font commands.
+ \toks0 = {#2}%
+ \edef\temp{%
+ \write\csname#1indfile\endcsname{%
+ \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+ }%
+ \temp
+ }%
+ }%
+ \penalty\count255
+ }%
+}
+
+\def\dosubind #1#2#3{%
+{\count10=\lastpenalty %
+{\indexdummies % Must do this here, since \bf, etc expand at this stage
+\escapechar=`\\%
+{\let\folio=0%
+\def\rawbackslashxx{\indexbackslash}%
+%
+% Now process the index-string once, with all font commands turned off,
+% to get the string to sort the index by.
+{\indexnofonts
+\xdef\temp1{#2 #3}%
+}%
+% Now produce the complete index entry. We process the index-string again,
+% this time with font commands expanded, to get what to print in the index.
+\edef\temp{%
+\write \csname#1indfile\endcsname{%
+\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
+\temp }%
+}\penalty\count10}}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% This is what you call to cause a particular index to get printed.
+% Write
+% @unnumbered Function Index
+% @printindex fn
+
+\def\printindex{\parsearg\doprintindex}
+
+\def\doprintindex#1{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \indexfonts \rm
+ \tolerance = 9500
+ \indexbreaks
+ \def\indexbackslash{\rawbackslashxx}%
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \catcode`\\ = 0
+ \catcode`\@ = 11
+ \escapechar = `\\
+ \begindoublecolumns
+ %
+ % See if the index file exists and is nonempty.
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ (Index is nonexistent)
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ (Index is empty)
+ \else
+ \input \jobname.#1s
+ \fi
+ \fi
+ \closein 1
+ \enddoublecolumns
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+% Same as \bigskipamount except no shrink.
+% \balancecolumns gets confused if there is any shrink.
+\newskip\initialskipamount \initialskipamount 12pt plus4pt
+
+\def\initial #1{%
+{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+\ifdim\lastskip<\initialskipamount
+\removelastskip \penalty-200 \vskip \initialskipamount\fi
+\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
+
+% This typesets a paragraph consisting of #1, dot leaders, and then #2
+% flush to the right margin. It is used for index and table of contents
+% entries. The paragraph is indented by \leftskip.
+%
+\def\entry #1#2{\begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent=2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % Start a ``paragraph'' for the index entry so the line breaking
+ % parameters we've set above will have an effect.
+ \noindent
+ %
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #1%
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+ \def\tempb{#2}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd\ \else%
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ #2% The page number ends the paragraph.
+ \fi%
+ \par
+\endgroup}
+
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {\global\setbox\partialpage
+ =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
+ \eject
+ %
+ % Now switch to the double-column output routine.
+ \output={\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it once.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +- <
+ % 1pt) as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+ % box0 will be the left-hand column, box1 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty
+}
+\def\pagesofar{%
+ % The contents of the output page -- any previous material,
+ % followed by the two boxes we just split.
+ \unvbox\partialpage
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+}
+\def\enddoublecolumns{%
+ \output={\balancecolumns}\eject % split what we have
+ \endgroup
+ % Back to normal single-column typesetting, but take account of the
+ % fact that we just accumulated some stuff on the output page.
+ \pagegoal=\vsize
+}
+\def\balancecolumns{%
+ % Called on the last page of the double column material.
+ \setbox0=\vbox{\unvbox255}%
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen@
+ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ \pagesofar
+}
+\catcode `\@=\other
+
+
+\message{sectioning,}
+% Define chapters, sections, etc.
+
+\newcount \chapno
+\newcount \secno \secno=0
+\newcount \subsecno \subsecno=0
+\newcount \subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount \appendixno \appendixno = `\@
+\def\appendixletter{\char\the\appendixno}
+
+\newwrite \contentsfile
+% This is called from \setfilename.
+\def\opencontents{\openout \contentsfile = \jobname.toc}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it. @section does likewise
+
+\def\thischapter{} \def\thissection{}
+\def\seccheck#1{\if \pageno<0 %
+\errmessage{@#1 not allowed after generating table of contents}\fi
+%
+}
+
+\def\chapternofonts{%
+\let\rawbackslash=\relax%
+\let\frenchspacing=\relax%
+\def\result{\realbackslash result}
+\def\equiv{\realbackslash equiv}
+\def\expansion{\realbackslash expansion}
+\def\print{\realbackslash print}
+\def\TeX{\realbackslash TeX}
+\def\dots{\realbackslash dots}
+\def\copyright{\realbackslash copyright}
+\def\tt{\realbackslash tt}
+\def\bf{\realbackslash bf }
+\def\w{\realbackslash w}
+\def\less{\realbackslash less}
+\def\gtr{\realbackslash gtr}
+\def\hat{\realbackslash hat}
+\def\char{\realbackslash char}
+\def\tclose##1{\realbackslash tclose {##1}}
+\def\code##1{\realbackslash code {##1}}
+\def\samp##1{\realbackslash samp {##1}}
+\def\r##1{\realbackslash r {##1}}
+\def\b##1{\realbackslash b {##1}}
+\def\key##1{\realbackslash key {##1}}
+\def\file##1{\realbackslash file {##1}}
+\def\kbd##1{\realbackslash kbd {##1}}
+% These are redefined because @smartitalic wouldn't work inside xdef.
+\def\i##1{\realbackslash i {##1}}
+\def\cite##1{\realbackslash cite {##1}}
+\def\var##1{\realbackslash var {##1}}
+\def\emph##1{\realbackslash emph {##1}}
+\def\dfn##1{\realbackslash dfn {##1}}
+}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% Choose a numbered-heading macro
+% #1 is heading level if unmodified by @raisesections or @lowersections
+% #2 is text for heading
+\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \chapterzzz{#2}
+\or
+ \seczzz{#2}
+\or
+ \numberedsubseczzz{#2}
+\or
+ \numberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \chapterzzz{#2}
+ \else
+ \numberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses appendix heading levels
+\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \appendixzzz{#2}
+\or
+ \appendixsectionzzz{#2}
+\or
+ \appendixsubseczzz{#2}
+\or
+ \appendixsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \appendixzzz{#2}
+ \else
+ \appendixsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses numberless heading levels
+\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \unnumberedzzz{#2}
+\or
+ \unnumberedseczzz{#2}
+\or
+ \unnumberedsubseczzz{#2}
+\or
+ \unnumberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \unnumberedzzz{#2}
+ \else
+ \unnumberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+
+\def\thischaptername{No Chapter Title}
+\outer\def\chapter{\parsearg\chapteryyy}
+\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz #1{\seccheck{chapter}%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
+\chapmacro {#1}{\the\chapno}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+% We don't substitute the actual chapter name into \thischapter
+% because we don't want its macros evaluated now.
+\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+{\chapternofonts%
+\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+}}
+
+\outer\def\appendix{\parsearg\appendixyyy}
+\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz #1{\seccheck{appendix}%
+\secno=0 \subsecno=0 \subsubsecno=0
+\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
+\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
+\gdef\thissection{#1}%
+\gdef\thischaptername{#1}%
+\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+{\chapternofonts%
+\edef\temp{{\realbackslash chapentry
+ {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\global\let\section = \appendixsec
+\global\let\subsection = \appendixsubsec
+\global\let\subsubsection = \appendixsubsubsec
+}}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\def\centerchap{\parsearg\centerchapyyy}
+\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+
+\outer\def\top{\parsearg\unnumberedyyy}
+\outer\def\unnumbered{\parsearg\unnumberedyyy}
+\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz #1{\seccheck{unnumbered}%
+\secno=0 \subsecno=0 \subsubsecno=0
+%
+% This used to be simply \message{#1}, but TeX fully expands the
+% argument to \message. Therefore, if #1 contained @-commands, TeX
+% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+% expanded @cite (which turns out to cause errors because \cite is meant
+% to be executed, not expanded).
+%
+% Anyway, we don't want the fully-expanded definition of @cite to appear
+% as a result of the \message, we just want `@cite' itself. We use
+% \the<toks register> to achieve this: TeX expands \the<toks> only once,
+% simply yielding the contents of the <toks register>.
+\toks0 = {#1}\message{(\the\toks0)}%
+%
+\unnumbchapmacro {#1}%
+\gdef\thischapter{#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\global\let\section = \unnumberedsec
+\global\let\subsection = \unnumberedsubsec
+\global\let\subsubsection = \unnumberedsubsubsec
+}}
+
+\outer\def\numberedsec{\parsearg\secyyy}
+\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
+\def\seczzz #1{\seccheck{section}%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash secentry %
+{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsection{\parsearg\appendixsecyyy}
+\outer\def\appendixsec{\parsearg\appendixsecyyy}
+\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz #1{\seccheck{appendixsection}%
+\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash secentry %
+{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
+\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+\plainsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
+\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz #1{\seccheck{subsection}%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsecentry %
+{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
+\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
+\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsecentry %
+{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+\plainsubsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
+\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsubsecentry %
+ {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
+ {\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\donoderef %
+\penalty 10000 %
+}}
+
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
+\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
+\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+\subsubsecheading {#1}
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+{\chapternofonts%
+\edef\temp{{\realbackslash subsubsecentry{#1}%
+ {\appendixletter}
+ {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\appendixnoderef %
+\penalty 10000 %
+}}
+
+\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+\plainsubsubsecheading {#1}\gdef\thissection{#1}%
+{\chapternofonts%
+\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
+\escapechar=`\\%
+\write \contentsfile \temp %
+\unnumbnoderef %
+\penalty 10000 %
+}}
+
+% These are variants which are not "outer", so they can appear in @ifinfo.
+% Actually, they should now be obsolete; ordinary section commands should work.
+\def\infotop{\parsearg\unnumberedzzz}
+\def\infounnumbered{\parsearg\unnumberedzzz}
+\def\infounnumberedsec{\parsearg\unnumberedseczzz}
+\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+
+\def\infoappendix{\parsearg\appendixzzz}
+\def\infoappendixsec{\parsearg\appendixseczzz}
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+
+\def\infochapter{\parsearg\chapterzzz}
+\def\infosection{\parsearg\sectionzzz}
+\def\infosubsection{\parsearg\subsectionzzz}
+\def\infosubsubsection{\parsearg\subsubsectionzzz}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and
+% such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{\parsearg\majorheadingzzz}
+\def\majorheadingzzz #1{%
+{\advance\chapheadingskip by 10pt \chapbreak }%
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+\def\chapheading{\parsearg\chapheadingzzz}
+\def\chapheadingzzz #1{\chapbreak %
+{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+% @heading, @subheading, @subsubheading.
+\def\heading{\parsearg\plainsecheading}
+\def\subheading{\parsearg\plainsubsecheading}
+\def\subsubheading{\parsearg\plainsubsubsecheading}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+\def\CHAPFplain{
+\global\let\chapmacro=\chfplain
+\global\let\unnumbchapmacro=\unnchfplain
+\global\let\centerchapmacro=\centerchfplain}
+
+% Plain chapter opening.
+% #1 is the text, #2 the chapter number or empty if unnumbered.
+\def\chfplain#1#2{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ \def\chapnum{#2}%
+ \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% Plain opening for unnumbered.
+\def\unnchfplain#1{\chfplain{#1}{}}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerchfplain#1{{%
+ \def\centerparametersmaybe{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+ }%
+ \chfplain{#1}{}%
+}}
+
+\CHAPFplain % The default
+
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 10000 %
+}
+
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
+}
+
+\def\CHAPFopen{
+\global\let\chapmacro=\chfopen
+\global\let\unnumbchapmacro=\unnchfopen
+\global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
+\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+
+% Subsection titles.
+\newskip \subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+
+% Subsubsection titles.
+\let\subsubsecheadingskip = \subsecheadingskip
+\let\subsubsecheadingbreak = \subsecheadingbreak
+\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+
+
+% Print any size section title.
+%
+% #1 is the section type (sec/subsec/subsubsec), #2 is the section
+% number (maybe empty), #3 the text.
+\def\sectionheading#1#2#3{%
+ {%
+ \expandafter\advance\csname #1headingskip\endcsname by \parskip
+ \csname #1headingbreak\endcsname
+ }%
+ {%
+ % Switch to the right set of fonts.
+ \csname #1fonts\endcsname \rm
+ %
+ % Only insert the separating space if we have a section number.
+ \def\secnum{#2}%
+ \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+ %
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 % zero if no section number
+ \unhbox0 #3}%
+ }%
+ \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
+}
+
+
+\message{toc printing,}
+% Finish up the main text and prepare to read what we've written
+% to \contentsfile.
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout \contentsfile
+ \ifnum \pageno>0
+ \pageno = -1 % Request roman numbered pages.
+ \fi
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+}
+
+
+% Normal (long) toc.
+\outer\def\contents{%
+ \startcontents{\putwordTableofContents}%
+ \input \jobname.toc
+ \endgroup
+ \vfill \eject
+}
+
+% And just the chapters.
+\outer\def\summarycontents{%
+ \startcontents{\putwordShortContents}%
+ %
+ \let\chapentry = \shortchapentry
+ \let\unnumbchapentry = \shortunnumberedentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\secentry ##1##2##3##4{}
+ \def\unnumbsecentry ##1##2{}
+ \def\subsecentry ##1##2##3##4##5{}
+ \def\unnumbsubsecentry ##1##2{}
+ \def\subsubsecentry ##1##2##3##4##5##6{}
+ \def\unnumbsubsubsecentry ##1##2{}
+ \input \jobname.toc
+ \endgroup
+ \vfill \eject
+}
+\let\shortcontents = \summarycontents
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapter-level things, for both the long and short contents.
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+
+% See comments in \dochapentry re vbox and related settings
+\def\shortchapentry#1#2#3{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
+}
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
+% We could simplify the code here by writing out an \appendixentry
+% command in the toc file for appendices, instead of using \chapentry
+% for both, but it doesn't seem worth it.
+\setbox0 = \hbox{\shortcontrm \putwordAppendix }
+\newdimen\shortappendixwidth \shortappendixwidth = \wd0
+
+\def\shortchaplabel#1{%
+ % We typeset #1 in a box of constant width, regardless of the text of
+ % #1, so the chapter titles will come out aligned.
+ \setbox0 = \hbox{#1}%
+ \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
+ %
+ % This space should be plenty, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ \advance\dimen0 by 1.1em
+ \hbox to \dimen0{#1\hfil}%
+}
+
+\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
+
+% Sections.
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
+
+% Subsections.
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+
+% And subsubsections.
+\def\subsubsecentry#1#2#3#4#5#6{%
+ \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+% This parameter controls the indentation of the various levels.
+\newdimen\tocindent \tocindent = 3pc
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno{#2}}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno{#2}}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno{#2}}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno{#2}}%
+\endgroup}
+
+% Final typesetting of a toc entry; we use the same \entry macro as for
+% the index entries, but we want to suppress hyphenation here. (We
+% can't do that in the \entry macro, since index entries might consist
+% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+%
+% \turnoffactive is for the sake of @" used for umlauts.
+\def\tocentry#1#2{\begingroup
+ \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+ \entry{\turnoffactive #1}{\turnoffactive #2}%
+\endgroup}
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\let\subsecentryfonts = \textfonts
+\let\subsubsecentryfonts = \textfonts
+
+
+\message{environments,}
+
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+% Furthermore, these definitions must come after we define our fonts.
+\newbox\dblarrowbox \newbox\longdblarrowbox
+\newbox\pushcharbox \newbox\bullbox
+\newbox\equivbox \newbox\errorbox
+
+%{\tentt
+%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
+%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
+% Adapted from the manmac format (p.420 of TeXbook)
+%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
+% depth .1ex\hfil}
+%}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% Adapted from the TeXbook's \boxit.
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+
+\global\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+
+% The @error{} command.
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\def\tex{\begingroup
+\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+\catcode `\%=14
+\catcode 43=12 % plus
+\catcode`\"=12
+\catcode`\==12
+\catcode`\|=12
+\catcode`\<=12
+\catcode`\>=12
+\escapechar=`\\
+%
+\let\,=\ptexcomma
+\let\~=\ptextilde
+\let\{=\ptexlbrace
+\let\}=\ptexrbrace
+\let\.=\ptexdot
+\let\*=\ptexstar
+\let\dots=\ptexdots
+\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}
+\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}
+\def\@{@}%
+\let\bullet=\ptexbullet
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
+%
+\let\Etex=\endgroup}
+
+% Define @lisp ... @endlisp.
+% @lisp does a \begingroup so it can rebind things,
+% including the definition of @endlisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% Make each space character in the input produce a normal interword
+% space in the output. Don't allow a line break at this space, as this
+% is used only in environments like @example, where each line of input
+% should produce a line of output anyway.
+%
+{\obeyspaces %
+\gdef\sepspaces{\obeyspaces\let =\tie}}
+
+% Define \obeyedspace to be our active space, whatever it is. This is
+% for use in \parsearg.
+{\sepspaces%
+\global\let\obeyedspace= }
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip
+%
+\def\aboveenvbreak{{\advance\envskipamount by \parskip
+\endgraf \ifdim\lastskip<\envskipamount
+\removelastskip \penalty-50 \vskip\envskipamount \fi}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
+\let\nonarrowing=\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \cartouche: draw rectangle w/rounded corners around argument
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\long\def\cartouche{%
+\begingroup
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt %we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18pt % allow for 3pt kerns on either
+% side, and for 6pt waste from
+% each corner char
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing=\comment
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \hsize=\cartinner
+ \kern3pt
+ \begingroup
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+\def\Ecartouche{%
+ \endgroup
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+\endgroup
+}}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \inENV % This group ends at the end of the body
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \singlespace
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ \parindent = 0pt
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ % @cartouche defines \nonarrowing to inhibit narrowing
+ % at next level down.
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \let\exdent=\nofillexdent
+ \let\nonarrowing=\relax
+ \fi
+}
+
+% To ending an @example-like environment, we first end the paragraph
+% (via \afterenvbreak's vertical glue), and then the group. That way we
+% keep the zero \parskip that the environments set -- \parskip glue
+% will be inserted at the beginning of the next paragraph in the
+% document, after the environment.
+%
+\def\nonfillfinish{\afterenvbreak\endgroup}%
+
+% This macro is
+\def\lisp{\begingroup
+ \nonfillstart
+ \let\Elisp = \nonfillfinish
+ \tt
+ \rawbackslash % have \ input char produce \ char from current font
+ \gobble
+}
+
+% Define the \E... control sequence only if we are inside the
+% environment, so the error checking in \end will work.
+%
+% We must call \lisp last in the definition, since it reads the
+% return following the @example (or whatever) command.
+%
+\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+
+% @smallexample and @smalllisp. This is not used unless the @smallbook
+% command is given. Originally contributed by Pavel@xerox.
+%
+\def\smalllispx{\begingroup
+ \nonfillstart
+ \let\Esmalllisp = \nonfillfinish
+ \let\Esmallexample = \nonfillfinish
+ %
+ % Smaller fonts for small examples.
+ \indexfonts \tt
+ \rawbackslash % make \ output the \ character from the current font (tt)
+ \gobble
+}
+
+% This is @display; same as @lisp except use roman font.
+%
+\def\display{\begingroup
+ \nonfillstart
+ \let\Edisplay = \nonfillfinish
+ \gobble
+}
+
+% This is @format; same as @display except don't narrow margins.
+%
+\def\format{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eformat = \nonfillfinish
+ \gobble
+}
+
+% @flushleft (same as @format) and @flushright.
+%
+\def\flushleft{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eflushleft = \nonfillfinish
+ \gobble
+}
+\def\flushright{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eflushright = \nonfillfinish
+ \advance\leftskip by 0pt plus 1fill
+ \gobble}
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.
+%
+\def\quotation{%
+ \begingroup\inENV %This group ends at the end of the @quotation body
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \singlespace
+ \parindent=0pt
+ % We have retained a nonzero parskip for the environment, since we're
+ % doing normal filling. So to avoid extra space below the environment...
+ \def\Equotation{\parskip = 0pt \nonfillfinish}%
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \let\nonarrowing = \relax
+ \fi
+}
+
+\message{defuns,}
+% Define formatter for defuns
+% First, allow user to change definition object font (\df) internally
+\def\setdeffont #1 {\csname DEF#1\endcsname}
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deftypemargin \deftypemargin=12pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+\newcount\parencount
+% define \functionparens, which makes ( and ) and & do special things.
+% \functionparens affects the group it is contained in.
+\def\activeparens{%
+\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+\catcode`\[=\active \catcode`\]=\active}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+\global\let(=\lparen \global\let)=\rparen
+\global\let[=\lbrack \global\let]=\rbrack
+
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+% This is used to turn on special parens
+% but make & act ordinary (given that it's active).
+\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+
+% Definitions of (, ) and & used in args for functions.
+% This is the definition of ( outside of all parentheses.
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
+\global\advance\parencount by 1 }
+%
+% This is the definition of ( when already inside a level of parens.
+\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+%
+\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+% also in that case restore the outer-level definition of (.
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+\global\advance \parencount by -1 }
+% If we encounter &foo, then turn on ()-hacking afterwards
+\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+%
+\gdef\normalparens{\boldbrax\let&=\ampnr}
+} % End of definition inside \activeparens
+%% These parens (in \boldbrax) actually are a little bolder than the
+%% contained text. This is especially needed for [ and ]
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
+\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+
+% First, defname, which formats the header line itself.
+% #1 should be the function name.
+% #2 should be the type of definition, such as "Function".
+
+\def\defname #1#2{%
+% Get the values of \leftskip and \rightskip as they were
+% outside the @def...
+\dimen2=\leftskip
+\advance\dimen2 by -\defbodyindent
+\dimen3=\rightskip
+\advance\dimen3 by -\defbodyindent
+\noindent %
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+\parshape 2 0in \dimen0 \defargsindent \dimen1 %
+% Now output arg 2 ("Function" or some such)
+% ending at \deftypemargin from the right margin,
+% but stuck inside a box of width 0 so it does not interfere with linebreaking
+{% Adjust \hsize to exclude the ambient margins,
+% so that \rightline will obey them.
+\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
+% Make all lines underfull and no complaints:
+\tolerance=10000 \hbadness=10000
+\advance\leftskip by -\defbodyindent
+\exdentamount=\defbodyindent
+{\df #1}\enskip % Generate function name
+}
+
+% Actually process the body of a definition
+% #1 should be the terminating control sequence, such as \Edefun.
+% #2 should be the "another name" control sequence, such as \defunx.
+% #3 should be the control sequence that actually processes the header,
+% such as \defunheader.
+
+\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active % 61 is `='
+\obeylines\activeparens\spacesplit#3}
+
+\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
+
+\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
+
+% These parsing functions are similar to the preceding ones
+% except that they do not make parens into active characters.
+% These are used for "variables" since they have no arguments.
+
+\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylines\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylines\spacesplit#3}
+
+% This is used for \def{tp,vr}parsebody. It could probably be used for
+% some of the others, too, with some judicious conditionals.
+%
+\def\parsebodycommon#1#2#3{%
+ \begingroup\inENV %
+ \medbreak %
+ % Define the end token that this defining construct specifies
+ % so that it will exit this group.
+ \def#1{\endgraf\endgroup\medbreak}%
+ \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
+ \parindent=0in
+ \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+ \exdentamount=\defbodyindent
+ \begingroup\obeylines
+}
+
+\def\defvrparsebody#1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \spacesplit{#3{#4}}%
+}
+
+% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
+% type is just `struct', because we lose the braces in `{struct
+% termios}' when \spacesplit reads its undelimited argument. Sigh.
+% \let\deftpparsebody=\defvrparsebody
+%
+% So, to get around this, we put \empty in with the type name. That
+% way, TeX won't find exactly `{...}' as an undelimited argument, and
+% won't strip off the braces.
+%
+\def\deftpparsebody #1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+}
+
+% Fine, but then we have to eventually remove the \empty *and* the
+% braces (if any). That's what this does, putting the result in \tptemp.
+%
+\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
+
+% After \spacesplit has done its work, this is called -- #1 is the final
+% thing to call, #2 the type name (which starts with \empty), and #3
+% (which might be empty) the arguments.
+%
+\def\parsetpheaderline#1#2#3{%
+ \removeemptybraces#2\relax
+ #1{\tptemp}{#3}%
+}%
+
+\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylines\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\spacesplit{#3{#5}}}
+
+% Split up #2 at the first space token.
+% call #1 with two arguments:
+% the first is all of #2 before the space token,
+% the second is all of #2 after that space token.
+% If #2 contains no space token, all of it is passed as the first arg
+% and the second is passed as empty.
+
+{\obeylines
+\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
+\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
+\ifx\relax #3%
+#1{#2}{}\else #1{#2}{#3#4}\fi}}
+
+% So much for the things common to all kinds of definitions.
+
+% Define @defun.
+
+% First, define the processing that is wanted for arguments of \defun
+% Use this to expand the args and terminate the paragraph they make up
+
+\def\defunargs #1{\functionparens \sl
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+\hyphenchar\tensl=0
+#1%
+\hyphenchar\tensl=45
+\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+\def\deftypefunargs #1{%
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+% Use \boldbraxnoamp, not \functionparens, so that & is not special.
+\boldbraxnoamp
+\tclose{#1}% avoid \code because of side effects on active chars
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+% Do complete processing of one @defun or @defunx line already parsed.
+
+% @deffn Command forward-char nchars
+
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+
+\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defun == @deffn Function
+
+\def\defun{\defparsebody\Edefun\defunx\defunheader}
+
+\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Function}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefun int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+
+% #1 is the data type. #2 is the name and args.
+\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+% #1 is the data type, #2 the name, #3 the args.
+\def\deftypefunheaderx #1#2 #3\relax{%
+\doind {fn}{\code{#2}}% Make entry in function index
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
+\deftypefunargs {#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
+% \defheaderxcond#1\relax$$$
+% puts #1 in @code, followed by a space, but does nothing if #1 is null.
+\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
+
+% #1 is the classification. #2 is the data type. #3 is the name and args.
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+% #1 is the classification, #2 the data type, #3 the name, #4 the args.
+\def\deftypefnheaderx #1#2#3 #4\relax{%
+\doind {fn}{\code{#3}}% Make entry in function index
+\begingroup
+\normalparens % notably, turn off `&' magic, which prevents
+% at least some C++ text from working
+\defname {\defheaderxcond#2\relax$$$#3}{#1}%
+\deftypefunargs {#4}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defmac == @deffn Macro
+
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+
+\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Macro}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defspec == @deffn Special Form
+
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+
+\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{Special Form}%
+\defunargs {#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% This definition is run if you use @defunx
+% anywhere other than immediately after a @defun or @defunx.
+
+\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
+\def\defunx #1 {\errmessage{@defunx in invalid context}}
+\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
+\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
+\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
+\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
+
+% @defmethod, and so on
+
+% @defop {Funny Method} foo-class frobnicate argument
+
+\def\defop #1 {\def\defoptype{#1}%
+\defopparsebody\Edefop\defopx\defopheader\defoptype}
+
+\def\defopheader #1#2#3{%
+\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
+\begingroup\defname {#2}{\defoptype{} on #1}%
+\defunargs {#3}\endgroup %
+}
+
+% @defmethod == @defop Method
+
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+
+\def\defmethodheader #1#2#3{%
+\dosubind {fn}{\code{#2}}{on #1}% entry in function index
+\begingroup\defname {#2}{Method on #1}%
+\defunargs {#3}\endgroup %
+}
+
+% @defcv {Class Option} foo-class foo-flag
+
+\def\defcv #1 {\def\defcvtype{#1}%
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+
+\def\defcvarheader #1#2#3{%
+\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
+\begingroup\defname {#2}{\defcvtype{} of #1}%
+\defvarargs {#3}\endgroup %
+}
+
+% @defivar == @defcv {Instance Variable}
+
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+
+\def\defivarheader #1#2#3{%
+\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
+\begingroup\defname {#2}{Instance Variable of #1}%
+\defvarargs {#3}\endgroup %
+}
+
+% These definitions are run if you use @defmethodx, etc.,
+% anywhere other than immediately after a @defmethod, etc.
+
+\def\defopx #1 {\errmessage{@defopx in invalid context}}
+\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
+\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
+\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
+
+% Now @defvar
+
+% First, define the processing that is wanted for arguments of @defvar.
+% This is actually simple: just print them in roman.
+% This must expand the args and terminate the paragraph they make up
+\def\defvarargs #1{\normalparens #1%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
+
+% @defvr Counter foo-count
+
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+
+\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+
+% @defvar == @defvr Variable
+
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+
+\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{Variable}%
+\defvarargs {#2}\endgroup %
+}
+
+% @defopt == @defvr {User Option}
+
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+
+\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{User Option}%
+\defvarargs {#2}\endgroup %
+}
+
+% @deftypevar int foobar
+
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+% #1 is the data type. #2 is the name.
+\def\deftypevarheader #1#2{%
+\doind {vr}{\code{#2}}% Make entry in variables index
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% @deftypevr {Global Flag} int enable
+
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
+\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% This definition is run if you use @defvarx
+% anywhere other than immediately after a @defvar or @defvarx.
+
+\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
+\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
+\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
+
+% Now define @deftp
+% Args are printed in bold, a slight difference from @defvar.
+
+\def\deftpargs #1{\bf \defvarargs{#1}}
+
+% @deftp Class window height width ...
+
+\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+
+\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+
+% This definition is run if you use @deftpx, etc
+% anywhere other than immediately after a @deftp, etc.
+
+\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
+
+
+\message{cross reference,}
+% Define cross-reference macros
+\newwrite \auxfile
+
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% \setref{foo} defines a cross-reference point named foo.
+
+\def\setref#1{%
+\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Ysectionnumberandtype}}
+
+\def\unnumbsetref#1{%
+\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Ynothing}}
+
+\def\appendixsetref#1{%
+\dosetq{#1-title}{Ytitle}%
+\dosetq{#1-pg}{Ypagenumber}%
+\dosetq{#1-snt}{Yappendixletterandtype}}
+
+% \xref, \pxref, and \ref generate cross-references to specified points.
+% For \xrefX, #1 is the node name, #2 the name of the Info
+% cross-reference, #3 the printed node name, #4 the name of the Info
+% file, #5 the name of the printed manual. All but the node name can be
+% omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printednodename{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual}%
+ \setbox0=\hbox{\printednodename}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1>0pt%
+ % It is in another manual, so we don't have it.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+ \def\printednodename{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printednodename{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+ % insert empty discretionaries after hyphens, which means that it will
+ % not find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens, this
+ % is a loss. Therefore, we give the text of the node name again, so it
+ % is as if TeX is seeing it for the first time.
+ \ifdim \wd1 > 0pt
+ \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
+ \else
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive \refx{#1-snt}{}}%
+ \space [\printednodename],\space
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi
+\endgroup}
+
+% \dosetq is the interface for calls from other macros
+
+% Use \turnoffactive so that punctuation chars such as underscore
+% work in node names.
+\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat%
+\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
+\next}}
+
+% \internalsetq {foo}{page} expands into
+% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
+% When the aux file is read, ' is the escape character
+
+\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
+
+% Things to be expanded by \internalsetq
+
+\def\Ypagenumber{\folio}
+
+\def\Ytitle{\thissection}
+
+\def\Ynothing{}
+
+\def\Ysectionnumberandtype{%
+\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
+\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
+\else %
+\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\def\Yappendixletterandtype{%
+\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
+\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
+\else \ifnum \subsubsecno=0 %
+\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
+\else %
+\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
+\fi \fi \fi }
+
+\gdef\xreftie{'tie}
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Non-3.0.
+\else
+ \def\linenumber{\the\inputlineno:\space}
+\fi
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+
+\def\refx#1#2{%
+ \expandafter\ifx\csname X#1\endcsname\relax
+ % If not defined, say something at least.
+ $\langle$un\-de\-fined$\rangle$%
+ \ifhavexrefs
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \csname X#1\endcsname
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+
+% This is the macro invoked by entries in the aux file.
+\def\xrdef #1#2{
+{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
+
+\def\readauxfile{%
+\begingroup
+\catcode `\^^@=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\^^C=\other
+\catcode `\^^D=\other
+\catcode `\^^E=\other
+\catcode `\^^F=\other
+\catcode `\^^G=\other
+\catcode `\^^H=\other
+\catcode `\ =\other
+\catcode `\^^L=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode `\=\other
+\catcode 26=\other
+\catcode `\^^[=\other
+\catcode `\^^\=\other
+\catcode `\^^]=\other
+\catcode `\^^^=\other
+\catcode `\^^_=\other
+\catcode `\@=\other
+\catcode `\^=\other
+\catcode `\~=\other
+\catcode `\[=\other
+\catcode `\]=\other
+\catcode`\"=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode `\$=\other
+\catcode `\#=\other
+\catcode `\&=\other
+% `\+ does not work, so use 43.
+\catcode 43=\other
+% Make the characters 128-255 be printing characters
+{%
+ \count 1=128
+ \def\loop{%
+ \catcode\count 1=\other
+ \advance\count 1 by 1
+ \ifnum \count 1<256 \loop \fi
+ }%
+}%
+% the aux file uses ' as the escape.
+% Turn off \ as an escape so we do not lose on
+% entries which were dumped with control sequences in their names.
+% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+% Reference to such entries still does not work the way one would wish,
+% but at least they do not bomb out when the aux file is read in.
+\catcode `\{=1 \catcode `\}=2
+\catcode `\%=\other
+\catcode `\'=0
+\catcode`\^=7 % to make ^^e4 etc usable in xref tags
+\catcode `\\=\other
+\openin 1 \jobname.aux
+\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
+\global\warnedobstrue
+\fi
+% Open the new aux file. Tex will close it automatically at exit.
+\openout \auxfile=\jobname.aux
+\endgroup}
+
+
+% Footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only..
+\let\footnotestyle=\comment
+
+\let\ptexfootnote=\footnote
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \footnotezzz
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+\long\gdef\footnotezzz#1{\insert\footins{%
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ % Hang the footnote text off the number.
+ \hang
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ #1\strut}%
+}
+
+}%end \catcode `\@=11
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+
+% End of control word definitions.
+
+\message{and turning on texinfo input format.}
+
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% Set some numeric style parameters, for 8.5 x 11 format.
+
+\hsize = 6in
+\hoffset = .25in
+\newdimen\defaultparindent \defaultparindent = 15pt
+\parindent = \defaultparindent
+\parskip 3pt plus 2pt minus 1pt
+\setleading{13.2pt}
+\advance\topskip by 1.2cm
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness=10000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. This makes it come to about 9pt for the 8.5x11 format.
+%
+\ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+\else
+ \emergencystretch = \hsize
+ \divide\emergencystretch by 45
+\fi
+
+% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
+\def\smallbook{
+ \global\chapheadingskip = 15pt plus 4pt minus 2pt
+ \global\secheadingskip = 12pt plus 3pt minus 2pt
+ \global\subsecheadingskip = 9pt plus 2pt minus 2pt
+ %
+ \global\lispnarrowing = 0.3in
+ \setleading{12pt}
+ \advance\topskip by -1cm
+ \global\parskip 2pt plus 1pt
+ \global\hsize = 5in
+ \global\vsize=7.5in
+ \global\tolerance=700
+ \global\hfuzz=1pt
+ \global\contentsrightmargin=0pt
+ \global\deftypemargin=0pt
+ \global\defbodyindent=.5cm
+ %
+ \global\pagewidth=\hsize
+ \global\pageheight=\vsize
+ %
+ \global\let\smalllisp=\smalllispx
+ \global\let\smallexample=\smalllispx
+ \global\def\Esmallexample{\Esmalllisp}
+}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{
+\global\tolerance=700
+\global\hfuzz=1pt
+\setleading{12pt}
+\global\parskip 15pt plus 1pt
+
+\global\vsize= 53\baselineskip
+\advance\vsize by \topskip
+%\global\hsize= 5.85in % A4 wide 10pt
+\global\hsize= 6.5in
+\global\outerhsize=\hsize
+\global\advance\outerhsize by 0.5in
+\global\outervsize=\vsize
+\global\advance\outervsize by 0.6in
+
+\global\pagewidth=\hsize
+\global\pageheight=\vsize
+}
+
+\bindingoffset=0pt
+\normaloffset=\hoffset
+\pagewidth=\hsize
+\pageheight=\vsize
+
+% Allow control of the text dimensions. Parameters in order: textheight;
+% textwidth; voffset; hoffset; binding offset; topskip.
+% All require a dimension;
+% header is additional; added length extends the bottom of the page.
+
+\def\changepagesizes#1#2#3#4#5#6{
+ \global\vsize= #1
+ \global\topskip= #6
+ \advance\vsize by \topskip
+ \global\voffset= #3
+ \global\hsize= #2
+ \global\outerhsize=\hsize
+ \global\advance\outerhsize by 0.5in
+ \global\outervsize=\vsize
+ \global\advance\outervsize by 0.6in
+ \global\pagewidth=\hsize
+ \global\pageheight=\vsize
+ \global\normaloffset= #4
+ \global\bindingoffset= #5}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
+% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+\def\afourlatex
+ {\global\tolerance=700
+ \global\hfuzz=1pt
+ \setleading{12pt}
+ \global\parskip 15pt plus 1pt
+ \advance\baselineskip by 1.6pt
+ \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
+ }
+
+% Use @afourwide to print on European A4 paper in wide format.
+\def\afourwide{\afourpaper
+\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+
+% This macro is used to make a character print one way in ttfont
+% where it can probably just be output, and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt \char '042}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt \char '176}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def\auxhat{\def^{'hat}}
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+
+\catcode`\|=\active
+\def|{{\tt \char '174}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+%\catcode 27=\active
+%\def^^[{$\diamondsuit$}
+
+% Set up an active definition for =, but don't enable it most of the time.
+{\catcode`\==\active
+\global\def={{\tt \char 61}}}
+
+\catcode`+=\active
+\catcode`\_=\active
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+\catcode`\@=0
+
+% \rawbackslashxx output one backslash character in current font
+\global\chardef\rawbackslashxx=`\\
+%{\catcode`\\=\other
+%@gdef@rawbackslashxx{\}}
+
+% \rawbackslash redefines \ as input to do \rawbackslashxx.
+{\catcode`\\=\active
+@gdef@rawbackslash{@let\=@rawbackslashxx }}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\rawbackslashxx}}
+
+% Say @foo, not \foo, in error messages.
+\escapechar=`\@
+
+% \catcode 17=0 % Define control-q
+\catcode`\\=\active
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+@def@turnoffactive{@let"=@normaldoublequote
+@let\=@realbackslash
+@let~=@normaltilde
+@let^=@normalcaret
+@let_=@normalunderscore
+@let|=@normalverticalbar
+@let<=@normalless
+@let>=@normalgreater
+@let+=@normalplus}
+
+@def@normalturnoffactive{@let"=@normaldoublequote
+@let\=@normalbackslash
+@let~=@normaltilde
+@let^=@normalcaret
+@let_=@normalunderscore
+@let|=@normalverticalbar
+@let<=@normalless
+@let>=@normalgreater
+@let+=@normalplus}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\{ in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also back turn on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active @catcode`@_=@active}
+
+%% These look ok in all fonts, so just make them not special. The @rm below
+%% makes sure that the current font starts out as the newly loaded cmr10
+@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
+
+@textfonts
+@rm
+
+@c Local variables:
+@c page-delimiter: "^\\\\message"
+@c End: