diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-04-08 16:24:33 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-04-08 16:24:33 +0000 |
commit | b667555541a4d65bb9dae6f0e0f240e6a05b148e (patch) | |
tree | b3ae5c92f04ae68fbf9580d6efcf1a1510851495 /readline-6.2/doc | |
parent | 2011-04-08 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-addon-packages-b667555541a4d65bb9dae6f0e0f240e6a05b148e.tar.bz2 |
2011-04-08 Joel Sherrill <joel.sherrill@oarcorp.com>
* RTEMS_Makefiles/Makefile.readline-6.2, readline-6.2/CHANGELOG,
readline-6.2/CHANGES, readline-6.2/COPYING, readline-6.2/INSTALL,
readline-6.2/MANIFEST, readline-6.2/Makefile.in, readline-6.2/NEWS,
readline-6.2/README, readline-6.2/USAGE, readline-6.2/aclocal.m4,
readline-6.2/ansi_stdlib.h, readline-6.2/bind.c,
readline-6.2/callback.c, readline-6.2/chardefs.h,
readline-6.2/compat.c, readline-6.2/complete.c,
readline-6.2/config.h.in, readline-6.2/configure,
readline-6.2/configure.in, readline-6.2/display.c,
readline-6.2/emacs_keymap.c, readline-6.2/funmap.c,
readline-6.2/histexpand.c, readline-6.2/histfile.c,
readline-6.2/histlib.h, readline-6.2/history.c,
readline-6.2/history.h, readline-6.2/histsearch.c,
readline-6.2/input.c, readline-6.2/isearch.c, readline-6.2/keymaps.c,
readline-6.2/keymaps.h, readline-6.2/kill.c, readline-6.2/macro.c,
readline-6.2/mbutil.c, readline-6.2/misc.c, readline-6.2/nls.c,
readline-6.2/parens.c, readline-6.2/patchlevel,
readline-6.2/posixdir.h, readline-6.2/posixjmp.h,
readline-6.2/posixselect.h, readline-6.2/posixstat.h,
readline-6.2/readline.c, readline-6.2/readline.h,
readline-6.2/rlconf.h, readline-6.2/rldefs.h,
readline-6.2/rlmbutil.h, readline-6.2/rlprivate.h,
readline-6.2/rlshell.h, readline-6.2/rlstdc.h, readline-6.2/rltty.c,
readline-6.2/rltty.h, readline-6.2/rltypedefs.h,
readline-6.2/rlwinsize.h, readline-6.2/savestring.c,
readline-6.2/search.c, readline-6.2/shell.c, readline-6.2/signals.c,
readline-6.2/tcap.h, readline-6.2/terminal.c, readline-6.2/text.c,
readline-6.2/tilde.c, readline-6.2/tilde.h, readline-6.2/undo.c,
readline-6.2/util.c, readline-6.2/vi_keymap.c,
readline-6.2/vi_mode.c, readline-6.2/xfree.c, readline-6.2/xmalloc.c,
readline-6.2/xmalloc.h, readline-6.2/doc/Makefile.in,
readline-6.2/doc/fdl.texi, readline-6.2/doc/history.0,
readline-6.2/doc/history.3, readline-6.2/doc/history.dvi,
readline-6.2/doc/history.html, readline-6.2/doc/history.info,
readline-6.2/doc/history.pdf, readline-6.2/doc/history.ps,
readline-6.2/doc/history.texi, readline-6.2/doc/history_3.ps,
readline-6.2/doc/hstech.texi, readline-6.2/doc/hsuser.texi,
readline-6.2/doc/readline.0, readline-6.2/doc/readline.3,
readline-6.2/doc/readline.dvi, readline-6.2/doc/readline.html,
readline-6.2/doc/readline.info, readline-6.2/doc/readline.pdf,
readline-6.2/doc/readline.ps, readline-6.2/doc/readline_3.ps,
readline-6.2/doc/rlman.texi, readline-6.2/doc/rltech.texi,
readline-6.2/doc/rluser.texi, readline-6.2/doc/rluserman.dvi,
readline-6.2/doc/rluserman.html, readline-6.2/doc/rluserman.info,
readline-6.2/doc/rluserman.pdf, readline-6.2/doc/rluserman.ps,
readline-6.2/doc/rluserman.texi, readline-6.2/doc/texi2dvi,
readline-6.2/doc/texi2html, readline-6.2/doc/texinfo.tex,
readline-6.2/doc/version.texi, readline-6.2/examples/Inputrc,
readline-6.2/examples/Makefile.in,
readline-6.2/examples/excallback.c, readline-6.2/examples/fileman.c,
readline-6.2/examples/histexamp.c, readline-6.2/examples/manexamp.c,
readline-6.2/examples/readlinebuf.h,
readline-6.2/examples/rl-fgets.c, readline-6.2/examples/rl.c,
readline-6.2/examples/rlcat.c, readline-6.2/examples/rlevent.c,
readline-6.2/examples/rlptytest.c, readline-6.2/examples/rltest.c,
readline-6.2/examples/rlversion.c,
readline-6.2/examples/rlwrap-0.30.tar.gz,
readline-6.2/examples/autoconf/BASH_CHECK_LIB_TERMCAP,
readline-6.2/examples/autoconf/RL_LIB_READLINE_VERSION,
readline-6.2/examples/autoconf/wi_LIB_READLINE,
readline-6.2/examples/rlfe/ChangeLog,
readline-6.2/examples/rlfe/Makefile.in,
readline-6.2/examples/rlfe/README,
readline-6.2/examples/rlfe/config.h.in,
readline-6.2/examples/rlfe/configure,
readline-6.2/examples/rlfe/configure.in,
readline-6.2/examples/rlfe/extern.h, readline-6.2/examples/rlfe/os.h,
readline-6.2/examples/rlfe/pty.c, readline-6.2/examples/rlfe/rlfe.c,
readline-6.2/examples/rlfe/screen.h, readline-6.2/shlib/Makefile.in,
readline-6.2/support/config.guess, readline-6.2/support/config.rpath,
readline-6.2/support/config.sub, readline-6.2/support/install.sh,
readline-6.2/support/mkdirs, readline-6.2/support/mkdist,
readline-6.2/support/mkinstalldirs,
readline-6.2/support/shlib-install, readline-6.2/support/shobj-conf,
readline-6.2/support/wcwidth.c: New files.
Diffstat (limited to 'readline-6.2/doc')
34 files changed, 66790 insertions, 0 deletions
diff --git a/readline-6.2/doc/Makefile.in b/readline-6.2/doc/Makefile.in new file mode 100644 index 0000000..9ddd314 --- /dev/null +++ b/readline-6.2/doc/Makefile.in @@ -0,0 +1,256 @@ +# This makefile for Readline library documentation is in -*- text -*- mode. +# Emacs likes it that way. + +# Copyright (C) 1996-2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +topdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = .:@srcdir@ + +prefix = @prefix@ + +datarootdir = @datarootdir@ + +infodir = @infodir@ + +mandir = @mandir@ +manpfx = man + +man1ext = .1 +man1dir = $(mandir)/$(manpfx)1 +man3ext = .3 +man3dir = $(mandir)/$(manpfx)3 + +# set this to a value to have the HTML documentation installed +htmldir = + +# Support an alternate destination root directory for package building +DESTDIR = + +SHELL = @MAKE_SHELL@ +RM = rm -f + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +BUILD_DIR = @BUILD_DIR@ +TEXINPUTDIR = $(srcdir) + +MAKEINFO = LANGUAGE= makeinfo +TEXI2DVI = $(srcdir)/texi2dvi +TEXI2HTML = $(srcdir)/texi2html +QUIETPS = #set this to -q to shut up dvips +PAPERSIZE = letter +PSDPI = 600 +DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky + +# These tools might not be available; they're not required +DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE} +PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ + +RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \ + $(srcdir)/rltech.texi $(srcdir)/version.texi \ + $(srcdir)/rluserman.texi $(srcdir)/fdl.texi +HISTSRC = $(srcdir)/history.texi $(srcdir)/hsuser.texi \ + $(srcdir)/hstech.texi $(srcdir)/version.texi $(srcdir)/fdl.texi + +# This should be a program that converts troff to an ascii-readable format +NROFF = groff -Tascii + +# This should be a program that converts troff to postscript +GROFF = groff + +DVIOBJ = readline.dvi history.dvi rluserman.dvi +INFOOBJ = readline.info history.info rluserman.info +PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps +HTMLOBJ = readline.html history.html rluserman.html +TEXTOBJ = readline.0 history.0 +PDFOBJ = readline.pdf history.pdf rluserman.pdf + +INTERMEDIATE_OBJ = rlman.dvi + +DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) $(PDFOBJ) + +.SUFFIXES: .0 .3 .ps .txt .dvi .html .pdf + +.3.0: + $(RM) $@ + -${NROFF} -man $< > $@ + +.ps.pdf: + $(RM) $@ + -${PSPDF} $< + +.dvi.pdf: + $(RM) $@ + -${DVIPDF} $< + +all: info dvi html ps text pdf +nodvi: info html text + +xdist: $(DIST_DOCS) + +info: $(INFOOBJ) +dvi: $(DVIOBJ) +ps: $(PSOBJ) +html: $(HTMLOBJ) +text: $(TEXTOBJ) +pdf: $(PDFOBJ) + +readline.dvi: $(RLSRC) + TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texi + mv rlman.dvi readline.dvi + +readline.info: $(RLSRC) + $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texi + +rluserman.dvi: $(RLSRC) + TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texi + +rluserman.info: $(RLSRC) + $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texi + +history.dvi: ${HISTSRC} + TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/history.texi + +history.info: ${HISTSRC} + $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/history.texi + +readline.ps: readline.dvi + $(RM) $@ + $(DVIPS) readline.dvi + +rluserman.ps: rluserman.dvi + $(RM) $@ + $(DVIPS) rluserman.dvi + +history.ps: history.dvi + $(RM) $@ + $(DVIPS) history.dvi + +# +# This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org +# +readline.html: ${RLSRC} + $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texi + sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html + $(RM) rlman.html + +rluserman.html: ${RLSRC} + $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texi + +history.html: ${HISTSRC} + $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/history.texi + +readline.0: readline.3 + +readline_3.ps: $(srcdir)/readline.3 + ${RM} $@ + ${GROFF} -man < $(srcdir)/readline.3 > $@ + +history.0: history.3 + +history_3.ps: $(srcdir)/history.3 + ${RM} $@ + ${GROFF} -man < $(srcdir)/history.3 > $@ + +readline.pdf: readline.dvi +history.pdf: history.dvi +rluserman.pdf: rluserman.dvi + +clean: + $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \ + *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o \ + core *.core + +mostlyclean: clean + +distclean: clean maybe-clean + $(RM) $(INTERMEDIATE_OBJ) + $(RM) Makefile + +maybe-clean: + -if test "X$(topdir)" != "X.." && test "X$(topdir)" != "X$(BUILD_DIR)"; then \ + $(RM) $(DIST_DOCS); \ + fi + +maintainer-clean: clean + $(RM) $(DIST_DOCS) + $(RM) $(INTERMEDIATE_OBJ) + $(RM) $(PDFOBJ) + $(RM) Makefile + +installdirs: $(topdir)/support/mkdirs + -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) + -if test -n "${htmldir}" ; then \ + $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \ + fi + +install: installdirs + if test -f readline.info; then \ + ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \ + else \ + ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \ + fi + if test -f rluserman.info; then \ + ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ + else \ + ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ + fi + if test -f history.info; then \ + ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \ + else \ + ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \ + fi + -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir \ + $(DESTDIR)$(infodir)/readline.info ; \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir \ + $(DESTDIR)$(infodir)/history.info ; \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir \ + $(DESTDIR)$(infodir)/rluserman.info ; \ + else true; fi + -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext) + -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext) + -if test -n "${htmldir}" ; then \ + if test -f readline.html; then \ + ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \ + else \ + ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \ + fi ; \ + if test -f history.html; then \ + ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \ + else \ + ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \ + fi ; \ + if test -f rluserman.html; then \ + ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ + else \ + ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ + fi ; \ + fi + +uninstall: + $(RM) $(DESTDIR)$(infodir)/readline.info + $(RM) $(DESTDIR)$(infodir)/rluserman.info + $(RM) $(DESTDIR)$(infodir)/history.info + $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext) + $(RM) $(DESTDIR)$(man3dir)/history$(man3ext) + -if test -n "${htmldir}" ; then \ + $(RM) $(DESTDIR)$(htmldir)/readline.html ; \ + $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \ + $(RM) $(DESTDIR)$(htmldir)/history.html ; \ + fi diff --git a/readline-6.2/doc/fdl.texi b/readline-6.2/doc/fdl.texi new file mode 100644 index 0000000..8805f1a --- /dev/null +++ b/readline-6.2/doc/fdl.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/readline-6.2/doc/history.0 b/readline-6.2/doc/history.0 new file mode 100644 index 0000000..50d6d37 --- /dev/null +++ b/readline-6.2/doc/history.0 @@ -0,0 +1,493 @@ +HISTORY(3) HISTORY(3) + + + +NNAAMMEE + history - GNU History Library + +CCOOPPYYRRIIGGHHTT + The GNU History Library is Copyright (C) 1989-2011 by the Free Software + Foundation, Inc. + +DDEESSCCRRIIPPTTIIOONN + Many programs read input from the user a line at a time. The GNU His- + tory 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. + + +HHIISSTTOORRYY EEXXPPAANNSSIIOONN + The history library supports a history expansion feature that is iden- + tical to the history expansion in bbaasshh.. This section describes what + syntax features are available. + + 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 is usually performed immediately after a complete + line is read. It takes place in two parts. The first is to determine + which line from the history list to use during substitution. The sec- + ond is to select portions of that line for inclusion into the current + one. The line selected from the history is the _e_v_e_n_t, and the portions + of that line that are acted upon are _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are + available to manipulate the selected words. The line is broken into + words in the same fashion as bbaasshh does when reading input, so that sev- + eral words that would otherwise be separated are considered one word + when surrounded by quotes (see the description of hhiissttoorryy__ttookkeenniizzee(()) + below). History expansions are introduced by the appearance of the + history expansion character, which is !! by default. Only backslash (\\) + and single quotes can quote the history expansion character. + + EEvveenntt DDeessiiggnnaattoorrss + An event designator is a reference to a command line entry in the his- + tory list. Unless the reference is absolute, events are relative to + the current position in the history list. + + !! Start a history substitution, except when followed by a bbllaannkk, + newline, = or (. + !!_n Refer to command line _n. + !!--_n Refer to the current command minus _n. + !!!! Refer to the previous command. This is a synonym for `!-1'. + !!_s_t_r_i_n_g + Refer to the most recent command preceding the current position + in the history list starting with _s_t_r_i_n_g. + !!??_s_t_r_i_n_g[[??]] + Refer to the most recent command preceding the current postition + in the history list containing _s_t_r_i_n_g. The trailing ?? may be + omitted if _s_t_r_i_n_g is followed immediately by a newline. + ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^ + Quick substitution. Repeat the last command, replacing _s_t_r_i_n_g_1 + with _s_t_r_i_n_g_2. Equivalent to ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/'' (see MMoodd-- + iiffiieerrss below). + !!## The entire command line typed so far. + + WWoorrdd DDeessiiggnnaattoorrss + 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 sepa- + rated by single spaces. + + 00 ((zzeerroo)) + The zeroth word. For the shell, 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 `?_s_t_r_i_n_g?' search. + _x--_y A range of words; `-_y' abbreviates `0-_y'. + ** All of the words but the zeroth. 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. + xx** Abbreviates _x_-_$. + xx-- Abbreviates _x_-_$ like xx**, but omits the last word. + + If a word designator is supplied without an event specification, the + previous command is used as the event. + + MMooddiiffiieerrss + After the optional word designator, there may appear a sequence of one + or more of the following modifiers, each preceded by a `:'. + + hh Remove a trailing file name component, leaving only the head. + tt Remove all leading file name components, leaving the tail. + rr Remove a trailing suffix of the form _._x_x_x, leaving the basename. + ee Remove all but the trailing suffix. + pp Print the new command but do not execute it. + qq Quote the substituted words, escaping further substitutions. + xx Quote the substituted words as with qq, but break into words at + bbllaannkkss and newlines. + ss//_o_l_d//_n_e_w// + Substitute _n_e_w for the first occurrence of _o_l_d in the event + line. Any delimiter can be used in place of /. The final + delimiter is optional if it is the last character of the event + line. The delimiter may be quoted in _o_l_d and _n_e_w with a single + backslash. If & appears in _n_e_w, it is replaced by _o_l_d. A sin- + gle backslash will quote the &. If _o_l_d is null, it is set to + the last _o_l_d substituted, or, if no previous history substitu- + tions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. + && Repeat the previous substitution. + gg Cause changes to be applied over the entire event line. This is + used in conjunction with `::ss' (e.g., `::ggss//_o_l_d//_n_e_w//') or `::&&'. + If used with `::ss', any delimiter can be used in place of /, and + the final delimiter is optional if it is the last character of + the event line. An aa may be used as a synonym for gg. + GG Apply the following `ss' modifier once to each word in the event + line. + +PPRROOGGRRAAMMMMIINNGG WWIITTHH HHIISSTTOORRYY FFUUNNCCTTIIOONNSS + This section describes how to use the History library in other pro- + grams. + + IInnttrroodduuccttiioonn ttoo HHiissttoorryy + 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 _e_x_p_a_n_s_i_o_n function is avail- + able which provides for a consistent user interface across different + programs. + + The user using programs written with the History library has the bene- + fit 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 identical to the + history substitution provided by bbaasshh. + + If the programmer desires, he can use the Readline library, which + includes some history manipulation by default, and has the added advan- + tage of command line editing. + + Before declaring any functions using any functionality the History + library provides in other code, an application writer should include + the file _<_r_e_a_d_l_i_n_e_/_h_i_s_t_o_r_y_._h_> in any file that uses the History + library's features. It supplies extern declarations for all of the + library's public functions and variables, and declares all of the pub- + lic data structures. + + + HHiissttoorryy SSttoorraaggee + The history list is an array of history entries. A history entry is + declared as follows: + + _t_y_p_e_d_e_f _v_o_i_d _* hhiissttddaattaa__tt;; + + typedef struct _hist_entry { + char *line; + char *timestamp; + histdata_t data; + } HIST_ENTRY; + + The history list itself might therefore be declared as + + _H_I_S_T___E_N_T_R_Y _*_* tthhee__hhiissttoorryy__lliisstt;; + + The state of the History library is encapsulated into a single struc- + ture: + + /* + * A structure used to pass around the current state of the history. + */ + 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 HHSS__SSTTIIFFLLEEDD, the history has been stifled. + +HHiissttoorryy FFuunnccttiioonnss + This section describes the calling sequence for the various functions + exported by the GNU History library. + + IInniittiiaalliizziinngg HHiissttoorryy aanndd SSttaattee MMaannaaggeemmeenntt + 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. + + _v_o_i_d uussiinngg__hhiissttoorryy (_v_o_i_d) + Begin a session in which the history functions might be used. This + initializes the interactive variables. + + _H_I_S_T_O_R_Y___S_T_A_T_E _* hhiissttoorryy__ggeett__hhiissttoorryy__ssttaattee (_v_o_i_d) + Return a structure describing the current state of the input history. + + _v_o_i_d hhiissttoorryy__sseett__hhiissttoorryy__ssttaattee (_H_I_S_T_O_R_Y___S_T_A_T_E _*_s_t_a_t_e) + Set the state of the history list according to _s_t_a_t_e. + + + HHiissttoorryy LLiisstt MMaannaaggeemmeenntt + These functions manage individual entries on the history list, or set + parameters managing the list itself. + + _v_o_i_d aadddd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) + Place _s_t_r_i_n_g at the end of the history list. The associated data field + (if any) is set to NNUULLLL. + + _v_o_i_d aadddd__hhiissttoorryy__ttiimmee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) + Change the time stamp associated with the most recent history entry to + _s_t_r_i_n_g. + + _H_I_S_T___E_N_T_R_Y _* rreemmoovvee__hhiissttoorryy (_i_n_t _w_h_i_c_h) + Remove history entry at offset _w_h_i_c_h from the history. The removed + element is returned so you can free the line, data, and containing + structure. + + _h_i_s_t_d_a_t_a___t ffrreeee__hhiissttoorryy__eennttrryy (_H_I_S_T___E_N_T_R_Y _*_h_i_s_t_e_n_t) + Free the history entry _h_i_s_t_e_n_t and any history library private data + associated with it. Returns the application-specific data so the + caller can dispose of it. + + _H_I_S_T___E_N_T_R_Y _* rreeppllaaccee__hhiissttoorryy__eennttrryy (_i_n_t _w_h_i_c_h_, _c_o_n_s_t _c_h_a_r _*_l_i_n_e_, _h_i_s_t_- + _d_a_t_a___t _d_a_t_a) + Make the history entry at offset _w_h_i_c_h have _l_i_n_e and _d_a_t_a. This + returns the old entry so the caller can dispose of any application-spe- + cific data. In the case of an invalid _w_h_i_c_h, a NNUULLLL pointer is + returned. + + _v_o_i_d cclleeaarr__hhiissttoorryy (_v_o_i_d) + Clear the history list by deleting all the entries. + + _v_o_i_d ssttiiffllee__hhiissttoorryy (_i_n_t _m_a_x) + Stifle the history list, remembering only the last _m_a_x entries. + + _i_n_t uunnssttiiffllee__hhiissttoorryy (_v_o_i_d) + Stop stifling the history. This returns the previously-set maximum + number of history entries (as set by ssttiiffllee__hhiissttoorryy(())). history was + stifled. The value is positive if the history was stifled, negative if + it wasn't. + + _i_n_t hhiissttoorryy__iiss__ssttiifflleedd (_v_o_i_d) + Returns non-zero if the history is stifled, zero if it is not. + + + IInnffoorrmmaattiioonn AAbboouutt tthhee HHiissttoorryy LLiisstt + These functions return information about the entire history list or + individual list entries. + + _H_I_S_T___E_N_T_R_Y _*_* hhiissttoorryy__lliisstt (_v_o_i_d) + Return a NNUULLLL terminated array of _H_I_S_T___E_N_T_R_Y _* which is the current + input history. Element 0 of this list is the beginning of time. If + there is no history, return NNUULLLL. + + _i_n_t wwhheerree__hhiissttoorryy (_v_o_i_d) + Returns the offset of the current history element. + + _H_I_S_T___E_N_T_R_Y _* ccuurrrreenntt__hhiissttoorryy (_v_o_i_d) + Return the history entry at the current position, as determined by + wwhheerree__hhiissttoorryy(()). If there is no entry there, return a NNUULLLL pointer. + + _H_I_S_T___E_N_T_R_Y _* hhiissttoorryy__ggeett (_i_n_t _o_f_f_s_e_t) + Return the history entry at position _o_f_f_s_e_t, starting from hhiiss-- + ttoorryy__bbaassee. If there is no entry there, or if _o_f_f_s_e_t is greater than + the history length, return a NNUULLLL pointer. + + _t_i_m_e___t hhiissttoorryy__ggeett__ttiimmee (_H_I_S_T___E_N_T_R_Y _*) + Return the time stamp associated with the history entry passed as the + argument. + + _i_n_t hhiissttoorryy__ttoottaall__bbyytteess (_v_o_i_d) + 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. + + + MMoovviinngg AArroouunndd tthhee HHiissttoorryy LLiisstt + These functions allow the current index into the history list to be set + or changed. + + _i_n_t hhiissttoorryy__sseett__ppooss (_i_n_t _p_o_s) + Set the current history offset to _p_o_s, an absolute index into the list. + Returns 1 on success, 0 if _p_o_s is less than zero or greater than the + number of history entries. + + _H_I_S_T___E_N_T_R_Y _* pprreevviioouuss__hhiissttoorryy (_v_o_i_d) + 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 NNUULLLL pointer. + + _H_I_S_T___E_N_T_R_Y _* nneexxtt__hhiissttoorryy (_v_o_i_d) + 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 NNUULLLL pointer. + + + SSeeaarrcchhiinngg tthhee HHiissttoorryy LLiisstt + These functions allow searching of the history list for entries con- + taining a specific string. Searching may be performed both forward and + backward from the current history position. The search may be + _a_n_c_h_o_r_e_d, meaning that the string must match at the beginning of the + history entry. + + _i_n_t hhiissttoorryy__sseeaarrcchh (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n) + Search the history for _s_t_r_i_n_g, starting at the current history offset. + If _d_i_r_e_c_t_i_o_n is less than 0, then the search is through previous + entries, otherwise through subsequent entries. If _s_t_r_i_n_g 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 _s_t_r_i_n_g was + found. Otherwise, nothing is changed, and a -1 is returned. + + _i_n_t hhiissttoorryy__sseeaarrcchh__pprreeffiixx (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n) + Search the history for _s_t_r_i_n_g, starting at the current history offset. + The search is anchored: matching lines must begin with _s_t_r_i_n_g. If + _d_i_r_e_c_t_i_o_n is less than 0, then the search is through previous entries, + otherwise through subsequent entries. If _s_t_r_i_n_g 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. + + _i_n_t hhiissttoorryy__sseeaarrcchh__ppooss (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n_, _i_n_t _p_o_s) + Search for _s_t_r_i_n_g in the history list, starting at _p_o_s, an absolute + index into the list. If _d_i_r_e_c_t_i_o_n is negative, the search proceeds + backward from _p_o_s, otherwise forward. Returns the absolute index of + the history element where _s_t_r_i_n_g was found, or -1 otherwise. + + + MMaannaaggiinngg tthhee HHiissttoorryy FFiillee + The History library can read the history from and write it to a file. + This section documents the functions for managing a history file. + + _i_n_t rreeaadd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) + Add the contents of _f_i_l_e_n_a_m_e to the history list, a line at a time. If + _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_t_o_r_y. Returns 0 if successful, + or eerrrrnnoo if not. + + _i_n_t rreeaadd__hhiissttoorryy__rraannggee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t _f_r_o_m_, _i_n_t _t_o) + Read a range of lines from _f_i_l_e_n_a_m_e, adding them to the history list. + Start reading at line _f_r_o_m and end at _t_o. If _f_r_o_m is zero, start at + the beginning. If _t_o is less than _f_r_o_m, then read until the end of the + file. If _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_t_o_r_y. Returns 0 if + successful, or eerrrrnnoo if not. + + _i_n_t wwrriittee__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) + Write the current history to _f_i_l_e_n_a_m_e, overwriting _f_i_l_e_n_a_m_e if neces- + sary. If _f_i_l_e_n_a_m_e is NNUULLLL, then write the history list to _~_/_._h_i_s_t_o_r_y. + Returns 0 on success, or eerrrrnnoo on a read or write error. + + + _i_n_t aappppeenndd__hhiissttoorryy (_i_n_t _n_e_l_e_m_e_n_t_s_, _c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) + Append the last _n_e_l_e_m_e_n_t_s of the history list to _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e + is NNUULLLL, then append to _~_/_._h_i_s_t_o_r_y. Returns 0 on success, or eerrrrnnoo on + a read or write error. + + _i_n_t hhiissttoorryy__ttrruunnccaattee__ffiillee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t _n_l_i_n_e_s) + Truncate the history file _f_i_l_e_n_a_m_e, leaving only the last _n_l_i_n_e_s lines. + If _f_i_l_e_n_a_m_e is NNUULLLL, then _~_/_._h_i_s_t_o_r_y is truncated. Returns 0 on suc- + cess, or eerrrrnnoo on failure. + + + HHiissttoorryy EExxppaannssiioonn + These functions implement history expansion. + + _i_n_t hhiissttoorryy__eexxppaanndd (_c_h_a_r _*_s_t_r_i_n_g_, _c_h_a_r _*_*_o_u_t_p_u_t) + Expand _s_t_r_i_n_g, placing the result into _o_u_t_p_u_t, a pointer to a string. + Returns: + 0 If no expansions took place (or, if the only change in + the text was the removal of escape characters preceding + the history expansion character); + 1 if expansions did take place; + -1 if there was an error in expansion; + 2 if the returned line should be displayed, but not exe- + cuted, as with the ::pp modifier. + If an error ocurred in expansion, then _o_u_t_p_u_t contains a descriptive + error message. + + _c_h_a_r _* ggeett__hhiissttoorryy__eevveenntt (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _*_c_i_n_d_e_x_, _i_n_t _q_c_h_a_r) + Returns the text of the history event beginning at _s_t_r_i_n_g + _*_c_i_n_d_e_x. + _*_c_i_n_d_e_x is modified to point to after the event specifier. At function + entry, _c_i_n_d_e_x points to the index into _s_t_r_i_n_g where the history event + specification begins. _q_c_h_a_r is a character that is allowed to end the + event specification in addition to the ``normal'' terminating charac- + ters. + + _c_h_a_r _*_* hhiissttoorryy__ttookkeenniizzee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) + Return an array of tokens parsed out of _s_t_r_i_n_g, much as the shell + might. The tokens are split on the characters in the hhiiss-- + ttoorryy__wwoorrdd__ddeelliimmiitteerrss variable, and shell quoting conventions are + obeyed. + + _c_h_a_r _* hhiissttoorryy__aarrgg__eexxttrraacctt (_i_n_t _f_i_r_s_t_, _i_n_t _l_a_s_t_, _c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) + Extract a string segment consisting of the _f_i_r_s_t through _l_a_s_t arguments + present in _s_t_r_i_n_g. Arguments are split using hhiissttoorryy__ttookkeenniizzee(()). + + + HHiissttoorryy VVaarriiaabblleess + This section describes the externally-visible variables exported by the + GNU History Library. + + _i_n_t hhiissttoorryy__bbaassee + The logical offset of the first entry in the history list. + + _i_n_t hhiissttoorryy__lleennggtthh + The number of entries currently stored in the history list. + + _i_n_t hhiissttoorryy__mmaaxx__eennttrriieess + The maximum number of history entries. This must be changed using ssttii-- + ffllee__hhiissttoorryy(()). + + _i_n_t hhiissttoorryy__wwiittee__ttiimmeessttaammppss + If non-zero, timestamps are written to the history file, so they can be + preserved between sessions. The default value is 0, meaning that time- + stamps are not saved. The current timestamp format uses the value of + _h_i_s_t_o_r_y___c_o_m_m_e_n_t___c_h_a_r to delimit timestamp entries in the history file. + If that variable does not have a value (the default), timestamps will + not be written. + + _c_h_a_r hhiissttoorryy__eexxppaannssiioonn__cchhaarr + The character that introduces a history event. The default is !!. Set- + ting this to 0 inhibits history expansion. + + _c_h_a_r hhiissttoorryy__ssuubbsstt__cchhaarr + The character that invokes word substitution if found at the start of a + line. The default is ^^. + + _c_h_a_r hhiissttoorryy__ccoommmmeenntt__cchhaarr + 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. + + _c_h_a_r _* hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss + The characters that separate tokens for hhiissttoorryy__ttookkeenniizzee(()). The + default value is "" \\tt\\nn(())<<>>;;&&||"". + + _c_h_a_r _* hhiissttoorryy__nnoo__eexxppaanndd__cchhaarrss + The list of characters which inhibit history expansion if found immedi- + ately following hhiissttoorryy__eexxppaannssiioonn__cchhaarr. The default is space, tab, + newline, \\rr, and ==. + + _c_h_a_r _* hhiissttoorryy__sseeaarrcchh__ddeelliimmiitteerr__cchhaarrss + The list of additional characters which can delimit a history search + string, in addition to space, tab, _: and _? in the case of a substring + search. The default is empty. + + _i_n_t hhiissttoorryy__qquuootteess__iinnhhiibbiitt__eexxppaannssiioonn + If non-zero, single-quoted words are not scanned for the history expan- + sion character. The default value is 0. + + _r_l___l_i_n_e_b_u_f___f_u_n_c___t _* hhiissttoorryy__iinnhhiibbiitt__eexxppaannssiioonn__ffuunnccttiioonn + This should be set to the address of a function that takes two argu- + ments: a cchhaarr ** (_s_t_r_i_n_g) and an iinntt index into that string (_i). It + should return a non-zero value if the history expansion starting at + _s_t_r_i_n_g_[_i_] should not be performed; zero if the expansion should be + done. It is intended for use by applications like bbaasshh that use the + history expansion character for additional purposes. By default, this + variable is set to NNUULLLL. + +FFIILLEESS + _~_/_._h_i_s_t_o_r_y + Default filename for reading and writing saved history + +SSEEEE AALLSSOO + _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _b_a_s_h(1) + _r_e_a_d_l_i_n_e(3) + +AAUUTTHHOORRSS + Brian Fox, Free Software Foundation + bfox@gnu.org + + Chet Ramey, Case Western Reserve University + chet@ins.CWRU.Edu + +BBUUGG RREEPPOORRTTSS + If you find a bug in the hhiissttoorryy library, you should report it. But + first, you should make sure that it really is a bug, and that it + appears in the latest version of the hhiissttoorryy library that you have. + + Once you have determined that a bug actually exists, mail a bug report + to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, you are welcome to mail + that as well! Suggestions and `philosophical' bug reports may be + mailed to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup + ggnnuu..bbaasshh..bbuugg. + + Comments and bug reports concerning this manual page should be directed + to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. + + + +GNU History 6.2 2010 August 12 HISTORY(3) diff --git a/readline-6.2/doc/history.3 b/readline-6.2/doc/history.3 new file mode 100644 index 0000000..4eb159c --- /dev/null +++ b/readline-6.2/doc/history.3 @@ -0,0 +1,672 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Chet Ramey +.\" Information Network Services +.\" Case Western Reserve University +.\" chet@ins.CWRU.Edu +.\" +.\" Last Change: Thu Aug 12 22:24:41 EDT 2010 +.\" +.TH HISTORY 3 "2010 August 12" "GNU History 6.2" +.\" +.\" File Name macro. This used to be `.PN', for Path Name, +.\" but Sun doesn't seem to like that very much. +.\" +.de FN +\fI\|\\$1\|\fP +.. +.ds lp \fR\|(\fP +.ds rp \fR\|)\fP +.\" FnN return-value fun-name N arguments +.de Fn1 +\fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp +.br +.. +.de Fn2 +.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp +.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp +.br +.. +.de Fn3 +.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp +.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp +.br +.. +.de Vb +\fI\\$1\fP \fB\\$2\fP +.br +.. +.SH NAME +history \- GNU History Library +.SH COPYRIGHT +.if t The GNU History Library is Copyright \(co 1989-2011 by the Free Software Foundation, Inc. +.if n The GNU History Library is Copyright (C) 1989-2011 by the Free Software Foundation, Inc. +.SH DESCRIPTION +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. +.PP +.SH "HISTORY EXPANSION" +.PP +The history library supports a history expansion feature that +is identical to the history expansion in +.BR bash. +This section describes what syntax features are available. +.PP +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. +.PP +History expansion is usually performed immediately after a complete line +is read. +It takes place in two parts. +The first is to determine which line from the history list +to use during substitution. +The second is to select portions of that line for inclusion into +the current one. +The line selected from the history is the \fIevent\fP, +and the portions of that line that are acted upon are \fIwords\fP. +Various \fImodifiers\fP are available to manipulate the selected words. +The line is broken into words in the same fashion as \fBbash\fP +does when reading input, +so that several words that would otherwise be separated +are considered one word when surrounded by quotes (see the +description of \fBhistory_tokenize()\fP below). +History expansions are introduced by the appearance of the +history expansion character, which is \^\fB!\fP\^ by default. +Only backslash (\^\fB\e\fP\^) and single quotes can quote +the history expansion character. +.SS Event Designators +.PP +An event designator is a reference to a command line entry in the +history list. +Unless the reference is absolute, events are relative to the current +position in the history list. +.PP +.PD 0 +.TP +.B ! +Start a history substitution, except when followed by a +.BR blank , +newline, = or (. +.TP +.B !\fIn\fR +Refer to command line +.IR n . +.TP +.B !\-\fIn\fR +Refer to the current command minus +.IR n . +.TP +.B !! +Refer to the previous command. This is a synonym for `!\-1'. +.TP +.B !\fIstring\fR +Refer to the most recent command +preceding the current position in the history list +starting with +.IR string . +.TP +.B !?\fIstring\fR\fB[?]\fR +Refer to the most recent command +preceding the current postition in the history list +containing +.IR string . +The trailing \fB?\fP may be omitted if +.I string +is followed immediately by a newline. +.TP +.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u +Quick substitution. Repeat the last command, replacing +.I string1 +with +.IR string2 . +Equivalent to +``!!:s/\fIstring1\fP/\fIstring2\fP/'' +(see \fBModifiers\fP below). +.TP +.B !# +The entire command line typed so far. +.PD +.SS Word Designators +.PP +Word designators are used to select desired words from the event. +A +.B : +separates the event specification from the word designator. +It may be omitted if the word designator begins with a +.BR ^ , +.BR $ , +.BR * , +.BR \- , +or +.BR % . +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. +.PP +.PD 0 +.TP +.B 0 (zero) +The zeroth word. For the shell, this is the command +word. +.TP +.I n +The \fIn\fRth word. +.TP +.B ^ +The first argument. That is, word 1. +.TP +.B $ +The last argument. +.TP +.B % +The word matched by the most recent `?\fIstring\fR?' search. +.TP +.I x\fB\-\fPy +A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. +.TP +.B * +All of the words but the zeroth. This is a synonym +for `\fI1\-$\fP'. It is not an error to use +.B * +if there is just one +word in the event; the empty string is returned in that case. +.TP +.B x* +Abbreviates \fIx\-$\fP. +.TP +.B x\- +Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word. +.PD +.PP +If a word designator is supplied without an event specification, the +previous command is used as the event. +.SS Modifiers +.PP +After the optional word designator, there may appear a sequence of +one or more of the following modifiers, each preceded by a `:'. +.PP +.PD 0 +.PP +.TP +.B h +Remove a trailing file name component, leaving only the head. +.TP +.B t +Remove all leading file name components, leaving the tail. +.TP +.B r +Remove a trailing suffix of the form \fI.xxx\fP, leaving the +basename. +.TP +.B e +Remove all but the trailing suffix. +.TP +.B p +Print the new command but do not execute it. +.TP +.B q +Quote the substituted words, escaping further substitutions. +.TP +.B x +Quote the substituted words as with +.BR q , +but break into words at +.B blanks +and newlines. +.TP +.B s/\fIold\fP/\fInew\fP/ +Substitute +.I new +for the first occurrence of +.I old +in the event line. Any delimiter can be used in place of /. The +final delimiter is optional if it is the last character of the +event line. The delimiter may be quoted in +.I old +and +.I new +with a single backslash. If & appears in +.IR new , +it is replaced by +.IR old . +A single backslash will quote the &. If +.I old +is null, it is set to the last +.I old +substituted, or, if no previous history substitutions took place, +the last +.I string +in a +.B !?\fIstring\fR\fB[?]\fR +search. +.TP +.B & +Repeat the previous substitution. +.TP +.B g +Cause changes to be applied over the entire event line. This is +used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') +or `\fB:&\fP'. If used with +`\fB:s\fP', any delimiter can be used +in place of /, and the final delimiter is optional +if it is the last character of the event line. +An \fBa\fP may be used as a synonym for \fBg\fP. +.TP +.B G +Apply the following `\fBs\fP' modifier once to each word in the event line. +.PD +.SH "PROGRAMMING WITH HISTORY FUNCTIONS" +This section describes how to use the History library in other programs. +.SS Introduction to History +.PP +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 \fIexpansion\fP function +is available which provides for a consistent user interface across +different programs. +.PP +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 +identical to +the history substitution provided by \fBbash\fP. +.PP +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. +.PP +Before declaring any functions using any functionality the History +library provides in other code, an application writer should include +the file +.FN <readline/history.h> +in any file that uses the +History library's features. It supplies extern declarations for all +of the library's public functions and variables, and declares all of +the public data structures. + +.SS History Storage +.PP +The history list is an array of history entries. A history entry is +declared as follows: +.PP +.Vb "typedef void *" histdata_t; +.PP +.nf +typedef struct _hist_entry { + char *line; + char *timestamp; + histdata_t data; +} HIST_ENTRY; +.fi +.PP +The history list itself might therefore be declared as +.PP +.Vb "HIST_ENTRY **" the_history_list; +.PP +The state of the History library is encapsulated into a single structure: +.PP +.nf +/* + * A structure used to pass around the current state of the history. + */ +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; +.fi +.PP +If the flags member includes \fBHS_STIFLED\fP, the history has been +stifled. +.SH "History Functions" +.PP +This section describes the calling sequence for the various functions +exported by the GNU History library. +.SS 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. + +.Fn1 void using_history void +Begin a session in which the history functions might be used. This +initializes the interactive variables. + +.Fn1 "HISTORY_STATE *" history_get_history_state void +Return a structure describing the current state of the input history. + +.Fn1 void history_set_history_state "HISTORY_STATE *state" +Set the state of the history list according to \fIstate\fP. + +.SS History List Management + +These functions manage individual entries on the history list, or set +parameters managing the list itself. + +.Fn1 void add_history "const char *string" +Place \fIstring\fP at the end of the history list. The associated data +field (if any) is set to \fBNULL\fP. + +.Fn1 void add_history_time "const char *string" +Change the time stamp associated with the most recent history entry to +\fIstring\fP. + +.Fn1 "HIST_ENTRY *" remove_history "int which" +Remove history entry at offset \fIwhich\fP from the history. The +removed element is returned so you can free the line, data, +and containing structure. + +.Fn1 "histdata_t" free_history_entry "HIST_ENTRY *histent" +Free the history entry \fIhistent\fP and any history library private +data associated with it. Returns the application-specific data +so the caller can dispose of it. + +.Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data" +Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP. +This returns the old entry so the caller can dispose of any +application-specific data. In the case +of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned. + +.Fn1 void clear_history "void" +Clear the history list by deleting all the entries. + +.Fn1 void stifle_history "int max" +Stifle the history list, remembering only the last \fImax\fP entries. + +.Fn1 int unstifle_history "void" +Stop stifling the history. This returns the previously-set +maximum number of history entries (as set by \fBstifle_history()\fP). +history was stifled. The value is positive if the history was +stifled, negative if it wasn't. + +.Fn1 int history_is_stifled "void" +Returns non-zero if the history is stifled, zero if it is not. + +.SS Information About the History List + +These functions return information about the entire history list or +individual list entries. + +.Fn1 "HIST_ENTRY **" history_list "void" +Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the +current input history. Element 0 of this list is the beginning of time. +If there is no history, return \fBNULL\fP. + +.Fn1 int where_history "void" +Returns the offset of the current history element. + +.Fn1 "HIST_ENTRY *" current_history "void" +Return the history entry at the current position, as determined by +\fBwhere_history()\fP. If there is no entry there, return a \fBNULL\fP +pointer. + +.Fn1 "HIST_ENTRY *" history_get "int offset" +Return the history entry at position \fIoffset\fP, starting from +\fBhistory_base\fP. +If there is no entry there, or if \fIoffset\fP +is greater than the history length, return a \fBNULL\fP pointer. + +.Fn1 "time_t" history_get_time "HIST_ENTRY *" +Return the time stamp associated with the history entry passed as the argument. + +.Fn1 int history_total_bytes "void" +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. + +.SS Moving Around the History List + +These functions allow the current index into the history list to be +set or changed. + +.Fn1 int history_set_pos "int pos" +Set the current history offset to \fIpos\fP, an absolute index +into the list. +Returns 1 on success, 0 if \fIpos\fP is less than zero or greater +than the number of history entries. + +.Fn1 "HIST_ENTRY *" previous_history "void" +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 \fBNULL\fP pointer. + +.Fn1 "HIST_ENTRY *" next_history "void" +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 \fBNULL\fP pointer. + +.SS 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 \fIanchored\fP, +meaning that the string must match at the beginning of the history entry. + +.Fn2 int history_search "const char *string" "int direction" +Search the history for \fIstring\fP, starting at the current history offset. +If \fIdirection\fP is less than 0, then the search is through +previous entries, otherwise through subsequent entries. +If \fIstring\fP 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 +\fIstring\fP was found. Otherwise, nothing is changed, and a -1 is +returned. + +.Fn2 int history_search_prefix "const char *string" "int direction" +Search the history for \fIstring\fP, starting at the current history +offset. The search is anchored: matching lines must begin with +\fIstring\fP. If \fIdirection\fP is less than 0, then the search is +through previous entries, otherwise through subsequent entries. +If \fIstring\fP 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. + +.Fn3 int history_search_pos "const char *string" "int direction" "int pos" +Search for \fIstring\fP in the history list, starting at \fIpos\fP, an +absolute index into the list. If \fIdirection\fP is negative, the search +proceeds backward from \fIpos\fP, otherwise forward. Returns the absolute +index of the history element where \fIstring\fP was found, or -1 otherwise. + +.SS 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. + +.Fn1 int read_history "const char *filename" +Add the contents of \fIfilename\fP to the history list, a line at a time. +If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. +Returns 0 if successful, or \fBerrno\fP if not. + +.Fn3 int read_history_range "const char *filename" "int from" "int to" +Read a range of lines from \fIfilename\fP, adding them to the history list. +Start reading at line \fIfrom\fP and end at \fIto\fP. +If \fIfrom\fP is zero, start at the beginning. If \fIto\fP is less than +\fIfrom\fP, then read until the end of the file. If \fIfilename\fP is +\fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, +or \fBerrno\fP if not. + +.Fn1 int write_history "const char *filename" +Write the current history to \fIfilename\fP, overwriting \fIfilename\fP +if necessary. +If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP. +Returns 0 on success, or \fBerrno\fP on a read or write error. + + +.Fn2 int append_history "int nelements" "const char *filename" +Append the last \fInelements\fP of the history list to \fIfilename\fP. +If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP. +Returns 0 on success, or \fBerrno\fP on a read or write error. + +.Fn2 int history_truncate_file "const char *filename" "int nlines" +Truncate the history file \fIfilename\fP, leaving only the last +\fInlines\fP lines. +If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated. +Returns 0 on success, or \fBerrno\fP on failure. + +.SS History Expansion + +These functions implement history expansion. + +.Fn2 int history_expand "char *string" "char **output" +Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer +to a string. Returns: +.RS +.PD 0 +.TP +0 +If no expansions took place (or, if the only change in +the text was the removal of escape characters preceding the history expansion +character); +.TP +1 +if expansions did take place; +.TP +-1 +if there was an error in expansion; +.TP +2 +if the returned line should be displayed, but not executed, +as with the \fB:p\fP modifier. +.PD +.RE +If an error ocurred in expansion, then \fIoutput\fP contains a descriptive +error message. + +.Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar" +Returns the text of the history event beginning at \fIstring\fP + +\fI*cindex\fP. \fI*cindex\fP is modified to point to after the event +specifier. At function entry, \fIcindex\fP points to the index into +\fIstring\fP where the history event specification begins. \fIqchar\fP +is a character that is allowed to end the event specification in addition +to the ``normal'' terminating characters. + +.Fn1 "char **" history_tokenize "const char *string" +Return an array of tokens parsed out of \fIstring\fP, much as the +shell might. +The tokens are split on the characters in the +\fBhistory_word_delimiters\fP variable, +and shell quoting conventions are obeyed. + +.Fn3 "char *" history_arg_extract "int first" "int last" "const char *string" +Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP +arguments present in \fIstring\fP. Arguments are split using +\fBhistory_tokenize()\fP. + +.SS History Variables + +This section describes the externally-visible variables exported by +the GNU History Library. + +.Vb int history_base +The logical offset of the first entry in the history list. + +.Vb int history_length +The number of entries currently stored in the history list. + +.Vb int history_max_entries +The maximum number of history entries. This must be changed using +\fBstifle_history()\fP. + +.Vb int history_wite_timestamps +If non-zero, timestamps are written to the history file, so they can be +preserved between sessions. The default value is 0, meaning that +timestamps are not saved. +The current timestamp format uses the value of \fIhistory_comment_char\fP +to delimit timestamp entries in the history file. If that variable does +not have a value (the default), timestamps will not be written. + +.Vb char history_expansion_char +The character that introduces a history event. The default is \fB!\fP. +Setting this to 0 inhibits history expansion. + +.Vb char history_subst_char +The character that invokes word substitution if found at the start of +a line. The default is \fB^\fP. + +.Vb 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. + +.Vb "char *" history_word_delimiters +The characters that separate tokens for \fBhistory_tokenize()\fP. +The default value is \fB"\ \et\en()<>;&|"\fP. + +.Vb "char *" history_no_expand_chars +The list of characters which inhibit history expansion if found immediately +following \fBhistory_expansion_char\fP. The default is space, tab, newline, +\fB\er\fP, and \fB=\fP. + +.Vb "char *" history_search_delimiter_chars +The list of additional characters which can delimit a history search +string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of +a substring search. The default is empty. + +.Vb int history_quotes_inhibit_expansion +If non-zero, single-quoted words are not scanned for the history expansion +character. The default value is 0. + +.Vb "rl_linebuf_func_t *" history_inhibit_expansion_function +This should be set to the address of a function that takes two arguments: +a \fBchar *\fP (\fIstring\fP) +and an \fBint\fP index into that string (\fIi\fP). +It should return a non-zero value if the history expansion starting at +\fIstring[i]\fP should not be performed; zero if the expansion should +be done. +It is intended for use by applications like \fBbash\fP that use the history +expansion character for additional purposes. +By default, this variable is set to \fBNULL\fP. +.SH FILES +.PD 0 +.TP +.FN ~/.history +Default filename for reading and writing saved history +.PD +.SH "SEE ALSO" +.PD 0 +.TP +\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey +.TP +\fIbash\fP(1) +.TP +\fIreadline\fP(3) +.PD +.SH AUTHORS +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet@ins.CWRU.Edu +.SH BUG REPORTS +If you find a bug in the +.B history +library, you should report it. But first, you should +make sure that it really is a bug, and that it appears in the latest +version of the +.B history +library that you have. +.PP +Once you have determined that a bug actually exists, mail a +bug report to \fIbug\-readline\fP@\fIgnu.org\fP. +If you have a fix, you are welcome to mail that +as well! Suggestions and `philosophical' bug reports may be mailed +to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet +newsgroup +.BR gnu.bash.bug . +.PP +Comments and bug reports concerning +this manual page should be directed to +.IR chet@ins.CWRU.Edu . diff --git a/readline-6.2/doc/history.dvi b/readline-6.2/doc/history.dvi Binary files differnew file mode 100644 index 0000000..0fb8e1c --- /dev/null +++ b/readline-6.2/doc/history.dvi diff --git a/readline-6.2/doc/history.html b/readline-6.2/doc/history.html new file mode 100644 index 0000000..5bdbb1b --- /dev/null +++ b/readline-6.2/doc/history.html @@ -0,0 +1,2297 @@ +<HTML> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- Created on February, 8 2011 by texi2html 1.64 --> +<!-- +Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) + Karl Berry <karl@freefriends.org> + Olaf Bachmann <obachman@mathematik.uni-kl.de> + and many others. +Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> +Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> + +--> +<HEAD> +<TITLE>GNU History Library: </TITLE> + +<META NAME="description" CONTENT="GNU History Library: "> +<META NAME="keywords" CONTENT="GNU History Library: "> +<META NAME="resource-type" CONTENT="document"> +<META NAME="distribution" CONTENT="global"> +<META NAME="Generator" CONTENT="texi2html 1.64"> + +</HEAD> + +<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> + +<A NAME="SEC_Top"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>GNU History Library</H1></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> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC1">1. Using History Interactively</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU History User's Manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC6">2. Programming with GNU History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU History Programmer's Manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC19">A. GNU Free Documentation License</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">License for copying this manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC21">B. Concept Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC22">C. Function and Variable Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions + and variables.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<HR SIZE=1> +<A NAME="SEC1"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<A NAME="Using History Interactively"></A> +<H1> 1. Using History Interactively </H1> +<!--docid::SEC1::--> +<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">2. Programming with GNU History</A>. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC2">1.1 History Expansion</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">What it feels like using History as a user.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="History Interaction"></A> +<HR SIZE="6"> +<A NAME="SEC2"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.1 History Expansion </H2> +<!--docid::SEC2::--> +<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><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to specify which history line to use.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC4">1.1.2 Word Designators</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying which words are of interest.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC5">1.1.3 Modifiers</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Modifying the results of substitution.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Event Designators"></A> +<HR SIZE="6"> +<A NAME="SEC3"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.1.1 Event Designators </H3> +<!--docid::SEC3::--> +<P> + +An event designator is a reference to a command line entry in the +history list. +Unless the reference is absolute, events are relative to the current +position in the history list. +<A NAME="IDX1"></A> +</P><P> + +<DL COMPACT> + +<DT><CODE>!</CODE> +<DD>Start a history substitution, except when followed by a space, tab, +the end of the line, or <SAMP>`='</SAMP>. +<P> + +<DT><CODE>!<VAR>n</VAR></CODE> +<DD>Refer to command line <VAR>n</VAR>. +<P> + +<DT><CODE>!-<VAR>n</VAR></CODE> +<DD>Refer to the command <VAR>n</VAR> lines back. +<P> + +<DT><CODE>!!</CODE> +<DD>Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>. +<P> + +<DT><CODE>!<VAR>string</VAR></CODE> +<DD>Refer to the most recent command +preceding the current position in the history list +starting with <VAR>string</VAR>. +<P> + +<DT><CODE>!?<VAR>string</VAR>[?]</CODE> +<DD>Refer to the most recent command +preceding the current position in the history list +containing <VAR>string</VAR>. +The trailing +<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by +a newline. +<P> + +<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>. +<P> + +<DT><CODE>!#</CODE> +<DD>The entire command line typed so far. +<P> + +</DL> +<P> + +<A NAME="Word Designators"></A> +<HR SIZE="6"> +<A NAME="SEC4"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.1.2 Word Designators </H3> +<!--docid::SEC4::--> +<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><P> + +For example, +</P><P> + +<DL COMPACT> +<DT><CODE>!!</CODE> +<DD>designates the preceding command. When you type this, the preceding +command is repeated in toto. +<P> + +<DT><CODE>!!:$</CODE> +<DD>designates the last argument of the preceding command. This may be +shortened to <CODE>!$</CODE>. +<P> + +<DT><CODE>!fi:2</CODE> +<DD>designates the second argument of the most recent command starting with +the letters <CODE>fi</CODE>. +</DL> +<P> + +Here are the word designators: + +<DL COMPACT> + +<DT><CODE>0 (zero)</CODE> +<DD>The <CODE>0</CODE>th word. For many applications, this is the command word. +<P> + +<DT><CODE><VAR>n</VAR></CODE> +<DD>The <VAR>n</VAR>th word. +<P> + +<DT><CODE>^</CODE> +<DD>The first argument; that is, word 1. +<P> + +<DT><CODE>$</CODE> +<DD>The last argument. +<P> + +<DT><CODE>%</CODE> +<DD>The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search. +<P> + +<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>. +<P> + +<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. +<P> + +<DT><CODE><VAR>x</VAR>*</CODE> +<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> +<P> + +<DT><CODE><VAR>x</VAR>-</CODE> +<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word. +<P> + +</DL> +<P> + +If a word designator is supplied without an event specification, the +previous command is used as the event. +</P><P> + +<A NAME="Modifiers"></A> +<HR SIZE="6"> +<A NAME="SEC5"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.1.3 Modifiers </H3> +<!--docid::SEC5::--> +<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><P> + +<DL COMPACT> + +<DT><CODE>h</CODE> +<DD>Remove a trailing pathname component, leaving only the head. +<P> + +<DT><CODE>t</CODE> +<DD>Remove all leading pathname components, leaving the tail. +<P> + +<DT><CODE>r</CODE> +<DD>Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving +the basename. +<P> + +<DT><CODE>e</CODE> +<DD>Remove all but the trailing suffix. +<P> + +<DT><CODE>p</CODE> +<DD>Print the new command but do not execute it. +<P> + +<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>`&'</SAMP> appears in <VAR>new</VAR>, +it is replaced by <VAR>old</VAR>. A single backslash will quote +the <SAMP>`&'</SAMP>. The final delimiter is optional if it is the last +character on the input line. +<P> + +<DT><CODE>&</CODE> +<DD>Repeat the previous substitution. +<P> + +<DT><CODE>g</CODE> +<DD><DT><CODE>a</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>`&'</SAMP>. +<P> + +<DT><CODE>G</CODE> +<DD>Apply the following <SAMP>`s'</SAMP> modifier once to each word in the event. +<P> + +</DL> +<P> + +<A NAME="Programming with GNU History"></A> +<HR SIZE="6"> +<A NAME="SEC6"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> 2. Programming with GNU History </H1> +<!--docid::SEC6::--> +<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">1. Using History Interactively</A>. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC7">2.1 Introduction to History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">What is the GNU History library for?</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC8">2.2 History Storage</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How information is stored.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC9">2.3 History Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that you can use.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC17">2.4 History Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables that control behaviour.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC18">2.5 History Programming Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Example of using the GNU History Library.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Introduction to History"></A> +<HR SIZE="6"> +<A NAME="SEC7"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.1 Introduction to History </H2> +<!--docid::SEC7::--> +<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><P> + +Before declaring any functions using any functionality the History +library provides in other code, an application writer should include +the file <CODE><readline/history.h></CODE> in any file that uses the +History library's features. It supplies extern declarations for all +of the library's public functions and variables, and declares all of +the public data structures. +</P><P> + +<A NAME="History Storage"></A> +<HR SIZE="6"> +<A NAME="SEC8"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.2 History Storage </H2> +<!--docid::SEC8::--> +<P> + +The history list is an array of history entries. A history entry is +declared as follows: +</P><P> + +<TABLE><tr><td> </td><td class=example><pre>typedef void *histdata_t; + +typedef struct _hist_entry { + char *line; + char *timestamp; + histdata_t data; +} HIST_ENTRY; +</pre></td></tr></table></P><P> + +The history list itself might therefore be declared as +</P><P> + +<TABLE><tr><td> </td><td class=example><pre>HIST_ENTRY **the_history_list; +</pre></td></tr></table></P><P> + +The state of the History library is encapsulated into a single structure: +</P><P> + +<TABLE><tr><td> </td><td class=example><pre>/* + * A structure used to pass around the current state of the history. + */ +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></td></tr></table></P><P> + +If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been +stifled. +</P><P> + +<A NAME="History Functions"></A> +<HR SIZE="6"> +<A NAME="SEC9"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.3 History Functions </H2> +<!--docid::SEC9::--> +<P> + +This section describes the calling sequence for the various functions +exported by the GNU History library. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to call when you + want to use history in a + program.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions used to manage the list + of history entries.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions returning information about + the history list.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions used to change the position + in the history list.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to search the history list + for entries containing a string.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that read and write a file + containing the history list.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to perform csh-like history + expansion.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Initializing History and State Management"></A> +<HR SIZE="6"> +<A NAME="SEC10"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.1 Initializing History and State Management </H3> +<!--docid::SEC10::--> +<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> + +<A NAME="IDX2"></A> +<DL> +<DT><U>Function:</U> void <B>using_history</B> <I>(void)</I> +<DD>Begin a session in which the history functions might be used. This +initializes the interactive variables. +</DL> +</P><P> + +<A NAME="IDX3"></A> +<DL> +<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>(void)</I> +<DD>Return a structure describing the current state of the input history. +</DL> +</P><P> + +<A NAME="IDX4"></A> +<DL> +<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I> +<DD>Set the state of the history list according to <VAR>state</VAR>. +</DL> +</P><P> + +<A NAME="History List Management"></A> +<HR SIZE="6"> +<A NAME="SEC11"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.2 History List Management </H3> +<!--docid::SEC11::--> +<P> + +These functions manage individual entries on the history list, or set +parameters managing the list itself. +</P><P> + +<A NAME="IDX5"></A> +<DL> +<DT><U>Function:</U> void <B>add_history</B> <I>(const char *string)</I> +<DD>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> + +<A NAME="IDX6"></A> +<DL> +<DT><U>Function:</U> void <B>add_history_time</B> <I>(const char *string)</I> +<DD>Change the time stamp associated with the most recent history entry to +<VAR>string</VAR>. +</DL> +</P><P> + +<A NAME="IDX7"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I> +<DD>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> + +<A NAME="IDX8"></A> +<DL> +<DT><U>Function:</U> histdata_t <B>free_history_entry</B> <I>(HIST_ENTRY *histent)</I> +<DD>Free the history entry <VAR>histent</VAR> and any history library private +data associated with it. Returns the application-specific data +so the caller can dispose of it. +</DL> +</P><P> + +<A NAME="IDX9"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, const char *line, histdata_t data)</I> +<DD>Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>. +This returns the old entry so the caller can dispose of any +application-specific data. In the case +of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned. +</DL> +</P><P> + +<A NAME="IDX10"></A> +<DL> +<DT><U>Function:</U> void <B>clear_history</B> <I>(void)</I> +<DD>Clear the history list by deleting all the entries. +</DL> +</P><P> + +<A NAME="IDX11"></A> +<DL> +<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I> +<DD>Stifle the history list, remembering only the last <VAR>max</VAR> entries. +</DL> +</P><P> + +<A NAME="IDX12"></A> +<DL> +<DT><U>Function:</U> int <B>unstifle_history</B> <I>(void)</I> +<DD>Stop stifling the history. This returns the previously-set +maximum number of history entries (as set by <CODE>stifle_history()</CODE>). +The value is positive if the history was +stifled, negative if it wasn't. +</DL> +</P><P> + +<A NAME="IDX13"></A> +<DL> +<DT><U>Function:</U> int <B>history_is_stifled</B> <I>(void)</I> +<DD>Returns non-zero if the history is stifled, zero if it is not. +</DL> +</P><P> + +<A NAME="Information About the History List"></A> +<HR SIZE="6"> +<A NAME="SEC12"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.3 Information About the History List </H3> +<!--docid::SEC12::--> +<P> + +These functions return information about the entire history list or +individual list entries. +</P><P> + +<A NAME="IDX14"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX15"></A> +<DL> +<DT><U>Function:</U> int <B>where_history</B> <I>(void)</I> +<DD>Returns the offset of the current history element. +</DL> +</P><P> + +<A NAME="IDX16"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX17"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I> +<DD>Return the history entry at position <VAR>offset</VAR>, starting from +<CODE>history_base</CODE> (see section <A HREF="history.html#SEC17">2.4 History Variables</A>). +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> + +<A NAME="IDX18"></A> +<DL> +<DT><U>Function:</U> time_t <B>history_get_time</B> <I>(HIST_ENTRY *entry)</I> +<DD>Return the time stamp associated with the history entry <VAR>entry</VAR>. +</DL> +</P><P> + +<A NAME="IDX19"></A> +<DL> +<DT><U>Function:</U> int <B>history_total_bytes</B> <I>(void)</I> +<DD>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><P> + +<A NAME="Moving Around the History List"></A> +<HR SIZE="6"> +<A NAME="SEC13"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.4 Moving Around the History List </H3> +<!--docid::SEC13::--> +<P> + +These functions allow the current index into the history list to be +set or changed. +</P><P> + +<A NAME="IDX20"></A> +<DL> +<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I> +<DD>Set the current history offset to <VAR>pos</VAR>, an absolute index +into the list. +Returns 1 on success, 0 if <VAR>pos</VAR> is less than zero or greater +than the number of history entries. +</DL> +</P><P> + +<A NAME="IDX21"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX22"></A> +<DL> +<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>(void)</I> +<DD>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><P> + +<A NAME="Searching the History List"></A> +<HR SIZE="6"> +<A NAME="SEC14"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.5 Searching the History List </H3> +<!--docid::SEC14::--> +<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> + +<A NAME="IDX24"></A> +<DL> +<DT><U>Function:</U> int <B>history_search</B> <I>(const char *string, int direction)</I> +<DD>Search the history for <VAR>string</VAR>, starting at the current history offset. +If <VAR>direction</VAR> is less than 0, then the search is through +previous entries, otherwise through subsequent entries. +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> + +<A NAME="IDX25"></A> +<DL> +<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(const char *string, int direction)</I> +<DD>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> is less than 0, then the search is +through previous entries, otherwise through subsequent entries. +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> + +<A NAME="IDX26"></A> +<DL> +<DT><U>Function:</U> int <B>history_search_pos</B> <I>(const char *string, int direction, int pos)</I> +<DD>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><P> + +<A NAME="Managing the History File"></A> +<HR SIZE="6"> +<A NAME="SEC15"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.6 Managing the History File </H3> +<!--docid::SEC15::--> +<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> + +<A NAME="IDX27"></A> +<DL> +<DT><U>Function:</U> int <B>read_history</B> <I>(const char *filename)</I> +<DD>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 <CODE>errno</CODE> if not. +</DL> +</P><P> + +<A NAME="IDX28"></A> +<DL> +<DT><U>Function:</U> int <B>read_history_range</B> <I>(const char *filename, int from, int to)</I> +<DD>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> + +<A NAME="IDX29"></A> +<DL> +<DT><U>Function:</U> int <B>write_history</B> <I>(const char *filename)</I> +<DD>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>. +Returns 0 on success, or <CODE>errno</CODE> on a read or write error. +</DL> +</P><P> + +<A NAME="IDX30"></A> +<DL> +<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, const char *filename)</I> +<DD>Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>. +If <VAR>filename</VAR> is <CODE>NULL</CODE>, then append to <TT>`~/.history'</TT>. +Returns 0 on success, or <CODE>errno</CODE> on a read or write error. +</DL> +</P><P> + +<A NAME="IDX31"></A> +<DL> +<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(const char *filename, int nlines)</I> +<DD>Truncate the history file <VAR>filename</VAR>, leaving only the last +<VAR>nlines</VAR> lines. +If <VAR>filename</VAR> is <CODE>NULL</CODE>, then <TT>`~/.history'</TT> is truncated. +Returns 0 on success, or <CODE>errno</CODE> on failure. +</DL> +</P><P> + +<A NAME="History Expansion"></A> +<HR SIZE="6"> +<A NAME="SEC16"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.3.7 History Expansion </H3> +<!--docid::SEC16::--> +<P> + +These functions implement history expansion. +</P><P> + +<A NAME="IDX32"></A> +<DL> +<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I> +<DD>Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer +to a string (see section <A HREF="history.html#SEC2">1.1 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 removal of escape characters preceding 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 be displayed, but not executed, +as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">1.1.3 Modifiers</A>). +</DL> +<P> + +If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive +error message. +</DL> +</P><P> + +<A NAME="IDX33"></A> +<DL> +<DT><U>Function:</U> char * <B>get_history_event</B> <I>(const char *string, int *cindex, int qchar)</I> +<DD>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> + +<A NAME="IDX34"></A> +<DL> +<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(const char *string)</I> +<DD>Return an array of tokens parsed out of <VAR>string</VAR>, much as the +shell might. The tokens are split on the characters in the +<VAR>history_word_delimiters</VAR> variable, +and shell quoting conventions are obeyed. +</DL> +</P><P> + +<A NAME="IDX35"></A> +<DL> +<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, const char *string)</I> +<DD>Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR> +arguments present in <VAR>string</VAR>. Arguments are split using +<CODE>history_tokenize</CODE>. +</DL> +</P><P> + +<A NAME="History Variables"></A> +<HR SIZE="6"> +<A NAME="SEC17"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.4 History Variables </H2> +<!--docid::SEC17::--> +<P> + +This section describes the externally-visible variables exported by +the GNU History Library. +</P><P> + +<A NAME="IDX36"></A> +<DL> +<DT><U>Variable:</U> int <B>history_base</B> +<DD>The logical offset of the first entry in the history list. +</DL> +</P><P> + +<A NAME="IDX37"></A> +<DL> +<DT><U>Variable:</U> int <B>history_length</B> +<DD>The number of entries currently stored in the history list. +</DL> +</P><P> + +<A NAME="IDX38"></A> +<DL> +<DT><U>Variable:</U> int <B>history_max_entries</B> +<DD>The maximum number of history entries. This must be changed using +<CODE>stifle_history()</CODE>. +</DL> +</P><P> + +<A NAME="IDX39"></A> +<DL> +<DT><U>Variable:</U> int <B>history_write_timestamps</B> +<DD>If non-zero, timestamps are written to the history file, so they can be +preserved between sessions. The default value is 0, meaning that +timestamps are not saved. +</P><P> + +The current timestamp format uses the value of <VAR>history_comment_char</VAR> +to delimit timestamp entries in the history file. If that variable does +not have a value (the default), timestamps will not be written. +</DL> +</P><P> + +<A NAME="IDX40"></A> +<DL> +<DT><U>Variable:</U> char <B>history_expansion_char</B> +<DD>The character that introduces a history event. The default is <SAMP>`!'</SAMP>. +Setting this to 0 inhibits history expansion. +</DL> +</P><P> + +<A NAME="IDX41"></A> +<DL> +<DT><U>Variable:</U> char <B>history_subst_char</B> +<DD>The character that invokes word substitution if found at the start of +a line. The default is <SAMP>`^'</SAMP>. +</DL> +</P><P> + +<A NAME="IDX42"></A> +<DL> +<DT><U>Variable:</U> char <B>history_comment_char</B> +<DD>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> + +<A NAME="IDX43"></A> +<DL> +<DT><U>Variable:</U> char * <B>history_word_delimiters</B> +<DD>The characters that separate tokens for <CODE>history_tokenize()</CODE>. +The default value is <CODE>" \t\n()<>;&|"</CODE>. +</DL> +</P><P> + +<A NAME="IDX44"></A> +<DL> +<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B> +<DD>The list of additional characters which can delimit a history search +string, in addition to space, TAB, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of +a substring search. The default is empty. +</DL> +</P><P> + +<A NAME="IDX45"></A> +<DL> +<DT><U>Variable:</U> char * <B>history_no_expand_chars</B> +<DD>The list of characters which inhibit history expansion if found immediately +following <VAR>history_expansion_char</VAR>. The default is space, tab, newline, +carriage return, and <SAMP>`='</SAMP>. +</DL> +</P><P> + +<A NAME="IDX46"></A> +<DL> +<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B> +<DD>If non-zero, single-quoted words are not scanned for the history expansion +character. The default value is 0. +</DL> +</P><P> + +<A NAME="IDX47"></A> +<DL> +<DT><U>Variable:</U> rl_linebuf_func_t * <B>history_inhibit_expansion_function</B> +<DD>This should be set to the address of a function that takes two arguments: +a <CODE>char *</CODE> (<VAR>string</VAR>) +and an <CODE>int</CODE> 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 <CODE>NULL</CODE>. +</DL> +</P><P> + +<A NAME="History Programming Example"></A> +<HR SIZE="6"> +<A NAME="SEC18"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.5 History Programming Example </H2> +<!--docid::SEC18::--> +<P> + +The following program demonstrates simple use of the GNU History Library. +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#include <stdio.h> +#include <readline/history.h> + +main (argc, argv) + int argc; + char **argv; +{ + 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"); + } + } + } +} +</FONT></pre></td></tr></table></P><P> + +<A NAME="GNU Free Documentation License"></A> +<HR SIZE="6"> +<A NAME="SEC19"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> A. GNU Free Documentation License </H1> +<!--docid::SEC19::--> +<P> + +<center> + Version 1.3, 3 November 2008 +</center> +</P><P> + +<TABLE><tr><td> </td><td class=display><pre style="font-family: serif">Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +<A HREF="http://fsf.org/">http://fsf.org/</A> + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +</pre></td></tr></table></P><P> + +<OL> +<LI> +PREAMBLE +<P> + +The purpose of this License is to make a manual, textbook, or other +functional and useful document <EM>free</EM> in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +</P><P> + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +</P><P> + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +</P><P> + +<LI> +APPLICABILITY AND DEFINITIONS +<P> + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +</P><P> + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +</P><P> + +A "Secondary Section" is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +</P><P> + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +</P><P> + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +</P><P> + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". +</P><P> + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, <FONT SIZE="-1">SGML</FONT> or <FONT SIZE="-1">XML</FONT> using a publicly available +<FONT SIZE="-1">DTD</FONT>, and standard-conforming simple <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> designed for human modification. Examples +of transparent image formats include <FONT SIZE="-1">PNG</FONT>, <FONT SIZE="-1">XCF</FONT> and +<FONT SIZE="-1">JPG</FONT>. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, <FONT SIZE="-1">SGML</FONT> or +<FONT SIZE="-1">XML</FONT> for which the <FONT SIZE="-1">DTD</FONT> and/or processing tools are +not generally available, and the machine-generated <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> produced by some word processors for +output purposes only. +</P><P> + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +</P><P> + +The "publisher" means any person or entity that distributes copies +of the Document to the public. +</P><P> + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. +</P><P> + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +</P><P> + +<LI> +VERBATIM COPYING +<P> + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +</P><P> + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +</P><P> + +<LI> +COPYING IN QUANTITY +<P> + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +</P><P> + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +</P><P> + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +</P><P> + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +</P><P> + +<LI> +MODIFICATIONS +<P> + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +</P><P> + +<OL> +<LI> +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. +<P> + +<LI> +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. +<P> + +<LI> +State on the Title page the name of the publisher of the +Modified Version, as the publisher. +<P> + +<LI> +Preserve all the copyright notices of the Document. +<P> + +<LI> +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. +<P> + +<LI> +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. +<P> + +<LI> +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. +<P> + +<LI> +Include an unaltered copy of this License. +<P> + +<LI> +Preserve the section Entitled "History", Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled "History" in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. +<P> + +<LI> +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the "History" section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. +<P> + +<LI> +For any section Entitled "Acknowledgements" or "Dedications", Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. +<P> + +<LI> +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. +<P> + +<LI> +Delete any section Entitled "Endorsements". Such a section +may not be included in the Modified Version. +<P> + +<LI> +Do not retitle any existing section to be Entitled "Endorsements" or +to conflict in title with any Invariant Section. +<P> + +<LI> +Preserve any Warranty Disclaimers. +</OL> +<P> + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +</P><P> + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +</P><P> + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +</P><P> + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +</P><P> + +<LI> +COMBINING DOCUMENTS +<P> + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +</P><P> + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +</P><P> + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all +sections Entitled "Endorsements." +</P><P> + +<LI> +COLLECTIONS OF DOCUMENTS +<P> + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +</P><P> + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +</P><P> + +<LI> +AGGREGATION WITH INDEPENDENT WORKS +<P> + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +</P><P> + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +</P><P> + +<LI> +TRANSLATION +<P> + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +</P><P> + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +</P><P> + +<LI> +TERMINATION +<P> + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +</P><P> + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +</P><P> + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +</P><P> + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +</P><P> + +<LI> +FUTURE REVISIONS OF THIS LICENSE +<P> + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +<A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>. +</P><P> + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +</P><P> + +<LI> +RELICENSING +<P> + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the +site means any set of copyrightable works thus published on the MMC +site. +</P><P> + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +</P><P> + +"Incorporate" means to publish or republish a Document, in whole or +in part, as part of another Document. +</P><P> + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +</P><P> + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +</P><P> + +</OL> +<P> + +<A NAME="SEC20"></A> +<H2> ADDENDUM: How to use this License for your documents </H2> +<!--docid::SEC20::--> +<P> + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> Copyright (C) <VAR>year</VAR> <VAR>your name</VAR>. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with<small>...</small>Texts." line with this: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> with the Invariant Sections being <VAR>list their titles</VAR>, with + the Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts + being <VAR>list</VAR>. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +</P><P> + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +</P><P> + +<A NAME="Concept Index"></A> +<HR SIZE="6"> +<A NAME="SEC21"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC22"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> B. Concept Index </H1> +<!--docid::SEC21::--> +<table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A> + +</td></tr></table><br><P></P> +<TABLE border=0> +<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX23">anchored search</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#SEC3">event designators</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX1">history events</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#SEC2">history expansion</A></TD><TD valign=top><A HREF="history.html#SEC2">1.1 History Expansion</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#SEC14">History Searching</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A> + +</td></tr></table><br><P> + +<A NAME="Function and Variable Index"></A> +<HR SIZE="6"> +<A NAME="SEC22"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> C. Function and Variable Index </H1> +<!--docid::SEC22::--> +<table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="history.html#vr_F" style="text-decoration:none"><b>F</b></A> + +<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A> + +<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A> + +<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A> + +<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A> + +<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A> + +<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A> + +</td></tr></table><br><P></P> +<TABLE border=0> +<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_A"></A>A</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX5"><CODE>add_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX6"><CODE>add_history_time</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX30"><CODE>append_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_C"></A>C</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX10"><CODE>clear_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX16"><CODE>current_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_F"></A>F</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX8"><CODE>free_history_entry</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_G"></A>G</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX33"><CODE>get_history_event</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_H"></A>H</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX35"><CODE>history_arg_extract</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX36"><CODE>history_base</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX42"><CODE>history_comment_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX32"><CODE>history_expand</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX40"><CODE>history_expansion_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX17"><CODE>history_get</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX3"><CODE>history_get_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX18"><CODE>history_get_time</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX47"><CODE>history_inhibit_expansion_function</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX13"><CODE>history_is_stifled</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX37"><CODE>history_length</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX14"><CODE>history_list</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX38"><CODE>history_max_entries</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX45"><CODE>history_no_expand_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX46"><CODE>history_quotes_inhibit_expansion</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX24"><CODE>history_search</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX44"><CODE>history_search_delimiter_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX26"><CODE>history_search_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX25"><CODE>history_search_prefix</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX4"><CODE>history_set_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX20"><CODE>history_set_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX41"><CODE>history_subst_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX34"><CODE>history_tokenize</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX19"><CODE>history_total_bytes</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX31"><CODE>history_truncate_file</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX43"><CODE>history_word_delimiters</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX39"><CODE>history_write_timestamps</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_N"></A>N</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX22"><CODE>next_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_P"></A>P</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX21"><CODE>previous_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_R"></A>R</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX27"><CODE>read_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX28"><CODE>read_history_range</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX7"><CODE>remove_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX9"><CODE>replace_history_entry</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_S"></A>S</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX11"><CODE>stifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_U"></A>U</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX12"><CODE>unstifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX2"><CODE>using_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="vr_W"></A>W</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX15"><CODE>where_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="history.html#IDX29"><CODE>write_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="history.html#vr_F" style="text-decoration:none"><b>F</b></A> + +<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A> + +<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A> + +<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A> + +<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A> + +<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A> + +<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A> + +</td></tr></table><br><P> + +<HR SIZE="6"> +<A NAME="SEC_Contents"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Table of Contents</H1> +<UL> +<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A> +<BR> +<UL> +<A NAME="TOC2" HREF="history.html#SEC2">1.1 History Expansion</A> +<BR> +<UL> +<A NAME="TOC3" HREF="history.html#SEC3">1.1.1 Event Designators</A> +<BR> +<A NAME="TOC4" HREF="history.html#SEC4">1.1.2 Word Designators</A> +<BR> +<A NAME="TOC5" HREF="history.html#SEC5">1.1.3 Modifiers</A> +<BR> +</UL> +</UL> +<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A> +<BR> +<UL> +<A NAME="TOC7" HREF="history.html#SEC7">2.1 Introduction to History</A> +<BR> +<A NAME="TOC8" HREF="history.html#SEC8">2.2 History Storage</A> +<BR> +<A NAME="TOC9" HREF="history.html#SEC9">2.3 History Functions</A> +<BR> +<UL> +<A NAME="TOC10" HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A> +<BR> +<A NAME="TOC11" HREF="history.html#SEC11">2.3.2 History List Management</A> +<BR> +<A NAME="TOC12" HREF="history.html#SEC12">2.3.3 Information About the History List</A> +<BR> +<A NAME="TOC13" HREF="history.html#SEC13">2.3.4 Moving Around the History List</A> +<BR> +<A NAME="TOC14" HREF="history.html#SEC14">2.3.5 Searching the History List</A> +<BR> +<A NAME="TOC15" HREF="history.html#SEC15">2.3.6 Managing the History File</A> +<BR> +<A NAME="TOC16" HREF="history.html#SEC16">2.3.7 History Expansion</A> +<BR> +</UL> +<A NAME="TOC17" HREF="history.html#SEC17">2.4 History Variables</A> +<BR> +<A NAME="TOC18" HREF="history.html#SEC18">2.5 History Programming Example</A> +<BR> +</UL> +<A NAME="TOC19" HREF="history.html#SEC19">A. GNU Free Documentation License</A> +<BR> +<A NAME="TOC21" HREF="history.html#SEC21">B. Concept Index</A> +<BR> +<A NAME="TOC22" HREF="history.html#SEC22">C. Function and Variable Index</A> +<BR> +</UL> +<HR SIZE=1> +<A NAME="SEC_OVERVIEW"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Short Table of Contents</H1> +<BLOCKQUOTE> +<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A> +<BR> +<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A> +<BR> +<A NAME="TOC19" HREF="history.html#SEC19">A. GNU Free Documentation License</A> +<BR> +<A NAME="TOC21" HREF="history.html#SEC21">B. Concept Index</A> +<BR> +<A NAME="TOC22" HREF="history.html#SEC22">C. Function and Variable Index</A> +<BR> + +</BLOCKQUOTE> +<HR SIZE=1> +<A NAME="SEC_About"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC21">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>About this document</H1> +This document was generated by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> +<P></P> +The buttons in the navigation panels have the following meaning: +<P></P> +<table border = "1"> +<TR> +<TH> Button </TH> +<TH> Name </TH> +<TH> Go to </TH> +<TH> From 1.2.3 go to</TH> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ < ] </TD> +<TD ALIGN="CENTER"> +Back +</TD> +<TD> +previous section in reading order +</TD> +<TD> +1.2.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ > ] </TD> +<TD ALIGN="CENTER"> +Forward +</TD> +<TD> +next section in reading order +</TD> +<TD> +1.2.4 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ << ] </TD> +<TD ALIGN="CENTER"> +FastBack +</TD> +<TD> +previous or up-and-previous section +</TD> +<TD> +1.1 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ Up ] </TD> +<TD ALIGN="CENTER"> +Up +</TD> +<TD> +up section +</TD> +<TD> +1.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ >> ] </TD> +<TD ALIGN="CENTER"> +FastForward +</TD> +<TD> +next or up-and-next section +</TD> +<TD> +1.3 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Top] </TD> +<TD ALIGN="CENTER"> +Top +</TD> +<TD> +cover (top) of document +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Contents] </TD> +<TD ALIGN="CENTER"> +Contents +</TD> +<TD> +table of contents +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Index] </TD> +<TD ALIGN="CENTER"> +Index +</TD> +<TD> +concept index +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ ? ] </TD> +<TD ALIGN="CENTER"> +About +</TD> +<TD> +this page +</TD> +<TD> + +</TD> +</TR> +</TABLE> +<P></P> +where the <STRONG> Example </STRONG> assumes that the current position +is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of +the following structure: +<UL> +<LI> 1. Section One </LI> +<UL> +<LI>1.1 Subsection One-One</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.2 Subsection One-Two</LI> +<UL> +<LI>1.2.1 Subsubsection One-Two-One +</LI><LI>1.2.2 Subsubsection One-Two-Two +</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> +<== Current Position </STRONG> +</LI><LI>1.2.4 Subsubsection One-Two-Four +</LI></UL> +<LI>1.3 Subsection One-Three</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.4 Subsection One-Four</LI> +</UL> +</UL> + +<HR SIZE=1> +<BR> +<FONT SIZE="-1"> +This document was generated +by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> + +</BODY> +</HTML> diff --git a/readline-6.2/doc/history.info b/readline-6.2/doc/history.info new file mode 100644 index 0000000..dc5e8a0 --- /dev/null +++ b/readline-6.2/doc/history.info @@ -0,0 +1,1401 @@ +This is history.info, produced by makeinfo version 4.13 from +/usr/src/local/chet/src/bash/readline-src/doc/history.texi. + +This document describes the GNU History library (version 6.2, September +6 2010), a programming tool that provides a consistent user interface +for recalling lines of previously typed input. + + Copyright (C) 1988-2011 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, with the Front-Cover texts + being "A GNU Manual", and with the Back-Cover Texts as in (a) + below. A copy of the license is included in the section entitled + "GNU Free Documentation License". + + (a) The FSF's Back-Cover Text is: You are free to copy and modify + this GNU manual. Buying copies from GNU Press supports the FSF in + developing GNU and promoting software freedom." + + +INFO-DIR-SECTION Libraries +START-INFO-DIR-ENTRY +* History: (history). The GNU history library API. +END-INFO-DIR-ENTRY + + +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. +* GNU Free Documentation License:: License for copying this 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 + +1 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 + +1.1 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 + +1.1.1 Event Designators +----------------------- + +An event designator is a reference to a command line entry in the +history list. Unless the reference is absolute, events are relative to +the current position 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 preceding the current position in + the history list starting with STRING. + +`!?STRING[?]' + Refer to the most recent command preceding the current position in + the history list 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 + +1.1.2 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. + + For example, + +`!!' + designates the preceding command. When you type this, the + preceding command is repeated in toto. + +`!!:$' + designates the last argument of the preceding command. This may be + shortened to `!$'. + +`!fi:2' + designates the second argument of the most recent command starting + with the letters `fi'. + + Here are the word designators: + +`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 + +1.1.3 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' +`a' + Cause changes to be applied over the entire event line. Used in + conjunction with `s', as in `gs/OLD/NEW/', or with `&'. + +`G' + Apply the following `s' modifier once to each word in the event. + + + +File: history.info, Node: Programming with GNU History, Next: GNU Free Documentation License, Prev: Using History Interactively, Up: Top + +2 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 + +2.1 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. + + Before declaring any functions using any functionality the History +library provides in other code, an application writer should include +the file `<readline/history.h>' in any file that uses the History +library's features. It supplies extern declarations for all of the +library's public functions and variables, and declares all of the +public data structures. + + +File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History + +2.2 History Storage +=================== + +The history list is an array of history entries. A history entry is +declared as follows: + + typedef void *histdata_t; + + typedef struct _hist_entry { + char *line; + char *timestamp; + histdata_t 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 around the current state of the history. + */ + 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 + +2.3 History Functions +===================== + +This section describes the calling sequence for the various functions +exported by the GNU History library. + +* 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 + +2.3.1 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 (void) + Begin a session in which the history functions might be used. This + initializes the interactive variables. + + -- Function: HISTORY_STATE * history_get_history_state (void) + 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 + +2.3.2 History List Management +----------------------------- + +These functions manage individual entries on the history list, or set +parameters managing the list itself. + + -- Function: void add_history (const char *string) + Place STRING at the end of the history list. The associated data + field (if any) is set to `NULL'. + + -- Function: void add_history_time (const char *string) + Change the time stamp associated with the most recent history + entry to STRING. + + -- 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: histdata_t free_history_entry (HIST_ENTRY *histent) + Free the history entry HISTENT and any history library private + data associated with it. Returns the application-specific data so + the caller can dispose of it. + + -- Function: HIST_ENTRY * replace_history_entry (int which, const char + *line, histdata_t data) + Make the history entry at offset WHICH have LINE and DATA. This + returns the old entry so the caller can dispose of any + application-specific data. In the case of an invalid WHICH, a + `NULL' pointer is returned. + + -- Function: void clear_history (void) + 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 (void) + Stop stifling the history. This returns the previously-set + maximum number of history entries (as set by `stifle_history()'). + The value is positive if the history was stifled, negative if it + wasn't. + + -- Function: int history_is_stifled (void) + 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 + +2.3.3 Information About the History List +---------------------------------------- + +These functions return information about the entire history list or +individual list entries. + + -- Function: HIST_ENTRY ** history_list (void) + 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 (void) + Returns the offset of the current history element. + + -- Function: HIST_ENTRY * current_history (void) + 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' (*note History Variables::). If there is no entry + there, or if OFFSET is greater than the history length, return a + `NULL' pointer. + + -- Function: time_t history_get_time (HIST_ENTRY *entry) + Return the time stamp associated with the history entry ENTRY. + + -- Function: int history_total_bytes (void) + 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 + +2.3.4 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 current history offset to POS, an absolute index into the + list. Returns 1 on success, 0 if POS is less than zero or greater + than the number of history entries. + + -- Function: HIST_ENTRY * previous_history (void) + 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 (void) + 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 + +2.3.5 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 (const char *string, int direction) + Search the history for STRING, starting at the current history + offset. If DIRECTION is less than 0, then the search is through + previous entries, otherwise through subsequent entries. 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 (const 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 is less than 0, then the search is through + previous entries, otherwise through subsequent entries. 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 (const 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 + +2.3.6 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 (const 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 (const 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 (const char *filename) + Write the current history to FILENAME, overwriting FILENAME if + necessary. If FILENAME is `NULL', then write the history list to + `~/.history'. Returns 0 on success, or `errno' on a read or write + error. + + -- Function: int append_history (int nelements, const char *filename) + Append the last NELEMENTS of the history list to FILENAME. If + FILENAME is `NULL', then append to `~/.history'. Returns 0 on + success, or `errno' on a read or write error. + + -- Function: int history_truncate_file (const char *filename, int + nlines) + Truncate the history file FILENAME, leaving only the last NLINES + lines. If FILENAME is `NULL', then `~/.history' is truncated. + Returns 0 on success, or `errno' on failure. + + +File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions + +2.3.7 History Expansion +----------------------- + +These functions implement 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 removal of escape characters preceding the + history expansion character); + + `1' + if expansions did take place; + + `-1' + if there was an error in expansion; + + `2' + if the returned line should 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 * get_history_event (const 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 (const char *string) + Return an array of tokens parsed out of STRING, much as the shell + might. The tokens are split on the characters in the + HISTORY_WORD_DELIMITERS variable, and shell quoting conventions + are obeyed. + + -- Function: char * history_arg_extract (int first, int last, const + char *string) + Extract a string segment consisting of the FIRST through LAST + arguments present in STRING. Arguments are split using + `history_tokenize'. + + +File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History + +2.4 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 history_max_entries + The maximum number of history entries. This must be changed using + `stifle_history()'. + + -- Variable: int history_write_timestamps + If non-zero, timestamps are written to the history file, so they + can be preserved between sessions. The default value is 0, + meaning that timestamps are not saved. + + The current timestamp format uses the value of HISTORY_COMMENT_CHAR + to delimit timestamp entries in the history file. If that + variable does not have a value (the default), timestamps will not + be written. + + -- Variable: char history_expansion_char + The character that introduces a history event. The default is `!'. + Setting this to 0 inhibits history expansion. + + -- 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_word_delimiters + The characters that separate tokens for `history_tokenize()'. The + default value is `" \t\n()<>;&|"'. + + -- Variable: char * history_search_delimiter_chars + The list of additional characters which can delimit a history + search string, in addition to space, TAB, `:' and `?' in the case + of a substring search. The default is empty. + + -- Variable: char * history_no_expand_chars + The list of characters which inhibit history expansion if found + immediately following HISTORY_EXPANSION_CHAR. The default is + space, tab, newline, carriage return, and `='. + + -- 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: rl_linebuf_func_t * history_inhibit_expansion_function + This should be set to the address of a function that takes two + arguments: a `char *' (STRING) and an `int' 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 + +2.5 History Programming Example +=============================== + +The following program demonstrates simple use of the GNU History +Library. + + #include <stdio.h> + #include <readline/history.h> + + main (argc, argv) + int argc; + char **argv; + { + 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: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU History, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top + +Appendix B Concept Index +************************ + + +* Menu: + +* anchored search: Searching the History List. + (line 10) +* event designators: Event Designators. (line 6) +* history events: Event Designators. (line 8) +* history expansion: History Interaction. (line 6) +* History Searching: Searching the History List. + (line 6) + + +File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top + +Appendix C Function and Variable Index +************************************** + + +* Menu: + +* add_history: History List Management. + (line 10) +* add_history_time: History List Management. + (line 14) +* append_history: Managing the History File. + (line 29) +* clear_history: History List Management. + (line 35) +* current_history: Information About the History List. + (line 18) +* free_history_entry: History List Management. + (line 23) +* get_history_event: History Expansion. (line 31) +* history_arg_extract: History Expansion. (line 46) +* history_base: History Variables. (line 10) +* history_comment_char: History Variables. (line 38) +* history_expand: History Expansion. (line 9) +* history_expansion_char: History Variables. (line 30) +* history_get: Information About the History List. + (line 23) +* history_get_history_state: Initializing History and State Management. + (line 15) +* history_get_time: Information About the History List. + (line 29) +* history_inhibit_expansion_function: History Variables. (line 62) +* history_is_stifled: History List Management. + (line 47) +* history_length: History Variables. (line 13) +* history_list: Information About the History List. + (line 10) +* history_max_entries: History Variables. (line 16) +* history_no_expand_chars: History Variables. (line 53) +* history_quotes_inhibit_expansion: History Variables. (line 58) +* history_search: Searching the History List. + (line 13) +* history_search_delimiter_chars: History Variables. (line 48) +* history_search_pos: Searching the History List. + (line 33) +* history_search_prefix: Searching the History List. + (line 23) +* history_set_history_state: Initializing History and State Management. + (line 19) +* history_set_pos: Moving Around the History List. + (line 10) +* history_subst_char: History Variables. (line 34) +* history_tokenize: History Expansion. (line 39) +* history_total_bytes: Information About the History List. + (line 32) +* history_truncate_file: Managing the History File. + (line 35) +* history_word_delimiters: History Variables. (line 44) +* history_write_timestamps: History Variables. (line 20) +* next_history: Moving Around the History List. + (line 20) +* previous_history: Moving Around the History List. + (line 15) +* read_history: Managing the History File. + (line 10) +* read_history_range: Managing the History File. + (line 16) +* remove_history: History List Management. + (line 18) +* replace_history_entry: History List Management. + (line 29) +* stifle_history: History List Management. + (line 38) +* unstifle_history: History List Management. + (line 41) +* using_history: Initializing History and State Management. + (line 11) +* where_history: Information About the History List. + (line 15) +* write_history: Managing the History File. + (line 23) + + + +Tag Table: +Node: Top1314 +Node: Using History Interactively1959 +Node: History Interaction2467 +Node: Event Designators3891 +Node: Word Designators5033 +Node: Modifiers6672 +Node: Programming with GNU History7897 +Node: Introduction to History8640 +Node: History Storage10330 +Node: History Functions11465 +Node: Initializing History and State Management12454 +Node: History List Management13266 +Node: Information About the History List15298 +Node: Moving Around the History List16795 +Node: Searching the History List17796 +Node: Managing the History File19728 +Node: History Expansion21548 +Node: History Variables23456 +Node: History Programming Example26488 +Node: GNU Free Documentation License29165 +Node: Concept Index54356 +Node: Function and Variable Index55061 + +End Tag Table diff --git a/readline-6.2/doc/history.pdf b/readline-6.2/doc/history.pdf Binary files differnew file mode 100644 index 0000000..bdb38cb --- /dev/null +++ b/readline-6.2/doc/history.pdf diff --git a/readline-6.2/doc/history.ps b/readline-6.2/doc/history.ps new file mode 100644 index 0000000..2d2daf7 --- /dev/null +++ b/readline-6.2/doc/history.ps @@ -0,0 +1,4748 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software +%%Title: history.dvi +%%Pages: 24 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 CMSL10 +%%+ CMSLTT10 CMSS10 CMTT9 CMR9 CMMI9 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -D 600 -t letter -o history.ps history.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2011.02.08:1112 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A +mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 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/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: CMMI9 +%!PS-AdobeFont-1.1: CMMI9 1.100 +%%CreationDate: 1996 Jul 23 07:53:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-29 -250 1075 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935 +86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505 +DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD +67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF +6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554 +FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7 +22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD +730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F +449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7 +97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A +E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C +AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA +A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599 +B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B +9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E +759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3 +5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2 +BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680 +3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE +2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA +1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB +431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588 +A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433 +30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7 +801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.1: CMR9 1.0 +%%CreationDate: 1991 Aug 20 16:39:59 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 72 /H put +dup 83 /S put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 118 /v put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-39 -250 1036 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835 +3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203 +046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E +C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A +A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2 +A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D +731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B +09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1 +49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B +5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B +54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C +C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F +11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AD14F1CBE935942AEC +D4004E6BEF379066FD72209DC88D2E634E79BCC2B98C766CBD92C561F2703F8A +109E6C6CEC7B866F2FC7ADF646BF492E520319F3B949AB5D84AE990B33344A40 +3971F58DFDF8D8D67FA0B8F2A0D884F8C09A5A721319B911DBA0A35903877343 +C37BC36C5EB32353272D1E6ED5FCA611BE319A7E1E842CB7576E7CCFF73F4DA0 +79C95BA59FE28B4C215985B32DD3AF0843AA8D257E97A12C37A7E5F07FA3B46B +76D85FB41CD90FFCADEC92F5D8AB1109D99E4251F4D0DC2693AF1404DF49B308 +49D7516DC2391D5FFDF9B75C589BD3C4DAFF2DC0F2D809EF9A864E1D8AF48514 +48C90D75A4168D99D07A6BAE0A6E46D0B2681C0A634A2A11FE8CB3E9645E42B7 +CEC0F081EF5EC0275B5A363ADD57B1DF5CC39EE580C9000FD3E84A8659A49F58 +FE78EFBF8A587984581BF7FBD76B2FA7E0E345D939FAAF781E8E463A761E2B8A +923ECD676EDCB340CEA6F6BC95CDFA5591CD4162E62E18BF99D95D82965CE96F +01C4FCAE8D710D0C822DC1FB7CEBE6D5A6571CF5E1E4E09AD669AE9B5C541AD4 +BDBD4521F87CCB6594BC9651164B9A8936BB472E2D0FFDA1321DA3705BF338D8 +754EB9BA0E027AEC143ED0DF0AB63723C8782C7F6934454F66616B0AB11DC672 +CE8DD3B7BD53E293E684111FB679A8DB9B7F5BE0DE2D885AD61E5F5E6A531A2A +59B88E09B24B382E0B82CB1ED14C4CBDC42740242D4BB659089119E173C18D06 +E4899FA22620159BE2F93957CC35200EE2DBECB50C2DB46865DB2DA806AE9526 +C95993E81BC219108C9E60C391C09A2204B5ED2FF07738B595778FDAD688C239 +E5D88498FFFA562F84B4EB2A438A5E6E53B8AE37B8DE3645AD5177A951F3F482 +C1DEBC090071106307630FBC73042C45EF0F0207731EB7353A7CC574927DA574 +9288D70E163B7E1B6BA00F00A646223F7F65BCC37549289259D8C6ACEDF9E13D +8F48262F4F2819D01074196106CF0C546FB97805917EA2CE1366A960CA1C2D75 +8040F3680B0964A51762FE7298A9448E48B966331FFA31287D03EFD57C4817EB +48045F3FD8CF3CEC740ACA4374D0BDC29924D0101BD332B356724F96FD16C13B +6FE70C2419A5464E2768DD68B74E4D5621466E75F481CCBB9F83DAD4BDE54AE6 +91139AFBF6B0218F6697E47679BDE65BE25E8ECC20458CE11DC7899599363280 +041D8B49C2B043D793F9FDC915435459BE783A939AA081BB60FFB3B0AD4C65DF +427A7D92DBE1096F8AD111C7F06816EA2B3688C61AE0F27BE9AAFD036FCAA6EF +D5EE4C5E611ABBAB378EE8FACC3C23CDF16020982BF22993240DF28CBBB3CCD6 +64505D48B9716873A8CA7610A7DDC2B5BEB9C859B49C14575B37189A0721BD17 +F36B1C88B495F55C19A581895FF86D04D76978DADB486ADE888480F3975FC604 +DC69CE386B57CC759B5755C527EB2BB56BC4CC3AC8256DC6666EF865096E349F +9E3BA0A9B30F09295C36FBEFF2211D917125551626617C456ADE8C3C46087D66 +A119C924376A77E5B10D777FE4DD91EDA4411244E0733A0D6DEAEA2545E291A5 +E3F92C307A9C04ED7228D468FC1649D969E90CFC3FA0EC2C88E399EA78BC65CB +3218D1DF850F8A005242543C6F983FF6DB070A841F63820A78E7971683D63225 +ED7DCBEA8130B104E25A3BB4E0F457E2A8A093539A029152EE906560A86C3219 +89D6E9A963322841F713973D0B19E9439AEC3935DA60B5BDE44139B95FECD321 +2CCD7C9473CA7490EC44D30DED292F8F759EA500AADE2334D188E6ECEFF4491D +9227153BC250BA7D9EB7C0411723B1EE76A9D86DF8530A9277D9D086B7C4ECD9 +861D1A9CD9AD967B312EED0896876184ADD6351AD7446E2D37A408C19CC687CC +268589DF450E40B9BD1634C5102040796F7D22D137B6513AF9D6B34559A1B88A +81B8F01D89EF4FF9271D19099D74327E44A9CFE0F281E4951FFDDA041346800A +F5BFB4F7D42CF9F641F3DA3D1083579E798DDF968C53C1A72B573976A5560191 +7FE836812ED2AB13EC910BE239A36CDB8E478234E4B1C39AEABB5C1F8887C271 +1AA961C65B513E835D52268905C2BB3BB5F570C91DEB1D35A3B4CC633E28B1CB +33F72D80E60FCC08BE630592C6B0A12785CC3E3FCD71B8BC680899B19D4D707C +46B7D0BC251A150C06F2ACAF15FBA0A4024BA2C8BFA0EAB2CF7C1DC9CF33E63B +738CFCB2B2BF14C37CA935CAA4707E6BC6C39B598019773857813EFA1AAEB74D +C40F0329414136910D9B6E3E02C5DFAF6690FDFA55ADDFF5BC7C1917D8996533 +538DC0B629CEA825B08E8D1882ECB52BE3299BE56328A142389F7208947CA6AC +CCF49F921B53906F58F2E9AB253D500EC125DD62D5E1BCAAE973B429E151B119 +29A6A61071C6AC1F6D61CE434DBD7F205B4496E744E1DF205183F7EB546516FA +A0A8054D72FF4A7A579134ACDC1DD61E8D28065AC34FBE04CD8366884FFCD595 +13D5C429E0C68098CE3D0E5B9533B5D166894D9958C1B9D384257A30316F925A +40229CC8665CECB8440118700CA8C98091B6C2B117027E7CBF069C31292D4C6A +A7C311C4D52FF847B25739633FE51C724DFAC6F26ACBD3588AB6FC886A7D0530 +2ECD82855ED3FBA5CBCC797051EA514F45CC8F9593ADD302E3BA79C8E46FD22B +37A2F21F07D35CB9DD8529E5018AFCF3AB1765F170D02E03F79B75882906CA02 +A75DED91B4670926FE6FEA4DEDF80BE3849D3D615917BE4742E594A3496C2446 +F76BA5AF5714D9A091111AE1F6628DB7A952E44254EFBCBDEAB492C902DB272A +1C1E8FA0807874100B03C404F158C9916C9D4ACA59F7BB0A5299C73795CADFC6 +7CF2E2BEDC4BCD537BD0E1E624CAB0811DB45DB36F8C0FA0772AC33994ADBC72 +63C4E6A12439C9F43B71191A767579E1FD06382C1DC06A7C69A8858AB47E04D2 +9EC7D01A045CE7A04A39AEC3806B731D7DB53CB8469630604CC0D198753CAA49 +E1B55F06650945E03909EB79F1E2232077B9F1BBC8860553C47726EED45CD944 +966814E30C9CAE2AE1F1BC6018DA252D4C1E0F6D54929165F39858448258A628 +E278A01300312F43762795CA0D5E5AD3F3AE19883D9065BEEBAA6D8F7CDC4AE4 +4C8D39277111749AB7E2A568620EBD7DCB76836F244D9720C4EB0B9100DD7B0A +6AC2B75AE80E6406102EF019B5B28CA14D853A8D9957129C4BF0EF3EFBA7EB0C +9317B11BB69CB98671518A3847981A027245914B7C0238E9A4E3A5169EE63C6B +B6645144DE0B73A8A4BC6F9CD21BF9FB6CAFE2CC742E733952EF4E725524B7EE +9AA2CF272C835CB79C5E403CEF9D74FF0C7436EBAB6209BD13BC7A9BDFA02ED1 +A233E6646837D9C4C1CCE1D813094C2A88B3B57AC7EDF1EC376696A52AE96FB2 +ADAA12270964E5A5E8C32470166BED504F477A8E37F72826B5D5AD1E17F5D140 +421EFAEAA061618E347B35AA46C1E915F8AB517AE828B2349B99DBECE6B8302F +CCEE90FE666B6CA4712C50B1CCF582EBC5432D26C5E560835508CD13B0F43760 +85A50F0733C35C7CFE1B952DBEAEBD6A6EA43F6AAC2E75F9D03A61F774375F43 +3041544C07FF105E1DE4D50D9C46FC90BBB20A7486807F6E5B115B33FF3E5492 +8729F0D1C8FCF5DAA180E59112061EE6ECFB6C0748B01DF68BD6F76D4AB5195F +BD58A37A3EEADF9E05F81BE571F731977ED04D4D4DB7B51DD10FE351D02C5090 +3B0B41E0C3BFF3230014FAA0FB1402A8EC6106E78DBFD410A979AA5211AFF01E +E446615E2BA8FAB7BE9C7224F5F6C678AD509DF20BD0AD887E8804F806439A7A +12E9A4EC2044C329410900A869CD878B84E92D0EE8EED95166C4233F5AA3AAD5 +07C42C19FC4790178E4C2DA81CEB2382055828789CD471D79DEA1EE6D11BB7AA +F8035405CA79C679A202D800DAD046092A5B1AF6472B94B62873EB6C0EC8683A +159BEB9FB3F57EE16C1738DBD684F5EC321B24AEBD8259754B01E6DB7868674C +7A9B25FCC54F45D825AC044561783544B8ADC7D6DED3B41A843416CF55B3F8DC +9285E181671642CAAD8769A4C916282B227940C1C29DCC3E02D051ABFA3B3CED +6BD69676873A346C43A9611435E2AD636BB12187F72644F8FAF40F65ED2B2751 +78BF371854AAC8BFE285D68435D5DBF1A34161E2347CB3CC1503C3A2214213D1 +21FE71AFB26AF7DACB02541D900D4D6B0153524D2A17C917EF83791C6AB3248D +10A837A4CEC4F158F2C40BCCEBB9E7175485C889B90461E4147F1C5EE68B85F0 +19D0E7263C5498C72703A9720F25D38EC8893D24D5BD3088D63A10815D43DC9C +0D4F6C4AE46F9DBB75D087CFE6A521182669099A11216DCCBFFE770CD2579C3D +BD41B35E5F8205034D8F2120BEA9FB72C6715B1FC6A8318AE58A07B3D6C85F7F +A15B4E55AEF566827DF641DB7FAC8A2782F2132FF7EB976970BF6ED4D494B85B +B9B8DFA4FFCDC6F3756A13DF7E596D80997F1C88D8E3F0F95F8356F7B490282A +A07F4CE85331FCDDEAB7C60F6FA62FAF354EB86B82BEE3654BC45B111D57D6FE +A6F3F2C203CE6190BBB92A365DC217F5701B7481923788607272A7D05AE622BF +D523A58EA6BB16344978158697F94DCECA6AEC487351227E46598F07551D384B +F08136A37ADC06747F61A35DD3EA337DAC79A183075B889E2FEB2E4B410C229D +803BDAD9894B94F65735E67BC07652B7D9ACC7A11A7C8A55318DF65775B5168B +5875C955D9FB09E01A13D66D8BD05C588A85A2B18B29CAD6681EA6F4B5B36A49 +BD8C65E8CAD928E3AD315E1B3E0AE8CE319FC0FE7D9C0F66335F69BA4C257FCD +490F8BC096E21AFCD49C02624B3E7373BE0D3AC204B97DF6C4F73AD3C1E937B3 +95A4EC7DCC051BDD976586546B2827FDBFE123F104491536D816185CE115ED94 +402614E5293D0EC1B6CEE1B955260A18B96F6D5D825FB029E1A5CFEB5476EB50 +EFF2341C9737C5FAB195E37136E2957831CD8F67499AEC281FA14260B3D3EBC1 +64918B9C5D104267FE176609AC63D067CB70749348C2877A2E88ABE087B4F0B3 +B462F4970D0903A3D4821EDE9C9B05026FEC969A03E816D6DFE60C1234A65F73 +8A9F0BFA7DD6A9F971BAF5256187D052401D76462CDE3C3A17EB3A4ADAC404DE +93D475CE0F1ACA1E328A104AC443618C43971E39F9BF2C93F86D6B45220AA4FC +1E4DE67F8D376C595E5F4B1492ADFCFDA4C55AA2396D1F7F7E6403F25536F1BA +6EB8937426C0B79B67EE7F46660581262B6029EAA0375A6A900406DC10E3B990 +165C68DAC5EC15DDC7CABA62D5446F154F89BD6E02AA9754F229CBF95638A25E +1592A49481D4F106571576827E44B1B3C8DA2B2DBE187F2E9B3BAB2E039235A7 +45AD875F1B31344D4C8B7F19F1EA136B295345D36B106FBF61373DE31D72D99A +9F5E6EBDBC5FE6187E5B6034442B70059CE2BCBA450584D536208BB7983A2C52 +66864CDCAAC8002B324427DA2AA3CB36A90E067A248FCFE4B6785E49F4DDD41D +F46D7AE9EAD03D90992CCCFF0E66102AB6B94D9CC62217B8B34BD122B90E5CB7 +07A162C3587EC865ABE9492797DE9D8DDF0DAC66A483085F655F4A4FD69881FC +2E8A423274F13AAF3BF3F49BA1C9F024FD2345FFDD38D6EC84AEC0703CA69DD1 +1C97FF1EA61A666F71C26DDD2264E41EC93CC78EEFFA4E480D2D2F8CD9CA8D59 +981F74F72D32CB11DCB6B4DBDC078E217F9CF855E76E3659AF9D67D324C1E1EC +50E3C01BA9E7BF9903DD9FBEDA1EC697552DA8F6E896E0ED71A6567AB628116A +B7E655313314A41B8B8652183C25339C20CCDD74EAE7F27EA7C9E9FADA0F70F4 +020C01ED0E8B6A21CB8ABED9F2D48444C3310D60BE710AD201A54C3CE00887C4 +7614A7B580A592F7E301E4696A5EA91D81F6FDED33701B0456F3821A0B8504FB +ACD91717FD661469F8325368F9DEEC474971B374190FD0865448D9B611816F05 +382140C6A07A56DEE5ACD88851E21B6281C7FDC21ECBBFC2A2B4C60AC16A1DF2 +C68BC43F81027085079178C2ADE5C84B036390C99E612F9E8F49BD0ABE1D5977 +46BD62652E29FA9E515601B81C7DA9245F102B7D939F91436803976AF3C787C0 +3DBCC9EF6EE197A13D136BFDA523A2194D8F60EAA75247FB44C575DB6202C466 +BF04D9153E4A7B742DD2FC75C1E7FAF9715EA53A2540B800D7305848EAC5B0A3 +AD838B481254E0D65A6F6602218C0CC6ADCAF7FA534EFDA315882376950390C1 +BC208247E5B7912729 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.1: CMSLTT10 1.0 +%%CreationDate: 1991 Aug 20 16:41:43 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +end readonly def +/FontName /CMSLTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 97 /a put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-20 -233 617 696}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 +0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB +4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 +8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 +8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 +B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F +ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 +C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F +EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F +2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 +4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 +52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D +38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA +00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 +B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D +CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF +B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F +802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE +32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 +00DE382ABED85350033F8ECB97398E4E0A75D4877A107F6A909D0C76D14F9A96 +8A6CFDE3FD9D79B6FD82693A9F354BD2ECF30C6D99F7AC522F8D6C93EA214F7B +3D0ED77F042ACDE9414264C0698E86398562E2C640DEBBA0734AB4C3ACE3907D +CC79E6B2C6C3C3F9B01526E8CD98237D4A9B403FF8CE3132222FA60C196A19BC +A2393AE6935C0F8B67FC1D1A13507C100403B61A82AB0165B072581059B844EE +CE34C714DB54843CA29B306D373EA67C2F6842FC3FE75898FB80AE43E689F641 +ACB7715CF595C8ADDF68D8D5DBF99528FC4FAE495ACEAC9E0B61971641EF17A0 +4015E263840C96C1F2ECC22A3368F9E0A31475185420560CBEE9639AB9280831 +69636C32D1F3E397FF45DD97FAB9222771EC4C50F45E8DCE4BB761DA258F936A +1067924AD9A066E11FA841E0258039BF264DB97EA12311A8AE9428DBD5A0EEAD +12915888C3BC3E25EF203BA7D30C9D7ECD8A33F72604FB9DF9DEB133671C993F +DC7628AC78C3E93D3441733E247F4A364C66C78334B1C31FD803FEDC7845EC70 +593FC75B7833792AE449CC2712A3E054148A9EBD8AC6170E14C7284C434CAD61 +FBBE0BD31D7970A6C032BB9A12E164759735B18471D2E9E19735387607ED1E5B +56CA84F1874F59A6797CD8181B0EC05F42E02F27A9F63542254DE953559CAD95 +9F4987CB5A72A329F4E8D07A23DEFA2C0A9C4CD8AC65E867007CBF7D0309BE28 +9E515728F9495D1B5F3EB89A51AE836937E548CB10DA7B969F7558DA4CB29E45 +813BE23A40849203DAD5C8890394F1EDD90074E63CC0D6CDCE6143A153E79A9C +7556EA3C9D7CA44368B81DE3B5ECF4791A4E8955ADE6632B22972A5F8B5EC694 +1EEF90BC65E2C91643058C323CD53CC4059CAB8EB5930DE530817C6E4283E53A +210C7BCD93B4E2EB9A4530932868FF6924106C3A889A9B0DA120949F9D24B2F9 +8B1D9EAD4F1B84CC9CA63E7E3154A6D42A338564B7FAAC6509E08F47A207F933 +6F4A1813D7958F62EBFED3361E6A3D45A2DC552FFEECD0F18E60222219ACEC20 +45285AE5EF96AF299FB42C9F516E6BA7079D20C9739D73972DCFF9FF27FD8D59 +8397137DEA913CCB5A678062F02008D5780F8BE9C7928F7F6CEFD68BCEFAE707 +91903D42A7068C81CFA224FD71380A04959471DBD86E29945D101B4388D3A602 +7C6D4064720146BCB85DB7184C77F01C1D5A0AD5538FADCB48D3B3C39602EEAD +D7611D55DF777E114E5EBFBFDBBF7C77F311801F40061DC2CBDBA9F26FDD2745 +CC72A296FA4BB1E5CD41BAEDA4BCFCE3F6A21699F0C8349BCD63D9C21F268461 +D8F1264444E9F6FBF93690970E6DFD201E68D6991B21201990FCB84BDE9D7FB6 +4A4E752D97E1CFCEEC9AA82D8B6AF47569D87C2B3372575BF5E84E0ED1F76C9A +6E6F6343A50F5728796F4EB21CE80020436D604A37608A43D74C1E8989E43473 +4469EB72EDE6B70938B405847455024F33E52134B08A3194F782F5FA47ED0EC1 +BB6CD75BADEFDE8155D1D9B7FA2BBBC56190F00A6CDDAF4A4CC7EEEBC0FE24AA +7AFE725A4036C72D827D1D9FBBCF98313F2CF1159870F7A111D8C55B97DF77A1 +93D2BF77CF3FA9AD36114D778C7CCA8D1C32DFA37B298ADAA1758772B945A6EF +90C44A27B6CAC3A3B4A43885E9F6BF14BCBD877AF6B498D0BD6FC1C7AD0C5962 +0A0327A291FF7278694DEE9E55E882D08D162C2297671685F9EA8BDEBB060977 +CF23C27B1036389C992B3FECAEC85C06816E9DC27D37CEB3AF8B1A3FFCA8CE3C +9AE090A3B8F72B3BFDB2AC87509499FB0C5D07A76A213E0579B9B48269500C37 +2448CE37E0488008B687947345E1A934F79560A4BDF44C1472D18714192F7706 +F71A3A1ED9A6928E6609055B2B1A049F481B37C4442C78A6FBF91949B3E9EF3C +453B442CCA9E973265604C673752465786FDE0BAECC038104A9EF6BDF2F2F14D +79DFF55430837C0111E882DBF56674AE2C2081C1FA5558CF34C6F1B0C16795AE +541725E0D6329A606FBAF5946054FEB12CCA4575A32A49625E8886A253D7F438 +E4C855F2F04139FB6309BB7147C7ABC18154AA559ECD0A46D70B8F87F5A322E9 +AB517EDD481831CF66B43A6DEEE50E150C19F45F7500F07169D4F7922FD24284 +93AE172849E0570942758D2F5C57B44FE8A939CEFE3E7D708FB8D245FBAFFCB5 +E6B51F90101493A58B7744FF0D135534A2ABD30E22F3541C7C606EB006277A1A +046FC6569559070DFEE59180284A8717058C2A0C2302694FB35B619731A26E6B +ECA6C4A99F1DC6636C148411089A56902F9381A05B97C9C657FC03715D34BD3F +25FA9A3CA78D05C0EA643CFDAF8A4CFD4AEDCF97896F257068516DC6DB23F783 +2142E05DFD8F96ECB5BB268B6738DEF2540751595E1A5612A4688E0D0D1AF9F6 +737E036A0129F2400C05AD9F8D95B01A8743E72EAF700F4E1ACD9EDC1D5D0CC0 +733725A6C604ED2270E0D27677259609A67F5F59246F3A187A74FD2DD8E94F17 +CE32D65DE64C2BF9F5AE2230B0CD64769075B74044CD1237EDC3DBBA2A0D51E9 +5B45FFE2447C2AFCAED3647B2AB12B68ACADC5F3041A85F43BCB2E60C195ECB8 +54A5D979F7A672C978E09777EAED15A2BB20D08C593B327CE89DE8A059141790 +F71A34040F8249BD1F253568E2FE11647A66A9DDD647180BC39BADC5AF42E64F +316EBDE2B19D26E24FDE3105DAF9F4CA01765E4D7E623D77E988A301458C13E4 +D0BEA87A09B2EEE7DEC079737BCD5C0DE724472800E03BCD16D8F9A6B380C7B0 +B75563584CB753C5B2C0C72555D16E638ED3BF3883047A71D7F9B9BA46F335C7 +90B751ED53836ACBB3DB9524A5F6E26169CC86A3F805C63D027D3D161446FEBF +E83E2377F39D154881EFF19DADBDCE48D6F3100ABB9C5DC617F3BAB482E4F570 +DDBC1A9F98201E40AA149083AAD5FBE908FAAEC7281CA1AB5D1674DDB3F8E867 +F4E311DA26C71CFF71080B03844285754575C9F94132C6F43A92553E922BA580 +19E418AEE7E71432EFF5994FD43BD4FEA2B5C70480758115CCFDAE38470C8A69 +8EFDE3172C30D0E8BFAF666253ECA7A93AB5DEC246F6DB6562B0D0D9A585EF56 +342E6A2891370C21A4F428682A1C1684514266051F9875875C64745BA8DE1680 +68DEB7407C1DEA7DAF8F7F499F123E7948C1DAD3844BCC12C835A632036E94AA +0C59E2566F2F7AF26CE5C87C975C481539AF17EC77B1B799C2C1C46C966496CA +3947C252153B9303EB31C11D0F1415EB2B4DF4CC55B081E514FECD172D82C0C6 +4CBF6ED2EA9DAC8F80563743B20F5D4DEDA1B60629E885EA183DB5119A06C541 +13BF437CCD89EDEEBB8D21CFCBEAF5C3C1112B4710BE66660A7D3726B4AE5FA1 +E773A77E18D6B3A02A6065467D452D75DEA48803CDC1600C089C183E68F04513 +F35FA955DF440EDFC083ED21F4121FC2CBD01D3B6D36504142E7DBD5D870AE81 +495A7D4F4B8504F5F87CA7E246EE341CDF20DC499FE279D8EBCC218CBC0D26D0 +2836C1C124D109F2D697BB54444952E5AF538B6514F222F693DA2CE3BC67ADBB +8CF143FFEB552224BB54C70AF45663B4CAC25BD25D514D3FC4D011EF9D5AA8B1 +9B16F5ECEE40488512E15798315CC2A85D604BAF68A3A3F980DD04A17D0E02C2 +702AE3E990DA9EF2AAC4957A3B6499771E8F00E7CAD3C207FACF32B372555025 +5392DBAB9E806F516866293506C3A0667C995BFF9AD8027FCBD2560E7BBB27DD +77CFD1FCC7B7BB072234CC908D7FD87B1410008CFEB63AF0C4B69BF22B75BF71 +6C811369BC4BBF5F410D6C61A12239FD1FE25363312A1BC595028157A185E9CA +308D7752DA09F6908E1C76A1BC08D254B7D7EDC295A6FF1658985D64DE0B9DBA +BEEC85A884D80EFAE9A66B7B577AA734E7E662341D2FFFEC2851A2BCF11DC560 +74F28DA227F1F29AA27BB7088C1BDF4DB64490CE3D8D99F903AD9331161E118F +CC75D0DAEC6AB9F63934371929EA2577CC16D9A2B0D452389FACBDE05B6C08FD +70A66B7C309F4990BF21EE6EE2B3B7B9BD4EFCC8B419499D4A9C8120FCACDDD5 +1CDB568EB932C74C8AA9D52B5C7B61828D696B41432661FC659B122FF69E7110 +6ADC582B8312F1FF10596833454C0FBF05CACE8E95EF9EB53119C5DE28B449CB +971F604BD8D7232C2723A155E37DD5519C6E959D365215BAC11AD54D30E42801 +B93423C8C028EF1A9B13773C624106DD59BA15F4252846B4D677F7D71C9870B6 +6AEF7D061AF2A03ACE5A05D050DC3B7CFA03E249C473B3D754A4570DAC910326 +CF6D61B084A54ADAA03A7C6D9B4A70DD94BE6467563A7B426A625C6CD1645E15 +23A707F0E2E119C1230F3BC3109EE3344962F90E37D679394AD3BAF2D557DD49 +4DC2AB31723955E9EBBC387154AA21F407F7F8F8423D5DCA8938BB7C22A65EFC +C04D60083E7B001031B088A00093B9530A7E71BAC40A5CF652849A77F6999752 +246D794648F8D42A2BFE5F5E4297F92991CA2D157404B1D46851AB529435ED05 +781249F75606BE08CE143545CC8077B25DDD598A8DA2D679A4F4920C4345DDEC +907CDAF694F6DCC9BF3D50C70E089BFF04A77A7DCDA1D76465D6C5D152C8FE5B +6772AD632900AAA71EFFF3A4F90C9AB755B124BF079B98C0B811E2A364AE6A5C +EAF99631D79BB7E144ABA2819811014301CE1C562BF38F9E58B2A4EA8EB8F72F +4A53F5F08A7FA95BF0A988A62214EFA998AADA81E6753161E8B32B45D4209B5D +64DE964EBC65220E146FC73BD34E4AEA2D4643453CF0FAF78EECB4B0539D36AE +853BF4635A063EBD1C1C04773886CFF56A12FF6B3F0FC7C76EEA3BBDCA392F4E +E64DF93EC4AF5D2528E66ECA77E134EC3D4368E0AD8055D782D5BCE2E43F5830 +F34AD1D64B9797DF1416046326290DCEDF3EA07175381A8C1D268B5A6E7C7C86 +4AF59EE9A71E1042EE5F23D303DB1B0A940D7C40950B4F7C60A78AE637 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 34 /quotedblright put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 +20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 +0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD +F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20 +3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122 +A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379 +5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA1566B96E221864A +45A24ADAEC63F61C9FD18376D3984449A1F998C318A8FE36D0D5020E18A49625 +0F3BB603BA1F3E66FF412F6A32433FF8BD2968D79CE4273AD0E0CDDA5153C2BF +F8A46A2244F9394A49D339F763F5A7411A3C29336B21CCB01723705AF589B078 +3763035411FE36AB5D744E81379106890688CB5BC41184548B7FEBA08DE7288E +E6570FEA20C51FACE8E8F824BB61A4A038AB817C47B87391611B77928B2565A9 +3B27A573C05D36ED01D8F27CB2C793370FA9B90021B5696280A55F2CB6117B64 +293EAE0EA5A243F56FD007773CA35DF71B3D28643C25210CCE25F37A5095D6E5 +9CAFD99DD1DB0D7EAD454C13464DF6FF5DD42339797AE5AE467084550FC00139 +6EE818C6365007B2FD6E26285B832CFE6EA7E99665A224C9813C036CED262639 +3FB39C1F05FF8F31D2DEF37BB9B883334F51EA1243332FE1E3FC91864C8AEA79 +16A726F924AFD84F2F4215FB795FC41DCFFC835C90B9E31D291E47AA4BB8C05C +620F69DF31E91A0FBA8E217CDBFAD7C4D480EBC1EB396029CDE615C227A367AD +72834BA95539D39A38EA0CA3CF7F1123F70792CF315BAAA38BBCB6DFA80B4493 +5025F33C3696DAD6A0ADF584C71BCB1D29E523EA4B81FFCE15F3204022BBBEA0 +A9483EE8EAC07D581162672A0D66199174821ABD097561A263C0C0F24066FBE6 +0951F31FBBF2675141F3FB4457CC2A94A40191EA0AB2A606CF540BBB8887B6DE +715EDB1041EBB9D05D0F4A4672F534397B9529EF8743BE88BBA10C81E0A46259 +2F2AA7B638E20C9C8A3A827977AB58ABF7525BE15DB66CE8E9B81457552073B5 +85DF3FA70B5231C447C5724E14730B90FA35ED1B5723036F1658CA8E19EF5A6D +D333B78E91E4D7032EFBFD40A5A2269B0DFD9F7C3438DB58F94B507EB93032F9 +99E5F15D9F5D8CB031BBBFBCA8A15A617ACEDDE70DD9C2D9EE21179FB17AD913 +B4BF577A9046994689D1BC6A6985FF5F5A67D699C2FD288FD9E5BCAD5453EEC5 +68287BD7B8872726C28CD288B4DED2246B843577173450B6E5760852CF2E1727 +01FDB0FFFBE12CA13ACF6434AEF4B59EFF3E0DB1E87D35075B1D55AC12633167 +5A83A39056C077EAE6F2F7D1DDED300BA43830B8034F0A6AEC562D3023270601 +6C594D0359DF6F230F7B80B54EBAE4880AF338956B813E3B8DB8BC778BE0F612 +7D84939C2878B43EAA45BF10E257F22C28C2C148FF48843D2B52626148E3CAA7 +4527B9F246C17BDE21C6E7EAB4906BB6D9E84906CD1832C4BD9E405AFFE33AA2 +AE086C25EA26BC23D68986639366B99C87359915EBB76D7162AA667ADE4954D0 +B1E18027FAC2468CB2FEA2568E23DBC201E9B6A1151FBF21129A088D89E3E728 +28B2785C1A8B2637F368A93EAB459F80506435BE23A85396969E2AC4E0D6E4B0 +8B12EACD150049EF8942C108B96843159D4408424394B33603F565D1622FCB78 +01C22EAC64FB487AEFC0387059055F8BDF207C956D138903896534AD1F42212E +7902D54D0F0D8083B419A459D865F7E7A6A6F8B94FA8AA31417C4FE6440BA98D +1271ED7F25465E994E2D15B4326CF09A6D30ED6BD05D0B66F39DD8F864843B1F +8031DF58C9B37C10FB633BFB58B7940B52AB6948C4412D59266A2518B5E1260A +0EE0FBB176C4076680BEDAA7EDEFEB0995DD9A2CCF3EBF3305A20279366B73C5 +F3DE7527AF736D8D267CB71735935FDF78F765DEA560F7F97140BDE20E9CA866 +4242175E7962A14800C37EF65E856C81918C20C040FFBE7DDC373CDF456143B7 +F3AA5026F9B8286B876259E9532754866C649F4F3383C73878CC054CEBCF2605 +75CC0EB62627085F4DBBCE6B6206F867731F47907BA6B5D37CED7D58049CDA25 +7D47AEB352637FC627C28B09BA0B7778DCDB51A25D6088D7989D18C0079D2290 +B01330175812393755C7227B9E64F952CB99310B2F822437AA2CE4334403C6CD +7C9D007DDF21794D076A5D5263141367A768F8F53D8267251076D9E6E18F9470 +B02BCDAE33E59BDE73E7FF1BFCF40F956914B1A89E6C62FA4D7A084AFDA868A6 +55B77808BDE6448B9732B40B83BC63E8064AFBBFDD187FED36ED67E99CDD69A4 +23F603FEB3890FB19D9CE3600B79C019C5F4E25A63926A8F7BE1B44E53196D67 +F7A6A341F6D7D5E3A991B56A6D7A57A44D255B3CA95F5F6FF0472E6CA0F6F5A1 +D71629A598261C3B7A9BB72F2683F03304936ED01F8A774E74D24C25D5ED538C +63A8C4756AC67CEFCBADE365E29340E780BFED81A59C98292DAD3A1068794A32 +D28D40BB7BA410274E8C8F804055D9457E4439F1255B8070DCB89C4A72043C71 +2B192CDBF53EE9FC81CFA1A4BFBC12271DE6F87E7059F06F38799F37D49C94EE +58685D3F47C915A1CF37B2CB116909E52F537AF7CD386D62D01D30D6D079A5B5 +71BE47AD79CD0F40DE5F15977F11FDCCE33B952858D1478B59F687D7E96B9C5B +D59357FF5927734B19D5B15D3930598F968493970B616D570D3E2A51FE743A82 +E20909091813726FC10599F23E8B5738A90E237CA417B10677A6C8BDCE468EC6 +BD234802C6E4AD49AD148E9CFD0009C97F421070C6CCEFF5076A32EB90F3F5E9 +627E13F658A31CDD3C4A75C66A0508C92785A6C0BCBE2D4C9C1E6B0F33358236 +3B0E68737B23F76B2A2CC1BE7B1B3DF1EEC55F145CD68116804F0238DBDA3B4D +DE8AEACC8AA661B9028FE89F8BEDE8C339036F53073BD2C13EA5CE4F647654E9 +889DB4B8900D05D84DEA0E7A83532602514559BD083AF5DB829E15E62C7251B5 +B6D7F948C78FE7128AEDB6912BB9B0A398B65C4ABE7E3783684B0B6CBE479C0B +229923F5C83C307FDD2D243DC71B40EE71964352EE965C33E56DD0867CE466A7 +68B0BFBB68D15B23E918D1D002DAFB4038BB93BC0FB2E7962A3CB6FF620CB3C0 +F850B119EED8A2B877F9E2D8E8F82D1A6BE16F768081086B95A3968175C57054 +70BFC6C9CE582D7EB11FD407C8835C2DB798E25E782488A9A5C229EF008CD707 +3E4B31F5666906DAC6AE081D46D4E61EEFDF2612C3F47817EBDDB61CBA9C1E1C +A8C70E01BB07146903ED9E72B53BACEF7ED61CDA5812AD9FF1B44682A93F8D01 +08CE1363D775A7C815D4C14EDEAAF507089A503DE2EB81C75C46BC51A0059EB3 +14786BDB0AC405AA352FC5118FE3372398CF1D7264F981EA05DFCB911A2B85BD +01D17DDCE329F8C570E35484B545B62DD347563942518452FAD1B0DAF30E1DD3 +C4C64C0429D90AF26A0F4CA809B81C29FC653F945B388CF77B2E066563541278 +A3C1348A5CA23836DEBCA15AB78D195C68BB5F7C178344E21FCB44CD6CE12B87 +5A2AFC88C60389A73AB1D13BD86B1A0DE96CD36F7857A871E8231E338AD91A05 +B905E43123473B39307A9492787ED0C693FCB8376AB19F27A9AA74AFD21DE5C4 +76B1119FC152A3197B6D075F8C4A82846898E25B5C5FB90D72CD1B4AD63F012E +209F805111D3F79DC308C8D678312B3451A69E759DF4F8E8395ED7E7788EF079 +980B286549198BB0753F7172F4A091FE3DDB5C4CBBB6E2517D00B8999087A308 +16C42CC741FEB231C5CB6B7E8F3FE2E2DBE9455BEB14D354113696A54D615208 +E1A95CCF0E0E70314DAE4349DC26212B4147A53FC8A16970B6E37E48E0F9CA32 +2AB6E4598E4FDA267B6A9CB8266071BE3BA042C7D780FE61EF22116CF9642B36 +B4FDEE33D6E3CD64DA5DA1DCE187AABD948373D37B1985D0BB3FEB8CEB2F3A86 +AEA9E8CE67A15672414D3FD1B8B28ADCBBA5121DA3F1B5B7CDDE8E67E6E67866 +B1F02F644B9C88BFCE4624A9A424500BDA925BD7583B1367E2367E1BF8523A42 +EAD38C08A7CBA5760FBF83ABE1DEA9FC1E41F14D16ED4339CD4D17169313F879 +15DD4504FC1BA5BFE21CC6C26E206C4E1B7AC0E84A058B8B5BBE525A7A29A202 +4E0411D0C9185BBC834E8F483509495C203539F7D425F4102EF53248CA943CD4 +5F01026F1B1129149505AAEF7DCD2F3A6D6C494E29771590F658A8049DC981A1 +D9337FB49C4BC6418F271F4E14BA6B223B3CC521FD0879C2C08DAC47BA713FB1 +BF8D9A48E2C1E73F2F56721E8B77ED65E8115EC0DFAC0D61B54D1BA3EAA1744A +3A0287BE529B7C6749C768F07A07B9C227BA2AD6F88D6AB447614937DC12670E +7716BD4EB41E3F77A77209CCC6744581DE4B50531BE874AF185DBE34FFA966BC +02FB132BA1F5AF7E0BB25DEA00E412DAEB9F3D7664B788F7EB1DEED46FFDF9B8 +ED936923D31F6A673E3F5F60395B36672392488191F86263CF52B9C8DD7C3504 +B3186C0388A019F080D80234B68B8F3421190142ABDA05FD325150C6F900E01A +BF15BAF597B9701A8E3159408067C13108B38741EDD643C62905A25A8913D562 +270E42C47FA20C2A1B814A21E9D477E9E65EC931B6472929C85E8D363EEBE6AE +750E164D80015EA834FDC8FFF18C79ABD036FD1AE42715BFC3F3967604A5B5F6 +962D95E2F24ECBB719D3608BCBCC89233D2763A6120D2EC68A47F9449171DA73 +5FCC16DDAE60F4F95094F4BB468893C765CB5A2DC840B0CBE7141DCC254E06B7 +22A5A8BB94684E2EFDA11351B6C79481B157D2CBB5265B679CC8604F8C15FC25 +97E77A0DD279EE83F1C0A2788662B7336B3BDBAF8080CA3E905B27838122E762 +E6C52E39AF141B20F3AB7EBAFAC9A933A43CCDB08BFC3372510F3EAC553DBB98 +C65149F88E02066CE6C17F72C90F39DC2CB8D791551DB3374FA50650A8FC0B06 +E42E5C5522CBD3A1C90811519A04474FD7BFAAA92513E536F153B580750A9ADC +F1B1A5913D14F1AE8028A5E6E3D16A0EA4AB1ED2CFC5DD24A707FA635A210CC5 +9083732A216C8598B40C6E759658B41761C132F2FF2FECDFB377767B2D50FEB8 +06893FC6CDF6B0E83BF7BC5FD2F5551FCA8A79F8BBB89354B086CFBA51AC97CD +91B96733AE448992BBC1132A4CCC83DD4B3E7D83DAB519FF984E48583CC71F07 +06FF3ED9EA50E310AD68D829491AB9EB87E15EA196EFFAE80953904DA525395B +CDB33DD73A3E4A9B63BA0BC4CDC8B43836C0ADBAB4238D515EDBEB1B4838E00B +27F86A3AC3DD1A292BC2CF9C8AE7783426D681B841E4470A1A8D818CF292A97E +41BD70EDB22843B9B3587482FB8DB0FF148020E516C62ED13C02B0FE7958D13D +B6104A28975DB0EA79BE8F418807CF2863B5C9D77AEE3D6DFB97348AA05CC879 +B650E0D51B5A51DE309CFCE47CF977C78C01B9564E375C7DE789F5D5CA4E48C6 +39F016B6793FF1981377D3B4661F7688991F9A6A57B2DD8B5D8D794CEE4B7D2D +783DFEFB64B2B90AE6E6DA6230A21BB6DD0D1D9623B9A4A0FD7E999CDBAD77A5 +AB03742C5F36228B01524708D7A25B87186E72DB530B6D67699D39CA92997FDC +0CFCE7EBFB9FB28EAAAA23748771A992795D98BAF8E1219CE195B9847170DB0E +A369A4716D41E25763288F980FC9B4AC4242676E875A2261F1A343ED99BE69C9 +B0118170B3B8756B71AED4EC23829E614C12E7729F3FA9F19CDC03C9198E8A46 +F04033FA8C85B020666D12E8BE7539AE685222914CB6AEFA4C18C9C212C98104 +7333F98F02174EF7B29ED5C2F01E444AD54A4CAFB023FE38878F0158A24051DB +6639DE54FF45E3526BDE6FB4745D80BD39834B24B4CC66036D21236B9561F59B +84ADE006D1B8D9E235DC597C43F4C234C686E50ED87A29F1ED362BE315FA3B0E +C9B842FA46B52058491AAACEE7983A690F4711FEF5CED256D09D4AE7D71C0061 +6227DAF22FA7D30876856A1CE965199A15C65CC8A446FE470D233F53C245FA18 +5ECFE2F4FAC1561DBA2CD5FF2DA8C1AA2D825847230EFFAC6E59C840FF79D368 +CDD0412B4E83411144EAA53325A79F4A22FBECF3F625F047E8B1D025878ABDEE +2C3B5C6DC7D8EB4F098446CD3EAD3DA0A6A54195A7B399E7CA0780588FC84CEE +69164DE320825F8A24618D0810B71CED409CC6BFEE816E8C829AD81A8A16F6F6 +AD55D1903E647D935F3BFF542E9947256D1B5035F0E5BBDBB73AF80AE251B8FE +48A82A02090374E3A166D9C6A038D5C4BFD9D1DB522F18571B4129B47297A975 +65AC9B38E7C841146A5E2EB30821A31A88CE41F59CAF3DC4E48D06DB4EA7BC74 +A1DB26AEE13DE4E1ADB2F15ED40541745CC6626C6339E375BE124FD92E77FC0D +541104B12F5BBA219184D99B8D450CE7F0098854E4F6156C230BBF9BE2142ED6 +2BAF817836ED5922368FA3BA65F17ED3451EA218641820C3FFF1A362577CC25F +3C377C431D22B290A66F6D94554676B895CF0C718A16D790C81EC5E925D4D6B5 +623A82C38DE6D5A9F419742C1425A395E9F1DFFAD1E6E52AC4AA018F8D0F5066 +F26B7047E9798D169B39487B285743B67646D4640E9778248D40A84391E26CE2 +C4AAE1B1E0C454C8A985471D22B6B9ED993E215C4024242925C3F2953C207D43 +B928BBF8A4AB803FE2CA94247B4C117C828C5DB6C194E9EE41F3498B0BF81F3D +8396C84908D01713AEB02AAB05760A2E56A03A389AFB19DBDCCAE4B190DD8815 +92D56C81570B3DA87FD61E42BACB706195D3263D28E567BA9BB10FD3A42DEC18 +E12662BEC6417E3B9B5546856E320C7F7E7CC466F11E2EF3D69EF72A9165A233 +B7642ABBED62B4F20A9D5C0F857329544FBEAB9191CD59F1C44B9AEEB92F45AC +812154397FA039B7E00BF221EE3ACBD288924D697A0C23601668ECE88EF8EEBE +D279E953509E0DDD386CC30373E6702DE21CD47982E887521A99AD11532BE389 +9EAAD86F347E52DBAB8DB37BEAE59EC3246328DF0E495DC03D7DAA553EF8A6A3 +C2862E1EE2A8BBB8F1521984DD8FC30C798FD2D79D259904D13D9A3EBDEB1374 +81FB6A5507F2A032F12384818ACE9CD39C6786E8F0546354FAB6E14C920A53AA +241AB7B99073F12BF51485B7537F58ACEF8AB772E5507763F5DBE520C6FF61B6 +FECEAC6BDCB75A0D7329023913D86ED418AAD111497EEB97EB22B0EF771700DB +BA8A7AAA5A134C26A630D6D8366CEB5184AB0D1DA6BE411667F9FC170B12A10C +5167F90F850A18510094F72AB13208EDC1B9BB957417EEA33361CD0F48A2BDF6 +C4413A148B37E61D0111652DBCA3438792CA7E67E710C1402DF0CB975A45DB20 +E112A29C258F825A5E336B49A54228EE9397208572AED7F441EA1AD34B5C334F +910342EFC0771E267C15DB0B5C0AFBDB1D7C2160ADE2E7A2AC73210FC1D68DC6 +4B332262ED89477BB546F73CB9398FD0E96FB78FF4F8730E357CA67328F7CF92 +2687BB3E9916042A985691E3EA2BD13DA48BEC195727A1AD42A0A6DA32BF33FF +2EE8CC601800CF6B96EBBAE80E7D5A620491D0F998285D8E85E0E667FF89133A +0AE50AB2DA68BAFA49EF8C7AF907B7BE11345C105931412DA23870C7A8F8D4FE +D5715F6B01F18B38FBDFD65E66B616AF01886AA873CB90D9EBD72F29EF4051CA +60084E4DDBCE0E475BB98AFD60C4A64D720F6FD36DCACCB69A2BF746E3AC4DCD +96FA2DF360C17F68B58D76629FFFD08FF769379730B41E55F848360A6A25523A +9BF3ED4EAEAC7743C6F92AE6C2ED3F2F36707A629253067363BC4724719D93A8 +CE1C46E1E16293FF7E24C6CF39F971F53AA09B15244DE276F159690A6F369A9E +6DE8E69F73D9C794A1C32B0B4B3EE7C58E2C72778AE32122560F9214D7F94942 +8C21D46E3ECB044BEE35934096FBBF009EF3030034AD7D84890A45F2B2970F5A +9BA55007859A9FB0F6DCFA3E6564B9555E7F3063D46EEFFDD8854A94DE6950FA +A3852226E010E7C0379C21B09868B6A7300D2772068A449712DD2EAB299108C3 +B4CCBA45E08C3695293739E89D8C3B5D1621F0816F0259C3B1DB4E74BB2D489E +200BD7B7D5BF1C9A132B9BF451DF28CDAA438803E8656746A3D1C0654AFAB909 +177C1F016517C0B7065E98EE1B21B4D08B5FAA68D469C25EADAE718200A3A4D3 +385501BC72F5999C98F13889263BD5AFAAAF7402864E91363FC0F5C34082CD3D +2CFC70FB2431CC4C259B9597C7D70FBD0D1FE2C9B6CC3D88073C7627B464BFB2 +9F7F42CE057622037E610FA518F506F9A81FCB940B91B873D0C834512CBF8E9D +F02F9670E9B523DBDEE9B319995F9B1D612C7CFE4609A668225A975F550572AE +B25499FFB57FBA86C6799B67B05FD3C9ACAA386CC947F07DD71317B94691AD93 +44530890931AB8249EFCE7659E2D69DBFCF047BA992FC5325B5703951587EC8E +148DDFD28459AFEA56B72C7905E7415B02E5643C2550FA9D49EEF64D7630F05C +185421C580BE9780B643330F5B0B0FB4C3712668E851BCDDF8662C5D6E35825C +F643AE5455597B570D8B43466A748519E1A38C9A1225A92B2490D6993786B476 +E3498C00A1B29FAB050801813006E692EE98A9E1254BDA63D3E391AF186EB44A +E50C37165E2A314912B9D630035A8FD0961AF29E694636AF4E8912AA9B107AD0 +7E0990A428D7CEB660040F74A48EECD7724F32EE33B5649B79B63D1AEA095CFC +DFEAAFC8DB328130C261ECF940AAC676D2778FBC6ABB2365662AB1E8707FF091 +BD337B103CE2879D1FE0CDED25A3722D442C28F66BF52C9DE534863EA4BE362E +8625B859735AF68193302D20887748A625C9B1E5456BEA215F216E5E0A86EE40 +DE4413B724FD9AA1FFE418EA2FC6B2368EFB217E93120F3008BE9029AE81C1AA +ECE18F0C84758ADEEAF29D5CCF5BF879CAC196750FA5C559179F8A20FACE2C1A +AB37A3BD510B2505F32CAED1CE7C0C6F095F56B9593D3493E860A4F0CD6BBE9B +2D13ACE1EA583053B72A0D2245BC677898DE4C57BBAEDD2F2BC42D494B5B9E1C +CF3C182450250CEF19774E0723A3CA9320FAB92560B8394A14E1FDE84F350470 +523DAD433BA8C476EB389786C089C85E261780CCC544067A82DE3E835EA6A13A +3597DF92E35A80659FB03F193499D98C5E05D4C365922C20213EA0E713330E73 +F30E866B13FDC36B98557D17D670D016DCD4752F780DACE9CFF8C03FCC05770D +604D19A74969F03C81E9FC0B04BB36215718C319E4C38D2109D28447A43586B8 +1D6966E885C0E844389595C0507FE8502DA8EF459817B1937114C50A0320EC0B +653EC5693A2CD74A0BC34E8E8B576BFF7F0F191256A374E48B8B75048E9ED20F +F5D9329E5706559E1100676A8150FAE9FDB210330605B0694EB2D5A04EAD712D +7BAFDEADD782FDB478CBEE8A0175680DA713F8F3CD27E025E28D3E57F1EE98EE +E5400A38A059B70E8F051B56E5B463028A25BE6D0C18ADD9B865F63011843572 +4AF0404EE430A98267B00EABA58D9D815657871D3505B506A64ED1A5EEFA47BB +EBD1513B5400A69FA522C3E12272BB8215E235A397EDE80A59BD7D0C6CE5B369 +0430BAC269497F415A3613048C90423EB2D0CA0F128924D9546BB21BAC9A7263 +B0496520AC7264BB57570BD87EE56554078ADB66E9A61F2BF6FB52992694F753 +DEB205D221A9AD1E5FFE3B1E9AA3F3169313D71061E2464531A9BE1603C586DF +FEDA27EF90425725CBF4D04B01D6BFC5CB04BBCB9F2FC458BC84242ACE858EEC +FEA3E84675377F5E65D184B4B0D29983B9576C77518A858BD5C03EEAFCB70283 +764E379497F6D1D69AA0AA51BABEBF1C70D0E921E28ED71B2781C293A27F76DA +E29775D9AE33DBDE9DE3E9E5E43344D472BBB568CDDE0F46F8BE2A2534033633 +0A47E91EDBDDA8714B7B6F258ED7E348ADA6C4FF9A7B5288A825A9C5BE1F7387 +F69CAA5DFFDA4BBD1DFE0911BD7F9FB09FD8E718D36B4A6DE8C41E538A79AFDA +72E78F0B9301CD81EB671D7AD29C8B4511BC43D9A60E4F555AD27D65DFD23CC7 +C38A799ECB6A0290B39B4CC2EAEB3A0BE8AEF9E484071CD400A3D99BF2545558 +0B3580CE12AB5A32C37A9DB4394D6DA8A5F6607D0A9C3652F2CF59D06A6DD5BA +4F96BFAA2CE3E8720712175978263BFD8B8E849D532DEBEC7D1C0252D428572C +42B339DA0B93062B80AB251FB9E0FB7F759DFF33D0CD5AD743F01DDAC8C18EF2 +0B2CF667A27E3C56809374C598E8387DC401713C6547BF7BFE3B9B7BD9A33D4D +DAF7F15CFEB827E03AF5C150C703723ADB29F75C64A7E15135F8094557BF2C29 +E4477CD3AB780729C2F43836EB677ECAC650997CD5C8CDD466D7E8D8DE20989D +596BC11396831E0A4BECC03B9422952076F58401C8E176C2EA4996FD53DD7DD0 +2552D2B01D187C247D1320D65A18521DCD169684248C3ED5C8E3C076F40ED5A2 +A89C186EBCDEB9CDEA9395149D4770F54FDD5EA8FD0D5E210A3707E66395CE90 +48D92C1392141B28AB22C5ADDF1C65EC7D624299B5871E1291906496F69402AD +2EBDF50ED9D8265A2278DE9137C897A9D833D997FE0812D2AB1413EF98973258 +041DAB207602E9A80CD8966F979603B9DABF0328705B82A3A655E287411E0747 +15DD264C707279A61AD80D26E79A1363C809888D6572B5AF2289898BF53A3766 +A677F2B52A88EC4C85CA29C4C5108B474F6197AAF7768A693E94EE8E7C20224F +10973F20A6AE0A9B95ACA0F8DF17C67AD3EE91F6D5FA4320108B518FF7788CE6 +E55B0F40711B5B22440D38BC30C7A2E1FCF1C64A49DC41B9B91000145A9D6539 +E2049C050346151C73BA088284D412063A2B17E580BB210DCBFDF2648189C79C +E36ACDA3F3A12467CF7BB342C58B66F1AD2AA969BD8778581D6358166ADD0FE0 +1315BBB40DC2761793E991527A8EAE6DAA487F8032A40820D6DE6A625DB18FBC +8DBDFB020BC66094CD4EB6B6A649EFAD2AFB27E36330D8188281719EDAA4793E +A15670CAD04900C16902498533D00AE717B55430112BC66062F587F1FE719BEF +00F152A9D0B066E216FE610B04C0FDB04958C477C140ECA4F37C920F91AC9E29 +A58A13E1BC4F101DB4F776E8B4F54D21A82FAE329406F44A3725ABCA421A7986 +C49115F0C30F96C85F2BB60CF1A363411DB9A83CB266357E87D17267F211049D +C1AFD3AED644AAA15AD3C123E9C04FB6F8D7877217C98B3CC2CDBFF5927E9408 +F24C8C1C3B5FBADD709AD5378F3E6D37B1C0E5D6C9FE40EAE648A77956DA6834 +FFAA626CA253BD0B9622EF7C65340577DEA4F17554B5BC386183A9DFA9B263C2 +9D896CC0F2EF0C875DD3DE74F5AC50A46F232E4CFDB918354A4AE0E06C1751F5 +0C0B2622CB9904CBB6612BE56B8AE2B2E2A98A5D048175585E7A3065DA672C8E +3919DCAD8E892A1CE242853A138F1AEB814FBF075FBD3E5AC6334B88C801085E +7BD1F7C1E42F2BDA4BC8D9E8D2A7C86E40A27E0EB178B4B290C8BAAE509E75D7 +02E12E798529D89F9F271F44A4D9D92FE0C18548D20FCA6486CAB8F262CF65D3 +D80596FDE8039CE6072B87C3D5E626F201FD89E09A9954C7DA544EFE474C2500 +033D61146A284C63EB1A865FE13BE932438EA2949292886176771083BAB18628 +B4804B4465FFD9A34531DC7E65E1D1F78ACAE918FBADB9B48C23A684DF747A65 +28CB9E3B57B509CC567A21FE00D1547CC918318A26825052175877EFB3EA7B34 +708F4AA76254ED84C3F8C1DBBB6C7799F87FBCE1F8F0CB42535F486901290C8A +D345D08964FF40AE0AB35A4FFB32773BE84D4D1B9577A3C7D70717EE80B024F2 +9393E5CC42BFDD383B2EDC10F726AAB4F5281E23CCC40BB4CB7CEAEFE5B1F349 +3D46D86DF6611ED1FA3D47E2931974F145F9A67CB855EEC904386490A8C93A5B +AF09BB88A01AA220988796FD9B974E89A5B59FAD2B3936F2A75F0E8DA5C03DD3 +88DCF0BFCA43901D4347DF18975703643F893E314796B25E5D1D41FFF2CA8108 +0B1181DB70155D6CC505C63A6D7DF7D533720BAFFA1E6E41F04CA7CF4EE530F8 +F46832C8A4B753533B5C9BB5C97BD82F799AE52B0272A33C4003934C899D96C7 +84A5471ADEB37FDEED8F00CA7BAA8AA063D37D48FDBB0067D260D20F7E842A73 +C32DBE9823F83A56D253AC120EEDB0F9B4DB879A8D620704DB2C99163FF100F1 +7FD8538F7A20506F4BD54CCD24D4E662089A1D3A0D5FF151C6192CDA664172D3 +9C1F20CFECBC0E4348BB5D88D0BF4BE72F07B9C0737641CEFB7DB6F285A1353D +E6891A569402C12757284E9A93E1B77C1E58E7EF2837238EC0BCFFB06623FDD8 +9401CA0770F158702CEDA77E7D557019B03A5125372FFD5141582FED1023385B +FD27A8B645DE6B779B92E9FEB6C3A02AB4DF19F3DC484D92E63CCE22FB733AD6 +3D55811FA3BDB8E2BCA5AAF2417E70FCB74ED6FB6C5B43F5F96A3019C48F9D3C +CF5BEE959D5DD08C8694E3E8591434DC2F13992177B6F99FFF799A09623AA54D +14CDB2BCE9FE62DF68DD01B9C2D91FD568A408613E013667BD5EE2B47383F85B +DD54D1C8CF25652A5FC7B3803A5C6EAA15506746A44693CCDC4DC6A3E869E020 +D2FA893A63A719F0AFB8F9F8FD3C3FAA25CEFFD2E6F344F0D21FAA310161E928 +57C15E2C8118F4F8647B1872FBAFEB9741A58E8F45A4ADC38BAECBF8DDEB9F32 +E864D417366A6EFC734DD617CB13E191DE7FC92D554C0FEE8399FB580F3E9473 +E5DBCD1300EBA2DD843C95F0F62377BC064BE1046FC8E5B4F0466A7223242066 +83671470644C2F035B3FFE37CB6F58A61E527D63E043D60B8C515FA7E98AFEDC +DD1866776CA51EFC576A53FCB0FD8448461576D55445122B9D0440FD285F8B94 +726A796E8B6ED4ABF5252C8E0D33497BB5FA6E9A07F81DA77586F094EED9FA9A +24902FED4BB1CF856AC0C0CF9B930FA6164D569F2B4802EFF5B6527F8D7FFE93 +A907F9F7DF56AA4CC23125F165EEDB46AA8BD2ED6A8CF84745F9793A2293143C +1A8C4F0998A7CD4433230F1271987D8CCC2F6640368240D7E6BFE8F8A9DAF521 +58C8D9E8914B4C7B9F2B2A72A885EDE3A71CC550053F5BF3457FD93534F88F9F +239690925CA1785BE43B624A00FCFF123E43047951C51A000BB401C5E2FBBF77 +4F725632E6FC67C64E5ED6FA95DAF0687424F94EFCF97B72CFD6316F7A19CD58 +275E600EA4F13191DBE69745885C8EDFD206C5BB8769C8CF547F9549A22F0409 +3C638977CD2D9768F77D363F2D2112B1D0BC918CF84745F952D271B1CB156A83 +82AFA9670E4B3E66A9A45DBE756BEF66C7A29C8C89ADF7E3B766F16CEC8E1B99 +626BE9AE136A78E9A89A7D2D077C01E3DA1D316800F859028CF2A4689ADDF0C1 +009073513EB0306F6914A9178762E0E9E825211351C67E9B91A081771047639E +516F6B12D01EDA4F967A91BCDBC67B55AA74C6FF54A2FBEB2F2C19CE76E3F173 +ED70166A1D912CBAB7882517ADB1B6216B8290D54D993C0B70E8AE167209A11E +BBE4775288D61946C94882500832569AE45CBC885B8D6C537F4A6FA75DD447CB +5AA2831D6EBB29F8F7CC7A29D8586AAB176E63142DE4A37720FD9E37F09E9741 +730A042FC35B5334D9C490C78C66BA3B91554A0706770595B05BBF4C86AA1BBA +CD7A3D0AF0237F4268909EA00B16AD0FA8802ED22AEA1F697BFAB2708EE8EA22 +38501503DDE776A9C7273B8A0E3D7E7DD15C3D6267FB4F4799AFC48BC7024789 +B386CA202DE413F2E01ED03BD5D0D1D5B3FF99076B6CDAA89C7A0CCE0D09EC77 +06496B9A9C88C1EF3F824497A140962DE88FC229B82FBE3D07ABDA9E7E66547E +DCD987D91056B64792C7DDA0BFAD81E91C36ADAE4F21D793087DF44D7F5DADCC +34BBD2409E165C8FFA668956157C13FD6981AC63D88A49931A673E2C72CA9341 +5B3A0C51F4D612ACAFF37A71E728DFA18BC484EF8CC0F1494B19FE2677F6C8F7 +D5F7A91658577C9B816E76AFFD1F9E86E5891407B3FA4ED9FDD88E84ACFDD764 +42200A2FEF9831D9D3776B2573047B24CA4108E0A71F83110154ED1CFCB44DC3 +6D1ACC7FB2F695DD499FAE008A8CA7BFC5D599712B0010B739C5907AC069F871 +D278A21E252DE2E2CDB736729043213EF18F3A4148FB8FF037126E1FEBE67E84 +61CCAAA685669EB9E0CEA01FFD3BFF6D1716A45C6D45884D787D15B8D0C7F929 +C85FC6610BFD4B0C1A4A726755D485BC5A5A307E04C45635F05F6D74337A375F +2B330E4675D3AA147431B66C116C996A27E5FEA04F14A62222EAEABB13FF733E +878993645475F2F9BDE6B1E5AA2FD4E13EC030B98100C8908655D5053794C021 +A3DC2E11B77210BEA7D506940A2FDFD2F7D1CCFC294F6BA95D4BF986465C8B80 +78FBC93F860FEF5422B68E6A000D213F8A854B3036D5D60EFD339A0D501CA2B6 +6FB5D3F37A4F23F64F16DF01B3F31C1973E60ADAC1DA4963F6B3B58B0489E4B4 +1E6BAC48B17383C35082FF43720BA20CDFA532FFFB076F150B17EE8C58E27A9F +2868143CCD8B2E0D8EAC1ED6F2EE3AC85C3A293F9548F69808B11D80EFE0AB09 +A13B1AE202B8F0E643802C2E2600464B4BEADA5A2F5575A128584AB509AE171B +70E1F14482FD77BB899AC1AAF11140AFDC85CA54EFE21EC3DF261D166EC904CF +1CF201EA05053A214F14A0AAAEBEE0B8D9B2E815458586B8DE99FB07FE1A4B73 +47C316490F891A7F76361447E54F909BB41A0E0B91E435B5F5E92E127AA84194 +B47B7F6425509DA2F2F11C3849545C1856F5F959B32E7C187B1C480F65FCC153 +65C65DF9EAD804820E3EA361753C0D48F7216A36DA1752EACF3FE5AAC9BC5B12 +8926175550DE59E0B4A3DC1B3A6B3DFA8EB9920C9AA36D3D53BC57D60EA2DB5D +0081DF3BA8A699550EB2BBA928D6EA9ACB2AAE7033EB441C7ADD877FF4C4056F +9FEAB3B7FAEFFAC4B10BB121F0AA248AA6D6F83CE3CC265E195DDD6151192697 +B98DAF4BF0ABC22E81C86AD2B6ECCDD888313570F3BC9FE76D45D1D536FDC2F2 +4F6F341B03AEA842255AFA6D1B2F643B01CCC1B368F0EF82A2D5D4A09384016B +8E0C1C52B4F32DD75C0FC8E18E32C20F3C29331CFA8685FD411A22E076DC560F +1F37DA4C6803B0048662E11FE614B41D3E7F9AACB14D2E8F145328E9D7A4D999 +81F9B8FE82B59F1D2EDA95461B5F6BADDA8500CDEB07B2F4EAF64018D8B4D853 +C7D1286E50183C5B6CEEC9ACFF02BEE65EE2C3AA6BBF38FA62941FEF3620648B +678C8B29356256B7635C1437F04EFA6268A4678CCBBF9FF1787623730D2AD27D +A5E76ACD0FF2ACB9A57361FCD7FE655B97D5C388BDD849952C9450ABA55A855A +465FC9CAA2B9FF2AFC55478DDF9355299B0496E1F895701389CB90D27A193F81 +A0BCBE31662B78EB420BCD0FBA72D383885DF44B87D85B63F4D17FA5705537B4 +4351772E4C846FC0928672749A1A5D27D0514E3D197EBD10BD29874FF079B7E9 +D5DD1B5C9B785C0CB1C585A355503AF31274DD1B97A12D3520511595CC76E28A +ADA3D43AEDE2C97F90B0D3B1883D4ADFAE6E70012AD1FF8BEA791841A2B85410 +F426114F35CB920437931E3CE0CF0EDBC80E18E5B0BE1E16E6DA2D5DB3870263 +A3AED0B0296E94BF491E435822092E0FF556B462F57466551E07308B7C2CC85B +DBD324ACA2612B8C8D02952BEE23206D5D73F5F6E0104078E0B427A6731BB465 +BB277C0371FF4016B79729F4593CD57AD36182FE51DCBA880D48449E70221D45 +D7F515D8B8E6CFF2F40BBE8BB807644E4BFA8437A0C1E2A2594D2E81882A3746 +F4E9F3C905DCD2EDA8157E8C956A484BAB6C7EF3EFB95AA9F86711BDC576EA2D +002BD2DD3DB45FA1C80914B94EA012C2CB326C77DE471FD8B5ED1536ED84E4FB +DEBABDF2D3F4B18B891AF0E0A57F13CAF26EE0BBB8D21BA80FBEB00289B67319 +55A5945C06D71213B7124A9E7186E54480A1C8694AEBBF9D0059E49726D67806 +A8FF9002C645E86261AD11D3F46B6EEFDA628DDDF0BEC6DF72EF9B22437A13DA +F95AF287799D7294BFE70C75C5136E1C70C7A1CA16E5F9855C9C0DBB15CD65CC +4A74AE8942F3F5C1D5F41F8DCB963E0E814F3A97CF00E05D5ADF12145AA3E7BE +794BA735866995F227544E229DD4C900222E9D9F76FDDC7FC8DB78AA79D1378F +EB4593630F615DF51A859B888FDFF02BBFD06E59DD8B7F7AF0FBA98A022DB451 +158AC56D26F54ACE8943F7A49B33E848AAC6E330EA816459157EA1474477AFBF +EB0F3EBFD6B9B1C79D4EB28E9C64CC0F14C004D504FAE72AB3AC97DBC574DAE5 +E511261192E63D5FD3188FC846F0D899DD8EA0D0D1D35943FF562B76BEE74CF0 +A141E1B48FF9F8107647EC1814D76D9826B0554CDD8C99CB4F39BDCACFD715B1 +ECA8991E4232C9B5C4C01B72F39C79B2FB6659C7BB459B3F3935CF0908431000 +15126287A7B0CEBC255125E72F22B3EFBDE6208029DA674CC5B805DFFD61F863 +62AA7FCA523F0713782772B1F4C44C50ABAD90E92325BC01DEF9E147256680FC +0B3463651C415183F0A9D76195F81B73A5E829D58B52C7BBA1BB06CA92943388 +8E18E712115060705EF4B86BEE5898AF1A9927C389F0EB5C9F53E531A1F9302B +2B7AD17FC6D154411DA4E54164A1D4976BB9C452449967E2D0051A642B47B850 +DC7BA8C09C499FF9CAD8420F01AA14162650DC233B6F93C11033CBC329FE027D +9B37E958ABBE20D125147AA619051DCFCEF5DACF1FAB212B4E44D6CCA29127F1 +84FA5AFF25692CF492033F6DBAB9E536D5C18F23A534CF0406CE7AA0A8CE9E23 +9F8489436C42D36DDA54854ECD5FBE5EA7F5AEE98D06929555F96764F8F5D7C9 +EAD05AA2CDE772F2F45674917E8E21503E79A3C5191E68ED2A98554EE01F4BC6 +C5C3B2CE2E6A9F88534DD7DEEED8E2AC345A9C44C40EB676706202C041EA7864 +35C27C4B153FEE4862F1653C77BF7B8FEE2ADA8DCDA824060C8933045D8D9E63 +F0F69CD7A6F954B0A9E85F7C138F8FD486D92584FFBC38E223EF5FD4558D84EC +A8127E7B22FF5E075AD73AAB4000E2E53B54F8D9DDD43C7573F9F42EE6858457 +35149769ED212071BB9202245FB7FF304B60B403EBF1BAA6B6285C0B591D292E +1C4060AE684965F5EEFE270D5B6623FDE667EF39907FCA5DBA2C582847DED443 +3D1DF10CA8EC1B5F70062BEC4A7925056C036E87186EF573113C38E31615BBF5 +4BCE545B61A6A5D8F42F4E0087D881623F128B5FDA6E8EB090A075AA7A8CF33D +280AB71D5C139984ABA00A1E5238628F14DD018464715A98211662E4FC3FC817 +E741D8978F6E1DBDA5ABB133F58254941C5F35EA5266365F0460CB1ADAA61900 +6638FDFFEB15F269F5E6198DE6EB0273C9E67127511337A4CDCA33CF19E12C45 +E19C2957DCAD8BD625D8A2EC7E8062E3971CF64473E5E262F779707FAFF1B434 +38B22B4C2FC302CBA5FB6700745EEB2403C529A05BB341F3AF07C12677955E35 +BE7BC991BEF2B24F3BC4A0AEBAB6F84DB8F9D91327C68041799BE1CE104170BE +7F87650DAC79B191EE15E2A4BD69E67D092A69F6C1899172E3CD6BD8BB751A3E +E9E7340FAF30B562A57521F66BB47ADA29E6D419630F6C725D3594A9B2F91AA3 +9FA79D321AA64EDAC6755E67C0BF440A7F1EB5F19AC5BC90AA89E71776022738 +492FDA1C935EB8004D49F83F792D9B525E8F078D2B2A3CFE1E9641D862620043 +2DEB1D9A94CDD4B6519F0D5C05FC0A0D88CA37D2254CAD25EBD6A6D2EE55F29A +9AA6DC6D4078D2709678F2EE30A1B1856F19B5B174B9E24D58C49B4F97F9DB66 +3FEAF8DC4B6D19B6D80046ECFF48E9169E3EAD0894A8B4BDF9B9AF20DE83F28A +814B160E37C765A8987B8EF501B84F0F05D853A56031A6C258804A4AB72E9BF8 +5C4F3751355F4F3C087FE2D739C9D564C5AF2189609C042F745E807533C4CCED +891ACFA4DA4D65712275BA5024F81265A589BF19F3606873D0A43DAA91152390 +67AB6335E3198AE7759EEC131B284E57F970F6E95321BD0195693927BE46FB7A +F930D37730D31F284FF9223A775B4DCEC39CC2418EAB831727F61956D25C870A +83D3631DEC6DAB6E69BE84A2CA4DA29750E29B37DD1B9C0F4349C2A36578EE47 +8807A83BCF7931787AAAA5159880375FC0734BF290C1F206C90A1BB218121E51 +3ED345B406AB7B3571857135A36DF0C0B344D528CC6BE4A0AF9B6E8B0FBEE5F9 +3E6D1BBA29BDA06F63249087364D81063D085F4576A59955857428B801AAFD35 +85DABF6BD4E7929A26B5500888C9AADB025327DA99948D556DA48E8CE04B5988 +93401AC69CC6B9E1F08762D33249EF3F938E4771772C1D5A6801DB956A12E409 +EC8BAEAEBC8492175CD184AAF63CF1AE1EBD5142FCD911158859B7210D3D8DDA +748AAB8B28DBD425EB4F4C84BF25D767A1A52D19F4940B8E47F6E375A900EF9B +09838CD5763E2625399CD9ECA79BBA35473289091BE60159B19F361E690EEBD9 +01CD36E1A6E6B5267C70E0485437C3CDAD6BD9FC4B8B8D29DA28A730DBBC738B +751611DA36BD7562E2EF5F8239C403EB5DC2817CFD8F84715203327671419E36 +A04F0D543A66BDDC54ACEF5799D316DA2B1285241FA69E34E795151073557908 +FD230207545DE1FB62725C6E900E7D33F0E897AE58DA0CF3127AD87618E5B8AF +F45BA9D7E01711F648C7029AD181008B6CAE78861BF37BEE4B2062672AD87958 +9F0FA57635E376CFC12CCF17C18750339FA058AF585533BDF66752C4EBEBE153 +9F0A815B6D4D30C3C64D4C91FF36FEF4993EFF26CF08D366D8D95E8FE3F15613 +5586338DADA5F9295967E81DE02E184329B8DADCD5D9D472538EE4A43CAFEBF1 +E31165E8915707AB8C002F3D947B794EC3880E6251D9B6898B3B6179117B12BF +F49A615D657E38A25F7E2DE9A88FE8CA9526C35D0C156C30ED9712EE873951B1 +1181F197F9952C64214411F2AD9D96DE3E508108B6BC355B5FF2B65ADA08A3D7 +F27A2EBA663712EB49866414EEB2BC397EB6D65BF5341A77B1FF16261B06C7D0 +1842499BD48B0916CF918D4B3A4E73C20DBCE89B6660FDE6FD044B8D6FD83156 +1425FE1F267C4C623B6254AFBDD2EE08D021A31DC240F17DB6D911909784D042 +0EC0D12D743F356D8C3FF8BCDF9CBD49B512B17C3E9653CCA83DE38AF374FA0F +0827682E347D6A9205BA611B8625EC227568F823C87BEA48AB2727FD690A1503 +C9B4E16AE489008F88670793F6059A72ABF86B79DBE72D34F2B6EE0208FA57EB +922F1A9351B2F02F569E9BFD5261B8CDDDE3E9722FE0741F99DEE0C873259022 +A6C8090822540359E56D3D077E615A7222B7593854BF0414ED729295DA8E61F0 +71F646371F6B7C628F7C12DD12D9825146BB2A8CD8A82987CACE36FAEAFC6861 +A0A6B5045084ACD039FAC09273A3619DC9D3F16EA3AC87BC865A682926B5AEDD +57BD20A479BB6706FDF90823E1536F0BC3EAA621161CDEBAB7FA3562C08BF94C +84A89E4472FFE3DB47D01C301644C345CCB43EBC8C7B9FB4F2723BE4C987C8B9 +10769B0553B96492D2F74A321A4D47D5C733A013F73AD2EBCAAD97EA4EE92848 +84F92E32EB6BF7C59440A380CFFD4E30B660716D804C3FB1E544DA5C9DCBA601 +5F26A44F20E401CFB0746315086883F2325373E33C71D9838A14705FA3C13639 +07651B9888E9E5306ABDE3A5BB17D982C9859635B91EB8A73B5F710C42E47A7C +B677E5A77F9055350E1F54860232129E59C7F4C43A7E654F8001F91D205B88A4 +AD8C52DAEA28839F8B184D16207838FECA138105416CB2EF52E0D9C012110677 +DE8042420F848095C493995E2B60C009451FAB89CE596A87664502C9C370A724 +6C22FCC9208B1C8D974BB2611E3FBCF5049D1B2A807437DD1B1FFC6722380717 +C961981C6D853285C53D952CFBE303883867626435463D68C9A75E270FD9062C +DABBD7C71FCF0CE304816C18FD36D740CE9D33E494A3C5A03E432D41718F81DF +DE593767E3AA960F389106A77B879FF83476801D85BD76B3B92FBB043BA08E44 +ACD961F68BB3B1EFF42733096D7DE08722DC82396B643805AF7B3FAAE39D9BAF +75A78EB9D037B6B59776934A07CF3D4CC1FFAF8A26D8DF3E04A5A8770140DCAD +55957D53DFE2AFCDF6D21770704D62AD6DD87313BDCB753BABDB9B967264AC73 +0373619883ABBDB392C943437E552031441558C80F44F487B3B0496DE7E60B61 +C79C8A80 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.1: CMTT9 1.0 +%%CreationDate: 1991 Aug 20 16:46:24 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 54 /six put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 78 /N put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 89 /Y put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +readonly def +/FontBBox{-6 -233 542 698}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E +2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 +650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 +F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A +D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E +F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 +4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A +438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD +BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B +A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 +AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 +D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB +CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A +082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 +9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 +4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A +9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F +B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D +42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED +F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328 +A2C69F817061D6C60B121EEE844CA5008F23DF08D66E248C339CE7776CCC524C +8CA2BD3DD82DA10C66125257C1EA6A0550766E29C3BDC8B5B878A4D35B5FA0AC +1FEB3A038C1B92A6B625E7B2BBDCBB2A97CD92E29BC5850422A7DF6E7CD72722 +4096071A3AE383E392D6EC8615239B9357427F1CCBC396AC636B1CA66B232EE2 +191F60A878286CD42C95EA5DAC1472E81C3F47B0EEB6BED36ABBE143596BA7BC +7B41F903F7B22F5C6436B07FC8D91DC8B1825CAF3388A7EA9E7110FB8560077B +B2882B7B2D513C6FDF621FD23623EEC2D861F810CBCA5DB8CEE2CFA8A2D5C8AA +DA59EA9C229EB38B025502C5E625DE3816B77107E5967F7596857676B6F4E454 +55654BFA837D8FA0F4FB214ABE61483F34E2DBB95B60BA52E0ED8486199528FC +439D000BD1FE0CA35B39D08090E21352A08F54641764153C8F61CF3A1A4FCB6B +F4046AB159484B2F14A67E06E7ECC9156E8006922FC5C398D6CDB34E895245BE +9527D1AFDC844B35BDD6D2DDC078475C130E24C0F199B0416B7422FA27A0931A +1FA6805D4D60AA052A0101BD911C0DD25E870F0CC4226C4C36D6CCD442251B64 +0145B3EA3C2C799001B7AE02CA3FB0CFA545A4A5147787C471D01CE42B40F73E +4AA293C37F43EDDECDFE3FEAB470385B978E4369AFEEFE6F171AD5A4F6573EAF +F375A89F9F9CA20FA45750AC1F9A067B8D7DF6A044D9B1AC1CC6AE2A1F15250A +7C99A150FC7F511BEDC3BBFD64E5793EB558AEF72D080B23E71E1325F3245674 +AE7AAB0F4DFCA0BF442ACC254F71DE3F7B135EFB1B41308310309015E01AB4A1 +0E491A0D4C1A32ADF4786370E01457FA9DD7E915782D6C7E1E9DA7A67EF43F87 +A4740C18E53BB87D1DDDB2752B538B7454B1DD65669F0B395683FEECBE05103E +347A9FB9C98DFCED99D7A6879DDD1464BBA5095600F7CFF34A18218FB7226742 +8394DD5AC37BB6BDD22E952C535FD3F9547A01BC825A2FA8109068F05946C5F2 +EA9D9D01C879B44F7BAC40C94B0094FE58C1F6F916E48DBBAF6C72C0B11E6242 +C65173EDE7CC47B8AD3DBC74BB64992953AC98ED49B4B46CA94D223E961A962B +8A184D2CF2A7F92862C6E0DF6CB00D30CF7FED17FEA42838A3F81054A472709F +F3F002C5DD8DC2E7C4BD983E18E2676A81F85A65DCA00012CD287D6E90E7EB48 +4DCF789DF363D3BED10FF8B9B31D9BB8CABFDF91C3BC8C5A9071F4AB2D3B1840 +FB9C52292B108326F11693A29973B42779425D084A3FAA4F43DDD9C07DD357A0 +CFD35A7B3B6B14C59A1594B797EAE5A3FA54A7AA95EC9ACC31460AA17F61CBC8 +DFEB44FF91E0E144FE12AD252162519820F56A157C07299AD2D715FB80522A6B +AB8CF919FF97FDCCCA74135BE8E7E5413EA32DE85CE077C09AF90EEE7D78E11C +589C21B9099F7C64999720AEC0A18123FB67747F75129A4D3F1DBADEC948CD18 +7E1E2FFB400CF428A474D305B0B831133FAAA866BE8205B430C3C94AE7EBFA33 +198952E806DF8F7C823BDDB54677BB57DDAA389FAB2FEF8B89366B312AA6DD03 +7E3A851442FDB1BAEE81A154A2463DA78FC47D10BDD6F55A5B74893F188872ED +27F6CFF12AD92DD09970B995C1629BE5BB41CCDE25C2857DF45AA650083D9965 +F65A2AF700B3097C1AAAA1FC29C89DB9186E50BA22F8FA0D23591B50F617AA62 +7CCA4D77864FC4AF401D4B1BE16BFF00385D89656E347C52C12A33EEE9FD0911 +95860B53F18BEFF78CC0E8DF76C654F11EDF2527F577CBD196EB8804A2DBA13C +840D15845E120D5B8C1A710EF6CD01FAD157B94BC2D876C560227F734EB795AB +CFD47FCBFA12E0C281147A33C80CD1BD8A1C11FD3F235D366D367C9C551CC1A8 +3EA7AF1D7649B7A6FFD1BD8212A00946935D9E877FB24636BF573A5C620B3156 +17C914386B4FCAFC3AE9FDD1E332D3EF2EE5305B3C01E4BDB9E3528B71C40B82 +003B049352A5B969A8060FB9A86D2DDFFCC4BD41A556DF57C23595F9EE6CA267 +649866E117666151FAB8B2DB9AFEFB841A261898DD1D52592CFC0D1180B1DCBE +B7BF3D078CE3F0C78999CEB964C2E6647341CE2244399A304BA1F90BB164F7F5 +81F0A0221B3F71114C7AAB265DBB3F6F79BC6CF1A7D7CB11BC9AD969416FDE71 +34EEEECB1F7AA5744D6728EFE7FDA19EF74E5238AAC1FAE762797F4ED26C3F05 +2D2316A5F815F8BB2523067D3AF16652A75A12C409B9BE9416AF3BCF4458003E +F1922C60F94DAD2C549ACF20C14221274FFAD230B1B981248C42876074DD8B8C +9D81A7FDDA6BE40BE0787E3120C4FBC93A9A39BE4C17164EBA33F15BCF042D0C +37BC7E678A4D9DDC9519A9C37384383A20AABF131E44789BD4CA9D56800DA323 +8DEFADBD2D6899603F9462782F37930DB52F28479FD84EC7EE877E879987CB39 +E7133F429806EEFA5974E2D16C934353FE02127954BF71B1D1A09C513AB4DE0C +A0D9DACE1E8D361D4747ADAEAAE6190228E9EF1DB43A99F52DF26E11419EB14E +650BCE54E9EF0DA7BB70567B1F7F441D07793028FB52A3E3C561B8B3B34B3D62 +3595B9F44F4D74F756FB6B50E0BFD47585BFD99F76634890EF314713383776A0 +C6F34BE7E339B949F523562F81498175C93F635B1747440999E60041A2B4744E +B8AD0C1BAB9EA47F9AEBC4A5349C59EE5DAE4E6146C184DDB0BD1EC9B859398A +59CAAED3A72B8AC998BB5F51CDFF5A520AE2C36C4CDB2BC118663DC19E6E103D +ED641319D3BA89D4702C56D9FF61F3A93E4DCEC715001E46690D4F184B83BBF0 +60B969BBFDBB3F83716EC1480F99ACE4F02209F50AA768209911501F0F2F0E87 +48D8F3C7340963A0C8348FE3955B7C6C8614ADE31305C388E533D26690004ABE +71AC6D1213CC084F5AA4B66E261D7AC2F16DBDB5AA2F985BF822B23AC30AF0D3 +CBF4D94DEE34515596E3E605CCD98A26FF07603B4A52B6A808F77393BC5B9DED +620F4824C031942EEC542BC26EE06BDE40DAA2AFAEB124058FEB5ACE034D681F +51C3735D0BF340444C793BACAFD1E3860017B164697BF118C1FF5C124B88405B +B5AC38BFBB861A2D076B275CD0CC45504A1021411A41B9B1A3AA413BA9D82BBF +3022DFD0A1440F2D58BAF9BA6BAD749766900D83368AE48BC02DCE12F6D7CDE4 +1FBC15A80D9E7B377E874AD17C6364F0621B4AADFDF5D90A374A9404FC57055D +6A138926E75E67B9365DD3D95B6901F50FF465BBD813EB646EAC09BDC2426B35 +EF47D338E3D9EB7340C381FE1DD8E2A5F6E1598618B64DDCA43D33858DAF5095 +8A92152869F57DB7D548CDD16582AD07D5CFBBF4433CC3D487EACCF8784EDD80 +11D3C3054FDB1F78B0FA879FFCC99DA15D4E306AB927BE085AE54A896F6CF3E9 +F6689D4AF2A88C7024D3A89D31D024279612A829443BF35BC4F76DA05900B9B5 +078A7B78C9310279E3A855465731514C9CA8D643E5845873A6D3607F8F0D3625 +C8939779E756B2C6FA565033C8080226DE388DED3C989D5BAE59FEDE462591A6 +ECF9B40DB08A23D764DC5284CD8A04B8749374EC1A6A6732EF0C9852700F9436 +5D9FC748E459D13D13099FC7D74A86D85A18344ED6F7965685B3C54683821EA5 +2EC0C8EBC5188FAEC520B41D4FD68D7B0C9E3A7C3BE7C8229789697D0B265F6B +5A1FE82AB672357087C05B62FC06DEC6C3465B17B74D40A30214FBEEC649BA7E +45D4B8E9F2B7888600A16950B9D5C6B6F5777DCC97D04588FBD845F1C9D81189 +E61BA56AE99DABF99441BF2FC45E243415193898D02C0CBE119FDF863921C2C0 +B760B48C9A1F6DF7176813D9E7BED2F5D27E4BBFE9C27A4062BF99FAE432470E +98A2876BE53794FC7E3D1F2ADE2788E51682C37503A9ECC827867ADEB4C80227 +D9D8E23C8CE5DB56AA2406C117768079FF0DBABB3E5981A48B8A3E3427BD8F6B +D894F93F5F9018C23BDEB5F4711E87FA5EB142340111A9F7CCCC030BFFFCDBE3 +929A6BF3300CC9B1D79A92C157824E4A575793AE56D27135676431FB6596DBF2 +2A13C8F6E6082DF56F72C7B1E7B90ADEAE663A4C464E4C8C2B2F7AB9F154F942 +D573C87460849635FF730A2BBC479DB662099FEC948830E4831D8114B73C4EC6 +65C61679AB531A0E92967C6B79F711D0EFE29387EA15C379D5DF6C199BCAA16E +0EB5EC39EC280B03A6A3DE9CC87FE94C708EAA00CD4A62D9AF26B2CBE892AB28 +7ACFF0B18CB1F0455F8389F73C0B490C8ADCAEF476D9E0EC941AA218B2B9F92A +BBFC310C03DCFD06FD5BEFD566C25928B358238811AA9CFA445FC1B6600AE532 +657A163F95E0BCBCA9EACAC62E401863EFBEA751C9074D5807F8BFC15A304993 +03939165D2F52B3915511FB7E5F231F26D6C7A0D4E769501729EE55C5FA626F9 +313241440D20C0D640B3E7A05DDDE10EE749494840467DC88922253CC4B4B8B5 +11C5B308BC3713A40796E4A8C99EDF166B54E60493DA4A2C360F57E81ABCCAE4 +26B2A2E071B63C45D9A6AF034680D81480D85E10C740CA5747F506DE3CA3F489 +73FCB5CCC94D5BB0876A883D65A47B05C957A68F9598109B1B00EFE6E01678AD +354F37E28932D02D7F2C54D36945718C9124FC1515D2BA0D25A27084A7421762 +4F2B12AF7B9EBBD0A88E6EF38260FF55C14372DB946E551A6D6A967B008E6B01 +5A1DCCD8E7BCC291D8B9C4DB1EF72D50190372EF58764498360FFA1C3FAC6C54 +B95DF69F65A1807B61EE31114D52C637100E1177B0DF94FECD235B615613A63B +CC71FDECA38E42C165664A4F2A58F6D679308401563AE85A4A1449B1F5AFD565 +01E6A6EFD36EAF126BE1CBDDEC2B1826A392BAF6141085FBFD78EB36052849BC +83C05E4E3FBA8E05E7C979EF87A32DD90B8A6004200BBE75FB1AC49106FD1C98 +32E3584DEF229A697E949F1FE8BFDCF59C5ABF9D485442A0BD63967AE08174C2 +82EEE7E97BBBCC83E8FBCE6A8C88A12C181724101C564445F5A9155D8005CF69 +4C06826937C90D0AF736DBBCBDFC70440144D8FD8BA4896910B0DE1365602475 +34763A813F162FDE38214C67F2E87D71C621B26B4FDF379F11F1FDE4668C61F8 +8A65E918BACBEA12F880459CB4D64F3754D703C460C1FEBF0A8FD6F58F5DDEAA +93D761AAA91B7957D2C6B752D6FF38D312857D47B675FF9B39ED7D30662D307C +95181DC677A83B687C8A673EDDC45A38B28617F50DCF0D4E2373BBF98197ECC9 +29E5B8F3587AB4EC00B9EF8F0865154AEE4CE96DA350C00FAB8BD1FC903F1E8B +A4AE1197806FB18DE2A46F66D2F6A746197D7CBC32A8E4C53B249AEB59908F37 +AB12B0ECD227ECD96B19D6553C9F3DA83EA3EF4901AC8374549D23DD91E51D17 +BF101B4D643353D27C69C3C33BD6EBF84308CABAC072F8241A1756109D22E11D +CBB8CDDA99D0A42FF721F3AFFAE03265B08A7E2E41CD4D4B2645A0866D4ED93F +911455D824F88C670BF0EC07AA14A9F056A44F8FA2DBCC09FD3E5DA478784AA2 +1909B0BB1AB6565217E0E3AD4E259E1151E49D95DA3188D2EFDC650E768EE9A1 +33F41022BFE0390245046253346B64A292409EEC3CDDB0021FD4AE37B4051250 +2217392D095818D11F927A115F471017E453D7847346DE3FEC8BCB91AA59A155 +772ACD9026A2A93B91DB3A6C4810DA77A37CAEC8517DE28ECEFD9A876494E8E3 +BDC15E6A5585D949098B1DB2DFDE09CCA8DABEBF092121FB9148BBB04645952D +42079D0DDE13AA59417B484DAF6C30924FC393A8F0815A65AA5989FF738B89F4 +AE62B47D44DB067CBCFB9109E3C24C1DD84C3A581554E2014F3E6A57AC7A26DA +221866593BB54873745980EF42161C4FADDDD71D4547B69F7F9713FF225C9A4D +077A0BA2CEB8E67FA239C764ED4E2CCF8A8414E7AA936A03CA49C8263CB62A41 +3A312CBD817F90C5693B7108E1F3EC3CF0449109936DECCA38E22C15615182EA +5D8E9022AF754BF994D4C9485073392D6F7262C27BB97A0CA68DEA5313CB7B26 +9E999E6AD6A2F30FBD9BC8C61B04391C43EA4A170CF68B4F5AC71D2017109943 +E1568B23EDA8673015E0C5D8A31E933A0F6897C00DCBE5B796DD82B942F51587 +1605982D47DB697EE1951C79C1613B9E9AFB90E2EDF66F9024C1CCA694764333 +ED06424375C7E82B268155C4CA52ADB42263F6648BB5BAA416437427E3C11C21 +D76E1E07630EC193DEF3DD9AE9800F90ABC9B3F79136EB2ED48E145E3FE92B7E +F70973F206BE138A402999E2E29C570DB2113BB507349FE28BFB0DA21E121CBB +14302D2759B3BFF2B44E088EEF6ECA611CFD782E12986863F79308E075F2134F +30F158FEEC371D23E4ADFF110EE78D7A64F21F944F2D8ED8A15BF8A6FE9CE084 +438B244DAE336453662781AE997D62B82EA487F8368F333DF653D6B4627AD987 +30ED43E0402785CEB3255BC003EF67249E22408D312B862762A0E73A982B3976 +1BD5DBA538A3C510F1842A224DFB000698E45ACFE6D701D878CF5EFD80345D32 +3A1C7481FDC1ABAE47B873B196F62D40EF426774FA25F8222051F762FF8A6B67 +1F6E0ED8B78E36EC1F004F24E5698DBEDA70138B12F4E05C6E6738CC84F385B8 +22D1B4900160D9392465937BC948A1645E4D496496051CF45D950A1956F6A00E +520E2099332A0619771E12B2A6D799046E4F4C2D13D4DBBF4126EDA1847FBA1B +7BDB0EED2DF4785B7B3170709847FB045833CD9306F2489B813FA5F8B750CA2A +D7D620A5A425E21806FC0FAFD5E3A2FC4BC7C8B06DF2AA526226BCCAC341A39F +685F1FB0168AD2E8FD34F95925D0F3DAE06CD5B1C460E9F199805EBCE3FBE201 +F456E1B718641ABABCC92120A62FD45BFEA79BC873B37E88B84BBAF02A2639A0 +A7F190B4AE11A3DD8894A726D33E3B7757022B59D5D3B18A49A4C3322009A48E +2D9BA8E9636497C71A8C713DA6EFFBDB98D98B9857B9B19AF3C65BDC33C8DE0F +74B19789E802C9EB7A967ADA9AB8364034651E1CB0AC24DBADD6F5B9D59A0AF4 +E5B6BA95D1E1E0148D5120F3C19A572D7C423EDBE56C6433B486E831A386D132 +3A5C09AD801260C8AE3243B681E12961A0991B876A0FF1687895F0A29C19468E +CBE4BD85E70EDB163ED03660F59135BABC9B1E4107D613931597B3CA726B41BA +19390550FEF7472581F2700C4CFB09FD3A56D1B087210CB9F914C5F9B090337D +F39E009AA7E105964F551DC7DB5126EBED6DEE2CF0F13C27FA695AD4564B837D +B7E1D1D53C1ED8EFFA3CA0E42BB53262113EF8CF1C2DB687DD3C42551BD70961 +481735DA76956069648F7DF7876EB0562DC7A1DB0E5DE973BB06C1CFB5E9FF79 +5E228CECDC3EEB120D6B45077E46608EBB14C7BE2B7FBBB79E82557D6CB8B3BA +E4DB56D90F999929C695B53A9F9F70DA04D0717A0C231952E9B3E276DA4A3138 +BEACF8543564074254AA85089688F29B4A4CA38299EFC6DBE25D17A17FED4A76 +2E827396BAD2E499B0CCB9802133515FA9FF61DFBF4CC6857F058710ED7E2DFE +51F127F90F32050BFC3622027BC0C18E897DA6475B898B9D5AF15B4D03C96227 +AABEE49EFF1803D8B4A3CC0D6C4D36DC5B57EB3B83E28C77DB05DD56E62536FB +D998043AEBB0C17175D023646712FADBC23BDA28FEECF70A9CA6999FBA5E5C8B +70D4C4CB9C1A3E23B23CE5BD6AACE1F5AC0E4E6588B4320CDE9A4B1B8C594736 +2EAC45EE51200D3DE033F5D0BA0AF2EF4423ECFEC1622B91EC584875D8FCCA9E +7D44A26037DA5476A18109D33540C17CD4B45D900BA951AF213CFFD275E60FD2 +D47ECDC7B683EB4C5EAA684BFE45F37D14AF46C381CC8C1103E1924C108F391D +A153E15C48605ED0480780B012725E9B50E1A8FE6B7D2C656E33F48A33442B0B +15A62217E06D831B7237EA49D4C05C7CA6C2F1B3C3A98B6CBAB1FC38ACE8922E +1F1F699F43528EC4E526FA0283895D26390C37C1550C5618826F7BB2B7B45BBC +8E69EC037100878ACD5D0ECD048D23B5FD06CAF1587AD3E60099790C568E2727 +B86BC7E17DDA26EE8720C2AEB3647E3B0B1D986CF8265F06ECC551AE7CAE6F36 +352966E41231ADEE5D68D30C53D41D7D3F50359FB7BC060C69833A45142F1671 +C23AA2F19074171DD410A722F04FE927AE9858AF0052F0C28B4F69C7A7AB491D +D4C9C20169E6054E1F531410593F9BB69EC909F0DD314DEECCDC4F5ADC192A34 +3F7070689FDFB32AEB5B97467197FA73469572BBC3E369084A8025847ECBEFBE +4D475FCE09607CD06CC7F5608F30A164BC5EA08773D3C57695C51E7092AA4781 +F31E528AA8AD26AE6960BA7DD023C702E482715CE85D353DB4C140F6E81E91B5 +94531304C73AA8627B1DFCC0EB47C7A888060888EE98CBF1B8FBD9B4292FE50D +79CD2FCA83D498D7168F63360F3D5D4B7DF0FAAFD9E745EAC81E78FDDAEC32AF +6B45893DE552A4B0EB52CDDDF539595D8E4DF0245C05596390D6E8786AB4C621 +7B82B7983403153FB1AB89333F420A7004C9D0BCFD1E576413E97A40067F72B6 +1A1F84603171F1585D1A70131235030BDB369E028C3BB8B35C23541794C14972 +B06E912A339CB6D6562711F701C8C8F8A97D93EA8ED440293B61012B4BE52172 +756698BD042717A71EF3DCAB935A702C2289A94484C8A9FE08FEF74577949685 +46E5409509717E9647BDB4775DF43F65EB75DAC23B59D70CB39C907FA00A400F +AA9DF6AD2B4DDDCB7EF63C47AD093E14D4C54B0A903A502EE81F87A97D81F0D9 +865595D8008C868A0DF0364810A50276FE89B09F8A64FA698FCE50045FE582E5 +CF8AF80EEB0DD7D5C3E24B30A3961BEE2DF6CBC7F2B957C6C93A8B6611D25BC0 +830A1B9CB6E5E964F39DB02E0082047E6AF57BD46F92436A060B5ED47FFB77B4 +FF4DF28F86CD48E7FFCD2CCACC5360E06193D8FED2C27F58DA205442FC4F4355 +0164656094DACF27508D218DFCE80A644640E72F1FDCD55C22B2ECE55D74C002 +687C0F81904FF711AF7D0A4F70F72CD62F74A6B9EC78DF5F3A07002974701008 +AFF3F5CDC2C89444D13B2DE39CDD9B93C3D4E74DEE89C10496B10499D131EA67 +6BA50FCDC6C7DA2B3E94E26D3A6472376842F107D26DE7D137FDBA19B2DFEFD5 +60898956BE2225E01A0953082E5C15186779CE1C1696B92760C3BFA3B3D3C16A +196CD51882112DC5A89301A09458B50F605B904EFF42527FA57A0DAC771AD5F2 +F1F6900FA167808EC2627E60333EFD2E7E6DCCC020F88EBB43660E6C302B642A +E2AE157BF93272C3769C722809396BFB35E97BFB128FA3C3043FACCBA8EC8AFE +475434EEF95683BB2576399CABF929CC6534CC42A52E52925FE97A2C8CB8DB94 +B83EBFFBFFD36D81A81A7241EE96A298A428671C7D9873EB78CF0D9A6181E78E +7FDA5753236283AFE40D48D474D9C60FC71C065CFF66772DE7861225EBE41F75 +522334B2EC0F865E4157C50E0F0AC7D4F2C33348021C38107D0976ED3C5DBC01 +58576EE86938EAF1791CA39500112A3E89415D25F009710C7585E8870A291988 +353C8834D8EBAE470E2410D2C3CAEA110DD9A7AF0789BCAD8734E0A221006A8B +C1B73851DF9521C0B5DD4BE8C05C68B963824C417FE108A7D5006B5569D7878C +4788FA924073A66E8B4BF65B5A88B02B0FABA93CD8D1C7DA1A4F5976F20AA858 +3CDEB8E5FF91A265CDA61C2F5D0073D2A51E2B6E6BC4183FE1DFD928EEE25E4E +CB9E12975F280E9048964518DED9AD30E75B97DB4AA4BA6F9A6018A491DCFD86 +0918C75C818E9E8C6FC11DC1F73C609C71F68EBD3C142239E2897AA6D3DC5EB9 +081C49AC4A827F273F8F0B82BF19F9DF6BAB40FE15FA0066AD772FC4451F031D +ADD0F171C7E5226BD909E6DE76D5F2662DA01D2CE961A19A3AF976FCD9BD42EF +4DE7160373EADF50596EE389DB3B26BBBF8B255F14E3919B2082AA9F8474A37A +F71F9BC92EE15CBAC7372FC8D0734625E65406A11240594E5F9E6E9BE3D6F276 +D0CC1F4D1B48B0FB0ABCF467E3A8DB69B1994779DF36D03D956FAF806BF4BD21 +74DC674362757D3A0676973FE83D7521B51D24148F8F3143B0438038C6FB4F8B +D6812EB54FDE9F83F10A2AEB5CD0EAF58032AA2AAD7F55333A8728EFB6533075 +22F814E5AB848C4CF073CBABD2BAC21D1525FEE000D7B058658A380043C2C3E0 +4AF8844265F8926AE57C0532D68B86DA3ED7BC445FF523C35049FA273DCFD83E +E7262BFDA7FCD30EA039A49BC490A038C67B0353C91D7B5C904C24EF1DD5087E +BDFE503DD1C518CB774FEA64F9E18DA2BC74869067B3C17F2E34CD3E9F4B57F7 +243DA0925A39234214AFDF542F5A8EBD59C035628715676FD95A62C943B5E8DE +DB8D64063240EAE6E3CE0127C5504AB70006CD347DB61201E2339B7088BF8467 +C3099B70DC22FAD3D88B8E122818309D97CE604AFA456FB51D98F2CEA0BFC4B2 +C6C4AAAE38B99F13E8CA24F96B1A1D847B150911C97DFE19E541177C1A8CE22C +90E680C094ACDC4725621D5CE7A9130B66CC82BF00B16CBCA8E79D71D6D35ABB +2117F4F3C1B3115C49609BC383D1969172209C393E82FDA5AF966280DD3FE27D +F5F98308A8A773A04520BA6A949E109382D4A2B1A037913547CBE3427C222E0A +BFA7551129D42653FBE7E6686DA61B84B5BC37F0F29728D69A8B95A3D149D6D3 +FB7B5BA3C93D81599BBA5832E784ED4D42B9F034AC322B015D3AEDFDC4FDCB85 +3F2C13A0F3A69F7DD95B3B5856E0AB160B0EEF6A9644065D96105682E045F070 +1DFCFFF5E1D9A88767DCF2DA023F287204A97FF6828337B2E1CCBD4AAEA4106B +97F21F22D655A859114D76EF1EF20987B75FDB3E5DB0CC87910A9B4A140A7DB3 +DFE539684772EC2022AF3EA674AD8B3737E907AFF7DF226221CCE351E39EBFF8 +E02685F6061FFC09F74600D9898A4315E57C0212632062A40D42BF22F79CC5DB +18C845A67880765B2C059CED91CE797AB5EE22D43236E2AF9BD11CBC7273D623 +4468E3FC1472A840AF6D5BE68F49B5AA69E2BD4D5AE9F9A4DAF964D08FB73558 +B9C585C7674841B166A7F9D977B52D49F0BF6D55F5375FD1BA7108F19EF4D5D2 +40A4E629FE97331F286868B1AEA168B80AFC20C5375F4E6D93F0FEFB5D871CA1 +A2B2CDDC44E619FAA1E108E5916816A00447FE522C5228581A5F5E9D8E5E973B +B9D5C83BC8B47922063F6B0C300DF074FA4B931D9DCBFF21D244C8F199156A60 +3D4F448F520F2552FCE5EC51BF9BFAE7D0F9AA5E874672BEAC733E96B9C6E7DA +8FB807E1FD383BBD975AC6CC76775FC11921E1CFD000B01FBC88A782C799805E +70774646F44E55151610EB0FD0FB27593E08E756A7606454398B805B1C67D988 +1BBD89CB43BF7E9DA43D7C8F38D84A9AF3C3C91BF0417F99A7DFAE7591A8CB65 +92E453C60BF918767186539FD915B783C4F7C29A013DA911F90722E752D8FADF +DBA87CE1688C862189DCE34CDB060FB7C98E4106230471DB0FC69342C612C13F +25853367F5803845B2072AC9AB9BEA4561A9B83BA893A73B6B38AA358E8E5AE1 +D7C1F434E54C3852D68A3BD08FEA6BC21370C141512F71873D2DE495ACAF31CA +8F94D88B44BE5F5C928D2D89652BAC1153F9813F8DCFCE8A295E325462F54CE6 +EFE6C730C317CCE3EFF2A54FE193195911CE7373EFC8BF3C6E00A000F54FF4DC +94E1EFA27ACE95A6E67A40D63BB97131E21EA6BAA8FF9664B5D717A2746CE267 +3FE9E16E4F99110149B69A90450C308D469DDC2201BBC5EFB184F8CFAD7B5938 +43A825E80A35DBDF11F2160EDF77AE0EAD03E3CCEA232E9DD5696142547A95B8 +0E29BFFF4423E868170FBE9A6A5172F32D01A27F2925CF27864D8B6B0A0B0ACA +396EDD8AEB5DB7783A81C6EE3F666FD8499F4C1B6B00C4E74BDD2D4E1A0E4C63 +70BAFEA2716A06EE030FFE753B5A61DA294EAA26F5A3D3F7928A0D711531D67F +AB02F4CC75E959AC1508DBB369D3389EF94524CF8A28B82585CB31D08DDDD864 +E32EE295ACB868A7E98327EC31BC5AC1968CA83F50181E5839407E71C6709AEE +CF87ABE25904774E406009D99D1D699A5240A7059AFD29E1C65BEC20766CCC35 +461693AED9B8933F7C49B873331B38C2D79E8834D1EB0BC98BE62663203FE556 +F62F2722010E27409CCE434721316C542DA6559D6034934941DCB4863A1608BF +E6A1453A072D63593956C402FB88F6A725DC3DC1BF293DB990690CF10C205EE4 +655237FEF536B7E50B265FA0BAD862CFE169C0FC20617D4E8F2D6AC44FBE0CC4 +91DB7B97D9FA161522D4BCB26E9F5935BD289C1AE6FF0FDBCDCD5BEAC882F599 +0649B0CA544B6A11CD5B4F54A865CA1FC44547538F0F8E8BCCBE967ACA3F9EF4 +BE3F8EE127F91D8A21E77C6EE195F1C1B533E581AFB96BAF7E4F8C1D653692FD +D1CCE4AEA7936ED61832EB3ADD42DC4048540E84A6BEAF3CC60320EB9978EBCD +30D777C6AAA5B2070DA92A3174F8D08357C4272D3E3F2DFD06256C96B93C4159 +D2A85A2AF3AE136D0FF121A0481550EA1D4FA295F3C97BBEFB9AFAF392750483 +C7F6F3BD389EEB987341685C0B5E5B7166D445A39B0E5ACDFC9D439532C4189B +38E60EA5DD78C234DAE0C4A09CE81A4791854B44A0BBDA49A1BC2D8841830569 +845484C8679D18008C7B005C21DC9E1C07E6D0D706F97A377363CAD62F6C7D5B +41FF844474552DA1890427D8212910C168D3E2C3ED207BECC366BFFC70138F10 +5045CC71FB0B4F22FD94222A84B518A1CC27DD9ECF670367942F66F286FF3BEE +7653EE17D950E818B966534A7237856C4D3FA8DAA5F9E4BD49BA505D1B62A123 +8819D938659F6EF9C95B7E8635E88DB4C551AF5C403C90CC1784E704F5A48547 +E788B0480C9AF7538821A643711657F27EE34E27EC499538795494FF6164C31E +BAB6F5D3B94EA0713E743CA27C653E4B59EA44CE34BC94812F747E10D9186EEE +19504D8F0FE8DBAAB72E564632A65897E3AF20459CDC0CBEF986CB9A246CDECD +8EA2554B87F4B756BC31E38429F204279AF60EF12D9582E23DE56F6707A134E5 +FD30DEAC29DBDDD2982C68B1C72657E3E79F9A4B767B0EB99EE59B9F06332CF1 +19C60DCC428C3C02EAF49644541DC47BF07B4DB3245A0657DED22660250FF1A8 +1DB95E016E1F384BFAE0662FD0085F8E350BAE306E3C98BA8DFBF67FD4C8B51D +83686448603B52941F65E724EBBE33E33EAE5F4FF552476B8A457FE6164F2B22 +6041571E6E7AB0A5DAB29089102E8D9EEEEC7DD724328AAE8092EEC4C9B287E3 +25627DF5DE5305B4B6E20B2A52FB2EBF8A5CAE725AB39B3A51A5850C975CAEC0 +047DBB95267154BF392094B346ECA72D44F98E1C52D963BB7108A332910AC443 +E1E045D423F4FAE2DF02729100AD51248DA805CDE316DC88EDFDC8446F2AA72F +E63471B713A48CEF2453B39DEF846A6D1A3643E874CA9A0D637CBACABC8C00C0 +D6291898F8ABDF16D659EC77342E97FEE4ED63D91E78AF49F24E34CC10452A8F +BEA0F4B319E4A46BD76E0768248E258117F8B21CA8B0192BA8EA6B65E35BD363 +05A5895CA6245C3F04DB520EDBCC85EB2740F12C22ABB9CEBB75045276D3EB09 +6284A1CDDFF8260DFF74A2CE0D2554D58E158C29CFC5476D601555059E78A4C0 +9F79557F33DB45F0D94F80AF962F6AAB65A168F7CF2204A06713A270FBAE1112 +4FE694BBD566A63C25BD78469629D6829695AEC70C34122B93E4AA7CA4C879B1 +2E03FAE5E5EDBA36FB0909E6B178E27CE4353D1595AF6141C040F8858E938C42 +EB001FA14B598BF69F5EED3BC71D5F1325142EB5093A1DDA7FA530E021338E0A +6C505C730D51FE32F13ABF98F6DF645E206800860B89713889936FC1EE2F1B39 +20F969F7FCB6E475875B234640DBE7BFD86EA9DD30EDF8A3994622BB6CBE8F41 +8197096760A7B1B5D10C4BE5EA819326D196CA9D38ABDE0AF39E5F87D6CDC811 +A28A364C625138874EB95F5C30C7DA2B1A1FDAD77E9F8B0C5103D5835AC0BD44 +9FF8D366D0DADC5A5748DCB116C9A5518477309E2D43B5003B1D5CCA381804D7 +1AF5481DC5C0A3CE7B567221B2C36FC8B76C354BD2E657C9CB148E9CCF4BF0C9 +93F80370C6CF4DE9FF4788EC048BB119C7446EAA7FFD84664AAB97A6D40CD62D +C6ADF39CE276E8AF03B5761B43798F94E533041EAB2D2A96FFBC7055BDD2174D +258AA669144B82B311F95FF4C93F7E0B2F5096F3D8C36778B2607EA1760A4520 +E4857196212D2876C4CEE25F13996E0AF1A02540A929DCE5D98795C1736EEF0B +18818E1C2E66D08926FBBD2E97F11413B68DA4F64CBFAA0B43F390AED30B9739 +7730957A5E38DBDCC931E573154F5A682B20FD0F6394D443852A1E36EBB50AFF +D88DC6C3D47DA4E85F67CFF6C252B562E629F144C72F749C985B6A08928103D4 +CC6953FB922996ABE48E73EBA65521C5D73962526CF4864ABAB4FA6468EBE492 +07151A1CDFC73C02648343EA15837B3A4FF593425F8768C9FAD0EAF946FD18BC +66672FC3A66205BE6624A0E413CE2748603423D8985913D70C72D1AF7A82CFD8 +4D61B6B5164E6CF74CAAB55A8BFC1261AAE1548E0F4C24AC9CB821D5AF73519E +EA2341356FFF0ECB3E993CE9DADDD302C9BFEC9872C7CD287FB2CC30FED276CD +D911A9A265D2712D9A0F79EC15BFBFC44C1BC5E7D38D81F149E2834D82FA9990 +B363BAC070D49FCE6A8EBF1808DD99C6DFE1FA2756278C2FD59C552764D33876 +A90FA5912BC089989D72C140D0442AF025C9A05A37E229E70491629116CE9A38 +546BB24C45D02BFA35B5755D12B5A3305921EF47BFFA4DECB75C075EE47EF767 +8F7F6D8C04513202177390646916AE29A3A24CECF846713D7F9BC04FF00758DD +ACDE363C22D32D0C94D45E93C720A4604EE287263C71A321BBF2267F97F25E9A +489BF6C44B0ADDCF0389612E6712A29ADDCED6579BA6AB7A0DBC2E8AF22D1588 +D44201F379F11FB5F45A7BB2AB8506551ED2CABD85CE925E0B48D9D92ADD9637 +99EB1A6492D08DCAFB141EE2210197B65AB9B94B6AF31ACC9FEC9C8F7B37CFFB +58A804B106215001E27B7C6706066B0192ED57D8711FF843245A3A8021E3C8F2 +72337B6F3A4EF86788526EF0B3220215E7D5DD384F2737FFEA18CBF2A94FF79F +07052113A86A983E151FC8465A600685B4D67FFDC7F826EE63606EFD47DCBAE6 +B7A9F5C9402660BDD8F9272FBA01BE54CE42CD1C5153587A933E0DD3BF4D54DE +4057EE62A74A7273A927B3D26102E8F2E9E84750FDAFA69C70BD91D587FF4D8C +FDF7E0524837E64CE6CF4FBBEAC12D846083C4A33207B3CB03D3AB7CB3A9BFD3 +EAA32C0F4C3ACEADCAF16D878F6CC728BE6C92246B9108BFEA821A36591EB068 +9882B591C4509D98ADAE845F84D555E6D39F6713EDE2869C80672C26EAE8EB43 +D2D46EB80E930F4A05F20CB6AF3E3C4AF92FCB85DA8A75F425C41CC985353F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSS10 +%!PS-AdobeFont-1.1: CMSS10 1.0 +%%CreationDate: 1991 Aug 20 17:33:34 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSS10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMSS10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +readonly def +/FontBBox{-61 -250 999 759}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BDCEEA888D07B439DBD4E8B4C9 +D198C03874B5E6F8FBF4922065A92BC3E66D05DE53971CB1424510E892442858 +D69CE1F76E4DA76C87C763A4B2FE36321E54B1328C9155B8ED6361855A151723 +3386AEA3D042B8D89C8C0E9A33E5DF3B466F7BB8C2C8A4ED4CDAFF55FC6D3EE6 +0AF2CEBFC1AC3A6E6692F8BB81F82D86BAE85016AD62FCB05467082C2E5AD348 +44D1439C2B59F65590E57CA0DE481A7A34E79931B1513C4C30156170409A4BB8 +46D412D1DAF88AD30722F12DBCA1CCC6B4BCC28D06B0D29149DDEC520C8FBA13 +6B82E2E1790F00B216282FF122EF0D47B70A1B29514DDF7C0435ED238C14BDF5 +6DA243117FBEF7398F97EB95597707ED63C6797EBA1B46EA19ABB1DABDA171B3 +16CD500F5D64CBFBE4F9CBC3E66A34427D3C4D0C432710289381F9BFD91B4FF4 +1E3A896C3EEA2F3105C218877D6C0C6B763760FA364D00065E1CAE9DCB5676ED +286A9ED0D1C946DCA6A2A670EE0936FB4706CC62E234CFEED34AA615C48D2872 +A087F30990C85E64BA68F3D5C117123467DB411C9F2D6F6858CC70C1E352C477 +713097321B4C4FD4C5CDE305415F998E7245908EEDE6E056A736EA77BD8C639C +3A79FFD0B74B3D28F0494A115F2841CF8A8827AB5608F96FD8998A5F40FB3DFE +3AA0C7696DE4E1D18DC0D6E84B943175FC38FFC42A9C0CBB13A908978C98BFE5 +034F88480F32B9DEB2FD228FF6CB0B89B045AB02020C82E3F5716DC640613185 +9F597CE262729BC52132F43922B9E28BB71A30AC8709634561B22D13C4FAFE0A +12C4451969226B220038AD8DDA990A4E2CAD53DBEAB698898BBD3046234EB4EA +901287E71CB41296C431383AB85F18882F65BE36923F6C0FD6FADAC5B42FDB68 +64C06E047434FA7A659EF7F3D1AA8E547939FBF9C2ED7AC829F03CA59AFFBFA5 +A7AD2E0FC7BBE619961AE1785D09444B333993199FFED007382B54DDAEBE21E0 +1E75E0AB6D309DBE53BC7BB9F95D342F51798574D70B95021FA40163A86BE6C9 +342536A5730837C522D5314B1289D9B7E4EDD108BE7F35A20AB2A16608F6F007 +6DDD702A5A9BA1325CE2C1CD020DF677872135CF04F4E4F1E9AA6B494E2BC22F +107C331A7E80718B030A1103804D144802E3B03EF7CB083BCCDEAC7B43F1B4F5 +C1BF6016741B741CF7E12B4BF95221A72CC9F4657264771AA69C73DA1DA29102 +65D01A0E61F3024E672AFCCBE13CD0B7F54AE1418B72E357A0BABB4D03073B1D +F4EB54F899AD4A41A9F94DC200880A0DB99D67235A2451B25F710C29A882865B +A922E56E9FC16756014FA5CBDB1C32750BD6835A70EB715CEA19A8872041905E +8C660BACDCA26C8247D6B3C10FA5DC240E433E479AC6AFCF57CF96697FF46BE6 +44748E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.1: CMTT10 1.00B +%%CreationDate: 1992 Apr 26 10:42:42 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 65 /A put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 89 /Y put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-4 -235 731 800}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 +38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF +D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 +EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 +A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 +F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 +4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA +6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E +A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B +E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F +1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 +452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF +8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 +5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA +DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 +BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 +741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 +E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 +E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 +D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE +C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA +726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 +CEBEF0C9440DC034DAD9C19FB27A350233112B0A339366B7373CE058456E0E1F +139E2DCAA12133B5B6017B0E08E776403F967AF719E0161CDFBF8BBE8490F57E +53C78E97517EF7FB7C00035D601CAC8F4EB2F16F8765614227C71C390C32E960 +FC7E9B9BF26D89F808B05C2E483B9171450E4CF3A8690E3B6B1BE17C36157131 +89E42D8A2F51D4CBFFF07F50789D0603806EED2D0A9B5E8B7CC0959E57AA8088 +5F48BBD28B37BD51EAC7264D45CD2BB8B6137529B2B5DEDDD7A740458F045922 +D1A14E07A9E9FCC940D89EF56E274BF533927DB8276C3C0DE704CD8EE4010F39 +365AF1E3665CE873D8D1CCABC9C69A6BA8939F170B873994330F32963C330E9E +70E95D62A5C4D2D09AC4B8DC7C837D9FE7F5A0D4D082743D038D458D90740478 +2A04E7693C96DB4A91CE237B8ED9D9F07DD4FB4B701891DCF294052EB8263EAB +5FBF7689500DE29E1121A4460B725C793F71E79A58BEF6EFD29C6CA85702DCF4 +CD2435CA9A0CD4A1D81C15602B768249EFC229A2EFAD0BFC7D5A8BCDA1771DC2 +2641AAEE34E58BF6A236F62E2FF68B3D9E7C68FD5D104811925266AC67F16A32 +9B1EBC55089A05E3025EBD787EF14F4E053B456205C8CE2E24295401232C0AF1 +E01BB90B390E2DA8E42E624C32F3D68ECD59EAE9ED878D07889C7FA8C80E0D27 +527E9E0C57C12DC1B10508A039CEA74CA8BA027FD8DB0BC0356DDB161357C983 +3A144F697E1407791DE270911E25370499A0ECD912B9974490F2B66AB541C9F0 +02DF28DA53E7B3E21299192933DE13DB56210B6FFF3953D09440A8A043987724 +6555A448EF5A54023D8E6CB060F41BA6C3C8CBCCD856FAE2C86A1A0341D380BF +3236F1B526BF811976506A517AD5913B0681D45D284FA7EAAB535507CBE0420D +E457EE415EC91B8FA42F9AEA4E63ED29DA0BDA7A7824634309E57D721A422806 +EBA4D2DF543A0050108FA7C6104AE75ABD65EA7274C12CDCA7FCFA6C39F8014E +3FF49B8FDA5FF5956B72F581DC7CA6A860D2BE2C522ACDB1012E622D211700E6 +DD77FCC8AECC89A787D2F047F08594CCA2DC2658D2CEE3752854AE62F5AA846A +E022FBC13A94E4582755E7E28C98C65917977ED0BF60D527380DE7BD4A981920 +4232903D1046E59ED60A0EB5175F124E05EED0C1028764605EF8D650463F959D +A98C0439D4347F65E2DA71641D1607B3B609823FBD989B74E277D6A6E3901FDD +B1CDD7CC14D8F0E105122B5CC41B8448E34564BFCA8BB368C3340656DA94A18C +E269B1D8AC19F6E9104A9FFDE96B495DCE7EE44B478DCD91FA8BBE481752AFE1 +C945F42E33C1DBBA3DEAE3DA787E80614FF32021E610D82D53CFAFD806A32841 +490EA4045225A89C0844D551CD617E75D762DF942BE71B73C9BC7D6E7596CD28 +690A53E050C10BDA0A256DE427B91AC3143662E5B1BA0EC8577BE625E1C91678 +967B58EDD0B3ACEB9B0BF61F3AAFB126E7883E06F95274C132DA85A0963D55FB +2F0357333F1CDDA87F60EF7C569C54321AA37414A6FBF9F2E09F4B09622E80FB +9003B6A94501383D6351B5D0B98E9910AC0D77DCB9E92E6E6722C5CAA3B85577 +C43D864E582EE95316EFD5FB0CE0338CDFDB0A840B8001F2E389E84B28EDCC8F +339D746F4D13C3CEE2CE0B9EA5BD67C6968CC9CC68FA23C3EB26C51C6AA57191 +2E3A0F93EE560078DC5C17C7D452923BC2E1875D737ECD6D252D6C8078DF895F +BC64DA6216D34709430515C99D2F237981959EF41195EDB234E4CCB0DB55106F +846283F3682C69143374C934B18E415B85AF21B034B133014C5E4B354C3C7010 +CBABF55337F24C8189AF1AE29082A524867E51FEA3CD7C371BCC2A9B2EB7923F +3329D2AA32EC53D85811A55A6091BCAAE343B86A872827B29EFDB9471FCC8895 +4F6D8043A13362FF3269568B5D385EEA7512A166DA4296D07B7902BE3BF2CBE8 +0E88F4DE219D8E63421A2AB5B1A2CD89C7198747E96963BEC2954F92F7B755E0 +7EEA6298F997835A1622AE6113AF1C8BD1FF3788F224FFCF6960BFFDACFB5D15 +0D37E923CE1DB0F219BDB2C261D9D89933BB6E7585C8A86B985D34B1FD32C568 +C5948683C24E221F7469D23E6A907FE80D4F4938FAC4C32C1CAEEBF072E39BBA +B4356155CA600886A59AE06081DBF2C8A8BE80AD074F781B05B8D3D8714CAFFF +4265FDF92E48447DDDAE07D63829441132C68404C03690A220416E85EECD8B47 +BFADCACD42683E5988E902F4EA64441ECCAD6FF84453CB44E7ECC8579B928C4D +CE1DB8A52D9DE83A4E9F95850E47E63505AC81AD552D5C13F98B2128CD1391DF +071022C0D0524803EB652D6FCA6AA7D2BADEE9F60DD24531641DB5093E0B81F5 +C09A428A241111CD5B861F295352AD9112BA832448B924B65F8A07C10E9CA93D +6380A1B2E477AE278094155D3090EAAA07D3CC2FC06AEDA34013635DC3B2CF0D +2072B5EEB80D75CD80BD609075E2452FBFB3F3E5573A6FB4397A57169A5E80EE +5A45AF5B98D9C89F96A6011AEE28266257FBA4C5E58EFB767B772B8022F3D7B8 +80D9A6F4F9DEB89013D74BDCC23D250F621A0F06EF76437664B13C80EDA64937 +D469C3CA58DF29F1F0EFA3ED58D1DED9895BCDF59183B939FA839932922BBD8B +4B96C16F9F2FE7BDB4A838B8F9C52D9CA5A3735CBAA633880F132B03DD26DAEB +618E4B689B9A11D8612C47BA970B7B5ACB4A0198FD3EB7A62D92A026E6AE5246 +D9288F3371113050F0AA67159F162F6E62FB853EBC973AD4F2604F2205C53377 +B6061E2100D07B3A594266F06A61494B922E290AD42A930A32DA4FBDC3996B49 +DED27B8C5203F080F67BA5E890848ED2DFA053162CCB2E13BB62D798CED03B1D +ABF098419D9F97C2151C9A3AA0FD1865C291FA240E839065C8F3E8EF504CBFD3 +F0F7A39F57F6A097D02D399453027BD0AD6B5FB820EF4A889B11AE989A23BF39 +0D258BA55C5DD4C6D690037FC9BE99FD14469FF13EC32D32A033E32DDF6E357F +AB1A65C530258296E77ED1B8F056176AFC317A0401CAC7E56259FC96A9BF3C79 +683DEFB45F1C3BF305E5FCFF15FFD5D0DAED5AD258820F13675773A2FE23FFAF +44CF4324F7D6BB80584D760A261D4F1FF01B61B5008BD647C149B59A39C20590 +C32E6A8B321010CF98E0D3057ABA6076EFFAB23DB513627A150219F846FB7E13 +B3C2A2EF7CE6001A96CC12B7E81FE3A12751B0E4A5C3B1FD544514AE480730F3 +3DFE0181CBFE86EAA8175211B668BC26BA42A73C44105AD5BB07CD54770B1E74 +28C7264AB9C605B28C233BFBBF3C5402538A873E0F91ABDE05E82274C5AB3A96 +F2D3197A5C6ED9F3063984FFC2C35521559412B3313B35EE2D952D1795C43A86 +497B8FDB06633483A5547345C4DB951D8F9EA26C24DABC84998EDA8D8EF05225 +1B2C991D35F626C6CFFEEC6FCD50D742A4473B466F92B7C4E3347ABB231FDE4F +1797EA8D2B0C90F018AAF63D6AF9F268C7BD3394BF0EAEA8DBD686AEAA1F290A +955E1146BC80C4BBCF30AD1CDCD581708A8C27FBDFA9891A2009E283809095E2 +ED36E1ACC52853971DC7F8D234E5D42E88303CB5B7E8CE086230D3A66DB1A259 +194FFD10DAAAF25AEBE9D2E0699DED06188665A376B7B96D33C918B9678EBB28 +38816E68A84474ED9C727B809D91FCA850BC7959BFE888D6F30C3917ABCF6D5A +45C238B3EDAF9B42EAACA014F0E8E91549E3804619AE8AE31B66D8A444A1DB51 +9E40CB458450BE01FC8E7704D144C3A962A65466CF7614D94DAB6B9EB10E003F +0B16CC826F0716B8411500D7E867947E91BFCB998DF3BC331E66154059413D61 +6F8D59DDE334A3622CF268AB714E6A8417CD1BF09FC7BBFF072297DCF0AC04DC +5C1946935E8EBFB12A4E8931516CEC58D45832C8097BB070C7C51DD881DAE0C9 +8363C904A21CC85B20ED5DB3299DF802965EB5017F250CA5E8B3998FE535534E +05F3E270F718F6914C49AF45B3A75DF1E9CF0D58257DE2FA18FCF9192BB60FEE +581919489A666969768A1274CC4E4E6D644088C80F716435199F9D514B065EBA +B8FE1945F87636435606BA5D996663E7DC75C54313FCA84FBD13D70A8694A210 +170DBC5CA05D342C8742A2AE2477E5A5D04849501BD569ED5E70A68B9EFE8CC5 +DEC2EEE3DE8F29ACE6CA0741BBE9C4BB42B74037C85E93B6CF0AB818FA434448 +995834EF62C20CB180A489F1FFCE5A21F1DD47205ABEC91CDE6CC2A07FAC5D0C +B0488C9F7B3A3974BCD0AED976CB3F2FCBFF68A6093756BC24FCC6DD3D9A2F3C +EE881876A1EB8D9BA8462CB48BE2220381B86B1057A1A1B2A08EBC2FB8686BBA +21414FFE042C855A257FF7AF0DE86B8902224B90465A437618D4F17E051CD8DD +A08B7D89D6BBB4A0A299485D4D737FD4F9508A05B9C8EDE0724B79726A3C32F0 +D74B811F82510C706F3444FF1F2226DB0C9B1DB512A9EADBC823A83526DC9587 +42AC8E8A54634DEEE9AD8FFDC6497FCF217C997B05F9D2E991E7D9D61179012F +58248632D5836B087A6624DE90C3AC386640B11194D3C891BD314CDCB6AE79D5 +DCBE022D7FBDB13BD6A762ED8B65DEE202500E842E31DB6BE7D873245A75C231 +919DEC011621AE1D808861CF08E339E404F8ADD5CB1D4DA268C191D60F50BA06 +7E0D0273BE56CE0A53219B7C7FF9BEF980617BDA6F2C780175E712E634923995 +FBE9600E429DDA5F691B61BB35946E76FDE28F33F06740560D5E971A424076F8 +CDF10BDF3899BEB2BF28DE369235ED0DB57B27827179CB3E2FE8C7CD6233DDE1 +6625975D48C788C85285EB73B7A7B9DE131FBD245C9B306CDAD91D01839978D1 +2132F06C2BB59C8E38E416AD3A8937CC72632C4F79D905E3119B83E229F9A2C0 +BF6F4C0BB3E509D1FD88DEFF150E3D469CA20E9446ED75C6C44CC72DB23F945D +9832BA83A61D5C80222A23072B4664E9089CD0FCC6512129938FC52C6DC46593 +418D9DADF19D00226B1122EE81402007AFD06B39305E1B0481F5390EF21974FC +15D680EFD0AB7799187E6F5AEBF07013651DDA0EEC50F352AF50D08216A31159 +02E896FD2BA87D3FF13D46AB6136C92AB932A3828D6E40D6AAB2D42235275449 +B0EC8E5C6134985E9D21763974377D34530289FA0EF14EE891E1B221A698A8ED +791DB294B3489059A8996C160545AF6C2A556882AD42A034E686F21F187B448A +DCB631CBEA2F4F863F31D65D5DCDF357D0E7BD33FABC65310541AFC05860B5A9 +F6F51ADBCA7718A3F6E17DDAD5E0BEF0351267925EC591024860289B31B3071A +C9BCB9979DC7CF6DA2431FB9F4E73A4A6DA52F23A507510A86161763A4AD574C +A8D7EA3CCFDEEF7C4FB4203DB0D00079639402F8CE2C7706BC3134E1455794A5 +F4D506126F124BBDB84CC4E38BF56B0F9FC18463281559E8001B376563651F50 +E4F54D3BCD3C5ACFF157375E3BCE65EB9620A91E0B3AE413513AA885462A981E +BC33354C8DE722C19CF1CA72623000C7DFD3393F12658ED3CDCB2472DA045E4D +78EB129D89CB652E423341A6E539D3A12F0AFA3A379664C6D591DA458D0C93AC +507848ADE1CE0E237F8E44781929B013754392A707CFA3028609F1A3402925CC +15AE50403DF0B09ADC29AF5AB03D6FC8305E7DFC46781FD76FE6D95F3E2FFFC3 +5B0AAA73B30D870D8E8E8184411A418FF8AE4DE17DBA8CA746AF123A44944F62 +85D7E059CF3271B6088A374093C5D80197F1EC827A68BECE399345E10FE1C776 +858FB036C4AABDEACD9C5C347CB13E4EA5AD6894FE5A6B210838D0DF1F3FDCDB +7A1B82D07D42C84DBB695F70E104B13548D4CBE2FBBE128CED959774AA5F7A54 +3CBC6313BEDCB8B55429DC58BC51E3686BC9A8110D36B4625C5D9D7AB72D7C14 +312DBA59A29CFBA7EE804873A54FE2D1F5476818E2DCB1863CD3BA4892EFBE45 +C5C3DFF6254F491734BC982C0E5CD41C738DF9B2B462071C1F70021629BB7A9E +330F7325AD85E8005A90BC13BE6D6868846F74EC7002F6326160646844187DE3 +26D1C625681208B87BCD967749AADA6510105459CEF77F4080F026CE8EB36E1D +0C275361FD92225CB11CB327EE747D2397EF6E4DB62AF4708ADC95B9B0B0B3B1 +FEA8214506BC33C7E10C28AD9646CDC214F1F0ADBCAC3F9690905A7DAD1B2ABC +995787CFD83E255B07901D17B196334A40A45CC25D67D69A9D890881D4731680 +AB1C230DEE91D23EFC69BBD1859AEF38E9D907EB461ACC9B5F12503ADBB9B373 +7669BE875CD0BFF43F1B4AFA8FB233790BE91986E6056E913D6F29480A27CBC5 +F7D4621F794369AA8FF04EDF2884875C802B3D2598B747AC471DD88C2DD7DA5B +4AE78FAD1A699F0CC2BFCC4F492ABD0C784F53774923C96B8E8936624C9CA2A7 +5D98343D46C3D59F45D7FC059DC38668233DDD9EA40232BC9F8E549A362DB96A +432E2CE2498EFFCF491115ADD4DDA9E1113A8541C607C60C7B25E4C5DA72C4CC +08156379EE57D76138CADC149B25AC6C0B29B92D038B22B8EB4B4E69C7C405B4 +F8CE26E4214888DCCF18FD2F5FA3E20C2BA5E7259950522E5634C95D52F64C97 +392CC15FFB00C09346A6D20C9EDA00B5DD4793835BBA10BF35B373819058A94E +53B1ABDD7A28B31BB7E4A597053DC442FFBE6902478AF00BF74E07FE2AFAB59B +CDA5997B78E7C996C8A0669B3BA4520807F346BAF4FB3FAE58A1E52C6DA5DCF5 +1457800464DE6C876E392B266F9B93D97FD91A21EAB2F0F917750AF98CBFB7B5 +1977B2460F36979B866DE95D42A79A7D3B68E3FFBEE7169EDA27F479991DB6E2 +39B92868AE161B910549BA51212E4A8305E52CB4E900C71A654CE8251CD30C5F +C23B7857377FC16026DF41414B792F6E992CA6671FE6C3C9136D8983A33F47BB +D379D88E34DFEF2F0D02CB9B4E6C04D0C5B397BD7C52815E75A2E76343F88642 +BAFFF409D80A2213B5F48B37867731416D4CF497772732B4FC79BC7EFB2330E5 +40AEED28970A318DC93F778158DAF12747890D85DEF62BD2402844D29A5E5F6E +4F718E264EE9657D56C956AF3DE08C5D054F9FCD351233C35AD02DFF3163E42D +C401378EA1A955F551018C365686045B13F2C1A5708B3CCDF7E226554E2AD8B1 +E4DE2657209DDFD5689D93EB1C202206C73A586BC7ACDD21451788CF37D32829 +8C1CDCD8F0D359F20EBD5E13D0DD96C0924E53797638750D5303B517B75B6F45 +2BD533C1B35AEA97DDA239955596C1D3456C6A7E6E120001105E58DDB0F36861 +3FEF0587489B1F7562C9742CDC972340E98FAA2410C7EB42415E0053F1A79CD6 +91EDF9BE7F61F5069FEF3BDE1C95CB4C0216AA5BE28F8DF42F57EE97AE8FEDA2 +71CD120D8F04986D5AE5DF2B0BDBBA01AC08296A2B30940BC8006A5F38D6AA9B +72D9AE3690BBD89D9B1B924A92E9F98312CA994F369F71706A20CB72A820650C +2E3C077ABFF8BE9843ECEAC7286DB8F6404D2FB367ACC874740C5B3846EC7190 +42C48E182B94DCE1B8F69CEDFB60A3A7C7AC2CE49A15DCD6CF50EE16C411ECFB +7786A6E0D244D4BF394143BFA289495957DD69C9D40E6D57C00D798356835A53 +8A2DC6B46AAAF21BBE9A116EF4F2D3B9483D3B62A82840B2166152E7051C2040 +888F99445F1AA00AD94EAEB427EF533FD7BC59F63D873115AFF4451DAA4B931E +B6D05AA4F7001080F3FF5E4E1A660FF36D0FEB424CB46CE0D591C7E0135E3D69 +17262E35F7B7A8CA036CCA16DB8EB55A732341BA1C2B9C6B588D41898A0D1E30 +81C1B1C6B5DF9F7D1A8A201E0848718BC02ECDA3EBBBA61A7CD9A3ECF720582C +EED677E290F3CC54EB62B83E631BFFD22D4F03177787FEDB5B716B34F389ACB6 +B84863C46A71CE2C3387DAB6D9F35B4DC3DE3D279221BFBAAF730E549922CF48 +B6BBB2A01AD00DC047C2D2B867E339F64FFF63ABB3A2266D7FDDDB3624CDB196 +B52696801BBBDEFFB871479D5847737DAF7E98F8140D65172D39ADE3219B7E57 +219FD2CBAE039D263DD984765AB26E9E7F17B06ADD9AD578DF69AFC142D31DAC +6A43149D41E5E07EA2F367423AB179B9F913ACF1FEBCDCDA9C6BB6D14BFC3425 +176C2E34F15229E25B39DF215C36E75E6FCA07905C70A6A538FD8191A5E1D5B9 +21DE335877A562A62769EE2B8FF16DFBB1CAE6E1E53E78A9E0F7D9218295F409 +72AFC2CC9CCA4B6563373950824DC071BB92902866C827AA23BC2716D7C770A8 +9CAA5DD2251A0A1EFA4E95402FA16E1CBDE5E37A169B8917B8E0D94A9C47D225 +307B4A38C004F3F36F31901DF56A6FAF3658AECC09C8BA27F26A5A55314782A0 +32963C25291B990C57790092F05A203176282F16CAF9FAF89718F2DAEEFD3F52 +CC263F02CF771062B04E51A0673942479BFDDA13F04AF88B9B9DC85095C04AAB +707A308E46055FFBF41AB5CF9A43F8DE0048A8A7138D359AAEE262A45AF7DE87 +AE6D10BB6CEF580322A6593121AAEF71821C57B850BA883C2BD21FED4C28CBE1 +D6F3EAF89ECD58B1FFAD8C41225331DA8BFDED4FD80EA251AAAD2DE982246F3A +3D7800CE8C67612E63FCB2806AA68DAA7373BE7939895EAEEFB371DCBCFEA712 +238AD633A8FD2496ED249828F9A35F9A8347A6FB401B5B46968646F7B07FCFF8 +015A73A8832710ED1743FC6AACA74DBF4A8848131B9C83489B55B42A57C0817C +DBD12D3EB847A9D7AE76A6FECD5362C10B8BDBF6FCCE19166DA5BF005105068C +E0CE15C4790EE0CCE764B3235F1FBE9940369C5C6E1E38C25DC8167FB5655952 +9761B35C6D02048A5A89F090A08A0E91A871700A92A06CC93C225DB53B6FCAFA +8DEA22DE4351879222842783986A54B93068CFF579B6F0B3E67F595E603CE50D +7AEDE415CBD7E6791A5050214403234F7EAFC11E64F78CBF480EB261D8D0F9EA +60B61737C69ECB32C0C9165098087E5BD97155502102414227F07C8EA33F3CD0 +3C039DB00F3373114E4AE2766FE8B19A866220A68FA769A0613B080B700BC85E +313C0689DC09ECE994A1FD9E01E13FC7741E11B84398728D28924CB6B0216F51 +20A07984B0F4C20100DA456FAC82D9D1D13613F56CF0BCDD31EFC037F8F627F3 +123E5BB89E5639D58FA22BC426933C1FDC42E4817794B9108F3FE476EA72B0B8 +FBC1C7DD290D9BDC475DC01C8D0F5F191E38958B316E5A6493D3810BA0238235 +8AF308C1353A4D1F29874C6F8813EBACE49D044E0EB24A9B881F24AE3028DC7E +B574B271EE67FB9BFBF3562BA8BE7D0D3835499C0FFD6D9AE6520C6841676A89 +E5B4C7312A4835FA7BD974D164E9D9AB45D4554086E1658D7A3CBD17DD8FD091 +6DD2E2094AC2E4E79D7E2BD082E4710A126DE03D2F4A8EB4F8D8D16164A2825E +3230BB6E5A4F5BF8B4ACE7F6407321B07678DAF8721DD718ECEB3EEA32229007 +BC90E375D2AF6A4D0ED66B5EB0F5B017F4B8355B14B70F665DA551769AFF85B0 +F6D17FE85640D9F3BC8D0033B823E1D7F286ADAC61C85F87C8F4A021824D068C +47237508C739ED9E66056E1092A22956768FE73B590BEAF9B8DC96202372E369 +4392C1D73DF00B9255ECFB19C21C1AF844F7DBAD326DDD5D7F7B41C616E1FB7D +F2D113ABF9ADA76E08E6DF03A5173BC9F65B8873BAA3AE67D35893DB2437664B +F6C833A9289318F7806E67DCFFF38050EED9BE1FFB62EAC6773CB45CF0FF56DC +B4EB2DD8AF38C2B50849EF082DE092FE7E9F6B975965FA5E076FA1197946867E +AC588C255FDCE28DC0F7017058CA8CE21C656F39432115CDF619B0DB1F3DA652 +A342C73D6A8D3DE2D81382C0CA46C233DE0BFDFF0DC6FF4776FD60292D157134 +EE1849F22013259F75B93CBB98A488428C29F3168A0FDEE616CFA1BC088F6BF6 +98940C3D6297C684096C08A34493D5998A443C0A4E9EEC53100F7BE7CD8EABC4 +8234DEE6FB36A1028627A18A3A6376B185106669056BB9030D3EE29B86857903 +8E5FA2DF7300D72EC079F896E052407A8E35D52D921D9EC8C230A8888708270C +8975D96D7A9B5C9504342A3D3D8ABC0E4F8665C4D6236CE5474F1873D968BD2B +E894FC38FD94ED092DA881558B8C8238716136F31F301595FBBE990DA4306F2E +0E996D0F9FB20B67DD5BFAAF9BD909130F033414F473EFEDF7CBF271AD49D15E +570DFBDAF0D4E02738881C104B8218AF659DC9587A6DAEA42F98FA0A864BD1EE +ED493DD61BF4AE6B5EACB7DCA84C2EA02BD3EB3332D1A8E6AB68978B15ABB10D +497A0E3D6E9613E13B4EDC6DD8C95D035EA0D650B15A6D0FB89109E1399B4866 +73B857EF3BA5B44E87AC7AF2FFF4EE7E7D6417348094658BA6F5281E45943EB3 +E711CA4C9A4ADB161E71208C7A5102D09FBDE0921CA593CFC01C24EA1C5D0B6C +20519F42D3D169339A326D2C2308B6F0A463F9B32B2BC4929F5FE19AEF93666D +1E1862AF5E3C32535097A0BA56C4FCAF66E93D9641E25DAF92CA2BB0D9BC29FB +00C79F8A7316487C64222592DE750B72E5F7AE2B0B71642174C873DB02946505 +43A7B71D313B5092E2693051824A9737D75609D3E8D17CF493EB10BCCECD0F7B +06ED06F43508463788A69797457047679C5D69C15D36C31D2ADFC03B8F53D11A +D03A7C6E287BC789837EF12A1E58D6F280C3213DE36B0FDEF163B8F2C37A2525 +5A7028BD52F371778EBCF28A9096AF779C76874041CD6263466C4ACA1E1A632D +DE5E1D15AECC12604574E9AE20B6CA3C19D1E5A71B3BA4E82B18DB3F408305AA +0F0AD437478E7614F33FA67FFCDE9986DF688608220A22487916FF230CB8D3A8 +47289790D64E166BDC548AF527BC883D01C58C9FF21BE693E6FA502D8D2C13B8 +FB5A8EB2BAD804BD9AF48B424D9F299BFE3ABAFEF3F08A073C4FE42B76E6058C +523C0758040612837DD31C5EFA932A19C38709CFFB7C191C10A15FFDC1F91700 +F358DA7374CF485ECEAA8E54B6CFCA4090B3094B91C6D5CB10A8630DD0F7447D +99F689E44FBEAD84D251D35D42280A1ACE9644A44B45413FF6E0493EDB0A9A72 +F182B458B2F28C9C87075B6D37CB11945DE08DF975772D05EEAE97BDDBDE6F32 +9336D4038F0B064C26F6F2B742C6EEBC7872DA7B09B1337FD885E5E4F299F3F5 +88ECF739340592F863473278A4D5C817E9E139DDFB2717E731AAC7063D9C283F +5E9706FCD1F4DEC03767B93D2684A8C1D544B9B12DE2F503F2262017589CEE64 +550373CA2169FB1253DFA1B469595A61C58C26EE149D0AD2F49FBCEB27DE59E9 +0294A966399B35E17F0B37FAB2957E61695F7E5C2383A7FA74DE9DB3EF25C524 +876E67F2AAB48F725FC13C6F1DBCF60FF4D156440874B425A2F8FFCFF60CEE30 +733E662DA7A0E25EBFA5CB6958E694B5CC16EFAC612E81A2B04C09FBEA8EF355 +0919DE7DA66BFD36508FD6230569B240570E09A7ECFEA6BD28D6F13D8A2E076C +F65175C7187D0D580B368D3E8122D61AF7D15D638EB54B4B4A2905416C8C036E +C235CECA028C60124AA7822A4A21A7B6E783CAD48A36BD47ABEA43347C1762F1 +C071A54E5837AE4B2C4F5101426721F4F0D6A86FA01C036B122026B41F6B47A1 +C383B059558855DC5C7956AE377C929F8D0980F3852FFF885F2C2FDA7E33B623 +A860A2C6E2C97AEE4D405B1F8C385A445932DD8D617420C9D13B8D296731AF6A +D7D063544798C8E1BB78A7E2A0A86F514FCF06BB6EF4E490D9D526D75781ACA4 +B8D85110A10E01B8369EE4134FA8AF2D55934FE439EC91A1CBE137E95761F911 +ECE0FDAEC1C947C948D1E6FA6D23422BDA5033DC01EA9A7B82D4E7794F7F3DB4 +88E4984AD9D90870A5C7147454CDBBAC9F7B3C3E3C0906FCA0796D5A7F7B4341 +D43DFE6D8989C01A2F9B70B27E2C0482AE49C90BC96B4FFD286EFB7B7941875A +CF94784F51AA1862B59741EA2E507AAAC323F64422111D5CB3AB85293BEAAF0E +C2BC1474BD081CEB16B6C8CC4F90E2C94CAD66F34FEF6CB3F84AE5CEEE514496 +5BA33C5F78A0C9552A40A10C79ECFDB85D20D6C02F5E8ECC31B315EEA475C17E +FC651914493A2563E0A06F16B4A28AB64A906FEFD112EC0B9B3A3B7E45F93209 +7EEED7E0CF875375D443EDA415CEA6ED37AD9EDED86F5923E0213CA1A429E91D +5B266F14063107BF8490BABA8E68A67632858A7D03839F1AFAEDB8F02A9374EB +2215EADEBCB8682DC20251D64E97135249A0EC2FA9FC22341F72FDD2850520CE +45E2B2CEE4DA9458B771AFB829D6BA5224854D4FB7114122E1857D9F178DFD62 +ACD687049B5D9650B371FEC299A96772EAC2FD5CA9C5128E9FB489F828945D92 +33F4B50A0AEBA68E408A3E068A9C2F92D7A92BE9487A02E37A2DDA05847A4BE7 +73EED5B07B64F72B183BFCB31BF2673EF5774CADCE2EB4BD58A6051C5BABE387 +F0166CE179024FF39DB1EF11DD128F052655D0AEA1F7DB42C194D3D3E4A51921 +22AD7AF84A48B12DA443D0CF7B3BB35760EA3CF9FFB861CDA95F15790A6E0A9D +6F85EDAE6980F0A628D73F68BA387AD9326F804953443C2AD2ADCC810273858F +9C0B51BC9FF7D1654E2550BEAAE3986282115E3646A630F88956E62E3D646416 +3F2A802EFC60B547723C0AB0FD1A0E2DC6CC5AD71569841FDA59627AF7E4382C +E88FD3BF1A9D8F3378831B357192E379D8D313889A0FB00C470C86C7E463789F +D2CF696141BEDB834649C38D759016B86074DB5CDA1F3AB83B3A34C96768963C +86983D35679612CC2B8E9FC3AC3D857F8825F0BB9F40383241048605D3526437 +507AD1DD0AF39D47E62D0E190F2A9BE9E95607595F956238BBC14820712FAA02 +59E93BD5B84584BEF8517484D04976472E6559A4AF333A26F5D5CA91C73F32D3 +745DA3929763688EBA79224580D6BE105E257C166F91C7DE3612520402432AC5 +BAF5498D4F611E5B7262F95A619816BC40E8B5D756264D656C3F6CC58A07550D +3961E8572E3730F0A5DBBB415B29160ABABF1A0FD10A0C8F16CD48BE05F90E08 +8FC9138BA53FD3760EBC0F6D6CCF7148AB43B62425156067D97F77F6D5D95C06 +FE3CE52B34A1DA696B31906842A6E77127FAD80A6A9691239A9F4877AC668654 +E1BAA8223EACFB9E4F120BAD798865E85B4191CCEE9C40EA5D86161046D0C8D2 +BE4C9607DBFB934C1171A3A71EFAF63156C8C68C644D4F64C2B51B58FFF904C4 +F6E68EBBC0C4A8A6C468C2F030C0D5474C37782A6511206125A88D165FF8C63E +6E87046691C81E571F02BDDB8245FBB8187E9E6285B0AFE38A2177BC7B540813 +CE19E2017CC10BCE677A9A42C46324FE48B0FC5FA2034697258942827E9D5D9C +3E2ED569871E9076B073431BBA118FDA33FC180BFD558D4DA17A3813D206B0B7 +E62F666D68696D469E13E4FD628445D8BE278DD216CCF1930E2435EAE694FF49 +7C494DCF05837E5EAFC0B6B8E09720CFE065FECF38B3310B56C4D2724CD8D078 +DFA4D795073E90F96857566D43A622A61EAC381E20F262C660C90302CFC6D85F +BBCB3DB3D450587FA8C43F89F19DDCD4F244E9A98E1D0CBCE31B3EFE2A397724 +4B7AF5172C4E19B03D1B5990F4366334F4FFD8B019127B30F50799750AE97C13 +D4B9278EC1298DB073634B66B212A093F244BFA90FE1D8A99FC81C702642ABA7 +73647F04A2A89D6FD2EB560662016E7E6C634AFA4BC0B4024E45437A219593C7 +538FDA68BE395BD061A7D1D719FD571C8BAD0093928EB6829A7DFB9A798C2429 +443B8F00A56A3A812E0C7661B2FD15CBFCE40AC101ADC58C058B8DD2EFD32A59 +77AE2D1BAF4809B36FC428EF235819C59A8832A2C641B43BC25C6F887ACB28E7 +1E3C354B14AE57021284921424522DBE8BBC8AFCF428A8CBAC99039FDB738B33 +065BAED6EF1ACA3C13426AFE3A72B9782A5EB64150E1968B5F73FB68604349D5 +479B9DBE25BD3C7FB893D13A10A17FDADCC10FF7D4E4E7DE5D7FBDE6E4A83549 +8BFF55B352D9770E83B7EBB026B9E5E6BDAD237891EBA638E63D262F841D746C +4C8ED36FC973DBF35059CDB3E73CB30A5BCFDAD30C7178FCD1DAFD9A7E131C35 +B094C145CE3836CF18BDD0DFA344760A15AE2193CFC872FE3F2E7AF09E1CEC89 +2A67469F3CF738E980E5A03D7B6AAD6B70C668054990BB9B7F1D30A60E05E671 +F2A0A9F323702123595DA4818AF4E5C0DA1830E94095EA4EC36733F3B25AF6E1 +490A2772E25803805E55650B6FD03CE7E8F8565FE11EE50D0B040A62E5AF3D3D +85900BCC83A09CFEF3A2EAE5C4B87F9B423CBF7FA703AB8D91E851101B888FB4 +D0F0F31FC74EDBCBC1D40A2378DDC8A0EB9011EA5AA3484D6BA12D6B4FCDB6A2 +10497D262D136AF8DD0ECEE9EE9D41E94A7C35D53698A0E581244EF3A4B3EC6E +3C490AC4F3EBAD17F1A78D6DBB01343A3854887767021DC999514E99A18E07E8 +B40573D647BFA3E27527C1105EA52050B504D4C8BD5D6B02CC2C5334D7CC08B4 +73CC3EBB9A539711F08FE85F2C5773D83CC5C43C4C2B50F8B74B098950B71DE4 +5847A10929D37F8BAD2E3E31D930F6214CADE137CF8D76EE60C57FF82748A105 +0E00D412E6A82D76754124CACA25BCC478169E42B197294143544638F57EE932 +44BCA114BA1D46EA1540943AEA3904406548AFFC45F2678A12317B7518C3EC49 +6A76D6C86F3D44EEDE0317ECC5401EED98BE22EED756D35C67B45D9924F19904 +1BCE23B85A393E7B8D42E103CA6B60278F73399FF178F1F0B67F069C9BDADFD4 +43AB5A8D4ED31154B0FCAE04B7720907442CBA3564888ED7CD487A6F62759397 +42443511DDD40CA6343EE4BB4A63125A4CBBE3470F15146F50EBF1664DC5B6F0 +8AFB62C771997991A9FF8D3BC0E258FA4D8AD5BC20140DAEF3824CF78859BBC1 +1C10C23A2C433F4C2E86350651D5861E75FFBB16CB9039DBC5D6A5B37A81808E +1BF4A6C3D341722DDB79764507346C263A8EC13654352B6B8F054B1082BE652B +1330D7701AA7B370265B3F228E005578AD69E63ACA9944B5136177EF63DA4B3A +2DFB0281495331010183219263F47C39287B9F0CBA9D9BA8D199DBB482877063 +FE76E44665F05675E1B9E0063ED511CE3450472776302C90DB4DBE532FF0442E +8901F287E601A310C807DE2D0389FBD1E673029C3AEBBF692C189A104C7FD028 +5539F9BEA74D18F2E15813C4B7F836148B4B54BF1ACAC31C3955FD07F68B38D5 +2F0D5FCDE1F89841E35DB59336E58E5C074DB381AFBFB7D2865DA312A2AC8580 +6E308FAABBBD198B81AD0D1EEECD61EF8D4B05265EE9207EE1990CD1F5CF2B3A +00922727934841BF36A9D50A3C8ED089668E7138A1FBFF1EFBEBB0C994582726 +3E31E449D43A4756E87A8636BD09C79438CF73AA3F903F6F3CE72427C148E997 +860F5394F8DAA2A1F392A169E3037AA3516246DB8CE5FDACC863876145C3B2D7 +5BB3D46A325B5238E3256EA2863D388508A720976F154953694661B617C1636D +6B220B3DA2165E39C5B1AB48B522ACBA82B5DA5E7AD1EDA0B116B754D994622B +A75931E0774B46CB1224CA7C9921E2CB2A2D95C7E27D55AF75FDF72ED853E525 +EBFAE0B50FD667EC5059FEE1D8E7198C6DA130AF2EF7413C94340FF4075EE1F0 +543678B806A1B8F4DC920BB4DC568E50 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.1: CMBX12 1.0 +%%CreationDate: 1991 Aug 20 16:34:54 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 44 /comma put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +readonly def +/FontBBox{-53 -251 1139 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 +B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 +AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 +7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF +20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 +B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D +68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 +D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E +26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D +F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 +77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 +BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E +C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 +30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 +148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C +E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D +E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 +337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 +0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 +472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E +A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 +331942DA18ADF89C5E79B969611C123465054D82C1DB771E6506EE7EFA2BC0E1 +DDAF60DAFBE6E98F30970280A2B500EF3E9FA526BD478E1125461E1A4AC61B41 +D0FD917B2D891EDD84DD60DBDE3BEAD106058BAB10F882E4E143792C2EE4D13D +A5837253F8577B67D8A2F0936152AB0555EE029D0B406C99B2795C5B0B394EF6 +78946EC9ABC64118C3FB0C8BD6C4AD2B18C319E721561AAD9DF439EE057291C4 +6024B31D64D08E756BC2692C2372971247A706A58E7A6B20F00D474DF5150730 +5D786AEF9B56C84EC3823491CF0EAE567EB466FA0B26469FCA00692524BAEA17 +602051E98B67BC2AD63A1DF8F3CC41121106CC02C07D3D055758B3C33D3E50F9 +88675B2D6B3DD1789F1AE9AAEEF5D5BD3E99D9EDFF98A927D270EB8D136A1A2A +396E8B94DA9BAA7AF8243F6CBE38546A4212C37B752EE6099FAD5FC3D12729C7 +751F60EAE425B2E6804B9A7C392D2CC0CA07E7384DC4A5ADCD8911A3C09E4DC0 +9233E8A3F7BEA1428BBA8262517DA3801EA961E912D5DA81AB9560EF800919F1 +DEE9CC73EC9251754860B83A1D25EA364AD1315BC4943A3C5D920318BFF3A2D5 +27A0D8DFFD02AC3E2E6059A4CD98444B50AC5BE7B9D37DFDFBB38FF335CF5A9D +AF6AF8DE0E686B66810D28F7A79D5B398DCB74B4E363B0BFD1519FCB34982DA3 +077A4FD0B5A2686D8EEC5D5B29D07C40AE2812E33894AE7FEED8DF2AE9C1F796 +9F5FD59E1277982CCB73F1945E762260627B1C1964091C858FC0EA75F4DC81C0 +2872B4D5846F3BBB3A79B683940A568A1FD68799B226DF4BFA0B09E77210A4F1 +2E0932BAD3CAD2FB945ABEC86ACDABDCB758C39B5730890D7A472F39A813FC3A +598E2D767DCEA004056FDDAF4346573AF990F30B76E97EBB2FCC38FA116DFE95 +6D9B579467499AC2A7F659692CF63BFF859FA90F9584E70264304229C6577B07 +F9FABCDD314285F8B987FBAD04E4E61184F96F31B38627CC6D83743C0A561004 +888F002862FD99CA0F81864D180DDEC1B3893B93F6552E139E856C47CF7E995C +7C273CF00776925CF39A298229683D28DF7E9F21E93F8B25BD2A111916111809 +39014D096DA99B8100FD17A4BE9129D0181F515C8D43AC6F3FADC10979526FB9 +4369B250A522444E773942AB21B630F470F5D42E09037AAB0DA0478360A349E5 +3858CAAC76E58C6E55317C9D307E01965C244C4BD24E48446FD0DADD44B3D7C2 +AF2D92AF002AE1014429FCC090CF52DBFC36FFB5915C5215DC2F9DDCE48426DF +844DA4FB5DE5C9429B35039BFE218FBCF9ABA471790D604D0107FB65D7AA05FE +23C350C93FF02982AF2C8D387C9401F1AE5A826E9128B5814FA24DE537FF57C2 +38F12A50F8C42D53B2F0D95CEB47D11D802326135A3E3662A454F67CEE321BF9 +6FD841DE922B4C1E0BC2753B9F3F6F24FFBD4157ACDBADABD735E5B5626A1C49 +6DD59835F4A6275F66657413702203C4523E6B7D74D81E11B37F2FA86917EBB0 +EBF4A55103ACEC7E420A7D6052B2D38940119C34E2E3D3280960468E0AB10A40 +0758A98AFC872037C929CBCAC71F5A45CD9AEFD1CE854858353A0852D9F88129 +F0EE1EDCCB1268E35494DF962AE27EA6C0AD212C0C862EE355C5580057B2C4F0 +580FED0B2BD80716DDE4350B73877EE349E3A4A63EACF07013B0484F94A2F28B +54A3CCB83ACD34A0DB2D87624C7DABFA77362AB0CBC22D73C2566C164088C449 +01EDC05AF90DEFE189FAE81930CD6D203596074E73762490AB571C044DD3989A +66E0F2B9802F4EE4A3DBDCA3E4B27E331951F4F21AD36D05F4E83C895CBE9BC7 +CDD4AD272BC22B5340F962039F0DD0DF6DDAB20856AD48F1AB329282E81DD509 +813F4041189C99A3DD34B9E511CEF5A61642FFEF819364214545E20185D04776 +3A23B72A16BABC12AC355664EE9B6B04A5B721CA4639CA95023277A0340461A7 +6679A462B97926BF76C7F195131037C2DD154B9A0D3A98E866C8BDC869E82B08 +45CE67161B336B4CE0153F42BF005DDBE7004F9CB8EAA04EF844E469A99BCA93 +49C80C550BD7B2EC80BE4F55ABA0E33059288A36A01F8487F2A4F3A8CBEC994D +1723CF8ED8AF2139DB41284C778AE4DA881017C72C7C67DA310BEFBFAE4E52C7 +4EA68B8DADCD68FFD132DC14E90614609CDF571644F78FDA212F7F7A8C5E0F23 +D30E3AF51161915468A2ECB5F5F5C9E51762AC7F914383E9C49EEAF70A7ADBF2 +667E9E7BFB1F89FAB292417B1C22726B8F3A267EF227D38C9328168EEBD65968 +EC16AA12FEA77D3813F871B40BF7F9F39F8E8AF3470984DEDA9ADBC52F6F3C08 +4C8F80FF637CB5941A082C46275B3112F73BF17157E47C27E6D5328391AC81F5 +18CAF829EA5655A28BDE6F2E09190462D920B5883DF1CB187FDC9ABEE351581E +27D3FE8CD81BFF94CE534CA166252417EE05223D6B6960D473B021EB8700D45A +529E96BED6E2EA51D0A97CD953DA4E177DAAD914DA8A304D978D5C9375C88E15 +3E3BAEE87A6AB1DA10AAE3A36DBB5C3E3249FFDEA9187FB5B4E2C7435A444F78 +ECD6D7C8623835BDDB1B32C7B97DFE8B7C9D4BAC01F51484B96EA6BE7B8B6871 +50F91362EAF19C28B61A8CCC68241BFD8772253EA3931DCB92DF492D40C3015C +C5AB21B46E09C60D5447A6D0E2A0032DA3FB31FDE5871821DE1B6D811CF9D3EA +17537676A4F27A7CFAC79DECAA866DF0B06137011328E28524521BE97E125A48 +99A60C474644E0CA13FDFE368778DCAB7ACFE2940AF8DD4AE0AAE2B2278E0D6D +0B83C70693BBE2EB0D5CD3BB572561F830379358FA9A6D60C7C77B7B5EAB61E5 +274C635D699558B1C1B4E7243B1662797BBC1813F637E2189ED5B5C09E81686E +6E1E41350D7B14CD5F85A4753430C8DB3BF724673001D8B354036CC1A4A436F0 +C74F4F3E4071F995A1B394ED974051B8F2C24416DEA2E18EC82B910EE38790FD +0B31A1B01322DE131054286BD668B32460EC9D42D4626ED00BD81141EB313DE9 +8EB28228E04B1D4324E93DDE0FF6C52103AFE6B36107138B0EFE799D5643ACC6 +915877932A4E6D8FA5CE24253D981864A75ED97434B96000F6C1F13879609403 +A06C9F7E75259C21DB01E44EE1F3A48C4AD5D7A3A2C7E28259E31EBABEA74CD5 +B842343EE409B4AE792C5E23BD81A41F099BBD9775AE1401A1B221D97D3BF79A +DA2A64AA6E37839755D5CF4E931B3ECA258FF3DF46CF0753B2E1E713C4E6FADE +7843B4750DBE4ED9C8194295EC3DAB29BE7577ADF285FCCF89B66ECA83AD9359 +80E08CDE4C2EC8FC382BB233A6DD3BD103FC026B8536D6584B27C9DC63CD6419 +0DC194F54D61BEB16071FA5C90F95DC4C3F562591FF9A2A63A2C4650865982E7 +91BEBC25FDCC286F7676528F957D263D0427351CA785913D7A8A3E8D432809FC +4450AD63F85D6305A0342D283E125FB0B933CC9E43247ACD480B48D069E2E495 +E18B9545A11370A7F168E3AF9F5291CDDC42D5156D9DF2291AB356DA52D45F7E +291B08922F2A90E80AB0F8844B54DBBDBEBDE7932FF7434423657F72DF60BB46 +EC4A759F33FFE566D772AFF7344E64D9F0AE948CE3D304C7306491BF51B2C886 +23921CA1A60BC33A2F8BF231AA6DE06064B3ECC1C83002CCE73F2F5656FC1CD6 +2B4F76326C0FB690930F30284322A9969969D9F59985ABABBE4F6CAA0D2D0FC7 +12EC2F4387FE9ACBAC666B6DE8B56BB7FF39A9F5D20482A4BEE46E23A37E178C +588D0D06A8DCE84C8496A367385C1482BE700D5AF732559E4A4CAE5BC8151AAF +1927F61CDEE49058455A25968C08491140AA6D7D90C5D48BD580E8FCBCC2B4B8 +D9C29CC7186217FC02FED0388F55AA640793431B65E037EC302A19B3B33EDB6B +4E61D3E4541F0B9143FDAB7A3929DE1970ADE1DC1BC0883994DAE7908AE5561B +DDBE61E930AC2FBD643E087848073710F00239920D8E9AF7F8E8BAA5BF9B807E +40E72F81489FA67B449644D3D826417990CBBF93EC44F8DCD230F5A3D9984456 +8B03802C7B4B22DA23715EBC245FFAEA7B0E32627F9E71CC94C0C3045FE52B62 +5486471DA7BC5FEC56A1BA255F3AF867EC3265B3F4A63AB0271F95488E267C32 +112395F977FE1DA953507136DC59FF3ECFF1EA252FFB82CB1ACEC541F5CB2AC3 +FB35AE5A4971D5632341A16EEBD6D9F2EB5F453AC9C96238C8265D792EB16E58 +244559A6C23C20622D44F8FBE9DD731FEAD4A6BE66CBC9B95A5BFF59B0ECBB4B +E17EF6D3E423A8E49C96CB4F93EAD4DE2335AAB02AF12FC2A9BC2FC81CE526C2 +F64A473FE386DFEE4E233EFC588C5B3650A72C30D2AE2664BFC0CAD9D5BD6433 +BD67298B1B6C990D5CBE4FD20C1EDFA6839226E606D1F66FE59F3EB47E35C567 +B1E937F9061289E90BD151BBCE16C9ADBC8C65D09BD8E9F87C403A0D05FF3D90 +3015F7E89465244616BA1121951C092505BAD32172BC5516645B14D60409B2C4 +C94976B1DF3CCBC33C66FF4F002528B942E88E8D2FA4E1B098A1FAECCC33C591 +1EC4AC61596D00B65C6218273819E46BE457B9C4CBF6F1A778E16AC64050ECB0 +C65549AA2528D51CC11D92E9A8E9ABBDC4FA91651A661C855919594A235E6AC9 +E3EF824B79E3088D7378B5055D155BDA9D7B909552AACA888B43C22188F2030E +5E7E8A38174E0237C2690713AD73CCD5262D3D8D1237C42A1924E5370568279D +E9D5B05C39E009B491094AAF4E7EC89D04BC4A9A2892A47F612FE169CFB3677E +557AAC664BDDA6020C6D74FDB5DDA927B9112277D87C43DD5F82A5633693C2C4 +80B16A9F6CA63366D28BDE65AF9B6C6A3E035DA5792D61BF3198BE6E0C04D0EE +519E388BC07530011FBF532F7E580760449476AF8067710F9F222B1E71A8874A +A0A5C0E2E813288322698E5C5C8CC7493453555D7C332722DEBBD0FB3EAC6246 +93939BA42CD6905AD16F873B14968C340F6CED94E8E8B28C4DC3B31CA9BD1E4B +2DC161FD50A44CDA71A0693483F1A7B41FB6F5833D39F638F54D85EA0B187649 +38FACCC8CCEFC695C9C8BDB87713AB89726FB69844ECA220595E123A4BA1ED14 +13222737A3304CDDBB8424D306518C6FE3D3C2836C0C329E9223AF0BDBAB627C +4344A00A23787E5969664778171B11CA2DDC70EF7AE514765E87D20DFBE9F39A +E1CF8F43F8EB9AD584F6A9876981C3901DFB457B04796C36D6A261BDCE3F1BFD +7945CC3BFB731769051686F1F0A877FA8DF81D9E72B44F3DD953DBE3006822DE +680F834BD66F9A91F26AF44C93A6BECB1CBC43EB27061001BA9D0F4FD8992A1C +6E73FD209E793D43BDB645758A712B93D09237732AFB2E5CD6093821DD0B90F9 +AD613062AE97713B69D89DF13D9C482183491E0CC03448FE256B885A157F0905 +DDB5BB4EDF93C4841B87AA52002F48AF2E76EF3C9862B95A68F760C9FC84D7C1 +C5E44113F2DD335F4B275CC3E458B9AFCC95060A2006037E2BF6E3445CCA6573 +FD22ACEDD9ED69E8F502B1F2D0320639250C0F356ECC43A27CBF91C87F5299A0 +A6613BBCA99A1B2DE7C05DCD91EF68F8319D3147254F9690F84419DB8ABE8BAE +398CA709A4E779307536E46F9E0BFA44F99C296019C87261E2B31A99D888499E +87FD66622FEB5F10945ABFE7F92688C723EB0AD6676F6F0B492FBB2BE7071979 +1B3154BB18E9389670E417B0CEE5C4873E5AB870CF14AFB1A601F6679ECD0424 +DC64A495A7D93B659D2A265372E2017E4120580E65178F61FC4558DC9EE3318B +46CD4F6DD2BCE71811AD0616BBCEF04C8CB91A3513694C63C13AB227FB99E175 +BF7E4EE6B5C264D76929E24518E4650CF5FB25D07CB75FBB4A9EE9349AA2AE69 +CCD0B30D7A1248281C6A95B98792933B45F5D0431769031F2D7CC45BDDB7BDC0 +D69ACA7D8BB1B8A3A06A1E6DA6CA290D59409DFDE8D154E9063A3C33597070FC +5F7E46A281DCCC5B5F6F840651AEA70AC412BDCAEB549BB3F38035F8F8B3876E +0E5EF8BF0F76D6495054BD4EA05CCAD9B3C7D438DD6FD963410D4C0FB5C04E74 +EB96B9258C08CDF791617BED9400B36DEFFD20DF6926917DF01FCDA0332A6D66 +EF42326069F40549FD62383BC26643680ACFB63EB8602BCBC19C6914C36874C4 +FE9368E4ACAD858A877EDDD5C6FDDF24B1E7BED3E2EE4E6029E3E6A89F513EEB +B56D50D7D6F4BADBBD464CA5B55FA60586AC6FC72890B28F836FBD9B19677F81 +CC9FFCFCEBF20E1DE04A2EDC60AAD896E25780A52EE7C5937ED25E3E80677650 +7B0E50C9C1F7D5F01AD68ED1049C2C1E36533B0693C960E4F9881FC8137DF6CD +00E95B425D00BA7CBFBEB9D787DF8CAAEABDA5A8612EBC1DA63D695C584A18DB +C3BF2BFBA90F16926F5BE3E945689FA0CE072872AE3DD8A5F917BF41D15888C5 +6BA972EFE29014BCC6044AF174E7E1354EA0F2C320F8F26E4C092D517C8A2C30 +8F3482388843E60764F02FA1EC26BE8AE517EA4B0762D2338F505409E4E60AC7 +F78280A9AD3BD9988DDF47C4FB3D7BC4D33E4D6CEEDA601E7A1FC21BC4F40081 +830D6224C3D433B4F2F1D1D7A2D451AE49B0C410A3480B69ECEDEB6807DE9DCB +3C5A9B237C03DE62D5CE10C507919B65C34B8522E9C175EF24BE5258CA785AC1 +72907A9A5EB54022123FEFEF9B1080FEE0CC1FD338C833C5DDB5AEFFE2FE5B0D +A17B14D74D8BE761083A5045399A9D3F8FDCAB0D2F86083D5D6795F9F631A728 +25C5ACB2267C0086E194BA3F3554C0E94602FAF0783CA4AA63E7DB6978103D29 +0E7A4BB52E90034FA9019232C8FDDEE30905F69DFD6FDC78A0A473F5AE7CBF82 +936636D8C3E6C6E8AD80119A38B8F833EAC9CC41C2110DEB0C7DF59B57FE22F7 +634EA89533BE3A8A9899EF54E7E6BB72820C9FA9F1FA3DD7E229D2CF56290755 +7BB5B672FF1AEB47C0966AD1978EB09B99E93E01D70184F37F5D6168251C0A36 +3C913D292428B08CB5ABB142FEFA0EC7621CCE428D3578515CABF820148C0DE8 +B5A21FCBE30757EE2B6E9E8A15F0DE4C0D100320DCAF26D06E39635262F45A52 +8E3F27DFA8FDAD2BBAE2E16B30B415D791041B5DD1818353552AEF6519A868B6 +F1BFB416B242A372066BDA80A0D077AECDD024C0DF7A3E590C6F830AB58B8641 +DA426B0FECB45FA3FC7BCFEFFF124AF6A5AB3DB6850831914DE4CE174E844F18 +87C469F610B6EE45AF70E2FC50485FC2963AD372BB1FE75E850ED5103A982972 +EC88D242A1A44EE80DBD34EFD28ED1AB9BF11648EF0D1E5DBB22E4716FA64564 +5C91F9FD871D120B2EEA0AC34BBC208706F2C27F4CB8D1F293119A155992A427 +85C53050C0E9FEB765F2155CB9F44C7213D906DA6D9CECA44EAE0EC7980E3EC4 +974162E61FD00A9B41DAE5CFA46C45E3FF040F58CE2032E7949171448AF62492 +24A61827C0185B11F10219DA6D4B34AA9A5991F3C0C5E39B6B7F3EE82858AC38 +C5E03D76E3650E188C2B53933AA36415FE06F16F73FC7E9D97F936FBD24C1EB7 +400EB2128820FA3CE0B92B5A2ED74F7AB4ECEF67290FB8B1FC1A63F886C30A06 +571EFA15F713C5D7683973CDB4AA7C1B6D4DFF4BA9D4076545886BB4B66AE113 +3B1CF78EA710D5C33C4E33CD0348E60F15137602AA974626666D827A748ABD54 +07E8F3776F06BD34A074CB1B74FCD8076A90AF026D20A2151041BCBA74D9279B +C1FD9BB9274D30A1E6CF963E384F93708691C0FD24537B92BA2DD32404DE8F6E +D2DC16340DC311A3BE9065B57DC5A6A47D9751068869CBCAC02C580F657201B5 +FD574EE2D1872513BADEA46E926B04C24C8ABE0C6B1E6905D9B14B3EFAB1BB3F +808975E72FA7141AB2F31AF6555F99E3572D8E9D8C603E568D77EE0CD3F9926C +C22BE8FEA7E2E4934716E6EBB16844FD6D13EFD61D5E21716AEAF1C99A501312 +C512F39291FBC0B7F06DBE59B522F38EF4726FDF78EFCFB6DA81C0F0DC853CA6 +6FE5AF0D804C8E0606DA77D8304433878816AAC947D5D8FCE1DA0DA300A7D5AB +4DF253F6682832FEB0340E8489CD5C124026C6D67D3A9C73E79C800F6C327DCB +B8B249AA9523A9986EE5FBC8710066744A3C3C1CBAC61816332327B514B039C1 +7F27FCBE9A18E3C5D22DFB3AC1A957DA5A2B2558C75E0F581D3E8FB4145A71A3 +D930ADA614F631933C8075D097610249113F44B9DC1A40DF6A680FF5A144E955 +693523D7A73D88C6A297CC0746AC24FD8EE5AE98C89CDE15D269466319D6B37D +E375136E7B07E6F6E6C3AFCF3F1BAA43652BA42E49F8AAD5FFF36D23E9163423 +3770F602C407C7434E19092B0B612972F47A8604F46C56C5AF358A634CD3907A +A57020509D2380E56B7B112C1F4C5AAFE3A447A3E6C7E922604D9642C003C6E1 +F6DE327BADB1142FCF9B7B5993590AB6AE199EC5B021CF14EF85F816859A40C2 +F88CB2EFD9ED40283E1C0E0AEB3930BF33604149CC65A2220FAD2EE53DAE2C4D +BAD67336FC89F99AAC450215A318FC043BADA07A56DE65B8A81FC5DF0B61ACF6 +552E03A2DC3B301494E89A014C958349B438C6ED0A2771B13C29A376352035C3 +B257CF88AF797AB6ACFF0CCA4462DDC9B0EABD03CD5B05008BB3C552D457F81C +BAD15BE4C7CECB2E2AC71417857014C64A9CCA0BF157CF21125C6678B2A8DCA5 +B2D25F2554BB61FD02706AE513CC507C4DFFC2025C5B8BBDBD0F1F1195254F6F +DA941BF910E0CDF516445B09A4AAAB128C62F4BA4B9566FF29C5E563BE12DD2C +5301F4E66CE800C112BBF378E6F3ABBAC5D39333A1D51C17065796F8A410E4C9 +AC918B945235CF80C63C0FF32A58E635026C41A18838E1AEC97045998CC00CF6 +00B5AD09DA92B8C43306CEB793F2A38BE979449A3023B9E3D7B614F3D7DB0767 +F33C90719E820DB7B2AFD66A40846A82259D4148B7D92E9AC3B9AE22959745FA +D59836DEE8E3303F6FC95A513BF8F7C76D7EB70821013B2694FB2691B31503D2 +FBC9DE2E1E8BA66A2BD5A51C767E3AFC20BD22391BC9E6D53491C513B84E6A62 +50F3A04A5CCF1714CFDBDCC57D09CB45054B2555D9EC59E1834F8B415573FA46 +54190E4E727C4588820E9A71C139238D024952FF8394D6F8BD8485C58F9D367E +3B4260335BE6E8960D72547F75C9FB19F382A596468A838E8F92837D55422147 +E20D7EB823CFADD691D0012FADE67FD5A61E0B5626CD364C83E1969E09A3168A +730959CD3D3382B00B1C8B733DCA57FEBC6C8CEF8F5FD305914DA3469F77145E +8C75F76DBF30B05F14BB22039A62C825FB310ACCBD0574800FC330618521194B +3330AFFE37CF85674B78EBA968863EA661C9C0853B67192642198EE883E8CDE7 +819F372A3CFC4AC0474CE23FE91A2E54C334288DA4A7F900F8C461E6BF299962 +A20A44A4056805AAF1CCC6410711F68001C01CDFE9BE9C1FC841F48590942E8F +0BEE595BA803E2EB5B171E891E68F51A8168EB56971FC6E6DEF12389693DEA92 +B901D6E522E098B2713ECF54B901CB8484DC449D27F936ABB4DCCA0DDC259482 +5FEB3827DD27242A12C52B7D10A665B3ED7ABC10263EEFA28DE86DAB55F678A1 +9F80AFD47CFC1FA9CDF4B73E2B13A8684D706511695774F67C071403E2FF29C5 +EC429EC5F1AB071CFDE6E3662E6169904658B6860F4407EC06C7E2630FA9D04E +4501E4281249E1E17F04A3A2F1E3F59332B6F5D4B19F245EF43D5F7E278B20A9 +111D5E0861BCE94DC651389C1DB89CA3006BF570992F821C28BC8C970658387B +2F85204231B5ACEBAC1CC590E8EA9DD3A6604B49850F0D46FA4DF2DF0D018FB8 +A5919353FAE01491EBAA77DB74F10605FF7702D0D598E47DCB3F99E0E00A1EDE +7B1102AB66929D68C5426C581B53BE235D356B5BF9239BB6221D3088A9B38C98 +6937AF0BAD38B1318B7BD5AA659A2BE98E10BC456C3BA2AB26935F4A1F992363 +313379E8E0358C677B0BE5B7D23954FB05B649519CFB71A2B50AECE3FCD73B79 +30657E91A3604D29C4BF236A6231C7BB73A3F978F1D2DCDE948F341309CF6D5B +DFA5566AF291F0B2F3A7CE21D8C91B5151AD6A93E7F003805886D07AF2E4A6F7 +F01AFF27B73E7E629D61216E13131E648C46BC4ECE689EAC53DF65D168C1CD66 +26AD07FF78F4E5E5E0699DE2BD0512F97D8732E734B2CAE0CE2BAC2B443053AE +98955B6EECB7FC1F8101E53E35EFCF8FA439B225FFF2B7676529E574008F9650 +77E52080DF20FBFFE1057B46DED128BCA2F54F22B3D08D599CF42E4F1B302C4D +3F3EACBA2C2AE854E868C4D094BA6B1703AEBEB2A3A9479DA3F32D44178DB6E1 +829733CE03C99E4D5A168D364D23AAA31C91A0C4C7F133AA97BA99DD395B4304 +3DDC424BDF5C5E152896E47F32C6B0FA68E3D946FCEECF1CF08A99ACEFD8DA9D +73EDC5DF96187AC908D2714913634860D782B225487A3A10C8B554F3295D0221 +716ED9968594D800086E8473163852B40F8D202EBBD49401C8E86E01A0499064 +30FBBA59BCC42E9B2382C689725B80780C57112F1060850787FABCB3E4C94845 +560E5F42139A8A015BD311A362F09F7673A65BE8071DF9AF8988561B87943A02 +D481ED99A276B3FB4ABC5833A12124234C34395C1DD2DABDEBAFB661EDBFFF45 +1DECCD8A6507FF08D5CF94E9CECD6A8A858283210812FAF06FC40A672985ABAD +326263C49B09434A0DC3D014822456E0D7397513E552FD0B640AF4D94845B640 +E9A34CD6EAF3FA62BAAC7CBDD783F4D30904AEF1630A4BFA1DF7B0A02BB479BE +54E34D0460986D076A9F665657C16D5A44738037BE23448B3459EC5EA88CFBC3 +A034501D5DE223AD60CF1CF8BAB33F25E17927C72F941E3839CE2A0992937F2B +CD1987AB4B5AA20B328F0B887112FC03B49D86E8D456A5A1B4B51C47CE7955CF +E965E6872E65868E1E7CF79BC6D0B014DEA3DF5B7D425AAEA7066E9C3209B434 +1ED97364353C337EC00A09B2FAF670A03E53369EA4B7918291FBA39CE1980E65 +AA15C46BC702B4B62F44F6D90BAF54C04839C6A32ECC51BFF706A72DA5A6ECA1 +E406EA945B572B8626305D3F7086445C32F6052B80FE04C3D87B3329B34B20E3 +6D73FB023383B646671703F14B96F16DD7E40AA4679862764413357373A9C66F +0AE451369BF3B10AC4043A3557849AEFBBD4A3C67433C87C1AC45129B188682B +0656A79806436C195AF965617D7FBB03DD7B3EFD21B4B517FD6D7D9D87A43AF1 +EA5E1E1CF74FAB8607284497813011519D6BA9517DFAAD6FBFE984C1C6702E8D +11B38A9214F20141307125C21565E68506139B2DF3457AB87A55D1E7F042E7D9 +5DDC18E63BA012D1E3F676338DC5E0DF447F4AB47E8C1C33666442C06CA9A11C +5BBE0795806AD63CDC33BA5E9C51B6077A5BCD845FE4A0F3227CCE5475F7806B +EDC20AC123D34CE54384945D9CF694ECDE779FBAC502D0E1290EE53F5C5C0E5C +9B5C842578B503DB0339A38C4DC28E46DA1107CE592CBE3362F5ED8B8002042F +BBB87A7C5BD25AFDA7267FDE243A4D15F2AE330A7A39AED25A88FDF019239E37 +747DB435A7BA52D3FA118BF3FE4F0D0B52A894B556383C2ED16E22716EB8044D +8740AD6CB7FBAD446AB8397E3843238221C28E4DC6D5E627A9A847A69CFD7207 +783EDDF7E86859317BC792A79C8F8164DD +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.1: CMSL10 1.0 +%%CreationDate: 1991 Aug 20 16:40:20 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 42 /asterisk put +dup 44 /comma put +dup 49 /one put +dup 50 /two put +dup 65 /A put +dup 69 /E put +dup 72 /H put +dup 73 /I put +dup 78 /N put +dup 79 /O put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 89 /Y put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-62 -250 1123 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 +08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C +30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF +C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A +BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 +5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D +43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 +374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 +DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 +B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 +63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B +89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A +5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 +C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 +7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B +EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850 +4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5 +7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40 +30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9 +2E080C10DE923C18AC1BF8FBE2225CDA0DD6A2030D4BBC9F539D6B2359239A8C +F41DC6D36BBCD3B89945A85BBA233B855A3D77876A5418EE11DE2B1C501C8280 +73CB390855D0C3E7F0AA8DC1F52C72B1BE0D2DCC52F46B66A60E2F950D78795F +6B9A833593A53A9CEC303A695BE815C4FCC65EDFDD46555EDDFBC6BEB2926852 +B1049167B0704384E1B13914D3075CA894B46A02D787AC826FBDE001AFE9559A +51930A86C7EDF6C47D8ABADF5757E0F5612C5001C8D3326842D7DC41FF034E91 +AFD8875F790FB86E078CAE8B5B692E91D26E17911FAF2F14C89CDF6224F6BB1F +9D51F02E167163196D7F9EC9570982DA68DF56ECB84E40B75AEB2284FD51A06E +4366A3B321D37D320F5950BE6B5089B63CB2A3E10105FAB32BB5CC471DECA17E +3806F48AFABB3A64A252385913833C019268C09433178CD2C741F51EECFFC3B7 +72E76203B758D1900430162C35C03015D2041CFE0DFC1F38B8AFF83ED0CD2E03 +8CE7A2DD7037C168AA38223FF4B69CEBA7F9072CE8B1459B4CD8BACE2C0006ED +67616FFD9AE529642BF13E5E169444C2675C42549F0BBC849FAF7D96CFDFD0EC +CE7A5DF7F6C51AF5708B3DB2A72F8B94B3B4D86AD668D9E1FDE093686BDD6868 +5BAFF04BBFEED3CEFA61419AA6DB6842835E95AB10B233BBAEBB59DD3147BDBA +529E8AC184749496DF3D919DE658F876B5EA2D6FD89C680A64F1631E7CBB4A9E +F633DADBB1EC36EED304B37EBE1CF698E63B8328539AB6B16AD592E6DF5F26D5 +969C9A949EB3A6C2587F61FAA472E4DFE27F4FECC9B902A1B169EA8B60E66930 +0402A174D0FCF534BEFF21460E909D99255F8961691B95193430E0CF198F26B8 +63A83A3F47BAAB3AEF04E39D0432F0C13082D35918BAEA09C7FAA0E93FEDC258 +9EDB41E55D9EC83C30E7E0748FB941CF773000F56537A334AFB700DFEE7C610E +E1BABD99EB26682BD9DA825C75C49014399AD4F9E313D4BC5D260261C85F954E +A54741C03BD9E6C91004706EB74BE58FFD246EA736E843F1D3F38A5D98D1F8A4 +1E03620888E75EE26463D4B9AFDB914EA0DA8E332693F73417967F9642DD8FC8 +D6D41576E6A0444C0620E9AF2A546479F9AAA59D6C2C547DDAB0C41FBFC76A31 +E39FF23EC8CC50ACBDEDDEAEF048E3A925CC196D60EC5856CE453F4DEC63E8CD +0E954B2941E0DBCF9B57E8BCFD621E60D6D1ABB052028CB95076B9C04C645286 +5E0C554B7EACC4F614AAEE68D8376B2C1E30B664DA2C9F4F4EC403AD9C2FC246 +F96CF79AAAD7B2BDDBFDE889CA70F8CA0E16E344DE29B4A29F222B89BE1C54C8 +42405CA577AD975E5BBCD37BE8B8314429784B04B22D78C347BF0FAA47784612 +100741ED1446AE6D80BDA7C945C826C8117CEF0A3C3DB3E08C44402C2D9CF14F +2C68CB9B96051CE5488F10C50D4990342687DEF23982B111AA330AFFAA723300 +66A5A5C73FEE04F0BCE0EE7E3BAD08ACC64C169A72BF1A875A1E3E6F04D5C81B +E622C12FF806E1BAE08BAA507962682D42388CEDCD1DCA2B2A9ABA08AB19BA31 +E4B7E1ED8CB498C112A9B485C0638D7ADB6055B24E66D8D4BEECD5A4EDF394B9 +C51C5A54A5321A50C6F50ABD2AA1A253C066A53825A13B70A6212DC4BE41CD25 +00A0C79E4B634DAF012D9D95F78B462FEFFA290155F0B9AD2175A5A0B0A4643A +D6264A28D52A847F4BC2879F4FDF7BD32C4BB48EECD6DB385365EA115D9226EB +C4C8B5182A8ABCF811553D9A39F9BC8DE1E3EB556F5817AEF2126B605A4B015B +53C2BF69E1ED317AFC575141980456AAFDD30091815F08B9496D280E6D6CF4D0 +33DBADE7BA13AC91722A5B4BCCAD08A5CBD321BA281FEFDE7CCEF37B270F29F3 +1DBB4EDEC801002FB8667BFD54534E75881A8CF835CAFF03D95CD086340B14C1 +86449424907F224D50EB80CCD5C1AE32C5F3593148EFACE9ECE66536301BE18F +E6E0FCFF6CF346480930AF015E2B5CD6E5B0371D24DC4D79458F4B97E2403430 +D8A1D7132724E465612913EB780D416FEFC78233491AFFA33D39DDBFC0494B77 +B2D238CF4F3964D6DB0E71E108169BDFF17CB65E7FDF38F0693F1F8D3C154608 +FBCC89D5BCC050990C405653A2E29C5883C8EF5AA3BE37650ACBCF7A6E27A915 +1EDA0DE8171DA47FBDA0AEC8F9011439E88C2A601A76EA49A14E7CD30C7B3AB9 +9D051C105A367A41944E9B0115FD9FA5400F18D14E3F37B04AFE94F50AF7A964 +1F58C8E8AE5086ED8C94AC7536A6B3FDF7C07306EA8B7C37E3FE11F929887E3E +9C88BC265521CC644F664A7191C2BC51C09CBDB578D9439C291912405F42CDAB +8BC116611522CD2DD21BEADF45C93B7E62CCD87FDBBAE77AF779915E1FCDA9F2 +069AF4F137770F817B63BB44A28760F017ECD8C97980A214CAFC4E32266AB19E +45626434C4247B4B215409C94590A0FEC286074F997B458E7DA64A51E75E738E +669D08853B98AEE3136813AFF7A907CB5E2E4D4444DA17F8B3A63D5680DE9616 +B105C4B396A14046A196AA24B59A5186F3F9238EA8BA47F4715AFEE5EB5DFD07 +ACDFA5F8C9F34636E2AA548419AE15844C525F9C464036B322FBF73B8234B225 +7C7CE45BA27C971D62F8BBAF2911CAAF79B2834C0E4CCCE63F58647822B3C31E +70B53F25D4CAFED1CEBFE062B5B00EADADF20B3011BC057D9D8D51485B1FB174 +33661D731BC9054872CF4C4872849D90AFD2204E7C095D302BBD103FD89F25F0 +A42000DF3194AD1A5EF67B07FC717EAFBA9BBDA898CD317417E60F6EB5E2656C +92DC4E003FEEAB76EEBD8FA4C073A0E6E2F4DA8B3601AC0EC8216BC9ABE08773 +0C49EDEBE230A22C717A5D8CB85B21BC70EA97458E8CBD2F9C5D71666941DF8C +D11842D29FED3B07A7F8F443B686976D18124FF2047EDA675E2B666F29839E05 +535053F74A6AA8CD512530F53784A1821CCDB3DC540039353CA363671C1D696A +E24F86FC1761966341CD62FDF4C35E69B63117B9DD57F7523272CA31EB61F711 +7088506DFB618DF071E107278FBD1C55CF28F1FA563E65D7CE1AF3C89941EAF0 +B6606FEC9B52291D38D0C90BFBD92A8D87BE8E6FC26273B69E5DDF79E70750D8 +DDA4C123C9E2C55A1891DD32C0ECD45332D0BD55E31041ABF3E38EB800BCD51A +B6A3AC030C4A4F71949BDED99F89B4B79F2B793BFE196F6FFB4251ADAF78420F +B075B528C0065A42B25FD8D9BD861ECD0DFDEE641CFA4BE33ABDAAA3E840229C +5B841FD1F81ECE1352DE75BE19EBDCDBED06D64926325CAA2355BD19FF8AA895 +02D0BBCD021B20405AC6F951DBBADD2F35D40813376DD0FD133D8B8C6536428F +6D994EF518C84C2404846F2F20AEFFA435C169B4D49D5078527024CC3DD63E20 +D17ED3ECA36790B330A2BA6B880FF8F1514F2DA145CB2951E5A5D78648BFAD43 +A0EB8E46468927A65239B41C86524C7E5C747FAA682DBA7226C8EEB7F9E595BB +69E5B158BEF6F4A9E5FBA17B181669159361E08BEC85D8AF29BA2372939B1EC9 +4DFBCD30875DFD53207FCDBCD95A1B4F73194EC8736F07C9A50B38D784F3395C +446E1297110DE73C912C67855720F257CC60E30F7BD257C08C77200418A19CD6 +3B3AAF2054E1A411EF3EF7FEF997EB33C8EE6F197C8B2C876BCB113CEAF0BE95 +DAD6D4969BB9A3A9F7B527529CB4770A367325E732619DCE0EC17F64D1AD7439 +6FC0E701BAEC934E13C4C4514A0B8E5E607B344A8066D313D0DEA98E5EA4DF15 +6C31D2BA20B8F68E3CD47573D79D44249C45BDA475CC4EADCE9C8A447745C288 +73E544791B256DE85853B228817BF3234BC9715DC7E4042550F1F9A7409E90DD +A3D84B631CDA78A50AC1C3C9A45632FD78B3C2DAB79BEB134E6E1CB52F5C49F4 +7275BB4C962DB61342ABA3558A6C8E3499B3E7EE976F069D10399F8965F6E557 +1E59B2206DC1CB052552028615153E0E45B9F230242FE06D21A1AC5C780432D6 +1E1C058F7751C9908CF9FC85D58FEA01671C9E9059046B5DCFF8B434CA359995 +EB839B9EC905CFBD82AE8DD90E4A6F9FFF3B8F5E3CEA9BE6E525B5FE1E987B0F +9E7DFA55F685A92CAEE923604F86C6C2451B3EF7079EDE8B9BDF2BA78A17153D +7162F9C29E445F5CA7BEE5753C651AA72D17210D82ABFC46FA9ADD72162B577D +4256A767F652133A27220E2AE63AD1F6F2EA7BBDC605D26E510BDEB31E7BA36F +3CC3FB4E58F0053DA847AC21DEF08BE1707CF7A3A1F3C31747D803A9AE74D4EB +966469E8A53FB27E49558BBC0049D11D6BFE27B663A045FB02C6C8C0F46CC5DB +2F3A77C2D6B18B21B8C535225D7E3A7C7EF8B2D5B2263460928CB2E9422B0D47 +F115DB92E454D7CCDC32D067540C04BC37F7FBE758527BA6B76B5FA91F24972F +69F8C8F67BF2C75E8F671A2B9CFDE7E1362A3B9087ECCBC4FA2B10565D9F2FBE +070BCB381CFA8429A2099766CCF57F574E81581B248E6892679DF04F8B34C591 +499C1D0B3AD5171DB93F6481E8086E93BBD8C760EECFAE98D84110485D7CC0EF +854E9353AD3A3E32C63E8432163F5B3723AF4738C1CFFDDBBEF5B18ECBE36CBA +70F237522D5115A4FDA5FBCF9CD06D99AB64917CE5BF3D33DEC1D2953CEC4B08 +DF4E6E938F64AFBFCC1362228420088B57028063E72FCEDC9AE4D43EAE5C0CD8 +790BEB96C0D4FE43DEBEBAA1139808277E7EA873AB4E605CE9C69EF7C63E2905 +E0A43AF11DEE11D677B2EC6D3F68DAE948CC5C1408A26CCDC641273CD2EBF3A4 +F4E4DC3660FAD51A9DDB368F383B012314EBB4F030A1383092E79091EB2D25E7 +7BA8DEE101FDD268A159C0C46B01FC6200C31087A0BBDA4325AF70B2232745AB +BFF5023EE6CCCAD7443C6CC12DBEA5350B28A1D70812BE23342AA80C59FC81B7 +C931030DE9A322D9B1B1C14CFE4E85A094D33FE36D41E90183BAC0FA97C4F138 +02FEA1F510DDE414EDD1C9EFC47764726CCA3C2C73F484E5CF556BE6A0DC55B0 +A0E008009A193880CAB90D854BB1A0CE6EAFBFE6D1E3A4C4D900BC6099DDE867 +E96E02503DB66E02F7AE2A36FCD015BF58AE5EB115C1B80A9332A8748A52F8FC +B139E87AF5ADB045BB7B1A3FFAB4E90BC34002B2F6916EA804DFFFF1F65C4E97 +C4E144BB6EDC906039C71B44AA3DDF5BF5F072E5687B07096828D25065E78DCD +A39620EE567E59153DCF1D2FB690C156569165AFD93CAFC150EFB9BE4D272776 +1579D3ED0571464EC089B2FE2D655F4D260C370AF131CC53CD63542E362B9C90 +A2D0434EB6E3376C634CB203B796B4D5BEAB9B0983BB197F58A7F0CB3F52EF73 +B73964D460DD2589F392B19AD2FB9BBAE1C39D87553F624AED4EF5AF339F30A4 +EC40DB9A29D4A384B68DF458D35C2602165C2226997F86DD42D4A0068C03F4EE +A1807451C69EAACB81772BFDA7F46F16E7F7976D6A4FE8ED08D0F2BE13A1055C +015647C14154358BD58990C1F86AB962D80C91C92FE2720268B38073076274BC +DCA5B8B0ADF8851A54E12DA2EF3BA6AF7E9D83EEAE99FEBFA2CCC4A09343A455 +014C9306D155E8D8EAF9CEF6C6C6143E2FC385F5972485FF37B67249F2A56A0C +23FFC3C2F63976BC6E2455C36B4C1C09C976BB684A7EA770D34B348416EF27F6 +0D8F9194085FA4A554670DB1AA724413518419E1A017B347AFBC2F6FB5FB1539 +916D2ED293B818699A5443E88F10B383537BDA76C31E4A270193E557E7C45FBB +0B65AF75EA093E4F9E813B76CC48338205C7A931D7F00B15ED2C827624B5B9FD +35157F58EB85B0CE8A035200F6340506A62E6ADC61F5B5E1E9F26D9C2DC3D6C8 +4DCF6B37FA1BB6BA8D94DB0BB51DA77EC62E119B37DAFE27D8FC1373482EC73C +61A52BFF73D72299963CB4BA533117D8FF92AF9772109BDD1C31551DDA0EEFD0 +DDC0CA2A38F676777ACD4FA88AF947645967122D09C5B66D85CFD618822D8B44 +96589D6BB3F2CE00D39056AEB065751490FE39DCE3B1EB4453FBEEE0E5E79381 +F533EFDC302C1FC4DDAD947F0FA29C76EE524E66938B7A2D1EE060EC50ED9FFD +DE8C8DA759D0A5EEACE2957FFA717E13E02E7D6DDF6981D72451EFC9C9B5DA73 +05E5DC46F8912EA7780848CBD2E171FDDB96B2CF79B8DF58B66B940F63346458 +BC53113C2280702579109C583547FE9A2CE7A1F0E6C31FEFBC81856AE022C74B +1E89C024392DB8F2B28EEE5AD31371E7BE919ABFB7316F288719B0D98C6D66AF +37522A3933C3BE2D481500C67CAC9887E68312C93639BB0A382999D7BC1F7B16 +E94C4300DC17BA263715B7E57398F1EA872A27DB8BB07066B3ED04EFF0F2DCAA +4C7B2C8127AF8D1C2512959B0DBC59D1C704E320127A3617DFC764EE03BA99C9 +02DDD0378BFF1126C32F79CDA9538D5DA1C5E837F6CCE987C76F6DEA4C48F166 +72D6875FA01166DAAA78B4CD21D506E2CC10F8D01E1DA46DA50B9E27724024E2 +E8A860FC66A48FFF899DAA88CDBBE5122B773761C97F2912D9E56AA4B1B97B86 +890EF9749483BE4BC1B8AD2F72782D366F0288B589540B4D7BE39D818DF4E500 +D01ECB913D5D2B79E330012B1E4E704493A68255782CBF81F3A2A4FD53D22CDA +AFAC712132D0F906F1FCAAC5A7A8D2BE620FDC2194636ABAA93BCDAEF7E72E47 +7E262DE750184FE2BEA2D84454AD179862FD5E9618A9CE4DFBDC9DD1259056AC +36C99E4396D82B387D26D0CD3C290E33AE895E7E492ABC9BB6EBEEB6D0D75E12 +CDDBA67D5C17BD9F7F962F0E39D725C2C5EFE217BCF86F8526CF172FE8AEAD02 +A48AE32AD9E63EE640C6FB08E1B5AC6C3875758FFDB7AC571DA6CECB4EAD0C3C +80BB8F34B727449B0717A0E9CB26BD0550F1BA59AA70F5EECA1AC774C12D1DD0 +E4DE30B288FCCA04374230383ABC61B950E14B5209D4AD6E32E038AB2E22FAA8 +1209829A681E7430F7F8E7C9342284949FC4B944FDE91D9AF29CD6A31666ECCA +36AC9E997DA92AF7B623703E1ABD8A59451742901683F21BCA15A79D5A5D23F0 +86FB61F81DC1B405535F39431C54E53C16277F145EFE363BCB1EF1471A0B9D24 +E644C8F96B826F2D7697A008BA17705865D9BEBDDE7A8204393BC34086F82352 +DA9C0E4330502B84F33E3F53D7303CA62EF81789FAF1E5F53F2A9E5780C7851E +6B4A9BDA871188A1AF75BF5D8E1DC2E88FFAE726D4566B66DB9A020410B54162 +28F790576FE59251DF47187846B0D69DECD5844C6FDDE81021D9EAE38CF44040 +574058A2A706E8F21CF1AAC6119CA3CFCA07C8A0E5C436A2C4DB6B51F9C0D9B5 +1B123E6D71E4B26397A9095722D5FAC0DA055456A3B04D1862359CAFEBDD7944 +ABBA0567BB0219DF005AC268D23EF69F2490FC929AB405A887F6401F6705F982 +88D3E883ED94A659F267FEFE257EE6BDD9B261B0209D6B47343FDD562B2E74A6 +B2FCBEEF091C2224D043403C7975686FAC9A89B44E09FDA6D96B895392858BE8 +E2166425C35501A3EFD25DBC5C724AA5B4B7DCA2E0FAFC3EBF4F41DA68B403DB +3432BB7307556B6DBDB22A610C271BA11EE0B2FF584F6806188B1EBF20535A10 +132FC19333A4696FF2BDE87F46EDCCE72B0797C418DD8ADC2FBADBDFE2DAE374 +473249A1A65597383F7F7A85C048658747DF7AE294279D3B9F3C01D38DF21FED +539FB266197AF3D6EE8D9743C937F44E31B03718675F19B85E3BA604CDFBE1EA +888953EFF9CEE3DA56A40C795C0C13185DF2BCD958BC043165B998DC6BA2E088 +9665840B8FD4F10FA616D896E4863532BA3CD7B78FE429D70C13FC5AC40EF399 +555E340D8EDD2478108D798382CE2833106CB5EB2513414B064912B106217E5D +B59A6B5D6CC073886162799DC2AA421B54AD17E387E996A8EA9B1989DFDD640E +C84409A9882EE9A901614FC629348618A8A9840CFCFABC20E25BD2AB0CDFCB8D +10AED1A28EF5813BF43BCAFA2DE59A03678EFAEE38A5A1CB07F3EFD4FC1DA5D6 +C9AE2CC0975926374E1823B0A3426507E0EF1DD8E2BEA64B968CA191A1D5F997 +9BBCC83E20D07311964DE3EFA784E86863E618574B03B740B06F433B1F876D08 +A611B54C2922728CCDE265AA0E0EA4867361C65C6139E4D5FC776AE54DD8158A +5842478CC1A5F34D17F4830C6C6BDF8872CE2A2925D8D303A93DA22218F6D3C5 +7F4DDF93C2F530A542A9F2A26CA49F7AE51DADE8E7D069582858DABACC202814 +249D8EC2FF53F4D847CE2F87560C9E1F4AF60F9B64E18046A5F75E4E2375F7E1 +7593CF728C3BB9DA9D3855A5567BEC44D9510ACCC7AE16C6A5B3FF543A9F94E6 +606BAB6F087B824B336853A5CC7776ABDFE7101F9B6635B9276D1E5F2EBBB011 +279ED882E1AD9EA838EF929B4840DE697119E6E02FB176E6623BB7B64620B62D +6D565507B49AFB7BDAFE8CB8D8AD77F01E2C4706D7BF56FEB5E9A41B274853EA +FBCE362106C6CC4C9A16203F1CC874F603BF841261EDA92474D909804B30F8CA +07F68A8BA0578E4232E58B38C705806601CE06E7BB0B44AC7CE5BD54B1DB971A +A1359694CA68A561D9492795B9F5744823B24FFED1B787EDE15888130CA70B47 +77B02C7B177C36565474A99538264A56594B72B71968BB2DF8E5014098F0FCBC +4112BD4211CE5AABC84D63449D0C33232634F23684D08D2C965AC09C088FEF3A +9142653BEE405C3643D5A1194076F03C2D66EC8B5B2C8A93E6F255D6D2D4BBCD +9545AC6F134A19CDB4A2448E389275D751D7FA00E1DDE2147D6FE6DBBD3093C8 +480172A231F5E0AFFFF07480040959A2AC805CD768EDCFFEE26A019ED359B060 +E9E344DDAC7F7A4E8AE4E463FA54A37ACD5CE1C531C7BBF15A9D203BCF64C0FA +57DDA15326A40066E9071753405C4A69533A8120C39FC8CDCF7C0CEACA98AA52 +AF3810B6DCD1ABE505B9F45AE65E54622FBB10EE876C4EDB8816BC9C78E21181 +E8054CF6C9AB0DD250902EFFAF6416D6DF2AB4D586670720F58DD6EF5A1A4185 +E61FA66E6431FA553D6C8AC0C78FB94F2042C02B5BEE2F96B47C4F7D84973460 +A2D5EC835DE7C1DFB26C716B02E27C0409CFEC11E6F87776976EFDEC184D79F7 +6A4DCB3698BDECE982150072A8F6A243A6C67169A7B4DD06301383F2191F2A32 +2BA5706FF491472EFA11C60EB7D976D328B598119E5443D8C8E689D9929850B4 +479B875433F5A8B4EDAC69DE064D73D3542066752B09E3CD22DFF7F4AF080191 +2FC9DED253D1C605616C07C7A96A446B5EC9C60B29DCEAFC41254EDD45A2BDB5 +3424BC7B1F40AF026045629409C0D4919E77A499977C5725CC4E7AC107F81A0A +3120EC253D6FFD8F5F0E43878F4B417EE391C6E4240DD78E8717F8AD4B87F65E +1485539004AFC25E1CFA30712EDF1B63D27F04753C02DD5FD045E9FC53579B4C +2735783BDCEF0E3D48733B1B4F7DFA0ECF7EA2B5BFDDFAB66BA91A4236C60601 +C32BE7E2A17EF0415FD35C0A80C038FD700A6A459916930C9A5ECB406295CC69 +6D09D5A4677A6878F118E9FB4733977F3B2C7FB80A57E52EC29FF8CC89BDDB1A +183AB1AD0627E8A2D76A4CF0475E9DE81A2977F9E7DF13DD11362E1A7DEA02B7 +D2FD69B46DF664295E4930517B27ED6A65C017ECE1D189A2EBD913773A1F965F +7FC0CE03A6F117CE4C4716A5226669483D8252C000C605A3CD0E03A6009E4FEE +CAC3CD8DCB11393F5D88232051CA854C00D935F318BF740E457BFCBD89B70C96 +D3FCEE4C0309E607CFE57ABA84496EFAF6D05C075B57795AD15C9C6627603459 +7F3C3208BE41E83B3BBF776AB7409F29A5589CB20325B4FD3A7C3EA79C11E47B +1741522063701F1D5CEA7FA4CA0C7A3CE7190FFECB8EAD8DE7888246D5559083 +E060DC36F4F82C6DB3FF34D52A413B06B74ED712691C8434990E554F57F0AAC3 +ACFEDBEA804D83BA346B98A7AA92ED1B10E7A1530CD934A6CAE218A405CE8B3D +9755F7827A96954DB1F5447BEF21412334CD103FDACC48AE6866E6B0069BA0BA +16EE4588FA885307FF64D577280B2EBDDCE85192533BDB36C4F5653EB3B19F5E +D71F505115D92801CF27F4F3EB1E7B3B18F5757DB08593C614AE300542F87AF4 +D9EF2CD6B955F6860502EC2D64036FBE1F7B18772228BE7612074DCB67D1F45E +684FE5785BFBED4D86E891585897BB06C9EFF060D5E97F4C37F8367846181825 +3BFEAFBB9FFB24424BEA55E26C937CD4640C122880D03C8BFCC716030E1DD72D +3E78C647DD020F1C3E7EBD443721310083CD29990E349C44B9BE32B4A7825D0E +120D28BD708355F76C20DFBD8DE9FE24761B948EED734B37D073BE847357E81C +8A88FBDFF0AAEF65B52085E84C3936BB44A9F0557E7F801DA90E36EDC4B99597 +D3B2F51AD843AB021D0A9D471306F9AB534F4B1DF9DC3DD03DC82DAEDE4A4F19 +AACCA8C3302261BD558D6CFEC06CFBA970919CFF3EBF49F284B40961C09BFE06 +FB395BCEED75EACB8FB6E73AC87A1B54EDE8CA7A69F88335E95E3AD897156E48 +C84D9A3938164354984FA293DD530F115D2C54DF6E8C91090D0162371DC5FD7D +3BFA381F661DA4532FB4DD1041FB5FEAD1A37EF0D13E46B7862225D2EB773179 +735D1BB9257BE0E6A5110A090FC6899C246059DB9D4088D4EC0C975D62063C03 +B26C4C83C6003E6CBF6B938930807E4453B4C97806ABDB50D7DEADD7F9E21D16 +9FE1BB10A5EFA12CBD4C69C28D9E4CD157F02F385E42E5363E599EC3E75B6087 +DAEC53889D74BF02FB09CB60DD96A151A59E94085CA2207C5BDBB813AECB6CBE +5BA9C185C76A805BC785EFB7F54BA4C05CF623C784631C120CE1975347E2BDE4 +C91D733620CC237EC155214E64D27D3C2A5AC53DCEA5A98AAD715825CD7BBCC7 +DAF443C9E3B1712402C0FE9DDAF379617AD5B136B9BFB15F244886D233ABF295 +0ED4385F8D407EAC42E08BF7B1B1B2EAD691B71D42FE34E8FCB662F7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMCSC10 +%!PS-AdobeFont-1.1: CMCSC10 1.0 +%%CreationDate: 1991 Aug 18 17:46:49 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMCSC10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMCSC10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 99 /c put +dup 103 /g put +dup 105 /i put +dup 110 /n put +dup 115 /s put +dup 117 /u put +readonly def +/FontBBox{14 -250 1077 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 +900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA +87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 +076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 +9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A +FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD +B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 +CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 +40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D +C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B +7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 +FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC +81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D +5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 +CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6877C1B3D2 +24030F377820DA58F4B95CFE645109F3F1B80DB5FACFD7D05AE2909EEFCF95AD +9CB286C8B6C075CA2267C101B736139863186C193E31085E7C9FD88EF8BBECE3 +933542C85309013325B4BBFE9A5B606780C8580ABDA2F5D0064EBFC23939B307 +08568C3B7F5F053BF367DEBA349FABB9F760C44D100BDEEFBB01F27BFC61F51B +C968C721E78497A7A3B90094FE11EEEC89D0D9E7AEB35D9A3FAC51F826300BB5 +84A4038A08FE7DEBA3FFED05C494AE0962114E9A90CBB87B40B7B669DEEF7D48 +6F0F21217F9911A842CF3882BC64670E58182A5D59B72EF73F62651CA3428BE8 +9389C4D4A3C77C7EE2DFFA8DE35FF4FE4609914E42CBED28EA59AB9A5A049F52 +8C30FC6673FA3B3F19FBC6A6CEB3D8ACF6B1427E9561C0EF108BB29CAC53BA6F +6102D4A599510D1DDE1D104812EE52010BED1DEFF3419DD223A26CB1A2B7260D +04989B2E8D900A82493EB68B883F32886BCCA8BFA961ADE4DE46F1CDAF2DEDF2 +4DF21403151EB890326BF9771B5491E45091877E550E3DEDBD5C97ECC6AC49A5 +522221DDE68940109257A1E6932F5514EBD5CDA3847B8EBCDB50D2987188FAB9 +F2F96B107B8307826A541B49B178189A17F7D8607F39FDE8A03D350A324DC684 +58DF63F288B4907F450060824D764D51EE69FE0D31053E37E031F03A1C58DAB0 +69A79DCD03DBE5DF2086BCF558F7B68158CB3E2F59E313FDADB26B81EF589991 +0F4C54D7F2209F812A27A75F586A62E59938C226368EA6F4C71A8C1EBE4FB084 +8EFE3E4672FB73DD50303970BF520125F49CA280D88E941C08FCD32A93EDA3C5 +70BA7A9CA5B4759BB64975E6F81F17033A85EEE16C34F48CB7DF5ED1195C7943 +7D38D99D7DDAB8D15C68BF7DB3712CBD9846C5C72B435DF91A90ECF37E33A10F +0C26ADBEE029FA2BD8ED27E3E4A8E76F8CD37EA0A65C16BBD2E7463F474DC9F6 +EBE92536B35598474B8FBB13CDB101DCBD04BC1295DD80369DE583BB6151E830 +21723CD7B5581BFD1631A8B8A7E69D06D4008D30EC7685426D614375B3F7CAD7 +F638ACB0E889EA91AC865BF31246CD8FC4CB99D64D6559637E1CA4FD935BF954 +90A3D8EAE892A1FDC20384CEB773242EEAC281ACF9907CC69B04D3DC36A2F8C2 +E6B26E6435B650A7843192E42687C1464252828830DBE7268BA089A131CA8F3F +CE1DB3B2309DA9764430E6013F59EF83AA83C4F335DA40280BD758F8F174882E +DA4F86EFAD370A8FCEE9BAC93C40745F78BCE1A0F82A3AC4AB93C589D48EA9C9 +60C030BE2C81689CA3964746154DA78A260693CFE0A3673D61EDD2D89DBB471E +2F2D730EB1ECC9F3FE5474CA0AA70F13003A6F6311AA396EA0707A2F799724CD +6172B351BA7A8A79BE939E5CBBAFFD704AF6B489C3CB7546924F72B02651D74B +83157155412798FDC5A1F0A8FAF5B477F2A631AFB3905FF4B600898594AE2A06 +12F833A915CB69DE6BB34698E416989B4FE55486BEA50ACAA9F913648A1C4AA0 +1115E2B254E8F29AF44110929D979C357A0034BA64B9174230D5AFAF270E86EC +91452CD3CF7DCA0A1813E9966B3F98373F28765754AC2E16BBC64F0B889E5CD8 +CB522EEF25E3E76739C20E3E767DA51276469AAEE0A11A92FD254CDC90B09175 +0C480A56C1479FD15F91B39F848F2B77786295A7276E76F7EAFE1019328DE9AB +C3A69A104D37039F98CB3042A8F53847B97E1D2BB76EBFC6241E5903D55FEB17 +436374CB85B27E2617EA745171C9F1D2A3A890490004B38F5BFEDA0B0883594A +464E46788B8A86E19904F108FD902E7B032F496E86B7F210E3CAD335CF4517C5 +69558F3C3593F3BA0D235CD5B7DDD0BA909EA6C635DB553D5AC1AF351111A37E +504A6652E21ECB309BD4B641D2470F2E0D03F7F34959C983FBCBCE64CDECECB2 +EF43850D1BED843DA6DD2B1A9282F88FEC210949B3B5737308EE15A6B6148697 +2A5F77FAA39B8141929A40F68D84C8297501C2DF95230F2C167BFC8708152387 +AAE0C24A1D9351 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD +0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE +E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C +7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37 +88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6 +DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1 +AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.1: CMMI12 1.100 +%%CreationDate: 1996 Jul 27 08:57:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-30 -250 1026 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 +3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 +EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F +4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 +2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A +323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C +2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 +D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA +5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F +0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D +A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 +2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 +00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 +CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757 +99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA +C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D +5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295 +55B50047CC8911C98FE1A7BA6CDEA82D34476286E710776823690AD333DD3A49 +335002F4680DBE1C21174BF016B0DF799B01EB9D6988479A8334BBA2F8DC7146 +BC0DAE9DE3A6453B181808E68A89E0C02DAC6264D002B422EBC1CF14F65D9888 +15EE6D514D3457F7F3C6A3D17EE1DA076F73ECC392D349174DA9E4680F29CE10 +0157E42CA35F5DBFF56BFC3AA07E61A78DBE882C5AB388220C19750D3643E7C8 +23D6673027CE568A4ACCE1D12B1D9E5A43507F4AF9BC873237F65A6B95078DD2 +378007CF0F0DE7CCEF760E19D6D1D7B412EC5D4972 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 13 /circlecopyrt put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8BFEF75B4DEFAF34B44B356A516B765AFCDD3F5475B1F928731D09D2170 +B97E40F12CCEDF4F6BB3756C4734F6E98D74B7E942A954B1BAAB83D4AD727FF6 +DF6DC50B2223BCB5568A73A112E4860AD490554E64E780073FF3399CB4688D33 +9E8829667CD6EAEF25E0C7D2D44F2BBFA40E999325F9561514844221B50BC8FC +4C7AD68CA7220D69125C2AF06849A3E068D18733276F0C0A6A2936D3C2C87CDE +59CD1AF148C44F85784A5DAD569F5FF53C061056C067CE29AEF1E3BD1FD8B0B8 +71A0A638CDAC6AEEDBD5337D4683C084BB60B1859E600F59CB4E19C5FC5C6327 +EC544A68134496A9BD0B87D83AF6FDA3CB62FBF0B54FACE1F0E6A2D84B467AFF +0F62DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258431 52099146 1000 600 600 (history.dvi) +@start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 +41 1[41 1[30 30 30 1[43 38 43 4[21 43 38 1[34 43 34 1[38 +13[43 10[58 14[38 38 38 38 38 3[38 49[{}24 74.7198 /CMR9 +rf /Fc 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 +3[39 97[{}13 74.7198 /CMSLTT10 rf /Fd 167[62 3[60 46 +2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 +/CMR10 rf /Fe 130[39 39 39 39 39 39 39 39 39 39 39 39 +39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 +39 1[39 39 39 1[39 2[39 39 39 39 39 1[39 1[39 1[39 2[39 +39 39 39 39 39 39 39 39 2[39 39 39 39 39 3[39 1[39 39 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 +33[{}77 74.7198 /CMTT9 rf /Ff 214[35 35 40[{}2 90.9091 +/CMSS10 rf /Fg 133[52 52 52 52 52 52 52 52 52 52 52 52 +52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 5[52 4[52 +52 52 2[52 52 4[52 52 2[52 3[52 22[52 42[{}37 99.6264 +/CMTT10 rf /Fh 134[48 48 48 1[48 48 48 48 2[48 48 1[48 +2[48 1[48 48 48 48 49[48 48 49[{}17 90.9091 /CMSLTT10 +rf /Fi 133[55 65 65 1[65 68 48 48 50 1[68 61 68 102 34 +2[34 68 61 37 56 68 55 68 60 9[127 3[68 5[116 74 2[46 +96 1[77 81 94 2[93 9[61 61 61 61 61 61 61 2[34 33[68 +12[{}41 109.091 /CMBX12 rf /Fj 134[48 48 66 48 51 35 +36 36 48 51 45 51 76 25 2[25 51 45 28 40 51 40 1[45 3[25 +1[25 1[68 4[66 51 67 2[71 68 4[33 68 2[62 3[68 14[45 +45 4[25 1[45 29[51 53 11[{}40 90.9091 /CMSL10 rf /Fk +138[56 1[42 4[56 4[27 1[58 3[54 1[56 97[{}7 90.9091 /CMCSC10 +rf /Fl 197[25 58[{}1 90.9091 /CMMI10 rf /Fm 197[33 58[{}1 +119.552 /CMMI12 rf /Fn 134[85 85 117 85 90 63 64 66 1[90 +81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 +112 3[110 1[126 1[97 2[60 126 127 101 1[124 117 115 122 +14[81 81 49[{}38 143.462 /CMBX12 rf /Fo 242[91 13[{}1 +90.9091 /CMSY10 rf /Fp 134[71 71 97 71 75 52 53 55 1[75 +67 75 112 37 2[37 75 67 41 61 75 60 75 65 9[139 102 103 +1[75 100 1[92 1[105 128 81 2[50 105 106 85 88 103 97 +96 102 6[37 4[67 67 67 67 67 67 1[37 1[37 44[{}49 119.552 +/CMBX12 rf /Fq 129[48 48 48 48 48 48 1[48 48 48 48 48 +48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 1[48 +48 48 48 48 1[48 3[48 48 48 48 1[48 48 48 1[48 2[48 48 +48 48 48 48 2[48 1[48 48 48 48 48 48 7[48 48 48 48 48 +48 1[48 48 48 48 1[48 48 48 48 48 48 33[{}70 90.9091 +/CMTT10 rf /Fr 131[91 45 40 48 48 66 48 51 35 36 36 48 +51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 +45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 +47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 +45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 19[76 51 51 +53 11[{}82 90.9091 /CMR10 rf /Fs 134[102 4[75 76 79 2[97 +5[54 6[108 94 11[149 6[151 1[116 3[151 152 71[{}13 172.154 +/CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop 150 1318 a Fs(GNU)65 b(History)h(Library)p +150 1418 3600 34 v 1920 1515 a Fr(Edition)31 b(6.2,)h(for)e +Fq(History)e(Library)h Fr(V)-8 b(ersion)31 b(6.2.)3118 +1623 y(Septem)m(b)s(er)f(2010)150 4935 y Fp(Chet)45 b(Ramey)-11 +b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 +5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) +-11 b(oundation)p 150 5141 3600 17 v eop end +%%Page: 2 2 +TeXDict begin 2 1 bop 150 3024 a Fr(This)31 b(do)s(cumen)m(t)h(describ) +s(es)f(the)h(GNU)g(History)h(library)e(\(v)m(ersion)i(6.2,)g(Septem)m +(b)s(er)e(6)h(2010\),)j(a)d(pro-)150 3133 y(gramming)23 +b(to)s(ol)g(that)g(pro)m(vides)f(a)h(consisten)m(t)h(user)d(in)m +(terface)j(for)e(recalling)i(lines)f(of)f(previously)g(t)m(yp)s(ed)150 +3243 y(input.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577 +3377 y Fo(\015)30 b Fr(1988{2011)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h +(F)-8 b(oundation,)31 b(Inc.)150 3512 y(P)m(ermission)h(is)h(gran)m +(ted)g(to)f(mak)m(e)i(and)d(distribute)h(v)m(erbatim)h(copies)g(of)f +(this)g(man)m(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g +(notice)f(and)f(this)g(p)s(ermission)g(notice)h(are)g(preserv)m(ed)f +(on)h(all)g(copies.)390 3756 y(P)m(ermission)k(is)h(gran)m(ted)f(to)h +(cop)m(y)-8 b(,)38 b(distribute)d(and/or)g(mo)s(dify)f(this)h(do)s +(cumen)m(t)g(under)390 3866 y(the)j(terms)g(of)g(the)g(GNU)h(F)-8 +b(ree)39 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)39 +b(1.3)g(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)28 +b(published)d(b)m(y)j(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8 +b(oundation;)30 b(with)d(no)g(In)m(v)-5 b(arian)m(t)28 +b(Sections,)390 4085 y(with)i(the)h(F)-8 b(ron)m(t-Co)m(v)m(er)33 +b(texts)e(b)s(eing)g(\\A)g(GNU)g(Man)m(ual",)h(and)e(with)g(the)h(Bac)m +(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)f(\(a\))h(b)s(elo)m +(w.)47 b(A)33 b(cop)m(y)g(of)f(the)h(license)g(is)g(included)e(in)h +(the)h(section)g(en)m(titled)390 4304 y(\\GNU)e(F)-8 +b(ree)32 b(Do)s(cumen)m(tation)g(License".)390 4438 y(\(a\))f(The)f +(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)31 b(is:)41 +b(Y)-8 b(ou)31 b(are)f(free)h(to)f(cop)m(y)h(and)f(mo)s(dify)f(this)h +(GNU)390 4548 y(man)m(ual.)41 b(Buying)30 b(copies)h(from)e(GNU)i +(Press)f(supp)s(orts)e(the)i(FSF)g(in)g(dev)m(eloping)h(GNU)390 +4658 y(and)f(promoting)g(soft)m(w)m(are)i(freedom.")150 +4902 y(Published)d(b)m(y)h(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 +b(oundation)150 5011 y(59)31 b(T)-8 b(emple)31 b(Place,)h(Suite)e(330,) +150 5121 y(Boston,)i(MA)e(02111-1307)150 5230 y(USA)p +eop end +%%Page: -1 3 +TeXDict begin -1 2 bop 3725 -116 a Fr(i)150 299 y Fn(T)-13 +b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fp(1)135 b(Using)45 +b(History)h(In)l(teractiv)l(ely)25 b Fm(:)d(:)d(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)69 b Fp(1)275 +778 y Fr(1.1)92 b(History)31 b(Expansion)26 b Fl(:)15 +b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)57 b Fr(1)399 888 +y(1.1.1)93 b(Ev)m(en)m(t)31 b(Designators)15 b Fl(:)j(:)d(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)46 b Fr(1)399 997 y(1.1.2)93 b(W)-8 b(ord)31 b(Designators)22 +b Fl(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)52 b Fr(2)399 1107 y(1.1.3)93 +b(Mo)s(di\014ers)12 b Fl(:)j(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)42 b Fr(2)150 1349 y Fp(2)135 b(Programming)46 +b(with)f(GNU)g(History)35 b Fm(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f +(:)h(:)f(:)g(:)79 b Fp(4)275 1486 y Fr(2.1)92 b(In)m(tro)s(duction)30 +b(to)h(History)10 b Fl(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b +Fr(4)275 1596 y(2.2)92 b(History)31 b(Storage)24 b Fl(:)16 +b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)54 b +Fr(4)275 1705 y(2.3)92 b(History)31 b(F)-8 b(unctions)20 +b Fl(:)c(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Fr(5)399 +1815 y(2.3.1)93 b(Initializing)32 b(History)f(and)f(State)h(Managemen)m +(t)11 b Fl(:)17 b(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)41 b Fr(5)399 1924 y(2.3.2)93 b(History)31 +b(List)f(Managemen)m(t)11 b Fl(:)18 b(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fr(5)399 2034 y(2.3.3)93 +b(Information)30 b(Ab)s(out)g(the)g(History)h(List)13 +b Fl(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 b Fr(6)399 2144 y(2.3.4)93 +b(Mo)m(ving)32 b(Around)d(the)h(History)h(List)16 b Fl(:)g(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)46 b Fr(6)399 2253 y(2.3.5)93 b(Searc)m(hing)31 +b(the)f(History)h(List)17 b Fl(:)f(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)47 b Fr(7)399 2363 y(2.3.6)93 b(Managing)32 +b(the)e(History)h(File)14 b Fl(:)j(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)44 b Fr(7)399 2472 y(2.3.7)93 b(History)31 +b(Expansion)10 b Fl(:)k(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)40 b Fr(8)275 +2582 y(2.4)92 b(History)31 b(V)-8 b(ariables)11 b Fl(:)16 +b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 b Fr(8)275 +2692 y(2.5)92 b(History)31 b(Programming)f(Example)13 +b Fl(:)j(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)43 +b Fr(10)150 2934 y Fp(App)t(endix)h(A)160 b(GNU)45 b(F)-11 +b(ree)45 b(Do)t(cumen)l(tation)h(License)446 3067 y Fm(:)20 +b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 b +Fp(12)150 3337 y(App)t(endix)44 b(B)166 b(Concept)45 +b(Index)24 b Fm(:)19 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)68 b Fp(20)150 3606 y(App)t(endix)44 +b(C)165 b(F)-11 b(unction)44 b(and)g(V)-11 b(ariable)46 +b(Index)34 b Fm(:)19 b(:)h(:)f(:)79 b Fp(21)p eop end +%%Page: 1 4 +TeXDict begin 1 3 bop 150 -116 a Fr(Chapter)30 b(1:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(1)150 +299 y Fn(1)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150 +551 y Fr(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the) +f Fk(gnu)h Fr(History)g(Library)e(in)m(teractiv)m(ely)-8 +b(,)50 b(from)42 b(a)h(user's)150 661 y(standp)s(oin)m(t.)76 +b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76 +b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fk(gnu)150 +770 y Fr(History)36 b(Library)e(in)h(y)m(our)f(o)m(wn)i(programs,)g +(see)f(Chapter)g(2)g([Programming)g(with)g(GNU)h(History],)150 +880 y(page)31 b(4.)150 1121 y Fp(1.1)68 b(History)46 +b(Expansion)150 1281 y Fr(The)f(History)h(library)e(pro)m(vides)i(a)f +(history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g(the)f +(history)150 1390 y(expansion)g(pro)m(vided)f(b)m(y)h +Fq(csh)p Fr(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h +(used)e(to)i(manipulate)f(the)150 1500 y(history)30 b(information.)275 +1640 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h +(history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 +1750 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) +m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150 +1860 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g +(quic)m(kly)-8 b(.)275 2000 y(History)37 b(expansion)f(tak)m(es)i +(place)g(in)e(t)m(w)m(o)i(parts.)59 b(The)36 b(\014rst)g(is)h(to)g +(determine)g(whic)m(h)f(line)h(from)150 2110 y(the)42 +b(history)f(list)h(should)e(b)s(e)h(used)f(during)g(substitution.)74 +b(The)40 b(second)i(is)f(to)h(select)h(p)s(ortions)e(of)150 +2219 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f +(one.)42 b(The)30 b(line)h(selected)h(from)e(the)h(history)f(is)h +(called)h(the)150 2329 y Fj(ev)m(en)m(t)p Fr(,)e(and)c(the)i(p)s +(ortions)e(of)i(that)f(line)h(that)g(are)f(acted)i(up)s(on)c(are)j +(called)g Fj(w)m(ords)p Fr(.)39 b(V)-8 b(arious)28 b +Fj(mo)s(di\014ers)150 2438 y Fr(are)33 b(a)m(v)-5 b(ailable)36 +b(to)d(manipulate)h(the)f(selected)h(w)m(ords.)48 b(The)32 +b(line)i(is)f(brok)m(en)f(in)m(to)i(w)m(ords)f(in)f(the)i(same)150 +2548 y(fashion)23 b(that)g(Bash)g(do)s(es,)h(so)f(that)h(sev)m(eral)g +(w)m(ords)e(surrounded)e(b)m(y)j(quotes)g(are)g(considered)g(one)g(w)m +(ord.)150 2658 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m +(y)h(the)g(app)s(earance)g(of)g(the)g(history)f(expansion)h(c)m +(haracter,)150 2767 y(whic)m(h)30 b(is)h(`)p Fq(!)p Fr(')f(b)m(y)g +(default.)150 2972 y Fi(1.1.1)63 b(Ev)m(en)m(t)39 b(Designators)150 +3119 y Fr(An)32 b(ev)m(en)m(t)j(designator)e(is)g(a)g(reference)g(to)h +(a)f(command)f(line)h(en)m(try)g(in)g(the)g(history)g(list.)48 +b(Unless)33 b(the)150 3229 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts) +f(are)g(relativ)m(e)i(to)e(the)f(curren)m(t)g(p)s(osition)h(in)f(the)h +(history)f(list.)150 3397 y Fq(!)432 b Fr(Start)34 b(a)f(history)h +(substitution,)g(except)g(when)f(follo)m(w)m(ed)i(b)m(y)e(a)h(space,)h +(tab,)f(the)g(end)f(of)630 3507 y(the)e(line,)g(or)f(`)p +Fq(=)p Fr('.)150 3672 y Fq(!)p Fh(n)384 b Fr(Refer)30 +b(to)i(command)e(line)g Fj(n)p Fr(.)150 3838 y Fq(!-)p +Fh(n)336 b Fr(Refer)30 b(to)i(the)e(command)g Fj(n)g +Fr(lines)h(bac)m(k.)150 4003 y Fq(!!)384 b Fr(Refer)30 +b(to)i(the)e(previous)g(command.)40 b(This)30 b(is)g(a)h(synon)m(ym)f +(for)g(`)p Fq(!-1)p Fr('.)150 4169 y Fq(!)p Fh(string)144 +b Fr(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g +(the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630 +4278 y(list)31 b(starting)g(with)f Fj(string)8 b Fr(.)150 +4444 y Fq(!?)p Fh(string)j Fq([?])630 4553 y Fr(Refer)25 +b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t) +g(p)s(osition)g(in)g(the)g(history)630 4663 y(list)32 +b(con)m(taining)h Fj(string)8 b Fr(.)43 b(The)31 b(trailing)h(`)p +Fq(?)p Fr(')f(ma)m(y)h(b)s(e)f(omitted)h(if)f(the)h Fj(string)39 +b Fr(is)31 b(follo)m(w)m(ed)630 4772 y(immediately)h(b)m(y)e(a)h +(newline.)150 4938 y Fq(^)p Fh(string1)11 b Fq(^)p Fh(string2)g +Fq(^)630 5047 y Fr(Quic)m(k)31 b(Substitution.)43 b(Rep)s(eat)31 +b(the)g(last)h(command,)g(replacing)f Fj(string1)39 b +Fr(with)31 b Fj(string2)7 b Fr(.)630 5157 y(Equiv)-5 +b(alen)m(t)31 b(to)g Fq(!!:s/)p Fh(string1)11 b Fq(/)p +Fh(string2)g Fq(/)p Fr(.)150 5322 y Fq(!#)384 b Fr(The)30 +b(en)m(tire)h(command)f(line)h(t)m(yp)s(ed)f(so)h(far.)p +eop end +%%Page: 2 5 +TeXDict begin 2 4 bop 150 -116 a Fr(Chapter)30 b(1:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(2)150 +299 y Fi(1.1.2)63 b(W)-10 b(ord)41 b(Designators)150 +446 y Fr(W)-8 b(ord)27 b(designators)h(are)g(used)e(to)i(select)h +(desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 b(A)27 +b(`)p Fq(:)p Fr(')g(separates)h(the)f(ev)m(en)m(t)150 +555 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61 +b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g +(b)s(egins)150 665 y(with)30 b(a)g(`)p Fq(^)p Fr(',)g(`)p +Fq($)p Fr(',)g(`)p Fq(*)p Fr(',)h(`)p Fq(-)p Fr(',)f(or)g(`)p +Fq(\045)p Fr('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i +(the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)150 +775 y(\014rst)f(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h(\(zero\).)41 +b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g(curren)m(t)f(line)g +(separated)h(b)m(y)150 884 y(single)h(spaces.)275 1026 +y(F)-8 b(or)31 b(example,)150 1197 y Fq(!!)384 b Fr(designates)37 +b(the)f(preceding)g(command.)57 b(When)35 b(y)m(ou)i(t)m(yp)s(e)f +(this,)h(the)f(preceding)g(com-)630 1307 y(mand)30 b(is)g(rep)s(eated)g +(in)g(toto.)150 1474 y Fq(!!:$)288 b Fr(designates)23 +b(the)g(last)g(argumen)m(t)g(of)f(the)h(preceding)f(command.)38 +b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 1583 y(to)31 +b Fq(!$)p Fr(.)150 1750 y Fq(!fi:2)240 b Fr(designates)30 +b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f(recen)m(t)i(command)e +(starting)h(with)f(the)630 1860 y(letters)j Fq(fi)p Fr(.)275 +2031 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150 +2202 y Fq(0)g(\(zero\))114 b Fr(The)30 b Fq(0)p Fr(th)g(w)m(ord.)40 +b(F)-8 b(or)31 b(man)m(y)g(applications,)h(this)e(is)g(the)h(command)f +(w)m(ord.)150 2369 y Fh(n)432 b Fr(The)30 b Fj(n)p Fr(th)g(w)m(ord.)150 +2536 y Fq(^)432 b Fr(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m +(ord)g(1.)150 2703 y Fq($)432 b Fr(The)30 b(last)h(argumen)m(t.)150 +2870 y Fq(\045)432 b Fr(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h +(most)g(recen)m(t)g(`)p Fq(?)p Fh(string)11 b Fq(?)p +Fr(')28 b(searc)m(h.)150 3037 y Fh(x)11 b Fq(-)p Fh(y)325 +b Fr(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fq(-)p Fh(y)11 +b Fr(')30 b(abbreviates)h(`)p Fq(0-)p Fh(y)11 b Fr('.)150 +3204 y Fq(*)432 b Fr(All)28 b(of)g(the)g(w)m(ords,)g(except)h(the)e +Fq(0)p Fr(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p +Fq(1-$)p Fr('.)39 b(It)28 b(is)g(not)g(an)f(error)630 +3313 y(to)j(use)g(`)p Fq(*)p Fr(')f(if)h(there)g(is)g(just)f(one)h(w)m +(ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h +(returned)e(in)630 3423 y(that)j(case.)150 3590 y Fh(x)11 +b Fq(*)373 b Fr(Abbreviates)31 b(`)p Fh(x)11 b Fq(-$)p +Fr(')150 3757 y Fh(x)g Fq(-)373 b Fr(Abbreviates)31 b(`)p +Fh(x)11 b Fq(-$)p Fr(')29 b(lik)m(e)j(`)p Fh(x)11 b Fq(*)p +Fr(',)30 b(but)g(omits)h(the)f(last)h(w)m(ord.)275 3928 +y(If)i(a)h(w)m(ord)g(designator)g(is)g(supplied)f(without)h(an)g(ev)m +(en)m(t)h(sp)s(eci\014cation,)h(the)e(previous)f(command)150 +4038 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 4244 y +Fi(1.1.3)63 b(Mo)s(di\014ers)150 4391 y Fr(After)29 b(the)g(optional)g +(w)m(ord)g(designator,)g(y)m(ou)g(can)g(add)f(a)h(sequence)g(of)g(one)g +(or)f(more)h(of)g(the)f(follo)m(wing)150 4501 y(mo)s(di\014ers,)h(eac)m +(h)j(preceded)e(b)m(y)g(a)h(`)p Fq(:)p Fr('.)150 4672 +y Fq(h)432 b Fr(Remo)m(v)m(e)32 b(a)f(trailing)g(pathname)g(comp)s +(onen)m(t,)g(lea)m(ving)h(only)e(the)h(head.)150 4839 +y Fq(t)432 b Fr(Remo)m(v)m(e)32 b(all)f(leading)h(pathname)e(comp)s +(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 5006 y Fq(r)432 +b Fr(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g(the)h(form)f(`)p +Fq(.)p Fh(suffix)11 b Fr(',)28 b(lea)m(ving)33 b(the)d(basename.)150 +5173 y Fq(e)432 b Fr(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g +(su\016x.)150 5340 y Fq(p)432 b Fr(Prin)m(t)30 b(the)h(new)f(command)g +(but)g(do)g(not)g(execute)i(it.)p eop end +%%Page: 3 6 +TeXDict begin 3 5 bop 150 -116 a Fr(Chapter)30 b(1:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(3)150 +299 y Fq(s/)p Fh(old)11 b Fq(/)p Fh(new)g Fq(/)630 408 +y Fr(Substitute)32 b Fj(new)40 b Fr(for)32 b(the)h(\014rst)f(o)s +(ccurrence)h(of)f Fj(old)37 b Fr(in)32 b(the)h(ev)m(en)m(t)h(line.)48 +b(An)m(y)32 b(delimiter)630 518 y(ma)m(y)25 b(b)s(e)g(used)f(in)g +(place)i(of)f(`)p Fq(/)p Fr('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s +(e)e(quoted)h(in)f Fj(old)29 b Fr(and)24 b Fj(new)32 +b Fr(with)25 b(a)630 628 y(single)j(bac)m(kslash.)40 +b(If)27 b(`)p Fq(&)p Fr(')g(app)s(ears)g(in)g Fj(new)8 +b Fr(,)27 b(it)h(is)f(replaced)h(b)m(y)f Fj(old)t Fr(.)39 +b(A)27 b(single)h(bac)m(kslash)630 737 y(will)35 b(quote)g(the)g(`)p +Fq(&)p Fr('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f +(it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 847 y(the)31 +b(input)e(line.)150 1006 y Fq(&)432 b Fr(Rep)s(eat)31 +b(the)f(previous)g(substitution.)150 1166 y Fq(g)150 +1275 y(a)432 b Fr(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v) +m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39 +b(in)f(conjunction)630 1385 y(with)30 b(`)p Fq(s)p Fr(',)h(as)f(in)h +Fq(gs/)p Fh(old)11 b Fq(/)p Fh(new)g Fq(/)p Fr(,)26 b(or)k(with)h(`)p +Fq(&)p Fr('.)150 1544 y Fq(G)432 b Fr(Apply)30 b(the)g(follo)m(wing)i +(`)p Fq(s)p Fr(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g +(the)g(ev)m(en)m(t.)p eop end +%%Page: 4 7 +TeXDict begin 4 6 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(4)150 +299 y Fn(2)80 b(Programming)54 b(with)f(GNU)h(History)150 +523 y Fr(This)41 b(c)m(hapter)i(describ)s(es)e(ho)m(w)h(to)h(in)m +(terface)g(programs)f(that)g(y)m(ou)h(write)f(with)f(the)i +Fk(gnu)e Fr(History)150 632 y(Library)-8 b(.)48 b(It)33 +b(should)e(b)s(e)i(considered)f(a)h(tec)m(hnical)i(guide.)48 +b(F)-8 b(or)34 b(information)f(on)g(the)g(in)m(teractiv)m(e)i(use)150 +742 y(of)c Fk(gnu)f Fr(History)-8 b(,)31 b(see)g(Chapter)f(1)h([Using)g +(History)g(In)m(teractiv)m(ely],)i(page)e(1.)150 970 +y Fp(2.1)68 b(In)l(tro)t(duction)45 b(to)g(History)150 +1130 y Fr(Man)m(y)31 b(programs)f(read)g(input)g(from)f(the)i(user)f(a) +g(line)h(at)g(a)g(time.)41 b(The)30 b Fk(gnu)g Fr(History)h(library)f +(is)g(able)150 1239 y(to)f(k)m(eep)h(trac)m(k)g(of)f(those)g(lines,)h +(asso)s(ciate)g(arbitrary)f(data)g(with)g(eac)m(h)h(line,)f(and)g +(utilize)h(information)150 1349 y(from)g(previous)g(lines)g(in)g(comp)s +(osing)h(new)f(ones.)275 1481 y(The)d(programmer)g(using)g(the)g +(History)h(library)f(has)h(a)m(v)-5 b(ailable)29 b(functions)e(for)h +(remem)m(b)s(ering)f(lines)150 1591 y(on)21 b(a)g(history)f(list,)k +(asso)s(ciating)e(arbitrary)e(data)i(with)e(a)h(line,)i(remo)m(ving)f +(lines)f(from)f(the)h(list,)i(searc)m(hing)150 1701 y(through)35 +b(the)g(list)h(for)f(a)h(line)f(con)m(taining)i(an)e(arbitrary)g(text)h +(string,)h(and)e(referencing)g(an)m(y)h(line)f(in)150 +1810 y(the)c(list)g(directly)-8 b(.)43 b(In)30 b(addition,)h(a)g +(history)g Fj(expansion)g Fr(function)f(is)h(a)m(v)-5 +b(ailable)33 b(whic)m(h)d(pro)m(vides)h(for)g(a)150 1920 +y(consisten)m(t)h(user)d(in)m(terface)j(across)f(di\013eren)m(t)g +(programs.)275 2052 y(The)c(user)g(using)g(programs)h(written)g(with)g +(the)g(History)g(library)g(has)f(the)h(b)s(ene\014t)f(of)h(a)h +(consisten)m(t)150 2162 y(user)38 b(in)m(terface)j(with)e(a)g(set)g(of) +h(w)m(ell-kno)m(wn)f(commands)g(for)g(manipulating)g(the)g(text)h(of)f +(previous)150 2271 y(lines)28 b(and)f(using)g(that)h(text)g(in)g(new)f +(commands.)39 b(The)27 b(basic)h(history)g(manipulation)f(commands)h +(are)150 2381 y(similar)j(to)g(the)f(history)h(substitution)f(pro)m +(vided)g(b)m(y)g Fq(csh)p Fr(.)275 2514 y(If)f(the)g(programmer)g +(desires,)h(he)g(can)f(use)h(the)f(Readline)i(library)-8 +b(,)30 b(whic)m(h)f(includes)g(some)h(history)150 2623 +y(manipulation)h(b)m(y)f(default,)h(and)e(has)i(the)f(added)g(adv)-5 +b(an)m(tage)32 b(of)f(command)f(line)g(editing.)275 2756 +y(Before)39 b(declaring)f(an)m(y)h(functions)e(using)h(an)m(y)g +(functionalit)m(y)i(the)e(History)h(library)e(pro)m(vides)h(in)150 +2865 y(other)29 b(co)s(de,)g(an)g(application)h(writer)f(should)e +(include)i(the)g(\014le)f Fq(<readline/history.h>)23 +b Fr(in)29 b(an)m(y)g(\014le)150 2975 y(that)c(uses)e(the)h(History)h +(library's)e(features.)39 b(It)24 b(supplies)f(extern)h(declarations)i +(for)d(all)i(of)f(the)g(library's)150 3084 y(public)30 +b(functions)g(and)f(v)-5 b(ariables,)32 b(and)d(declares)j(all)f(of)f +(the)h(public)f(data)h(structures.)150 3313 y Fp(2.2)68 +b(History)46 b(Storage)150 3472 y Fr(The)30 b(history)g(list)h(is)g(an) +f(arra)m(y)h(of)f(history)h(en)m(tries.)41 b(A)31 b(history)f(en)m(try) +h(is)f(declared)h(as)f(follo)m(ws:)390 3605 y Fq(typedef)46 +b(void)g(*histdata_t;)390 3824 y(typedef)g(struct)g(_hist_entry)f({)485 +3933 y(char)i(*line;)485 4043 y(char)g(*timestamp;)485 +4153 y(histdata_t)e(data;)390 4262 y(})i(HIST_ENTRY;)275 +4395 y Fr(The)29 b(history)i(list)g(itself)g(migh)m(t)g(therefore)g(b)s +(e)f(declared)g(as)390 4527 y Fq(HIST_ENTRY)45 b(**the_history_list;) +275 4660 y Fr(The)29 b(state)j(of)f(the)f(History)h(library)f(is)h +(encapsulated)g(in)m(to)g(a)g(single)g(structure:)390 +4792 y Fq(/*)438 4902 y(*)47 b(A)h(structure)d(used)i(to)g(pass)f +(around)g(the)h(current)f(state)h(of)g(the)g(history.)438 +5011 y(*/)390 5121 y(typedef)f(struct)g(_hist_state)f({)485 +5230 y(HIST_ENTRY)g(**entries;)g(/*)j(Pointer)d(to)j(the)f(entries)e +(themselves.)g(*/)485 5340 y(int)i(offset;)523 b(/*)48 +b(The)f(location)e(pointer)h(within)g(this)h(array.)f(*/)p +eop end +%%Page: 5 8 +TeXDict begin 5 7 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(5)485 +299 y Fq(int)47 b(length;)523 b(/*)48 b(Number)e(of)h(elements)e +(within)i(this)f(array.)g(*/)485 408 y(int)h(size;)619 +b(/*)48 b(Number)e(of)h(slots)f(allocated)g(to)h(this)f(array.)g(*/)485 +518 y(int)h(flags;)390 628 y(})g(HISTORY_STATE;)275 764 +y Fr(If)29 b(the)i(\015ags)g(mem)m(b)s(er)e(includes)h +Fq(HS_STIFLED)p Fr(,)e(the)j(history)f(has)g(b)s(een)g(sti\015ed.)150 +1000 y Fp(2.3)68 b(History)46 b(F)-11 b(unctions)150 +1160 y Fr(This)33 b(section)j(describ)s(es)d(the)i(calling)g(sequence)g +(for)f(the)g(v)-5 b(arious)34 b(functions)g(exp)s(orted)g(b)m(y)g(the)g +Fk(gnu)150 1269 y Fr(History)d(library)-8 b(.)150 1471 +y Fi(2.3.1)63 b(Initializing)40 b(History)i(and)f(State)f(Managemen)m +(t)150 1618 y Fr(This)21 b(section)i(describ)s(es)f(functions)f(used)g +(to)i(initialize)h(and)e(manage)h(the)f(state)h(of)g(the)f(History)g +(library)150 1727 y(when)29 b(y)m(ou)i(w)m(an)m(t)g(to)g(use)f(the)h +(history)f(functions)g(in)g(y)m(our)h(program.)3350 1916 +y([F)-8 b(unction])-3599 b Fg(void)54 b(using_history)49 +b Ff(\()p Fj(v)m(oid)p Ff(\))390 2026 y Fr(Begin)41 b(a)f(session)g(in) +g(whic)m(h)f(the)h(history)g(functions)f(migh)m(t)i(b)s(e)e(used.)69 +b(This)39 b(initializes)j(the)390 2135 y(in)m(teractiv)m(e)33 +b(v)-5 b(ariables.)3350 2324 y([F)d(unction])-3599 b +Fg(HISTORY_STATE)56 b(*)d(history_get_history_st)q(ate)f +Ff(\()p Fj(v)m(oid)p Ff(\))390 2434 y Fr(Return)30 b(a)g(structure)g +(describing)g(the)h(curren)m(t)f(state)i(of)e(the)h(input)e(history)-8 +b(.)3350 2623 y([F)g(unction])-3599 b Fg(void)54 b +(history_set_history_stat)q(e)e Ff(\()p Fj(HISTOR)-8 +b(Y)p 2222 2623 28 4 v 39 w(ST)g(A)g(TE)30 b(*state)p +Ff(\))390 2732 y Fr(Set)h(the)f(state)i(of)e(the)h(history)f(list)h +(according)h(to)f Fj(state)5 b Fr(.)150 2934 y Fi(2.3.2)63 +b(History)41 b(List)g(Managemen)m(t)150 3081 y Fr(These)32 +b(functions)f(manage)i(individual)f(en)m(tries)g(on)g(the)g(history)g +(list,)h(or)f(set)h(parameters)f(managing)150 3190 y(the)f(list)g +(itself.)3350 3379 y([F)-8 b(unction])-3599 b Fg(void)54 +b(add_history)48 b Ff(\()p Fj(const)32 b(c)m(har)e(*string)p +Ff(\))390 3489 y Fr(Place)h Fj(string)38 b Fr(at)31 b(the)f(end)f(of)h +(the)g(history)g(list.)42 b(The)29 b(asso)s(ciated)i(data)g(\014eld)f +(\(if)g(an)m(y\))h(is)f(set)g(to)390 3598 y Fq(NULL)p +Fr(.)3350 3787 y([F)-8 b(unction])-3599 b Fg(void)54 +b(add_history_time)c Ff(\()p Fj(const)31 b(c)m(har)g(*string)p +Ff(\))390 3897 y Fr(Change)f(the)h(time)g(stamp)f(asso)s(ciated)i(with) +e(the)h(most)f(recen)m(t)i(history)e(en)m(try)h(to)g +Fj(string)8 b Fr(.)3350 4086 y([F)-8 b(unction])-3599 +b Fg(HIST_ENTRY)55 b(*)e(remove_history)d Ff(\()p Fj(in)m(t)31 +b(whic)m(h)p Ff(\))390 4195 y Fr(Remo)m(v)m(e)47 b(history)f(en)m(try)f +(at)i(o\013set)f Fj(whic)m(h)f Fr(from)g(the)h(history)-8 +b(.)86 b(The)45 b(remo)m(v)m(ed)i(elemen)m(t)g(is)390 +4305 y(returned)29 b(so)i(y)m(ou)g(can)f(free)h(the)f(line,)h(data,)h +(and)d(con)m(taining)j(structure.)3350 4494 y([F)-8 b(unction])-3599 +b Fg(histdata_t)55 b(free_history_entry)c Ff(\()p Fj(HIST)p +1971 4494 V 40 w(ENTR)-8 b(Y)30 b(*histen)m(t)p Ff(\))390 +4603 y Fr(F)-8 b(ree)29 b(the)f(history)g(en)m(try)g +Fj(histen)m(t)j Fr(and)c(an)m(y)i(history)e(library)h(priv)-5 +b(ate)28 b(data)h(asso)s(ciated)g(with)f(it.)390 4713 +y(Returns)h(the)i(application-sp)s(eci\014c)h(data)f(so)g(the)f(caller) +i(can)e(disp)s(ose)g(of)h(it.)3350 4902 y([F)-8 b(unction])-3599 +b Fg(HIST_ENTRY)55 b(*)e(replace_history_entry)f Ff(\()p +Fj(in)m(t)31 b(whic)m(h,)f(const)h(c)m(har)g(*line,)565 +5011 y(histdata)p 894 5011 V 41 w(t)g(data)p Ff(\))390 +5121 y Fr(Mak)m(e)e(the)f(history)f(en)m(try)h(at)h(o\013set)f +Fj(whic)m(h)g Fr(ha)m(v)m(e)g Fj(line)33 b Fr(and)27 +b Fj(data)p Fr(.)41 b(This)27 b(returns)f(the)i(old)g(en)m(try)390 +5230 y(so)37 b(the)h(caller)g(can)f(disp)s(ose)g(of)g(an)m(y)g +(application-sp)s(eci\014c)i(data.)61 b(In)37 b(the)g(case)h(of)f(an)g +(in)m(v)-5 b(alid)390 5340 y Fj(whic)m(h)p Fr(,)30 b(a)h +Fq(NULL)e Fr(p)s(oin)m(ter)i(is)f(returned.)p eop end +%%Page: 6 9 +TeXDict begin 6 8 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(6)3350 +299 y([F)-8 b(unction])-3599 b Fg(void)54 b(clear_history)49 +b Ff(\()p Fj(v)m(oid)p Ff(\))390 408 y Fr(Clear)31 b(the)f(history)h +(list)g(b)m(y)f(deleting)h(all)h(the)e(en)m(tries.)3350 +594 y([F)-8 b(unction])-3599 b Fg(void)54 b(stifle_history)49 +b Ff(\()p Fj(in)m(t)31 b(max)p Ff(\))390 704 y Fr(Sti\015e)f(the)h +(history)f(list,)h(remem)m(b)s(ering)f(only)h(the)f(last)i +Fj(max)k Fr(en)m(tries.)3350 890 y([F)-8 b(unction])-3599 +b Fg(int)53 b(unstifle_history)e Ff(\()p Fj(v)m(oid)p +Ff(\))390 1000 y Fr(Stop)27 b(sti\015ing)h(the)f(history)-8 +b(.)40 b(This)27 b(returns)f(the)h(previously-set)h(maxim)m(um)f(n)m +(um)m(b)s(er)f(of)i(history)390 1109 y(en)m(tries)g(\(as)f(set)g(b)m(y) +g Fq(stifle_history\(\))p Fr(\).)35 b(The)27 b(v)-5 b(alue)27 +b(is)g(p)s(ositiv)m(e)g(if)g(the)g(history)g(w)m(as)g(sti\015ed,)390 +1219 y(negativ)m(e)33 b(if)d(it)h(w)m(asn't.)3350 1405 +y([F)-8 b(unction])-3599 b Fg(int)53 b(history_is_stifled)e +Ff(\()p Fj(v)m(oid)p Ff(\))390 1514 y Fr(Returns)29 b(non-zero)i(if)g +(the)f(history)h(is)f(sti\015ed,)g(zero)i(if)e(it)h(is)f(not.)150 +1714 y Fi(2.3.3)63 b(Information)42 b(Ab)s(out)f(the)g(History)g(List) +150 1861 y Fr(These)30 b(functions)g(return)f(information)i(ab)s(out)f +(the)h(en)m(tire)g(history)f(list)h(or)g(individual)e(list)i(en)m +(tries.)3350 2047 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 +b(**)e(history_list)c Ff(\()p Fj(v)m(oid)p Ff(\))390 +2157 y Fr(Return)30 b(a)h Fq(NULL)e Fr(terminated)i(arra)m(y)g(of)f +Fq(HIST_ENTRY)e(*)i Fr(whic)m(h)g(is)h(the)g(curren)m(t)f(input)f +(history)-8 b(.)390 2267 y(Elemen)m(t)31 b(0)g(of)g(this)f(list)h(is)f +(the)h(b)s(eginning)f(of)g(time.)42 b(If)29 b(there)i(is)f(no)h +(history)-8 b(,)31 b(return)e Fq(NULL)p Fr(.)3350 2452 +y([F)-8 b(unction])-3599 b Fg(int)53 b(where_history)d +Ff(\()p Fj(v)m(oid)p Ff(\))390 2562 y Fr(Returns)29 b(the)i(o\013set)g +(of)g(the)g(curren)m(t)f(history)g(elemen)m(t.)3350 2748 +y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(current_history)d +Ff(\()p Fj(v)m(oid)p Ff(\))390 2858 y Fr(Return)24 b(the)h(history)g +(en)m(try)g(at)h(the)f(curren)m(t)f(p)s(osition,)j(as)e(determined)f(b) +m(y)h Fq(where_history\(\))p Fr(.)390 2967 y(If)30 b(there)g(is)h(no)f +(en)m(try)h(there,)g(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)3350 +3153 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(history_get)c +Ff(\()p Fj(in)m(t)31 b(o\013set)p Ff(\))390 3263 y Fr(Return)41 +b(the)g(history)g(en)m(try)h(at)g(p)s(osition)g Fj(o\013set)r +Fr(,)j(starting)d(from)f Fq(history_base)d Fr(\(see)k(Sec-)390 +3372 y(tion)32 b(2.4)i([History)e(V)-8 b(ariables],)35 +b(page)d(8\).)47 b(If)31 b(there)i(is)f(no)g(en)m(try)g(there,)h(or)f +(if)g Fj(o\013set)j Fr(is)d(greater)390 3482 y(than)e(the)h(history)f +(length,)h(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)3350 +3668 y([F)-8 b(unction])-3599 b Fg(time_t)54 b(history_get_time)c +Ff(\()p Fj(HIST)p 1657 3668 28 4 v 40 w(ENTR)-8 b(Y)30 +b(*en)m(try)p Ff(\))390 3778 y Fr(Return)g(the)g(time)h(stamp)f(asso)s +(ciated)i(with)e(the)h(history)f(en)m(try)h Fj(en)m(try)8 +b Fr(.)3350 3963 y([F)-8 b(unction])-3599 b Fg(int)53 +b(history_total_bytes)e Ff(\()p Fj(v)m(oid)p Ff(\))390 +4073 y Fr(Return)27 b(the)h(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(that)g +(the)g(primary)e(history)i(en)m(tries)g(are)g(using.)39 +b(This)27 b(function)390 4183 y(returns)i(the)i(sum)e(of)i(the)f +(lengths)h(of)f(all)i(the)e(lines)h(in)f(the)g(history)-8 +b(.)150 4383 y Fi(2.3.4)63 b(Mo)m(ving)41 b(Around)h(the)f(History)g +(List)150 4530 y Fr(These)30 b(functions)g(allo)m(w)i(the)e(curren)m(t) +h(index)f(in)m(to)h(the)f(history)h(list)g(to)g(b)s(e)f(set)h(or)f(c)m +(hanged.)3350 4716 y([F)-8 b(unction])-3599 b Fg(int)53 +b(history_set_pos)d Ff(\()p Fj(in)m(t)31 b(p)s(os)p Ff(\))390 +4825 y Fr(Set)37 b(the)f(curren)m(t)g(history)h(o\013set)g(to)g +Fj(p)s(os)t Fr(,)g(an)g(absolute)g(index)f(in)m(to)h(the)f(list.)60 +b(Returns)35 b(1)i(on)390 4935 y(success,)31 b(0)g(if)f +Fj(p)s(os)j Fr(is)e(less)f(than)h(zero)g(or)f(greater)i(than)e(the)g(n) +m(um)m(b)s(er)f(of)i(history)f(en)m(tries.)3350 5121 +y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(previous_history)d +Ff(\()p Fj(v)m(oid)p Ff(\))390 5230 y Fr(Bac)m(k)30 b(up)e(the)h +(curren)m(t)g(history)f(o\013set)i(to)g(the)f(previous)f(history)h(en)m +(try)-8 b(,)30 b(and)e(return)g(a)h(p)s(oin)m(ter)390 +5340 y(to)i(that)g(en)m(try)-8 b(.)41 b(If)30 b(there)h(is)f(no)h +(previous)f(en)m(try)-8 b(,)31 b(return)e(a)i Fq(NULL)e +Fr(p)s(oin)m(ter.)p eop end +%%Page: 7 10 +TeXDict begin 7 9 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(7)3350 +299 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(next_history)c +Ff(\()p Fj(v)m(oid)p Ff(\))390 408 y Fr(Mo)m(v)m(e)38 +b(the)d(curren)m(t)h(history)f(o\013set)i(forw)m(ard)e(to)h(the)g(next) +f(history)h(en)m(try)-8 b(,)37 b(and)e(return)g(the)h(a)390 +518 y(p)s(oin)m(ter)30 b(to)h(that)g(en)m(try)-8 b(.)42 +b(If)30 b(there)g(is)h(no)f(next)h(en)m(try)-8 b(,)31 +b(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)150 722 y +Fi(2.3.5)63 b(Searc)m(hing)40 b(the)h(History)h(List)150 +869 y Fr(These)36 b(functions)g(allo)m(w)i(searc)m(hing)f(of)f(the)h +(history)f(list)h(for)f(en)m(tries)h(con)m(taining)h(a)f(sp)s(eci\014c) +f(string.)150 978 y(Searc)m(hing)28 b(ma)m(y)g(b)s(e)f(p)s(erformed)f +(b)s(oth)h(forw)m(ard)f(and)h(bac)m(kw)m(ard)h(from)f(the)h(curren)m(t) +f(history)h(p)s(osition.)150 1088 y(The)j(searc)m(h)h(ma)m(y)g(b)s(e)e +Fj(anc)m(hored)p Fr(,)i(meaning)g(that)g(the)f(string)h(m)m(ust)f(matc) +m(h)h(at)g(the)g(b)s(eginning)e(of)i(the)150 1198 y(history)e(en)m(try) +-8 b(.)3350 1391 y([F)g(unction])-3599 b Fg(int)53 b(history_search)d +Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(direction)p +Ff(\))390 1501 y Fr(Searc)m(h)e(the)f(history)g(for)g +Fj(string)8 b Fr(,)29 b(starting)g(at)g(the)f(curren)m(t)g(history)h +(o\013set.)41 b(If)27 b Fj(direction)i Fr(is)g(less)390 +1610 y(than)40 b(0,)j(then)c(the)h(searc)m(h)h(is)f(through)f(previous) +h(en)m(tries,)j(otherwise)d(through)g(subsequen)m(t)390 +1720 y(en)m(tries.)i(If)30 b Fj(string)38 b Fr(is)30 +b(found,)g(then)g(the)g(curren)m(t)h(history)f(index)g(is)g(set)h(to)h +(that)f(history)f(en)m(try)-8 b(,)390 1830 y(and)33 b(the)g(v)-5 +b(alue)34 b(returned)e(is)i(the)g(o\013set)g(in)f(the)h(line)f(of)h +(the)g(en)m(try)f(where)g Fj(string)41 b Fr(w)m(as)34 +b(found.)390 1939 y(Otherwise,)c(nothing)h(is)f(c)m(hanged,)h(and)f(a)h +(-1)g(is)f(returned.)3350 2133 y([F)-8 b(unction])-3599 +b Fg(int)53 b(history_search_prefix)f Ff(\()p Fj(const)31 +b(c)m(har)g(*string,)g(in)m(t)g(direction)p Ff(\))390 +2242 y Fr(Searc)m(h)40 b(the)g(history)g(for)g Fj(string)8 +b Fr(,)43 b(starting)d(at)h(the)f(curren)m(t)g(history)g(o\013set.)71 +b(The)39 b(searc)m(h)i(is)390 2352 y(anc)m(hored:)f(matc)m(hing)30 +b(lines)f(m)m(ust)g(b)s(egin)f(with)g Fj(string)8 b Fr(.)40 +b(If)29 b Fj(direction)g Fr(is)g(less)g(than)g(0,)g(then)g(the)390 +2461 y(searc)m(h)j(is)f(through)g(previous)g(en)m(tries,)h(otherwise)g +(through)e(subsequen)m(t)h(en)m(tries.)44 b(If)31 b Fj(string)39 +b Fr(is)390 2571 y(found,)33 b(then)f(the)h(curren)m(t)g(history)g +(index)g(is)g(set)g(to)h(that)g(en)m(try)-8 b(,)34 b(and)f(the)g +(return)f(v)-5 b(alue)33 b(is)g(0.)390 2681 y(Otherwise,)d(nothing)h +(is)f(c)m(hanged,)h(and)f(a)h(-1)g(is)f(returned.)3350 +2874 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_search_pos)e +Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(direction,)g(in)m +(t)g(p)s(os)p Ff(\))390 2984 y Fr(Searc)m(h)j(for)g Fj(string)42 +b Fr(in)33 b(the)i(history)e(list,)j(starting)f(at)g +Fj(p)s(os)t Fr(,)f(an)g(absolute)g(index)g(in)m(to)h(the)f(list.)390 +3093 y(If)h Fj(direction)i Fr(is)e(negativ)m(e,)40 b(the)c(searc)m(h)g +(pro)s(ceeds)f(bac)m(kw)m(ard)i(from)e Fj(p)s(os)t Fr(,)h(otherwise)g +(forw)m(ard.)390 3203 y(Returns)43 b(the)h(absolute)h(index)f(of)g(the) +g(history)g(elemen)m(t)h(where)f Fj(string)52 b Fr(w)m(as)44 +b(found,)i(or)e(-1)390 3313 y(otherwise.)150 3516 y Fi(2.3.6)63 +b(Managing)41 b(the)g(History)h(File)150 3663 y Fr(The)26 +b(History)h(library)f(can)h(read)g(the)f(history)h(from)f(and)g(write)h +(it)g(to)g(a)g(\014le.)40 b(This)26 b(section)h(do)s(cumen)m(ts)150 +3773 y(the)k(functions)e(for)i(managing)g(a)g(history)f(\014le.)3350 +3967 y([F)-8 b(unction])-3599 b Fg(int)53 b(read_history)c +Ff(\()p Fj(const)32 b(c)m(har)e(*\014lename)p Ff(\))390 +4076 y Fr(Add)f(the)h(con)m(ten)m(ts)h(of)f Fj(\014lename)k +Fr(to)d(the)f(history)f(list,)i(a)f(line)g(at)g(a)g(time.)41 +b(If)29 b Fj(\014lename)35 b Fr(is)30 b Fq(NULL)p Fr(,)390 +4186 y(then)g(read)g(from)g(`)p Fq(~/.history)p Fr('.)39 +b(Returns)29 b(0)i(if)f(successful,)h(or)f Fq(errno)f +Fr(if)h(not.)3350 4379 y([F)-8 b(unction])-3599 b Fg(int)53 +b(read_history_range)e Ff(\()p Fj(const)31 b(c)m(har)g(*\014lename,)g +(in)m(t)g(from,)f(in)m(t)h(to)p Ff(\))390 4489 y Fr(Read)d(a)g(range)f +(of)h(lines)g(from)f Fj(\014lename)5 b Fr(,)29 b(adding)e(them)g(to)h +(the)g(history)f(list.)41 b(Start)28 b(reading)f(at)390 +4598 y(line)f Fj(from)g Fr(and)f(end)g(at)i Fj(to)5 b +Fr(.)40 b(If)25 b Fj(from)h Fr(is)g(zero,)i(start)e(at)h(the)f(b)s +(eginning.)38 b(If)26 b Fj(to)31 b Fr(is)26 b(less)g(than)g +Fj(from)p Fr(,)390 4708 y(then)k(read)g(un)m(til)g(the)g(end)g(of)g +(the)g(\014le.)41 b(If)30 b Fj(\014lename)35 b Fr(is)30 +b Fq(NULL)p Fr(,)g(then)f(read)h(from)g(`)p Fq(~/.history)p +Fr('.)390 4818 y(Returns)f(0)i(if)g(successful,)f(or)g +Fq(errno)f Fr(if)i(not.)3350 5011 y([F)-8 b(unction])-3599 +b Fg(int)53 b(write_history)d Ff(\()p Fj(const)31 b(c)m(har)g +(*\014lename)p Ff(\))390 5121 y Fr(W)-8 b(rite)36 b(the)e(curren)m(t)h +(history)f(to)h Fj(\014lename)5 b Fr(,)36 b(o)m(v)m(erwriting)g +Fj(\014lename)k Fr(if)34 b(necessary)-8 b(.)54 b(If)34 +b Fj(\014lename)390 5230 y Fr(is)e Fq(NULL)p Fr(,)g(then)g(write)g(the) +h(history)f(list)h(to)g(`)p Fq(~/.history)p Fr('.)44 +b(Returns)31 b(0)i(on)f(success,)h(or)f Fq(errno)390 +5340 y Fr(on)e(a)h(read)f(or)h(write)f(error.)p eop end +%%Page: 8 11 +TeXDict begin 8 10 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(8)3350 +299 y([F)-8 b(unction])-3599 b Fg(int)53 b(append_history)d +Ff(\()p Fj(in)m(t)31 b(nelemen)m(ts,)h(const)f(c)m(har)f(*\014lename)p +Ff(\))390 408 y Fr(App)s(end)i(the)j(last)g Fj(nelemen)m(ts)k +Fr(of)34 b(the)h(history)f(list)h(to)g Fj(\014lename)5 +b Fr(.)53 b(If)34 b Fj(\014lename)39 b Fr(is)c Fq(NULL)p +Fr(,)f(then)390 518 y(app)s(end)29 b(to)i(`)p Fq(~/.history)p +Fr('.)38 b(Returns)30 b(0)g(on)h(success,)g(or)f Fq(errno)f +Fr(on)h(a)h(read)f(or)h(write)f(error.)3350 705 y([F)-8 +b(unction])-3599 b Fg(int)53 b(history_truncate_file)f +Ff(\()p Fj(const)31 b(c)m(har)g(*\014lename,)g(in)m(t)g(nlines)p +Ff(\))390 814 y Fr(T)-8 b(runcate)38 b(the)h(history)f(\014le)g +Fj(\014lename)5 b Fr(,)41 b(lea)m(ving)e(only)g(the)f(last)h +Fj(nlines)j Fr(lines.)64 b(If)37 b Fj(\014lename)44 b +Fr(is)390 924 y Fq(NULL)p Fr(,)29 b(then)i(`)p Fq(~/.history)p +Fr(')d(is)i(truncated.)41 b(Returns)29 b(0)i(on)f(success,)h(or)f +Fq(errno)f Fr(on)i(failure.)150 1124 y Fi(2.3.7)63 b(History)41 +b(Expansion)150 1271 y Fr(These)30 b(functions)g(implemen)m(t)h +(history)f(expansion.)3350 1457 y([F)-8 b(unction])-3599 +b Fg(int)53 b(history_expand)d Ff(\()p Fj(c)m(har)31 +b(*string,)g(c)m(har)g(**output)p Ff(\))390 1567 y Fr(Expand)h +Fj(string)8 b Fr(,)35 b(placing)f(the)g(result)g(in)m(to)g +Fj(output)r Fr(,)h(a)f(p)s(oin)m(ter)g(to)g(a)g(string)g(\(see)g +(Section)h(1.1)390 1677 y([History)c(In)m(teraction],)i(page)e(1\).)41 +b(Returns:)390 1838 y Fq(0)432 b Fr(If)37 b(no)g(expansions)g(to)s(ok)i +(place)f(\(or,)i(if)d(the)h(only)f(c)m(hange)i(in)e(the)g(text)i(w)m +(as)f(the)870 1947 y(remo)m(v)-5 b(al)31 b(of)g(escap)s(e)f(c)m +(haracters)i(preceding)e(the)g(history)g(expansion)g(c)m(haracter\);) +390 2108 y Fq(1)432 b Fr(if)30 b(expansions)g(did)g(tak)m(e)i(place;) +390 2268 y Fq(-1)384 b Fr(if)30 b(there)h(w)m(as)g(an)f(error)g(in)g +(expansion;)390 2429 y Fq(2)432 b Fr(if)28 b(the)f(returned)g(line)g +(should)g(b)s(e)g(displa)m(y)m(ed,)i(but)e(not)h(executed,)h(as)f(with) +f(the)h Fq(:p)870 2538 y Fr(mo)s(di\014er)h(\(see)j(Section)f(1.1.3)h +([Mo)s(di\014ers],)e(page)i(2\).)390 2699 y(If)e(an)g(error)g(o)s +(curred)f(in)i(expansion,)f(then)g Fj(output)i Fr(con)m(tains)g(a)e +(descriptiv)m(e)i(error)e(message.)3350 2886 y([F)-8 +b(unction])-3599 b Fg(char)54 b(*)e(get_history_event)f +Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(*cindex,)g(in)m(t)g +(qc)m(har)p Ff(\))390 2995 y Fr(Returns)44 b(the)h(text)h(of)g(the)f +(history)g(ev)m(en)m(t)h(b)s(eginning)f(at)g Fj(string)53 +b Fq(+)45 b Fj(*cindex)6 b Fr(.)85 b Fj(*cindex)52 b +Fr(is)390 3105 y(mo)s(di\014ed)28 b(to)i(p)s(oin)m(t)f(to)h(after)g +(the)g(ev)m(en)m(t)h(sp)s(eci\014er.)39 b(A)m(t)31 b(function)e(en)m +(try)-8 b(,)30 b Fj(cindex)36 b Fr(p)s(oin)m(ts)29 b(to)h(the)390 +3214 y(index)35 b(in)m(to)i Fj(string)44 b Fr(where)35 +b(the)h(history)g(ev)m(en)m(t)h(sp)s(eci\014cation)g(b)s(egins.)57 +b Fj(qc)m(har)42 b Fr(is)36 b(a)g(c)m(haracter)390 3324 +y(that)27 b(is)g(allo)m(w)m(ed)i(to)f(end)e(the)h(ev)m(en)m(t)h(sp)s +(eci\014cation)g(in)f(addition)g(to)g(the)g(\\normal")h(terminating)390 +3434 y(c)m(haracters.)3350 3620 y([F)-8 b(unction])-3599 +b Fg(char)54 b(**)e(history_tokenize)f Ff(\()p Fj(const)31 +b(c)m(har)g(*string)p Ff(\))390 3730 y Fr(Return)f(an)g(arra)m(y)h(of)f +(tok)m(ens)i(parsed)d(out)i(of)g Fj(string)8 b Fr(,)30 +b(m)m(uc)m(h)h(as)f(the)h(shell)f(migh)m(t.)42 b(The)30 +b(tok)m(ens)390 3839 y(are)h(split)g(on)f(the)h(c)m(haracters)h(in)e +(the)h Fj(history)p 2006 3839 28 4 v 40 w(w)m(ord)p 2241 +3839 V 39 w(delimiters)k Fr(v)-5 b(ariable,)32 b(and)e(shell)g(quoting) +390 3949 y(con)m(v)m(en)m(tions)i(are)f(ob)s(ey)m(ed.)3350 +4135 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(history_arg_extract)f +Ff(\()p Fj(in)m(t)32 b(\014rst,)d(in)m(t)i(last,)h(const)f(c)m(har)f +(*string)p Ff(\))390 4245 y Fr(Extract)41 b(a)g(string)f(segmen)m(t)i +(consisting)f(of)f(the)h Fj(\014rst)g Fr(through)f Fj(last)j +Fr(argumen)m(ts)e(presen)m(t)f(in)390 4354 y Fj(string)8 +b Fr(.)40 b(Argumen)m(ts)31 b(are)g(split)f(using)g Fq +(history_tokenize)p Fr(.)150 4588 y Fp(2.4)68 b(History)46 +b(V)-11 b(ariables)150 4748 y Fr(This)26 b(section)i(describ)s(es)e +(the)h(externally-visible)i(v)-5 b(ariables)28 b(exp)s(orted)e(b)m(y)h +(the)g Fk(gnu)g Fr(History)g(Library)-8 b(.)3371 4934 +y([V)g(ariable])-3598 b Fg(int)53 b(history_base)390 +5044 y Fr(The)30 b(logical)j(o\013set)e(of)g(the)f(\014rst)g(en)m(try)g +(in)h(the)f(history)g(list.)3371 5230 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(history_length)390 5340 y Fr(The)30 b(n)m(um)m(b)s(er)f +(of)h(en)m(tries)i(curren)m(tly)e(stored)h(in)f(the)g(history)g(list.)p +eop end +%%Page: 9 12 +TeXDict begin 9 11 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1780 b(9)3371 +299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(history_max_entries)390 +408 y Fr(The)45 b(maxim)m(um)h(n)m(um)m(b)s(er)f(of)h(history)g(en)m +(tries.)88 b(This)45 b(m)m(ust)h(b)s(e)f(c)m(hanged)i(using)e +Fq(stifle_)390 518 y(history\(\))p Fr(.)3371 742 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(history_write_timesta)q(mps)390 +852 y Fr(If)44 b(non-zero,)49 b(timestamps)c(are)g(written)g(to)g(the)g +(history)f(\014le,)49 b(so)c(they)f(can)h(b)s(e)f(preserv)m(ed)390 +962 y(b)s(et)m(w)m(een)31 b(sessions.)41 b(The)30 b(default)g(v)-5 +b(alue)31 b(is)f(0,)h(meaning)g(that)g(timestamps)g(are)g(not)f(sa)m(v) +m(ed.)390 1116 y(The)41 b(curren)m(t)g(timestamp)h(format)g(uses)f(the) +h(v)-5 b(alue)42 b(of)f Fj(history)p 2697 1116 28 4 v +41 w(commen)m(t)p 3098 1116 V 41 w(c)m(har)48 b Fr(to)42 +b(delimit)390 1226 y(timestamp)h(en)m(tries)g(in)f(the)g(history)h +(\014le.)76 b(If)42 b(that)h(v)-5 b(ariable)43 b(do)s(es)f(not)g(ha)m +(v)m(e)i(a)f(v)-5 b(alue)42 b(\(the)390 1335 y(default\),)31 +b(timestamps)g(will)g(not)f(b)s(e)g(written.)3371 1560 +y([V)-8 b(ariable])-3598 b Fg(char)54 b(history_expansion_char)390 +1669 y Fr(The)35 b(c)m(haracter)i(that)e(in)m(tro)s(duces)g(a)h +(history)f(ev)m(en)m(t.)57 b(The)34 b(default)i(is)f(`)p +Fq(!)p Fr('.)56 b(Setting)35 b(this)h(to)g(0)390 1779 +y(inhibits)30 b(history)g(expansion.)3371 2003 y([V)-8 +b(ariable])-3598 b Fg(char)54 b(history_subst_char)390 +2113 y Fr(The)40 b(c)m(haracter)i(that)g(in)m(v)m(ok)m(es)g(w)m(ord)f +(substitution)f(if)h(found)e(at)i(the)g(start)g(of)g(a)g(line.)72 +b(The)390 2222 y(default)31 b(is)f(`)p Fq(^)p Fr('.)3371 +2447 y([V)-8 b(ariable])-3598 b Fg(char)54 b(history_comment_char)390 +2556 y Fr(During)37 b(tok)m(enization,)43 b(if)38 b(this)f(c)m +(haracter)j(is)e(seen)f(as)h(the)g(\014rst)f(c)m(haracter)j(of)e(a)g(w) +m(ord,)h(then)390 2666 y(it)44 b(and)e(all)j(subsequen)m(t)d(c)m +(haracters)j(up)d(to)i(a)g(newline)f(are)h(ignored,)i(suppressing)c +(history)390 2776 y(expansion)30 b(for)g(the)h(remainder)f(of)g(the)h +(line.)41 b(This)29 b(is)i(disabled)f(b)m(y)g(default.)3371 +3000 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e +(history_word_delimiter)q(s)390 3110 y Fr(The)27 b(c)m(haracters)i +(that)f(separate)h(tok)m(ens)f(for)f Fq(history_tokenize\(\))p +Fr(.)35 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f Fq(")390 +3219 y(\\t\\n\(\)<>;&|")p Fr(.)3371 3444 y([V)-8 b(ariable])-3598 +b Fg(char)54 b(*)e(history_search_delimit)q(er_)q(cha)q(rs)390 +3553 y Fr(The)26 b(list)g(of)g(additional)h(c)m(haracters)h(whic)m(h)e +(can)g(delimit)h(a)f(history)g(searc)m(h)h(string,)g(in)f(addition)390 +3663 y(to)31 b(space,)g(T)-8 b(AB,)32 b(`)p Fq(:)p Fr(')e(and)g(`)p +Fq(?)p Fr(')g(in)g(the)h(case)g(of)g(a)g(substring)e(searc)m(h.)41 +b(The)30 b(default)h(is)f(empt)m(y)-8 b(.)3371 3887 y([V)g(ariable]) +-3598 b Fg(char)54 b(*)e(history_no_expand_char)q(s)390 +3997 y Fr(The)29 b(list)i(of)f(c)m(haracters)h(whic)m(h)e(inhibit)h +(history)g(expansion)f(if)h(found)e(immediately)j(follo)m(wing)390 +4106 y Fj(history)p 672 4106 V 40 w(expansion)p 1104 +4106 V 40 w(c)m(har)7 b Fr(.)41 b(The)29 b(default)i(is)f(space,)i +(tab,)e(newline,)h(carriage)h(return,)d(and)h(`)p Fq(=)p +Fr('.)3371 4331 y([V)-8 b(ariable])-3598 b Fg(int)53 +b(history_quotes_inhibi)q(t_ex)q(pan)q(sio)q(n)390 4440 +y Fr(If)29 b(non-zero,)h(single-quoted)g(w)m(ords)f(are)g(not)h +(scanned)f(for)g(the)g(history)g(expansion)g(c)m(haracter.)390 +4550 y(The)h(default)g(v)-5 b(alue)31 b(is)g(0.)3371 +4774 y([V)-8 b(ariable])-3598 b Fg(rl_linebuf_func_t)57 +b(*)c(history_inhibit_expans)q(ion)q(_fu)q(ncti)q(on)390 +4884 y Fr(This)32 b(should)h(b)s(e)f(set)i(to)g(the)g(address)e(of)i(a) +f(function)g(that)h(tak)m(es)h(t)m(w)m(o)g(argumen)m(ts:)46 +b(a)34 b Fq(char)29 b(*)390 4994 y Fr(\()p Fj(string)8 +b Fr(\))27 b(and)f(an)g Fq(int)g Fr(index)g(in)m(to)i(that)f(string)f +(\()p Fj(i)5 b Fr(\).)40 b(It)27 b(should)f(return)f(a)i(non-zero)g(v) +-5 b(alue)27 b(if)g(the)390 5103 y(history)i(expansion)g(starting)h(at) +g Fj(string[i])j Fr(should)28 b(not)i(b)s(e)e(p)s(erformed;)h(zero)h +(if)f(the)g(expansion)390 5213 y(should)i(b)s(e)g(done.)45 +b(It)32 b(is)g(in)m(tended)g(for)g(use)g(b)m(y)f(applications)i(lik)m +(e)h(Bash)e(that)g(use)g(the)g(history)390 5322 y(expansion)e(c)m +(haracter)i(for)e(additional)i(purp)s(oses.)39 b(By)30 +b(default,)h(this)f(v)-5 b(ariable)31 b(is)g(set)g(to)g +Fq(NULL)p Fr(.)p eop end +%%Page: 10 13 +TeXDict begin 10 12 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1734 b(10)150 +299 y Fp(2.5)68 b(History)46 b(Programming)g(Example)150 +458 y Fr(The)30 b(follo)m(wing)i(program)e(demonstrates)h(simple)f(use) +g(of)h(the)f Fk(gnu)g Fr(History)h(Library)-8 b(.)390 +633 y Fe(#include)41 b(<stdio.h>)390 720 y(#include)g +(<readline/history.h>)390 894 y(main)f(\(argc,)h(argv\))586 +981 y(int)f(argc;)586 1068 y(char)g(**argv;)390 1156 +y({)468 1243 y(char)h(line[1024],)g(*t;)468 1330 y(int)f(len,)g(done)h +(=)e(0;)468 1504 y(line[0])i(=)f(0;)468 1679 y(using_history)j(\(\);) +468 1766 y(while)e(\(!done\))547 1853 y({)625 1940 y(printf)g +(\("history$)g("\);)625 2027 y(fflush)g(\(stdout\);)625 +2115 y(t)f(=)f(fgets)i(\(line,)f(sizeof)h(\(line\))f(-)g(1,)g(stdin\);) +625 2202 y(if)g(\(t)g(&&)f(*t\))704 2289 y({)782 2376 +y(len)h(=)g(strlen)g(\(t\);)782 2463 y(if)g(\(t[len)h(-)e(1])h(==)f +('\\n'\))861 2550 y(t[len)h(-)g(1])f(=)h('\\0';)704 2638 +y(})625 2812 y(if)g(\(!t\))704 2899 y(strcpy)g(\(line,)h("quit"\);)625 +3073 y(if)f(\(line[0]\))704 3161 y({)782 3248 y(char)g(*expansion;)782 +3335 y(int)g(result;)782 3509 y(result)h(=)e(history_expand)k(\(line,)d +(&expansion\);)782 3597 y(if)g(\(result\))861 3684 y(fprintf)h +(\(stderr,)g("\045s\\n",)f(expansion\);)782 3858 y(if)g(\(result)h(<)e +(0)h(||)f(result)i(==)f(2\))861 3945 y({)939 4032 y(free)g +(\(expansion\);)939 4120 y(continue;)861 4207 y(})782 +4381 y(add_history)i(\(expansion\);)782 4468 y(strncpy)f(\(line,)g +(expansion,)g(sizeof)g(\(line\))f(-)g(1\);)782 4555 y(free)g +(\(expansion\);)704 4643 y(})625 4817 y(if)g(\(strcmp)h(\(line,)f +("quit"\))h(==)f(0\))704 4904 y(done)g(=)f(1;)625 4991 +y(else)h(if)g(\(strcmp)h(\(line,)g("save"\))f(==)g(0\))704 +5078 y(write_history)i(\("history_file"\);)625 5166 y(else)e(if)g +(\(strcmp)h(\(line,)g("read"\))f(==)g(0\))704 5253 y(read_history)i +(\("history_file"\);)625 5340 y(else)e(if)g(\(strcmp)h(\(line,)g +("list"\))f(==)g(0\))p eop end +%%Page: 11 14 +TeXDict begin 11 13 bop 150 -116 a Fr(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(History)1734 b(11)704 +299 y Fe({)782 386 y(register)41 b(HIST_ENTRY)h(**the_list;)782 +473 y(register)f(int)f(i;)782 648 y(the_list)h(=)f(history_list)i +(\(\);)782 735 y(if)e(\(the_list\))861 822 y(for)g(\(i)f(=)h(0;)f +(the_list[i];)j(i++\))939 909 y(printf)f(\("\045d:)f(\045s\\n",)h(i)e +(+)h(history_base,)i(the_list[i]->line\);)704 996 y(})625 +1083 y(else)e(if)g(\(strncmp)h(\(line,)g("delete",)g(6\))f(==)f(0\))704 +1171 y({)782 1258 y(int)h(which;)782 1345 y(if)g(\(\(sscanf)h(\(line)f +(+)g(6,)g("\045d",)g(&which\)\))h(==)f(1\))861 1432 y({)939 +1519 y(HIST_ENTRY)i(*entry)e(=)g(remove_history)i(\(which\);)939 +1606 y(if)e(\(!entry\))1018 1694 y(fprintf)g(\(stderr,)i("No)d(such)i +(entry)f(\045d\\n",)h(which\);)939 1781 y(else)1018 1868 +y({)1096 1955 y(free)f(\(entry->line\);)1096 2042 y(free)g(\(entry\);) +1018 2130 y(})861 2217 y(})782 2304 y(else)861 2391 y({)939 +2478 y(fprintf)h(\(stderr,)g("non-numeric)h(arg)e(given)g(to)g +(`delete'\\n"\);)861 2565 y(})704 2653 y(})547 2740 y(})390 +2827 y(})p eop end +%%Page: 12 15 +TeXDict begin 12 14 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(12)150 299 y Fn(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 +b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fr(V)-8 +b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 +635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fo(\015)e +Fr(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 +b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 +y Fq(http://fsf.org/)390 964 y Fr(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f +(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 +1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f +(is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 +1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g +(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1450 y(useful)29 b(do)s(cumen)m(t)h Fj(free)36 b Fr(in)29 +b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j +(the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 +y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)p eop end +%%Page: 13 16 +TeXDict begin 13 15 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(13)330 299 y(under)26 b(this)i(License.)40 b(If)27 +b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) +g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 +b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) +j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f +(Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 +b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 +b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m +(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m +(ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g +(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 +b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s +(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g +(public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s +(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) +f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g +(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g +(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 +y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g +(formatters)f(or)g(for)g(automatic)i(translation)f(to)330 +1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) +g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g +(otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g +(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f +(arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g +(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 +b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 +b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g +(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g +(is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i +(\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) +-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fk(asci)r(i)g +Fr(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j +(LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j +Fd(SGML)f Fr(or)f Fd(XML)g Fr(using)g(a)g(publicly)330 +2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Fr(,)g(and)d +(standard-conforming)h(simple)g Fd(HTML)p Fr(,)g(P)m(ostScript)h(or)f +Fd(PDF)g Fr(designed)330 2614 y(for)e(h)m(uman)g(mo)s(di\014cation.)65 +b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g +Fd(PNG)p Fr(,)h Fd(X)n(CF)330 2724 y Fr(and)h Fd(JPG)p +Fr(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can) +f(b)s(e)f(read)g(and)h(edited)330 2833 y(only)54 b(b)m(y)f(proprietary) +h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Fr(or)f +Fd(XML)h Fr(for)g(whic)m(h)f(the)h Fd(DTD)g Fr(and/or)330 +2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5 +b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j +Fd(HTML)p Fr(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h +Fr(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s(cessors)g(for)g(output) +g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i +(means,)e(for)f(a)h(prin)m(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f +(itself,)h(plus)e(suc)m(h)f(follo)m(wing)330 3313 y(pages)28 +b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 +b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f(in)h +(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g +(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e(title)j(page)e +(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i +(near)e(the)h(most)g(prominen)m(t)g(app)s(earance)f(of)h(the)g(w)m +(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h +(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h +(an)m(y)f(p)s(erson)g(or)h(en)m(tit)m(y)h(that)f(distributes)f(copies)i +(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 +4052 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g +(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 +4162 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m +(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 +4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g +(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m +(h)330 4381 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e +(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 +b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g +(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e +(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g +(according)g(to)g(this)g(de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t) +i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) +g(the)g(notice)h(whic)m(h)e(states)i(that)330 4861 y(this)34 +b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 +b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 +4970 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j +(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 +5080 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 +b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g +(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h +(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 +b(COPYING)p eop end +%%Page: 14 17 +TeXDict begin 14 16 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(14)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +(the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h +(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 +b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j +(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e +(License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e +(in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h +(other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f +(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 +737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h +(the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 +847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 +b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d +(copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f +(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g +(the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 +y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 +y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 +b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 +2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 +b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g +(added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 +4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g +(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 +4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g +(the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 +b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 +b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e +(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 +5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m +(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 +b(,)p eop end +%%Page: 15 18 +TeXDict begin 15 17 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(15)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) +h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) +i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 +545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h +(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c +(for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g +(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h +(\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s +(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g +(few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g +(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m +(tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 +b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h +(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 +b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p +eop end +%%Page: 16 19 +TeXDict begin 16 18 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(16)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 +b(ersion's)36 b(license)g(notice.)57 b(These)330 408 +y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g +(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) +i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g +(nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s +(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 +b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 +y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) +m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 +880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 +b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m +(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 +b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e +(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i +(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s +(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f +(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m +(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 +y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) +g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) +g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g +(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m +(y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m +(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g +(not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) +f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 +1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g +(Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 +b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3455 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m +(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 +3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h +(com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 +b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 +4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end +%%Page: 17 20 +TeXDict begin 17 19 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(17)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h +(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f +(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) +s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h +(on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g +(is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i +(resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g +(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e +(b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g +(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g +(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h +(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h +(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 +b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e +(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 +b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 +b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g +(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 +3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) +i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 +3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i +(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h +(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h +(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g +(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h +(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 +b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 +b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h +(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 +y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d +(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h +(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h +(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g +(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m +(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f +(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 +4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g +(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h +(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 +b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h +(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 +b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g +(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) +330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g +(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f +(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f +(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end +%%Page: 18 21 +TeXDict begin 18 20 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(18)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 +433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 +b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g +(the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 +b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 +b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 +653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f +(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 +762 y(See)c Fq(http://www.gnu.org/copy)o(left)o(/)p Fr(.)330 +897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g +(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 +b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g +(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h +(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 +b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i +(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 +b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f +(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f +(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) +m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m +(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g +(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 +2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) +e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 +2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m +(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h +(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g +(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i +(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 +b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s +(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 +2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m +(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 +2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m +(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 +2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) +g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 +2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 +b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) +f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g +(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e +(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h +(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 +3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h +(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 +3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h +(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 +3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f +(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) +330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j +(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s +(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h +(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) +g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g +(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) +330 4005 y(eligible)h(for)e(relicensing.)p eop end +%%Page: 19 22 +TeXDict begin 19 21 bop 150 -116 a Fr(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(19)150 299 y Fp(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f +(for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fr(T)-8 b(o)35 +b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) +i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 +568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) +m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 +680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)88 b(your)40 +b(name)9 b Fe(.)468 767 y(Permission)42 b(is)e(granted)g(to)g(copy,)h +(distribute)g(and/or)g(modify)f(this)g(document)468 854 +y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i +(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h +(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 +1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g +(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f +(license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 +1203 y(Free)g(Documentation)h(License''.)275 1337 y Fr(If)d(y)m(ou)h +(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 +b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k +(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 +b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 +1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g +Fc(list)f(their)g(titles)9 b Fe(,)41 b(with)547 1646 +y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)9 b Fe(,)40 +b(and)g(with)g(the)g(Back-Cover)i(Texts)547 1733 y(being)e +Fc(list)9 b Fe(.)275 1868 y Fr(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 +b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 +1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e +(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f +(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m +(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g +(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h +(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 +b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m +(w)m(are.)p eop end +%%Page: 20 23 +TeXDict begin 20 22 bop 150 -116 a Fr(App)s(endix)29 +b(B:)i(Concept)f(Index)2391 b(20)150 299 y Fn(App)t(endix)52 +b(B)81 b(Concept)51 b(Index)150 638 y Fp(A)150 754 y +Fb(anc)n(hored)26 b(searc)n(h)6 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(7)150 988 y Fp(E)150 +1104 y Fb(ev)n(en)n(t)25 b(designators)18 b Fa(:)c(:)f(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)45 b Fb(1)2025 638 y Fp(H)2025 +852 y Fb(history)25 b(ev)n(en)n(ts)6 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(1)2025 +987 y(history)25 b(expansion)13 b Fa(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)40 b Fb(1)2025 1122 y(History)25 b(Searc)n(hing)10 +b Fa(:)j(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 +b Fb(7)p eop end +%%Page: 21 24 +TeXDict begin 21 23 bop 150 -116 a Fr(App)s(endix)29 +b(C:)h(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)1832 +b(21)150 299 y Fn(App)t(endix)52 b(C)81 b(F)-13 b(unction)52 +b(and)h(V)-13 b(ariable)53 b(Index)150 638 y Fp(A)150 +755 y Fe(add_history)7 b Fa(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(5)150 842 y Fe +(add_history_time)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)38 b Fb(5)150 929 y Fe(append_history)16 b Fa(:)g(:)d(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(8)150 +1182 y Fp(C)150 1299 y Fe(clear_history)21 b Fa(:)14 +b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 +b Fb(6)150 1386 y Fe(current_history)13 b Fa(:)k(:)c(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(6)150 1639 y Fp(F)150 +1755 y Fe(free_history_entry)27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)50 b Fb(5)150 2008 y Fp(G)150 2124 y Fe(get_history_event)8 +b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 +b Fb(8)150 2377 y Fp(H)150 2494 y Fe(history_arg_extract)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(8)150 +2581 y Fe(history_base)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(8)150 2669 y Fe +(history_comment_char)18 b Fa(:)f(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 +b Fb(9)150 2756 y Fe(history_expand)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(8)150 2843 y Fe +(history_expansion_char)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(9)150 2931 y Fe(history_get)7 b Fa(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(6)150 +3018 y Fe(history_get_history_state)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 +b Fb(5)150 3106 y Fe(history_get_time)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(6)150 3193 y Fe +(history_inhibit_expansion_fun)q(ctio)q(n)16 b Fa(:)j(:)13 +b(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(9)150 3280 y Fe(history_is_stifled) +27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 b Fb(6)150 +3368 y Fe(history_length)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)43 b Fb(8)150 3455 y Fe(history_list)24 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +48 b Fb(6)150 3543 y Fe(history_max_entries)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(9)150 3630 y Fe +(history_no_expand_chars)10 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 +b Fb(9)150 3718 y Fe(history_quotes_inhibit_expans)q(ion)28 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 +b Fb(9)150 3805 y Fe(history_search)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(7)150 3892 y Fe +(history_search_delimiter_char)q(s)10 b Fa(:)18 b(:)13 +b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b +Fb(9)150 3980 y Fe(history_search_pos)27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)50 b Fb(7)2025 638 y Fe(history_search_prefix)15 +b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fb(7)2025 725 y Fe +(history_set_history_state)27 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)49 b Fb(5)2025 +813 y Fe(history_set_pos)13 b Fa(:)k(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)41 b Fb(6)2025 900 y Fe(history_subst_char)27 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)50 b Fb(9)2025 +987 y Fe(history_tokenize)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)38 b Fb(8)2025 1074 y Fe(history_total_bytes)24 +b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)47 b Fb(6)2025 +1162 y Fe(history_truncate_file)15 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 +b Fb(8)2025 1249 y Fe(history_word_delimiters)10 b Fa(:)18 +b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)37 b Fb(9)2025 1336 y Fe(history_write_timestamps)8 +b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)35 b Fb(9)2025 1588 y Fp(N)2025 +1704 y Fe(next_history)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(7)2025 1956 y Fp(P)2025 +2072 y Fe(previous_history)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)38 b Fb(6)2025 2324 y Fp(R)2025 2440 +y Fe(read_history)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(7)2025 2527 y Fe(read_history_range)27 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)50 b Fb(7)2025 +2614 y Fe(remove_history)16 b Fa(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)43 b Fb(5)2025 2702 y Fe(replace_history_entry)15 +b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fb(5)2025 2953 y +Fp(S)2025 3069 y Fe(stifle_history)16 b Fa(:)g(:)d(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(6)2025 3321 y Fp(U)2025 +3437 y Fe(unstifle_history)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)38 b Fb(6)2025 3525 y Fe(using_history)21 +b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 +b Fb(5)2025 3776 y Fp(W)2025 3893 y Fe(where_history)21 +b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 +b Fb(6)2025 3980 y Fe(write_history)21 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(7)p eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/readline-6.2/doc/history.texi b/readline-6.2/doc/history.texi new file mode 100644 index 0000000..64945d8 --- /dev/null +++ b/readline-6.2/doc/history.texi @@ -0,0 +1,99 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header (This is for running Texinfo on a region.) +@setfilename history.info +@settitle GNU History Library +@c %**end of header (This is for running Texinfo on a region.) + +@include version.texi + +@copying +This document describes the GNU History library +(version @value{VERSION}, @value{UPDATED}), +a programming tool that provides a consistent user interface for +recalling lines of previously typed input. + +Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. + +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. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', +and with the Back-Cover Texts as in (a) below. A copy of the license is +included in the section entitled ``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: You are free to copy and modify +this GNU manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' + +@end quotation +@end copying + +@dircategory Libraries +@direntry +* History: (history). The GNU history library API. +@end direntry + +@titlepage +@title GNU History Library +@subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}. +@subtitle @value{UPDATED-MONTH} +@author Chet Ramey, Case Western Reserve University +@author Brian Fox, Free Software Foundation + +@page + +@vskip 0pt plus 1filll +@insertcopying + +@sp 1 +Published by the Free Software Foundation @* +59 Temple Place, Suite 330, @* +Boston, MA 02111-1307 @* +USA @* + +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU History Library + +This document describes the GNU History library, a programming tool that +provides a consistent user interface for recalling lines of previously +typed input. + +@menu +* Using History Interactively:: GNU History User's Manual. +* Programming with GNU History:: GNU History Programmer's Manual. +* GNU Free Documentation License:: License for copying this manual. +* Concept Index:: Index of concepts described in this manual. +* Function and Variable Index:: Index of externally visible functions + and variables. +@end menu +@end ifnottex + +@syncodeindex fn vr + +@include hsuser.texi +@include hstech.texi + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@include fdl.texi + +@node Concept Index +@appendix Concept Index +@printindex cp + +@node Function and Variable Index +@appendix Function and Variable Index +@printindex vr + +@bye diff --git a/readline-6.2/doc/history_3.ps b/readline-6.2/doc/history_3.ps new file mode 100644 index 0000000..c7a87fd --- /dev/null +++ b/readline-6.2/doc/history_3.ps @@ -0,0 +1,852 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Tue Feb 8 11:13:01 2011 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%+ font Times-Italic +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 7 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE +/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME) +.219 E F0(history \255 GNU History Library)108 96 Q F1(COPYRIGHT)72 +112.8 Q F0(The GNU History Library is Cop)108 124.8 Q +(yright \251 1989-2011 by the Free Softw)-.1 E(are F)-.1 E +(oundation, Inc.)-.15 E F1(DESCRIPTION)72 141.6 Q F0(Man)108 153.6 Q +2.81(yp)-.15 G .31(rograms read input from the user a line at a time.) +-2.81 F .309(The GNU History library is able to k)5.309 F .309 +(eep track of)-.1 F .024(those lines, associate arbitrary data with eac\ +h line, and utilize information from pre)108 165.6 R .024 +(vious lines in composing)-.25 F(ne)108 177.6 Q 2.5(wo)-.25 G(nes.)-2.5 +E F1(HIST)72 199.2 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81 +E F0 .823(The history library supports a history e)108 211.2 R .822 +(xpansion feature that is identical to the history e)-.15 F .822 +(xpansion in)-.15 F/F2 10/Times-Bold@0 SF(bash.)3.322 E F0 +(This section describes what syntax features are a)108 223.2 Q -.25(va) +-.2 G(ilable.).25 E 1.305(History e)108 240 R 1.305 +(xpansions introduce w)-.15 F 1.306(ords from the history list into the\ + input stream, making it easy to repeat)-.1 F .21 +(commands, insert the ar)108 252 R .21(guments to a pre)-.18 F .209 +(vious command into the current input line, or \214x errors in pre)-.25 +F(vious)-.25 E(commands quickly)108 264 Q(.)-.65 E 1.296(History e)108 +280.8 R 1.297(xpansion is usually performed immediately after a complet\ +e line is read.)-.15 F 1.297(It tak)6.297 F 1.297(es place in tw)-.1 F +(o)-.1 E 2.855(parts. The)108 292.8 R .354(\214rst is to determine whic\ +h line from the history list to use during substitution.)2.855 F .354 +(The second is to)5.354 F .116 +(select portions of that line for inclusion into the current one.)108 +304.8 R .117(The line selected from the history is the)5.116 F/F3 10 +/Times-Italic@0 SF -.15(ev)2.617 G(ent).15 E F0(,)A .846 +(and the portions of that line that are acted upon are)108 316.8 R F3 +(wor)3.346 E(ds)-.37 E F0 5.846(.V)C(arious)-6.956 E F3(modi\214er)3.346 +E(s)-.1 E F0 .846(are a)3.346 F -.25(va)-.2 G .845(ilable to manipulate) +.25 F .304(the selected w)108 328.8 R 2.804(ords. The)-.1 F .304 +(line is brok)2.804 F .304(en into w)-.1 F .304(ords in the same f)-.1 F +.304(ashion as)-.1 F F2(bash)2.804 E F0 .305 +(does when reading input, so)2.804 F .539(that se)108 340.8 R -.15(ve) +-.25 G .539(ral w).15 F .539(ords that w)-.1 F .539 +(ould otherwise be separated are considered one w)-.1 F .538 +(ord when surrounded by quotes)-.1 F .307(\(see the description of)108 +352.8 R F2(history_tok)2.807 E(enize\(\))-.1 E F0(belo)2.807 E 2.807 +(w\). History)-.25 F -.15(ex)2.807 G .307 +(pansions are introduced by the appearance of).15 F .52(the history e) +108 364.8 R .52(xpansion character)-.15 F 3.02(,w)-.4 G .52(hich is) +-3.02 F F2(!)3.853 E F0 .52(by def)3.853 F 3.02(ault. Only)-.1 F .52 +(backslash \()3.02 F F2(\\).833 E F0 3.02(\)a).833 G .52 +(nd single quotes can quote the)-3.02 F(history e)108 376.8 Q +(xpansion character)-.15 E(.)-.55 E F2(Ev)87 393.6 Q(ent Designators)-.1 +E F0 .204(An e)108 405.6 R -.15(ve)-.25 G .204(nt designator is a refer\ +ence to a command line entry in the history list.).15 F .205 +(Unless the reference is abso-)5.204 F(lute, e)108 417.6 Q -.15(ve)-.25 +G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot).15 G +(he current position in the history list.)-2.5 E F2(!)108 434.4 Q F0 +(Start a history substitution, e)32.67 E(xcept when follo)-.15 E +(wed by a)-.25 E F2(blank)2.5 E F0 2.5(,n)C -.25(ew)-2.5 G +(line, = or \(.).25 E F2(!)108 446.4 Q F3(n)A F0(Refer to command line) +27.67 E F3(n)2.5 E F0(.).24 E F2<21ad>108 458.4 Q F3(n)A F0 +(Refer to the current command minus)21.97 E F3(n)2.5 E F0(.).24 E F2(!!) +108 470.4 Q F0(Refer to the pre)29.34 E(vious command.)-.25 E +(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 482.4 Q F3(string) +A F0 .865(Refer to the most recent command preceding the current positi\ +on in the history list starting with)9.33 F F3(string)144 494.4 Q F0(.) +.22 E F2(!?)108 506.4 Q F3(string)A F2([?])A F0 1.304(Refer to the most\ + recent command preceding the current postition in the history list con\ +taining)144 518.4 R F3(string)144 530.4 Q F0 5(.T).22 G(he trailing)-5 E +F2(?)2.5 E F0(may be omitted if)2.5 E F3(string)2.84 E F0(is follo)2.72 +E(wed immediately by a ne)-.25 E(wline.)-.25 E/F4 12/Times-Bold@0 SF(^) +108 547.4 Q F3(string1)-5 I F4(^)5 I F3(string2)-5 I F4(^)5 I F0 2.63 +(Quick substitution.)144 554.4 R 2.629 +(Repeat the last command, replacing)7.629 F F3(string1)5.469 E F0(with) +5.129 E F3(string2)5.129 E F0 7.629(.E).02 G(qui)-7.629 E -.25(va)-.25 G +2.629(lent to).25 F -.74(``)144 566.4 S(!!:s/).74 E F3(string1)A F0(/)A +F3(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0 +(belo)2.5 E(w\).)-.25 E F2(!#)108 578.4 Q F0 +(The entire command line typed so f)27.67 E(ar)-.1 E(.)-.55 E F2 -.75 +(Wo)87 595.2 S(rd Designators).75 E F0 -.8(Wo)108 607.2 S 1.313 +(rd designators are used to select desired w).8 F 1.314(ords from the e) +-.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.314 +(separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F +.53(from the w)108 619.2 R .529(ord designator)-.1 F 5.529(.I)-.55 G +3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 +(ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2 +($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F2<ad>3.029 E F0 3.029(,o)C(r) +-3.029 E F2(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3 +(are numbered from the be)108 631.2 R 1.3 +(ginning of the line, with the \214rst w)-.15 F 1.301 +(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8 +F(inserted into the current line separated by single spaces.)108 643.2 Q +F2 2.5(0\()108 660 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 672 Q 2.5 +(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E F3 +(n)108.36 684 Q F0(The)30.64 E F3(n)2.5 E F0(th w)A(ord.)-.1 E F2(^)108 +696 Q F0(The \214rst ar)32.67 E 2.5(gument. That)-.18 F(is, w)2.5 E +(ord 1.)-.1 E F2($)108 708 Q F0(The last ar)31 E(gument.)-.18 E +(GNU History 6.2)72 768 Q(2010 August 12)132.895 E(1)197.055 E 0 Cg EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(%)108 84 Q F0(The w)26 E +(ord matched by the most recent `?)-.1 E/F2 10/Times-Italic@0 SF(string) +A F0(?' search.)A F2(x)108.77 96 Q F1<ad>A F2(y)A F0 2.5(Ar)20.65 G +(ange of w)-2.5 E(ords; `\255)-.1 E F2(y)A F0 2.5('a)C(bbre)-2.5 E +(viates `0\255)-.25 E F2(y)A F0('.)A F1(*)108 108 Q F0 .316 +(All of the w)31 F .316(ords b)-.1 F .316(ut the zeroth.)-.2 F .315 +(This is a synon)5.315 F .315(ym for `)-.15 F F2(1\255$)A F0 2.815 +('. It)B .315(is not an error to use)2.815 F F1(*)2.815 E F0 .315 +(if there is)2.815 F(just one w)144 120 Q(ord in the e)-.1 E -.15(ve) +-.25 G(nt; the empty string is returned in that case.).15 E F1(x*)108 +132 Q F0(Abbre)26 E(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1<78ad>108 144 +Q F0(Abbre)25.3 E(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5 E(e)-.1 E F1 +(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E(If a w)108 +160.8 Q(ord designator is supplied without an e)-.1 E -.15(ve)-.25 G +(nt speci\214cation, the pre).15 E(vious command is used as the e)-.25 E +-.15(ve)-.25 G(nt.).15 E F1(Modi\214ers)87 177.6 Q F0 .183 +(After the optional w)108 189.6 R .183(ord designator)-.1 F 2.683(,t)-.4 +G .184(here may appear a sequence of one or more of the follo)-2.683 F +.184(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 201.6 Q F1(h) +108 218.4 Q F0(Remo)30.44 E .3 -.15(ve a t)-.15 H +(railing \214le name component, lea).15 E(ving only the head.)-.2 E F1 +(t)108 230.4 Q F0(Remo)32.67 E .3 -.15(ve a)-.15 H +(ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r) +108 242.4 Q F0(Remo)31.56 E .3 -.15(ve a t)-.15 H(railing suf).15 E +(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E +(ving the basename.)-.2 E F1(e)108 254.4 Q F0(Remo)31.56 E .3 -.15(ve a) +-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 266.4 +Q F0(Print the ne)30.44 E 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2 +E -.15(xe)-.15 G(cute it.).15 E F1(q)108 278.4 Q F0 +(Quote the substituted w)30.44 E(ords, escaping further substitutions.) +-.1 E F1(x)108 290.4 Q F0(Quote the substituted w)31 E(ords as with)-.1 +E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks) +2.5 E F0(and ne)2.5 E(wlines.)-.25 E F1(s/)108 302.4 Q F2(old)A F1(/)A +F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 314.4 Q F2(ne)3.082 E(w)-.15 E +F0 .221(for the \214rst occurrence of)3.032 F F2(old)2.951 E F0 .221 +(in the e)3.491 F -.15(ve)-.25 G .221(nt line.).15 F(An)5.221 E 2.721 +(yd)-.15 G .221(elimiter can be used in place)-2.721 F .616(of /.)144 +326.4 R .617 +(The \214nal delimiter is optional if it is the last character of the e) +5.616 F -.15(ve)-.25 G .617(nt line.).15 F .617(The delimiter may)5.617 +F .666(be quoted in)144 338.4 R F2(old)3.396 E F0(and)3.936 E F2(ne) +3.526 E(w)-.15 E F0 .666(with a single backslash.)3.476 F .666 +(If & appears in)5.666 F F2(ne)3.166 E(w)-.15 E F0 3.166(,i).31 G 3.166 +(ti)-3.166 G 3.166(sr)-3.166 G .666(eplaced by)-3.166 F F2(old)3.166 E +F0 5.666(.A).77 G .274(single backslash will quote the &.)144 350.4 R +(If)5.274 E F2(old)3.004 E F0 .274(is null, it is set to the last)3.544 +F F2(old)3.005 E F0 .275(substituted, or)3.545 F 2.775(,i)-.4 G 2.775 +(fn)-2.775 G 2.775(op)-2.775 G(re)-2.775 E(vi-)-.25 E +(ous history substitutions took place, the last)144 362.4 Q F2(string) +2.84 E F0(in a)2.72 E F1(!?)2.5 E F2(string)A F1([?])A F0(search.)5 E F1 +(&)108 374.4 Q F0(Repeat the pre)27.67 E(vious substitution.)-.25 E F1 +(g)108 386.4 Q F0 .398(Cause changes to be applied o)31 F -.15(ve)-.15 G +2.898(rt).15 G .398(he entire e)-2.898 F -.15(ve)-.25 G .398(nt line.) +.15 F .397(This is used in conjunction with `)5.398 F F1(:s)A F0 2.897 +('\()C(e.g.,)-2.897 E(`)144 398.4 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w) +-.15 E F1(/)A F0 1.218('\) or `)B F1(:&)A F0 3.718('. If)B 1.218 +(used with `)3.718 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.219 +(elimiter can be used in place of /, and the \214nal)-3.718 F .09 +(delimiter is optional if it is the last character of the e)144 410.4 R +-.15(ve)-.25 G .089(nt line.).15 F(An)5.089 E F1(a)2.589 E F0 .089 +(may be used as a synon)2.589 F .089(ym for)-.15 F F1(g)144 422.4 Q F0 +(.)A F1(G)108 434.4 Q F0(Apply the follo)28.22 E(wing `)-.25 E F1(s)A F0 +2.5('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 +G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(PR)72 451.2 Q +(OGRAMMING WITH HIST)-.329 E(OR)-.197 E 2.738(YF)-.383 G(UNCTIONS)-2.738 +E F0(This section describes ho)108 463.2 Q 2.5(wt)-.25 G 2.5(ou)-2.5 G +(se the History library in other programs.)-2.5 E F1(Intr)87 480 Q +(oduction to History)-.18 E F0 .796 +(The programmer using the History library has a)108 492 R -.25(va)-.2 G +.797(ilable functions for remembering lines on a history list,).25 F +.308(associating arbitrary data with a line, remo)108 504 R .308 +(ving lines from the list, searching through the list for a line con-) +-.15 F .303(taining an arbitrary te)108 516 R .303 +(xt string, and referencing an)-.15 F 2.803(yl)-.15 G .303 +(ine in the list directly)-2.803 F 5.303(.I)-.65 G 2.803(na)-5.303 G +.303(ddition, a history)-2.803 F F2 -.2(ex)2.803 G(pansion).2 E F0 +(function is a)108 528 Q -.25(va)-.2 G(ilable which pro).25 E +(vides for a consistent user interf)-.15 E(ace across dif)-.1 E +(ferent programs.)-.25 E .059(The user using programs written with the \ +History library has the bene\214t of a consistent user interf)108 544.8 +R .058(ace with a)-.1 F .917(set of well-kno)108 556.8 R .917 +(wn commands for manipulating the te)-.25 F .917(xt of pre)-.15 F .917 +(vious lines and using that te)-.25 F .917(xt in ne)-.15 F 3.418(wc)-.25 +G(om-)-3.418 E 4.184(mands. The)108 568.8 R 1.684(basic history manipul\ +ation commands are identical to the history substitution pro)4.184 F +1.683(vided by)-.15 F F1(bash)108 580.8 Q F0(.)A .903 +(If the programmer desires, he can use the Readline library)108 597.6 R +3.403(,w)-.65 G .904(hich includes some history manipulation by)-3.403 F +(def)108 609.6 Q(ault, and has the added adv)-.1 E +(antage of command line editing.)-.25 E .39(Before declaring an)108 +626.4 R 2.89(yf)-.15 G .39(unctions using an)-2.89 F 2.89(yf)-.15 G .39 +(unctionality the History library pro)-2.89 F .39 +(vides in other code, an appli-)-.15 F .066 +(cation writer should include the \214le)108 638.4 R F2(<r)4.232 E +(eadline/history)-.37 E(.h>)-.55 E F0 .067(in an)4.232 F 2.567<798c>-.15 +G .067(le that uses the History library')-2.567 F 2.567(sf)-.55 G +(eatures.)-2.567 E .539(It supplies e)108 650.4 R .538 +(xtern declarations for all of the library')-.15 F 3.038(sp)-.55 G .538 +(ublic functions and v)-3.038 F .538(ariables, and declares all of the) +-.25 F(public data structures.)108 662.4 Q F1(History Storage)87 691.2 Q +F0(The history list is an array of history entries.)108 703.2 Q 2.5(Ah)5 +G(istory entry is declared as follo)-2.5 E(ws:)-.25 E F2(typedef void *) +108 720 Q F1(histdata_t;)2.5 E F0(GNU History 6.2)72 768 Q +(2010 August 12)132.895 E(2)197.055 E 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E(typedef struct _hist_entry {)108 84 Q +(char *line;)113 96 Q(char *timestamp;)113 108 Q(histdata_t data;)113 +120 Q 2.5(}H)108 132 S(IST_ENTR)-2.5 E -.92(Y;)-.65 G +(The history list itself might therefore be declared as)108 148.8 Q/F1 +10/Times-Italic@0 SF(HIST_ENTR)108 165.6 Q 2.5(Y*)-.18 G(*)-2.5 E/F2 10 +/Times-Bold@0 SF(the_history_list;)2.5 E F0(The state of the History li\ +brary is encapsulated into a single structure:)108 182.4 Q(/*)108 199.2 +Q 2.5(*As)110.5 211.2 S +(tructure used to pass around the current state of the history)-2.5 E(.) +-.65 E(*/)110.5 223.2 Q(typedef struct _hist_state {)108 235.2 Q +(HIST_ENTR)113 247.2 Q 2.5(Y*)-.65 G +(*entries; /* Pointer to the entries themselv)-2.5 E(es. */)-.15 E +(int of)113 259.2 Q 25(fset; /*)-.25 F +(The location pointer within this array)2.5 E 2.5(.*)-.65 G(/)-2.5 E +(int length;)113 271.2 Q(/* Number of elements within this array)27.5 E +2.5(.*)-.65 G(/)-2.5 E(int size;)113 283.2 Q +(/* Number of slots allocated to this array)32.5 E 2.5(.*)-.65 G(/)-2.5 +E(int \215ags;)113 295.2 Q 2.5(}H)108 307.2 S(IST)-2.5 E(OR)-.18 E(Y_ST) +-.65 E -1.11(AT)-.93 G(E;)1.11 E(If the \215ags member includes)108 324 +Q F2(HS_STIFLED)2.5 E F0 2.5(,t)C(he history has been sti\215ed.)-2.5 E +/F3 10.95/Times-Bold@0 SF(History Functions)72 340.8 Q F0 +(This section describes the calling sequence for the v)108 352.8 Q +(arious functions e)-.25 E(xported by the GNU History library)-.15 E(.) +-.65 E F2(Initializing History and State Management)87 369.6 Q F0 1.274 +(This section describes functions used to initialize and manage the sta\ +te of the History library when you)108 381.6 R -.1(wa)108 393.6 S +(nt to use the history functions in your program.).1 E F1(void)108 417.6 +Q F2(using_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Be)108 +429.6 Q(gin a session in which the history functions might be used.)-.15 +E(This initializes the interacti)5 E .3 -.15(ve v)-.25 H(ariables.)-.1 E +F1(HIST)108 453.6 Q(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5(E*).37 G F2 +(history_get_history_state)A F0(\()4.166 E F1(void)A F0(\))1.666 E +(Return a structure describing the current state of the input history) +108 465.6 Q(.)-.65 E F1(void)108 489.6 Q F2(history_set_history_state) +2.5 E F0(\()4.166 E F1(HIST)A(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5 +(E*).37 G(state)-2.5 E F0(\))1.666 E +(Set the state of the history list according to)108 501.6 Q F1(state)2.5 +E F0(.)A F2(History List Management)87 530.4 Q F0 +(These functions manage indi)108 542.4 Q(vidual entries on the history \ +list, or set parameters managing the list itself.)-.25 E F1(void)108 +566.4 Q F2(add_history)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 +E F0(\))1.666 E(Place)108 578.4 Q F1(string)2.5 E F0 +(at the end of the history list.)2.5 E +(The associated data \214eld \(if an)5 E(y\) is set to)-.15 E F2(NULL) +2.5 E F0(.)A F1(void)108 602.4 Q F2(add_history_time)2.5 E F0(\()4.166 E +F1(const c)A(har *string)-.15 E F0(\))1.666 E +(Change the time stamp associated with the most recent history entry to) +108 614.4 Q F1(string)2.5 E F0(.)A F1(HIST_ENTR)108 638.4 Q 2.5(Y*)-.18 +G F2 -.18(re)C(mo).18 E -.1(ve)-.1 G(_history).1 E F0(\()4.166 E F1 +(int whic)A(h)-.15 E F0(\))1.666 E(Remo)108 650.4 Q .353 -.15(ve h)-.15 +H .053(istory entry at of).15 F(fset)-.25 E F1(whic)2.553 E(h)-.15 E F0 +.053(from the history)2.553 F 5.053(.T)-.65 G .053(he remo)-5.053 F -.15 +(ve)-.15 G 2.553(de).15 G .052(lement is returned so you can free the) +-2.553 F(line, data, and containing structure.)108 662.4 Q F1 +(histdata_t)108 686.4 Q F2(fr)2.5 E(ee_history_entry)-.18 E F0(\()4.166 +E F1(HIST_ENTR)A 2.5(Y*)-.18 G(histent)-2.5 E F0(\))1.666 E .933 +(Free the history entry)108 698.4 R F1(histent)3.433 E F0 .933(and an) +3.433 F 3.433(yh)-.15 G .933(istory library pri)-3.433 F -.25(va)-.25 G +.933(te data associated with it.).25 F .934(Returns the applica-)5.933 F +(tion-speci\214c data so the caller can dispose of it.)108 710.4 Q +(GNU History 6.2)72 768 Q(2010 August 12)132.895 E(3)197.055 E 0 Cg EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF(HIST_ENTR)108 84 Q 2.5 +(Y*)-.18 G/F2 10/Times-Bold@0 SF -.18(re)C(place_history_entry).18 E F0 +(\()4.166 E F1(int whic)A -.834(h, const)-.15 F -.15(ch)2.5 G(ar *line) +.15 E 1.666(,h)-.1 G(istdata_t data)-1.666 E F0(\))3.332 E(Mak)108 96 Q +3.063(et)-.1 G .563(he history entry at of)-3.063 F(fset)-.25 E F1(whic) +3.063 E(h)-.15 E F0(ha)3.063 E -.15(ve)-.2 G F1(line)3.213 E F0(and) +3.063 E F1(data)3.063 E F0 5.562(.T)C .562 +(his returns the old entry so the caller can dis-)-5.562 F(pose of an) +108 108 Q 2.5(ya)-.15 G(pplication-speci\214c data.)-2.5 E +(In the case of an in)5 E -.25(va)-.4 G(lid).25 E F1(whic)2.5 E(h)-.15 E +F0 2.5(,a)C F2(NULL)A F0(pointer is returned.)2.5 E F1(void)108 132 Q F2 +(clear_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E +(Clear the history list by deleting all the entries.)108 144 Q F1(void) +108 168 Q F2(sti\215e_history)2.5 E F0(\()4.166 E F1(int max)A F0(\)) +1.666 E(Sti\215e the history list, remembering only the last)108 180 Q +F1(max)2.5 E F0(entries.)2.5 E F1(int)108 204 Q F2(unsti\215e_history) +2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .46 +(Stop sti\215ing the history)108 216 R 5.46(.T)-.65 G .46 +(his returns the pre)-5.46 F .46 +(viously-set maximum number of history entries \(as set by)-.25 F F2 +(sti-)2.96 E(\215e_history\(\))108 228 Q F0 2.5(\). history)B -.1(wa)2.5 +G 2.5(ss).1 G 2.5(ti\215ed. The)-2.5 F -.25(va)2.5 G(lue is positi).25 E +.3 -.15(ve i)-.25 H 2.5(ft).15 G(he history w)-2.5 E(as sti\215ed, ne) +-.1 E -.05(ga)-.15 G(ti).05 E .3 -.15(ve i)-.25 H 2.5(fi).15 G 2.5(tw) +-2.5 G(asn')-2.6 E(t.)-.18 E F1(int)108 252 Q F2(history_is_sti\215ed) +2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E +(Returns non-zero if the history is sti\215ed, zero if it is not.)108 +264 Q F2(Inf)87 292.8 Q(ormation About the History List)-.25 E F0(These\ + functions return information about the entire history list or indi)108 +304.8 Q(vidual list entries.)-.25 E F1(HIST_ENTR)108 328.8 Q 2.5(Y*)-.18 +G(*)-2.5 E F2(history_list)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E +.708(Return a)108 340.8 R F2(NULL)3.208 E F0 .708(terminated array of) +3.208 F F1(HIST_ENTR)3.208 E 3.208(Y*)-.18 G F0 .708 +(which is the current input history)B 5.707(.E)-.65 G .707 +(lement 0 of this)-5.707 F(list is the be)108 352.8 Q(ginning of time.) +-.15 E(If there is no history)5 E 2.5(,r)-.65 G(eturn)-2.5 E F2(NULL)2.5 +E F0(.)A F1(int)108 376.8 Q F2(wher)2.5 E(e_history)-.18 E F0(\()4.166 E +F1(void)A F0(\))1.666 E(Returns the of)108 388.8 Q +(fset of the current history element.)-.25 E F1(HIST_ENTR)108 412.8 Q +2.5(Y*)-.18 G F2(curr)A(ent_history)-.18 E F0(\()4.166 E F1(void)A F0 +(\))1.666 E 1.373 +(Return the history entry at the current position, as determined by)108 +424.8 R F2(wher)3.873 E(e_history\(\))-.18 E F0 6.373(.I)C 3.873(ft) +-6.373 G 1.374(here is no entry)-3.873 F(there, return a)108 436.8 Q F2 +(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(HIST_ENTR)108 460.8 Q 2.5(Y*) +-.18 G F2(history_get)A F0(\()4.166 E F1(int of)A(fset)-.18 E F0(\)) +1.666 E .288(Return the history entry at position)108 472.8 R F1(of) +2.787 E(fset)-.18 E F0 2.787(,s)C .287(tarting from)-2.787 F F2 +(history_base)2.787 E F0 5.287(.I)C 2.787(ft)-5.287 G .287 +(here is no entry there, or if)-2.787 F F1(of)2.787 E(fset)-.18 E F0 +(is greater than the history length, return a)108 484.8 Q F2(NULL)2.5 E +F0(pointer)2.5 E(.)-.55 E F1(time_t)108 508.8 Q F2(history_get_time)2.5 +E F0(\()4.166 E F1(HIST_ENTR)A 2.5(Y*)-.18 G F0(\))-.834 E(Return the t\ +ime stamp associated with the history entry passed as the ar)108 520.8 Q +(gument.)-.18 E F1(int)108 544.8 Q F2(history_total_bytes)2.5 E F0(\() +4.166 E F1(void)A F0(\))1.666 E .391 +(Return the number of bytes that the primary history entries are using.) +108 556.8 R .392(This function returns the sum of the)5.392 F +(lengths of all the lines in the history)108 568.8 Q(.)-.65 E F2(Mo)87 +597.6 Q(ving Ar)-.1 E(ound the History List)-.18 E F0 +(These functions allo)108 609.6 Q 2.5(wt)-.25 G(he current inde)-2.5 E +2.5(xi)-.15 G(nto the history list to be set or changed.)-2.5 E F1(int) +108 633.6 Q F2(history_set_pos)2.5 E F0(\()4.166 E F1(int pos)A F0(\)) +1.666 E .79(Set the current history of)108 645.6 R .79(fset to)-.25 F F1 +(pos)3.29 E F0 3.29(,a)C 3.29(na)-3.29 G .79(bsolute inde)-3.29 F 3.29 +(xi)-.15 G .79(nto the list.)-3.29 F .79(Returns 1 on success, 0 if)5.79 +F F1(pos)3.29 E F0 .79(is less)3.29 F +(than zero or greater than the number of history entries.)108 657.6 Q F1 +(HIST_ENTR)108 681.6 Q 2.5(Y*)-.18 G F2(pr)A -.15(ev)-.18 G +(ious_history).15 E F0(\()4.166 E F1(void)A F0(\))1.666 E .207 +(Back up the current history of)108 693.6 R .207(fset to the pre)-.25 F +.207(vious history entry)-.25 F 2.708(,a)-.65 G .208 +(nd return a pointer to that entry)-2.708 F 5.208(.I)-.65 G 2.708(ft) +-5.208 G .208(here is)-2.708 F(no pre)108 705.6 Q(vious entry)-.25 E 2.5 +(,r)-.65 G(eturn a)-2.5 E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1 +(HIST_ENTR)108 729.6 Q 2.5(Y*)-.18 G F2(next_history)A F0(\()4.166 E F1 +(void)A F0(\))1.666 E(GNU History 6.2)72 768 Q(2010 August 12)132.895 E +(4)197.055 E 0 Cg EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E(Mo)108 84 Q 1.047 -.15(ve t)-.15 H .747 +(he current history of).15 F .747(fset forw)-.25 F .746(ard to the ne) +-.1 F .746(xt history entry)-.15 F 3.246(,a)-.65 G .746 +(nd return the a pointer to that entry)-3.246 F 5.746(.I)-.65 G(f)-5.746 +E(there is no ne)108 96 Q(xt entry)-.15 E 2.5(,r)-.65 G(eturn a)-2.5 E +/F1 10/Times-Bold@0 SF(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(Sear)87 +124.8 Q(ching the History List)-.18 E F0 .005(These functions allo)108 +136.8 R 2.505(ws)-.25 G .006(earching of the history list for entries c\ +ontaining a speci\214c string.)-2.505 F .006(Searching may be)5.006 F +1.452(performed both forw)108 148.8 R 1.452(ard and backw)-.1 F 1.451 +(ard from the current history position.)-.1 F 1.451(The search may be) +6.451 F/F2 10/Times-Italic@0 SF(anc)3.951 E(hor)-.15 E(ed)-.37 E F0(,)A +(meaning that the string must match at the be)108 160.8 Q +(ginning of the history entry)-.15 E(.)-.65 E F2(int)108 184.8 Q F1 +(history_sear)2.5 E(ch)-.18 E F0(\()4.166 E F2(const c)A(har *string) +-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))1.666 E .155 +(Search the history for)108 196.8 R F2(string)2.655 E F0 2.656(,s)C .156 +(tarting at the current history of)-2.656 F 2.656(fset. If)-.25 F F2 +(dir)2.656 E(ection)-.37 E F0 .156(is less than 0, then the search)2.656 +F .802(is through pre)108 208.8 R .802 +(vious entries, otherwise through subsequent entries.)-.25 F(If)5.801 E +F2(string)3.301 E F0 .801(is found, then the current his-)3.301 F .064 +(tory inde)108 220.8 R 2.564(xi)-.15 G 2.564(ss)-2.564 G .064 +(et to that history entry)-2.564 F 2.564(,a)-.65 G .064(nd the v)-2.564 +F .064(alue returned is the of)-.25 F .064 +(fset in the line of the entry where)-.25 F F2(string)2.565 E F0 -.1(wa) +108 232.8 S 2.5(sf).1 G 2.5(ound. Otherwise,)-2.5 F +(nothing is changed, and a -1 is returned.)2.5 E F2(int)108 256.8 Q F1 +(history_sear)2.5 E(ch_pr)-.18 E(e\214x)-.18 E F0(\()4.166 E F2(const c) +A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\)) +1.666 E .684(Search the history for)108 268.8 R F2(string)3.183 E F0 +3.183(,s)C .683(tarting at the current history of)-3.183 F 3.183 +(fset. The)-.25 F .683(search is anchored: matching lines)3.183 F 1.063 +(must be)108 280.8 R 1.063(gin with)-.15 F F2(string)3.563 E F0 6.063 +(.I)C(f)-6.063 E F2(dir)3.563 E(ection)-.37 E F0 1.064 +(is less than 0, then the search is through pre)3.563 F 1.064 +(vious entries, otherwise)-.25 F 1.115(through subsequent entries.)108 +292.8 R(If)6.115 E F2(string)3.615 E F0 1.115 +(is found, then the current history inde)3.615 F 3.614(xi)-.15 G 3.614 +(ss)-3.614 G 1.114(et to that entry)-3.614 F 3.614(,a)-.65 G 1.114 +(nd the)-3.614 F(return v)108 304.8 Q(alue is 0.)-.25 E +(Otherwise, nothing is changed, and a -1 is returned.)5 E F2(int)108 +328.8 Q F1(history_sear)2.5 E(ch_pos)-.18 E F0(\()4.166 E F2(const c)A +(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E -.834(ection, int) +-.37 F(pos)2.5 E F0(\))3.332 E .603(Search for)108 340.8 R F2(string) +3.103 E F0 .603(in the history list, starting at)3.103 F F2(pos)3.104 E +F0 3.104(,a)C 3.104(na)-3.104 G .604(bsolute inde)-3.104 F 3.104(xi)-.15 +G .604(nto the list.)-3.104 F(If)5.604 E F2(dir)3.104 E(ection)-.37 E F0 +.604(is ne)3.104 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(,).15 E .608 +(the search proceeds backw)108 352.8 R .608(ard from)-.1 F F2(pos)3.108 +E F0 3.108(,o)C .608(therwise forw)-3.108 F 3.108(ard. Returns)-.1 F +.608(the absolute inde)3.108 F 3.108(xo)-.15 G 3.108(ft)-3.108 G .608 +(he history ele-)-3.108 F(ment where)108 364.8 Q F2(string)2.5 E F0 -.1 +(wa)2.5 G 2.5(sf).1 G(ound, or -1 otherwise.)-2.5 E F1 +(Managing the History File)87 393.6 Q F0 .035(The History library can r\ +ead the history from and write it to a \214le.)108 405.6 R .036 +(This section documents the functions for)5.035 F +(managing a history \214le.)108 417.6 Q F2(int)108 441.6 Q F1 -.18(re) +2.5 G(ad_history).18 E F0(\()4.166 E F2(const c)A(har *\214lename)-.15 E +F0(\))1.666 E .151(Add the contents of)108 453.6 R F2(\214lename)2.651 E +F0 .151(to the history list, a line at a time.)2.651 F(If)5.15 E F2 +(\214lename)2.65 E F0(is)2.65 E F1(NULL)2.65 E F0 2.65(,t)C .15 +(hen read from)-2.65 F F2(~/.his-)2.65 E(tory)108 465.6 Q F0 5(.R)C +(eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E +F2(int)108 489.6 Q F1 -.18(re)2.5 G(ad_history_range).18 E F0(\()4.166 E +F2(const c)A(har *\214lename)-.15 E 1.666(,i)-.1 G(nt fr)-1.666 E -.834 +(om, int)-.45 F(to)2.5 E F0(\))3.332 E .052(Read a range of lines from) +108 501.6 R F2(\214lename)2.553 E F0 2.553(,a)C .053 +(dding them to the history list.)-2.553 F .053(Start reading at line) +5.053 F F2(fr)2.553 E(om)-.45 E F0 .053(and end at)2.553 F F2(to)2.553 E +F0(.)A(If)108 513.6 Q F2(fr)2.889 E(om)-.45 E F0 .389 +(is zero, start at the be)2.889 F 2.889(ginning. If)-.15 F F2(to)2.889 E +F0 .389(is less than)2.889 F F2(fr)2.889 E(om)-.45 E F0 2.889(,t)C .388 +(hen read until the end of the \214le.)-2.889 F(If)5.388 E F2 +(\214lename)2.888 E F0(is)108 525.6 Q F1(NULL)2.5 E F0 2.5(,t)C +(hen read from)-2.5 E F2(~/.history)2.5 E F0 5(.R)C +(eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E +F2(int)108 549.6 Q F1(write_history)2.5 E F0(\()4.166 E F2(const c)A +(har *\214lename)-.15 E F0(\))1.666 E .961(Write the current history to) +108 561.6 R F2(\214lename)3.461 E F0 3.461(,o)C -.15(ve)-3.611 G +(rwriting).15 E F2(\214lename)3.461 E F0 .961(if necessary)3.461 F 5.961 +(.I)-.65 G(f)-5.961 E F2(\214lename)3.462 E F0(is)3.462 E F1(NULL)3.462 +E F0 3.462(,t)C .962(hen write)-3.462 F(the history list to)108 573.6 Q +F2(~/.history)2.5 E F0 5(.R)C(eturns 0 on success, or)-5 E F1(err)2.5 E +(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 609.6 Q +F1(append_history)2.5 E F0(\()4.166 E F2(int nelements,)A(const c)1.666 +E(har *\214lename)-.15 E F0(\))1.666 E .839(Append the last)108 621.6 R +F2(nelements)3.339 E F0 .839(of the history list to)3.339 F F2 +(\214lename)3.339 E F0 5.839(.I)C(f)-5.839 E F2(\214lename)3.339 E F0 +(is)3.339 E F1(NULL)3.339 E F0 3.339(,t)C .838(hen append to)-3.339 F F2 +(~/.history)3.338 E F0(.)A(Returns 0 on success, or)108 633.6 Q F1(err) +2.5 E(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 +657.6 Q F1(history_truncate_\214le)2.5 E F0(\()4.166 E F2(const c)A +(har *\214lename)-.15 E 1.666(,i)-.1 G(nt nlines)-1.666 E F0(\))1.666 E +-.35(Tr)108 669.6 S .38(uncate the history \214le).35 F F2(\214lename) +2.88 E F0 2.88(,l)C(ea)-2.88 E .38(ving only the last)-.2 F F2(nlines) +2.881 E F0 2.881(lines. If)2.881 F F2(\214lename)2.881 E F0(is)2.881 E +F1(NULL)2.881 E F0 2.881(,t)C(hen)-2.881 E F2(~/.history)2.881 E F0(is) +2.881 E 2.5(truncated. Returns)108 681.6 R 2.5(0o)2.5 G 2.5(ns)-2.5 G +(uccess, or)-2.5 E F1(err)2.5 E(no)-.15 E F0(on f)2.5 E(ailure.)-.1 E +(GNU History 6.2)72 768 Q(2010 August 12)132.895 E(5)197.055 E 0 Cg EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(History Expansion)87 84 Q +F0(These functions implement history e)108 96 Q(xpansion.)-.15 E/F2 10 +/Times-Italic@0 SF(int)108 120 Q F1(history_expand)2.5 E F0(\()4.166 E +F2 -.15(ch)C(ar *string).15 E 1.666(,c)-.1 G(har **output)-1.816 E F0 +(\))1.666 E(Expand)108 132 Q F2(string)2.5 E F0 2.5(,p)C +(lacing the result into)-2.5 E F2(output)2.5 E F0 2.5(,ap)C +(ointer to a string.)-2.5 E(Returns:)5 E 31(0I)144 144 S 3.066(fn)-31 G +3.066(oe)-3.066 G .566(xpansions took place \(or)-3.216 F 3.065(,i)-.4 G +3.065(ft)-3.065 G .565(he only change in the te)-3.065 F .565(xt w)-.15 +F .565(as the remo)-.1 F -.25(va)-.15 G 3.065(lo).25 G 3.065(fe)-3.065 G +(scape)-3.065 E(characters preceding the history e)180 156 Q +(xpansion character\);)-.15 E 31(1i)144 168 S 2.5(fe)-31 G +(xpansions did tak)-2.65 E 2.5(ep)-.1 G(lace;)-2.5 E 25.17(-1 if)144 180 +R(there w)2.5 E(as an error in e)-.1 E(xpansion;)-.15 E 31(2i)144 192 S +2.5(ft)-31 G(he returned line should be displayed, b)-2.5 E(ut not e)-.2 +E -.15(xe)-.15 G(cuted, as with the).15 E F1(:p)2.5 E F0(modi\214er)2.5 +E(.)-.55 E(If an error ocurred in e)108 204 Q(xpansion, then)-.15 E F2 +(output)2.5 E F0(contains a descripti)2.5 E .3 -.15(ve e)-.25 H +(rror message.).15 E F2 -.15(ch)108 228 S(ar *).15 E F1(get_history_e) +2.5 E -.1(ve)-.15 G(nt).1 E F0(\()4.166 E F2(const c)A(har *string)-.15 +E 1.666(,i)-.1 G(nt *cinde)-1.666 E -.834(x, int)-.2 F(qc)2.5 E(har)-.15 +E F0(\))3.332 E .262(Returns the te)108 240 R .262(xt of the history e) +-.15 F -.15(ve)-.25 G .262(nt be).15 F .263(ginning at)-.15 F F2(string) +2.763 E F0(+)2.763 E F2(*cinde)2.763 E(x)-.2 E F0(.)A F2(*cinde)5.263 E +(x)-.2 E F0 .263(is modi\214ed to point to after the)2.763 F -2.15 -.25 +(ev e)108 252 T .71(nt speci\214er).25 F 5.71(.A)-.55 G 3.21(tf)-5.71 G +.71(unction entry)-3.21 F(,)-.65 E F2(cinde)3.21 E(x)-.2 E F0 .709 +(points to the inde)3.21 F 3.209(xi)-.15 G(nto)-3.209 E F2(string)3.209 +E F0 .709(where the history e)3.209 F -.15(ve)-.25 G .709 +(nt speci\214ca-).15 F .527(tion be)108 264 R(gins.)-.15 E F2(qc)5.527 E +(har)-.15 E F0 .527(is a character that is allo)3.027 F .527 +(wed to end the e)-.25 F -.15(ve)-.25 G .528 +(nt speci\214cation in addition to the `).15 F(`normal')-.74 E(')-.74 E +(terminating characters.)108 276 Q F2 -.15(ch)108 300 S(ar **).15 E F1 +(history_tok)2.5 E(enize)-.1 E F0(\()4.166 E F2(const c)A(har *string) +-.15 E F0(\))1.666 E .239(Return an array of tok)108 312 R .239 +(ens parsed out of)-.1 F F2(string)2.739 E F0 2.739(,m)C .238 +(uch as the shell might.)-2.739 F .238(The tok)5.238 F .238 +(ens are split on the charac-)-.1 F(ters in the)108 324 Q F1(history_w) +2.5 E(ord_delimiters)-.1 E F0 -.25(va)2.5 G +(riable, and shell quoting con).25 E -.15(ve)-.4 G(ntions are obe).15 E +(yed.)-.15 E F2 -.15(ch)108 348 S(ar *).15 E F1(history_ar)2.5 E +(g_extract)-.1 E F0(\()4.166 E F2(int \214r)A -.834(st, int)-.1 F -.834 +(last, const)2.5 F -.15(ch)2.5 G(ar *string).15 E F0(\))3.332 E .025 +(Extract a string se)108 360 R .025(gment consisting of the)-.15 F F2 +<8c72>2.526 E(st)-.1 E F0(through)2.526 E F2(last)2.526 E F0(ar)2.526 E +.026(guments present in)-.18 F F2(string)2.526 E F0 5.026(.A)C -.18(rg) +-5.026 G .026(uments are split).18 F(using)108 372 Q F1(history_tok)2.5 +E(enize\(\))-.1 E F0(.)A F1(History V)87 400.8 Q(ariables)-.92 E F0 +(This section describes the e)108 412.8 Q(xternally-visible v)-.15 E +(ariables e)-.25 E(xported by the GNU History Library)-.15 E(.)-.65 E F2 +(int)108 436.8 Q F1(history_base)2.5 E F0(The logical of)108 448.8 Q +(fset of the \214rst entry in the history list.)-.25 E F2(int)108 472.8 +Q F1(history_length)2.5 E F0 +(The number of entries currently stored in the history list.)108 484.8 Q +F2(int)108 508.8 Q F1(history_max_entries)2.5 E F0 +(The maximum number of history entries.)108 520.8 Q +(This must be changed using)5 E F1(sti\215e_history\(\))2.5 E F0(.)A F2 +(int)108 544.8 Q F1(history_wite_timestamps)2.5 E F0 1.468 +(If non-zero, timestamps are written to the history \214le, so the)108 +556.8 R 3.968(yc)-.15 G 1.468(an be preserv)-3.968 F 1.468 +(ed between sessions.)-.15 F(The)6.468 E(def)108 568.8 Q .438(ault v)-.1 +F .439(alue is 0, meaning that timestamps are not sa)-.25 F -.15(ve)-.2 +G 2.939(d. The).15 F .439(current timestamp format uses the v)2.939 F +.439(alue of)-.25 F F2(history_comment_c)108 580.8 Q(har)-.15 E F0 .051 +(to delimit timestamp entries in the history \214le.)2.552 F .051 +(If that v)5.051 F .051(ariable does not ha)-.25 F .351 -.15(ve a v)-.2 +H(alue)-.1 E(\(the def)108 592.8 Q +(ault\), timestamps will not be written.)-.1 E F2 -.15(ch)108 616.8 S +(ar).15 E F1(history_expansion_char)2.5 E F0 +(The character that introduces a history e)108 628.8 Q -.15(ve)-.25 G +2.5(nt. The).15 F(def)2.5 E(ault is)-.1 E F1(!)2.5 E F0 5(.S)C +(etting this to 0 inhibits history e)-5 E(xpansion.)-.15 E F2 -.15(ch) +108 652.8 S(ar).15 E F1(history_subst_char)2.5 E F0 +(The character that in)108 664.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(sw).1 G +(ord substitution if found at the start of a line.)-2.6 E(The def)5 E +(ault is)-.1 E F1(^)2.5 E F0(.)A F2 -.15(ch)108 688.8 S(ar).15 E F1 +(history_comment_char)2.5 E F0 .116(During tok)108 700.8 R .117 +(enization, if this character is seen as the \214rst character of a w) +-.1 F .117(ord, then it and all subsequent char)-.1 F(-)-.2 E .277 +(acters up to a ne)108 712.8 R .276 +(wline are ignored, suppressing history e)-.25 F .276 +(xpansion for the remainder of the line.)-.15 F .276(This is dis-)5.276 +F(abled by def)108 724.8 Q(ault.)-.1 E(GNU History 6.2)72 768 Q +(2010 August 12)132.895 E(6)197.055 E 0 Cg EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F +(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF -.15(ch)108 84 S(ar *) +.15 E/F2 10/Times-Bold@0 SF(history_w)2.5 E(ord_delimiters)-.1 E F0 +(The characters that separate tok)108 96 Q(ens for)-.1 E F2(history_tok) +2.5 E(enize\(\))-.1 E F0 5(.T)C(he def)-5 E(ault v)-.1 E(alue is)-.25 E +F2 2.5("\\)2.5 G(t\\n\(\)<>;&|")-2.5 E F0(.)A F1 -.15(ch)108 120 S(ar *) +.15 E F2(history_no_expand_chars)2.5 E F0 2.054 +(The list of characters which inhibit history e)108 132 R 2.054 +(xpansion if found immediately follo)-.15 F(wing)-.25 E F2 +(history_expan-)4.555 E(sion_char)108 144 Q F0 5(.T)C(he def)-5 E +(ault is space, tab, ne)-.1 E(wline,)-.25 E F2(\\r)2.5 E F0 2.5(,a)C(nd) +-2.5 E F2(=)2.5 E F0(.)A F1 -.15(ch)108 168 S(ar *).15 E F2 +(history_sear)2.5 E(ch_delimiter_chars)-.18 E F0 .401(The list of addit\ +ional characters which can delimit a history search string, in addition\ + to space, tab,)108 180 R F1(:)2.901 E F0(and)2.901 E F1(?)2.901 E F0 +(in the case of a substring search.)108 192 Q(The def)5 E(ault is empty) +-.1 E(.)-.65 E F1(int)108 216 Q F2(history_quotes_inhibit_expansion)2.5 +E F0 .624(If non-zero, single-quoted w)108 228 R .625 +(ords are not scanned for the history e)-.1 F .625(xpansion character) +-.15 F 5.625(.T)-.55 G .625(he def)-5.625 F .625(ault v)-.1 F .625 +(alue is)-.25 F(0.)108 240 Q F1(rl_lineb)108 264 Q(uf_func_t *)-.2 E F2 +(history_inhibit_expansion_function)2.5 E F0 .348 +(This should be set to the address of a function that tak)108 276 R .348 +(es tw)-.1 F 2.848(oa)-.1 G -.18(rg)-2.848 G .347(uments: a).18 F F2 +.347(char *)2.847 F F0(\()2.847 E F1(string)A F0 2.847(\)a)C .347(nd an) +-2.847 F F2(int)2.847 E F0(inde)2.847 E(x)-.15 E .227 +(into that string \()108 288 R F1(i)A F0 2.727(\). It)B .227 +(should return a non-zero v)2.727 F .227(alue if the history e)-.25 F +.227(xpansion starting at)-.15 F F1(string[i])2.728 E F0 .228 +(should not)2.728 F .019(be performed; zero if the e)108 300 R .019 +(xpansion should be done.)-.15 F .019 +(It is intended for use by applications lik)5.019 F(e)-.1 E F2(bash) +2.519 E F0 .018(that use)2.519 F(the history e)108 312 Q +(xpansion character for additional purposes.)-.15 E(By def)5 E +(ault, this v)-.1 E(ariable is set to)-.25 E F2(NULL)2.5 E F0(.)A/F3 +10.95/Times-Bold@0 SF(FILES)72 328.8 Q F1(~/.history)109.666 340.8 Q F0 +(Def)144 352.8 Q(ault \214lename for reading and writing sa)-.1 E -.15 +(ve)-.2 G 2.5(dh).15 G(istory)-2.5 E F3(SEE ALSO)72 369.6 Q F1 +(The Gnu Readline Libr)108 381.6 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E +(ox and Chet Rame)-.15 E(y)-.15 E F1(The Gnu History Libr)108 393.6 Q +(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E +F1(bash)108 405.6 Q F0(\(1\))A F1 -.37(re)108 417.6 S(adline).37 E F0 +(\(3\))A F3 -.548(AU)72 434.4 S(THORS).548 E F0(Brian F)108 446.4 Q +(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 +458.4 Q(g)-.18 E(Chet Rame)108 475.2 Q 1.3 -.65(y, C)-.15 H(ase W).65 E +(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E +(chet@ins.CWR)108 487.2 Q(U.Edu)-.4 E F3 -.11(BU)72 504 S 2.738(GR).11 G +(EPOR)-2.738 E(TS)-.438 E F0 .16(If you \214nd a b)108 516 R .16 +(ug in the)-.2 F F2(history)2.66 E F0(library)2.66 E 2.66(,y)-.65 G .16 +(ou should report it.)-2.66 F .16(But \214rst, you should mak)5.16 F +2.66(es)-.1 G .16(ure that it really is)-2.66 F 2.5(ab)108 528 S +(ug, and that it appears in the latest v)-2.7 E(ersion of the)-.15 E F2 +(history)2.5 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.).15 E .705 +(Once you ha)108 544.8 R 1.005 -.15(ve d)-.2 H .705(etermined that a b) +.15 F .704(ug actually e)-.2 F .704(xists, mail a b)-.15 F .704 +(ug report to)-.2 F F1 -.2(bu)3.204 G(g\255r).2 E(eadline)-.37 E F0(@)A +F1(gnu.or)A(g)-.37 E F0 5.704(.I)C 3.204(fy)-5.704 G(ou)-3.204 E(ha)108 +556.8 Q 1.809 -.15(ve a \214)-.2 H 1.509 +(x, you are welcome to mail that as well!).15 F 1.51 +(Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F +(mailed to)108 568.8 Q F1 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F1 +(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2 +(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 585.6 Q +(ug reports concerning this manual page should be directed to)-.2 E F1 +-.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E +(GNU History 6.2)72 768 Q(2010 August 12)132.895 E(7)197.055 E 0 Cg EP +%%Trailer +end +%%EOF diff --git a/readline-6.2/doc/hstech.texi b/readline-6.2/doc/hstech.texi new file mode 100644 index 0000000..4fc9e8e --- /dev/null +++ b/readline-6.2/doc/hstech.texi @@ -0,0 +1,577 @@ +@ignore +This file documents the user interface to the GNU History library. + +Copyright (C) 1988-2011 Free Software Foundation, Inc. +Authored by Brian Fox and Chet Ramey. + +Permission is granted to make and distribute verbatim copies of this manual +provided the copyright notice and this permission notice are preserved on +all copies. + +Permission is granted to process this file through Tex and print the +results, provided the printed document carries copying permission notice +identical to this one except for the removal of this paragraph (this +paragraph not being relevant to the printed manual). + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +GNU Copyright statement is available to the distributee, and provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions. +@end ignore + +@node Programming with GNU History +@chapter Programming with GNU History + +This chapter describes how to interface programs that you write +with the @sc{gnu} History Library. +It should be considered a technical guide. +For information on the interactive use of @sc{gnu} History, @pxref{Using +History Interactively}. + +@menu +* Introduction to History:: What is the GNU History library for? +* History Storage:: How information is stored. +* History Functions:: Functions that you can use. +* History Variables:: Variables that control behaviour. +* History Programming Example:: Example of using the GNU History Library. +@end menu + +@node Introduction to History +@section Introduction to History + +Many programs read input from the user a line at a time. The @sc{gnu} +History library is able to keep track of those lines, associate arbitrary +data with each line, and utilize information from previous lines in +composing new ones. + +The programmer using the History library has available functions +for remembering lines on a history list, associating arbitrary data +with a line, removing lines from the list, searching through the list +for a line containing an arbitrary text string, and referencing any line +in the list directly. In addition, a history @dfn{expansion} function +is available which provides for a consistent user interface across +different programs. + +The user using programs written with the History library has the +benefit of a consistent user interface with a set of well-known +commands for manipulating the text of previous lines and using that text +in new commands. The basic history manipulation commands are similar to +the history substitution provided by @code{csh}. + +If the programmer desires, he can use the Readline library, which +includes some history manipulation by default, and has the added +advantage of command line editing. + +Before declaring any functions using any functionality the History +library provides in other code, an application writer should include +the file @code{<readline/history.h>} in any file that uses the +History library's features. It supplies extern declarations for all +of the library's public functions and variables, and declares all of +the public data structures. + +@node History Storage +@section History Storage + +The history list is an array of history entries. A history entry is +declared as follows: + +@example +typedef void *histdata_t; + +typedef struct _hist_entry @{ + char *line; + char *timestamp; + histdata_t data; +@} HIST_ENTRY; +@end example + +The history list itself might therefore be declared as + +@example +HIST_ENTRY **the_history_list; +@end example + +The state of the History library is encapsulated into a single structure: + +@example +/* + * A structure used to pass around the current state of the history. + */ +typedef struct _hist_state @{ + HIST_ENTRY **entries; /* Pointer to the entries themselves. */ + int offset; /* The location pointer within this array. */ + int length; /* Number of elements within this array. */ + int size; /* Number of slots allocated to this array. */ + int flags; +@} HISTORY_STATE; +@end example + +If the flags member includes @code{HS_STIFLED}, the history has been +stifled. + +@node History Functions +@section History Functions + +This section describes the calling sequence for the various functions +exported by the @sc{gnu} History library. + +@menu +* Initializing History and State Management:: Functions to call when you + want to use history in a + program. +* History List Management:: Functions used to manage the list + of history entries. +* Information About the History List:: Functions returning information about + the history list. +* Moving Around the History List:: Functions used to change the position + in the history list. +* Searching the History List:: Functions to search the history list + for entries containing a string. +* Managing the History File:: Functions that read and write a file + containing the history list. +* History Expansion:: Functions to perform csh-like history + expansion. +@end menu + +@node Initializing History and State Management +@subsection Initializing History and State Management + +This section describes functions used to initialize and manage +the state of the History library when you want to use the history +functions in your program. + +@deftypefun void using_history (void) +Begin a session in which the history functions might be used. This +initializes the interactive variables. +@end deftypefun + +@deftypefun {HISTORY_STATE *} history_get_history_state (void) +Return a structure describing the current state of the input history. +@end deftypefun + +@deftypefun void history_set_history_state (HISTORY_STATE *state) +Set the state of the history list according to @var{state}. +@end deftypefun + +@node History List Management +@subsection History List Management + +These functions manage individual entries on the history list, or set +parameters managing the list itself. + +@deftypefun void add_history (const char *string) +Place @var{string} at the end of the history list. The associated data +field (if any) is set to @code{NULL}. +@end deftypefun + +@deftypefun void add_history_time (const char *string) +Change the time stamp associated with the most recent history entry to +@var{string}. +@end deftypefun + +@deftypefun {HIST_ENTRY *} remove_history (int which) +Remove history entry at offset @var{which} from the history. The +removed element is returned so you can free the line, data, +and containing structure. +@end deftypefun + +@deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent) +Free the history entry @var{histent} and any history library private +data associated with it. Returns the application-specific data +so the caller can dispose of it. +@end deftypefun + +@deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data) +Make the history entry at offset @var{which} have @var{line} and @var{data}. +This returns the old entry so the caller can dispose of any +application-specific data. In the case +of an invalid @var{which}, a @code{NULL} pointer is returned. +@end deftypefun + +@deftypefun void clear_history (void) +Clear the history list by deleting all the entries. +@end deftypefun + +@deftypefun void stifle_history (int max) +Stifle the history list, remembering only the last @var{max} entries. +@end deftypefun + +@deftypefun int unstifle_history (void) +Stop stifling the history. This returns the previously-set +maximum number of history entries (as set by @code{stifle_history()}). +The value is positive if the history was +stifled, negative if it wasn't. +@end deftypefun + +@deftypefun int history_is_stifled (void) +Returns non-zero if the history is stifled, zero if it is not. +@end deftypefun + +@node Information About the History List +@subsection Information About the History List + +These functions return information about the entire history list or +individual list entries. + +@deftypefun {HIST_ENTRY **} history_list (void) +Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the +current input history. Element 0 of this list is the beginning of time. +If there is no history, return @code{NULL}. +@end deftypefun + +@deftypefun int where_history (void) +Returns the offset of the current history element. +@end deftypefun + +@deftypefun {HIST_ENTRY *} current_history (void) +Return the history entry at the current position, as determined by +@code{where_history()}. If there is no entry there, return a @code{NULL} +pointer. +@end deftypefun + +@deftypefun {HIST_ENTRY *} history_get (int offset) +Return the history entry at position @var{offset}, starting from +@code{history_base} (@pxref{History Variables}). +If there is no entry there, or if @var{offset} +is greater than the history length, return a @code{NULL} pointer. +@end deftypefun + +@deftypefun time_t history_get_time (HIST_ENTRY *entry) +Return the time stamp associated with the history entry @var{entry}. +@end deftypefun + +@deftypefun int history_total_bytes (void) +Return the number of bytes that the primary history entries are using. +This function returns the sum of the lengths of all the lines in the +history. +@end deftypefun + +@node Moving Around the History List +@subsection Moving Around the History List + +These functions allow the current index into the history list to be +set or changed. + +@deftypefun int history_set_pos (int pos) +Set the current history offset to @var{pos}, an absolute index +into the list. +Returns 1 on success, 0 if @var{pos} is less than zero or greater +than the number of history entries. +@end deftypefun + +@deftypefun {HIST_ENTRY *} previous_history (void) +Back up the current history offset to the previous history entry, and +return a pointer to that entry. If there is no previous entry, return +a @code{NULL} pointer. +@end deftypefun + +@deftypefun {HIST_ENTRY *} next_history (void) +Move the current history offset forward to the next history entry, and +return the a pointer to that entry. If there is no next entry, return +a @code{NULL} pointer. +@end deftypefun + +@node Searching the History List +@subsection Searching the History List +@cindex History Searching + +These functions allow searching of the history list for entries containing +a specific string. Searching may be performed both forward and backward +from the current history position. The search may be @dfn{anchored}, +meaning that the string must match at the beginning of the history entry. +@cindex anchored search + +@deftypefun int history_search (const char *string, int direction) +Search the history for @var{string}, starting at the current history offset. +If @var{direction} is less than 0, then the search is through +previous entries, otherwise through subsequent entries. +If @var{string} is found, then +the current history index is set to that history entry, and the value +returned is the offset in the line of the entry where +@var{string} was found. Otherwise, nothing is changed, and a -1 is +returned. +@end deftypefun + +@deftypefun int history_search_prefix (const char *string, int direction) +Search the history for @var{string}, starting at the current history +offset. The search is anchored: matching lines must begin with +@var{string}. If @var{direction} is less than 0, then the search is +through previous entries, otherwise through subsequent entries. +If @var{string} is found, then the +current history index is set to that entry, and the return value is 0. +Otherwise, nothing is changed, and a -1 is returned. +@end deftypefun + +@deftypefun int history_search_pos (const char *string, int direction, int pos) +Search for @var{string} in the history list, starting at @var{pos}, an +absolute index into the list. If @var{direction} is negative, the search +proceeds backward from @var{pos}, otherwise forward. Returns the absolute +index of the history element where @var{string} was found, or -1 otherwise. +@end deftypefun + +@node Managing the History File +@subsection Managing the History File + +The History library can read the history from and write it to a file. +This section documents the functions for managing a history file. + +@deftypefun int read_history (const char *filename) +Add the contents of @var{filename} to the history list, a line at a time. +If @var{filename} is @code{NULL}, then read from @file{~/.history}. +Returns 0 if successful, or @code{errno} if not. +@end deftypefun + +@deftypefun int read_history_range (const char *filename, int from, int to) +Read a range of lines from @var{filename}, adding them to the history list. +Start reading at line @var{from} and end at @var{to}. +If @var{from} is zero, start at the beginning. If @var{to} is less than +@var{from}, then read until the end of the file. If @var{filename} is +@code{NULL}, then read from @file{~/.history}. Returns 0 if successful, +or @code{errno} if not. +@end deftypefun + +@deftypefun int write_history (const char *filename) +Write the current history to @var{filename}, overwriting @var{filename} +if necessary. +If @var{filename} is @code{NULL}, then write the history list to +@file{~/.history}. +Returns 0 on success, or @code{errno} on a read or write error. +@end deftypefun + +@deftypefun int append_history (int nelements, const char *filename) +Append the last @var{nelements} of the history list to @var{filename}. +If @var{filename} is @code{NULL}, then append to @file{~/.history}. +Returns 0 on success, or @code{errno} on a read or write error. +@end deftypefun + +@deftypefun int history_truncate_file (const char *filename, int nlines) +Truncate the history file @var{filename}, leaving only the last +@var{nlines} lines. +If @var{filename} is @code{NULL}, then @file{~/.history} is truncated. +Returns 0 on success, or @code{errno} on failure. +@end deftypefun + +@node History Expansion +@subsection History Expansion + +These functions implement history expansion. + +@deftypefun int history_expand (char *string, char **output) +Expand @var{string}, placing the result into @var{output}, a pointer +to a string (@pxref{History Interaction}). Returns: +@table @code +@item 0 +If no expansions took place (or, if the only change in +the text was the removal of escape characters preceding the history expansion +character); +@item 1 +if expansions did take place; +@item -1 +if there was an error in expansion; +@item 2 +if the returned line should be displayed, but not executed, +as with the @code{:p} modifier (@pxref{Modifiers}). +@end table + +If an error ocurred in expansion, then @var{output} contains a descriptive +error message. +@end deftypefun + +@deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar) +Returns the text of the history event beginning at @var{string} + +@var{*cindex}. @var{*cindex} is modified to point to after the event +specifier. At function entry, @var{cindex} points to the index into +@var{string} where the history event specification begins. @var{qchar} +is a character that is allowed to end the event specification in addition +to the ``normal'' terminating characters. +@end deftypefun + +@deftypefun {char **} history_tokenize (const char *string) +Return an array of tokens parsed out of @var{string}, much as the +shell might. The tokens are split on the characters in the +@var{history_word_delimiters} variable, +and shell quoting conventions are obeyed. +@end deftypefun + +@deftypefun {char *} history_arg_extract (int first, int last, const char *string) +Extract a string segment consisting of the @var{first} through @var{last} +arguments present in @var{string}. Arguments are split using +@code{history_tokenize}. +@end deftypefun + +@node History Variables +@section History Variables + +This section describes the externally-visible variables exported by +the @sc{gnu} History Library. + +@deftypevar int history_base +The logical offset of the first entry in the history list. +@end deftypevar + +@deftypevar int history_length +The number of entries currently stored in the history list. +@end deftypevar + +@deftypevar int history_max_entries +The maximum number of history entries. This must be changed using +@code{stifle_history()}. +@end deftypevar + +@deftypevar int history_write_timestamps +If non-zero, timestamps are written to the history file, so they can be +preserved between sessions. The default value is 0, meaning that +timestamps are not saved. + +The current timestamp format uses the value of @var{history_comment_char} +to delimit timestamp entries in the history file. If that variable does +not have a value (the default), timestamps will not be written. +@end deftypevar + +@deftypevar char history_expansion_char +The character that introduces a history event. The default is @samp{!}. +Setting this to 0 inhibits history expansion. +@end deftypevar + +@deftypevar char history_subst_char +The character that invokes word substitution if found at the start of +a line. The default is @samp{^}. +@end deftypevar + +@deftypevar char history_comment_char +During tokenization, if this character is seen as the first character +of a word, then it and all subsequent characters up to a newline are +ignored, suppressing history expansion for the remainder of the line. +This is disabled by default. +@end deftypevar + +@deftypevar {char *} history_word_delimiters +The characters that separate tokens for @code{history_tokenize()}. +The default value is @code{" \t\n()<>;&|"}. +@end deftypevar + +@deftypevar {char *} history_search_delimiter_chars +The list of additional characters which can delimit a history search +string, in addition to space, TAB, @samp{:} and @samp{?} in the case of +a substring search. The default is empty. +@end deftypevar + +@deftypevar {char *} history_no_expand_chars +The list of characters which inhibit history expansion if found immediately +following @var{history_expansion_char}. The default is space, tab, newline, +carriage return, and @samp{=}. +@end deftypevar + +@deftypevar int history_quotes_inhibit_expansion +If non-zero, single-quoted words are not scanned for the history expansion +character. The default value is 0. +@end deftypevar + +@deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function +This should be set to the address of a function that takes two arguments: +a @code{char *} (@var{string}) +and an @code{int} index into that string (@var{i}). +It should return a non-zero value if the history expansion starting at +@var{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 @code{NULL}. +@end deftypevar + +@node History Programming Example +@section History Programming Example + +The following program demonstrates simple use of the @sc{gnu} History Library. + +@smallexample +#include <stdio.h> +#include <readline/history.h> + +main (argc, argv) + int argc; + char **argv; +@{ + char line[1024], *t; + int len, done = 0; + + line[0] = 0; + + using_history (); + while (!done) + @{ + printf ("history$ "); + fflush (stdout); + t = fgets (line, sizeof (line) - 1, stdin); + if (t && *t) + @{ + len = strlen (t); + if (t[len - 1] == '\n') + t[len - 1] = '\0'; + @} + + if (!t) + strcpy (line, "quit"); + + if (line[0]) + @{ + char *expansion; + int result; + + result = history_expand (line, &expansion); + if (result) + fprintf (stderr, "%s\n", expansion); + + if (result < 0 || result == 2) + @{ + free (expansion); + continue; + @} + + add_history (expansion); + strncpy (line, expansion, sizeof (line) - 1); + free (expansion); + @} + + if (strcmp (line, "quit") == 0) + done = 1; + else if (strcmp (line, "save") == 0) + write_history ("history_file"); + else if (strcmp (line, "read") == 0) + read_history ("history_file"); + else if (strcmp (line, "list") == 0) + @{ + register HIST_ENTRY **the_list; + register int i; + + the_list = history_list (); + if (the_list) + for (i = 0; the_list[i]; i++) + printf ("%d: %s\n", i + history_base, the_list[i]->line); + @} + else if (strncmp (line, "delete", 6) == 0) + @{ + int which; + if ((sscanf (line + 6, "%d", &which)) == 1) + @{ + HIST_ENTRY *entry = remove_history (which); + if (!entry) + fprintf (stderr, "No such entry %d\n", which); + else + @{ + free (entry->line); + free (entry); + @} + @} + else + @{ + fprintf (stderr, "non-numeric arg given to `delete'\n"); + @} + @} + @} +@} +@end smallexample diff --git a/readline-6.2/doc/hsuser.texi b/readline-6.2/doc/hsuser.texi new file mode 100644 index 0000000..75df3ee --- /dev/null +++ b/readline-6.2/doc/hsuser.texi @@ -0,0 +1,471 @@ +@ignore +This file documents the user interface to the GNU History library. + +Copyright (C) 1988--2011 Free Software Foundation, Inc. +Authored by Brian Fox and Chet Ramey. + +Permission is granted to make and distribute verbatim copies of this manual +provided the copyright notice and this permission notice are preserved on +all copies. + +Permission is granted to process this file through Tex and print the +results, provided the printed document carries copying permission notice +identical to this one except for the removal of this paragraph (this +paragraph not being relevant to the printed manual). + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +GNU Copyright statement is available to the distributee, and provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions. +@end ignore + +@node Using History Interactively +@chapter Using History Interactively + +@ifclear BashFeatures +@defcodeindex bt +@end ifclear + +@ifset BashFeatures +This chapter describes how to use the @sc{gnu} History Library +interactively, from a user's standpoint. +It should be considered a user's guide. +For information on using the @sc{gnu} History Library in other programs, +see the @sc{gnu} Readline Library Manual. +@end ifset +@ifclear BashFeatures +This chapter describes how to use the @sc{gnu} History Library interactively, +from a user's standpoint. It should be considered a user's guide. For +information on using the @sc{gnu} History Library in your own programs, +@pxref{Programming with GNU History}. +@end ifclear + +@ifset BashFeatures +@menu +* Bash History Facilities:: How Bash lets you manipulate your command + history. +* Bash History Builtins:: The Bash builtin commands that manipulate + the command history. +* History Interaction:: What it feels like using History as a user. +@end menu +@end ifset +@ifclear BashFeatures +@menu +* History Interaction:: What it feels like using History as a user. +@end menu +@end ifclear + +@ifset BashFeatures +@node Bash History Facilities +@section Bash History Facilities +@cindex command history +@cindex history list + +When the @option{-o history} option to the @code{set} builtin +is enabled (@pxref{The Set Builtin}), +the shell provides access to the @dfn{command history}, +the list of commands previously typed. +The value of the @env{HISTSIZE} shell variable is used as the +number of commands to save in a history list. +The text of the last @env{$HISTSIZE} +commands (default 500) is saved. +The shell stores each command in the history list prior to +parameter and variable expansion +but after history expansion is performed, subject to the +values of the shell variables +@env{HISTIGNORE} and @env{HISTCONTROL}. + +When the shell starts up, the history is initialized from the +file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). +The file named by the value of @env{HISTFILE} is truncated, if +necessary, to contain no more than the number of lines specified by +the value of the @env{HISTFILESIZE} variable. +When an interactive shell exits, the last +@env{$HISTSIZE} lines are copied from the history list to the file +named by @env{$HISTFILE}. +If the @code{histappend} shell option is set (@pxref{Bash Builtins}), +the lines are appended to the history file, +otherwise the history file is overwritten. +If @env{HISTFILE} +is unset, or if the history file is unwritable, the history is +not saved. After saving the history, the history file is truncated +to contain no more than @env{$HISTFILESIZE} +lines. If @env{HISTFILESIZE} is not set, no truncation is performed. + +If the @env{HISTTIMEFORMAT} is set, the time stamp information +associated with each history entry is written to the history file, +marked with the history comment character. +When the history file is read, lines beginning with the history +comment character followed immediately by a digit are interpreted +as timestamps for the previous history line. + +The builtin command @code{fc} may be used to list or edit and re-execute +a portion of the history list. +The @code{history} builtin may be used to display or modify the history +list and manipulate the history file. +When using command-line editing, search commands +are available in each editing mode that provide access to the +history list (@pxref{Commands For History}). + +The shell allows control over which commands are saved on the history +list. The @env{HISTCONTROL} and @env{HISTIGNORE} +variables may be set to cause the shell to save only a subset of the +commands entered. +The @code{cmdhist} +shell option, if enabled, causes the shell to attempt to save each +line of a multi-line command in the same history entry, adding +semicolons where necessary to preserve syntactic correctness. +The @code{lithist} +shell option causes the shell to save the command with embedded newlines +instead of semicolons. +The @code{shopt} builtin is used to set these options. +@xref{Bash Builtins}, for a description of @code{shopt}. + +@node Bash History Builtins +@section Bash History Builtins +@cindex history builtins + +Bash provides two builtin commands which manipulate the +history list and history file. + +@table @code + +@item fc +@btindex fc +@example +@code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]} +@code{fc -s [@var{pat}=@var{rep}] [@var{command}]} +@end example + +Fix Command. In the first form, a range of commands from @var{first} to +@var{last} is selected from the history list. Both @var{first} and +@var{last} may be specified as a string (to locate the most recent +command beginning with that string) or as a number (an index into the +history list, where a negative number is used as an offset from the +current command number). If @var{last} is not specified it is set to +@var{first}. If @var{first} is not specified it is set to the previous +command for editing and @minus{}16 for listing. If the @option{-l} flag is +given, the commands are listed on standard output. The @option{-n} flag +suppresses the command numbers when listing. The @option{-r} flag +reverses the order of the listing. Otherwise, the editor given by +@var{ename} is invoked on a file containing those commands. If +@var{ename} is not given, the value of the following variable expansion +is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the +value of the @env{FCEDIT} variable if set, or the value of the +@env{EDITOR} variable if that is set, or @code{vi} if neither is set. +When editing is complete, the edited commands are echoed and executed. + +In the second form, @var{command} is re-executed after each instance +of @var{pat} in the selected command is replaced by @var{rep}. + +A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so +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 +@btindex history +@example +history [@var{n}] +history -c +history -d @var{offset} +history [-anrw] [@var{filename}] +history -ps @var{arg} +@end example + +With no options, display the history list with line numbers. +Lines prefixed with a @samp{*} have been modified. +An argument of @var{n} lists only the last @var{n} lines. +If the shell variable @env{HISTTIMEFORMAT} is set and not null, +it is used as a format string for @var{strftime} to display +the time stamp associated with each displayed history entry. +No intervening blank is printed between the formatted time stamp +and the history line. + +Options, if supplied, have the following meanings: + +@table @code +@item -c +Clear the history list. This may be combined +with the other options to replace the history list completely. + +@item -d @var{offset} +Delete the history entry at position @var{offset}. +@var{offset} should be specified as it appears when the history is +displayed. + +@item -a +Append the new +history lines (history lines entered since the beginning of the +current Bash session) to the history file. + +@item -n +Append the history lines not already read from the history file +to the current history list. These are lines appended to the history +file since the beginning of the current Bash session. + +@item -r +Read the current history file and append its contents to +the history list. + +@item -w +Write out the current history to the history file. + +@item -p +Perform history substitution on the @var{arg}s and display the result +on the standard output, without storing the results in the history list. + +@item -s +The @var{arg}s are added to the end of +the history list as a single entry. + +@end table + +When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is +used, if @var{filename} +is given, then it is used as the history file. If not, then +the value of the @env{HISTFILE} variable is used. + +@end table +@end ifset + +@node History Interaction +@section History Expansion +@cindex history expansion + +The History library provides a history expansion feature that is similar +to the history expansion provided by @code{csh}. This section +describes the syntax used to manipulate the history information. + +History expansions introduce words from the history list into +the input stream, making it easy to repeat commands, insert the +arguments to a previous command into the current input line, or +fix errors in previous commands quickly. + +History expansion takes place in two parts. The first is to determine +which line from the 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 +@dfn{event}, and the portions of that line that are acted upon are +called @dfn{words}. Various @dfn{modifiers} are available to manipulate +the selected words. The line is broken into words in the same fashion +that Bash does, so that several words +surrounded by quotes are considered one word. +History expansions are introduced by the appearance of the +history expansion character, which is @samp{!} by default. +@ifset BashFeatures +Only @samp{\} and @samp{'} may be used to escape the history expansion +character. +@end ifset + +@ifset BashFeatures +Several shell options settable with the @code{shopt} +builtin (@pxref{Bash Builtins}) may be used to tailor +the behavior of history expansion. If the +@code{histverify} shell option is enabled, and Readline +is being used, history substitutions are not immediately passed to +the shell parser. +Instead, the expanded line is reloaded into the Readline +editing buffer for further modification. +If Readline is being used, and the @code{histreedit} +shell option is enabled, a failed history expansion will be +reloaded into the Readline editing buffer for correction. +The @option{-p} option to the @code{history} builtin command +may be used to see what a history expansion will do before using it. +The @option{-s} option to the @code{history} builtin may be used to +add commands to the end of the history list without actually executing +them, so that they are available for subsequent recall. +This is most useful in conjunction with Readline. + +The shell allows control of the various characters used by the +history expansion mechanism with the @code{histchars} variable, +as explained above (@pxref{Bash Variables}). The shell uses +the history comment character to mark history timestamps when +writing the history file. +@end ifset + +@menu +* Event Designators:: How to specify which history line to use. +* Word Designators:: Specifying which words are of interest. +* Modifiers:: Modifying the results of substitution. +@end menu + +@node Event Designators +@subsection Event Designators +@cindex event designators + +An event designator is a reference to a command line entry in the +history list. +Unless the reference is absolute, events are relative to the current +position in the history list. +@cindex history events + +@table @asis + +@item @code{!} +@ifset BashFeatures +Start a history substitution, except when followed by a space, tab, +the end of the line, @samp{=} or @samp{(} (when the +@code{extglob} shell option is enabled using the @code{shopt} builtin). +@end ifset +@ifclear BashFeatures +Start a history substitution, except when followed by a space, tab, +the end of the line, or @samp{=}. +@end ifclear + +@item @code{!@var{n}} +Refer to command line @var{n}. + +@item @code{!-@var{n}} +Refer to the command @var{n} lines back. + +@item @code{!!} +Refer to the previous command. This is a synonym for @samp{!-1}. + +@item @code{!@var{string}} +Refer to the most recent command +preceding the current position in the history list +starting with @var{string}. + +@item @code{!?@var{string}[?]} +Refer to the most recent command +preceding the current position in the history list +containing @var{string}. +The trailing +@samp{?} may be omitted if the @var{string} is followed immediately by +a newline. + +@item @code{^@var{string1}^@var{string2}^} +Quick Substitution. Repeat the last command, replacing @var{string1} +with @var{string2}. Equivalent to +@code{!!:s/@var{string1}/@var{string2}/}. + +@item @code{!#} +The entire command line typed so far. + +@end table + +@node Word Designators +@subsection Word Designators + +Word designators are used to select desired words from the event. +A @samp{:} separates the event specification from the word designator. It +may be omitted if the word designator begins with a @samp{^}, @samp{$}, +@samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning +of the line, with the first word being denoted by 0 (zero). Words are +inserted into the current line separated by single spaces. + +@need 0.75 +For example, + +@table @code +@item !! +designates the preceding command. When you type this, the preceding +command is repeated in toto. + +@item !!:$ +designates the last argument of the preceding command. This may be +shortened to @code{!$}. + +@item !fi:2 +designates the second argument of the most recent command starting with +the letters @code{fi}. +@end table + +@need 0.75 +Here are the word designators: + +@table @code + +@item 0 (zero) +The @code{0}th word. For many applications, this is the command word. + +@item @var{n} +The @var{n}th word. + +@item ^ +The first argument; that is, word 1. + +@item $ +The last argument. + +@item % +The word matched by the most recent @samp{?@var{string}?} search. + +@item @var{x}-@var{y} +A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. + +@item * +All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. +It is not an error to use @samp{*} if there is just one word in the event; +the empty string is returned in that case. + +@item @var{x}* +Abbreviates @samp{@var{x}-$} + +@item @var{x}- +Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. + +@end table + +If a word designator is supplied without an event specification, the +previous command is used as the event. + +@node Modifiers +@subsection Modifiers + +After the optional word designator, you can add a sequence of one or more +of the following modifiers, each preceded by a @samp{:}. + +@table @code + +@item h +Remove a trailing pathname component, leaving only the head. + +@item t +Remove all leading pathname components, leaving the tail. + +@item r +Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving +the basename. + +@item e +Remove all but the trailing suffix. + +@item p +Print the new command but do not execute it. + +@ifset BashFeatures +@item q +Quote the substituted words, escaping further substitutions. + +@item x +Quote the substituted words as with @samp{q}, +but break into words at spaces, tabs, and newlines. +@end ifset + +@item s/@var{old}/@var{new}/ +Substitute @var{new} for the first occurrence of @var{old} in the +event line. Any delimiter may be used in place of @samp{/}. +The delimiter may be quoted in @var{old} and @var{new} +with a single backslash. If @samp{&} appears in @var{new}, +it is replaced by @var{old}. A single backslash will quote +the @samp{&}. The final delimiter is optional if it is the last +character on the input line. + +@item & +Repeat the previous substitution. + +@item g +@itemx a +Cause changes to be applied over the entire event line. Used in +conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, +or with @samp{&}. + +@item G +Apply the following @samp{s} modifier once to each word in the event. + +@end table diff --git a/readline-6.2/doc/readline.0 b/readline-6.2/doc/readline.0 new file mode 100644 index 0000000..a09722e --- /dev/null +++ b/readline-6.2/doc/readline.0 @@ -0,0 +1,992 @@ +READLINE(3) READLINE(3) + + + +NNAAMMEE + readline - get a line from a user with editing + +SSYYNNOOPPSSIISS + ##iinncclluuddee <<ssttddiioo..hh>> + ##iinncclluuddee <<rreeaaddlliinnee//rreeaaddlliinnee..hh>> + ##iinncclluuddee <<rreeaaddlliinnee//hhiissttoorryy..hh>> + + _c_h_a_r _* + rreeaaddlliinnee (_c_o_n_s_t _c_h_a_r _*_p_r_o_m_p_t); + +CCOOPPYYRRIIGGHHTT + Readline is Copyright (C) 1989-2011 Free Software Foundation, Inc. + +DDEESSCCRRIIPPTTIIOONN + rreeaaddlliinnee will read a line from the terminal and return it, using pprroommpptt + as a prompt. If pprroommpptt is NNUULLLL or the empty string, no prompt is + issued. The line returned is allocated with _m_a_l_l_o_c(3); the caller must + free it when finished. The line returned has the final newline + removed, so only the text of the line remains. + + rreeaaddlliinnee offers editing capabilities while the user is entering the + line. By default, the line editing commands are similar to those of + emacs. A vi-style line editing interface is also available. + + This manual page describes only the most basic use of rreeaaddlliinnee. Much + more functionality is available; see _T_h_e _G_N_U _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y and _T_h_e + _G_N_U _H_i_s_t_o_r_y _L_i_b_r_a_r_y for additional information. + +RREETTUURRNN VVAALLUUEE + rreeaaddlliinnee returns the text of the line read. A blank line returns the + empty string. If EEOOFF is encountered while reading a line, and the line + is empty, NNUULLLL is returned. If an EEOOFF is read with a non-empty line, + it is treated as a newline. + +NNOOTTAATTIIOONN + An Emacs-style notation is used to denote keystrokes. Control keys are + denoted by C-_k_e_y, e.g., C-n means Control-N. Similarly, _m_e_t_a keys are + denoted by M-_k_e_y, so M-x means Meta-X. (On keyboards without a _m_e_t_a + key, M-_x means ESC _x, i.e., press the Escape key then the _x key. This + makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means ESC-Control-_x, + or press the Escape key then hold the Control key while pressing the _x + key.) + + Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as + a repeat count. Sometimes, however, it is the sign of the argument + that is significant. Passing a negative argument to a command that + acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to + act in a backward direction. Commands whose behavior with arguments + deviates from this are noted. + + When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved + for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a + _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one + unit, which can be yanked all at once. Commands which do not kill text + separate the chunks of text on the kill ring. + +IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE + Readline is customized by putting commands in an initialization file + (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of + the IINNPPUUTTRRCC environment variable. If that variable is unset, the + default is _~_/_._i_n_p_u_t_r_c. If that file does not exist or cannot be read, + the ultimate default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the + readline library starts up, the init file is read, and the key bindings + and variables are set. 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. Other lines denote key bindings and variable settings. + Each program using this library may add its own commands and bindings. + + For example, placing + + M-Control-u: universal-argument + or + C-Meta-u: universal-argument + + into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- + _s_a_l_-_a_r_g_u_m_e_n_t. + + The following symbolic character names are recognized while processing + key bindings: _D_E_L, _E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T, + _S_P_A_C_E, _S_P_C, and _T_A_B. + + In addition to command names, readline allows keys to be bound to a + string that is inserted when the key is pressed (a _m_a_c_r_o). + + + KKeeyy BBiinnddiinnggss + The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. + All that is required is the name of the command or the text of a macro + and a key sequence to which it should be bound. The name may be speci- + fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or + _C_o_n_t_r_o_l_- prefixes, or as a key sequence. The name and key sequence are + separated by a colon. There can be no whitespace between the name and + the colon. + + When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e 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 uunniivveerrssaall--aarrgguummeenntt, + _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, 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). + + In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs + from kkeeyynnaammee above in that strings denoting an entire key sequence may + be specified by placing the sequence within double quotes. Some GNU + Emacs style key escapes can be used, as in the following example, but + the symbolic character names are not recognized. + + "\C-u": universal-argument + "\C-x\C-r": re-read-init-file + "\e[11~": "Function Key 1" + + In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. + _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is + bound to insert the text ``Function Key 1''. + + The full set of GNU Emacs style escape sequences available when speci- + fying key sequences is + \\CC-- control prefix + \\MM-- meta prefix + \\ee an escape character + \\\\ backslash + \\"" literal ", a double quote + \\'' literal ', a single quote + + In addition to the GNU Emacs style escape sequences, a second set of + backslash escapes is available: + \\aa alert (bell) + \\bb backspace + \\dd delete + \\ff form feed + \\nn newline + \\rr carriage return + \\tt horizontal tab + \\vv vertical tab + \\_n_n_n the eight-bit character whose value is the octal value + _n_n_n (one to three digits) + \\xx_H_H the eight-bit character whose value is the hexadecimal + value _H_H (one or two hex digits) + + When entering the text of a macro, single or double quotes should be + used to indicate a macro definition. Unquoted text is assumed to be a + function name. In the macro body, the backslash escapes described + above are expanded. Backslash will quote any other character in the + macro text, including " and '. + + BBaasshh allows the current readline key bindings to be displayed or modi- + fied with the bbiinndd builtin command. The editing mode may be switched + during interactive use by using the --oo option to the sseett builtin com- + mand. Other programs using this library provide similar mechanisms. + The _i_n_p_u_t_r_c file may be edited and re-read if a program does not pro- + vide any other means to incorporate new bindings. + + VVaarriiaabblleess + Readline has variables that can be used to further customize its behav- + ior. A variable may be set in the _i_n_p_u_t_r_c file with a statement of the + form + + sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e + + Except where noted, readline variables can take the values OOnn or OOffff + (without regard to case). Unrecognized variable names are ignored. + When a variable value is read, empty or null values, "on" (case-insen- + sitive), and "1" are equivalent to OOnn. All other values are equivalent + to OOffff. The variables and their default values are: + + bbeellll--ssttyyllee ((aauuddiibbllee)) + Controls what happens when readline wants to ring the terminal + bell. If set to nnoonnee, readline never rings the bell. If set to + vviissiibbllee, readline uses a visible bell if one is available. If + set to aauuddiibbllee, readline attempts to ring the terminal's bell. + bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) + If set to OOnn, readline attempts to bind the control characters + treated specially by the kernel's terminal driver to their read- + line equivalents. + ccoommmmeenntt--bbeeggiinn ((````##'''')) + The string that is inserted in vvii mode when the iinnsseerrtt--ccoommmmeenntt + command is executed. This command is bound to MM--## in emacs mode + and to ## in vi command mode. + ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11)) + The number of screen columns used to display possible matches + when performing completion. The value is ignored if it is less + than 0 or greater than the terminal screen width. A value of 0 + will cause matches to be displayed one per line. The default + value is -1. + ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) + If set to OOnn, readline performs filename matching and completion + in a case-insensitive fashion. + ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff)) + If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, readline + treats hyphens (_-) and underscores (__) as equivalent when per- + forming case-insensitive filename matching and completion. + ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00)) + The length in characters of the common prefix of a list of pos- + sible completions that is displayed without modification. When + set to a value greater than zero, common prefixes longer than + this value are replaced with an ellipsis when displaying possi- + ble completions. + ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) + This determines when the user is queried about viewing the num- + ber of possible completions generated by the ppoossssiibbllee--ccoommppllee-- + ttiioonnss command. It may be set to any integer value greater than + or equal to zero. If the number of possible completions is + greater than or equal to the value of this variable, the user is + asked whether or not he wishes to view them; otherwise they are + simply listed on the terminal. A negative value causes readline + to never ask. + ccoonnvveerrtt--mmeettaa ((OOnn)) + If set to OOnn, readline will convert characters with the eighth + bit set to an ASCII key sequence by stripping the eighth bit and + prefixing it with an escape character (in effect, using escape + as the _m_e_t_a _p_r_e_f_i_x). + ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) + If set to OOnn, readline will inhibit word completion. Completion + characters will be inserted into the line as if they had been + mapped to sseellff--iinnsseerrtt. + eeddiittiinngg--mmooddee ((eemmaaccss)) + Controls whether readline begins with a set of key bindings sim- + ilar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or + vvii. + eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) + When set to OOnn, on operating systems that indicate they support + it, readline echoes a character corresponding to a signal gener- + ated from the keyboard. + eennaabbllee--kkeeyyppaadd ((OOffff)) + When set to OOnn, readline will try to enable the application key- + pad when it is called. Some systems need this to enable the + arrow keys. + eennaabbllee--mmeettaa--kkeeyy ((OOnn)) + When set to OOnn, readline will try to enable any meta modifier + key the terminal claims to support when it is called. On many + terminals, the meta key is used to send eight-bit characters. + eexxppaanndd--ttiillddee ((OOffff)) + If set to OOnn, tilde expansion is performed when readline + attempts word completion. + hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) + If set to OOnn, the history code attempts to place point at the + same location on each history line retrieved with pprreevviioouuss--hhiiss-- + ttoorryy or nneexxtt--hhiissttoorryy. + hhiissttoorryy--ssiizzee ((00)) + Set the maximum number of history entries saved in the history + list. If set to zero, the number of entries in the history list + is not limited. + hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) + When set to OOnn, makes readline use a single line for display, + scrolling the input horizontally on a single screen line when it + becomes longer than the screen width rather than wrapping to a + new line. + iinnppuutt--mmeettaa ((OOffff)) + If set to OOnn, readline will enable eight-bit input (that is, it + will not clear the eighth bit in the characters it reads), + regardless of what the terminal claims it can support. The name + mmeettaa--ffllaagg is a synonym for this variable. + iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ'''')) + The string of characters that should terminate an incremental + search without subsequently executing the character as a com- + mand. If this variable has not been given a value, the charac- + ters _E_S_C and _C_-_J will terminate an incremental search. + kkeeyymmaapp ((eemmaaccss)) + Set the current readline keymap. The set of legal keymap names + is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, + _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; + _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is + _e_m_a_c_s. The value of eeddiittiinngg--mmooddee also affects the default + keymap. + mmaarrkk--ddiirreeccttoorriieess ((OOnn)) + If set to OOnn, completed directory names have a slash appended. + mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) + If set to OOnn, history lines that have been modified are dis- + played with a preceding asterisk (**). + mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) + If set to OOnn, completed names which are symbolic links to direc- + tories have a slash appended (subject to the value of + mmaarrkk--ddiirreeccttoorriieess). + mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) + This variable, when set to OOnn, causes readline to match files + whose names begin with a `.' (hidden files) when performing + filename completion. If set to OOffff, the leading `.' must be + supplied by the user in the filename to be completed. + mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) + If set to OOnn, menu completion displays the common prefix of the + list of possible completions (which may be empty) before cycling + through the list. + oouuttppuutt--mmeettaa ((OOffff)) + If set to OOnn, readline will display characters with the eighth + bit set directly rather than as a meta-prefixed escape sequence. + ppaaggee--ccoommpplleettiioonnss ((OOnn)) + If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- + play a screenful of possible completions at a time. + pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) + If set to OOnn, readline will display completions with matches + sorted horizontally in alphabetical order, rather than down the + screen. + rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) + If set to OOnn, readline will undo all changes to history lines + before returning when aacccceepptt--lliinnee is executed. By default, his- + tory lines may be modified and retain individual undo lists + across calls to rreeaaddlliinnee. + sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) + This alters the default behavior of the completion functions. + If set to OOnn, words which have more than one possible completion + cause the matches to be listed immediately instead of ringing + the bell. + sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) + This alters the default behavior of the completion functions in + a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words + which have more than one possible completion without any possi- + ble partial completion (the possible completions don't share a + common prefix) cause the matches to be listed immediately + instead of ringing the bell. + sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) + If set to OOnn, this alters the default completion behavior when + inserting a single match into the line. It's only active when + performing completion in the middle of a word. If enabled, + readline does not insert characters from the completion that + match characters after point in the word being completed, so + portions of the word following the cursor are not duplicated. + vviissiibbllee--ssttaattss ((OOffff)) + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible com- + pletions. + + CCoonnddiittiioonnaall CCoonnssttrruuccttss + 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. + + $$iiff The $$iiff construct allows bindings to be made based on the edit- + ing 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. + + mmooddee The mmooddee== form of the $$iiff directive is used to test + whether readline is in emacs or vi mode. This may be + used in conjunction with the sseett kkeeyymmaapp command, for + instance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and + _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in + emacs mode. + + tteerrmm The tteerrmm== form may be used to include terminal-specific + key bindings, perhaps to bind the key sequences output by + the terminal's function keys. The word on the right side + of the == is tested against the full name of the terminal + and the portion of the terminal name before the first --. + This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, for + instance. + + aapppplliiccaattiioonn + The aapppplliiccaattiioonn construct is used to include application- + specific settings. Each program using the readline + library sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization + file can test for a particular value. 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 + bbaasshh: + + $$iiff Bash + # Quote the current or previous word + "\C-xq": "\eb\"\ef\"" + $$eennddiiff + + $$eennddiiff This command, as seen in the previous example, terminates an $$iiff + command. + + $$eellssee Commands in this branch of the $$iiff directive are executed if the + test fails. + + $$iinncclluuddee + This directive takes a single filename as an argument and reads + commands and bindings from that file. For example, the follow- + ing directive would read _/_e_t_c_/_i_n_p_u_t_r_c: + + $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c + +SSEEAARRCCHHIINNGG + Readline provides commands for searching through the command history + for lines containing a specified string. There are two search modes: + _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. + + Incremental searches begin before the user has finished typing the + search string. As each character of the search string is typed, read- + line 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. To search backward in the + history for a particular string, type CC--rr. Typing CC--ss searches forward + through the history. The characters present in the value of the + iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental + search. If that variable has not been assigned a value the _E_s_c_a_p_e and + CC--JJ characters will terminate an incremental search. CC--GG 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 CC--ss or CC--rr as + appropriate. This will search backward or forward in the history for + the next line matching the search string typed so far. Any other key + sequence bound to a readline command will terminate the search and exe- + cute that command. For instance, a newline will terminate the search + and accept the line, thereby executing the command from the history + list. A movement command will terminate the search, make the last line + found the current line, and begin editing. + + 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. + +EEDDIITTIINNGG CCOOMMMMAANNDDSS + The following is a list of the names of the commands and the default + key sequences to which they are bound. Command names without an accom- + panying key sequence are unbound by default. + + In the following descriptions, _p_o_i_n_t refers to the current cursor posi- + tion, and _m_a_r_k refers to a cursor position saved by the sseett--mmaarrkk com- + mand. The text between the point and mark is referred to as the + _r_e_g_i_o_n. + + CCoommmmaannddss ffoorr MMoovviinngg + bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) + Move to the start of the current line. + eenndd--ooff--lliinnee ((CC--ee)) + Move to the end of the line. + ffoorrwwaarrdd--cchhaarr ((CC--ff)) + Move forward a character. + bbaacckkwwaarrdd--cchhaarr ((CC--bb)) + Move back a character. + ffoorrwwaarrdd--wwoorrdd ((MM--ff)) + Move forward to the end of the next word. Words are composed of + alphanumeric characters (letters and digits). + bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) + Move back to the start of the current or previous word. Words + are composed of alphanumeric characters (letters and digits). + cclleeaarr--ssccrreeeenn ((CC--ll)) + Clear the screen leaving the current line at the top of the + screen. With an argument, refresh the current line without + clearing the screen. + rreeddrraaww--ccuurrrreenntt--lliinnee + Refresh the current line. + + CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy + aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) + Accept the line regardless of where the cursor is. If this line + is non-empty, it may be added to the history list for future + recall with aadddd__hhiissttoorryy(()). If the line is a modified history + line, the history line is restored to its original state. + pprreevviioouuss--hhiissttoorryy ((CC--pp)) + Fetch the previous command from the history list, moving back in + the list. + nneexxtt--hhiissttoorryy ((CC--nn)) + Fetch the next command from the history list, moving forward in + the list. + bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) + Move to the first line in the history. + eenndd--ooff--hhiissttoorryy ((MM-->>)) + Move to the end of the input history, i.e., the line currently + being entered. + rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) + Search backward starting at the current line and moving `up' + through the history as necessary. This is an incremental + search. + ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) + Search forward starting at the current line and moving `down' + through the history as necessary. This is an incremental + search. + nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) + Search backward through the history starting at the current line + using a non-incremental search for a string supplied by the + user. + nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) + Search forward through the history using a non-incremental + search for a string supplied by the user. + hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd + Search forward through the history for the string of characters + between the start of the current line and the current cursor + position (the _p_o_i_n_t). This is a non-incremental search. + hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd + 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. + yyaannkk--nntthh--aarrgg ((MM--CC--yy)) + Insert the first argument to the previous command (usually the + second word on the previous line) at point. 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. Once + the argument _n is computed, the argument is extracted as if the + "!_n" history expansion had been specified. + yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) + Insert the last argument to the previous command (the last word + of the previous history entry). With a numeric argument, behave + exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg + move back through the history list, inserting the last word (or + the word specified by the argument to the first call) of each + line in turn. Any numeric argument supplied to these successive + calls determines the direction to move through the history. A + negative argument switches the direction through the history + (back or forward). The history expansion facilities are used to + extract the last argument, as if the "!$" history expansion had + been specified. + + CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt + ddeelleettee--cchhaarr ((CC--dd)) + Delete the character at point. If point is at the beginning of + the line, there are no characters in the line, and the last + character typed was not bound to ddeelleettee--cchhaarr, then return EEOOFF. + bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) + Delete the character behind the cursor. When given a numeric + argument, save the deleted text on the kill ring. + ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr + Delete the character under the cursor, unless the cursor is at + the end of the line, in which case the character behind the cur- + sor is deleted. + qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) + Add the next character that you type to the line verbatim. This + is how to insert characters like CC--qq, for example. + ttaabb--iinnsseerrtt ((MM--TTAABB)) + Insert a tab character. + sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) + Insert the character typed. + ttrraannssppoossee--cchhaarrss ((CC--tt)) + Drag the character before point forward over the character at + point, moving point forward as well. If point is at the end of + the line, then this transposes the two characters before point. + Negative arguments have no effect. + ttrraannssppoossee--wwoorrddss ((MM--tt)) + Drag the word before point past the word after point, moving + point over that word as well. If point is at the end of the + line, this transposes the last two words on the line. + uuppccaassee--wwoorrdd ((MM--uu)) + Uppercase the current (or following) word. With a negative + argument, uppercase the previous word, but do not move point. + ddoowwnnccaassee--wwoorrdd ((MM--ll)) + Lowercase the current (or following) word. With a negative + argument, lowercase the previous word, but do not move point. + ccaappiittaalliizzee--wwoorrdd ((MM--cc)) + Capitalize the current (or following) word. With a negative + argument, capitalize the previous word, but do not move point. + oovveerrwwrriittee--mmooddee + Toggle overwrite mode. With an explicit positive numeric argu- + ment, switches to overwrite mode. With an explicit non-positive + numeric argument, switches to insert mode. This command affects + only eemmaaccss mode; vvii mode does overwrite differently. Each call + to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- + ters bound to sseellff--iinnsseerrtt replace the text at point rather than + pushing the text to the right. Characters bound to bbaacckk-- + wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a + space. By default, this command is unbound. + + KKiilllliinngg aanndd YYaannkkiinngg + kkiillll--lliinnee ((CC--kk)) + Kill the text from point to the end of the line. + bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) + Kill backward to the beginning of the line. + uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) + Kill backward from point to the beginning of the line. The + killed text is saved on the kill-ring. + kkiillll--wwhhoollee--lliinnee + Kill all characters on the current line, no matter where point + is. + kkiillll--wwoorrdd ((MM--dd)) + Kill from point the end of the current word, or if between + words, to the end of the next word. Word boundaries are the + same as those used by ffoorrwwaarrdd--wwoorrdd. + bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) + Kill the word behind point. Word boundaries are the same as + those used by bbaacckkwwaarrdd--wwoorrdd. + uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) + Kill the word behind point, using white space as a word bound- + ary. The killed text is saved on the kill-ring. + uunniixx--ffiilleennaammee--rruubboouutt + Kill the word behind point, using white space and the slash + character as the word boundaries. The killed text is saved on + the kill-ring. + ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) + Delete all spaces and tabs around point. + kkiillll--rreeggiioonn + Kill the text between the point and _m_a_r_k (saved cursor posi- + tion). This text is referred to as the _r_e_g_i_o_n. + ccooppyy--rreeggiioonn--aass--kkiillll + Copy the text in the region to the kill buffer. + ccooppyy--bbaacckkwwaarrdd--wwoorrdd + Copy the word before point to the kill buffer. The word bound- + aries are the same as bbaacckkwwaarrdd--wwoorrdd. + ccooppyy--ffoorrwwaarrdd--wwoorrdd + Copy the word following point to the kill buffer. The word + boundaries are the same as ffoorrwwaarrdd--wwoorrdd. + yyaannkk ((CC--yy)) + Yank the top of the kill ring into the buffer at point. + yyaannkk--ppoopp ((MM--yy)) + Rotate the kill ring, and yank the new top. Only works follow- + ing yyaannkk or yyaannkk--ppoopp. + + NNuummeerriicc AArrgguummeennttss + ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) + Add this digit to the argument already accumulating, or start a + new argument. M-- starts a negative argument. + uunniivveerrssaall--aarrgguummeenntt + 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 fol- + lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt 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 argu- + ment count four, a second time makes the argument count sixteen, + and so on. + + CCoommpplleettiinngg + ccoommpplleettee ((TTAABB)) + Attempt to perform completion on the text before point. The + actual completion performed is application-specific. BBaasshh, for + instance, attempts completion treating the text as a variable + (if the text begins with $$), username (if the text begins with + ~~), hostname (if the text begins with @@), or command (including + aliases and functions) in turn. If none of these produces a + match, filename completion is attempted. GGddbb, on the other + hand, allows completion of program functions and variables, and + only attempts filename completion under certain circumstances. + ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) + List the possible completions of the text before point. When + displaying completions, readline sets the number of columns used + for display to the value of ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh, the value + of the environment variable CCOOLLUUMMNNSS, or the screen width, in + that order. + iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) + Insert all completions of the text before point that would have + been generated by ppoossssiibbllee--ccoommpplleettiioonnss. + mmeennuu--ccoommpplleettee + Similar to ccoommpplleettee, but replaces the word to be completed with + a single match from the list of possible completions. Repeated + execution of mmeennuu--ccoommpplleettee steps through the list of possible + completions, inserting each match in turn. At the end of the + list of completions, the bell is rung (subject to the setting of + bbeellll--ssttyyllee) 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 TTAABB, but is unbound by + default. + mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd + Identical to mmeennuu--ccoommpplleettee, but moves backward through the list + of possible completions, as if mmeennuu--ccoommpplleettee had been given a + negative argument. This command is unbound by default. + ddeelleettee--cchhaarr--oorr--lliisstt + Deletes the character under the cursor if not at the beginning + or end of the line (like ddeelleettee--cchhaarr). If at the end of the + line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. + + KKeeyybbooaarrdd MMaaccrrooss + ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) + Begin saving the characters typed into the current keyboard + macro. + eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) + Stop saving the characters typed into the current keyboard macro + and store the definition. + ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) + Re-execute the last keyboard macro defined, by making the char- + acters in the macro appear as if typed at the keyboard. + + MMiisscceellllaanneeoouuss + rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) + Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any + bindings or variable assignments found there. + aabboorrtt ((CC--gg)) + Abort the current editing command and ring the terminal's bell + (subject to the setting of bbeellll--ssttyyllee). + ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) + If the metafied character _x is lowercase, run the command that + is bound to the corresponding uppercase character. + pprreeffiixx--mmeettaa ((EESSCC)) + Metafy the next character typed. EESSCC ff is equivalent to MMeettaa--ff. + uunnddoo ((CC--__,, CC--xx CC--uu)) + Incremental undo, separately remembered for each line. + rreevveerrtt--lliinnee ((MM--rr)) + Undo all changes made to this line. This is like executing the + uunnddoo command enough times to return the line to its initial + state. + ttiillddee--eexxppaanndd ((MM--&&)) + Perform tilde expansion on the current word. + sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>)) + Set the mark to the point. If a numeric argument is supplied, + the mark is set to that position. + eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) + 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. + cchhaarraacctteerr--sseeaarrcchh ((CC--]])) + A character is read and point is moved to the next occurrence of + that character. A negative count searches for previous occur- + rences. + cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) + A character is read and point is moved to the previous occur- + rence of that character. A negative count searches for subse- + quent occurrences. + sskkiipp--ccssii--sseeqquueennccee + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin + with a Control Sequence Indicator (CSI), usually ESC-[. If this + sequence is bound to "\[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. + This is unbound by default, but usually bound to ESC-[. + iinnsseerrtt--ccoommmmeenntt ((MM--##)) + Without a numeric argument, the value of the readline ccoomm-- + mmeenntt--bbeeggiinn variable is inserted at the beginning of the current + line. If a numeric argument is supplied, this command acts as a + toggle: if the characters at the beginning of the line do not + match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- + wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- + ning of the line. In either case, the line is accepted as if a + newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn + makes the current line a shell comment. If a numeric argument + causes the comment character to be removed, the line will be + executed by the shell. + dduummpp--ffuunnccttiioonnss + Print all of the functions and their key bindings to the read- + line output stream. If a numeric argument is supplied, the out- + put is formatted in such a way that it can be made part of an + _i_n_p_u_t_r_c file. + dduummpp--vvaarriiaabblleess + 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 + _i_n_p_u_t_r_c file. + dduummpp--mmaaccrrooss + Print all of the readline key sequences bound to macros and the + strings they output. If a numeric argument is supplied, the + output is formatted in such a way that it can be made part of an + _i_n_p_u_t_r_c file. + eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee)) + When in vvii command mode, this causes a switch to eemmaaccss editing + mode. + vvii--eeddiittiinngg--mmooddee ((MM--CC--jj)) + When in eemmaaccss editing mode, this causes a switch to vvii editing + mode. + +DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS + The following is a list of the default emacs and vi bindings. Charac- + ters with the eighth bit set are written as M-<character>, and are + referred to as _m_e_t_a_f_i_e_d characters. The printable ASCII characters not + mentioned in the list of emacs standard bindings are bound to the + sseellff--iinnsseerrtt function, which just inserts the given character into the + input line. In vi insertion mode, all characters not specifically men- + tioned are bound to sseellff--iinnsseerrtt. Characters assigned to signal genera- + tion by _s_t_t_y(1) or the terminal driver, such as C-Z or C-C, retain that + function. Upper and lower case metafied characters are bound to the + same function in the emacs mode meta keymap. The remaining characters + are unbound, which causes readline to ring the bell (subject to the + setting of the bbeellll--ssttyyllee variable). + + EEmmaaccss MMooddee + Emacs Standard bindings + + "C-@" set-mark + "C-A" beginning-of-line + "C-B" backward-char + "C-D" delete-char + "C-E" end-of-line + "C-F" forward-char + "C-G" abort + "C-H" backward-delete-char + "C-I" complete + "C-J" accept-line + "C-K" kill-line + "C-L" clear-screen + "C-M" accept-line + "C-N" next-history + "C-P" previous-history + "C-Q" quoted-insert + "C-R" reverse-search-history + "C-S" forward-search-history + "C-T" transpose-chars + "C-U" unix-line-discard + "C-V" quoted-insert + "C-W" unix-word-rubout + "C-Y" yank + "C-]" character-search + "C-_" undo + " " to "/" self-insert + "0" to "9" self-insert + ":" to "~" self-insert + "C-?" backward-delete-char + + Emacs Meta bindings + + "M-C-G" abort + "M-C-H" backward-kill-word + "M-C-I" tab-insert + "M-C-J" vi-editing-mode + "M-C-M" vi-editing-mode + "M-C-R" revert-line + "M-C-Y" yank-nth-arg + "M-C-[" complete + "M-C-]" character-search-backward + "M-space" set-mark + "M-#" insert-comment + "M-&" tilde-expand + "M-*" insert-completions + "M--" digit-argument + "M-." yank-last-arg + "M-0" digit-argument + "M-1" digit-argument + "M-2" digit-argument + "M-3" digit-argument + "M-4" digit-argument + "M-5" digit-argument + "M-6" digit-argument + "M-7" digit-argument + "M-8" digit-argument + "M-9" digit-argument + "M-<" beginning-of-history + "M-=" possible-completions + "M->" end-of-history + "M-?" possible-completions + "M-B" backward-word + "M-C" capitalize-word + "M-D" kill-word + "M-F" forward-word + "M-L" downcase-word + "M-N" non-incremental-forward-search-history + "M-P" non-incremental-reverse-search-history + "M-R" revert-line + "M-T" transpose-words + "M-U" upcase-word + "M-Y" yank-pop + "M-\" delete-horizontal-space + "M-~" tilde-expand + "M-C-?" backward-kill-word + "M-_" yank-last-arg + + Emacs Control-X bindings + + "C-XC-G" abort + "C-XC-R" re-read-init-file + "C-XC-U" undo + "C-XC-X" exchange-point-and-mark + "C-X(" start-kbd-macro + "C-X)" end-kbd-macro + "C-XE" call-last-kbd-macro + "C-XC-?" backward-kill-line + + + VVII MMooddee bbiinnddiinnggss + VI Insert Mode functions + + "C-D" vi-eof-maybe + "C-H" backward-delete-char + "C-I" complete + "C-J" accept-line + "C-M" accept-line + "C-R" reverse-search-history + "C-S" forward-search-history + "C-T" transpose-chars + "C-U" unix-line-discard + "C-V" quoted-insert + "C-W" unix-word-rubout + "C-Y" yank + "C-[" vi-movement-mode + "C-_" undo + " " to "~" self-insert + "C-?" backward-delete-char + + VI Command Mode functions + + "C-D" vi-eof-maybe + "C-E" emacs-editing-mode + "C-G" abort + "C-H" backward-char + "C-J" accept-line + "C-K" kill-line + "C-L" clear-screen + "C-M" accept-line + "C-N" next-history + "C-P" previous-history + "C-Q" quoted-insert + "C-R" reverse-search-history + "C-S" forward-search-history + "C-T" transpose-chars + "C-U" unix-line-discard + "C-V" quoted-insert + "C-W" unix-word-rubout + "C-Y" yank + "C-_" vi-undo + " " forward-char + "#" insert-comment + "$" end-of-line + "%" vi-match + "&" vi-tilde-expand + "*" vi-complete + "+" next-history + "," vi-char-search + "-" previous-history + "." vi-redo + "/" vi-search + "0" beginning-of-line + "1" to "9" vi-arg-digit + ";" vi-char-search + "=" vi-complete + "?" vi-search + "A" vi-append-eol + "B" vi-prev-word + "C" vi-change-to + "D" vi-delete-to + "E" vi-end-word + "F" vi-char-search + "G" vi-fetch-history + "I" vi-insert-beg + "N" vi-search-again + "P" vi-put + "R" vi-replace + "S" vi-subst + "T" vi-char-search + "U" revert-line + "W" vi-next-word + "X" backward-delete-char + "Y" vi-yank-to + "\" vi-complete + "^" vi-first-print + "_" vi-yank-arg + "`" vi-goto-mark + "a" vi-append-mode + "b" vi-prev-word + "c" vi-change-to + "d" vi-delete-to + "e" vi-end-word + "f" vi-char-search + "h" backward-char + "i" vi-insertion-mode + "j" next-history + "k" prev-history + "l" forward-char + "m" vi-set-mark + "n" vi-search-again + "p" vi-put + "r" vi-change-char + "s" vi-subst + "t" vi-char-search + "u" vi-undo + "w" vi-next-word + "x" vi-delete + "y" vi-yank-to + "|" vi-column + "~" vi-change-case + +SSEEEE AALLSSOO + _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey + _b_a_s_h(1) + +FFIILLEESS + _~_/_._i_n_p_u_t_r_c + Individual rreeaaddlliinnee initialization file + +AAUUTTHHOORRSS + Brian Fox, Free Software Foundation + bfox@gnu.org + + Chet Ramey, Case Western Reserve University + chet@ins.CWRU.Edu + +BBUUGG RREEPPOORRTTSS + If you find a bug in rreeaaddlliinnee,, you should report it. But first, you + should make sure that it really is a bug, and that it appears in the + latest version of the rreeaaddlliinnee library that you have. + + Once you have determined that a bug actually exists, mail a bug report + to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, you are welcome to mail + that as well! Suggestions and `philosophical' bug reports may be + mailed to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup + ggnnuu..bbaasshh..bbuugg. + + Comments and bug reports concerning this manual page should be directed + to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. + +BBUUGGSS + It's too big and too slow. + + + +GNU Readline 6.2 2010 August 28 READLINE(3) diff --git a/readline-6.2/doc/readline.3 b/readline-6.2/doc/readline.3 new file mode 100644 index 0000000..f79f4bb --- /dev/null +++ b/readline-6.2/doc/readline.3 @@ -0,0 +1,1381 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Chet Ramey +.\" Information Network Services +.\" Case Western Reserve University +.\" chet@ins.CWRU.Edu +.\" +.\" Last Change: Sat Aug 28 18:56:32 EDT 2010 +.\" +.TH READLINE 3 "2010 August 28" "GNU Readline 6.2" +.\" +.\" File Name macro. This used to be `.PN', for Path Name, +.\" but Sun doesn't seem to like that very much. +.\" +.de FN +\fI\|\\$1\|\fP +.. +.SH NAME +readline \- get a line from a user with editing +.SH SYNOPSIS +.LP +.nf +.ft B +#include <stdio.h> +#include <readline/readline.h> +#include <readline/history.h> +.ft +.fi +.LP +.nf +\fIchar *\fP +.br +\fBreadline\fP (\fIconst char *prompt\fP); +.fi +.SH COPYRIGHT +.if n Readline is Copyright (C) 1989\-2011 Free Software Foundation, Inc. +.if t Readline is Copyright \(co 1989\-2011 Free Software Foundation, Inc. +.SH DESCRIPTION +.LP +.B readline +will read a line from the terminal +and return it, using +.B prompt +as a prompt. If +.B prompt +is \fBNULL\fP or the empty string, no prompt is issued. +The line returned is allocated with +.IR malloc (3); +the caller must free it when finished. The line returned +has the final newline removed, so only the text of the line +remains. +.LP +.B readline +offers editing capabilities while the user is entering the +line. +By default, the line editing commands +are similar to those of emacs. +A vi\-style line editing interface is also available. +.LP +This manual page describes only the most basic use of \fBreadline\fP. +Much more functionality is available; see +\fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP +for additional information. +.SH RETURN VALUE +.LP +.B readline +returns the text of the line read. A blank line +returns the empty string. If +.B EOF +is encountered while reading a line, and the line is empty, +.B NULL +is returned. If an +.B EOF +is read with a non\-empty line, it is +treated as a newline. +.SH NOTATION +.LP +An Emacs-style notation is used to denote +keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n +means Control\-N. Similarly, +.I meta +keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards +without a +.I meta +key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key +then the +.I x +key. This makes ESC the \fImeta prefix\fP. +The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, +or press the Escape key +then hold the Control key while pressing the +.I x +key.) +.PP +Readline commands may be given numeric +.IR arguments , +which normally act as a repeat count. Sometimes, however, it is the +sign of the argument that is significant. Passing a negative argument +to a command that acts in the forward direction (e.g., \fBkill\-line\fP) +causes that command to act in a backward direction. Commands whose +behavior with arguments deviates from this are noted. +.PP +When a command is described as \fIkilling\fP text, the text +deleted is saved for possible future retrieval +(\fIyanking\fP). The killed text is saved in a +\fIkill ring\fP. Consecutive kills cause the text to be +accumulated into one unit, which can be yanked all at once. +Commands which do not kill text separate the chunks of text +on the kill ring. +.SH INITIALIZATION FILE +.LP +Readline is customized by putting commands in an initialization +file (the \fIinputrc\fP file). +The name of this file is taken from the value of the +.B INPUTRC +environment variable. If that variable is unset, the default is +.IR ~/.inputrc . +If that file does not exist or cannot be read, the ultimate default is +.IR /etc/inputrc . +When a program which uses the readline library starts up, the +init file is read, and the key bindings and variables are set. +There are only a few basic constructs allowed in the +readline init file. Blank lines are ignored. +Lines beginning with a \fB#\fP are comments. +Lines beginning with a \fB$\fP indicate conditional constructs. +Other lines denote key bindings and variable settings. +Each program using this library may add its own commands +and bindings. +.PP +For example, placing +.RS +.PP +M\-Control\-u: universal\-argument +.RE +or +.RS +C\-Meta\-u: universal\-argument +.RE +.sp +into the +.I inputrc +would make M\-C\-u execute the readline command +.IR universal\-argument . +.PP +The following symbolic character names are recognized while +processing key bindings: +.IR DEL , +.IR ESC , +.IR ESCAPE , +.IR LFD , +.IR NEWLINE , +.IR RET , +.IR RETURN , +.IR RUBOUT , +.IR SPACE , +.IR SPC , +and +.IR TAB . +.PP +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a \fImacro\fP). +.PP +.SS Key Bindings +.PP +The syntax for controlling key bindings in the +.I inputrc +file is simple. All that is required is the name of the +command or the text of a macro and a key sequence to which +it should be bound. The name may be specified in one of two ways: +as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP +prefixes, or as a key sequence. +The name and key sequence are separated by a colon. There can be no +whitespace between the name and the colon. +.PP +When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP, +.I keyname +is the name of a key spelled out in English. For example: +.sp +.RS +Control\-u: universal\-argument +.br +Meta\-Rubout: backward\-kill\-word +.br +Control\-o: "> output" +.RE +.LP +In the above example, +.I C\-u +is bound to the function +.BR universal\-argument , +.I M-DEL +is bound to the function +.BR backward\-kill\-word , +and +.I C\-o +is bound to run the macro +expressed on the right hand side (that is, to insert the text +.if t \f(CW> output\fP +.if n ``> output'' +into the line). +.PP +In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, +.B keyseq +differs from +.B keyname +above in that strings denoting +an entire key sequence may be specified by placing the sequence +within double quotes. Some GNU Emacs style key escapes can be +used, as in the following example, but the symbolic character names +are not recognized. +.sp +.RS +"\eC\-u": universal\-argument +.br +"\eC\-x\eC\-r": re\-read\-init\-file +.br +"\ee[11~": "Function Key 1" +.RE +.PP +In this example, +.I C-u +is again bound to the function +.BR universal\-argument . +.I "C-x C-r" +is bound to the function +.BR re\-read\-init\-file , +and +.I "ESC [ 1 1 ~" +is bound to insert the text +.if t \f(CWFunction Key 1\fP. +.if n ``Function Key 1''. +.PP +The full set of GNU Emacs style escape sequences available when specifying +key sequences is +.RS +.PD 0 +.TP +.B \eC\- +control prefix +.TP +.B \eM\- +meta prefix +.TP +.B \ee +an escape character +.TP +.B \e\e +backslash +.TP +.B \e" +literal ", a double quote +.TP +.B \e' +literal ', a single quote +.RE +.PD +.PP +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ed +delete +.TP +.B \ef +form feed +.TP +.B \en +newline +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(one to three digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.RE +.PD +.PP +When entering the text of a macro, single or double quotes should +be used to indicate a macro definition. Unquoted text +is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including " and '. +.PP +.B Bash +allows the current readline key bindings to be displayed or modified +with the +.B bind +builtin command. The editing mode may be switched during interactive +use by using the +.B \-o +option to the +.B set +builtin command. Other programs using this library provide +similar mechanisms. The +.I inputrc +file may be edited and re-read if a program does not provide +any other means to incorporate new bindings. +.SS Variables +.PP +Readline has variables that can be used to further customize its +behavior. A variable may be set in the +.I inputrc +file with a statement of the form +.RS +.PP +\fBset\fP \fIvariable\-name\fP \fIvalue\fP +.RE +.PP +Except where noted, readline variables can take the values +.B On +or +.B Off +(without regard to case). +Unrecognized variable names are ignored. +When a variable value is read, empty or null values, "on" (case-insensitive), +and "1" are equivalent to \fBOn\fP. All other values are equivalent to +\fBOff\fP. +The variables and their default values are: +.PP +.PD 0 +.TP +.B bell\-style (audible) +Controls what happens when readline wants to ring the terminal bell. +If set to \fBnone\fP, readline never rings the bell. If set to +\fBvisible\fP, readline uses a visible bell if one is available. +If set to \fBaudible\fP, readline attempts to ring the terminal's bell. +.TP +.B bind\-tty\-special\-chars (On) +If set to \fBOn\fP, readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their readline +equivalents. +.TP +.B comment\-begin (``#'') +The string that is inserted in \fBvi\fP mode when the +.B insert\-comment +command is executed. +This command is bound to +.B M\-# +in emacs mode and to +.B # +in vi command mode. +.TP +.B completion\-display\-width (-1) +The number of screen columns used to display possible matches +when performing completion. +The value is ignored if it is less than 0 or greater than the terminal +screen width. +A value of 0 will cause matches to be displayed one per line. +The default value is -1. +.TP +.B completion\-ignore\-case (Off) +If set to \fBOn\fP, readline performs filename matching and completion +in a case\-insensitive fashion. +.TP +.B completion\-map\-case (Off) +If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline +treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when +performing case\-insensitive filename matching and completion. +.TP +.B completion\-prefix\-display\-length (0) +The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. +.TP +.B completion\-query\-items (100) +This determines when the user is queried about viewing +the number of possible completions +generated by the \fBpossible\-completions\fP command. +It may be set to any integer value greater than or equal to +zero. If the number of possible completions is greater than +or equal to the value of this variable, the user is asked whether +or not he wishes to view them; otherwise they are simply listed +on the terminal. A negative value causes readline to never ask. +.TP +.B convert\-meta (On) +If set to \fBOn\fP, readline will convert characters with the +eighth bit set to an ASCII key sequence +by stripping the eighth bit and prefixing it with an +escape character (in effect, using escape as the \fImeta prefix\fP). +.TP +.B disable\-completion (Off) +If set to \fBOn\fP, readline will inhibit word completion. Completion +characters will be inserted into the line as if they had been +mapped to \fBself-insert\fP. +.TP +.B editing\-mode (emacs) +Controls whether readline begins with a set of key bindings similar +to \fIEmacs\fP or \fIvi\fP. +.B editing\-mode +can be set to either +.B emacs +or +.BR vi . +.TP +.B echo\-control\-characters (On) +When set to \fBOn\fP, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. +.TP +.B enable\-keypad (Off) +When set to \fBOn\fP, readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. +.TP +.B enable\-meta\-key (On) +When set to \fBOn\fP, readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +.TP +.B expand\-tilde (Off) +If set to \fBOn\fP, tilde expansion is performed when readline +attempts word completion. +.TP +.B history\-preserve\-point (Off) +If set to \fBOn\fP, the history code attempts to place point at the +same location on each history line retrieved with \fBprevious-history\fP +or \fBnext-history\fP. +.TP +.B history\-size (0) +Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +.TP +.B horizontal\-scroll\-mode (Off) +When set to \fBOn\fP, makes readline use a single line for display, +scrolling the input horizontally on a single screen line when it +becomes longer than the screen width rather than wrapping to a new line. +.TP +.B input\-meta (Off) +If set to \fBOn\fP, readline will enable eight-bit input (that is, +it will not clear the eighth bit in the characters it reads), +regardless of what the terminal claims it can support. The name +.B meta\-flag +is a synonym for this variable. +.TP +.B isearch\-terminators (``C\-[ C\-J'') +The string of characters that should terminate an incremental +search without subsequently executing the character as a command. +If this variable has not been given a value, the characters +\fIESC\fP and \fIC\-J\fP will terminate an incremental search. +.TP +.B keymap (emacs) +Set the current readline keymap. The set of legal keymap names is +\fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, +vi-command\fP, and +.IR vi-insert . +\fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is +equivalent to \fIemacs-standard\fP. The default value is +.IR emacs . +The value of +.B editing\-mode +also affects the default keymap. +.TP +.B mark\-directories (On) +If set to \fBOn\fP, completed directory names have a slash +appended. +.TP +.B mark\-modified\-lines (Off) +If set to \fBOn\fP, history lines that have been modified are displayed +with a preceding asterisk (\fB*\fP). +.TP +.B mark\-symlinked\-directories (Off) +If set to \fBOn\fP, completed names which are symbolic links to directories +have a slash appended (subject to the value of +\fBmark\-directories\fP). +.TP +.B match\-hidden\-files (On) +This variable, when set to \fBOn\fP, causes readline to match files whose +names begin with a `.' (hidden files) when performing filename +completion. +If set to \fBOff\fP, the leading `.' must be +supplied by the user in the filename to be completed. +.TP +.B menu\-complete\-display\-prefix (Off) +If set to \fBOn\fP, menu completion displays the common prefix of the +list of possible completions (which may be empty) before cycling through +the list. +.TP +.B output\-meta (Off) +If set to \fBOn\fP, readline will display characters with the +eighth bit set directly rather than as a meta-prefixed escape +sequence. +.TP +.B page\-completions (On) +If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager +to display a screenful of possible completions at a time. +.TP +.B print\-completions\-horizontally (Off) +If set to \fBOn\fP, readline will display completions with matches +sorted horizontally in alphabetical order, rather than down the screen. +.TP +.B revert\-all\-at\-newline (Off) +If set to \fBOn\fP, readline will undo all changes to history lines +before returning when \fBaccept\-line\fP is executed. By default, +history lines may be modified and retain individual undo lists across +calls to \fBreadline\fP. +.TP +.B show\-all\-if\-ambiguous (Off) +This alters the default behavior of the completion functions. If +set to +.BR On , +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +.TP +.B show\-all\-if\-unmodified (Off) +This alters the default behavior of the completion functions in +a fashion similar to \fBshow\-all\-if\-ambiguous\fP. +If set to +.BR On , +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +.TP +.B skip\-completed\-text (Off) +If set to \fBOn\fP, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +.TP +.B visible\-stats (Off) +If set to \fBOn\fP, a character denoting a file's type as reported +by \fIstat\fP(2) is appended to the filename when listing possible +completions. +.PD +.SS Conditional Constructs +.PP +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. +.IP \fB$if\fP +The +.B $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. +.RS +.IP \fBmode\fP +The \fBmode=\fP form of the \fB$if\fP directive is used to test +whether readline is in emacs or vi mode. +This may be used in conjunction +with the \fBset keymap\fP command, for instance, to set bindings in +the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if +readline is starting out in emacs mode. +.IP \fBterm\fP +The \fBterm=\fP 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 +.B = +is tested against the full name of the terminal and the portion +of the terminal name before the first \fB\-\fP. This allows +.I sun +to match both +.I sun +and +.IR sun\-cmd , +for instance. +.IP \fBapplication\fP +The \fBapplication\fP construct is used to include +application-specific settings. Each program using the readline +library sets the \fIapplication name\fP, and an initialization +file can test for a particular value. +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 \fBbash\fP: +.sp 1 +.RS +.nf +\fB$if\fP Bash +# Quote the current or previous word +"\eC-xq": "\eeb\e"\eef\e"" +\fB$endif\fP +.fi +.RE +.RE +.IP \fB$endif\fP +This command, as seen in the previous example, terminates an +\fB$if\fP command. +.IP \fB$else\fP +Commands in this branch of the \fB$if\fP directive are executed if +the test fails. +.IP \fB$include\fP +This directive takes a single filename as an argument and reads commands +and bindings from that file. For example, the following directive +would read \fI/etc/inputrc\fP: +.sp 1 +.RS +.nf +\fB$include\fP \^ \fI/etc/inputrc\fP +.fi +.RE +.SH SEARCHING +.PP +Readline provides commands for searching through the command history +for lines containing a specified string. +There are two search modes: +.I incremental +and +.IR non-incremental . +.PP +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. +To search backward in the history for a particular string, type +\fBC\-r\fP. Typing \fBC\-s\fP searches forward through the history. +The characters present in the value of the \fBisearch-terminators\fP +variable are used to terminate an incremental search. +If that variable has not been assigned a value the \fIEscape\fP and +\fBC\-J\fP characters will terminate an incremental search. +\fBC\-G\fP 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. +.PP +To find other matching entries in the history list, type \fBC\-s\fP or +\fBC\-r\fP as appropriate. +This will search backward or forward in the history for the next +line 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 newline will terminate the search and accept +the line, thereby executing the command from the history list. +A movement command will terminate the search, make the last line found +the current line, and begin editing. +.PP +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. +.SH EDITING COMMANDS +.PP +The following is a list of the names of the commands and the default +key sequences to which they are bound. +Command names without an accompanying key sequence are unbound by default. +.PP +In the following descriptions, \fIpoint\fP refers to the current cursor +position, and \fImark\fP refers to a cursor position saved by the +\fBset\-mark\fP command. +The text between the point and mark is referred to as the \fIregion\fP. +.SS Commands for Moving +.PP +.PD 0 +.TP +.B beginning\-of\-line (C\-a) +Move to the start of the current line. +.TP +.B end\-of\-line (C\-e) +Move to the end of the line. +.TP +.B forward\-char (C\-f) +Move forward a character. +.TP +.B backward\-char (C\-b) +Move back a character. +.TP +.B forward\-word (M\-f) +Move forward to the end of the next word. Words are composed of +alphanumeric characters (letters and digits). +.TP +.B backward\-word (M\-b) +Move back to the start of the current or previous word. Words are +composed of alphanumeric characters (letters and digits). +.TP +.B clear\-screen (C\-l) +Clear the screen leaving the current line at the top of the screen. +With an argument, refresh the current line without clearing the +screen. +.TP +.B redraw\-current\-line +Refresh the current line. +.PD +.SS Commands for Manipulating the History +.PP +.PD 0 +.TP +.B accept\-line (Newline, Return) +Accept the line regardless of where the cursor is. +If this line is +non-empty, it may be added to the history list for future recall with +\fBadd_history()\fP. +If the line is a modified history line, the history line is restored to its original state. +.TP +.B previous\-history (C\-p) +Fetch the previous command from the history list, moving back in +the list. +.TP +.B next\-history (C\-n) +Fetch the next command from the history list, moving forward in the +list. +.TP +.B beginning\-of\-history (M\-<) +Move to the first line in the history. +.TP +.B end\-of\-history (M\->) +Move to the end of the input history, i.e., the line currently being +entered. +.TP +.B 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. +.TP +.B forward\-search\-history (C\-s) +Search forward starting at the current line and moving `down' through +the history as necessary. This is an incremental search. +.TP +.B non\-incremental\-reverse\-search\-history (M\-p) +Search backward through the history starting at the current line +using a non-incremental search for a string supplied by the user. +.TP +.B non\-incremental\-forward\-search\-history (M\-n) +Search forward through the history using a non-incremental search +for a string supplied by the user. +.TP +.B 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 \fIpoint\fP). +This is a non-incremental search. +.TP +.B 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. +.TP +.B yank\-nth\-arg (M\-C\-y) +Insert the first argument to the previous command (usually +the second word on the previous line) at point. +With an argument +.IR n , +insert the \fIn\fPth word from the previous command (the words +in the previous command begin with word 0). A negative argument +inserts the \fIn\fPth word from the end of the previous command. +Once the argument \fIn\fP is computed, the argument is extracted +as if the "!\fIn\fP" history expansion had been specified. +.TP +.B +yank\-last\-arg (M\-.\^, M\-_\^) +Insert the last argument to the previous command (the last word of +the previous history entry). +With a numeric argument, behave exactly like \fByank\-nth\-arg\fP. +Successive calls to \fByank\-last\-arg\fP move back through the history +list, inserting the last word (or the word specified by the argument to +the first call) of each line in turn. +Any numeric argument supplied to these successive calls determines +the direction to move through the history. A negative argument switches +the direction through the history (back or forward). +The history expansion facilities are used to extract the last argument, +as if the "!$" history expansion had been specified. +.PD +.SS Commands for Changing Text +.PP +.PD 0 +.TP +.B delete\-char (C\-d) +Delete the character at point. If point is at the +beginning of the line, there are no characters in the line, and +the last character typed was not bound to \fBdelete\-char\fP, then return +.SM +.BR EOF . +.TP +.B backward\-delete\-char (Rubout) +Delete the character behind the cursor. When given a numeric argument, +save the deleted text on the kill ring. +.TP +.B 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. +.TP +.B quoted\-insert (C\-q, C\-v) +Add the next character that you type to the line verbatim. This is +how to insert characters like \fBC\-q\fP, for example. +.TP +.B tab\-insert (M-TAB) +Insert a tab character. +.TP +.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) +Insert the character typed. +.TP +.B transpose\-chars (C\-t) +Drag the character before point forward over the character at point, +moving point forward as well. +If point is at the end of the line, then this transposes +the two characters before point. +Negative arguments have no effect. +.TP +.B transpose\-words (M\-t) +Drag the word before point past the word after point, +moving point over that word as well. +If point is at the end of the line, this transposes +the last two words on the line. +.TP +.B upcase\-word (M\-u) +Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move point. +.TP +.B downcase\-word (M\-l) +Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move point. +.TP +.B capitalize\-word (M\-c) +Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move point. +.TP +.B overwrite\-mode +Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +\fBemacs\fP mode; \fBvi\fP mode does overwrite differently. +Each call to \fIreadline()\fP starts in insert mode. +In overwrite mode, characters bound to \fBself\-insert\fP replace +the text at point rather than pushing the text to the right. +Characters bound to \fBbackward\-delete\-char\fP replace the character +before point with a space. By default, this command is unbound. +.PD +.SS Killing and Yanking +.PP +.PD 0 +.TP +.B kill\-line (C\-k) +Kill the text from point to the end of the line. +.TP +.B backward\-kill\-line (C\-x Rubout) +Kill backward to the beginning of the line. +.TP +.B unix\-line\-discard (C\-u) +Kill backward from point to the beginning of the line. +The killed text is saved on the kill-ring. +.\" There is no real difference between this and backward-kill-line +.TP +.B kill\-whole\-line +Kill all characters on the current line, no matter where point is. +.TP +.B kill\-word (M\-d) +Kill from point the end of the current word, or if between +words, to the end of the next word. Word boundaries are the same as +those used by \fBforward\-word\fP. +.TP +.B backward\-kill\-word (M\-Rubout) +Kill the word behind point. +Word boundaries are the same as those used by \fBbackward\-word\fP. +.TP +.B unix\-word\-rubout (C\-w) +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +.TP +.B unix\-filename\-rubout +Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +.TP +.B delete\-horizontal\-space (M\-\e) +Delete all spaces and tabs around point. +.TP +.B kill\-region +Kill the text between the point and \fImark\fP (saved cursor position). +This text is referred to as the \fIregion\fP. +.TP +.B copy\-region\-as\-kill +Copy the text in the region to the kill buffer. +.TP +.B copy\-backward\-word +Copy the word before point to the kill buffer. +The word boundaries are the same as \fBbackward\-word\fP. +.TP +.B copy\-forward\-word +Copy the word following point to the kill buffer. +The word boundaries are the same as \fBforward\-word\fP. +.TP +.B yank (C\-y) +Yank the top of the kill ring into the buffer at point. +.TP +.B yank\-pop (M\-y) +Rotate the kill ring, and yank the new top. Only works following +.B yank +or +.BR yank\-pop . +.PD +.SS Numeric Arguments +.PP +.PD 0 +.TP +.B 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. +.TP +.B 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 +.B 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. +.PD +.SS Completing +.PP +.PD 0 +.TP +.B complete (TAB) +Attempt to perform completion on the text before point. +The actual completion performed is application-specific. +.BR Bash , +for instance, attempts completion treating the text as a variable +(if the text begins with \fB$\fP), username (if the text begins with +\fB~\fP), hostname (if the text begins with \fB@\fP), or +command (including aliases and functions) in turn. If none +of these produces a match, filename completion is attempted. +.BR Gdb , +on the other hand, +allows completion of program functions and variables, and +only attempts filename completion under certain circumstances. +.TP +.B possible\-completions (M\-?) +List the possible completions of the text before point. +When displaying completions, readline sets the number of columns used +for display to the value of \fBcompletion-display-width\fP, the value of +the environment variable +.SM +.BR COLUMNS , +or the screen width, in that order. +.TP +.B insert\-completions (M\-*) +Insert all completions of the text before point +that would have been generated by +\fBpossible\-completions\fP. +.TP +.B menu\-complete +Similar to \fBcomplete\fP, but replaces the word to be completed +with a single match from the list of possible completions. +Repeated execution of \fBmenu\-complete\fP steps through the list +of possible completions, inserting each match in turn. +At the end of the list of completions, the bell is rung +(subject to the setting of \fBbell\-style\fP) +and the original text is restored. +An argument of \fIn\fP moves \fIn\fP 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 \fBTAB\fP, but is unbound +by default. +.TP +.B menu\-complete\-backward +Identical to \fBmenu\-complete\fP, but moves backward through the list +of possible completions, as if \fBmenu\-complete\fP had been given a +negative argument. This command is unbound by default. +.TP +.B delete\-char\-or\-list +Deletes the character under the cursor if not at the beginning or +end of the line (like \fBdelete-char\fP). +If at the end of the line, behaves identically to +\fBpossible-completions\fP. +.PD +.SS Keyboard Macros +.PP +.PD 0 +.TP +.B start\-kbd\-macro (C\-x (\^) +Begin saving the characters typed into the current keyboard macro. +.TP +.B end\-kbd\-macro (C\-x )\^) +Stop saving the characters typed into the current keyboard macro +and store the definition. +.TP +.B 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. +.PD +.SS Miscellaneous +.PP +.PD 0 +.TP +.B re\-read\-init\-file (C\-x C\-r) +Read in the contents of the \fIinputrc\fP file, and incorporate +any bindings or variable assignments found there. +.TP +.B abort (C\-g) +Abort the current editing command and +ring the terminal's bell (subject to the setting of +.BR bell\-style ). +.TP +.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...) +If the metafied character \fIx\fP is lowercase, run the command +that is bound to the corresponding uppercase character. +.TP +.B prefix\-meta (ESC) +Metafy the next character typed. +.SM +.B ESC +.B f +is equivalent to +.BR Meta\-f . +.TP +.B undo (C\-_, C\-x C\-u) +Incremental undo, separately remembered for each line. +.TP +.B revert\-line (M\-r) +Undo all changes made to this line. This is like executing the +.B undo +command enough times to return the line to its initial state. +.TP +.B tilde\-expand (M\-&) +Perform tilde expansion on the current word. +.TP +.B set\-mark (C\-@, M\-<space>) +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +.TP +.B 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. +.TP +.B 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. +.TP +.B 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. +.TP +.B skip\-csi\-sequence +Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC\-[. +.TP +.B insert\-comment (M\-#) +Without a numeric argument, the value of the readline +.B comment\-begin +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of \fBcomment\-begin\fP, the value is inserted, otherwise +the characters in \fBcomment-begin\fP are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +The default value of +.B comment\-begin +makes the current line a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +.TP +.B 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 \fIinputrc\fP file. +.TP +.B 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 \fIinputrc\fP file. +.TP +.B dump\-macros +Print all of the readline key sequences bound to macros and the +strings they output. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an \fIinputrc\fP file. +.TP +.B emacs\-editing\-mode (C\-e) +When in +.B vi +command mode, this causes a switch to +.B emacs +editing mode. +.TP +.B vi\-editing\-mode (M\-C\-j) +When in +.B emacs +editing mode, this causes a switch to +.B vi +editing mode. +.PD +.SH DEFAULT KEY BINDINGS +.LP +The following is a list of the default emacs and vi bindings. +Characters with the eighth bit set are written as M\-<character>, and +are referred to as +.I metafied +characters. +The printable ASCII characters not mentioned in the list of emacs +standard bindings are bound to the +.B self\-insert +function, which just inserts the given character into the input line. +In vi insertion mode, all characters not specifically mentioned are +bound to +.BR self\-insert . +Characters assigned to signal generation by +.IR stty (1) +or the terminal driver, such as C-Z or C-C, +retain that function. +Upper and lower case metafied characters are bound to the same function in +the emacs mode meta keymap. +The remaining characters are unbound, which causes readline +to ring the bell (subject to the setting of the +.B bell\-style +variable). +.SS Emacs Mode +.RS +.6i +.nf +.ta 2.5i +.sp +Emacs Standard bindings +.sp +"C-@" set-mark +"C-A" beginning-of-line +"C-B" backward-char +"C-D" delete-char +"C-E" end-of-line +"C-F" forward-char +"C-G" abort +"C-H" backward-delete-char +"C-I" complete +"C-J" accept-line +"C-K" kill-line +"C-L" clear-screen +"C-M" accept-line +"C-N" next-history +"C-P" previous-history +"C-Q" quoted-insert +"C-R" reverse-search-history +"C-S" forward-search-history +"C-T" transpose-chars +"C-U" unix-line-discard +"C-V" quoted-insert +"C-W" unix-word-rubout +"C-Y" yank +"C-]" character-search +"C-_" undo +"\^ " to "/" self-insert +"0" to "9" self-insert +":" to "~" self-insert +"C-?" backward-delete-char +.PP +Emacs Meta bindings +.sp +"M-C-G" abort +"M-C-H" backward-kill-word +"M-C-I" tab-insert +"M-C-J" vi-editing-mode +"M-C-M" vi-editing-mode +"M-C-R" revert-line +"M-C-Y" yank-nth-arg +"M-C-[" complete +"M-C-]" character-search-backward +"M-space" set-mark +"M-#" insert-comment +"M-&" tilde-expand +"M-*" insert-completions +"M--" digit-argument +"M-." yank-last-arg +"M-0" digit-argument +"M-1" digit-argument +"M-2" digit-argument +"M-3" digit-argument +"M-4" digit-argument +"M-5" digit-argument +"M-6" digit-argument +"M-7" digit-argument +"M-8" digit-argument +"M-9" digit-argument +"M-<" beginning-of-history +"M-=" possible-completions +"M->" end-of-history +"M-?" possible-completions +"M-B" backward-word +"M-C" capitalize-word +"M-D" kill-word +"M-F" forward-word +"M-L" downcase-word +"M-N" non-incremental-forward-search-history +"M-P" non-incremental-reverse-search-history +"M-R" revert-line +"M-T" transpose-words +"M-U" upcase-word +"M-Y" yank-pop +"M-\e" delete-horizontal-space +"M-~" tilde-expand +"M-C-?" backward-kill-word +"M-_" yank-last-arg +.PP +Emacs Control-X bindings +.sp +"C-XC-G" abort +"C-XC-R" re-read-init-file +"C-XC-U" undo +"C-XC-X" exchange-point-and-mark +"C-X(" start-kbd-macro +"C-X)" end-kbd-macro +"C-XE" call-last-kbd-macro +"C-XC-?" backward-kill-line +.sp +.RE +.SS VI Mode bindings +.RS +.6i +.nf +.ta 2.5i +.sp +.PP +VI Insert Mode functions +.sp +"C-D" vi-eof-maybe +"C-H" backward-delete-char +"C-I" complete +"C-J" accept-line +"C-M" accept-line +"C-R" reverse-search-history +"C-S" forward-search-history +"C-T" transpose-chars +"C-U" unix-line-discard +"C-V" quoted-insert +"C-W" unix-word-rubout +"C-Y" yank +"C-[" vi-movement-mode +"C-_" undo +"\^ " to "~" self-insert +"C-?" backward-delete-char +.PP +VI Command Mode functions +.sp +"C-D" vi-eof-maybe +"C-E" emacs-editing-mode +"C-G" abort +"C-H" backward-char +"C-J" accept-line +"C-K" kill-line +"C-L" clear-screen +"C-M" accept-line +"C-N" next-history +"C-P" previous-history +"C-Q" quoted-insert +"C-R" reverse-search-history +"C-S" forward-search-history +"C-T" transpose-chars +"C-U" unix-line-discard +"C-V" quoted-insert +"C-W" unix-word-rubout +"C-Y" yank +"C-_" vi-undo +"\^ " forward-char +"#" insert-comment +"$" end-of-line +"%" vi-match +"&" vi-tilde-expand +"*" vi-complete +"+" next-history +"," vi-char-search +"-" previous-history +"." vi-redo +"/" vi-search +"0" beginning-of-line +"1" to "9" vi-arg-digit +";" vi-char-search +"=" vi-complete +"?" vi-search +"A" vi-append-eol +"B" vi-prev-word +"C" vi-change-to +"D" vi-delete-to +"E" vi-end-word +"F" vi-char-search +"G" vi-fetch-history +"I" vi-insert-beg +"N" vi-search-again +"P" vi-put +"R" vi-replace +"S" vi-subst +"T" vi-char-search +"U" revert-line +"W" vi-next-word +"X" backward-delete-char +"Y" vi-yank-to +"\e" vi-complete +"^" vi-first-print +"_" vi-yank-arg +"`" vi-goto-mark +"a" vi-append-mode +"b" vi-prev-word +"c" vi-change-to +"d" vi-delete-to +"e" vi-end-word +"f" vi-char-search +"h" backward-char +"i" vi-insertion-mode +"j" next-history +"k" prev-history +"l" forward-char +"m" vi-set-mark +"n" vi-search-again +"p" vi-put +"r" vi-change-char +"s" vi-subst +"t" vi-char-search +"u" vi-undo +"w" vi-next-word +"x" vi-delete +"y" vi-yank-to +"|" vi-column +"~" vi-change-case +.RE +.SH "SEE ALSO" +.PD 0 +.TP +\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey +.TP +\fIbash\fP(1) +.PD +.SH FILES +.PD 0 +.TP +.FN ~/.inputrc +Individual \fBreadline\fP initialization file +.PD +.SH AUTHORS +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet@ins.CWRU.Edu +.SH BUG REPORTS +If you find a bug in +.B readline, +you should report it. But first, you should +make sure that it really is a bug, and that it appears in the latest +version of the +.B readline +library that you have. +.PP +Once you have determined that a bug actually exists, mail a +bug report to \fIbug\-readline\fP@\fIgnu.org\fP. +If you have a fix, you are welcome to mail that +as well! Suggestions and `philosophical' bug reports may be mailed +to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet +newsgroup +.BR gnu.bash.bug . +.PP +Comments and bug reports concerning +this manual page should be directed to +.IR chet@ins.CWRU.Edu . +.SH BUGS +.PP +It's too big and too slow. diff --git a/readline-6.2/doc/readline.dvi b/readline-6.2/doc/readline.dvi Binary files differnew file mode 100644 index 0000000..d05e7f7 --- /dev/null +++ b/readline-6.2/doc/readline.dvi diff --git a/readline-6.2/doc/readline.html b/readline-6.2/doc/readline.html new file mode 100644 index 0000000..efc2ab3 --- /dev/null +++ b/readline-6.2/doc/readline.html @@ -0,0 +1,7007 @@ +<HTML> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- Created on February, 8 2011 by texi2html 1.64 --> +<!-- +Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) + Karl Berry <karl@freefriends.org> + Olaf Bachmann <obachman@mathematik.uni-kl.de> + and many others. +Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> +Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> + +--> +<HEAD> +<TITLE>GNU Readline Library: </TITLE> + +<META NAME="description" CONTENT="GNU Readline Library: "> +<META NAME="keywords" CONTENT="GNU Readline Library: "> +<META NAME="resource-type" CONTENT="document"> +<META NAME="distribution" CONTENT="global"> +<META NAME="Generator" CONTENT="texi2html 1.64"> + +</HEAD> + +<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> + +<A NAME="SEC_Top"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>GNU Readline Library</H1></P><P> + +This document describes the GNU Readline Library, a utility which aids +in the consistency of user interface across discrete programs which +provide a command line interface. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC1">1. Command Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC23">2. Programming with GNU Readline</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline Programmer's Manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC49">A. GNU Free Documentation License</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">License for copying this manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC51">Concept Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC52">Function and Variable Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions + and variables.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<HR SIZE=1> +<A NAME="SEC1"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<A NAME="Command Line Editing"></A> +<H1> 1. Command Line Editing </H1> +<!--docid::SEC1::--> +<P> + +This chapter describes the basic features of the GNU +command line editing interface. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands + available for binding</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC22">1.5 Readline vi Mode</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline + behave like the vi editor.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Introduction and Notation"></A> +<HR SIZE="6"> +<A NAME="SEC2"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.1 Introduction to Line Editing </H2> +<!--docid::SEC2::--> +<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. +The Meta key is labeled <KBD>ALT</KBD> on many keyboards. +On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of +the space bar), the <KBD>ALT</KBD> on the left side is generally set to +work as a Meta key. +The <KBD>ALT</KBD> key on the right may also be configured to work as a +Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. +</P><P> + +If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as +a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> +<EM>first</EM>, 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">1.3 Readline Init File</A>). +If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will +produce the desired character. +The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on +some keyboards. +</P><P> + +<A NAME="Readline Interaction"></A> +<HR SIZE="6"> +<A NAME="SEC3"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.2 Readline Interaction </H2> +<!--docid::SEC3::--> +<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>RET</KBD>. You do not have to be at the +end of the line to press <KBD>RET</KBD>; the entire line is accepted +regardless of the location of the cursor within the line. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC7">1.2.4 Readline Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Readline Bare Essentials"></A> +<HR SIZE="6"> +<A NAME="SEC4"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.1 Readline Bare Essentials </H3> +<!--docid::SEC4::--> +<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 mistype a character, and +not notice the 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 bare +essentials for editing the text of an input line follows. +</P><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> or <KBD>Backspace</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> or <KBD>C-x C-u</KBD> +<DD>Undo the last editing command. You can undo all the way back to an +empty line. +</DL> +<P> + +(Depending on your configuration, the <KBD>Backspace</KBD> key be set to +delete the character to the left of the cursor and the <KBD>DEL</KBD> key set +to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather +than the character to the left of the cursor.) +</P><P> + +<A NAME="Readline Movement Commands"></A> +<HR SIZE="6"> +<A NAME="SEC5"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.2 Readline Movement Commands </H3> +<!--docid::SEC5::--> +<P> + +The above table describes the most basic 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><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><P> + +<A NAME="Readline Killing Commands"></A> +<HR SIZE="6"> +<A NAME="SEC6"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.3 Readline Killing Commands </H3> +<!--docid::SEC6::--> +<P> + +<A NAME="IDX1"></A> +<A NAME="IDX2"></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. +(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) +</P><P> + +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="IDX3"></A> +</P><P> + +Here is the list of commands for killing text. +</P><P> + +<DL COMPACT> +<DT><KBD>C-k</KBD> +<DD>Kill the text from the current cursor position to the end of the line. +<P> + +<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. +Word boundaries are the same as those used by <KBD>M-f</KBD>. +<P> + +<DT><KBD>M-<KBD>DEL</KBD></KBD> +<DD>Kill from the cursor the start of the current word, or, if between +words, to the start of the previous word. +Word boundaries are the same as those used by <KBD>M-b</KBD>. +<P> + +<DT><KBD>C-w</KBD> +<DD>Kill from the cursor to the previous whitespace. This is different than +<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ. +<P> + +</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><P> + +<DL COMPACT> +<DT><KBD>C-y</KBD> +<DD>Yank the most recently killed text back into the buffer at the cursor. +<P> + +<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> +<P> + +<A NAME="Readline Arguments"></A> +<HR SIZE="6"> +<A NAME="SEC7"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.4 Readline Arguments </H3> +<!--docid::SEC7::--> +<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 (<SAMP>`-'</SAMP>), 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>, +which will delete the next ten characters on the input line. +</P><P> + +<A NAME="Searching"></A> +<HR SIZE="6"> +<A NAME="SEC8"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.5 Searching for Commands in the History </H3> +<!--docid::SEC8::--> +<P> + +Readline provides commands for searching through the command history +for lines containing a specified string. +There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>. +</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. +To search backward in the history for a particular string, type +<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. +The characters present in the value of the <CODE>isearch-terminators</CODE> 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. +</P><P> + +To find other matching entries in the history list, type <KBD>C-r</KBD> or +<KBD>C-s</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. +A movement command will terminate the search, make the last line found +the current line, and begin editing. +</P><P> + +Readline remembers the last incremental search string. If two +<KBD>C-r</KBD>s are typed without any intervening characters defining a new +search string, any remembered search string is used. +</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><P> + +<A NAME="Readline Init File"></A> +<HR SIZE="6"> +<A NAME="SEC9"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.3 Readline Init File </H2> +<!--docid::SEC9::--> +<P> + +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 <EM>inputrc</EM> file, conventionally 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>. If that +file does not exist or cannot be read, the ultimate default is +<TT>`/etc/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><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR> +</TABLE> + +<br> +<TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR> +</TABLE> + +<br> +<TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC12">1.3.3 Sample Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Readline Init File Syntax"></A> +<HR SIZE="6"> +<A NAME="SEC10"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.1 Readline Init File Syntax </H3> +<!--docid::SEC10::--> +<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">1.3.2 Conditional Init Constructs</A>). Other lines +denote variable settings and key bindings. +</P><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. +The syntax is simple: +<P> + +<TABLE><tr><td> </td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR> +</pre></td></tr></table></P><P> + +Here, for example, is how to +change from the default Emacs-like key binding to use +<CODE>vi</CODE> line editing commands: +</P><P> + +<TABLE><tr><td> </td><td class=example><pre>set editing-mode vi +</pre></td></tr></table></P><P> + +Variable names and values, where appropriate, are recognized without regard +to case. Unrecognized variable names are ignored. +</P><P> + +Boolean variables (those that can be set to on or off) are set to on if +the value is null or empty, <VAR>on</VAR> (case-insensitive), or 1. Any other +value results in the variable being set to off. +</P><P> + +A great deal of run-time behavior is changeable with the following +variables. +</P><P> + +<A NAME="IDX4"></A> +<DL COMPACT> + +<DT><CODE>bell-style</CODE> +<DD><A NAME="IDX5"></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. +<P> + +<DT><CODE>bind-tty-special-chars</CODE> +<DD><A NAME="IDX6"></A> +If set to <SAMP>`on'</SAMP>, Readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their Readline +equivalents. +<P> + +<DT><CODE>comment-begin</CODE> +<DD><A NAME="IDX7"></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>. +<P> + +<DT><CODE>completion-display-width</CODE> +<DD><A NAME="IDX8"></A> +The number of screen columns used to display possible matches +when performing completion. +The value is ignored if it is less than 0 or greater than the terminal +screen width. +A value of 0 will cause matches to be displayed one per line. +The default value is -1. +<P> + +<DT><CODE>completion-ignore-case</CODE> +<DD><A NAME="IDX9"></A> +If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion +in a case-insensitive fashion. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>completion-map-case</CODE> +<DD><A NAME="IDX10"></A> +If set to <SAMP>`on'</SAMP>, and <VAR>completion-ignore-case</VAR> is enabled, Readline +treats hyphens (<SAMP>`-'</SAMP>) and underscores (<SAMP>`_'</SAMP>) as equivalent when +performing case-insensitive filename matching and completion. +<P> + +<DT><CODE>completion-prefix-display-length</CODE> +<DD><A NAME="IDX11"></A> +The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. +<P> + +<DT><CODE>completion-query-items</CODE> +<DD><A NAME="IDX12"></A> +The number of possible completions that determines when the user is +asked whether the list of possibilities should be displayed. +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. +This variable must be set to an integer value greater than or equal to 0. +A negative value means Readline should never ask. +The default limit is <CODE>100</CODE>. +<P> + +<DT><CODE>convert-meta</CODE> +<DD><A NAME="IDX13"></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 prefixing an <KBD>ESC</KBD> character, converting them to a +meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>disable-completion</CODE> +<DD><A NAME="IDX14"></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>. +<P> + +<DT><CODE>editing-mode</CODE> +<DD><A NAME="IDX15"></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>. +<P> + +<DT><CODE>echo-control-characters</CODE> +<DD>When set to <SAMP>`on'</SAMP>, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. The default is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>enable-keypad</CODE> +<DD><A NAME="IDX16"></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>. +<P> + +<DT><CODE>enable-meta-key</CODE> +<DD>When set to <SAMP>`on'</SAMP>, Readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +The default is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>expand-tilde</CODE> +<DD><A NAME="IDX17"></A> +If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline +attempts word completion. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>history-preserve-point</CODE> +<DD><A NAME="IDX18"></A> +If set to <SAMP>`on'</SAMP>, the history code attempts to place the point (the +current cursor position) at the +same location on each history line retrieved with <CODE>previous-history</CODE> +or <CODE>next-history</CODE>. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>history-size</CODE> +<DD><A NAME="IDX19"></A> +Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +<P> + +<DT><CODE>horizontal-scroll-mode</CODE> +<DD><A NAME="IDX20"></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>. +<P> + +<DT><CODE>input-meta</CODE> +<DD><A NAME="IDX21"></A> +<A NAME="IDX22"></A> +If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it +will not clear the eighth bit in 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. +<P> + +<DT><CODE>isearch-terminators</CODE> +<DD><A NAME="IDX23"></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">1.2.5 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. +<P> + +<DT><CODE>keymap</CODE> +<DD><A NAME="IDX24"></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-move</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. +<P> + +<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>. +<P> + +<DT><CODE>mark-modified-lines</CODE> +<DD><A NAME="IDX25"></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. +<P> + +<DT><CODE>mark-symlinked-directories</CODE> +<DD><A NAME="IDX26"></A> +If set to <SAMP>`on'</SAMP>, completed names which are symbolic links +to directories have a slash appended (subject to the value of +<CODE>mark-directories</CODE>). +The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>match-hidden-files</CODE> +<DD><A NAME="IDX27"></A> +This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose +names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename +completion. +If set to <SAMP>`off'</SAMP>, the leading <SAMP>`.'</SAMP> must be +supplied by the user in the filename to be completed. +This variable is <SAMP>`on'</SAMP> by default. +<P> + +<DT><CODE>menu-complete-display-prefix</CODE> +<DD><A NAME="IDX28"></A> +If set to <SAMP>`on'</SAMP>, menu completion displays the common prefix of the +list of possible completions (which may be empty) before cycling through +the list. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>output-meta</CODE> +<DD><A NAME="IDX29"></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>. +<P> + +<DT><CODE>page-completions</CODE> +<DD><A NAME="IDX30"></A> +If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager +to display a screenful of possible completions at a time. +This variable is <SAMP>`on'</SAMP> by default. +<P> + +<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>. +<P> + +<DT><CODE>revert-all-at-newline</CODE> +<DD><A NAME="IDX31"></A> +If set to <SAMP>`on'</SAMP>, Readline will undo all changes to history lines +before returning when <CODE>accept-line</CODE> is executed. By default, +history lines may be modified and retain individual undo lists across +calls to <CODE>readline</CODE>. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>show-all-if-ambiguous</CODE> +<DD><A NAME="IDX32"></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>. +<P> + +<DT><CODE>show-all-if-unmodified</CODE> +<DD><A NAME="IDX33"></A> +This alters the default behavior of the completion functions in +a fashion similar to <VAR>show-all-if-ambiguous</VAR>. +If set to <SAMP>`on'</SAMP>, +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>skip-completed-text</CODE> +<DD><A NAME="IDX34"></A> +If set to <SAMP>`on'</SAMP>, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +For instance, if this is enabled, attempting completion when the cursor +is after the <SAMP>`e'</SAMP> in <SAMP>`Makefile'</SAMP> will result in <SAMP>`Makefile'</SAMP> +rather than <SAMP>`Makefilefile'</SAMP>, assuming there is a single possible +completion. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>visible-stats</CODE> +<DD><A NAME="IDX35"></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>. +<P> + +</DL> +<P> + +<DT>Key Bindings +<DD>The syntax for controlling key bindings in the init file is +simple. First you need to find 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. +<P> + +Once you know the name of the command, simply place on a line +in the init file the name of the key +you wish to bind the command to, a colon, and then the name of the +command. +There can be no space between the key name and the colon -- that will be +interpreted as part of the key name. +The name of the key can be expressed in different ways, depending on +what you find most comfortable. +</P><P> + +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a <VAR>macro</VAR>). +</P><P> + +<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: +<TABLE><tr><td> </td><td class=example><pre>Control-u: universal-argument +Meta-Rubout: backward-kill-word +Control-o: "> output" +</pre></td></tr></table><P> + +In the above example, <KBD>C-u</KBD> is bound to the function +<CODE>universal-argument</CODE>, +<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</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>`> output'</SAMP> into the line). +</P><P> + +A number of symbolic character names are recognized while +processing this key binding syntax: +<VAR>DEL</VAR>, +<VAR>ESC</VAR>, +<VAR>ESCAPE</VAR>, +<VAR>LFD</VAR>, +<VAR>NEWLINE</VAR>, +<VAR>RET</VAR>, +<VAR>RETURN</VAR>, +<VAR>RUBOUT</VAR>, +<VAR>SPACE</VAR>, +<VAR>SPC</VAR>, +and +<VAR>TAB</VAR>. +</P><P> + +<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. +<P> + +<TABLE><tr><td> </td><td class=example><pre>"\C-u": universal-argument +"\C-x\C-r": re-read-init-file +"\e[11~": "Function Key 1" +</pre></td></tr></table></P><P> + +In the above example, <KBD>C-u</KBD> is again 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>. +</P><P> + +</DL> +<P> + +The following GNU Emacs style escape sequences are available when +specifying key sequences: +</P><P> + +<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>, a double quotation mark +<DT><CODE><KBD>\'</KBD></CODE> +<DD><KBD>'</KBD>, a single quote or apostrophe +</DL> +<P> + +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +</P><P> + +<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 eight-bit character whose value is the octal value <VAR>nnn</VAR> +(one to three digits) +<DT><CODE>\x<VAR>HH</VAR></CODE> +<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR> +(one or two hex digits) +</DL> +<P> + +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>`<KBD>C-x</KBD> \'</SAMP> +insert a single <SAMP>`\'</SAMP> into the line: +<TABLE><tr><td> </td><td class=example><pre>"\C-x\\": "\\" +</pre></td></tr></table></P><P> + +</DL> +<P> + +<A NAME="Conditional Init Constructs"></A> +<HR SIZE="6"> +<A NAME="SEC11"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.2 Conditional Init Constructs </H3> +<!--docid::SEC11::--> +<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><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. +<P> + +<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. +<P> + +<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. +<P> + +<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 +a particular value. +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: +<TABLE><tr><td> </td><td class=example><pre>$if Bash +# Quote the current or previous word +"\C-xq": "\eb\"\ef\"" +$endif +</pre></td></tr></table></DL> +<P> + +<DT><CODE>$endif</CODE> +<DD>This command, as seen in the previous example, terminates an +<CODE>$if</CODE> command. +<P> + +<DT><CODE>$else</CODE> +<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if +the test fails. +<P> + +<DT><CODE>$include</CODE> +<DD>This directive takes a single filename as an argument and reads commands +and bindings from that file. +For example, the following directive reads from <TT>`/etc/inputrc'</TT>: +<TABLE><tr><td> </td><td class=example><pre>$include /etc/inputrc +</pre></td></tr></table></DL> +<P> + +<A NAME="Sample Init File"></A> +<HR SIZE="6"> +<A NAME="SEC12"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.3 Sample Init File </H3> +<!--docid::SEC12::--> +<P> + +Here is an example of an <VAR>inputrc</VAR> file. This illustrates key +binding, variable assignment, and conditional syntax. +</P><P> + +<TABLE><tr><td> </td><td class=example><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></td></tr></table></P><P> + +<A NAME="Bindable Readline Commands"></A> +<HR SIZE="6"> +<A NAME="SEC13"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.4 Bindable Readline Commands </H2> +<!--docid::SEC13::--> +<P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +This section describes Readline commands that may be bound to key +sequences. +Command names without an accompanying key sequence are unbound by default. +</P><P> + +In the following descriptions, <EM>point</EM> refers to the current cursor +position, and <EM>mark</EM> refers to a cursor position saved by the +<CODE>set-mark</CODE> command. +The text between the point and mark is referred to as the <EM>region</EM>. +</P><P> + +<A NAME="Commands For Moving"></A> +<HR SIZE="6"> +<A NAME="SEC14"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.1 Commands For Moving </H3> +<!--docid::SEC14::--> +<DL COMPACT> +<A NAME="IDX36"></A> +<DT><CODE>beginning-of-line (C-a)</CODE> +<DD><A NAME="IDX37"></A> +Move to the start of the current line. +<P> + +<A NAME="IDX38"></A> +<DT><CODE>end-of-line (C-e)</CODE> +<DD><A NAME="IDX39"></A> +Move to the end of the line. +<P> + +<A NAME="IDX40"></A> +<DT><CODE>forward-char (C-f)</CODE> +<DD><A NAME="IDX41"></A> +Move forward a character. +<P> + +<A NAME="IDX42"></A> +<DT><CODE>backward-char (C-b)</CODE> +<DD><A NAME="IDX43"></A> +Move back a character. +<P> + +<A NAME="IDX44"></A> +<DT><CODE>forward-word (M-f)</CODE> +<DD><A NAME="IDX45"></A> +Move forward to the end of the next word. +Words are composed of letters and digits. +<P> + +<A NAME="IDX46"></A> +<DT><CODE>backward-word (M-b)</CODE> +<DD><A NAME="IDX47"></A> +Move back to the start of the current or previous word. +Words are composed of letters and digits. +<P> + +<A NAME="IDX48"></A> +<DT><CODE>clear-screen (C-l)</CODE> +<DD><A NAME="IDX49"></A> +Clear the screen and redraw the current line, +leaving the current line at the top of the screen. +<P> + +<A NAME="IDX50"></A> +<DT><CODE>redraw-current-line ()</CODE> +<DD><A NAME="IDX51"></A> +Refresh the current line. By default, this is unbound. +<P> + +</DL> +<P> + +<A NAME="Commands For History"></A> +<HR SIZE="6"> +<A NAME="SEC15"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.2 Commands For Manipulating The History </H3> +<!--docid::SEC15::--> +<P> + +<DL COMPACT> +<A NAME="IDX52"></A> +<DT><CODE>accept-line (Newline or Return)</CODE> +<DD><A NAME="IDX53"></A> +Accept the line regardless of where the cursor is. +If this line is +non-empty, it may be added to the history list for future recall with +<CODE>add_history()</CODE>. +If this line is a modified history line, the history line is restored +to its original state. +<P> + +<A NAME="IDX54"></A> +<DT><CODE>previous-history (C-p)</CODE> +<DD><A NAME="IDX55"></A> +Move `back' through the history list, fetching the previous command. +<P> + +<A NAME="IDX56"></A> +<DT><CODE>next-history (C-n)</CODE> +<DD><A NAME="IDX57"></A> +Move `forward' through the history list, fetching the next command. +<P> + +<A NAME="IDX58"></A> +<DT><CODE>beginning-of-history (M-<)</CODE> +<DD><A NAME="IDX59"></A> +Move to the first line in the history. +<P> + +<A NAME="IDX60"></A> +<DT><CODE>end-of-history (M->)</CODE> +<DD><A NAME="IDX61"></A> +Move to the end of the input history, i.e., the line currently +being entered. +<P> + +<A NAME="IDX62"></A> +<DT><CODE>reverse-search-history (C-r)</CODE> +<DD><A NAME="IDX63"></A> +Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. +<P> + +<A NAME="IDX64"></A> +<DT><CODE>forward-search-history (C-s)</CODE> +<DD><A NAME="IDX65"></A> +Search forward starting at the current line and moving `down' through +the the history as necessary. This is an incremental search. +<P> + +<A NAME="IDX66"></A> +<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> +<DD><A NAME="IDX67"></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. +<P> + +<A NAME="IDX68"></A> +<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> +<DD><A NAME="IDX69"></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. +<P> + +<A NAME="IDX70"></A> +<DT><CODE>history-search-forward ()</CODE> +<DD><A NAME="IDX71"></A> +Search forward 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. +<P> + +<A NAME="IDX72"></A> +<DT><CODE>history-search-backward ()</CODE> +<DD><A NAME="IDX73"></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. +<P> + +<A NAME="IDX74"></A> +<DT><CODE>yank-nth-arg (M-C-y)</CODE> +<DD><A NAME="IDX75"></A> +Insert the first argument to the previous command (usually +the second word on the previous line) at point. +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. +Once the argument <VAR>n</VAR> is computed, the argument is extracted +as if the <SAMP>`!<VAR>n</VAR>'</SAMP> history expansion had been specified. +<P> + +<A NAME="IDX76"></A> +<DT><CODE>yank-last-arg (M-. or M-_)</CODE> +<DD><A NAME="IDX77"></A> +Insert last argument to the previous command (the last word of the +previous history entry). +With a numeric 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 word (or the word specified by the argument to +the first call) of each line in turn. +Any numeric argument supplied to these successive calls determines +the direction to move through the history. A negative argument switches +the direction through the history (back or forward). +The history expansion facilities are used to extract the last argument, +as if the <SAMP>`!$'</SAMP> history expansion had been specified. +<P> + +</DL> +<P> + +<A NAME="Commands For Text"></A> +<HR SIZE="6"> +<A NAME="SEC16"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.3 Commands For Changing Text </H3> +<!--docid::SEC16::--> +<P> + +<DL COMPACT> +<A NAME="IDX78"></A> +<DT><CODE>delete-char (C-d)</CODE> +<DD><A NAME="IDX79"></A> +Delete the character at point. If point 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 EOF. +<P> + +<A NAME="IDX80"></A> +<DT><CODE>backward-delete-char (Rubout)</CODE> +<DD><A NAME="IDX81"></A> +Delete the character behind the cursor. A numeric argument means +to kill the characters instead of deleting them. +<P> + +<A NAME="IDX82"></A> +<DT><CODE>forward-backward-delete-char ()</CODE> +<DD><A NAME="IDX83"></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. +<P> + +<A NAME="IDX84"></A> +<DT><CODE>quoted-insert (C-q or C-v)</CODE> +<DD><A NAME="IDX85"></A> +Add the next character typed to the line verbatim. This is +how to insert key sequences like <KBD>C-q</KBD>, for example. +<P> + +<A NAME="IDX86"></A> +<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE> +<DD><A NAME="IDX87"></A> +Insert a tab character. +<P> + +<A NAME="IDX88"></A> +<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE> +<DD><A NAME="IDX89"></A> +Insert yourself. +<P> + +<A NAME="IDX90"></A> +<DT><CODE>transpose-chars (C-t)</CODE> +<DD><A NAME="IDX91"></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 have no effect. +<P> + +<A NAME="IDX92"></A> +<DT><CODE>transpose-words (M-t)</CODE> +<DD><A NAME="IDX93"></A> +Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. +<P> + +<A NAME="IDX94"></A> +<DT><CODE>upcase-word (M-u)</CODE> +<DD><A NAME="IDX95"></A> +Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move the cursor. +<P> + +<A NAME="IDX96"></A> +<DT><CODE>downcase-word (M-l)</CODE> +<DD><A NAME="IDX97"></A> +Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move the cursor. +<P> + +<A NAME="IDX98"></A> +<DT><CODE>capitalize-word (M-c)</CODE> +<DD><A NAME="IDX99"></A> +Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move the cursor. +<P> + +<A NAME="IDX100"></A> +<DT><CODE>overwrite-mode ()</CODE> +<DD><A NAME="IDX101"></A> +Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently. +Each call to <CODE>readline()</CODE> starts in insert mode. +<P> + +In overwrite mode, characters bound to <CODE>self-insert</CODE> replace +the text at point rather than pushing the text to the right. +Characters bound to <CODE>backward-delete-char</CODE> replace the character +before point with a space. +</P><P> + +By default, this command is unbound. +</P><P> + +</DL> +<P> + +<A NAME="Commands For Killing"></A> +<HR SIZE="6"> +<A NAME="SEC17"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.4 Killing And Yanking </H3> +<!--docid::SEC17::--> +<P> + +<DL COMPACT> + +<A NAME="IDX102"></A> +<DT><CODE>kill-line (C-k)</CODE> +<DD><A NAME="IDX103"></A> +Kill the text from point to the end of the line. +<P> + +<A NAME="IDX104"></A> +<DT><CODE>backward-kill-line (C-x Rubout)</CODE> +<DD><A NAME="IDX105"></A> +Kill backward to the beginning of the line. +<P> + +<A NAME="IDX106"></A> +<DT><CODE>unix-line-discard (C-u)</CODE> +<DD><A NAME="IDX107"></A> +Kill backward from the cursor to the beginning of the current line. +<P> + +<A NAME="IDX108"></A> +<DT><CODE>kill-whole-line ()</CODE> +<DD><A NAME="IDX109"></A> +Kill all characters on the current line, no matter where point is. +By default, this is unbound. +<P> + +<A NAME="IDX110"></A> +<DT><CODE>kill-word (M-d)</CODE> +<DD><A NAME="IDX111"></A> +Kill from point 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>. +<P> + +<A NAME="IDX112"></A> +<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE> +<DD><A NAME="IDX113"></A> +Kill the word behind point. +Word boundaries are the same as <CODE>backward-word</CODE>. +<P> + +<A NAME="IDX114"></A> +<DT><CODE>unix-word-rubout (C-w)</CODE> +<DD><A NAME="IDX115"></A> +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +<P> + +<A NAME="IDX116"></A> +<DT><CODE>unix-filename-rubout ()</CODE> +<DD><A NAME="IDX117"></A> +Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +<P> + +<A NAME="IDX118"></A> +<DT><CODE>delete-horizontal-space ()</CODE> +<DD><A NAME="IDX119"></A> +Delete all spaces and tabs around point. By default, this is unbound. +<P> + +<A NAME="IDX120"></A> +<DT><CODE>kill-region ()</CODE> +<DD><A NAME="IDX121"></A> +Kill the text in the current region. +By default, this command is unbound. +<P> + +<A NAME="IDX122"></A> +<DT><CODE>copy-region-as-kill ()</CODE> +<DD><A NAME="IDX123"></A> +Copy the text in the region to the kill buffer, so it can be yanked +right away. By default, this command is unbound. +<P> + +<A NAME="IDX124"></A> +<DT><CODE>copy-backward-word ()</CODE> +<DD><A NAME="IDX125"></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. +<P> + +<A NAME="IDX126"></A> +<DT><CODE>copy-forward-word ()</CODE> +<DD><A NAME="IDX127"></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. +<P> + +<A NAME="IDX128"></A> +<DT><CODE>yank (C-y)</CODE> +<DD><A NAME="IDX129"></A> +Yank the top of the kill ring into the buffer at point. +<P> + +<A NAME="IDX130"></A> +<DT><CODE>yank-pop (M-y)</CODE> +<DD><A NAME="IDX131"></A> +Rotate the kill-ring, and yank the new top. You can only do this if +the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. +</DL> +<P> + +<A NAME="Numeric Arguments"></A> +<HR SIZE="6"> +<A NAME="SEC18"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.5 Specifying Numeric Arguments </H3> +<!--docid::SEC18::--> +<DL COMPACT> + +<A NAME="IDX132"></A> +<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> +<DD><A NAME="IDX133"></A> +Add this digit to the argument already accumulating, or start a new +argument. <KBD>M--</KBD> starts a negative argument. +<P> + +<A NAME="IDX134"></A> +<DT><CODE>universal-argument ()</CODE> +<DD><A NAME="IDX135"></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> +<P> + +<A NAME="Commands For Completion"></A> +<HR SIZE="6"> +<A NAME="SEC19"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.6 Letting Readline Type For You </H3> +<!--docid::SEC19::--> +<P> + +<DL COMPACT> +<A NAME="IDX136"></A> +<DT><CODE>complete (<KBD>TAB</KBD>)</CODE> +<DD><A NAME="IDX137"></A> +Attempt to perform completion on the text before point. +The actual completion performed is application-specific. +The default is filename completion. +<P> + +<A NAME="IDX138"></A> +<DT><CODE>possible-completions (M-?)</CODE> +<DD><A NAME="IDX139"></A> +List the possible completions of the text before point. +When displaying completions, Readline sets the number of columns used +for display to the value of <CODE>completion-display-width</CODE>, the value of +the environment variable <CODE>COLUMNS</CODE>, or the screen width, in that order. +<P> + +<A NAME="IDX140"></A> +<DT><CODE>insert-completions (M-*)</CODE> +<DD><A NAME="IDX141"></A> +Insert all completions of the text before point that would have +been generated by <CODE>possible-completions</CODE>. +<P> + +<A NAME="IDX142"></A> +<DT><CODE>menu-complete ()</CODE> +<DD><A NAME="IDX143"></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 +(subject to the setting of <CODE>bell-style</CODE>) +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 <KBD>TAB</KBD>, but is unbound +by default. +<P> + +<A NAME="IDX144"></A> +<DT><CODE>menu-complete-backward ()</CODE> +<DD><A NAME="IDX145"></A> +Identical to <CODE>menu-complete</CODE>, but moves backward through the list +of possible completions, as if <CODE>menu-complete</CODE> had been given a +negative argument. +<P> + +<A NAME="IDX146"></A> +<DT><CODE>delete-char-or-list ()</CODE> +<DD><A NAME="IDX147"></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. +<P> + +</DL> +<P> + +<A NAME="Keyboard Macros"></A> +<HR SIZE="6"> +<A NAME="SEC20"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.7 Keyboard Macros </H3> +<!--docid::SEC20::--> +<DL COMPACT> + +<A NAME="IDX148"></A> +<DT><CODE>start-kbd-macro (C-x ()</CODE> +<DD><A NAME="IDX149"></A> +Begin saving the characters typed into the current keyboard macro. +<P> + +<A NAME="IDX150"></A> +<DT><CODE>end-kbd-macro (C-x ))</CODE> +<DD><A NAME="IDX151"></A> +Stop saving the characters typed into the current keyboard macro +and save the definition. +<P> + +<A NAME="IDX152"></A> +<DT><CODE>call-last-kbd-macro (C-x e)</CODE> +<DD><A NAME="IDX153"></A> +Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. +<P> + +</DL> +<P> + +<A NAME="Miscellaneous Commands"></A> +<HR SIZE="6"> +<A NAME="SEC21"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.8 Some Miscellaneous Commands </H3> +<!--docid::SEC21::--> +<DL COMPACT> + +<A NAME="IDX154"></A> +<DT><CODE>re-read-init-file (C-x C-r)</CODE> +<DD><A NAME="IDX155"></A> +Read in the contents of the <VAR>inputrc</VAR> file, and incorporate +any bindings or variable assignments found there. +<P> + +<A NAME="IDX156"></A> +<DT><CODE>abort (C-g)</CODE> +<DD><A NAME="IDX157"></A> +Abort the current editing command and +ring the terminal's bell (subject to the setting of +<CODE>bell-style</CODE>). +<P> + +<A NAME="IDX158"></A> +<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> +<DD><A NAME="IDX159"></A> +If the metafied character <VAR>x</VAR> is lowercase, run the command +that is bound to the corresponding uppercase character. +<P> + +<A NAME="IDX160"></A> +<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> +<DD><A NAME="IDX161"></A> +Metafy the next character typed. This is for keyboards +without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing +<KBD>M-f</KBD>. +<P> + +<A NAME="IDX162"></A> +<DT><CODE>undo (C-_ or C-x C-u)</CODE> +<DD><A NAME="IDX163"></A> +Incremental undo, separately remembered for each line. +<P> + +<A NAME="IDX164"></A> +<DT><CODE>revert-line (M-r)</CODE> +<DD><A NAME="IDX165"></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. +<P> + +<A NAME="IDX166"></A> +<DT><CODE>tilde-expand (M-~)</CODE> +<DD><A NAME="IDX167"></A> +Perform tilde expansion on the current word. +<P> + +<A NAME="IDX168"></A> +<DT><CODE>set-mark (C-@)</CODE> +<DD><A NAME="IDX169"></A> +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +<P> + +<A NAME="IDX170"></A> +<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> +<DD><A NAME="IDX171"></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. +<P> + +<A NAME="IDX172"></A> +<DT><CODE>character-search (C-])</CODE> +<DD><A NAME="IDX173"></A> +A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +<P> + +<A NAME="IDX174"></A> +<DT><CODE>character-search-backward (M-C-])</CODE> +<DD><A NAME="IDX175"></A> +A character is read and point is moved to the previous occurrence +of that character. A negative count searches for subsequent +occurrences. +<P> + +<A NAME="IDX176"></A> +<DT><CODE>skip-csi-sequence ()</CODE> +<DD><A NAME="IDX177"></A> +Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC-[. +<P> + +<A NAME="IDX178"></A> +<DT><CODE>insert-comment (M-#)</CODE> +<DD><A NAME="IDX179"></A> +Without a numeric argument, the value of the <CODE>comment-begin</CODE> +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of <CODE>comment-begin</CODE>, the value is inserted, otherwise +the characters in <CODE>comment-begin</CODE> are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +<P> + +<A NAME="IDX180"></A> +<DT><CODE>dump-functions ()</CODE> +<DD><A NAME="IDX181"></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. +<P> + +<A NAME="IDX182"></A> +<DT><CODE>dump-variables ()</CODE> +<DD><A NAME="IDX183"></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. +<P> + +<A NAME="IDX184"></A> +<DT><CODE>dump-macros ()</CODE> +<DD><A NAME="IDX185"></A> +Print all of the Readline key sequences bound to macros and the +strings they output. 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. +<P> + +<A NAME="IDX186"></A> +<DT><CODE>emacs-editing-mode (C-e)</CODE> +<DD><A NAME="IDX187"></A> +When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> +editing mode. +<P> + +<A NAME="IDX188"></A> +<DT><CODE>vi-editing-mode (M-C-j)</CODE> +<DD><A NAME="IDX189"></A> +When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> +editing mode. +<P> + +</DL> +<P> + +<A NAME="Readline vi Mode"></A> +<HR SIZE="6"> +<A NAME="SEC22"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.5 Readline vi Mode </H2> +<!--docid::SEC22::--> +<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 standard. +</P><P> + +In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> +editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode +when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> 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><P> + +This document describes the GNU Readline Library, a utility for aiding +in the consistency of user interface across discrete programs that need +to provide a command line interface. +</P><P> + +Copyright (C) 1988--2011 Free Software Foundation, Inc. +</P><P> + +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. +</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 Foundation. +</P><P> + +<A NAME="Programming with GNU Readline"></A> +<HR SIZE="6"> +<A NAME="SEC23"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> 2. Programming with GNU Readline </H1> +<!--docid::SEC23::--> +<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><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Using the default behavior of Readline.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC25">2.2 Custom Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Adding your own functions to Readline.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables accessible to custom + functions.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions which Readline supplies to + aid in writing your own custom + functions.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How Readline behaves when it receives signals.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC44">2.6 Custom Completers</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Supplanting or supplementing Readline's + completion functions.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Basic Behavior"></A> +<HR SIZE="6"> +<A NAME="SEC24"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.1 Basic Behavior </H2> +<!--docid::SEC24::--> +<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="IDX190"></A> +<A NAME="IDX191"></A> +</P><P> + +The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR> +and then reads and returns a single line of text from the user. +If <VAR>prompt</VAR> is <CODE>NULL</CODE> or the empty string, no prompt is displayed. +The line <CODE>readline</CODE> returns is allocated with <CODE>malloc()</CODE>; +the caller should <CODE>free()</CODE> the line when it has finished with it. +The declaration for <CODE>readline</CODE> in ANSI C is +</P><P> + +<TABLE><tr><td> </td><td class=example><pre><CODE>char *readline (const char *<VAR>prompt</VAR>);</CODE> +</pre></td></tr></table></P><P> + +So, one might say +<TABLE><tr><td> </td><td class=example><pre><CODE>char *line = readline ("Enter a line: ");</CODE> +</pre></td></tr></table>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><P> + +<TABLE><tr><td> </td><td class=example><pre><CODE>add_history (line)</CODE>; +</pre></td></tr></table></P><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><P> + +<TABLE><tr><td> </td><td class=example><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 && *line_read) + add_history (line_read); + + return (line_read); +} +</pre></td></tr></table></P><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><P> + +<TABLE><tr><td> </td><td class=example><pre><CODE>int rl_bind_key (int <VAR>key</VAR>, rl_command_func_t *<VAR>function</VAR>);</CODE> +</pre></td></tr></table></P><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: +<TABLE><tr><td> </td><td class=example><pre><CODE>rl_bind_key ('\t', rl_insert);</CODE> +</pre></td></tr></table></P><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#SEC44">2.6 Custom Completers</A>). +</P><P> + +<A NAME="Custom Functions"></A> +<HR SIZE="6"> +<A NAME="SEC25"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.2 Custom Functions </H2> +<!--docid::SEC25::--> +<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><P> + +Before declaring any functions that customize Readline's behavior, or +using any functionality Readline provides in other code, an +application writer should include the file <CODE><readline/readline.h></CODE> +in any file that uses Readline's features. Since some of the definitions +in <CODE>readline.h</CODE> use the <CODE>stdio</CODE> library, the file +<CODE><stdio.h></CODE> should be included before <CODE>readline.h</CODE>. +</P><P> + +<CODE>readline.h</CODE> defines a C preprocessor variable that should +be treated as an integer, <CODE>RL_READLINE_VERSION</CODE>, which may +be used to conditionally compile application code depending on +the installed Readline version. The value is a hexadecimal +encoding of the major and minor version numbers of the library, +of the form 0x<VAR>MMmm</VAR>. <VAR>MM</VAR> is the two-digit major +version number; <VAR>mm</VAR> is the two-digit minor version number. +For Readline 4.2, for example, the value of +<CODE>RL_READLINE_VERSION</CODE> would be <CODE>0x0402</CODE>. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">C declarations to make code readable.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC27">2.2.2 Writing a New Function</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables and calling conventions.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Readline Typedefs"></A> +<HR SIZE="6"> +<A NAME="SEC26"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.2.1 Readline Typedefs </H3> +<!--docid::SEC26::--> +<P> + +For readabilty, we declare a number of new object types, all pointers +to functions. +</P><P> + +The reason for declaring these new types is to make it easier to write +code describing pointers to C functions with appropriately prototyped +arguments and return values. +</P><P> + +For instance, say we want to declare a variable <VAR>func</VAR> as a pointer +to a function which takes two <CODE>int</CODE> arguments and returns an +<CODE>int</CODE> (this is the type of all of the Readline bindable functions). +Instead of the classic C declaration +</P><P> + +<CODE>int (*func)();</CODE> +</P><P> + +or the ANSI-C style declaration +</P><P> + +<CODE>int (*func)(int, int);</CODE> +</P><P> + +we may write +</P><P> + +<CODE>rl_command_func_t *func;</CODE> +</P><P> + +The full list of function pointer types available is +</P><P> + +<DL COMPACT> +<DT><CODE>typedef int rl_command_func_t (int, int);</CODE> +<DD><P> + +<DT><CODE>typedef char *rl_compentry_func_t (const char *, int);</CODE> +<DD><P> + +<DT><CODE>typedef char **rl_completion_func_t (const char *, int, int);</CODE> +<DD><P> + +<DT><CODE>typedef char *rl_quote_func_t (char *, int, char *);</CODE> +<DD><P> + +<DT><CODE>typedef char *rl_dequote_func_t (char *, int);</CODE> +<DD><P> + +<DT><CODE>typedef int rl_compignore_func_t (char **);</CODE> +<DD><P> + +<DT><CODE>typedef void rl_compdisp_func_t (char **, int, int);</CODE> +<DD><P> + +<DT><CODE>typedef int rl_hook_func_t (void);</CODE> +<DD><P> + +<DT><CODE>typedef int rl_getc_func_t (FILE *);</CODE> +<DD><P> + +<DT><CODE>typedef int rl_linebuf_func_t (char *, int);</CODE> +<DD><P> + +<DT><CODE>typedef int rl_intfunc_t (int);</CODE> +<DD><DT><CODE>#define rl_ivoidfunc_t rl_hook_func_t</CODE> +<DD><DT><CODE>typedef int rl_icpfunc_t (char *);</CODE> +<DD><DT><CODE>typedef int rl_icppfunc_t (char **);</CODE> +<DD><P> + +<DT><CODE>typedef void rl_voidfunc_t (void);</CODE> +<DD><DT><CODE>typedef void rl_vintfunc_t (int);</CODE> +<DD><DT><CODE>typedef void rl_vcpfunc_t (char *);</CODE> +<DD><DT><CODE>typedef void rl_vcppfunc_t (char **);</CODE> +<DD><P> + +</DL> +<P> + +<A NAME="Function Writing"></A> +<HR SIZE="6"> +<A NAME="SEC27"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.2.2 Writing a New Function </H3> +<!--docid::SEC27::--> +<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><P> + +<TABLE><tr><td> </td><td class=example><pre><CODE>int foo (int count, int key)</CODE> +</pre></td></tr></table></P><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><P> + +A command function should return 0 if its action completes successfully, +and a non-zero value if some error occurs. +This is the convention obeyed by all of the builtin Readline bindable +command functions. +</P><P> + +<A NAME="Readline Variables"></A> +<HR SIZE="6"> +<A NAME="SEC28"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.3 Readline Variables </H2> +<!--docid::SEC28::--> +<P> + +These variables are available to function writers. +</P><P> + +<A NAME="IDX192"></A> +<DL> +<DT><U>Variable:</U> char * <B>rl_line_buffer</B> +<DD>This is the line gathered so far. You are welcome to modify the +contents of the line, but see <A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>. The +function <CODE>rl_extend_line_buffer</CODE> is available to increase +the memory allocated to <CODE>rl_line_buffer</CODE>. +</DL> +</P><P> + +<A NAME="IDX193"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_point</B> +<DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE> +(the <EM>point</EM>). +</DL> +</P><P> + +<A NAME="IDX194"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_end</B> +<DD>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> + +<A NAME="IDX195"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_mark</B> +<DD>The <VAR>mark</VAR> (saved position) in the current line. If set, the mark +and point define a <EM>region</EM>. +</DL> +</P><P> + +<A NAME="IDX196"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_done</B> +<DD>Setting this to a non-zero value causes Readline to return the current +line immediately. +</DL> +</P><P> + +<A NAME="IDX197"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_num_chars_to_read</B> +<DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes +Readline to return after accepting that many characters, rather +than reading up to a character bound to <CODE>accept-line</CODE>. +</DL> +</P><P> + +<A NAME="IDX198"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_pending_input</B> +<DD>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> + +<A NAME="IDX199"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_dispatching</B> +<DD>Set to a non-zero value if a function is being called from a key binding; +zero otherwise. Application functions can test this to discover whether +they were called directly or by Readline's dispatching mechanism. +</DL> +</P><P> + +<A NAME="IDX200"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_erase_empty_line</B> +<DD>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> + +<A NAME="IDX201"></A> +<DL> +<DT><U>Variable:</U> char * <B>rl_prompt</B> +<DD>The prompt Readline uses. This is set from the argument to +<CODE>readline()</CODE>, and should not be assigned to directly. +The <CODE>rl_set_prompt()</CODE> function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>) may +be used to modify the prompt string after calling <CODE>readline()</CODE>. +</DL> +</P><P> + +<A NAME="IDX202"></A> +<DL> +<DT><U>Variable:</U> char * <B>rl_display_prompt</B> +<DD>The string displayed as the prompt. This is usually identical to +<VAR>rl_prompt</VAR>, but may be changed temporarily by functions that +use the prompt string as a message area, such as incremental search. +</DL> +</P><P> + +<A NAME="IDX203"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_already_prompted</B> +<DD>If an application wishes to display the prompt itself, rather than have +Readline do it the first time <CODE>readline()</CODE> is called, it should set +this variable to a non-zero value after displaying the prompt. +The prompt must also be passed as the argument to <CODE>readline()</CODE> so +the redisplay functions can update the display properly. +The calling application is responsible for managing the value; Readline +never sets it. +</DL> +</P><P> + +<A NAME="IDX204"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_library_version</B> +<DD>The version number of this revision of the library. +</DL> +</P><P> + +<A NAME="IDX205"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_readline_version</B> +<DD>An integer encoding the current version of the library. The encoding is +of the form 0x<VAR>MMmm</VAR>, where <VAR>MM</VAR> is the two-digit major version +number, and <VAR>mm</VAR> is the two-digit minor version number. +For example, for Readline-4.2, <CODE>rl_readline_version</CODE> would have the +value 0x0402. +</DL> +</P><P> + +<A NAME="IDX206"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_gnu_readline_p</B> +<DD>Always set to 1, denoting that this is GNU readline rather than some +emulation. +</DL> +</P><P> + +<A NAME="IDX207"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_terminal_name</B> +<DD>The terminal type, used for initialization. If not set by the application, +Readline sets this to the value of the <CODE>TERM</CODE> environment variable +the first time it is called. +</DL> +</P><P> + +<A NAME="IDX208"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_readline_name</B> +<DD>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">1.3.2 Conditional Init Constructs</A>). +</DL> +</P><P> + +<A NAME="IDX209"></A> +<DL> +<DT><U>Variable:</U> FILE * <B>rl_instream</B> +<DD>The stdio stream from which Readline reads input. +If <CODE>NULL</CODE>, Readline defaults to <VAR>stdin</VAR>. +</DL> +</P><P> + +<A NAME="IDX210"></A> +<DL> +<DT><U>Variable:</U> FILE * <B>rl_outstream</B> +<DD>The stdio stream to which Readline performs output. +If <CODE>NULL</CODE>, Readline defaults to <VAR>stdout</VAR>. +</DL> +</P><P> + +<A NAME="IDX211"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_prefer_env_winsize</B> +<DD>If non-zero, Readline gives values found in the <CODE>LINES</CODE> and +<CODE>COLUMNS</CODE> environment variables greater precedence than values fetched +from the kernel when computing the screen dimensions. +</DL> +</P><P> + +<A NAME="IDX212"></A> +<DL> +<DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B> +<DD>The address of the last command function Readline executed. May be used to +test whether or not a function is being executed twice in succession, for +example. +</DL> +</P><P> + +<A NAME="IDX213"></A> +<DL> +<DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B> +<DD>If non-zero, this is the address of a function to call just +before <CODE>readline</CODE> prints the first prompt. +</DL> +</P><P> + +<A NAME="IDX214"></A> +<DL> +<DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B> +<DD>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> + +<A NAME="IDX215"></A> +<DL> +<DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B> +<DD>If non-zero, this is the address of a function to call periodically +when Readline is waiting for terminal input. +By default, this will be called at most ten times a second if there +is no keyboard input. +</DL> +</P><P> + +<A NAME="IDX216"></A> +<DL> +<DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B> +<DD>If non-zero, Readline 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 Readline character input function +(see section <A HREF="readline.html#SEC37">2.4.8 Character Input</A>). +</DL> +</P><P> + +<A NAME="IDX217"></A> +<DL> +<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B> +<DD>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 <CODE>rl_redisplay</CODE>, the default Readline +redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>). +</DL> +</P><P> + +<A NAME="IDX218"></A> +<DL> +<DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B> +<DD>If non-zero, Readline will call indirectly through this pointer +to initialize the terminal. The function takes a single argument, an +<CODE>int</CODE> flag that says whether or not to use eight-bit characters. +By default, this is set to <CODE>rl_prep_terminal</CODE> +(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>). +</DL> +</P><P> + +<A NAME="IDX219"></A> +<DL> +<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B> +<DD>If non-zero, Readline will call indirectly through this pointer +to reset the terminal. This function should undo the effects of +<CODE>rl_prep_term_function</CODE>. +By default, this is set to <CODE>rl_deprep_terminal</CODE> +(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>). +</DL> +</P><P> + +<A NAME="IDX220"></A> +<DL> +<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> +<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the +currently executing readline function was found. +</DL> +</P><P> + +<A NAME="IDX221"></A> +<DL> +<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B> +<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the +last key binding occurred. +</DL> +</P><P> + +<A NAME="IDX222"></A> +<DL> +<DT><U>Variable:</U> char * <B>rl_executing_macro</B> +<DD>This variable is set to the text of any currently-executing macro. +</DL> +</P><P> + +<A NAME="IDX223"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_readline_state</B> +<DD>A variable with bit values that encapsulate the current Readline state. +A bit is set with the <CODE>RL_SETSTATE</CODE> macro, and unset with the +<CODE>RL_UNSETSTATE</CODE> macro. Use the <CODE>RL_ISSTATE</CODE> macro to test +whether a particular state bit is set. Current state bits include: +</P><P> + +<DL COMPACT> +<DT><CODE>RL_STATE_NONE</CODE> +<DD>Readline has not yet been called, nor has it begun to intialize. +<DT><CODE>RL_STATE_INITIALIZING</CODE> +<DD>Readline is initializing its internal data structures. +<DT><CODE>RL_STATE_INITIALIZED</CODE> +<DD>Readline has completed its initialization. +<DT><CODE>RL_STATE_TERMPREPPED</CODE> +<DD>Readline has modified the terminal modes to do its own input and redisplay. +<DT><CODE>RL_STATE_READCMD</CODE> +<DD>Readline is reading a command from the keyboard. +<DT><CODE>RL_STATE_METANEXT</CODE> +<DD>Readline is reading more input after reading the meta-prefix character. +<DT><CODE>RL_STATE_DISPATCHING</CODE> +<DD>Readline is dispatching to a command. +<DT><CODE>RL_STATE_MOREINPUT</CODE> +<DD>Readline is reading more input while executing an editing command. +<DT><CODE>RL_STATE_ISEARCH</CODE> +<DD>Readline is performing an incremental history search. +<DT><CODE>RL_STATE_NSEARCH</CODE> +<DD>Readline is performing a non-incremental history search. +<DT><CODE>RL_STATE_SEARCH</CODE> +<DD>Readline is searching backward or forward through the history for a string. +<DT><CODE>RL_STATE_NUMERICARG</CODE> +<DD>Readline is reading a numeric argument. +<DT><CODE>RL_STATE_MACROINPUT</CODE> +<DD>Readline is currently getting its input from a previously-defined keyboard +macro. +<DT><CODE>RL_STATE_MACRODEF</CODE> +<DD>Readline is currently reading characters defining a keyboard macro. +<DT><CODE>RL_STATE_OVERWRITE</CODE> +<DD>Readline is in overwrite mode. +<DT><CODE>RL_STATE_COMPLETING</CODE> +<DD>Readline is performing word completion. +<DT><CODE>RL_STATE_SIGHANDLER</CODE> +<DD>Readline is currently executing the readline signal handler. +<DT><CODE>RL_STATE_UNDOING</CODE> +<DD>Readline is performing an undo. +<DT><CODE>RL_STATE_INPUTPENDING</CODE> +<DD>Readline has input pending due to a call to <CODE>rl_execute_next()</CODE>. +<DT><CODE>RL_STATE_TTYCSAVED</CODE> +<DD>Readline has saved the values of the terminal's special characters. +<DT><CODE>RL_STATE_CALLBACK</CODE> +<DD>Readline is currently using the alternate (callback) interface +(see section <A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A>). +<DT><CODE>RL_STATE_VIMOTION</CODE> +<DD>Readline is reading the argument to a vi-mode "motion" command. +<DT><CODE>RL_STATE_MULTIKEY</CODE> +<DD>Readline is reading a multiple-keystroke command. +<DT><CODE>RL_STATE_VICMDONCE</CODE> +<DD>Readline has entered vi command (movement) mode at least one time during +the current call to <CODE>readline()</CODE>. +<DT><CODE>RL_STATE_DONE</CODE> +<DD>Readline has read a key sequence bound to <CODE>accept-line</CODE> +and is about to return the line to the caller. +</DL> +<P> + +</DL> +</P><P> + +<A NAME="IDX224"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_explicit_arg</B> +<DD>Set to a non-zero value if an explicit numeric argument was specified by +the user. Only valid in a bindable command function. +</DL> +</P><P> + +<A NAME="IDX225"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_numeric_arg</B> +<DD>Set to the value of any numeric argument explicitly specified by the user +before executing the current Readline function. Only valid in a bindable +command function. +</DL> +</P><P> + +<A NAME="IDX226"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_editing_mode</B> +<DD>Set to a value denoting Readline's current editing mode. A value of +<VAR>1</VAR> means Readline is currently in emacs mode; <VAR>0</VAR> +means that vi mode is active. +</DL> +</P><P> + +<A NAME="Readline Convenience Functions"></A> +<HR SIZE="6"> +<A NAME="SEC29"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.4 Readline Convenience Functions </H2> +<!--docid::SEC29::--> +<P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to give a function you write a name.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Making keymaps.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Changing Keymaps.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Translate function names to + key sequences.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to make your functions undoable.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to control line display.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to modify <CODE>rl_line_buffer</CODE>.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to read keyboard input.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to manage terminal settings.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Generally useful functions and hooks.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that don't fall into any category.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Using Readline in a `callback' fashion.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC42">2.4.13 A Readline Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example Readline function.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Function Naming"></A> +<HR SIZE="6"> +<A NAME="SEC30"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.1 Naming a Function </H3> +<!--docid::SEC30::--> +<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><P> + +<TABLE><tr><td> </td><td class=example><pre>Meta-Rubout: backward-kill-word +</pre></td></tr></table></P><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> + +<A NAME="IDX227"></A> +<DL> +<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I> +<DD>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><P> + +<A NAME="Keymaps"></A> +<HR SIZE="6"> +<A NAME="SEC31"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.2 Selecting a Keymap </H3> +<!--docid::SEC31::--> +<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> + +<A NAME="IDX228"></A> +<DL> +<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I> +<DD>Returns a new, empty keymap. The space for the keymap is allocated with +<CODE>malloc()</CODE>; the caller should free it by calling +<CODE>rl_free_keymap()</CODE> when done. +</DL> +</P><P> + +<A NAME="IDX229"></A> +<DL> +<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I> +<DD>Return a new keymap which is a copy of <VAR>map</VAR>. +</DL> +</P><P> + +<A NAME="IDX230"></A> +<DL> +<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX231"></A> +<DL> +<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I> +<DD>Free the storage associated with the data in <VAR>keymap</VAR>. +The caller should free <VAR>keymap</VAR>. +</DL> +</P><P> + +<A NAME="IDX232"></A> +<DL> +<DT><U>Function:</U> void <B>rl_free_keymap</B> <I>(Keymap keymap)</I> +<DD>Free all storage associated with <VAR>keymap</VAR>. This calls +<CODE>rl_discard_keymap</CODE> to free subordindate keymaps and macros. +</DL> +</P><P> + +Readline has several internal keymaps. These functions allow you to +change which keymap is active. +</P><P> + +<A NAME="IDX233"></A> +<DL> +<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I> +<DD>Returns the currently active keymap. +</DL> +</P><P> + +<A NAME="IDX234"></A> +<DL> +<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I> +<DD>Makes <VAR>keymap</VAR> the currently active keymap. +</DL> +</P><P> + +<A NAME="IDX235"></A> +<DL> +<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I> +<DD>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">1.3 Readline Init File</A>). +</DL> +</P><P> + +<A NAME="IDX236"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> +<DD>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">1.3 Readline Init File</A>). +</DL> +</P><P> + +<A NAME="Binding Keys"></A> +<HR SIZE="6"> +<A NAME="SEC32"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.3 Binding Keys </H3> +<!--docid::SEC32::--> +<P> + +Key sequences are associate 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> + +Since <CODE>readline()</CODE> installs a set of default key bindings the first +time it is called, there is always the danger that a custom binding +installed before the first call to <CODE>readline()</CODE> will be overridden. +An alternate mechanism is to install custom key bindings in an +initialization function assigned to the <CODE>rl_startup_hook</CODE> variable +(see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>). +</P><P> + +These functions manage key bindings. +</P><P> + +<A NAME="IDX237"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I> +<DD>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> + +<A NAME="IDX238"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I> +<DD>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> + +<A NAME="IDX239"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_key_if_unbound</B> <I>(int key, rl_command_func_t *function)</I> +<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in the +currently active keymap. +Returns non-zero in the case of an invalid <VAR>key</VAR> or if <VAR>key</VAR> is +already bound. +</DL> +</P><P> + +<A NAME="IDX240"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_key_if_unbound_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I> +<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>. +Returns non-zero in the case of an invalid <VAR>key</VAR> or if <VAR>key</VAR> is +already bound. +</DL> +</P><P> + +<A NAME="IDX241"></A> +<DL> +<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I> +<DD>Bind <VAR>key</VAR> to the null function in the currently active keymap. +Returns non-zero in case of error. +</DL> +</P><P> + +<A NAME="IDX242"></A> +<DL> +<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I> +<DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>. +Returns non-zero in case of error. +</DL> +</P><P> + +<A NAME="IDX243"></A> +<DL> +<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> +<DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>. +</DL> +</P><P> + +<A NAME="IDX244"></A> +<DL> +<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I> +<DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>. +</DL> +</P><P> + +<A NAME="IDX245"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_keyseq</B> <I>(const char *keyseq, rl_command_func_t *function)</I> +<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function +<VAR>function</VAR>, beginning in the current keymap. +This makes new keymaps as necessary. +The return value is non-zero if <VAR>keyseq</VAR> is invalid. +</DL> +</P><P> + +<A NAME="IDX246"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_keyseq_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> +<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function +<VAR>function</VAR>. This makes new keymaps as necessary. +Initial bindings are performed in <VAR>map</VAR>. +The return value is non-zero if <VAR>keyseq</VAR> is invalid. +</DL> +</P><P> + +<A NAME="IDX247"></A> +<DL> +<DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> +<DD>Equivalent to <CODE>rl_bind_keyseq_in_map</CODE>. +</DL> +</P><P> + +<A NAME="IDX248"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound</B> <I>(const char *keyseq, rl_command_func_t *function)</I> +<DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in the +currently active keymap. +Returns non-zero in the case of an invalid <VAR>keyseq</VAR> or if <VAR>keyseq</VAR> is +already bound. +</DL> +</P><P> + +<A NAME="IDX249"></A> +<DL> +<DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> +<DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>. +Returns non-zero in the case of an invalid <VAR>keyseq</VAR> or if <VAR>keyseq</VAR> is +already bound. +</DL> +</P><P> + +<A NAME="IDX250"></A> +<DL> +<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I> +<DD>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> + +<A NAME="IDX251"></A> +<DL> +<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I> +<DD>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">1.3 Readline Init File</A>). +</DL> +</P><P> + +<A NAME="IDX252"></A> +<DL> +<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I> +<DD>Read keybindings and variable assignments from <VAR>filename</VAR> +(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). +</DL> +</P><P> + +<A NAME="Associating Function Names and Bindings"></A> +<HR SIZE="6"> +<A NAME="SEC33"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.4 Associating Function Names and Bindings </H3> +<!--docid::SEC33::--> +<P> + +These functions allow you to find out what keys invoke named functions +and the functions invoked by a particular key sequence. You may also +associate a new function name with an arbitrary function. +</P><P> + +<A NAME="IDX253"></A> +<DL> +<DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I> +<DD>Return the function with name <VAR>name</VAR>. +</DL> +</P><P> + +<A NAME="IDX254"></A> +<DL> +<DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I> +<DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>. +If <VAR>map</VAR> is <CODE>NULL</CODE>, the current keymap is used. If <VAR>type</VAR> is +not <CODE>NULL</CODE>, the type of the object is returned in the <CODE>int</CODE> variable +it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>). +</DL> +</P><P> + +<A NAME="IDX255"></A> +<DL> +<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I> +<DD>Return an array of strings representing the key sequences used to +invoke <VAR>function</VAR> in the current keymap. +</DL> +</P><P> + +<A NAME="IDX256"></A> +<DL> +<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> +<DD>Return an array of strings representing the key sequences used to +invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>. +</DL> +</P><P> + +<A NAME="IDX257"></A> +<DL> +<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I> +<DD>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> + +<A NAME="IDX258"></A> +<DL> +<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I> +<DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. +</DL> +</P><P> + +<A NAME="IDX259"></A> +<DL> +<DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I> +<DD>Return a NULL terminated array of known function names. The array is +sorted. The array itself is allocated, but not the strings inside. You +should free the array, but not the pointers, using <CODE>free</CODE> or +<CODE>rl_free</CODE> when you are done. +</DL> +</P><P> + +<A NAME="IDX260"></A> +<DL> +<DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I> +<DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make +<VAR>function</VAR> the function to be called when <VAR>name</VAR> is invoked. +</DL> +</P><P> + +<A NAME="Allowing Undoing"></A> +<HR SIZE="6"> +<A NAME="SEC34"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.5 Allowing Undoing </H3> +<!--docid::SEC34::--> +<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. +</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><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; +</FONT></pre></td></tr></table></P><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 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> + +<A NAME="IDX261"></A> +<DL> +<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX262"></A> +<DL> +<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX263"></A> +<DL> +<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I> +<DD>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> + +<A NAME="IDX264"></A> +<DL> +<DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I> +<DD>Free the existing undo list. +</DL> +</P><P> + +<A NAME="IDX265"></A> +<DL> +<DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX266"></A> +<DL> +<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I> +<DD>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><P> + +<A NAME="Redisplay"></A> +<HR SIZE="6"> +<A NAME="SEC35"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.6 Redisplay </H3> +<!--docid::SEC35::--> +<P> + +<A NAME="IDX267"></A> +<DL> +<DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I> +<DD>Change what's displayed on the screen to reflect the current contents +of <CODE>rl_line_buffer</CODE>. +</DL> +</P><P> + +<A NAME="IDX268"></A> +<DL> +<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I> +<DD>Force the line to be updated and redisplayed, whether or not +Readline thinks the screen display is correct. +</DL> +</P><P> + +<A NAME="IDX269"></A> +<DL> +<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I> +<DD>Tell the update functions that we have moved onto a new (empty) line, +usually after ouputting a newline. +</DL> +</P><P> + +<A NAME="IDX270"></A> +<DL> +<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I> +<DD>Tell the update functions that we have moved onto a new line, with +<VAR>rl_prompt</VAR> already displayed. +This could be used by applications that want to output the prompt string +themselves, but still need Readline to know the prompt string length for +redisplay. +It should be used after setting <VAR>rl_already_prompted</VAR>. +</DL> +</P><P> + +<A NAME="IDX271"></A> +<DL> +<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I> +<DD>Reset the display state to a clean state and redisplay the current line +starting on a new line. +</DL> +</P><P> + +<A NAME="IDX272"></A> +<DL> +<DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I> +<DD>Move the cursor to the start of the next screen line. +</DL> +</P><P> + +<A NAME="IDX273"></A> +<DL> +<DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I> +<DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>. +If Readline has not been set to display meta characters directly, this +will convert meta characters to a meta-prefixed key sequence. +This is intended for use by applications which wish to do their own +redisplay. +</DL> +</P><P> + +<A NAME="IDX274"></A> +<DL> +<DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I> +<DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>, +possibly containing conversion specifications such as <SAMP>`%d'</SAMP>, and +any additional arguments necessary to satisfy the conversion specifications. +The resulting string is displayed in the <EM>echo area</EM>. The echo area +is also used to display numeric arguments and search strings. +You should call <CODE>rl_save_prompt</CODE> to save the prompt information +before calling this function. +</DL> +</P><P> + +<A NAME="IDX275"></A> +<DL> +<DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I> +<DD>Clear the message in the echo area. If the prompt was saved with a call to +<CODE>rl_save_prompt</CODE> before the last call to <CODE>rl_message</CODE>, +call <CODE>rl_restore_prompt</CODE> before calling this function. +</DL> +</P><P> + +<A NAME="IDX276"></A> +<DL> +<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX277"></A> +<DL> +<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I> +<DD>Restore the local Readline prompt display state saved by the most +recent call to <CODE>rl_save_prompt</CODE>. +if <CODE>rl_save_prompt</CODE> was called to save the prompt before a call +to <CODE>rl_message</CODE>, this function should be called before the +corresponding call to <CODE>rl_clear_message</CODE>. +</DL> +</P><P> + +<A NAME="IDX278"></A> +<DL> +<DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I> +<DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the +local Readline prompt redisplay variables. +This function is called by <CODE>readline()</CODE>. It may also be called to +expand the primary prompt if the <CODE>rl_on_new_line_with_prompt()</CODE> +function or <CODE>rl_already_prompted</CODE> variable is used. +It returns the number of visible characters on the last line of the +(possibly multi-line) prompt. +Applications may indicate that the prompt contains characters that take +up no physical screen space when displayed by bracketing a sequence of +such characters with the special markers <CODE>RL_PROMPT_START_IGNORE</CODE> +and <CODE>RL_PROMPT_END_IGNORE</CODE> (declared in <TT>`readline.h'</TT>. This may +be used to embed terminal-specific escape sequences in prompts. +</DL> +</P><P> + +<A NAME="IDX279"></A> +<DL> +<DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I> +<DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls +<CODE>rl_expand_prompt()</CODE> to expand the prompt and sets <CODE>rl_prompt</CODE> +to the result. +</DL> +</P><P> + +<A NAME="Modifying Text"></A> +<HR SIZE="6"> +<A NAME="SEC36"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.7 Modifying Text </H3> +<!--docid::SEC36::--> +<P> + +<A NAME="IDX280"></A> +<DL> +<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I> +<DD>Insert <VAR>text</VAR> into the line at the current cursor position. +Returns the number of characters inserted. +</DL> +</P><P> + +<A NAME="IDX281"></A> +<DL> +<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I> +<DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line. +Returns the number of characters deleted. +</DL> +</P><P> + +<A NAME="IDX282"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I> +<DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in +the current line. +</DL> +</P><P> + +<A NAME="IDX283"></A> +<DL> +<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I> +<DD>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><P> + +<A NAME="IDX284"></A> +<DL> +<DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I> +<DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked +by a key bound to a macro. Not especially useful; use +<CODE>rl_insert_text()</CODE> instead. +</DL> +</P><P> + +<A NAME="Character Input"></A> +<HR SIZE="6"> +<A NAME="SEC37"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.8 Character Input </H3> +<!--docid::SEC37::--> +<P> + +<A NAME="IDX285"></A> +<DL> +<DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I> +<DD>Return the next character available from Readline's current input stream. +This handles input inserted into +the input stream via <VAR>rl_pending_input</VAR> (see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>) +and <CODE>rl_stuff_char()</CODE>, macros, and characters read from the keyboard. +While waiting for input, this function will call any function assigned to +the <CODE>rl_event_hook</CODE> variable. +</DL> +</P><P> + +<A NAME="IDX286"></A> +<DL> +<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I> +<DD>Return the next character available from <VAR>stream</VAR>, which is assumed to +be the keyboard. +</DL> +</P><P> + +<A NAME="IDX287"></A> +<DL> +<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I> +<DD>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>. Up to 512 characters may be pushed back. +<CODE>rl_stuff_char</CODE> returns 1 if the character was successfully inserted; +0 otherwise. +</DL> +</P><P> + +<A NAME="IDX288"></A> +<DL> +<DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I> +<DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE> +is called. This sets <VAR>rl_pending_input</VAR>. +</DL> +</P><P> + +<A NAME="IDX289"></A> +<DL> +<DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I> +<DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any +previous call to <CODE>rl_execute_next()</CODE>. This works only if the +pending input has not already been read with <CODE>rl_read_key()</CODE>. +</DL> +</P><P> + +<A NAME="IDX290"></A> +<DL> +<DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I> +<DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will +wait for <VAR>u</VAR> microseconds for input before calling any function +assigned to <CODE>rl_event_hook</CODE>. <VAR>u</VAR> must be greater than or equal +to zero (a zero-length timeout is equivalent to a poll). +The default waiting period is one-tenth of a second. +Returns the old timeout value. +</DL> +</P><P> + +<A NAME="Terminal Management"></A> +<HR SIZE="6"> +<A NAME="SEC38"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.9 Terminal Management </H3> +<!--docid::SEC38::--> +<P> + +<A NAME="IDX291"></A> +<DL> +<DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I> +<DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE> +can read a single character at a time from the keyboard. +The <VAR>meta_flag</VAR> argument should be non-zero if Readline should +read eight-bit input. +</DL> +</P><P> + +<A NAME="IDX292"></A> +<DL> +<DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I> +<DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in +the state in which it was before the most recent call to +<CODE>rl_prep_terminal()</CODE>. +</DL> +</P><P> + +<A NAME="IDX293"></A> +<DL> +<DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I> +<DD>Read the operating system's terminal editing characters (as would be +displayed by <CODE>stty</CODE>) to their Readline equivalents. +The bindings are performed in <VAR>kmap</VAR>. +</DL> +</P><P> + +<A NAME="IDX294"></A> +<DL> +<DT><U>Function:</U> void <B>rl_tty_unset_default_bindings</B> <I>(Keymap kmap)</I> +<DD>Reset the bindings manipulated by <CODE>rl_tty_set_default_bindings</CODE> so +that the terminal editing characters are bound to <CODE>rl_insert</CODE>. +The bindings are performed in <VAR>kmap</VAR>. +</DL> +</P><P> + +<A NAME="IDX295"></A> +<DL> +<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I> +<DD>Reinitialize Readline's idea of the terminal settings using +<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>). +If <VAR>terminal_name</VAR> is <CODE>NULL</CODE>, the value of the <CODE>TERM</CODE> +environment variable is used. +</DL> +</P><P> + +<A NAME="Utility Functions"></A> +<HR SIZE="6"> +<A NAME="SEC39"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.10 Utility Functions </H3> +<!--docid::SEC39::--> +<P> + +<A NAME="IDX296"></A> +<DL> +<DT><U>Function:</U> int <B>rl_save_state</B> <I>(struct readline_state *sp)</I> +<DD>Save a snapshot of Readline's internal state to <VAR>sp</VAR>. +The contents of the <VAR>readline_state</VAR> structure are documented +in <TT>`readline.h'</TT>. +The caller is responsible for allocating the structure. +</DL> +</P><P> + +<A NAME="IDX297"></A> +<DL> +<DT><U>Function:</U> int <B>rl_restore_state</B> <I>(struct readline_state *sp)</I> +<DD>Restore Readline's internal state to that stored in <VAR>sp</VAR>, which must +have been saved by a call to <CODE>rl_save_state</CODE>. +The contents of the <VAR>readline_state</VAR> structure are documented +in <TT>`readline.h'</TT>. +The caller is responsible for freeing the structure. +</DL> +</P><P> + +<A NAME="IDX298"></A> +<DL> +<DT><U>Function:</U> void <B>rl_free</B> <I>(void *mem)</I> +<DD>Deallocate the memory pointed to by <VAR>mem</VAR>. <VAR>mem</VAR> must have been +allocated by <CODE>malloc</CODE>. +</DL> +</P><P> + +<A NAME="IDX299"></A> +<DL> +<DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I> +<DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>. +The point and mark are preserved, if possible. +If <VAR>clear_undo</VAR> is non-zero, the undo list associated with the +current line is cleared. +</DL> +</P><P> + +<A NAME="IDX300"></A> +<DL> +<DT><U>Function:</U> void <B>rl_extend_line_buffer</B> <I>(int len)</I> +<DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR> +characters, possibly reallocating it if necessary. +</DL> +</P><P> + +<A NAME="IDX301"></A> +<DL> +<DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I> +<DD>Initialize or re-initialize Readline's internal state. +It's not strictly necessary to call this; <CODE>readline()</CODE> calls it before +reading any input. +</DL> +</P><P> + +<A NAME="IDX302"></A> +<DL> +<DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I> +<DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. +</DL> +</P><P> + +<A NAME="IDX303"></A> +<DL> +<DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I> +<DD>Return 1 if <VAR>c</VAR> is an alphabetic character. +</DL> +</P><P> + +<A NAME="IDX304"></A> +<DL> +<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I> +<DD>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">1.3.1 Readline Init File Syntax</A>). +When displaying completions, this function sets the number of columns used +for display to the value of <CODE>completion-display-width</CODE>, the value of +the environment variable <CODE>COLUMNS</CODE>, or the screen width, in that order. +</DL> +</P><P> + +The following are implemented as macros, defined in <CODE>chardefs.h</CODE>. +Applications should refrain from using them. +</P><P> + +<A NAME="IDX305"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I> +<DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character. +</DL> +</P><P> + +<A NAME="IDX306"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I> +<DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character. +</DL> +</P><P> + +<A NAME="IDX307"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I> +<DD>Return 1 if <VAR>c</VAR> is a numeric character. +</DL> +</P><P> + +<A NAME="IDX308"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I> +<DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding +uppercase character. +</DL> +</P><P> + +<A NAME="IDX309"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I> +<DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding +lowercase character. +</DL> +</P><P> + +<A NAME="IDX310"></A> +<DL> +<DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I> +<DD>If <VAR>c</VAR> is a number, return the value it represents. +</DL> +</P><P> + +<A NAME="Miscellaneous Functions"></A> +<HR SIZE="6"> +<A NAME="SEC40"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.11 Miscellaneous Functions </H3> +<!--docid::SEC40::--> +<P> + +<A NAME="IDX311"></A> +<DL> +<DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I> +<DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>. +The binding is performed in <VAR>map</VAR>. When <VAR>keyseq</VAR> is invoked, the +<VAR>macro</VAR> will be inserted into the line. This function is deprecated; +use <CODE>rl_generic_bind()</CODE> instead. +</DL> +</P><P> + +<A NAME="IDX312"></A> +<DL> +<DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I> +<DD>Print the key sequences bound to macros and their values, using +the current keymap, 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> + +<A NAME="IDX313"></A> +<DL> +<DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I> +<DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>. +This behaves as if the readline command +<SAMP>`set <VAR>variable</VAR> <VAR>value</VAR>'</SAMP> had been executed in an <CODE>inputrc</CODE> +file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>). +</DL> +</P><P> + +<A NAME="IDX314"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_variable_value</B> <I>(const char *variable)</I> +<DD>Return a string representing the value of the Readline variable <VAR>variable</VAR>. +For boolean variables, this string is either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. +</DL> +</P><P> + +<A NAME="IDX315"></A> +<DL> +<DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I> +<DD>Print the readline variable names and their current values +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> + +<A NAME="IDX316"></A> +<DL> +<DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I> +<DD>Set the time interval (in microseconds) that Readline waits when showing +a balancing character when <CODE>blink-matching-paren</CODE> has been enabled. +</DL> +</P><P> + +<A NAME="IDX317"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I> +<DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>. +Readline fetches the termcap entry for the current terminal name and +uses those capabilities to move around the screen line and perform other +terminal-specific operations, like erasing a line. Readline does not +use all of a terminal's capabilities, and this function will return +values for only those capabilities Readline uses. +</DL> +</P><P> + +<A NAME="Alternate Interface"></A> +<HR SIZE="6"> +<A NAME="SEC41"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.12 Alternate Interface </H3> +<!--docid::SEC41::--> +<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> + +<A NAME="IDX318"></A> +<DL> +<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I> +<DD>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 function to call when a complete line of input has been entered. +The function takes the text of the line as an argument. +</DL> +</P><P> + +<A NAME="IDX319"></A> +<DL> +<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I> +<DD>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. +Before calling the <VAR>lhandler</VAR> function, the terminal settings are +reset to the values they had before calling +<CODE>rl_callback_handler_install</CODE>. +If the <VAR>lhandler</VAR> function returns, +the terminal settings are modified for Readline's use again. +<CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a +<CODE>NULL</CODE> line. +</DL> +</P><P> + +<A NAME="IDX320"></A> +<DL> +<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I> +<DD>Restore the terminal to its initial state and remove the line handler. +This may be called from within a callback as well as independently. +If the <VAR>lhandler</VAR> installed by <CODE>rl_callback_handler_install</CODE> +does not exit the program, either this function or the function referred +to by the value of <CODE>rl_deprep_term_function</CODE> should be called before +the program exits to reset the terminal settings. +</DL> +</P><P> + +<A NAME="A Readline Example"></A> +<HR SIZE="6"> +<A NAME="SEC42"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.4.13 A Readline Example </H3> +<!--docid::SEC42::--> +<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><P> + +<TABLE><tr><td> </td><td class=example><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 >= 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 (_rl_uppercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); + else if (_rl_lowercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_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></td></tr></table></P><P> + +<A NAME="Readline Signal Handling"></A> +<HR SIZE="6"> +<A NAME="SEC43"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.5 Readline Signal Handling </H2> +<!--docid::SEC43::--> +<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 such a signal is received in order 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> below). +</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 information, 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> + +<A NAME="IDX321"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_catch_signals</B> +<DD>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> + +<A NAME="IDX322"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B> +<DD>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> + +<A NAME="IDX323"></A> +<DL> +<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX324"></A> +<DL> +<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX325"></A> +<DL> +<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I> +<DD>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> or <CODE>rl_set_screen_size()</CODE> to force +Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE> +is received. +</P><P> + +<A NAME="IDX326"></A> +<DL> +<DT><U>Function:</U> void <B>rl_echo_signal_char</B> <I>(int sig)</I> +<DD>If an application wishes to install its own signal handlers, but still +have readline display characters that generate signals, calling this +function with <VAR>sig</VAR> set to <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, or +<CODE>SIGTSTP</CODE> will display the character generating that signal. +</DL> +</P><P> + +<A NAME="IDX327"></A> +<DL> +<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I> +<DD>Update Readline's internal screen size by reading values from the kernel. +</DL> +</P><P> + +<A NAME="IDX328"></A> +<DL> +<DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I> +<DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and +<VAR>cols</VAR> columns. If either <VAR>rows</VAR> or <VAR>columns</VAR> is less than +or equal to 0, Readline's idea of that terminal dimension is unchanged. +</DL> +</P><P> + +If an application does not want to install a <CODE>SIGWINCH</CODE> handler, but +is still interested in the screen dimensions, Readline's idea of the screen +size may be queried. +</P><P> + +<A NAME="IDX329"></A> +<DL> +<DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I> +<DD>Return Readline's idea of the terminal's size in the +variables pointed to by the arguments. +</DL> +</P><P> + +<A NAME="IDX330"></A> +<DL> +<DT><U>Function:</U> void <B>rl_reset_screen_size</B> <I>(void)</I> +<DD>Cause Readline to reobtain the screen size and recalculate its dimensions. +</DL> +</P><P> + +The following functions install and remove Readline's signal handlers. +</P><P> + +<A NAME="IDX331"></A> +<DL> +<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I> +<DD>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> + +<A NAME="IDX332"></A> +<DL> +<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I> +<DD>Remove all of the Readline signal handlers installed by +<CODE>rl_set_signals()</CODE>. +</DL> +</P><P> + +<A NAME="Custom Completers"></A> +<HR SIZE="6"> +<A NAME="SEC44"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 2.6 Custom Completers </H2> +<!--docid::SEC44::--> +<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><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The logic used to do completion.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions provided by Readline.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables which control completion.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example of writing completer subroutines.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="How Completing Works"></A> +<HR SIZE="6"> +<A NAME="SEC45"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.6.1 How Completing Works </H3> +<!--docid::SEC45::--> +<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><P> + +<OL> +<LI> +The user-interface function <CODE>rl_complete()</CODE>. This function is +called with the same arguments as other bindable Readline functions: +<VAR>count</VAR> and <VAR>invoking_key</VAR>. +It isolates the word to be completed and calls +<CODE>rl_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. +<P> + +<LI> +The internal function <CODE>rl_completion_matches()</CODE> uses an +application-supplied <EM>generator</EM> function to generate the list of +possible matches, and then returns the array of these matches. +The caller should place the address of its generator function in +<CODE>rl_completion_entry_function</CODE>. +<P> + +<LI> +The generator function is called repeatedly from +<CODE>rl_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. The generator function returns +<CODE>(char *)NULL</CODE> to inform <CODE>rl_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. +Such a generator function is referred to as an +<EM>application-specific completion function</EM>. +<P> + +</OL> +<P> + +<A NAME="IDX333"></A> +<DL> +<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> +<DD>Complete the word at or before point. You have supplied the function +that does the initial simple matching selection algorithm (see +<CODE>rl_completion_matches()</CODE>). The default is to do filename completion. +</DL> +</P><P> + +<A NAME="IDX334"></A> +<DL> +<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> +<DD>This is a pointer to the generator function for +<CODE>rl_completion_matches()</CODE>. +If the value of <CODE>rl_completion_entry_function</CODE> is +<CODE>NULL</CODE> then the default filename generator +function, <CODE>rl_filename_completion_function()</CODE>, is used. +An <EM>application-specific completion function</EM> is a function whose +address is assigned to <CODE>rl_completion_entry_function</CODE> and whose +return values are used to generate possible completions. +</DL> +</P><P> + +<A NAME="Completion Functions"></A> +<HR SIZE="6"> +<A NAME="SEC46"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.6.2 Completion Functions </H3> +<!--docid::SEC46::--> +<P> + +Here is the complete list of callable completion functions present in +Readline. +</P><P> + +<A NAME="IDX335"></A> +<DL> +<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I> +<DD>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. <SAMP>`@'</SAMP> is similar to <SAMP>`!'</SAMP>, but +possible completions are not listed if the possible completions share +a common prefix. +</DL> +</P><P> + +<A NAME="IDX336"></A> +<DL> +<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> +<DD>Complete the word at or before point. You have supplied the function +that does the initial simple matching selection algorithm (see +<CODE>rl_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> + +<A NAME="IDX337"></A> +<DL> +<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I> +<DD>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> + +<A NAME="IDX338"></A> +<DL> +<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I> +<DD>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> + +<A NAME="IDX339"></A> +<DL> +<DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I> +<DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE> +depending on whether <VAR>cfunc</VAR> was called twice in succession and +the values of the <CODE>show-all-if-ambiguous</CODE> and +<CODE>show-all-if-unmodified</CODE> variables. +Application-specific completion functions may use this function to present +the same interface as <CODE>rl_complete()</CODE>. +</DL> +</P><P> + +<A NAME="IDX340"></A> +<DL> +<DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I> +<DD>Returns an array of strings which is a list of completions for +<VAR>text</VAR>. If there are no completions, returns <CODE>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> + +<A NAME="IDX341"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I> +<DD>A generator function for filename completion in the general case. +<VAR>text</VAR> is a partial filename. +The Bash source is a useful reference for writing application-specific +completion functions (the Bash completion functions call this and other +Readline functions). +</DL> +</P><P> + +<A NAME="IDX342"></A> +<DL> +<DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I> +<DD>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><P> + +<A NAME="Completion Variables"></A> +<HR SIZE="6"> +<A NAME="SEC47"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.6.3 Completion Variables </H3> +<!--docid::SEC47::--> +<P> + +<A NAME="IDX343"></A> +<DL> +<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> +<DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>. +<CODE>NULL</CODE> means to use <CODE>rl_filename_completion_function()</CODE>, +the default filename completer. +</DL> +</P><P> + +<A NAME="IDX344"></A> +<DL> +<DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B> +<DD>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> defining +the boundaries of <VAR>text</VAR>, which is a character string. +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. +If this function sets the <CODE>rl_attempted_completion_over</CODE> +variable to a non-zero value, Readline will not perform its default +completion even if this function returns no matches. +</DL> +</P><P> + +<A NAME="IDX345"></A> +<DL> +<DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B> +<DD>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> + +<A NAME="IDX346"></A> +<DL> +<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B> +<DD>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> + +<A NAME="IDX347"></A> +<DL> +<DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B> +<DD>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> + +<A NAME="IDX348"></A> +<DL> +<DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B> +<DD>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> + +<A NAME="IDX349"></A> +<DL> +<DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B> +<DD>This function, if defined, is allowed to modify the directory portion +of filenames Readline completes. +It could be used to expand symbolic links or shell variables in pathnames. +It is called with the address of a string (the current directory name) as an +argument, and may modify that string. +If the string is replaced with a new string, the old value should be freed. +Any modified directory name should have a trailing slash. +The modified value will be used as part of the completion, replacing +the directory portion of the pathname the user typed. +At the least, even if no other expansion is performed, this function should +remove any quote characters from the directory name, because its result will +be passed directly to <CODE>opendir()</CODE>. +The directory completion hook returns an integer that should be non-zero if +the function modifies its directory argument. +The function should not modify the directory argument if it returns 0. +</DL> +</P><P> + +<A NAME="IDX350"></A> +<DL> +<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_rewrite_hook</B> +<DD>If non-zero, this is the address of a function called when reading +directory entries from the filesystem for completion and comparing +them to the partial word to be completed. The function should +perform any necesary application or system-specific conversion on +the filename, such as converting between character sets or converting +from a filesystem format to a character input format. +The function takes two arguments: <VAR>fname</VAR>, the filename to be converted, +and <VAR>fnlen</VAR>, its length in bytes. +It must either return its first argument (if no conversion takes place) +or the converted filename in newly-allocated memory. The converted +form is used to compare against the word to be completed, and, if it +matches, is added to the list of matches. Readline will free the +allocated string. +</DL> +</P><P> + +<A NAME="IDX351"></A> +<DL> +<DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B> +<DD>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><P> + +<A NAME="IDX352"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B> +<DD>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: +<CODE>" \t\n\"\\'`@$><=;|&{("</CODE>. +</DL> +</P><P> + +<A NAME="IDX353"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B> +<DD>A list of quote characters which can cause a word break. +</DL> +</P><P> + +<A NAME="IDX354"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B> +<DD>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> + +<A NAME="IDX355"></A> +<DL> +<DT><U>Variable:</U> rl_cpvfunc_t * <B>rl_completion_word_break_hook</B> +<DD>If non-zero, this is the address of a function to call when Readline is +deciding where to separate words for word completion. It should return +a character string like <CODE>rl_completer_word_break_characters</CODE> to be +used to perform the current completion. The function may choose to set +<CODE>rl_completer_word_break_characters</CODE> itself. If the function +returns <CODE>NULL</CODE>, <CODE>rl_completer_word_break_characters</CODE> is used. +</DL> +</P><P> + +<A NAME="IDX356"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B> +<DD>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> + +<A NAME="IDX357"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B> +<DD>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> + +<A NAME="IDX358"></A> +<DL> +<DT><U>Variable:</U> const char * <B>rl_special_prefixes</B> +<DD>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> + +<A NAME="IDX359"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_query_items</B> +<DD>Up to this many items will be displayed in response to a +possible-completions call. After that, readline asks the user if she is sure +she wants to see them all. The default value is 100. A negative value +indicates that Readline should never ask the user. +</DL> +</P><P> + +<A NAME="IDX360"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_append_character</B> +<DD>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 application-specific completion functions to +provide the "most sensible word separator character" according to +an application-specific command line syntax specification. +</DL> +</P><P> + +<A NAME="IDX361"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_suppress_append</B> +<DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to +matches at the end of the command line, as described above. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. +</DL> +</P><P> + +<A NAME="IDX362"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_quote_character</B> +<DD>When Readline is completing quoted text, as delimited by one of the +characters in <VAR>rl_completer_quote_characters</VAR>, it sets this variable +to the quoting character found. +This is set before any application-specific completion function is called. +</DL> +</P><P> + +<A NAME="IDX363"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_suppress_quote</B> +<DD>If non-zero, Readline does not append a matching quote character when +performing completion on a quoted string. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. +</DL> +</P><P> + +<A NAME="IDX364"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_found_quote</B> +<DD>When Readline is completing quoted text, it sets this variable +to a non-zero value if the word being completed contains or is delimited +by any quoting characters, including backslashes. +This is set before any application-specific completion function is called. +</DL> +</P><P> + +<A NAME="IDX365"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B> +<DD>If non-zero, a slash will be appended to completed filenames that are +symbolic links to directory names, subject to the value of the +user-settable <VAR>mark-directories</VAR> variable. +This variable exists so that application-specific completion functions +can override the user's global preference (set via the +<VAR>mark-symlinked-directories</VAR> Readline variable) if appropriate. +This variable is set to the user's preference before any +application-specific completion function is called, so unless that +function modifies the value, the user's preferences are honored. +</DL> +</P><P> + +<A NAME="IDX366"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B> +<DD>If non-zero, then duplicates in the matches are removed. +The default is 1. +</DL> +</P><P> + +<A NAME="IDX367"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B> +<DD>Non-zero means that the results of the matches are to be treated as +filenames. This is <EM>always</EM> zero when completion is attempted, +and can only be changed +within an application-specific completion function. If it is set to a +non-zero value by such a function, directory names have a slash appended +and Readline attempts to quote completed filenames if they contain any +characters in <CODE>rl_filename_quote_characters</CODE> and +<CODE>rl_filename_quoting_desired</CODE> is set to a non-zero value. +</DL> +</P><P> + +<A NAME="IDX368"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B> +<DD>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 +when completion is attempted, and can only be changed within an +application-specific completion function. +The quoting is effected via a call to the function pointed to +by <CODE>rl_filename_quoting_function</CODE>. +</DL> +</P><P> + +<A NAME="IDX369"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_attempted_completion_over</B> +<DD>If an application-specific completion function assigned to +<CODE>rl_attempted_completion_function</CODE> sets this variable to a non-zero +value, Readline will not perform its default filename completion even +if the application's completion function returns no matches. +It should be set only by an application's completion function. +</DL> +</P><P> + +<A NAME="IDX370"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_sort_completion_matches</B> +<DD>If an application sets this variable to 0, Readline will not sort the +list of completions (which implies that it cannot remove any duplicate +completions). The default value is 1, which means that Readline will +sort the completions and, depending on the value of +<CODE>rl_ignore_completion_duplicates</CODE>, will attempt to remove duplicate +matches. +</DL> +</P><P> + +<A NAME="IDX371"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_type</B> +<DD>Set to a character describing the type of completion Readline is currently +attempting; see the description of <CODE>rl_complete_internal()</CODE> +(see section <A HREF="readline.html#SEC46">2.6.2 Completion Functions</A>) for the list of characters. +This is set to the appropriate value before any application-specific +completion function is called, allowing such functions to present +the same interface as <CODE>rl_complete()</CODE>. +</DL> +</P><P> + +<A NAME="IDX372"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_invoking_key</B> +<DD>Set to the final character in the key sequence that invoked one of the +completion functions that call <CODE>rl_complete_internal()</CODE>. This is +set to the appropriate value before any application-specific completion +function is called. +</DL> +</P><P> + +<A NAME="IDX373"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_inhibit_completion</B> +<DD>If this variable is non-zero, completion is inhibited. The completion +character will be inserted as any other bound to <CODE>self-insert</CODE>. +</DL> +</P><P> + +<A NAME="A Short Completion Example"></A> +<HR SIZE="6"> +<A NAME="SEC48"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 2.6.4 A Short Completion Example </H3> +<!--docid::SEC48::--> +<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><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> +#ifdef HAVE_SYS_FILE_H +# include <sys/file.h> +#endif +#include <sys/stat.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include <fcntl.h> +#include <stdio.h> +#include <errno.h> + +#if defined (HAVE_STRING_H) +# include <string.h> +#else /* !HAVE_STRING_H */ +# include <strings.h> +#endif /* !HAVE_STRING_H */ + +#ifdef HAVE_STDLIB_H +# include <stdlib.h> +#endif + +#include <time.h> + +#include <readline/readline.h> +#include <readline/history.h> + +extern char *xmalloc PARAMS((size_t)); + +/* The names of functions that actually do the manipulation. */ +int com_list PARAMS((char *)); +int com_view PARAMS((char *)); +int com_rename PARAMS((char *)); +int com_stat PARAMS((char *)); +int com_pwd PARAMS((char *)); +int com_delete PARAMS((char *)); +int com_help PARAMS((char *)); +int com_cd PARAMS((char *)); +int com_quit PARAMS((char *)); + +/* A structure which contains information on the commands this program + can understand. */ + +typedef struct { + char *name; /* User printable name of the function. */ + rl_icpfunc_t *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, (rl_icpfunc_t *)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) + char *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 PARAMS((const char *, int)); +char **fileman_completion PARAMS((const char *, int, int)); + +/* 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 = 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) + const 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 = rl_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) + const 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; + +#if defined (__MSDOS__) + /* more.com doesn't grok slashes in pathnames */ + sprintf (syscom, "less %s", arg); +#else + sprintf (syscom, "more %s", arg); +#endif + 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 = getcwd (dir, sizeof(dir) - 1); + 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); +} +</FONT></pre></td></tr></table></P><P> + +<A NAME="GNU Free Documentation License"></A> +<HR SIZE="6"> +<A NAME="SEC49"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> A. GNU Free Documentation License </H1> +<!--docid::SEC49::--> +<P> + +<center> + Version 1.3, 3 November 2008 +</center> +</P><P> + +<TABLE><tr><td> </td><td class=display><pre style="font-family: serif">Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +<A HREF="http://fsf.org/">http://fsf.org/</A> + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +</pre></td></tr></table></P><P> + +<OL> +<LI> +PREAMBLE +<P> + +The purpose of this License is to make a manual, textbook, or other +functional and useful document <EM>free</EM> in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +</P><P> + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +</P><P> + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +</P><P> + +<LI> +APPLICABILITY AND DEFINITIONS +<P> + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +</P><P> + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +</P><P> + +A "Secondary Section" is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +</P><P> + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +</P><P> + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +</P><P> + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". +</P><P> + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, <FONT SIZE="-1">SGML</FONT> or <FONT SIZE="-1">XML</FONT> using a publicly available +<FONT SIZE="-1">DTD</FONT>, and standard-conforming simple <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> designed for human modification. Examples +of transparent image formats include <FONT SIZE="-1">PNG</FONT>, <FONT SIZE="-1">XCF</FONT> and +<FONT SIZE="-1">JPG</FONT>. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, <FONT SIZE="-1">SGML</FONT> or +<FONT SIZE="-1">XML</FONT> for which the <FONT SIZE="-1">DTD</FONT> and/or processing tools are +not generally available, and the machine-generated <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> produced by some word processors for +output purposes only. +</P><P> + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +</P><P> + +The "publisher" means any person or entity that distributes copies +of the Document to the public. +</P><P> + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. +</P><P> + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +</P><P> + +<LI> +VERBATIM COPYING +<P> + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +</P><P> + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +</P><P> + +<LI> +COPYING IN QUANTITY +<P> + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +</P><P> + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +</P><P> + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +</P><P> + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +</P><P> + +<LI> +MODIFICATIONS +<P> + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +</P><P> + +<OL> +<LI> +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. +<P> + +<LI> +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. +<P> + +<LI> +State on the Title page the name of the publisher of the +Modified Version, as the publisher. +<P> + +<LI> +Preserve all the copyright notices of the Document. +<P> + +<LI> +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. +<P> + +<LI> +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. +<P> + +<LI> +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. +<P> + +<LI> +Include an unaltered copy of this License. +<P> + +<LI> +Preserve the section Entitled "History", Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled "History" in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. +<P> + +<LI> +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the "History" section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. +<P> + +<LI> +For any section Entitled "Acknowledgements" or "Dedications", Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. +<P> + +<LI> +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. +<P> + +<LI> +Delete any section Entitled "Endorsements". Such a section +may not be included in the Modified Version. +<P> + +<LI> +Do not retitle any existing section to be Entitled "Endorsements" or +to conflict in title with any Invariant Section. +<P> + +<LI> +Preserve any Warranty Disclaimers. +</OL> +<P> + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +</P><P> + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +</P><P> + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +</P><P> + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +</P><P> + +<LI> +COMBINING DOCUMENTS +<P> + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +</P><P> + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +</P><P> + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all +sections Entitled "Endorsements." +</P><P> + +<LI> +COLLECTIONS OF DOCUMENTS +<P> + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +</P><P> + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +</P><P> + +<LI> +AGGREGATION WITH INDEPENDENT WORKS +<P> + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +</P><P> + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +</P><P> + +<LI> +TRANSLATION +<P> + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +</P><P> + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +</P><P> + +<LI> +TERMINATION +<P> + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +</P><P> + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +</P><P> + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +</P><P> + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +</P><P> + +<LI> +FUTURE REVISIONS OF THIS LICENSE +<P> + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +<A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>. +</P><P> + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +</P><P> + +<LI> +RELICENSING +<P> + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the +site means any set of copyrightable works thus published on the MMC +site. +</P><P> + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +</P><P> + +"Incorporate" means to publish or republish a Document, in whole or +in part, as part of another Document. +</P><P> + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +</P><P> + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +</P><P> + +</OL> +<P> + +<A NAME="SEC50"></A> +<H2> ADDENDUM: How to use this License for your documents </H2> +<!--docid::SEC50::--> +<P> + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> Copyright (C) <VAR>year</VAR> <VAR>your name</VAR>. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with<small>...</small>Texts." line with this: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> with the Invariant Sections being <VAR>list their titles</VAR>, with + the Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts + being <VAR>list</VAR>. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +</P><P> + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +</P><P> + +<A NAME="Concept Index"></A> +<HR SIZE="6"> +<A NAME="SEC51"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC52"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> Concept Index </H1> +<!--docid::SEC51::--> +<table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#cp_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A> + +<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A> + +<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A> + +<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A> + +</td></tr></table><br><P></P> +<TABLE border=0> +<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC44">application-specific completion functions</A></TD><TD valign=top><A HREF="readline.html#SEC44">2.6 Custom Completers</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_C"></A>C</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">command editing</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC3">interaction, readline</A></TD><TD valign=top><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX3">kill ring</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX1">killing text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_N"></A>N</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">readline, function</A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="cp_Y"></A>Y</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX2">yanking text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#cp_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A> + +<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A> + +<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A> + +<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A> + +</td></tr></table><br><P> + +<A NAME="Function and Variable Index"></A> +<HR SIZE="6"> +<A NAME="SEC52"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> Function and Variable Index </H1> +<!--docid::SEC52::--> +<table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A> + +<BR> +<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A> + +<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A> + +<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A> + +<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A> + +<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A> + +<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A> + +<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A> + +<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A> + +<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A> + +<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A> + +<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A> + +<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A> + +<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A> + +<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A> + +<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A> + +</td></tr></table><br><P></P> +<TABLE border=0> +<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_B"></A>B</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX104"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX47"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX58"><CODE>beginning-of-history (M-&#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX59"><CODE>beginning-of-history (M-&#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX36"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX37"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">bind-tty-special-chars</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX48"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX49"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">comment-begin</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">completion-display-width</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">completion-ignore-case</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">completion-map-case</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">completion-prefix-display-length</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">completion-query-items</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX13">convert-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX14">disable-completion</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX96"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">editing-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">enable-keypad</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX60"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX61"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX38"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">expand-tilde</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX64"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_H"></A>H</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">history-preserve-point</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX72"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX73"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX71"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">history-size</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">horizontal-scroll-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">input-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">isearch-terminators</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24">keymap</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX102"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX103"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_M"></A>M</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25">mark-modified-lines</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26">mark-symlinked-directories</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX27">match-hidden-files</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>menu-complete-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>menu-complete-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX28">menu-complete-display-prefix</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX22">meta-flag</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX56"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX57"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_O"></A>O</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29">output-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30">page-completions</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX55"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_Q"></A>Q</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX85"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX50"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX62"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX63"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX31">revert-all-at-newline</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_already_prompted</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX344">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX369">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX353">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX352">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221">rl_binding_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_catch_signals</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX347">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX356">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX354">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX360">rl_completion_append_character</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX351">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX364">rl_completion_found_quote</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX372">rl_completion_invoking_key</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX365">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX359">rl_completion_query_items</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX362">rl_completion_quote_character</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX361">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX363">rl_completion_suppress_quote</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX371">rl_completion_type</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX355">rl_completion_word_break_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219">rl_deprep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX349">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_dispatching</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_display_prompt</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_done</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326"><CODE>rl_echo_signal_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226">rl_editing_mode</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_end</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_erase_empty_line</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215">rl_event_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220">rl_executing_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222">rl_executing_macro</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224">rl_explicit_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX367">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX346">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX357">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX368">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX345">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX350">rl_filename_rewrite_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_free</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_free_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216">rl_getc_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX366">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX348">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX373">rl_inhibit_completion</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_instream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212">rl_last_func</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_library_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_line_buffer</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_mark</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225">rl_numeric_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210">rl_outstream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_pending_input</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_point</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214">rl_pre_input_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211">rl_prefer_env_winsize</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218">rl_prep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_prompt</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_readline_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223">rl_readline_state</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_readline_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217">rl_redisplay_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330"><CODE>rl_reset_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_restore_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_save_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX370">rl_sort_completion_matches</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX358">rl_special_prefixes</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213">rl_startup_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_terminal_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_variable_value</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX32">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX33">show-all-if-unmodified</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX34">skip-completed-text</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176"><CODE>skip-csi-sequence ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177"><CODE>skip-csi-sequence ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX91"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX92"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX106"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX95"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX35">visible-stats</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX76"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX74"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX75"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A> + +<BR> +<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A> + +<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A> + +<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A> + +<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A> + +<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A> + +<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A> + +<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A> + +<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A> + +<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A> + +<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A> + +<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A> + +<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A> + +<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A> + +<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A> + +<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A> + +<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A> + +<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A> + +<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A> + +<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A> + +<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A> + +</td></tr></table><br><P> + +<HR SIZE="6"> +<A NAME="SEC_Contents"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Table of Contents</H1> +<UL> +<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A> +<BR> +<UL> +<A NAME="TOC2" HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A> +<BR> +<A NAME="TOC3" HREF="readline.html#SEC3">1.2 Readline Interaction</A> +<BR> +<UL> +<A NAME="TOC4" HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A> +<BR> +<A NAME="TOC5" HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A> +<BR> +<A NAME="TOC6" HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A> +<BR> +<A NAME="TOC7" HREF="readline.html#SEC7">1.2.4 Readline Arguments</A> +<BR> +<A NAME="TOC8" HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A> +<BR> +</UL> +<A NAME="TOC9" HREF="readline.html#SEC9">1.3 Readline Init File</A> +<BR> +<UL> +<A NAME="TOC10" HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A> +<BR> +<A NAME="TOC11" HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A> +<BR> +<A NAME="TOC12" HREF="readline.html#SEC12">1.3.3 Sample Init File</A> +<BR> +</UL> +<A NAME="TOC13" HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A> +<BR> +<UL> +<A NAME="TOC14" HREF="readline.html#SEC14">1.4.1 Commands For Moving</A> +<BR> +<A NAME="TOC15" HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A> +<BR> +<A NAME="TOC16" HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A> +<BR> +<A NAME="TOC17" HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A> +<BR> +<A NAME="TOC18" HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A> +<BR> +<A NAME="TOC19" HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A> +<BR> +<A NAME="TOC20" HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A> +<BR> +<A NAME="TOC21" HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A> +<BR> +</UL> +<A NAME="TOC22" HREF="readline.html#SEC22">1.5 Readline vi Mode</A> +<BR> +</UL> +<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A> +<BR> +<UL> +<A NAME="TOC24" HREF="readline.html#SEC24">2.1 Basic Behavior</A> +<BR> +<A NAME="TOC25" HREF="readline.html#SEC25">2.2 Custom Functions</A> +<BR> +<UL> +<A NAME="TOC26" HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A> +<BR> +<A NAME="TOC27" HREF="readline.html#SEC27">2.2.2 Writing a New Function</A> +<BR> +</UL> +<A NAME="TOC28" HREF="readline.html#SEC28">2.3 Readline Variables</A> +<BR> +<A NAME="TOC29" HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A> +<BR> +<UL> +<A NAME="TOC30" HREF="readline.html#SEC30">2.4.1 Naming a Function</A> +<BR> +<A NAME="TOC31" HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A> +<BR> +<A NAME="TOC32" HREF="readline.html#SEC32">2.4.3 Binding Keys</A> +<BR> +<A NAME="TOC33" HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A> +<BR> +<A NAME="TOC34" HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A> +<BR> +<A NAME="TOC35" HREF="readline.html#SEC35">2.4.6 Redisplay</A> +<BR> +<A NAME="TOC36" HREF="readline.html#SEC36">2.4.7 Modifying Text</A> +<BR> +<A NAME="TOC37" HREF="readline.html#SEC37">2.4.8 Character Input</A> +<BR> +<A NAME="TOC38" HREF="readline.html#SEC38">2.4.9 Terminal Management</A> +<BR> +<A NAME="TOC39" HREF="readline.html#SEC39">2.4.10 Utility Functions</A> +<BR> +<A NAME="TOC40" HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A> +<BR> +<A NAME="TOC41" HREF="readline.html#SEC41">2.4.12 Alternate Interface</A> +<BR> +<A NAME="TOC42" HREF="readline.html#SEC42">2.4.13 A Readline Example</A> +<BR> +</UL> +<A NAME="TOC43" HREF="readline.html#SEC43">2.5 Readline Signal Handling</A> +<BR> +<A NAME="TOC44" HREF="readline.html#SEC44">2.6 Custom Completers</A> +<BR> +<UL> +<A NAME="TOC45" HREF="readline.html#SEC45">2.6.1 How Completing Works</A> +<BR> +<A NAME="TOC46" HREF="readline.html#SEC46">2.6.2 Completion Functions</A> +<BR> +<A NAME="TOC47" HREF="readline.html#SEC47">2.6.3 Completion Variables</A> +<BR> +<A NAME="TOC48" HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A> +<BR> +</UL> +</UL> +<A NAME="TOC49" HREF="readline.html#SEC49">A. GNU Free Documentation License</A> +<BR> +<A NAME="TOC51" HREF="readline.html#SEC51">Concept Index</A> +<BR> +<A NAME="TOC52" HREF="readline.html#SEC52">Function and Variable Index</A> +<BR> +</UL> +<HR SIZE=1> +<A NAME="SEC_OVERVIEW"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Short Table of Contents</H1> +<BLOCKQUOTE> +<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A> +<BR> +<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A> +<BR> +<A NAME="TOC49" HREF="readline.html#SEC49">A. GNU Free Documentation License</A> +<BR> +<A NAME="TOC51" HREF="readline.html#SEC51">Concept Index</A> +<BR> +<A NAME="TOC52" HREF="readline.html#SEC52">Function and Variable Index</A> +<BR> + +</BLOCKQUOTE> +<HR SIZE=1> +<A NAME="SEC_About"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC51">Index</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>About this document</H1> +This document was generated by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> +<P></P> +The buttons in the navigation panels have the following meaning: +<P></P> +<table border = "1"> +<TR> +<TH> Button </TH> +<TH> Name </TH> +<TH> Go to </TH> +<TH> From 1.2.3 go to</TH> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ < ] </TD> +<TD ALIGN="CENTER"> +Back +</TD> +<TD> +previous section in reading order +</TD> +<TD> +1.2.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ > ] </TD> +<TD ALIGN="CENTER"> +Forward +</TD> +<TD> +next section in reading order +</TD> +<TD> +1.2.4 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ << ] </TD> +<TD ALIGN="CENTER"> +FastBack +</TD> +<TD> +previous or up-and-previous section +</TD> +<TD> +1.1 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ Up ] </TD> +<TD ALIGN="CENTER"> +Up +</TD> +<TD> +up section +</TD> +<TD> +1.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ >> ] </TD> +<TD ALIGN="CENTER"> +FastForward +</TD> +<TD> +next or up-and-next section +</TD> +<TD> +1.3 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Top] </TD> +<TD ALIGN="CENTER"> +Top +</TD> +<TD> +cover (top) of document +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Contents] </TD> +<TD ALIGN="CENTER"> +Contents +</TD> +<TD> +table of contents +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Index] </TD> +<TD ALIGN="CENTER"> +Index +</TD> +<TD> +concept index +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ ? ] </TD> +<TD ALIGN="CENTER"> +About +</TD> +<TD> +this page +</TD> +<TD> + +</TD> +</TR> +</TABLE> +<P></P> +where the <STRONG> Example </STRONG> assumes that the current position +is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of +the following structure: +<UL> +<LI> 1. Section One </LI> +<UL> +<LI>1.1 Subsection One-One</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.2 Subsection One-Two</LI> +<UL> +<LI>1.2.1 Subsubsection One-Two-One +</LI><LI>1.2.2 Subsubsection One-Two-Two +</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> +<== Current Position </STRONG> +</LI><LI>1.2.4 Subsubsection One-Two-Four +</LI></UL> +<LI>1.3 Subsection One-Three</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.4 Subsection One-Four</LI> +</UL> +</UL> + +<HR SIZE=1> +<BR> +<FONT SIZE="-1"> +This document was generated +by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> + +</BODY> +</HTML> diff --git a/readline-6.2/doc/readline.info b/readline-6.2/doc/readline.info new file mode 100644 index 0000000..0e13eff --- /dev/null +++ b/readline-6.2/doc/readline.info @@ -0,0 +1,4676 @@ +This is readline.info, produced by makeinfo version 4.13 from +/usr/src/local/chet/src/bash/readline-src/doc/rlman.texi. + +This manual describes the GNU Readline Library (version 6.2, September +6 2010), a library which aids in the consistency of user interface +across discrete programs which provide a command line interface. + + Copyright (C) 1988-2011 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, with the Front-Cover texts + being "A GNU Manual", and with the Back-Cover Texts as in (a) + below. A copy of the license is included in the section entitled + "GNU Free Documentation License". + + (a) The FSF's Back-Cover Text is: You are free to copy and modify + this GNU manual. Buying copies from GNU Press supports the FSF in + developing GNU and promoting software freedom." + + +INFO-DIR-SECTION Libraries +START-INFO-DIR-ENTRY +* Readline: (readline). The GNU readline library API. +END-INFO-DIR-ENTRY + + +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 which +provide a command line interface. + +* Menu: + +* Command Line Editing:: GNU Readline User's Manual. +* Programming with GNU Readline:: GNU Readline Programmer's Manual. +* GNU Free Documentation License:: License for copying this 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 + +1 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 + +1.1 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. The Meta key is labeled <ALT> on many keyboards. On +keyboards with two keys labeled <ALT> (usually to either side of the +space bar), the <ALT> on the left side is generally set to work as a +Meta key. The <ALT> key on the right may also be configured to work as +a Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. + + If you do not have a Meta or <ALT> key, or another key working as 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::). +If your keyboard lacks a <LFD> key, typing <C-j> will produce the +desired character. The <RET> key may be labeled <Return> or <Enter> on +some keyboards. + + +File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing + +1.2 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 <RET>. You do not have to be at the end of +the line to press <RET>; the entire line is accepted regardless of the +location of the cursor within the line. + +* Menu: + +* Readline Bare Essentials:: The least you need to know about Readline. +* Readline Movement Commands:: Moving about the input line. +* Readline Killing Commands:: How to delete text, and how to get it back! +* Readline Arguments:: Giving numeric arguments to commands. +* Searching:: Searching through previous lines. + + +File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction + +1.2.1 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 mistype a character, and not notice the 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 bare essentials for editing the text of an input line +follows. + +`C-b' + Move back one character. + +`C-f' + Move forward one character. + +<DEL> or <Backspace> + 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-_' or `C-x C-u' + Undo the last editing command. You can undo all the way back to an + empty line. + +(Depending on your configuration, the <Backspace> key be set to delete +the character to the left of the cursor and the <DEL> key set to delete +the character underneath the cursor, like `C-d', rather than the +character to the left of the cursor.) + + +File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction + +1.2.2 Readline Movement Commands +-------------------------------- + +The above table describes the most basic 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 + +1.2.3 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. (`Cut' and `paste' are more recent jargon for `kill' and +`yank'.) + + 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. Word boundaries are the same + as those used by `M-f'. + +`M-<DEL>' + Kill from the cursor the start of the current word, or, if between + words, to the start of the previous word. Word boundaries are the + same as those used by `M-b'. + +`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 + +1.2.4 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', which +will delete the next ten characters on the input line. + + +File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction + +1.2.5 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. To search backward in the +history for a particular string, type `C-r'. Typing `C-s' searches +forward through the history. 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-r' or +`C-s' 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. A movement command will terminate the search, make the +last line found the current line, and begin editing. + + Readline remembers the last incremental search string. If two +`C-r's are typed without any intervening characters defining a new +search string, any remembered search string is used. + + 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 + +1.3 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, conventionally 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'. If that file does not exist or cannot be read, the +ultimate default is `/etc/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 + +1.3.1 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. The syntax is simple: + + set VARIABLE VALUE + + Here, for example, is how to change from the default Emacs-like + key binding to use `vi' line editing commands: + + set editing-mode vi + + Variable names and values, where appropriate, are recognized + without regard to case. Unrecognized variable names are ignored. + + Boolean variables (those that can be set to on or off) are set to + on if the value is null or empty, ON (case-insensitive), or 1. + Any other value results in the variable being set to off. + + 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. + + `bind-tty-special-chars' + If set to `on', Readline attempts to bind the control + characters treated specially by the kernel's terminal driver + to their Readline equivalents. + + `comment-begin' + The string to insert at the beginning of the line when the + `insert-comment' command is executed. The default value is + `"#"'. + + `completion-display-width' + The number of screen columns used to display possible matches + when performing completion. The value is ignored if it is + less than 0 or greater than the terminal screen width. A + value of 0 will cause matches to be displayed one per line. + The default value is -1. + + `completion-ignore-case' + If set to `on', Readline performs filename matching and + completion in a case-insensitive fashion. The default value + is `off'. + + `completion-map-case' + If set to `on', and COMPLETION-IGNORE-CASE is enabled, + Readline treats hyphens (`-') and underscores (`_') as + equivalent when performing case-insensitive filename matching + and completion. + + `completion-prefix-display-length' + The length in characters of the common prefix of a list of + possible completions that is displayed without modification. + When set to a value greater than zero, common prefixes longer + than this value are replaced with an ellipsis when displaying + possible completions. + + `completion-query-items' + The number of possible completions that determines when the + user is asked whether the list of possibilities should be + displayed. 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. This + variable must be set to an integer value greater than or + equal to 0. A negative value means Readline should never ask. + 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 prefixing 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'. + + `echo-control-characters' + When set to `on', on operating systems that indicate they + support it, readline echoes a character corresponding to a + signal generated from the keyboard. The default is `on'. + + `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'. + + `enable-meta-key' + When set to `on', Readline will try to enable any meta + modifier key the terminal claims to support when it is + called. On many terminals, the meta key is used to send + eight-bit characters. The default is `on'. + + `expand-tilde' + If set to `on', tilde expansion is performed when Readline + attempts word completion. The default is `off'. + + `history-preserve-point' + If set to `on', the history code attempts to place the point + (the current cursor position) at the same location on each + history line retrieved with `previous-history' or + `next-history'. The default is `off'. + + `history-size' + Set the maximum number of history entries saved in the + history list. If set to zero, the number of entries in the + history list is not limited. + + `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 clear the eighth bit in 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-move', + `vi-command', and `vi-insert'. `vi' is equivalent to + `vi-command'; `emacs' is equivalent to `emacs-standard'. The + default value is `emacs'. The value of the `editing-mode' + variable also affects the default keymap. + + `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. + + `mark-symlinked-directories' + If set to `on', completed names which are symbolic links to + directories have a slash appended (subject to the value of + `mark-directories'). The default is `off'. + + `match-hidden-files' + This variable, when set to `on', causes Readline to match + files whose names begin with a `.' (hidden files) when + performing filename completion. If set to `off', the leading + `.' must be supplied by the user in the filename to be + completed. This variable is `on' by default. + + `menu-complete-display-prefix' + If set to `on', menu completion displays the common prefix of + the list of possible completions (which may be empty) before + cycling through the list. The default is `off'. + + `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'. + + `page-completions' + If set to `on', Readline uses an internal `more'-like pager + to display a screenful of possible completions at a time. + This variable is `on' by default. + + `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'. + + `revert-all-at-newline' + If set to `on', Readline will undo all changes to history + lines before returning when `accept-line' is executed. By + default, history lines may be modified and retain individual + undo lists across calls to `readline'. 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'. + + `show-all-if-unmodified' + This alters the default behavior of the completion functions + in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to + `on', words which have more than one possible completion + without any possible partial completion (the possible + completions don't share a common prefix) cause the matches to + be listed immediately instead of ringing the bell. The + default value is `off'. + + `skip-completed-text' + If set to `on', this alters the default completion behavior + when inserting a single match into the line. It's only + active when performing completion in the middle of a word. + If enabled, readline does not insert characters from the + completion that match characters after point in the word + being completed, so portions of the word following the cursor + are not duplicated. For instance, if this is enabled, + attempting completion when the cursor is after the `e' in + `Makefile' will result in `Makefile' rather than + `Makefilefile', assuming there is a single possible + completion. 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 need to find 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 on a line in + the init file the name of the key you wish to bind the command to, + a colon, and then the name of the command. There can be no space + between the key name and the colon - that will be interpreted as + part of the key name. The name of the key can be expressed in + different ways, depending on what you find most comfortable. + + In addition to command names, readline allows keys to be bound to + a string that is inserted when the key is pressed (a MACRO). + + 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', `M-DEL' is bound to the function + `backward-kill-word', 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). + + A number of symbolic character names are recognized while + processing this key binding syntax: DEL, ESC, ESCAPE, LFD, + NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. + + "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 again 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 + + `\"' + <">, a double quotation mark + + `\'' + <'>, a single quote or apostrophe + + 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 eight-bit character whose value is the octal value NNN + (one to three digits) + + `\xHH' + the eight-bit character whose value is the hexadecimal value + HH (one or two hex 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 + +1.3.2 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 a particular value. 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. For example, the following + directive reads from `/etc/inputrc': + $include /etc/inputrc + + +File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File + +1.3.3 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 + +1.4 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. Command names without an accompanying key sequence are +unbound by default. + + In the following descriptions, "point" refers to the current cursor +position, and "mark" refers to a cursor position saved by the +`set-mark' command. The text between the point and mark is referred to +as the "region". + + +File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands + +1.4.1 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 the current or 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 + +1.4.2 Commands For Manipulating The History +------------------------------------------- + +`accept-line (Newline or Return)' + Accept the line regardless of where the cursor is. If this line is + non-empty, it may be added to the history list for future recall + with `add_history()'. If this line is a modified history line, + the history line is restored to its original state. + +`previous-history (C-p)' + Move `back' through the history list, fetching the previous + command. + +`next-history (C-n)' + Move `forward' through the history list, fetching the next command. + +`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 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) at point. 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. Once the + argument N is computed, the argument is extracted as if the `!N' + history expansion had been specified. + +`yank-last-arg (M-. or M-_)' + Insert last argument to the previous command (the last word of the + previous history entry). With a numeric argument, behave exactly + like `yank-nth-arg'. Successive calls to `yank-last-arg' move + back through the history list, inserting the last word (or the + word specified by the argument to the first call) of each line in + turn. Any numeric argument supplied to these successive calls + determines the direction to move through the history. A negative + argument switches the direction through the history (back or + forward). The history expansion facilities are used to extract + the last argument, as if the `!$' history expansion had been + specified. + + + +File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands + +1.4.3 Commands For Changing Text +-------------------------------- + +`delete-char (C-d)' + Delete the character at point. If point 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 or 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 have no effect. + +`transpose-words (M-t)' + Drag the word before point past the word after point, moving point + past that word as well. If the insertion point is at the end of + the line, this transposes the last two words on the line. + +`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. + +`overwrite-mode ()' + Toggle overwrite mode. With an explicit positive numeric argument, + switches to overwrite mode. With an explicit non-positive numeric + argument, switches to insert mode. This command affects only + `emacs' mode; `vi' mode does overwrite differently. Each call to + `readline()' starts in insert mode. + + In overwrite mode, characters bound to `self-insert' replace the + text at point rather than pushing the text to the right. + Characters bound to `backward-delete-char' replace the character + before point with a space. + + By default, this command is unbound. + + + +File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands + +1.4.4 Killing And Yanking +------------------------- + +`kill-line (C-k)' + Kill the text from point 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. + +`kill-whole-line ()' + Kill all characters on the current line, no matter where point is. + By default, this is unbound. + +`kill-word (M-d)' + Kill from point 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 point. Word boundaries are the same as + `backward-word'. + +`unix-word-rubout (C-w)' + Kill the word behind point, using white space as a word boundary. + The killed text is saved on the kill-ring. + +`unix-filename-rubout ()' + Kill the word behind point, using white space and the slash + character as the word boundaries. 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 in the current 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 point. + +`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 + +1.4.5 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 + +1.4.6 Letting Readline Type For You +----------------------------------- + +`complete (<TAB>)' + Attempt to perform completion on the text before point. The + actual completion performed is application-specific. The default + is filename completion. + +`possible-completions (M-?)' + List the possible completions of the text before point. When + displaying completions, Readline sets the number of columns used + for display to the value of `completion-display-width', the value + of the environment variable `COLUMNS', or the screen width, in + that order. + +`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 (subject to the setting of + `bell-style') 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. + +`menu-complete-backward ()' + Identical to `menu-complete', but moves backward through the list + of possible completions, as if `menu-complete' had been given a + negative argument. + +`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 + +1.4.7 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 + +1.4.8 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>)' + Metafy the next character typed. This is for keyboards without a + meta key. Typing `<ESC> f' is equivalent to typing `M-f'. + +`undo (C-_ or 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 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. + +`skip-csi-sequence ()' + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin + with a Control Sequence Indicator (CSI), usually ESC-[. If this + sequence is bound to "\e[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. + This is unbound by default, but usually bound to ESC-[. + +`insert-comment (M-#)' + Without a numeric argument, the value of the `comment-begin' + variable is inserted at the beginning of the current line. If a + numeric argument is supplied, this command acts as a toggle: if + the characters at the beginning of the line do not match the value + of `comment-begin', the value is inserted, otherwise the + characters in `comment-begin' are deleted from the beginning of + the line. In either case, 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 output. 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. + +`emacs-editing-mode (C-e)' + When in `vi' command mode, this causes a switch to `emacs' editing + mode. + +`vi-editing-mode (M-C-j)' + When in `emacs' editing mode, this causes a switch to `vi' editing + mode. + + + +File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing + +1.5 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 standard. + + In order to switch interactively between `emacs' and `vi' editing +modes, use the command `M-C-j' (bound to emacs-editing-mode when in +`vi' mode and to vi-editing-mode in `emacs' 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 consistency of user interface across discrete programs +that need to provide a command line interface. + + Copyright (C) 1988-2011 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: GNU Free Documentation License, Prev: Command Line Editing, Up: Top + +2 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 + +2.1 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 PROMPT and then reads and +returns a single line of text from the user. If PROMPT is `NULL' or +the empty string, no prompt is displayed. The line `readline' returns +is allocated with `malloc()'; the caller should `free()' the line when +it has finished with it. The declaration for `readline' in ANSI C is + + `char *readline (const 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, rl_command_func_t *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 + +2.2 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. + + Before declaring any functions that customize Readline's behavior, or +using any functionality Readline provides in other code, an application +writer should include the file `<readline/readline.h>' in any file that +uses Readline's features. Since some of the definitions in +`readline.h' use the `stdio' library, the file `<stdio.h>' should be +included before `readline.h'. + + `readline.h' defines a C preprocessor variable that should be +treated as an integer, `RL_READLINE_VERSION', which may be used to +conditionally compile application code depending on the installed +Readline version. The value is a hexadecimal encoding of the major and +minor version numbers of the library, of the form 0xMMMM. MM is the +two-digit major version number; MM is the two-digit minor version +number. For Readline 4.2, for example, the value of +`RL_READLINE_VERSION' would be `0x0402'. + +* Menu: + +* Readline Typedefs:: C declarations to make code readable. +* Function Writing:: Variables and calling conventions. + + +File: readline.info, Node: Readline Typedefs, Next: Function Writing, Up: Custom Functions + +2.2.1 Readline Typedefs +----------------------- + +For readabilty, we declare a number of new object types, all pointers +to functions. + + The reason for declaring these new types is to make it easier to +write code describing pointers to C functions with appropriately +prototyped arguments and return values. + + For instance, say we want to declare a variable FUNC as a pointer to +a function which takes two `int' arguments and returns an `int' (this +is the type of all of the Readline bindable functions). Instead of the +classic C declaration + + `int (*func)();' + +or the ANSI-C style declaration + + `int (*func)(int, int);' + +we may write + + `rl_command_func_t *func;' + + The full list of function pointer types available is + +`typedef int rl_command_func_t (int, int);' + +`typedef char *rl_compentry_func_t (const char *, int);' + +`typedef char **rl_completion_func_t (const char *, int, int);' + +`typedef char *rl_quote_func_t (char *, int, char *);' + +`typedef char *rl_dequote_func_t (char *, int);' + +`typedef int rl_compignore_func_t (char **);' + +`typedef void rl_compdisp_func_t (char **, int, int);' + +`typedef int rl_hook_func_t (void);' + +`typedef int rl_getc_func_t (FILE *);' + +`typedef int rl_linebuf_func_t (char *, int);' + +`typedef int rl_intfunc_t (int);' + +`#define rl_ivoidfunc_t rl_hook_func_t' + +`typedef int rl_icpfunc_t (char *);' + +`typedef int rl_icppfunc_t (char **);' + +`typedef void rl_voidfunc_t (void);' + +`typedef void rl_vintfunc_t (int);' + +`typedef void rl_vcpfunc_t (char *);' + +`typedef void rl_vcppfunc_t (char **);' + + +File: readline.info, Node: Function Writing, Prev: Readline Typedefs, Up: Custom Functions + +2.2.2 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 + + `int 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. + + A command function should return 0 if its action completes +successfully, and a non-zero value if some error occurs. This is the +convention obeyed by all of the builtin Readline bindable command +functions. + + +File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline + +2.3 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::. The + function `rl_extend_line_buffer' is available to increase the + memory allocated to `rl_line_buffer'. + + -- 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_num_chars_to_read + Setting this to a positive value before calling `readline()' causes + Readline to return after accepting that many characters, rather + than reading up to a character bound to `accept-line'. + + -- 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_dispatching + Set to a non-zero value if a function is being called from a key + binding; zero otherwise. Application functions can test this to + discover whether they were called directly or by Readline's + dispatching mechanism. + + -- 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. The + `rl_set_prompt()' function (*note Redisplay::) may be used to + modify the prompt string after calling `readline()'. + + -- Variable: char * rl_display_prompt + The string displayed as the prompt. This is usually identical to + RL_PROMPT, but may be changed temporarily by functions that use + the prompt string as a message area, such as incremental search. + + -- Variable: int rl_already_prompted + If an application wishes to display the prompt itself, rather than + have Readline do it the first time `readline()' is called, it + should set this variable to a non-zero value after displaying the + prompt. The prompt must also be passed as the argument to + `readline()' so the redisplay functions can update the display + properly. The calling application is responsible for managing the + value; Readline never sets it. + + -- Variable: const char * rl_library_version + The version number of this revision of the library. + + -- Variable: int rl_readline_version + An integer encoding the current version of the library. The + encoding is of the form 0xMMMM, where MM is the two-digit major + version number, and MM is the two-digit minor version number. For + example, for Readline-4.2, `rl_readline_version' would have the + value 0x0402. + + -- Variable: int rl_gnu_readline_p + Always set to 1, denoting that this is GNU readline rather than + some emulation. + + -- Variable: const char * rl_terminal_name + The terminal type, used for initialization. If not set by the + application, Readline sets this to the value of the `TERM' + environment variable the first time it is called. + + -- Variable: const 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. If `NULL', + Readline defaults to STDIN. + + -- Variable: FILE * rl_outstream + The stdio stream to which Readline performs output. If `NULL', + Readline defaults to STDOUT. + + -- Variable: int rl_prefer_env_winsize + If non-zero, Readline gives values found in the `LINES' and + `COLUMNS' environment variables greater precedence than values + fetched from the kernel when computing the screen dimensions. + + -- Variable: rl_command_func_t * rl_last_func + The address of the last command function Readline executed. May + be used to test whether or not a function is being executed twice + in succession, for example. + + -- Variable: rl_hook_func_t * rl_startup_hook + If non-zero, this is the address of a function to call just before + `readline' prints the first prompt. + + -- Variable: rl_hook_func_t * 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: rl_hook_func_t * rl_event_hook + If non-zero, this is the address of a function to call periodically + when Readline is waiting for terminal input. By default, this + will be called at most ten times a second if there is no keyboard + input. + + -- Variable: rl_getc_func_t * 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 + Character Input::). + + -- Variable: rl_voidfunc_t * 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: rl_vintfunc_t * rl_prep_term_function + If non-zero, Readline will call indirectly through this pointer to + initialize the terminal. The function takes a single argument, an + `int' flag that says whether or not to use eight-bit characters. + By default, this is set to `rl_prep_terminal' (*note Terminal + Management::). + + -- Variable: rl_voidfunc_t * rl_deprep_term_function + If non-zero, Readline will call indirectly through this pointer to + reset the terminal. This function should undo the effects of + `rl_prep_term_function'. By default, this is set to + `rl_deprep_terminal' (*note Terminal Management::). + + -- 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. + + -- Variable: char * rl_executing_macro + This variable is set to the text of any currently-executing macro. + + -- Variable: int rl_readline_state + A variable with bit values that encapsulate the current Readline + state. A bit is set with the `RL_SETSTATE' macro, and unset with + the `RL_UNSETSTATE' macro. Use the `RL_ISSTATE' macro to test + whether a particular state bit is set. Current state bits include: + + `RL_STATE_NONE' + Readline has not yet been called, nor has it begun to + intialize. + + `RL_STATE_INITIALIZING' + Readline is initializing its internal data structures. + + `RL_STATE_INITIALIZED' + Readline has completed its initialization. + + `RL_STATE_TERMPREPPED' + Readline has modified the terminal modes to do its own input + and redisplay. + + `RL_STATE_READCMD' + Readline is reading a command from the keyboard. + + `RL_STATE_METANEXT' + Readline is reading more input after reading the meta-prefix + character. + + `RL_STATE_DISPATCHING' + Readline is dispatching to a command. + + `RL_STATE_MOREINPUT' + Readline is reading more input while executing an editing + command. + + `RL_STATE_ISEARCH' + Readline is performing an incremental history search. + + `RL_STATE_NSEARCH' + Readline is performing a non-incremental history search. + + `RL_STATE_SEARCH' + Readline is searching backward or forward through the history + for a string. + + `RL_STATE_NUMERICARG' + Readline is reading a numeric argument. + + `RL_STATE_MACROINPUT' + Readline is currently getting its input from a + previously-defined keyboard macro. + + `RL_STATE_MACRODEF' + Readline is currently reading characters defining a keyboard + macro. + + `RL_STATE_OVERWRITE' + Readline is in overwrite mode. + + `RL_STATE_COMPLETING' + Readline is performing word completion. + + `RL_STATE_SIGHANDLER' + Readline is currently executing the readline signal handler. + + `RL_STATE_UNDOING' + Readline is performing an undo. + + `RL_STATE_INPUTPENDING' + Readline has input pending due to a call to + `rl_execute_next()'. + + `RL_STATE_TTYCSAVED' + Readline has saved the values of the terminal's special + characters. + + `RL_STATE_CALLBACK' + Readline is currently using the alternate (callback) interface + (*note Alternate Interface::). + + `RL_STATE_VIMOTION' + Readline is reading the argument to a vi-mode "motion" + command. + + `RL_STATE_MULTIKEY' + Readline is reading a multiple-keystroke command. + + `RL_STATE_VICMDONCE' + Readline has entered vi command (movement) mode at least one + time during the current call to `readline()'. + + `RL_STATE_DONE' + Readline has read a key sequence bound to `accept-line' and + is about to return the line to the caller. + + + -- Variable: int rl_explicit_arg + Set to a non-zero value if an explicit numeric argument was + specified by the user. Only valid in a bindable command function. + + -- Variable: int rl_numeric_arg + Set to the value of any numeric argument explicitly specified by + the user before executing the current Readline function. Only + valid in a bindable command function. + + -- Variable: int rl_editing_mode + Set to a value denoting Readline's current editing mode. A value + of 1 means Readline is currently in emacs mode; 0 means that vi + mode is active. + + +File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline + +2.4 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'. +* Character Input:: Functions to read keyboard input. +* Terminal Management:: Functions to manage terminal settings. +* Utility Functions:: Generally useful functions and hooks. +* Miscellaneous Functions:: Functions that don't fall into any category. +* Alternate Interface:: Using Readline in a `callback' fashion. +* A Readline Example:: An example Readline function. + + +File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions + +2.4.1 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 (const char *name, rl_command_func_t + *function, int key) + Add NAME to the list of named functions. Make FUNCTION be the + function that gets called. If KEY is not -1, then bind it 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 + +2.4.2 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 (void) + Returns a new, empty keymap. The space for the keymap is + allocated with `malloc()'; the caller should free it by calling + `rl_free_keymap()' when done. + + -- Function: Keymap rl_copy_keymap (Keymap map) + Return a new keymap which is a copy of MAP. + + -- Function: Keymap rl_make_keymap (void) + 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 the data in KEYMAP. The caller + should free KEYMAP. + + -- Function: void rl_free_keymap (Keymap keymap) + Free all storage associated with KEYMAP. This calls + `rl_discard_keymap' to free subordindate keymaps and macros. + + Readline has several internal keymaps. These functions allow you to +change which keymap is active. + + -- Function: Keymap rl_get_keymap (void) + 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 (const 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 + +2.4.3 Binding Keys +------------------ + +Key sequences are associate 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. + + Since `readline()' installs a set of default key bindings the first +time it is called, there is always the danger that a custom binding +installed before the first call to `readline()' will be overridden. An +alternate mechanism is to install custom key bindings in an +initialization function assigned to the `rl_startup_hook' variable +(*note Readline Variables::). + + These functions manage key bindings. + + -- Function: int rl_bind_key (int key, rl_command_func_t *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, rl_command_func_t + *function, Keymap map) + Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an + invalid KEY. + + -- Function: int rl_bind_key_if_unbound (int key, rl_command_func_t + *function) + Binds KEY to FUNCTION if it is not already bound in the currently + active keymap. Returns non-zero in the case of an invalid KEY or + if KEY is already bound. + + -- Function: int rl_bind_key_if_unbound_in_map (int key, + rl_command_func_t *function, Keymap map) + Binds KEY to FUNCTION if it is not already bound in MAP. Returns + non-zero in the case of an invalid KEY or if KEY is already bound. + + -- 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 (rl_command_func_t + *function, Keymap map) + Unbind all keys that execute FUNCTION in MAP. + + -- Function: int rl_unbind_command_in_map (const char *command, Keymap + map) + Unbind all keys that are bound to COMMAND in MAP. + + -- Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t + *function) + Bind the key sequence represented by the string KEYSEQ to the + function FUNCTION, beginning in the current keymap. This makes + new keymaps as necessary. The return value is non-zero if KEYSEQ + is invalid. + + -- Function: int rl_bind_keyseq_in_map (const char *keyseq, + rl_command_func_t *function, Keymap map) + Bind the key sequence represented by the string KEYSEQ to the + function FUNCTION. This makes new keymaps as necessary. Initial + bindings are performed in MAP. The return value is non-zero if + KEYSEQ is invalid. + + -- Function: int rl_set_key (const char *keyseq, rl_command_func_t + *function, Keymap map) + Equivalent to `rl_bind_keyseq_in_map'. + + -- Function: int rl_bind_keyseq_if_unbound (const char *keyseq, + rl_command_func_t *function) + Binds KEYSEQ to FUNCTION if it is not already bound in the + currently active keymap. Returns non-zero in the case of an + invalid KEYSEQ or if KEYSEQ is already bound. + + -- Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, + rl_command_func_t *function, Keymap map) + Binds KEYSEQ to FUNCTION if it is not already bound in MAP. + Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is + already bound. + + -- Function: int rl_generic_bind (int type, const 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 (const 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 + +2.4.4 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. You may also +associate a new function name with an arbitrary function. + + -- Function: rl_command_func_t * rl_named_function (const char *name) + Return the function with name NAME. + + -- Function: rl_command_func_t * rl_function_of_keyseq (const 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 the `int' variable it points to + (one of `ISFUNC', `ISKMAP', or `ISMACR'). + + -- Function: char ** rl_invoking_keyseqs (rl_command_func_t *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 (rl_command_func_t + *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 (void) + Print the names of all bindable Readline functions to + `rl_outstream'. + + -- Function: const char ** rl_funmap_names (void) + Return a NULL terminated array of known function names. The array + is sorted. The array itself is allocated, but not the strings + inside. You should free the array, but not the pointers, using + `free' or `rl_free' when you are done. + + -- Function: int rl_add_funmap_entry (const char *name, + rl_command_func_t *function) + Add NAME to the list of bindable Readline command names, and make + FUNCTION the function to be called when NAME is invoked. + + +File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions + +2.4.5 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. + + 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 +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 (void) + 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 (void) + 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 rl_free_undo_list (void) + Free the existing undo list. + + -- Function: int rl_do_undo (void) + 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 + +2.4.6 Redisplay +--------------- + + -- Function: void rl_redisplay (void) + Change what's displayed on the screen to reflect the current + contents of `rl_line_buffer'. + + -- Function: int rl_forced_update_display (void) + Force the line to be updated and redisplayed, whether or not + Readline thinks the screen display is correct. + + -- Function: int rl_on_new_line (void) + Tell the update functions that we have moved onto a new (empty) + line, usually after ouputting a newline. + + -- Function: int rl_on_new_line_with_prompt (void) + Tell the update functions that we have moved onto a new line, with + RL_PROMPT already displayed. This could be used by applications + that want to output the prompt string themselves, but still need + Readline to know the prompt string length for redisplay. It + should be used after setting RL_ALREADY_PROMPTED. + + -- Function: int rl_reset_line_state (void) + Reset the display state to a clean state and redisplay the current + line starting on a new line. + + -- Function: int rl_crlf (void) + Move the cursor to the start of the next screen line. + + -- Function: int rl_show_char (int c) + Display character C on `rl_outstream'. If Readline has not been + set to display meta characters directly, this will convert meta + characters to a meta-prefixed key sequence. This is intended for + use by applications which wish to do their own redisplay. + + -- Function: int rl_message (const char *, ...) + The arguments are a format string as would be supplied to `printf', + possibly containing conversion specifications such as `%d', and + any additional arguments necessary to satisfy the conversion + specifications. The resulting string is displayed in the "echo + area". The echo area is also used to display numeric arguments + and search strings. You should call `rl_save_prompt' to save the + prompt information before calling this function. + + -- Function: int rl_clear_message (void) + Clear the message in the echo area. If the prompt was saved with + a call to `rl_save_prompt' before the last call to `rl_message', + call `rl_restore_prompt' before calling this function. + + -- Function: void rl_save_prompt (void) + 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 (void) + Restore the local Readline prompt display state saved by the most + recent call to `rl_save_prompt'. if `rl_save_prompt' was called + to save the prompt before a call to `rl_message', this function + should be called before the corresponding call to + `rl_clear_message'. + + -- Function: int rl_expand_prompt (char *prompt) + Expand any special character sequences in PROMPT and set up the + local Readline prompt redisplay variables. This function is + called by `readline()'. It may also be called to expand the + primary prompt if the `rl_on_new_line_with_prompt()' function or + `rl_already_prompted' variable is used. It returns the number of + visible characters on the last line of the (possibly multi-line) + prompt. Applications may indicate that the prompt contains + characters that take up no physical screen space when displayed by + bracketing a sequence of such characters with the special markers + `RL_PROMPT_START_IGNORE' and `RL_PROMPT_END_IGNORE' (declared in + `readline.h'. This may be used to embed terminal-specific escape + sequences in prompts. + + -- Function: int rl_set_prompt (const char *prompt) + Make Readline use PROMPT for subsequent redisplay. This calls + `rl_expand_prompt()' to expand the prompt and sets `rl_prompt' to + the result. + + +File: readline.info, Node: Modifying Text, Next: Character Input, Prev: Redisplay, Up: Readline Convenience Functions + +2.4.7 Modifying Text +-------------------- + + -- Function: int rl_insert_text (const char *text) + Insert TEXT into the line at the current cursor position. Returns + the number of characters inserted. + + -- Function: int rl_delete_text (int start, int end) + Delete the text between START and END in the current line. + Returns the number of characters deleted. + + -- 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. + + -- Function: int rl_push_macro_input (char *macro) + Cause MACRO to be inserted into the line, as if it had been invoked + by a key bound to a macro. Not especially useful; use + `rl_insert_text()' instead. + + +File: readline.info, Node: Character Input, Next: Terminal Management, Prev: Modifying Text, Up: Readline Convenience Functions + +2.4.8 Character Input +--------------------- + + -- Function: int rl_read_key (void) + Return the next character available from Readline's current input + stream. This handles input inserted into the input stream via + RL_PENDING_INPUT (*note Readline Variables::) and + `rl_stuff_char()', macros, and characters read from the keyboard. + While waiting for input, this function will call any function + assigned to the `rl_event_hook' variable. + + -- Function: int rl_getc (FILE *stream) + Return the next character available from STREAM, which is assumed + to be 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()'. Up to 512 characters may be pushed back. + `rl_stuff_char' returns 1 if the character was successfully + inserted; 0 otherwise. + + -- Function: int rl_execute_next (int c) + Make C be the next command to be executed when `rl_read_key()' is + called. This sets RL_PENDING_INPUT. + + -- Function: int rl_clear_pending_input (void) + Unset RL_PENDING_INPUT, effectively negating the effect of any + previous call to `rl_execute_next()'. This works only if the + pending input has not already been read with `rl_read_key()'. + + -- Function: int rl_set_keyboard_input_timeout (int u) + While waiting for keyboard input in `rl_read_key()', Readline will + wait for U microseconds for input before calling any function + assigned to `rl_event_hook'. U must be greater than or equal to + zero (a zero-length timeout is equivalent to a poll). The default + waiting period is one-tenth of a second. Returns the old timeout + value. + + +File: readline.info, Node: Terminal Management, Next: Utility Functions, Prev: Character Input, Up: Readline Convenience Functions + +2.4.9 Terminal Management +------------------------- + + -- Function: void rl_prep_terminal (int meta_flag) + Modify the terminal settings for Readline's use, so `readline()' + can read a single character at a time from the keyboard. The + META_FLAG argument should be non-zero if Readline should read + eight-bit input. + + -- Function: void rl_deprep_terminal (void) + Undo the effects of `rl_prep_terminal()', leaving the terminal in + the state in which it was before the most recent call to + `rl_prep_terminal()'. + + -- Function: void rl_tty_set_default_bindings (Keymap kmap) + Read the operating system's terminal editing characters (as would + be displayed by `stty') to their Readline equivalents. The + bindings are performed in KMAP. + + -- Function: void rl_tty_unset_default_bindings (Keymap kmap) + Reset the bindings manipulated by `rl_tty_set_default_bindings' so + that the terminal editing characters are bound to `rl_insert'. + The bindings are performed in KMAP. + + -- Function: int rl_reset_terminal (const char *terminal_name) + Reinitialize Readline's idea of the terminal settings using + TERMINAL_NAME as the terminal type (e.g., `vt100'). If + TERMINAL_NAME is `NULL', the value of the `TERM' environment + variable is used. + + +File: readline.info, Node: Utility Functions, Next: Miscellaneous Functions, Prev: Terminal Management, Up: Readline Convenience Functions + +2.4.10 Utility Functions +------------------------ + + -- Function: int rl_save_state (struct readline_state *sp) + Save a snapshot of Readline's internal state to SP. The contents + of the READLINE_STATE structure are documented in `readline.h'. + The caller is responsible for allocating the structure. + + -- Function: int rl_restore_state (struct readline_state *sp) + Restore Readline's internal state to that stored in SP, which must + have been saved by a call to `rl_save_state'. The contents of the + READLINE_STATE structure are documented in `readline.h'. The + caller is responsible for freeing the structure. + + -- Function: void rl_free (void *mem) + Deallocate the memory pointed to by MEM. MEM must have been + allocated by `malloc'. + + -- Function: void rl_replace_line (const char *text, int clear_undo) + Replace the contents of `rl_line_buffer' with TEXT. The point and + mark are preserved, if possible. If CLEAR_UNDO is non-zero, the + undo list associated with the current line is cleared. + + -- Function: void 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 (void) + Initialize or re-initialize Readline's internal state. It's not + strictly necessary to call this; `readline()' calls it before + reading any input. + + -- Function: int rl_ding (void) + Ring the terminal bell, obeying the setting of `bell-style'. + + -- Function: int rl_alphabetic (int c) + Return 1 if C is an alphabetic character. + + -- 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::). When + displaying completions, this function sets the number of columns + used for display to the value of `completion-display-width', the + value of the environment variable `COLUMNS', or the screen width, + in that order. + + The following are implemented as macros, defined in `chardefs.h'. +Applications should refrain from using them. + + -- Function: int _rl_uppercase_p (int c) + Return 1 if C is an uppercase alphabetic character. + + -- Function: int _rl_lowercase_p (int c) + Return 1 if C is a lowercase alphabetic character. + + -- Function: int _rl_digit_p (int c) + Return 1 if C is a numeric character. + + -- Function: int _rl_to_upper (int c) + If C is a lowercase alphabetic character, return the corresponding + uppercase character. + + -- Function: int _rl_to_lower (int c) + If C is an uppercase alphabetic character, return the corresponding + lowercase character. + + -- Function: int _rl_digit_value (int c) + If C is a number, return the value it represents. + + +File: readline.info, Node: Miscellaneous Functions, Next: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions + +2.4.11 Miscellaneous Functions +------------------------------ + + -- Function: int rl_macro_bind (const char *keyseq, const char *macro, + Keymap map) + Bind the key sequence KEYSEQ to invoke the macro MACRO. The + binding is performed in MAP. When KEYSEQ is invoked, the MACRO + will be inserted into the line. This function is deprecated; use + `rl_generic_bind()' instead. + + -- Function: void rl_macro_dumper (int readable) + Print the key sequences bound to macros and their values, using + the current keymap, 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: int rl_variable_bind (const char *variable, const char + *value) + Make the Readline variable VARIABLE have VALUE. This behaves as + if the readline command `set VARIABLE VALUE' had been executed in + an `inputrc' file (*note Readline Init File Syntax::). + + -- Function: char * rl_variable_value (const char *variable) + Return a string representing the value of the Readline variable + VARIABLE. For boolean variables, this string is either `on' or + `off'. + + -- Function: void rl_variable_dumper (int readable) + Print the readline variable names and their current values 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: int rl_set_paren_blink_timeout (int u) + Set the time interval (in microseconds) that Readline waits when + showing a balancing character when `blink-matching-paren' has been + enabled. + + -- Function: char * rl_get_termcap (const char *cap) + Retrieve the string value of the termcap capability CAP. Readline + fetches the termcap entry for the current terminal name and uses + those capabilities to move around the screen line and perform other + terminal-specific operations, like erasing a line. Readline does + not use all of a terminal's capabilities, and this function will + return values for only those capabilities Readline uses. + + +File: readline.info, Node: Alternate Interface, Next: A Readline Example, Prev: Miscellaneous Functions, Up: Readline Convenience Functions + +2.4.12 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 (const char *prompt, + rl_vcpfunc_t *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 + function to call when a complete line of input has been entered. + The function takes the text of the line as an argument. + + -- Function: void rl_callback_read_char (void) + 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. Before calling the LHANDLER function, the + terminal settings are reset to the values they had before calling + `rl_callback_handler_install'. If the LHANDLER function returns, + the terminal settings are modified for Readline's use again. + `EOF' is indicated by calling LHANDLER with a `NULL' line. + + -- Function: void rl_callback_handler_remove (void) + Restore the terminal to its initial state and remove the line + handler. This may be called from within a callback as well as + independently. If the LHANDLER installed by + `rl_callback_handler_install' does not exit the program, either + this function or the function referred to by the value of + `rl_deprep_term_function' should be called before the program + exits to reset the terminal settings. + + +File: readline.info, Node: A Readline Example, Prev: Alternate Interface, Up: Readline Convenience Functions + +2.4.13 A Readline 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 (_rl_uppercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); + else if (_rl_lowercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_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 + +2.5 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 such a signal is +received in order 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()' below). + + 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 information, 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()' or `rl_set_screen_size()' to force Readline +to update its idea of the terminal size when a `SIGWINCH' is received. + + -- Function: void rl_echo_signal_char (int sig) + If an application wishes to install its own signal handlers, but + still have readline display characters that generate signals, + calling this function with SIG set to `SIGINT', `SIGQUIT', or + `SIGTSTP' will display the character generating that signal. + + -- Function: void rl_resize_terminal (void) + Update Readline's internal screen size by reading values from the + kernel. + + -- Function: void rl_set_screen_size (int rows, int cols) + Set Readline's idea of the terminal size to ROWS rows and COLS + columns. If either ROWS or COLUMNS is less than or equal to 0, + Readline's idea of that terminal dimension is unchanged. + + If an application does not want to install a `SIGWINCH' handler, but +is still interested in the screen dimensions, Readline's idea of the +screen size may be queried. + + -- Function: void rl_get_screen_size (int *rows, int *cols) + Return Readline's idea of the terminal's size in the variables + pointed to by the arguments. + + -- Function: void rl_reset_screen_size (void) + Cause Readline to reobtain the screen size and recalculate its + dimensions. + + 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 + +2.6 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 + +2.6.1 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 bindable Readline + functions: COUNT and INVOKING_KEY. It isolates the word to be + completed and calls `rl_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 `rl_completion_matches()' uses an + application-supplied "generator" function to generate the list of + possible matches, and then returns the array of these matches. + The caller should place the address of its generator function in + `rl_completion_entry_function'. + + 3. The generator function is called repeatedly from + `rl_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. The generator function returns `(char *)NULL' to + inform `rl_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. Such a + generator function is referred to as an "application-specific + completion function". + + + -- 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 `rl_completion_matches()'). The default is to do filename + completion. + + -- Variable: rl_compentry_func_t * rl_completion_entry_function + This is a pointer to the generator function for + `rl_completion_matches()'. If the value of + `rl_completion_entry_function' is `NULL' then the default filename + generator function, `rl_filename_completion_function()', is used. + An "application-specific completion function" is a function whose + address is assigned to `rl_completion_entry_function' and whose + return values are used to generate possible completions. + + +File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers + +2.6.2 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. `@' is similar to `!', but + possible completions are not listed if the possible completions + share a common prefix. + + -- 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 `rl_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: int rl_completion_mode (rl_command_func_t *cfunc) + Returns the apppriate value to pass to `rl_complete_internal()' + depending on whether CFUNC was called twice in succession and the + values of the `show-all-if-ambiguous' and `show-all-if-unmodified' + variables. Application-specific completion functions may use this + function to present the same interface as `rl_complete()'. + + -- Function: char ** rl_completion_matches (const char *text, + rl_compentry_func_t *entry_func) + Returns an array of strings which is a list of completions for + TEXT. If there are no completions, returns `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 * rl_filename_completion_function (const char *text, + int state) + A generator function for filename completion in the general case. + TEXT is a partial filename. The Bash source is a useful reference + for writing application-specific completion functions (the Bash + completion functions call this and other Readline functions). + + -- Function: char * rl_username_completion_function (const 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 + +2.6.3 Completion Variables +-------------------------- + + -- Variable: rl_compentry_func_t * rl_completion_entry_function + A pointer to the generator function for `rl_completion_matches()'. + `NULL' means to use `rl_filename_completion_function()', the + default filename completer. + + -- Variable: rl_completion_func_t * 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' defining the boundaries of TEXT, which + is a character string. 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. If + this function sets the `rl_attempted_completion_over' variable to + a non-zero value, Readline will not perform its default completion + even if this function returns no matches. + + -- Variable: rl_quote_func_t * 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: rl_dequote_func_t * 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: rl_linebuf_func_t * 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: rl_compignore_func_t * 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: rl_icppfunc_t * rl_directory_completion_hook + This function, if defined, is allowed to modify the directory + portion of filenames Readline completes. It could be used to + expand symbolic links or shell variables in pathnames. It is + called with the address of a string (the current directory name) + as an argument, and may modify that string. If the string is + replaced with a new string, the old value should be freed. Any + modified directory name should have a trailing slash. The + modified value will be used as part of the completion, replacing + the directory portion of the pathname the user typed. At the + least, even if no other expansion is performed, this function + should remove any quote characters from the directory name, + because its result will be passed directly to `opendir()'. The + directory completion hook returns an integer that should be + non-zero if the function modifies its directory argument. The + function should not modify the directory argument if it returns 0. + + -- Variable: rl_dequote_func_t * rl_filename_rewrite_hook + If non-zero, this is the address of a function called when reading + directory entries from the filesystem for completion and comparing + them to the partial word to be completed. The function should + perform any necesary application or system-specific conversion on + the filename, such as converting between character sets or + converting from a filesystem format to a character input format. + The function takes two arguments: FNAME, the filename to be + converted, and FNLEN, its length in bytes. It must either return + its first argument (if no conversion takes place) or the converted + filename in newly-allocated memory. The converted form is used to + compare against the word to be completed, and, if it matches, is + added to the list of matches. Readline will free the allocated + string. + + -- Variable: rl_compdisp_func_t * 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. + + -- Variable: const 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: `" + \t\n\"\\'`@$><=;|&{("'. + + -- Variable: const char * rl_basic_quote_characters + A list of quote characters which can cause a word break. + + -- Variable: const 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: rl_cpvfunc_t * rl_completion_word_break_hook + If non-zero, this is the address of a function to call when + Readline is deciding where to separate words for word completion. + It should return a character string like + `rl_completer_word_break_characters' to be used to perform the + current completion. The function may choose to set + `rl_completer_word_break_characters' itself. If the function + returns `NULL', `rl_completer_word_break_characters' is used. + + -- Variable: const char * rl_completer_quote_characters + 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 `rl_completer_word_break_characters' are treated as any + other character, unless they also appear within this list. + + -- Variable: const 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: const 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_query_items + Up to this many items will be displayed in response to a + possible-completions call. After that, readline asks the user if + she is sure she wants to see them all. The default value is 100. + A negative value indicates that Readline should never ask the user. + + -- 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 application-specific + completion functions to provide the "most sensible word separator + character" according to an application-specific command line + syntax specification. + + -- Variable: int rl_completion_suppress_append + If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to + matches at the end of the command line, as described above. It is + set to 0 before any application-specific completion function is + called, and may only be changed within such a function. + + -- Variable: int rl_completion_quote_character + When Readline is completing quoted text, as delimited by one of the + characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable + to the quoting character found. This is set before any + application-specific completion function is called. + + -- Variable: int rl_completion_suppress_quote + If non-zero, Readline does not append a matching quote character + when performing completion on a quoted string. It is set to 0 + before any application-specific completion function is called, and + may only be changed within such a function. + + -- Variable: int rl_completion_found_quote + When Readline is completing quoted text, it sets this variable to + a non-zero value if the word being completed contains or is + delimited by any quoting characters, including backslashes. This + is set before any application-specific completion function is + called. + + -- Variable: int rl_completion_mark_symlink_dirs + If non-zero, a slash will be appended to completed filenames that + are symbolic links to directory names, subject to the value of the + user-settable MARK-DIRECTORIES variable. This variable exists so + that application-specific completion functions can override the + user's global preference (set via the MARK-SYMLINKED-DIRECTORIES + Readline variable) if appropriate. This variable is set to the + user's preference before any application-specific completion + function is called, so unless that function modifies the value, + the user's preferences are honored. + + -- Variable: int rl_ignore_completion_duplicates + If non-zero, then duplicates in the matches are removed. The + 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 when completion is attempted, + and can only be changed within an application-specific completion + function. If it is set to a non-zero value by such a function, + directory names have a slash appended and Readline attempts to + quote completed filenames if they contain any characters in + `rl_filename_quote_characters' and `rl_filename_quoting_desired' + is set to a non-zero value. + + -- 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 when + completion is attempted, and can only be changed within an + application-specific completion function. The quoting is effected + via a call to the function pointed to by + `rl_filename_quoting_function'. + + -- Variable: int rl_attempted_completion_over + If an application-specific completion function assigned to + `rl_attempted_completion_function' sets this variable to a non-zero + value, Readline will not perform its default filename completion + even if the application's completion function returns no matches. + It should be set only by an application's completion function. + + -- Variable: int rl_sort_completion_matches + If an application sets this variable to 0, Readline will not sort + the list of completions (which implies that it cannot remove any + duplicate completions). The default value is 1, which means that + Readline will sort the completions and, depending on the value of + `rl_ignore_completion_duplicates', will attempt to remove duplicate + matches. + + -- Variable: int rl_completion_type + Set to a character describing the type of completion Readline is + currently attempting; see the description of + `rl_complete_internal()' (*note Completion Functions::) for the + list of characters. This is set to the appropriate value before + any application-specific completion function is called, allowing + such functions to present the same interface as `rl_complete()'. + + -- Variable: int rl_completion_invoking_key + Set to the final character in the key sequence that invoked one of + the completion functions that call `rl_complete_internal()'. This + is set to the appropriate value before any application-specific + completion function is called. + + -- Variable: int rl_inhibit_completion + If this variable is non-zero, completion is inhibited. The + completion character will be inserted as any other bound to + `self-insert'. + + +File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers + +2.6.4 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. */ + + #ifdef HAVE_CONFIG_H + # include <config.h> + #endif + + #include <sys/types.h> + #ifdef HAVE_SYS_FILE_H + # include <sys/file.h> + #endif + #include <sys/stat.h> + + #ifdef HAVE_UNISTD_H + # include <unistd.h> + #endif + + #include <fcntl.h> + #include <stdio.h> + #include <errno.h> + + #if defined (HAVE_STRING_H) + # include <string.h> + #else /* !HAVE_STRING_H */ + # include <strings.h> + #endif /* !HAVE_STRING_H */ + + #ifdef HAVE_STDLIB_H + # include <stdlib.h> + #endif + + #include <time.h> + + #include <readline/readline.h> + #include <readline/history.h> + + extern char *xmalloc PARAMS((size_t)); + + /* The names of functions that actually do the manipulation. */ + int com_list PARAMS((char *)); + int com_view PARAMS((char *)); + int com_rename PARAMS((char *)); + int com_stat PARAMS((char *)); + int com_pwd PARAMS((char *)); + int com_delete PARAMS((char *)); + int com_help PARAMS((char *)); + int com_cd PARAMS((char *)); + int com_quit PARAMS((char *)); + + /* A structure which contains information on the commands this program + can understand. */ + + typedef struct { + char *name; /* User printable name of the function. */ + rl_icpfunc_t *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, (rl_icpfunc_t *)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) + char *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 PARAMS((const char *, int)); + char **fileman_completion PARAMS((const char *, int, int)); + + /* 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 = 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) + const 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 = rl_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) + const 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; + + #if defined (__MSDOS__) + /* more.com doesn't grok slashes in pathnames */ + sprintf (syscom, "less %s", arg); + #else + sprintf (syscom, "more %s", arg); + #endif + 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 = getcwd (dir, sizeof(dir) - 1); + 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: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU Readline, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top + +Concept Index +************* + + +* Menu: + +* application-specific completion functions: Custom Completers. + (line 6) +* command editing: Readline Bare Essentials. + (line 6) +* editing command lines: Readline Bare Essentials. + (line 6) +* initialization file, readline: Readline Init File. (line 6) +* interaction, readline: Readline Interaction. (line 6) +* kill ring: Readline Killing Commands. + (line 19) +* killing text: Readline Killing Commands. + (line 6) +* notation, readline: Readline Bare Essentials. + (line 6) +* readline, function: Basic Behavior. (line 12) +* variables, readline: Readline Init File Syntax. + (line 34) +* yanking text: Readline Killing Commands. + (line 6) + + +File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top + +Function and Variable Index +*************************** + + +* Menu: + +* _rl_digit_p: Utility Functions. (line 65) +* _rl_digit_value: Utility Functions. (line 76) +* _rl_lowercase_p: Utility Functions. (line 62) +* _rl_to_lower: Utility Functions. (line 72) +* _rl_to_upper: Utility Functions. (line 68) +* _rl_uppercase_p: Utility Functions. (line 59) +* abort (C-g): Miscellaneous Commands. + (line 10) +* accept-line (Newline or Return): Commands For History. + (line 6) +* backward-char (C-b): Commands For Moving. (line 15) +* backward-delete-char (Rubout): Commands For Text. (line 11) +* backward-kill-line (C-x Rubout): Commands For Killing. + (line 9) +* backward-kill-word (M-<DEL>): Commands For Killing. + (line 24) +* backward-word (M-b): Commands For Moving. (line 22) +* beginning-of-history (M-<): Commands For History. + (line 19) +* beginning-of-line (C-a): Commands For Moving. (line 6) +* bell-style: Readline Init File Syntax. + (line 35) +* bind-tty-special-chars: Readline Init File Syntax. + (line 42) +* call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) +* capitalize-word (M-c): Commands For Text. (line 49) +* character-search (C-]): Miscellaneous Commands. + (line 41) +* character-search-backward (M-C-]): Miscellaneous Commands. + (line 46) +* clear-screen (C-l): Commands For Moving. (line 26) +* comment-begin: Readline Init File Syntax. + (line 47) +* complete (<TAB>): Commands For Completion. + (line 6) +* completion-display-width: Readline Init File Syntax. + (line 52) +* completion-ignore-case: Readline Init File Syntax. + (line 59) +* completion-map-case: Readline Init File Syntax. + (line 64) +* completion-prefix-display-length: Readline Init File Syntax. + (line 70) +* completion-query-items: Readline Init File Syntax. + (line 77) +* convert-meta: Readline Init File Syntax. + (line 87) +* copy-backward-word (): Commands For Killing. + (line 49) +* copy-forward-word (): Commands For Killing. + (line 54) +* copy-region-as-kill (): Commands For Killing. + (line 45) +* delete-char (C-d): Commands For Text. (line 6) +* delete-char-or-list (): Commands For Completion. + (line 39) +* delete-horizontal-space (): Commands For Killing. + (line 37) +* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) +* disable-completion: Readline Init File Syntax. + (line 93) +* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. + (line 14) +* downcase-word (M-l): Commands For Text. (line 45) +* dump-functions (): Miscellaneous Commands. + (line 70) +* dump-macros (): Miscellaneous Commands. + (line 82) +* dump-variables (): Miscellaneous Commands. + (line 76) +* editing-mode: Readline Init File Syntax. + (line 98) +* enable-keypad: Readline Init File Syntax. + (line 109) +* end-kbd-macro (C-x )): Keyboard Macros. (line 9) +* end-of-history (M->): Commands For History. + (line 22) +* end-of-line (C-e): Commands For Moving. (line 9) +* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. + (line 36) +* expand-tilde: Readline Init File Syntax. + (line 120) +* forward-backward-delete-char (): Commands For Text. (line 15) +* forward-char (C-f): Commands For Moving. (line 12) +* forward-search-history (C-s): Commands For History. + (line 30) +* forward-word (M-f): Commands For Moving. (line 18) +* history-preserve-point: Readline Init File Syntax. + (line 124) +* history-search-backward (): Commands For History. + (line 50) +* history-search-forward (): Commands For History. + (line 45) +* history-size: Readline Init File Syntax. + (line 130) +* horizontal-scroll-mode: Readline Init File Syntax. + (line 135) +* input-meta: Readline Init File Syntax. + (line 142) +* insert-comment (M-#): Miscellaneous Commands. + (line 60) +* insert-completions (M-*): Commands For Completion. + (line 18) +* isearch-terminators: Readline Init File Syntax. + (line 149) +* keymap: Readline Init File Syntax. + (line 156) +* kill-line (C-k): Commands For Killing. + (line 6) +* kill-region (): Commands For Killing. + (line 41) +* kill-whole-line (): Commands For Killing. + (line 15) +* kill-word (M-d): Commands For Killing. + (line 19) +* mark-modified-lines: Readline Init File Syntax. + (line 169) +* mark-symlinked-directories: Readline Init File Syntax. + (line 174) +* match-hidden-files: Readline Init File Syntax. + (line 179) +* menu-complete (): Commands For Completion. + (line 22) +* menu-complete-backward (): Commands For Completion. + (line 34) +* menu-complete-display-prefix: Readline Init File Syntax. + (line 186) +* meta-flag: Readline Init File Syntax. + (line 142) +* next-history (C-n): Commands For History. + (line 16) +* non-incremental-forward-search-history (M-n): Commands For History. + (line 40) +* non-incremental-reverse-search-history (M-p): Commands For History. + (line 35) +* output-meta: Readline Init File Syntax. + (line 191) +* overwrite-mode (): Commands For Text. (line 53) +* page-completions: Readline Init File Syntax. + (line 196) +* possible-completions (M-?): Commands For Completion. + (line 11) +* prefix-meta (<ESC>): Miscellaneous Commands. + (line 18) +* previous-history (C-p): Commands For History. + (line 12) +* quoted-insert (C-q or C-v): Commands For Text. (line 20) +* re-read-init-file (C-x C-r): Miscellaneous Commands. + (line 6) +* readline: Basic Behavior. (line 12) +* redraw-current-line (): Commands For Moving. (line 30) +* reverse-search-history (C-r): Commands For History. + (line 26) +* revert-all-at-newline: Readline Init File Syntax. + (line 206) +* revert-line (M-r): Miscellaneous Commands. + (line 25) +* rl_add_defun: Function Naming. (line 20) +* rl_add_funmap_entry: Associating Function Names and Bindings. + (line 47) +* rl_add_undo: Allowing Undoing. (line 41) +* rl_alphabetic: Utility Functions. (line 39) +* rl_already_prompted: Readline Variables. (line 64) +* rl_attempted_completion_function: Completion Variables. + (line 12) +* rl_attempted_completion_over: Completion Variables. + (line 226) +* rl_basic_quote_characters: Completion Variables. + (line 115) +* rl_basic_word_break_characters: Completion Variables. + (line 109) +* rl_begin_undo_group: Allowing Undoing. (line 29) +* rl_bind_key: Binding Keys. (line 22) +* rl_bind_key_if_unbound: Binding Keys. (line 32) +* rl_bind_key_if_unbound_in_map: Binding Keys. (line 38) +* rl_bind_key_in_map: Binding Keys. (line 27) +* rl_bind_keyseq: Binding Keys. (line 59) +* rl_bind_keyseq_if_unbound: Binding Keys. (line 77) +* rl_bind_keyseq_if_unbound_in_map: Binding Keys. (line 83) +* rl_bind_keyseq_in_map: Binding Keys. (line 66) +* rl_binding_keymap: Readline Variables. (line 159) +* rl_callback_handler_install: Alternate Interface. (line 15) +* rl_callback_handler_remove: Alternate Interface. (line 33) +* rl_callback_read_char: Alternate Interface. (line 21) +* rl_catch_signals: Readline Signal Handling. + (line 48) +* rl_catch_sigwinch: Readline Signal Handling. + (line 55) +* rl_char_is_quoted_p: Completion Variables. + (line 46) +* rl_cleanup_after_signal: Readline Signal Handling. + (line 66) +* rl_clear_message: Redisplay. (line 48) +* rl_clear_pending_input: Character Input. (line 30) +* rl_clear_signals: Readline Signal Handling. + (line 125) +* rl_complete <1>: Completion Functions. + (line 20) +* rl_complete: How Completing Works. + (line 49) +* rl_complete_internal: Completion Functions. + (line 10) +* rl_completer_quote_characters: Completion Variables. + (line 132) +* rl_completer_word_break_characters: Completion Variables. + (line 118) +* rl_completion_append_character: Completion Variables. + (line 156) +* rl_completion_display_matches_hook: Completion Variables. + (line 96) +* rl_completion_entry_function <1>: How Completing Works. + (line 55) +* rl_completion_entry_function: Completion Variables. + (line 7) +* rl_completion_found_quote: Completion Variables. + (line 184) +* rl_completion_invoking_key: Completion Variables. + (line 249) +* rl_completion_mark_symlink_dirs: Completion Variables. + (line 191) +* rl_completion_matches: Completion Functions. + (line 45) +* rl_completion_mode: Completion Functions. + (line 37) +* rl_completion_query_items: Completion Variables. + (line 150) +* rl_completion_quote_character: Completion Variables. + (line 172) +* rl_completion_suppress_append: Completion Variables. + (line 166) +* rl_completion_suppress_quote: Completion Variables. + (line 178) +* rl_completion_type: Completion Variables. + (line 241) +* rl_completion_word_break_hook: Completion Variables. + (line 123) +* rl_copy_keymap: Keymaps. (line 17) +* rl_copy_text: Modifying Text. (line 15) +* rl_crlf: Redisplay. (line 30) +* rl_delete_text: Modifying Text. (line 11) +* rl_deprep_term_function: Readline Variables. (line 149) +* rl_deprep_terminal: Terminal Management. (line 13) +* rl_ding: Utility Functions. (line 36) +* rl_directory_completion_hook: Completion Variables. + (line 64) +* rl_discard_keymap: Keymaps. (line 26) +* rl_dispatching: Readline Variables. (line 41) +* rl_display_match_list: Utility Functions. (line 43) +* rl_display_prompt: Readline Variables. (line 59) +* rl_do_undo: Allowing Undoing. (line 48) +* rl_done: Readline Variables. (line 28) +* rl_echo_signal_char: Readline Signal Handling. + (line 89) +* rl_editing_mode: Readline Variables. (line 270) +* rl_end: Readline Variables. (line 19) +* rl_end_undo_group: Allowing Undoing. (line 35) +* rl_erase_empty_line: Readline Variables. (line 47) +* rl_event_hook: Readline Variables. (line 124) +* rl_execute_next: Character Input. (line 26) +* rl_executing_keymap: Readline Variables. (line 155) +* rl_executing_macro: Readline Variables. (line 163) +* rl_expand_prompt: Redisplay. (line 64) +* rl_explicit_arg: Readline Variables. (line 261) +* rl_extend_line_buffer: Utility Functions. (line 27) +* rl_filename_completion_desired: Completion Variables. + (line 206) +* rl_filename_completion_function: Completion Functions. + (line 59) +* rl_filename_dequoting_function: Completion Variables. + (line 37) +* rl_filename_quote_characters: Completion Variables. + (line 138) +* rl_filename_quoting_desired: Completion Variables. + (line 216) +* rl_filename_quoting_function: Completion Variables. + (line 24) +* rl_filename_rewrite_hook: Completion Variables. + (line 81) +* rl_forced_update_display: Redisplay. (line 11) +* rl_free: Utility Functions. (line 18) +* rl_free_keymap: Keymaps. (line 30) +* rl_free_line_state: Readline Signal Handling. + (line 72) +* rl_free_undo_list: Allowing Undoing. (line 45) +* rl_function_dumper: Associating Function Names and Bindings. + (line 30) +* rl_function_of_keyseq: Associating Function Names and Bindings. + (line 15) +* rl_funmap_names: Associating Function Names and Bindings. + (line 40) +* rl_generic_bind: Binding Keys. (line 89) +* rl_get_keymap: Keymaps. (line 37) +* rl_get_keymap_by_name: Keymaps. (line 43) +* rl_get_keymap_name: Keymaps. (line 48) +* rl_get_screen_size: Readline Signal Handling. + (line 108) +* rl_get_termcap: Miscellaneous Functions. + (line 42) +* rl_getc: Character Input. (line 15) +* rl_getc_function: Readline Variables. (line 130) +* rl_gnu_readline_p: Readline Variables. (line 83) +* rl_ignore_completion_duplicates: Completion Variables. + (line 202) +* rl_ignore_some_completions_function: Completion Variables. + (line 56) +* rl_inhibit_completion: Completion Variables. + (line 255) +* rl_initialize: Utility Functions. (line 31) +* rl_insert_completions: Completion Functions. + (line 32) +* rl_insert_text: Modifying Text. (line 7) +* rl_instream: Readline Variables. (line 97) +* rl_invoking_keyseqs: Associating Function Names and Bindings. + (line 21) +* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. + (line 26) +* rl_kill_text: Modifying Text. (line 19) +* rl_last_func: Readline Variables. (line 110) +* rl_library_version: Readline Variables. (line 73) +* rl_line_buffer: Readline Variables. (line 9) +* rl_list_funmap_names: Associating Function Names and Bindings. + (line 36) +* rl_macro_bind: Miscellaneous Functions. + (line 8) +* rl_macro_dumper: Miscellaneous Functions. + (line 14) +* rl_make_bare_keymap: Keymaps. (line 12) +* rl_make_keymap: Keymaps. (line 20) +* rl_mark: Readline Variables. (line 24) +* rl_message: Redisplay. (line 39) +* rl_modifying: Allowing Undoing. (line 57) +* rl_named_function: Associating Function Names and Bindings. + (line 11) +* rl_num_chars_to_read: Readline Variables. (line 32) +* rl_numeric_arg: Readline Variables. (line 265) +* rl_on_new_line: Redisplay. (line 15) +* rl_on_new_line_with_prompt: Redisplay. (line 19) +* rl_outstream: Readline Variables. (line 101) +* rl_parse_and_bind: Binding Keys. (line 96) +* rl_pending_input: Readline Variables. (line 37) +* rl_point: Readline Variables. (line 15) +* rl_possible_completions: Completion Functions. + (line 28) +* rl_pre_input_hook: Readline Variables. (line 119) +* rl_prefer_env_winsize: Readline Variables. (line 105) +* rl_prep_term_function: Readline Variables. (line 142) +* rl_prep_terminal: Terminal Management. (line 7) +* rl_prompt: Readline Variables. (line 53) +* rl_push_macro_input: Modifying Text. (line 26) +* rl_read_init_file: Binding Keys. (line 101) +* rl_read_key: Character Input. (line 7) +* rl_readline_name: Readline Variables. (line 92) +* rl_readline_state: Readline Variables. (line 166) +* rl_readline_version: Readline Variables. (line 76) +* rl_redisplay: Redisplay. (line 7) +* rl_redisplay_function: Readline Variables. (line 136) +* rl_replace_line: Utility Functions. (line 22) +* rl_reset_after_signal: Readline Signal Handling. + (line 80) +* rl_reset_line_state: Redisplay. (line 26) +* rl_reset_screen_size: Readline Signal Handling. + (line 112) +* rl_reset_terminal: Terminal Management. (line 28) +* rl_resize_terminal: Readline Signal Handling. + (line 95) +* rl_restore_prompt: Redisplay. (line 57) +* rl_restore_state: Utility Functions. (line 12) +* rl_save_prompt: Redisplay. (line 53) +* rl_save_state: Utility Functions. (line 7) +* rl_set_key: Binding Keys. (line 73) +* rl_set_keyboard_input_timeout: Character Input. (line 35) +* rl_set_keymap: Keymaps. (line 40) +* rl_set_paren_blink_timeout: Miscellaneous Functions. + (line 37) +* rl_set_prompt: Redisplay. (line 78) +* rl_set_screen_size: Readline Signal Handling. + (line 99) +* rl_set_signals: Readline Signal Handling. + (line 119) +* rl_show_char: Redisplay. (line 33) +* rl_sort_completion_matches: Completion Variables. + (line 233) +* rl_special_prefixes: Completion Variables. + (line 143) +* rl_startup_hook: Readline Variables. (line 115) +* rl_stuff_char: Character Input. (line 19) +* rl_terminal_name: Readline Variables. (line 87) +* rl_tty_set_default_bindings: Terminal Management. (line 18) +* rl_tty_unset_default_bindings: Terminal Management. (line 23) +* rl_unbind_command_in_map: Binding Keys. (line 55) +* rl_unbind_function_in_map: Binding Keys. (line 51) +* rl_unbind_key: Binding Keys. (line 42) +* rl_unbind_key_in_map: Binding Keys. (line 46) +* rl_username_completion_function: Completion Functions. + (line 66) +* rl_variable_bind: Miscellaneous Functions. + (line 21) +* rl_variable_dumper: Miscellaneous Functions. + (line 31) +* rl_variable_value: Miscellaneous Functions. + (line 26) +* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 27) +* set-mark (C-@): Miscellaneous Commands. + (line 32) +* show-all-if-ambiguous: Readline Init File Syntax. + (line 212) +* show-all-if-unmodified: Readline Init File Syntax. + (line 218) +* skip-completed-text: Readline Init File Syntax. + (line 227) +* skip-csi-sequence (): Miscellaneous Commands. + (line 51) +* start-kbd-macro (C-x (): Keyboard Macros. (line 6) +* transpose-chars (C-t): Commands For Text. (line 30) +* transpose-words (M-t): Commands For Text. (line 36) +* undo (C-_ or C-x C-u): Miscellaneous Commands. + (line 22) +* universal-argument (): Numeric Arguments. (line 10) +* unix-filename-rubout (): Commands For Killing. + (line 32) +* unix-line-discard (C-u): Commands For Killing. + (line 12) +* unix-word-rubout (C-w): Commands For Killing. + (line 28) +* upcase-word (M-u): Commands For Text. (line 41) +* visible-stats: Readline Init File Syntax. + (line 240) +* yank (C-y): Commands For Killing. + (line 59) +* yank-last-arg (M-. or M-_): Commands For History. + (line 64) +* yank-nth-arg (M-C-y): Commands For History. + (line 55) +* yank-pop (M-y): Commands For Killing. + (line 62) + + + +Tag Table: +Node: Top1330 +Node: Command Line Editing1987 +Node: Introduction and Notation2639 +Node: Readline Interaction4262 +Node: Readline Bare Essentials5454 +Node: Readline Movement Commands7244 +Node: Readline Killing Commands8210 +Node: Readline Arguments10131 +Node: Searching11176 +Node: Readline Init File13328 +Node: Readline Init File Syntax14482 +Node: Conditional Init Constructs29543 +Node: Sample Init File32077 +Node: Bindable Readline Commands35195 +Node: Commands For Moving36253 +Node: Commands For History37115 +Node: Commands For Text40520 +Node: Commands For Killing43247 +Node: Numeric Arguments45390 +Node: Commands For Completion46530 +Node: Keyboard Macros48500 +Node: Miscellaneous Commands49072 +Node: Readline vi Mode52929 +Node: Programming with GNU Readline54746 +Node: Basic Behavior55732 +Node: Custom Functions59149 +Node: Readline Typedefs60633 +Node: Function Writing62272 +Node: Readline Variables63579 +Node: Readline Convenience Functions74245 +Node: Function Naming75235 +Node: Keymaps76497 +Node: Binding Keys78490 +Node: Associating Function Names and Bindings83037 +Node: Allowing Undoing85322 +Node: Redisplay87872 +Node: Modifying Text91772 +Node: Character Input93018 +Node: Terminal Management94916 +Node: Utility Functions96352 +Node: Miscellaneous Functions99680 +Node: Alternate Interface101977 +Node: A Readline Example104136 +Node: Readline Signal Handling106039 +Node: Custom Completers112227 +Node: How Completing Works112947 +Node: Completion Functions116261 +Node: Completion Variables119833 +Node: A Short Completion Example133946 +Node: GNU Free Documentation License146725 +Node: Concept Index171918 +Node: Function and Variable Index173439 + +End Tag Table diff --git a/readline-6.2/doc/readline.pdf b/readline-6.2/doc/readline.pdf Binary files differnew file mode 100644 index 0000000..b123a2d --- /dev/null +++ b/readline-6.2/doc/readline.pdf diff --git a/readline-6.2/doc/readline.ps b/readline-6.2/doc/readline.ps new file mode 100644 index 0000000..93dd8d8 --- /dev/null +++ b/readline-6.2/doc/readline.ps @@ -0,0 +1,9142 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software +%%Title: readline.dvi +%%Pages: 74 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 +%%+ CMSLTT10 CMTI10 CMSL10 CMSS10 CMTT9 CMR9 CMMI9 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -D 600 -t letter -o readline.ps readline.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2011.02.08:1112 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A +mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 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/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: CMMI9 +%!PS-AdobeFont-1.1: CMMI9 1.100 +%%CreationDate: 1996 Jul 23 07:53:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-29 -250 1075 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935 +86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505 +DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD +67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF +6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554 +FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7 +22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD +730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F +449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7 +97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A +E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C +AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA +A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599 +B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B +9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E +759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3 +5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2 +BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680 +3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE +2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA +1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB +431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588 +A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433 +30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7 +801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.1: CMR9 1.0 +%%CreationDate: 1991 Aug 20 16:39:59 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 13 /fl put +dup 44 /comma put +dup 45 /hyphen put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +readonly def +/FontBBox{-39 -250 1036 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835 +3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203 +046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E +C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A +A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2 +A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D +731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B +09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1 +49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B +5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B +54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C +C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F +11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AD14F1CBE935942AEC +D4004E6BEF379066FD72209DC88D2E634E79BCC2B98C766CBD92C561F2703F8A +109E6C6CEC7B866F2FC7ADF646BF492E520319F3B949AB5D84AE990B33344A40 +3971F58DFDF8D8D67FA0B8F2A0D884F8C09A5A721319B911DBA0A35903877343 +C37BC36C5EB32353272D1E6ED5FCA611BE319A7E1E842CB7576E7A6E4BCA12E4 +2086286F43226A1549A4FF7492ABD07FBB1EEFDDDDCFD29D8325E262E7C6C0AA +34F6E5E90471F431033742F5BD7B8DFF2F7735FF03526A4B3E7C550BC02BF138 +20EF5BF1805053B714B2D3DEED7015C9AA55F6D4E5671A52177E916107DC1C24 +1A6B08D4D0E553312240DE0B15FCBC1D7BEBED0A277CB194A725042EBADF8C40 +926F53297C0AEE217D9626B555CF3CA2CA2286067C562C5639F2C8D36248F32F +32ECCAE20F5253B14C7A8827C4FCEAC97EA5DAFAD169BD757F6B155EB9D55A65 +002FBF723D774680C5CCD9C22C9912E6BDB205CE0EF255821381A430FB331DF2 +78C42E7445A31C581668B3C8F8F3E9A1AB5C5C8A4DA9865548AAFE4F3D4DD2C9 +68678E4DE398B1774F5EFE662300A1D4AE3DF645FD3BBFCD580E539DD785D970 +1FCE87953CB69D0AE861AF38EB47E578339D91B4C2D748F9705F425512FD576B +9EB3780E9CA494C3D2A88A7F1AE1B96762C34910CFFAB0C5F79ADC3E1B943A72 +A7A9DEF158FF05D81BA4E887665E21147692C6E7F4FC7B0323F519986C2510D1 +1A83196AC7139C56B1DEB3B8A3B33B39531A1DA923191BCC0354FC1012CD78E7 +1A7623989D6A2F46B8C716FDE84759D112DF59D9F5425668D287941F68A095EF +502FF94B4035BB46EAFD5245470E43243B3A6F4F4B30631EAB6FF3D54F1B8C54 +543211DE7404943720568AB7FF3A987636652EE54D45E593A522B6769E6A9B92 +FA8F84E357DE173E75FC9DF297FD52838EB3BDFDFF32FBFBE41350FB4247E69D +2A418989DE2C49B5ACE3ABD2E8784A0A54F0A0987922E0A418E5263794D67A2D +E74F20DCA22DBC738B16F72F45FE4D51F08447C33EE1F96D27C83F27EB606D19 +E169F2AD7A3F5345F1605E0F96F4DBA8CCFCBC57CC7A1AE6B60D00A33E13CBC3 +F82AB4802F2A6B4ACF7D19FB13CE8729884B182EDAE5D21E3085070E4868CE8C +05F96210555561E8F1A863D44E0CBE8E05FA6BE955C48EA8960151F684768C33 +324E61AE682CCA56EC7551034C3E30C057AB889E5E5E0B45C2D0082CC5F4EFCB +6D74A25B1E03716049FE975275FB46343DEFDED630443CC0932C1090F782F415 +3315E6F1709D376505A2400C95C4723B9C32BF192C1D46D6B707A5E8323AD2C7 +E62A300DB09EB298AEF9CC7EFB2D8BDDF6CBA4F57496570B5093D7E730FFB8B9 +8600824CFBD9879B9D6F6E4940AD760C8A9314ACC7FC31C1A74B919604B3DA83 +A943E6A767ABAB506DD2639F1D56D4F1A636A2CA59A79E1B45E811D5EB82DEA9 +135909E9420DB37753EF8B837934164F3545D0D240F5DDC6B38CEA134920B715 +BE6B928B524549C599CD71A60A2A549FC1B2EA68E2761A67F3D39F93F72CDE68 +D11E9258CE8D584C47789878BA3C28E92803D22CFB945166D42E3A627833031B +596EAF89BB06C015463CCFD72807FBFD8A3BDE14CC9FB2DC060A199443B31A85 +C857F30FEA63F01EDA8DA77C41CC332A515D3976A70F716C6E3A16B60CD5F4A6 +26D66E7BD366673DD50FFB463CBD3A5537DD30733C10195386D834AF7EB7789B +92C5971D8C0DF87E1E78018946B1A7D0D4D00BF2BE76639E082C622DDA59852E +01265974B74F8AEEEBD2E208206EFC2629551F3BDF5DEB6C490506036F0E2354 +EB88BDA624E9959E7BC24D6BDC9B1FDCC0FCD4CC82BC1FA903BEC21435C9250B +FACE0ABBD0E2ACC2ABC1183747DA7FC8EDD7F77CFDCE552F825791644CCF89BB +E50CE355F904CD40519CAFD8BEE25732C7C4CA01AD3EA6E9B9A6578354DC7756 +47D1DA4BEBBF0A38B65E6AAB280FEDC6EE7F403A33E26215166F6CF56491EFC3 +240947A96B5FC1C126F86AC56B2B7C28F5FDB2883652F07CDA4E643700F3E62C +AFA3BBED17CAFC04B376BA790406A6F3355871225FD45308DDA791323FFA45E5 +8DCA81C190500F57D666BA1AF5F465592F74EE121856DAC0446FD75905224797 +B6950AF2654398ABEA5CA909F573AB9BC6355DFB6402CED3600415D441A5F613 +D6CC7AF15DB7ECCD4101FD0DFCEDD751D53742086F56D76D59FF56BF0FE08D36 +EB2E0006FF7CDAD219D8A117BB0971DF61CC2EBAE13F3C61DCD732C0A1B5982E +FA9A82EA390A8ECEE8853100232DA6BB55797BE431DF34E87ABABB4E4EA5AEFA +A3D9096B9DE073104ADF5CA8E840D1F8D7D18B9FA9201D222E40E78EE179A297 +66A60A2F4C54053A48C56B7FE47D78B883EEA6BF369407B337C518C4A8521A36 +C3C7462EBF3D967683971100C64EFACA8972A8DC248EE257A0AF3F7F85DC30D5 +276315A876A830602D216B28DCF9E621F3764DB847601C133D004C531E8FF45C +E584754FDC89C1B1FCE30063EC10089C0CB315CA1EEEABF35F1CC26EF3961496 +702F49796643B3E9370599B5A8EFB3828A75383FD733C17D708DD20DAC686BBC +D210C8CB4A42935B60F1470659C41B62B629E381023D212BF79D29FAA4076393 +A3023F9B8D5D558114A7AF42FE9E45D8A91ECA11CE628E616C50105EE11BF8D6 +D03991B9F9C2C4FCE0FB746030A2EA802EB8998E94D4F0AC5E22274CD945800A +B3D82952F9790B7B86A6D3A24500A1B85733138D938F0501476D5520C336CD35 +DF710C8A6F6E9E92545188FA8AF49F9271F8AEC220FC54BD789AEE8A62634D3D +4CF6DA3D5ED42C3AC12992568EAF3EB5D9213AD587D29CA3DA7E6E208F5CFEEF +9040815071DA33F016EB8258C3813AAE3BF169486A02E8C43404F194AD7A1BC3 +2A46825183FFE5082699D7556E2F4A59DD0ED835B9C5EC8F942C0A703CEDB0F9 +C77068BA68AD0697D0C3C86F33C9AC9FD4ED4851AA3033B211218AC92F2A744D +2AA17C2DAC259F88171F7ED8BB1979D07673E16F5CA7A18E4CE78BB22476C2D5 +D08F78429A2433DEC7D7CD2D2391E30D4E8D9006C0755BAEA95FE903ACC4BD0F +9D9922837D3FEEE28BFE34018470D8C91D4EA968ECA1B93AEF9402B1054067D4 +3DA1DB14B96B96E9884CCF9B461273CDC224D5D79AD15FF57CBE9560F9F67A02 +4FCB320805E9C261BEC5EAF37B76F1A684B39B9911669E1772DEABF1FF131244 +C2A60413854F84CDBB2CA0D93241D2900161CAC9E9BFEE211102D9F5A18F383C +73F3627599589A3F0F2DFA4DE7AF33D6AC26AC0019F6C7E132B7724A8D4AD068 +64F81D26912089399AF5ED009375DB4DD51B8B274EB51EB6970A8F389946CE92 +390EB30FDC302380B9A18144E09EEB604001426CE1363A4946C015901E28BEAA +9B8026BF9D1225D741AEA87AC73C2A906A1CE906935C7273FB5B0D22832F6C99 +E6F698234DF5C3050DF46A51FD39BD43C6F9EBF83C76201152C797258FF01930 +6D47F15EFFA39887ED307174D7A0A1D198C93624A681F5F248096D8739B8B048 +9835310371E03AD967C6F81898956C53B00F891CD2BBC5EDCEA494694BACE089 +4E1338305A2F0B1475E87112270128312E8945F623B2893DA5D71AD9146773B5 +E23852F205214CEA0DAB998D6B61D47B531CA74D927C67405AA67A5A4CBD4B06 +07ABFE4E39139705739BFB944B0B1854306D385A368C8EB8A4AB820BFCA2D13D +C41FDE331CEECA12E55A92FE15E82A942EB17F2323AE76D70C0B58FED17E9EC9 +23A31F79DD1C0B8143A769A17BD7B9DA623B6A85EF5E04B2C37AEE7AE7D4F3EF +89C13761A40D0A684B97BD00D86AAFCB9D61D676702CDE89C703229B0B983DA1 +84474B233805DA7458F31D2B388C19AE2A5D55E7E2C021DCE2568124B9C65318 +7D2419852A7C3E782E65577C7A5B7EDE359520410022885395630A83A75ACA3E +487D878EDD0150D49F4AE2BE404736DAEC3FD3F399767E9442EF7712BBC4B465 +09723E1451DAA8BED3FDFC5A18B1520C43D2E9BE9AE51F805589305E6927F294 +DFC5439C09C9AD1B416F753656B197E3222DE448E3921DB5B669E10B78AD4A74 +54F879A1C6502528EA7FA622E3532786720EAC1FFE950AB23D232D30BBA0BBB7 +35108A8249D117096D478501F0F44951A19B9EE2E622D458D4E11BBC89668E07 +ED1F6528A487C1C11BEE5D4347602BF89904EA443C21BD9BEEEEE235AF511BE9 +0D5E9EDC91A61CE4936846D33BF3C865BDA00A6F71A5CA7F689F2903117245C7 +6DA1D0B9719C0907DC323CC7B23085C69CEF7D978919E7CD59E8778B71EF84CB +809FDEC2FDB6041C4E3E4BD1DDBF0DEF5904F9C7E8B13F7DCC108C6DBEC54A98 +1A857C3D6409006F2A7C0C6C6630D22902FC369632710BE765AF27F47137D52A +0E4DB396B8E52CE5D17176F5EB924CC12AE87870525FB6CE8284FE29869BD98D +F0F34EE2E85A0C83CB3ED6F8832729CB2905CD68D1B3CE93FE74594FDB08D75A +D099CA9AE015F396B5D6C4E0D35DDF566179B8CF5793C0D93D2C16A9B7F4E4AF +BB65316C8EFCEE6BFA0CAAF915CB43726F31BEED9A49CEBB22869C79DF80C7E6 +1D17CE31A53FAC643E0AC03FE5C7081CE023877A3C214A028E2596E3D3685268 +D85850A4ADB867D2C4BFB589B1F5247E317D4A1AFABFB17DFA0E76335AE25128 +4D89BBAEB1C05F2734AA78530482CAD30AF5448E0D8A0C19B5830FAD63F73118 +2E9BA785477AFC727D200E393612869DB66C6253C5F13F27FC1855E315D73FA6 +2A42FFBA17CA52934DFC4FC7C548A0C751E9E18F8AE45BBE25E68D5B95E0BF60 +82C28426DC6E1842A1FF6E2D2803E3732EAC874FDCC92C00FE3462A60DD51EF9 +304DF3135CB0865C96AD62E2D2947F9E04ABF144916083C61BED35C9A6DF7CF0 +6FF9B3C98AE848785BA4561ADF24C27292601E11990A2E88774FEC8D46A5D813 +AA4965778CA603D09054C38278CC1D749628C1FFB59D5236F313988AA64EFE0D +5B002D463124844922A10D3CD7810A847085B67A9813A24A225F5AAA4F4C66A8 +B26AAC57A279E2D6E6C7DA723DB118A183B782BB667329EDFD901585773705DA +E855515DC19227349EDD8B770C8371408EBA91BA4E64CA6E37085CC6BB05E773 +DD1046147BD67FC57BD4E748EAE63EA66895EC0D6CFB75E7F7A81B08D1E5CADC +79C04E9DE88611BA3B063D865C56D9AFA136DC2263634104CB3DD1D0C2053B53 +B010C058015B8726A20291C464981FEA208CA36023E1A5E7312E0D0EF6BD8C54 +ADFB488F2C81B265F0359A4F8356C6C8BA82CDA17FF91AEC7D9A3FA88F85B995 +698FC4024C6E8B12EA1189257B38E3814D50DE90BEB69808A6FFA2AC0CEE48DD +53E04D7B2442F2BBA36683BE5B6C50D55E1E5FB8EC804E126252DBE720C13790 +CBB8BC864156CB75F0BF923500F503E7E49838E4BEB76C594A9275E7D28CF9BF +2B48389285325E979FBFE0E35E1DA7FC23E122DD4D6344A3A7709F422B60520C +F6000B24045BBFE30D3E5EB35BEB48E26AAC37040D490851F1017E6F41E37135 +6A76F41BD27834CF3691C60F48AA508E8B276B2741941E4DB35CF42FC74A81CE +57429351B4EF9B429DDC4206948FE10F6D4AAD93C89C0A31E72A10D81F1A3B32 +8B08CD379B6126A607D1DC52C75786B6E76CD788FE7B0350E5D272159F70592C +7BB387B87117B59F14C4171FBFDC6CADEBAB572B8109F916D8CA5F71D00223FE +09B3D6709FB136D9CF4473629DB98FF10DC4EFEC5F0D22A717B098EB38928A53 +B457B5F90DA732EA3613A5AC30A91E220DB4DBEDF6B0B4C6F05774B994BBCE90 +1DC703882BE03FFFA973D6A27E26F2CE02FCF68FB64EFBC2FC453DC009985AF3 +28A924F5AFE61D8FA24484979104CE7267C71D018531521C205A692B2341A716 +8DB082AB32B9575193A0EE526119280A3F8C7CAEBA58E2AACD83F6B12F159B4F +21A5953FA0F061BBFDB1360D9453D1F8A9DDD2ABB031A3968AA9A97A5D7C497A +7F0D57FE59E319E06D77114E87803D8699C5C29E454DD168623F29D0FA61D832 +98738F6856A9B294233EF363DE84749AAD95212F3B350698D07B4068E1F21C63 +3B3917E6F79FBD02A3D9399AB18AAFF22B076C0D2F677B684476CA079F881C3A +D71D6903A75CB9931C78AFDAADF5B75B44A52E0025F406314E8DCF1CBE6B3165 +AAB0AEC77592BCC95C8858EFD33A945923ED8EEBCD7005129E7AF3CBFADF28D7 +C9CD1702D5F1E3518C695E831D2D3DFFEC6897968E4A4599E912BBD958EB12C7 +25DABD18A816CFAAFDDC8D0A88802636BD2CC81587B19E91BD99712E41CE0ACF +1C1745430054851077985E5FEF38A73272C56BE0DDD2F9B3973FE06F62DEA8E7 +B6CC46558B784D0BB5162F143B3959AEB720E6AC3F122E8383066B914D391541 +75C2D47E07C4DF14FD75E96F19788374A6CF218472ACA936078B9C245F40C812 +30D351323881A7CC553F0B9DF5E0E90753D41582A1A1F6E932BCA3853DB1A6D5 +07E4DBA91CD26EFAEB573A0C2D8EC879BD271F3619AEF841B4BB26EEB85A3C86 +AB33D5E94C594197134730A2061AEAF90E4E5A4FEBDECBEDA77588B8F0C02644 +B5DF17DAD9048C85EB0DCCBDE45C6B0BFE690C687C2BFDA900A484DA948D008C +CD087DF0CB9F74E3DDD27D12E4C970BD55D097AE007652DD43F74D3B63C0B619 +72F16998E182B9C113B921CBD7B831DCF5379B43662FA0971778ADE6636192F9 +24BE11982CC12FC087D4F607F078E2CA350A4EEA3F6E2EDD2B2D37987E722A2A +5C6794CC7FB91427DC38260D92CFB5E3C64B5460FC139BA88F9DEC183B3F4882 +B3EA91214CF6439DFF4E3AC48CE710B077FFC1A7FAFC9DB7459D3B2797BD0B7A +3E7B8DEBB09446D8ABAE4084F2FFC778BF697EBEDC69E16B5D4C962F260A69F1 +9F524442AE727481FFFF7048C0342059B4DC66C4CD7BB6200584CAD626E0D9CD +35F49DA71F619CFF33307EB0AA5D70A223B0E8854D2F492CC361C1147DE55BF3 +305A979D58165F76C2F819BA05ACF43FBBC480D290B1675974890D80CAACA7EC +3FF458B84D5DD9BC5FC978A701210042F3509E90DA4A6D72D133D89C4B191AF3 +C62E4B8D8BF959264070968B5FC00825E37FD55E9D6C83159B9171FA817B3914 +C0AB790C8CE44D481479844EED6D7E53296E2A3F4BB248F367A8F1659F2B7767 +3D05D34970CFB4579CCB0556839FC219CE80BF84FF513641E0F8F3E1FE62E59C +8B3E6AE389C797DC9CEA8E4CB22EE0E78451FE1D483134BCE93B21BC437B7B25 +FA471CEC4C6F340A4F9E754FFB94EA84C14C14B36D262CB28E91C2FB7A266C43 +3E81DF368494A4B4FC6AA8722A721F8E51D2E2DFD756336584F54F9989899BB7 +87BCE093C93147F25681D54670B6C06E06D4A9F9685FDF3C65DA8F35E0900F8D +2E378A4D9A859EFA76FD51083BAADDBAC5855693ED96C6321455FF3D59823CCB +1F667157BE14D5659AB14B331A6BEF7AAEF669AF32EBFF3C7070DB76D37C275D +3D133FFF1253AA87F2B0450507B281255BBC656B227756B0AF0F7792C501DF74 +42D67EDF5B472DB0BBFEA8D103B260321BC82E6C480FFFD5511CBFD5E044B1E9 +CAB664A8242A55F109499E68A6319E100A9E9DA66C56AA2E184B582E3DB64DF2 +A7C7349C0A66D976A30FA1DF84779B97ADE6F8692B8D787EDD1CE7DA30D785DC +65A0230BF3572F51D04E8E9FACE145CFC192F259AEF0F7D6B00F9CF9E72663B9 +B544E91823F68ED8C2A3C9A7B8806F4B77D28AE9E1DAA61BB1B9DD35BC4A7B4C +DCF4E4DEDA2DF1747AB0C14DB94C9067EBB9804C611771146CC2CDD9414F236F +BA04EFC0A021911D61A9BEB0F7A3E7981F8F7C5A8B43DF0FEF8B1FEEEB7AC364 +54F380BFE58A6DDB682BD01F0297AD66B20AC36D813124F5F97CA6DA3C083227 +074DB0905E63C2E7BDB30838F33ED57784F31C03CD70D33485E51002AE058ACE +152B9AF44BA46CE0936E5AF784029A8E1060173F6B57D3C59B8869641011ED3F +297C4BFE1E5555D0735CCA584CA9245D11E6A0AA15BF2064DB54E75A35F68CFE +6CCBE1F15377CF92FED2413E5F07B0D37DCEFF3FC27CE3A826F4D80058491AF7 +ACC42727CF992E00180C7DE3D290143062821B6F00F5000B31D9D70E2F246616 +A2CFA0179E76A5096FED5DA570926BBD220491F76EF5357DE263FD486101C889 +B997394C4FD4762D73DC3BCA70BE7784D422C11995E5D3E0F07E58FA33BAE3BC +5D65A0946DDC0EBCA88B55E38BDD3EB5D6DFAD6EC45A77D253FCDDE226557DAF +955946431B2E98E3C2C3AC76CCA1C0743631CEBD664B61AF619FD2ED5F3BC188 +ED79F70D78CF0220E87B0163590374DE6C5E7626B3AAF09DE2BC8D183D027109 +431913F590CDFA526840EF6339E75453ACB6E15B15F5AD61C067E3801C676800 +ADD9EE8A87A0B1A529857292029615BA892D355C5A7B1943A8DE6D23D6BCFC6F +ECCC844E64A2D1EE033083C6BB342FAA63B946CC446F2CBBE4F091952B4F55EB +305BD2E0DA668B027B1E5B18A5E272540E646E72ACD0430474AC0A8D9C869D63 +0DB6F7E3301A2DFD5E21DD938DD2D18CD9B361E2D73B224F9FCB9708FBCE673F +98F416CAFBEF721F8707ECFC5AC86648F247DA52C1971AA82B16B4946FA84C94 +B9103697B4A167BFB3B4ACEE5A1C747480DD3A346FCB36C93AF64928A7B36754 +AC3E92486DF3875A25E303BEC4F0410465F95B34EC6C729A5C503722154C8B64 +EA7C4B3ED6A3DA526C66D76689D81C15FA92F4E1993CE17E1D0B37A41977774E +102F689FEEF2D7FEC3210E6FBE9FD4F1B8EFEACB80004B382D1AF9C278584212 +D17C4E3CA1F1610C384A200D7AC738E60E114BB42F9534A72B7173AA9DFBA66E +28AA1295D58EE1DED0FA92DC68F0933F5406C7C7CBB06FEDBD92B326122FF632 +0F35F511AF93E40C12576341EBEA9BA16AFD66270002603EBCB6572E5DB500C3 +B9B36DA394DC9B2DAFAD14D96A558B5E3562D796046BC27761B31C4A160CB75F +3E5690B50111649D794A5ACC9BDBB851F5D64A460462B9171386DBEE21411224 +F68DBA86CE60D425C41F08B3233F1C2F7178F5173D4F3B6456678AA00521E509 +F88DF6766DBD6819775415AEC22DBF2AEB8CBD23960B34C5E62ABB85E3A7EE6B +48AFB4F6A8082C5DFECE69E88A85B2589DA7AF5F478A88FB8F1208A02E456B47 +6F1390AA44A34996FF8C3EE66B0454378130F7387110D189FE1AC22E610AA270 +CF5D41FB9D02F2A8835EA35CA404CB9A519A310B1B22B23DE56EECA74BC6C040 +356F29195B898788246B2E4D2BD332441DC719775D0D8D488169FA3089 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.1: CMSLTT10 1.0 +%%CreationDate: 1991 Aug 20 16:41:43 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +end readonly def +/FontName /CMSLTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 39 /quoteright put +dup 45 /hyphen put +dup 48 /zero put +dup 49 /one put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 72 /H put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 92 /backslash put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-20 -233 617 696}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 +0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB +4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 +8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 +8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 +B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F +ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 +C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F +EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F +2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 +4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 +52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D +38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA +00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 +B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D +CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF +B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F +802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE +32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 +00DE382ABED85350033F8ECB97398E4E0A75D4877A107F6A909D0C76D14F9A96 +8A6CFDE3FD9D79B6FD82693A9F354BD2ECF30C6D99F7AC522F8D6C93EA214F7B +3D0ED77F042ACDE9414264C0698E86398562E2C640DEBBA0734AB4C3ACE3907D +CC79E6B2C6C3C3F9B01526E8CD98237D4A9B403FF8CE3132222FA60C196A19BC +A2393AE6935C0F8B67FC1D1A12AA74695EFC77DAFA2804E0EBCAE77E4B5CE103 +A0164B7AF6593E58028A8A8A5AF4F5EC5F7376330432566F458AA2661A6AD0AC +B713047E21FAA80F81C5DE30E1358773FC039A6263DACBF89878169A5B6EE0A5 +BE02F5DE8802912F04D373F16B2E4627D54705ECCDF1A43DE29C3BA73077BCF3 +148E0FE06A4DB51F925170861C43F58168AE85CD478CED8E811821DB638BCFEC +A9FBD9312B6958E3A3DBCEBBE2CF78B52D963A8CD0013428CF3BB3C8BE792496 +D4C6933B070E5492C789A97B7E3864801AF824C4417BC42BB5E0AB897E139CE9 +86D59B189E90F7B5FAE69B67D5A4C797C7335E3A3CC84C92DC98B165077E48DB +34F90A551B4CF387D06A08A637635E2C758227956B880C27E6A6048D5A75F22E +ECCE6D87EFD432983D76E5266950DAA186B89EE41798EC19030105A364B88351 +4CB78AB2AF4BF4E379AC857261D1648BE32B080DC760B01EC9270FFD779E9074 +041A04A3FC130DF2B7B8289BE512DFFE93A62B77529E490C9017808F1B1E9FDC +21E7CC5BE564C03AE602FECC60B2BFD0CD3ABB895B4AC3E3620DA7260603B6DC +A918321A58B20114133FEB1AA7845E8ACD966FDA6A0D76232FA4D0E3ACB16725 +070D6A1AD1C12C4FD19CD64037D8A12A750ADE1E589B38C70A1E4CB163E20BA2 +0FFC466D1452D5561C23677E706A588DDE184EEE001A78D5C833DBD34E2F5828 +E89006EAA304848F2D932C5F52E7F546E18CDD77AEE1D3FCC1A1CF5DE08A4FC0 +0AEFB3FBC66C2053B559BCD562A11FB06722BBED6581D9394EB3F36A0CA220E8 +5D09B80CF21A02E44AB75FCECEFE41E2D1A44435936AA7812B4453F4E31AD6D6 +F6160A2EC199F5AA36D64EE247B072BC58E5F9C7D95390E45BC894D7037D861F +791D339387CDD95EF7283EC409B669E10E949B7C659CA1CC582EEEF4F38CE080 +B2432908B82EAD945FCC67B5D7579A1BB2D5EB3F05F7D32BE415F1BB43566F03 +B9C2B3CB2A3F518F30353F81BB517B90C2278B8ED8BC671370D9ED56D36E00CE +F2C5B1F7DB19BD3140BB2D7EC7D5E3DDA246B660510F93290F5FBF491F4DFF6B +F5428976D5A0D7013CAE6528B070667BF297C45716593781324820C6F8B4AA7D +134BFD082129C91A8E10D8EE59B8C6B55956AF59172F07602EF541470894E46A +A540FE3595DC7B250636D25A5BAFE9107ADBEEB453D4A09C62638674B8F841F0 +C3CB1E3656C7FE9518E318DD13C37B1E7BB57A10695F92C61800A82D9F365BCA +4C0D1C810E3196CE403E16F71E310E3E658D7CC5FE8515322456B252C4C5E56D +807A2E058291BA6EAAD224D49773528EF813556F539CCC84432CA61338C81E99 +88AA24401042751288CB72B695DB05D16AF6FB10924E2D5D9E4397A7107F5EB7 +DBE7DA4EB66C2A9C67A021E6CB0DC31C58A76BC8876379DEA4B6BFED86225990 +99101A9F14EF5B0EF55BD4A54B570D5037C627BE1EB66B20B7FDB7D38A3BCD90 +FB5803DE8B3CB8ACD1D004D26D277469A1359C9B7ECCAF475348DF4B5094F8B7 +9C0B573D161B0C4439694FC196C475B40B051F1E8A64DAC8E7A2C18411E6D7C9 +7E950F1EA4AF91CAFC554A22A840C1873E68DEAB9120D7D9BA8F702F174CBFC9 +04DD6A0567753E97CE5E7795960B4EAFAF76037E54ACC8B9D91A06020E0C0AAD +DE9D2B3408948697A3D7C8F05D27072F470EDCFEDCC1DC099910622E84C0462B +31392B98F29CF0FB1923D480A5AF8616EAB11DE1B2497F7BF6AB449AFF5C6BE6 +AD22AD624BF84A8D59187D26F7CEC076451AD78DF28AEEDF41DEBCD54AB2E747 +3303A61D1A86CA6DE7CC12F2C8B97F77FEAB8D275060A746726F20E9E5068FFC +34CAF97F3F4C41FCCD5F71D333C4EE913986E4157E37A4CCF8B1953E1CB23C52 +36A9BE44AE0349BBA1114920DDA315BD99455E3FF4399A645A7ADB43184BB615 +3A24D5138C09632124085CEB005DE1E00CBFC15C5A041ACBF1B7FEA933E687E6 +77FA85BB40D82E80C96186C9CF295674025F58FA1E43BBADDCE1C60AC4F0E017 +611762CD7CBDAF43659078BF62DDD7D249BC9C5FCDEB06D708AE56DE87490681 +E5191DB36D26A1237A2A150DB03ABCFB0EE1A887ABB92B42FDF25D02A0CD2371 +0A2B5844810A74AEB45836EC19EDD6090B5BC95C258FFDE3E6FD616B942C65F6 +3C35D8123E06D064F4E3CB3B98E38B882836DDBF3752AB1EEF2B731508791E22 +0A67A82EB13058865C6842F61EB43FCB26F0D4AB2B8FC8753B1C6CBD134D8C3B +030386CF236891C74F756F357BDEC0DE483026CA64FFF573C1AA438FC35C43AC +C7501D0E052B43545B562D80192C53F8C5261954BF4429C353AF469B67B6BFAD +37E10BD6430500C6BF756AE206600555417853DD51CEFBEFD0D30A6DB02A008C +1605208250E41485EE0CDE7F0D710D4B846FFC34D31469FB141A04BE8CE53C27 +0DA139C0418F6A331CE817609E80742AC8BF3A20FF11B514B3237E43F1764987 +E6B4C0C7BAF99915F62DAE4C22F59D3CA0CDC6E754D33DFAF9D34028BC2B0EB9 +8CB5556000D1CE986F60C84D0B6E3F4F55ADF2E417358F1B14B542D8A96EFC53 +C3F3F91DAE932AD3DA9C849BA0791C01EEEA3B967A78329083338D1A0B278D8C +CEAD5B6F8017451F34CB458091405E1415E9621A577D6F61A76E1FC781385CCC +0A317E9E794CD972272E988DCF793570C9D4076DAE9BE50EF63A11B7EFD03E3F +96FEA00E65F069CDD157728A1C98AC0A9377197D4BCC157308D09F149AB70838 +C66313272D00504E80FD0839B3A3F126CFAC3B820991F94C497B27B38D058B4A +116E628F7B978C1F253872706B40A7E475F3078992B01336DCB013ACE31F5D1F +2029B4F8A2321A9DEDDD10F2E14A38818637E8C559580529B999E84E07CD0666 +3323D757D75C9DF6A125E3F631D9F6AF5D0C0D2B7C454840282D19BA23764BCF +5842369A69D847DF013B765C2893F80E68A9D9D59A634CFD9E85B90B6F7F09A7 +5D609AC8C9E8820F2F84B72122B081825C116CFDFC3E5D6078A715F35E06811A +4BA7E74DA0B2A24CFC50D6DE7FD0DE5764B53B7A7B33368283615F118E709D65 +EDDCFD8816372B5148590E0AC8C17FEA93205F4AEC06DAD89BBCC28B48F6C702 +119BD3C79D038C3F2B80D60DC61E0C60D872614813DD54B63E8B08623507E92F +962E535C61A2EA234A63C607FABAC496CF03CF226C6C8052753030A0EF740E7F +466BA4A34B072D58F3E560AFB843C5232997976F3C3D4ABCDCA237E43B05AB73 +5BD65C6559DAC970E7F34D4C170F7E34BEB204CD651370588CE4F2F17A0E7131 +6364A265194B7C313257DD83467B21D84E9EDEF5CEBD45EBFFBD912EFD373FB1 +5409ABB0D4B06FBE08577459A14636A374943DC6D4CEA0AB33DD1154FE79BABE +7F5D1D92EA7ED7E6D261C3B2569E83B5E9CCB1717B79959876F16FB720ADCA50 +05A33A47F1668E05A7ADF6E52B38D9D5016923EB55ECDAA72A7D9504635C0352 +76F899CB8DFB42BB5DF808A6499E52C230D5FB8E9E3924C2474D417826D282F4 +8B61112FC39B574AF8DCAF572E89720F539528E20DABDD87EE0ADF78664E94AD +00B3867BEED6C9488036959AAD14CB301B29F19165776DF911A01A6A53414751 +68E4E401C9B3C2B04C9A3066EA0C3553E8F4BFC3F05C73FDF55EAC3213E82E00 +C50DDF2165E51677CD949D27B09DBB30376FA05D2FF3856253F2BAA7907F2EA8 +95FA61D8A042C8179BF834DDE7F67CF386A0D79FBAE5E859887942C6C482785C +E1FBF3F97C666D82FE260D6A8FBD72CA43D731BD4B4301C48249B1E7C31C1765 +D6F7F9C8B59E47D72D7DDED87351E0F007938BFD73C2324BE5BFBC746AF529EF +3259DBC9D83B5025185FD75E0D040203398D1739115F6096AB8DC8A0AB539C17 +755D5927081BAD8FAA7AC021FD028A5C823E373795C2A892DC5750C575D60792 +5BAFC4DD83596D8A182293D630985459BAB559314F27EFDB7E186DBE0E7081EC +A8BBF0F30EE9A8B53DE47C9F2057139937D8B7787BB3107C40002264E6E3C0C3 +E77CF0B68F27E7A0A5CD8AE9A2CBDF98ED4A12E9D1C0DDA8287738A12A607F88 +15B1A64BCFA685C23075619E196EAA4B38517BE37CBC6464369245FAF3D32F90 +A6F8A450B66FA94FC6639D580A1AE8582EB307ABE2396C1093EDBC229BFDD87F +9C5F49F51DB41D671BF836DB70047938A36CF124A5869255D06F3AC0E3435DFA +FB5DADA29C76216637F0E5EF0696BE5833CE0AAD72FE1F8BA860277E70278C6B +32386C1BA505A7BB808BEFE2D75E6D159D58B85F093BDECE344765F388DB0F08 +6D072C265A32944C0A965C10E7BA869881D547A636AF586E1B69F05E9610C411 +EA313749E4584A9C386E789D0BF4EEBEACB2A01CD195A5C6876758C8B2C21E4A +6C68DF63313CE32C033CEE9327B9FCEBA1CB91D302D1E5068DD6189EA38B2C62 +1CBAFAB46F8BF3034A0255FBB0904B4B1B4FB0CC2DF2D412B28E8BDE816F1329 +55635B7E6F7123DAE06E6608CE8EBD46345279E47EF1853B027CE583D1194EF6 +19599F6ECADE298B64CB9FD733CA7DA837DEABC198E750603A02F61874204942 +4D0991E030498B4083C8F81B8B9BD549F6FD0E4C378880FD9968590C13748553 +7E0A624AD408E0D2DBBF2B0566B337CB51BC414598BDCB19F9D84416DEC43110 +A8A899E01D48648D26D92C2F8B784A23BA3436F6403AE29EBCCB05F8F3172FB4 +0408E457400C113233CF054A2EAB612B7F6BD7A92486E69BD12280C5A7251E20 +E103668F48886BF4761830DB9BBA52325F8C3100B923EDEAD4B3CE7494912E58 +4720BFD6B649D64E3015A42FA5A6284A5A4DC3838B58337C8B35CE7D47C39913 +EA706C468E46DDAAF4A5A749FCB5889FD59F90FFDCDB44E5839EA3E49575799B +75A13CB1A17923751326D75A2ED1D2CDAC394084314FF697D408A86D08EB8494 +B526EFAB125865D892431DE80C0EF53E6FFBDDE9F130575976037A35C7853DD6 +5126F779A344E96E6381813950594C1233337459217666A989B5F1718A6BE0AC +19A3B476950B5C9360073C3F2D3D0EEA52CE85743BC348C38AB89B51AA00B899 +217E5008EDE0576E826365DEDDAE40E4A4A69138029D0E59727CCCD3905056DA +DC8FA349C60224B63516186143F07EFE361921C05D9492A6E24234C026A34BD3 +B64D03901979BADECD929276848B4479B51006B8D1171F7C5D0F8DA027043C86 +D44AF5AE35E350F4B11DCD92DDFFC8326E99E764978F965706AC58DC6C0D2F36 +994CCD448AC3CBCC42268B94E16FA9C1387FDC6F45CDE9F58FFA74F27A4A98FA +EA3F2A17E1D2012AA78F906B88EE01694736BC4D184EEF4FB8140E5FAF64150D +E50E8E06F7B9BE125A0FCF24648366CA7A7BBF0E11E6A2DB5825637368DAC5D2 +766A0E15B3BF3CA0838518512DD4697373BB8A95BBB46B39A4659B318EF66F23 +5D068815099898174E95229A7141FD1EAF4D765037BB86FE633EF02BC2A1405A +A01AA2D5CD89628A1B0CD2C5AF088441E52BA7E1BC6A7F09E3A47F6F3B97AAA4 +A41D3EF15211B21CFFC872A40C1182A4CAD0FA5F08CED4BA7D87E5068535349B +8056D253E7A3E5494F07DB46B403E02AC3A43BCD45634DBA2C47C14B1A2E4E0D +22A0092E68F1E320BD63941F4BE8B912B62C2B8D681B29288330F4CAEA024FF4 +3A1809AAA6263656C45146D5A01E2E13A5AFFAF2607891988FB0170595E23A3F +B9714047F54033BA60BE76EDCDBA5C595795440712E64F106452B470D5A9CFC8 +A2C604BB415890FF7AA3126C3CE1D30C3E58ECE4AA04307DAB193702DDAD0686 +788A8B9F8F6F0D2119DB3D4E339C052B314202834F478B8914FB9302037FD84B +B25674DA46B5C9D2A4885BEA519831D2DC406C3C3753251F2BBAC75E1170750F +C54426090DB373AD6EA90AD73C6E80CBBD01F0C56F98C09FF2A162930651AB45 +E8A4CBFC8B1BC29522AF269C5E182130F5DF6822270359151948EFB4C33A2687 +5954407A1EE96F245ADF9E93F972ABC5E1B1457A030F047CFCEC02A3D8228011 +ECC2CB0E0C7AE4B01AA342C6596BD0F85A45E7BE4455D41FC15539D07F710636 +537A8BE0EC50B6A1FDD90B599A08B7824FC65559E3B6FED676A41542BD58A09A +42388D7661D3422CB86F13CF6239BB56EA0B1DAA5542ADD316EE76B01F98E0EF +29A828461020DF0FF643E546EE04CB0032C06AAE533C20720F888295ACFD52D0 +5AD152CD7D0922F911F613354344622BF800B0FA2AF3324E898B39F953818950 +B7587AFDF91F16EF57E46E46F07E14E89326737DFD1CDC0E11E9DB2FEBCD147B +8257B4C2D23DF86AC129BA1655FE6AC212F2080BE6FBC1BFF9BEA8D8E121040E +2AF9500B926072BA9BB474A8CB55E727A9FFFB2C835CB3E7981B904E9EFAF4DE +9F8CA5D338E31FD2535E5CA9A59002123CF08C621D185C102077AB80AF6244E6 +49D22C2ADD353C3F906DE952CEE101A9D08F1D9853EF8EE282506A53FDE5F64F +2FF433CA6E60819B7945A4DBF21534E35039853600CEF1A9FB53B99F074F909B +5164499BB87652A71C6A55FABB3238C1C04AC3D27393D3214D84A6A37B714E7F +B28256E05FEEA5F7E86CA04CE4BCC5479F40FD797CB5BB6C0C817808C0834EEC +63F1D78F0FE712D1EC6F001B395D21656834D6220D77393DE89CDEDDABCF3D59 +7B1703B8884ED56CECE93AC713239D5D814093C2DF4025884D36535994CE1DEC +CB64B51AF63B434F7A18A6FB644F49089EB3161B46F6EEC430B73DE10EAB0ED2 +70736D0B6F3DCA3B96EB036C21E0E9441CC7B4BAD4D1B3B34027D0475C482A4C +6AD17670E16B1D87078AB94D2C04F99CBB4C88E5F29327884BD673BDD841E8EE +B3A2E544B7882F589F9912D86828E0C39519932FDE205EDA6CC03904B253BC90 +2AD98C29F109D815BE900AB44C7BA1D6349313E03F9A9549FDB06A6C65DD2798 +EA07440AACD59AE91FBF7EF10E82EF3FB80E10CC515A992811CA5BCAE7A80EDE +30BDE900F0F49D8F47911274AC3FD41A5D83092FCC98B057BEF66030F9BF5773 +664AA821536B3D033C144CA1DB7CD7EE37965958093253061277A197449A80E8 +AED1C47D8BB3BF0560E24432F6A9FFCA3C468AB309C54F920C30FECF049BC75C +EA7415390EC30468A96C615F7529B5E2D96BA2313D48033C73162275AE4F3831 +8EB29A2FF205037EA4B6DDD1AE017ABF2DA3E4C6B8215FA1052120D7F2DA8BBF +81928CD22F10AC0B1DE254CF5443DE81F68EE6C19995ABB4F8716998C9AF78EF +DC1BE13139C6C9C595CC526974B1E0E4F6B4D552C6FB637D91D850E104939287 +888ADD077B7C05818AF7C70015292F2E968D4214BC5DD87767EDA36249E8C4CF +145E0C8CA3DAE43DB6EDA10ACCDE03608EBB63C2B39D6DC07DE2E5879A052DD7 +84E826A3E22E0B1155272196F4E7CC825259DF70FF0599D91599A8D61DCC4F02 +BA6A6BF9228EA07B8828CE3D5EE43340CA2497B058552A3ACCF499DFF3A8B9B9 +0448CBE07E0BB7389B3ABB578566E781A89AE8A2908823D2B5127EA0282E0E2B +E9BFDFFC7D529613F3E0D063EFE3D71F71A099F2AAD50BF776A2F0E544E13B7D +82E0BE0296556A3F76BA81751352E2D82DD0CCB4F577D7838E34B452B5C79B58 +A09592C169459BEBA283D98756960CE37A239769BCA22660A20418B1A298B0D8 +7755FE810321506D35FCE70E901966FE77816823E4D4B9C6503C90D6F31C6379 +2A4852AA61DC63F3593D66508A9EFB8F1432448F2FD45647271731E2886C4C74 +9EF477B9AE5363897243C931D34E3CE5BF7902F27B93FA5CCFF5D853A28A08BA +B17E3DDAA648F373F4EDDAE1DF25C80BEA3989C2A8D71A4B4B4E8A3C55904E56 +83C98EBB5EC3015647E59A24457B390E3311AC62A67DEBD25C7809F8B11DDF44 +77C7AC9A7080A2F138B214FFDD090D187DB668ADCDA7C2A5ADE94A4692C596B0 +42F4E7A90567544BAF65B302BBFDB55B442B624CF128876330CC2FB394E51EFB +8B0C596BDD60C03F16A6CDD89434110D7ED758F1519F1E8CF0989AB652939204 +17F40D3D7016399612610B56788C6D9257A54C9BF8C7943A6DB9B6990C0BF988 +FF38C97892288C509B71BB8DD20A69B8EB0BDBE05F8450F657B7D2173670E42C +AD48F174E44AD17C66B96DFBB9871AFC5E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 34 /quotedblright put +dup 36 /dollar put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 +20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 +0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD +F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20 +3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122 +A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379 +5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA77428025D4059BA +2988AC2E3D7246BAAAFB89745F0E38580546045527C8779A254DB08DCC6FB9B9 +0E172209FBE3857AF495A7F2B34BC893D942C145C2204CFCD6A5C69FEFC25B60 +E412CB2BEAE7F7FAD03AF46344F6A7D483BBB1E896BF16B0F4C363799DF23CE2 +E8127996DE841B6F9D8A9E56BD799B6A938582988AF87151BB8D3AEA85C49857 +DD862B5E10D9F33D57795D656FB616BC9B8397B3612131A2B0F472656700958F +739A548F7C3A348698AF9F6F9821D7A9FD4131781ACBF7EAB885A3AC254DBF94 +02FA697941A0F97F048861788BEACC20DE829764413CA58F9D045A6B38BCD6E6 +E4827247EDF1171F64E3B041A69B244308DC07F66643FCD7D5FD37F36EC4CB5F +957D4ADAF91850A3B1A765E0E580EDC77556593D1B2E1C22685268469298688A +45C474C9D0472D019CE1E83F25182D084AD85A49C502E8D679C227DA8E32045F +8055D1622C478F8FDA342685F858DE3F53F1CEA0D70BF3FE09037D981E9E7FFB +BC3F896535D0DCF53F4C85A1DA5D0B632484D1F25460E3EB38E251D2AA17817E +F3B25A2A49C0AEDE0B89E277F52CBF744EF0243C409FD71FB0C574640CF11599 +117A4F42F27D8D282D34485AD116F7E753A8DEBFDF7C552A1179C02B7A37782B +743D0DF85C15A333BE9EE82C13DBC9CB007DEB5900954AD9309902E08B3D5BB4 +E8414211B971CE8B9F05A61C15F400D9297745F606C6419E8A8A9ADCBDC39243 +617EFABFDCF9F836D14411BD72EE19D0BDE89234BF7D52E7A68ECC952FB74FE3 +33E1A87DA39AEEE9E90406E2B1CF3799C63E9BA858D54F38918B814C0DF0B696 +839C820C26FB473ACC5C08E2056457A74123A398806EECDB427BB183F5458105 +2B66D7E1FC3529025D3243A045625E9DD9417FA089B3C7C394D2B65C0367FF73 +79F17ADEC6B5D27A5D3D3E244A0839E38267ACF07B2D994C2B4E7F30A416EEE2 +D1688F167D1641A72A795B1F4DA3350F75AD6D546AA118B5F8A5085F5794E6E5 +28256CD31D250D8328C9620B8ACAB03E4A33DB4595E959F4D0FB1C8CE85A710E +22F1940067C036A7DCED7EA48F1EB81AC4735FB26A249A32AC2E3E7636B32D31 +7D76FBEBA106D6C67C94A3BD4256B786B71C6EF8D191CA90CAD8D2EEAD42C6DD +8BB4BEA7DAD4ECB6E002F3B71C2955A5A401E34D55F755BED68178C270109BAB +FA0AD848347EB977325530B27180661A59447D7DB55A62D65309DE24B6638986 +1D3A539BD37E74C2C00DFED3336B5C6B28D915AB7188FFBCE3ADB3CB903944DF +1BA5923A1C053D4682BB8616F44E81E18DB2B58298F4B1A6289CA993DF3E7C73 +B00DEA3A9B747FEEBC4A11E5B9B8B05CA2709B8AA935A42159D3DE399544F5AF +AC1CC00F6CB94AB69856078C9A2EB2046BB9055CDD6A0622112F7D3710143F1C +20CD8DAB4109CD47BC00EBCB88314081C1D6C43132412F261CE0262FA28DB7A3 +C7D8534BCBE1A60488EA230DC558B73C72AE87539A9D7E28C2BE05FC05F58DDD +87117C0B5235B1486088B8368C80ECE70DC07A0493C32B571F6D6E5F3C7556B8 +79DD18A0C09C644C1B0A57E09CBF8247A97FBDA9442DF87C99CB00F959FE4925 +8FE8B3EA62A6C99396CEECAFDB091CBFAA0EA6F25BE1F34B1B8EF507D2347A7B +866CE28452F7ADBB56F4696567032BD289B3439D6CB90A602223E00B43CD2585 +4D598BE43C0161BEAD813870FCA3E377A588C3D24667846301D1BEB056315636 +1304E2CB595B5297018C0ECD1BA4F8F1EA81B4FF88126295CD676D96756FB9FA +C97CD2A8574EAEBB0A869C527E0828940C613B9D45894E4667172D841C94410B +FCC5083CF850AEB2EF92BDBA8DBA361AE95B267FB5F90D5EF8B16B2A83568D5F +50BD20AC88DE25DDFDAAB7B2F7662DB99E20989C7D12DE04057FCD2DEEC770D6 +535680D13ACB557EE7AF8DEBABC3088908943E6E3655C3C00ED022B276FFA5FA +E6E4ABB96A214908EA899EC925E67E86413840A67B3FF86957586B5E06909036 +B9987C5BA21E46DE7919B382CFC4740ECC794A6577BE33CCB94E2E4BB3F28BBF +AAC6E68DD9B01A59A7F3B964F53F41CB9BE94CD44027868F079324B44C595200 +0E375B069FC085DAD5B678ACBBFCCE8916C4266B572D89C0A7B6A26F1D329EA7 +63CDD44F37932CDC9C89C724AD52BF91CA68209471F26C10AA18CBCD1288460F +9EA9BA85084A5F34451044B81559DBA03F03292638C28A704C553CB25312C568 +A06C9F5A764BA025FD48883244E88F1A31ACAE83432C2B837D034CC960EDE3C4 +2234FFFB8132473C8A750A41770EC46F9B2CA7FDD937A2C8CBF5DDD6162EEE0B +36C53BDC0D2D7F6D38DC2F502755B0D25B0BD1858A9B16BA69549B5CA4673F0C +32C5F1BA97E1C124374037E0B8EE94706B3B2AEB9CEBFF69E4F107BABED996B2 +EA92B4D94AA267E626953550633A74099022786C172A323DF9D903A0DF6CE486 +38AB2B0CA07D5EEF34BDE2DB5F539BEDB569F60005A3317EA6B1560C22606B8E +AED6F84526090E626FBF48846E49714EA80C90FF66F82F36F3151B580DAFFFA2 +668B4952CAA66C6F10A341118E0D58B8CE34367BDAEA79645E27059FF2A43D2A +435ED248345B6305316D1DAC5F75787D8E72D0D8C3145C0A1E45B201382EB716 +D06C5E8BA78B6F32B13F80E7EB6909D2B7ECD1420BA2B2A88C0C3154F3091065 +16A79C898C1682A98FC2A11A2B8D4536D74E6E228E5474090D42CBFE3BAA8029 +4564F468EE59B2E2BF8B2429634898F21C31812394AE3EC0CA8CFD5D5E818F4F +344FF40488F06A48E9879E42F131DE378A8A733C6016BBDCA24B10B385BA73D3 +DF4770685FC7B9720D196A9FFF978C10977D37D98F11A3255486C8F8C3F67225 +4AA8884C88A3194EC1AFD2DA57258E30B057490A10AEA001017F06C83255C0AB +13AE04B86FEEECC7F04A593282501423D319CC3FFAC3691DE723F71A6138EDBA +F1373C651464A05906A2F370B0862F5E5CAA5C9570B7D5F9DB24FFE4A6C6B98C +539FFD61F24487B2AF446467B1A3CA16E9BB2384972372C90DD930B8DAEC0FEA +7C2692F029EA687E29EADEA6AE95F030A8DC599C8727F5CC41FFF86EC7E2D04E +E1498E0AB0D2719E08956A68FE7E92EBC6945771DDC13689CB68D39EAF73CB2B +DC8BAECFD1F721BC66D89342D650699C3364A2D0B35F58E4CDF2209512224472 +8920B0079AA5355990733CBCB8A372E1EA02B9DA4107F619968075F33BD123CB +870D0DF6B22E6DB70F1328532A05BD7A624CB7488034E94F3622F97636CB1330 +FE3336665F27AF77FBCF01A786143F0AA892E1B2CDDAEF2E0F33E56F179CBC8A +72973C643CF217828D892C818CECE72D0E89329C6A9159BF17D10BD3BB4A1154 +997ABD8127118AA79BD792292B6B9689D989258CA9F57A75C4C9CEADC338DF07 +13081B667C8D86DEEE5BDCC47FF96E2AA5B37C365585747EB3B664F08CC7ADAD +B42D1B54096C60AD15596D7DC585316A36598A349E89242274B5171A1DE841CC +30A5BE43B0ADB71C3DDA25650BFF704B452831FB06A7DB0D60D24436BFE23CC5 +AA68BFEE0897140B248E4A9BE7AAE37B98A54CC1D3F81164943B66250D55E554 +55A688BB9E3077FF8D11D1BE1C3FF99DA01EB206AC5AB1D394854DF5CD417084 +82BF6D1DAF88698A69DC196FA9A3285AAFFC3441CB4297A48DFC86B29490F2F4 +B514AE8F3D4C0EF920791371BBDD1B6369C38A90A2D2AC06B25781630847D6D0 +87B469CAC111778CEF26FA3233A85044965F3862C83F63CA2565B9644EC15B77 +BD2BA08CD8AC3DF1E5CC53CCE496172A18627384CD54595E3BE1E7D1B9751C86 +D6AD3EDCC725EA4B09BF3B92ED658356A3424F1B0D07B6E11B8E1D4823F5B0C8 +F3EA4BFA3DF77AED89D464D29BB2326ED2DEB73E327AC8B2C99B73DB70ACEB0B +D0FD854CEFBC72FB9C906B4DB9EA35BA8018C623987C834B63E8C800A30BD551 +011F6E05EE76C26ED2F335E32BD4C866A57BA7AE89ACEB1066E795F122E1BBCD +5768F2DEC922EFF8B1778F4FFB7BF1B6253F632F8D98648B81018D2FD4876974 +8C818E01ABFB557C8553B98A512241000B9DF64C1F5784343314B7B3CA04E506 +BBC612628AEE13DA23B3242AAC3B05244D3711121D5C9AFA8EBABD2074DD3658 +0F46D501A2CB11A370EA7E38E3682A31F5C47836E9CECAFB1BEC80DE889E99BD +8F4DB78DBA5AC5D764EA99237738FEAAF199DDA7236D22B07D22A8F6ED023E44 +1828588397D723FB557CD35C7C5C87BB64E4A7F88B03FAF135ED0F185F7AFA4A +F498B226D6D843EFECFD9029122B15065A4D04B509A8B633E46AD3D15D4F9EB1 +AA41E4694AC4DE0613B027E35C32935B5F0A9C21F5F60B9DFB5FAD619A35AF19 +20C0A1B2490E8E3BDACF27F37680BB32489D21F91603D4BC5FE69862A1A05F10 +4C11FE5744676C4794CC0B7F1AC1DC9861A247234FB986A0A4BC5F8F6A3183FE +3A6FF5ED1D32A711906031CFF6802B5455CF208787AE3A35B1D437C64E5A3283 +A1B87F31D6B6AC634579FC3145035BC5F0B454CD9280BA3509B890D45AC7EC54 +F8FCDA7E5F8AB9F8201621417E17FFD8CB7BF55A6D9B21F95C403AC0112A94D4 +B7BAD823A1E9A5FEA956B08ABF303A917B69C8BAD87E685DEBA72E62AB132F46 +521CBA0C7A96A833AFDB396E0FEB85D3EC605A4EF6026C0A6CCADA56A26A8FDE +18C61D26C93DC6E15F1B5E789567E833E79CB85580CB50A68AC93D9C2454861B +487A833774E205A73A2932D0043759D5978921BB5B499BBEC5AC6F505EDE86C2 +8B8DAB630F36128B53BDA72CD82A3810E94C6947C9FB148574FD25E8629CBEF1 +2AAA7DD33D1A83C0235AF9F8FA00822AEF0A6E9DC7FA79B3872CAC39957D746E +3F05C8EA69F0BBD0D96DA2ACA93E73FDECCA8B35D6CD52C464C1A51EDFAA83A0 +54C236F0064B7268C7DF4BC1F97606D48D6C8739AA2CE28CFF1B4986B4CE8A60 +D8DA6C67A6887CCC3A0A2790FF5FA00120D15C26E8D938D524F355FF8212A689 +D34269669DF03F1BACCFE834425972EEAB399EE578407F9550B93D65E63E3707 +CDA159B5AF4B68ED52D389CC6915CF7B0C737514EAB05C947AF32D67CC36D782 +C9F73B32CDF11D2CE33E8C3DAC12AD070D0CE9EB3C209D0830C0665DB9F61C35 +FF976057485A32A5A41E7205BCED4E2B9D2011AE3FA90ADFF6E3C58144293A55 +E25C6A98BA2113DAFB861F0C3544A15F5CC20496FBC58F1FA2088BC67334006E +2AE3755CF0791FE82E8620A5BF3B487F37DBA3ABE1709DF21745CA7D7CDC0AF4 +F33FCF3672EF5ACB540CD7931FD18F815422B2A193C9AE34E626020F9AC0C36D +4D5AC1137C75F10B42E2499DE914703C682806C9E1D158217C68329CE401234B +462F92A35F20858F5FAFAE3062C57ECEB930B762880A982A8DCB7D010383A156 +547310C8BDEEDF6313650A2FD71856131E24F1299C8033CF49DA9BFD013F64D7 +2B571F6C2E0A84FE62F060298C654E068F0B8BA453D5F94BC89D3B5053721731 +AF5CCFED84B7F6CEC60FA31F84644CEFA02DC2323CADB246E64DE08D9BE4FAEA +59D1652DFE1A09C41479C3CDB577942334F8C57545BD883E0AD172CEFE546C21 +5B9F63E32980B1E57B0EDD66674C9D919F6E323DA0A0CB8788F031BD533615B1 +D27320ABD6A1147E3200322DB2D8700B3F1F8B19E3C5B67842E84469D997B702 +0D8DE8894F5422DF2B9244C20186597587D3852F34ECB21E5244EA9C8596F0D8 +6E4D7353C7F6ABCAC499D7E34CA7E7789A54D712AE69DE15F767F045E637DDDB +CAEFE413AF652D849D58D52DE084956D177AB7E3A9146B8A56BA23CB3F734298 +88C66B7C2B084EF219FA08BC87443FD9D86BBA351427631D368F514C7DAD7329 +DDCDCE8311971D746FE79322097E7F676740389F17B11587086942024918CCBE +80A60A78D96F3CBB59CB81BF5D8028475316D96E12248867A3F23A859F8AB547 +B1F06C1ACFED4AB83378932A253B8FF8AD5F44BB4EC7A7F025BBAA179C81DBA2 +049053EDA32AC126C4F222B5FBB1119C7BE3F4BE0E9A3161CBC5F4842E6BD743 +11903130004FF705BDDC0EE6C1D97396904B295596A226FECFD665AE0A6F7EE3 +FD51F370008D1697035CCE907243038E0B0487A6DD63F1ECDABCE1A71193FFBC +6DFBF1726156A4E9710C0D272A7A351F8FA0C2785BCFD0BDCF1B4250675B512F +997677E512B29D85313FAB6F7FD26B402E1C4B2E270E264422D1375B93EA138C +171557C70A07C8B330E0C0602949C60B9D921B33E906ED3858966A640367C505 +2E3D254C1C0C63B3F831C9D2AF2B2FA6FE8B663F94B72A7FFD63712A2C4422B6 +6E3524B5AA8D2EB9C7733BBF2662B64B3428EBFE956CBD500DC71A4F4CDE8896 +2EAA65771273D823E8687E2FED6A26D7DB98DDBFB57670278897D2AD553D6AAF +6F1117C4F894AAD44F53348A763289BFEB2E9DF66DB921E402279FE17634E0DA +576F0323E1F849DBB1E7E56D0303DD2C81EBBC192B5F8C13A5F5028D64DF153D +C7E4C2A59A3E369D44F346BBD79A4AE4930E3249C1FD5CC8B4FC6C753ECA9326 +797F25BEE6BC66E125AFD247A2CC2F61A47F03DB682F67382B2E83312D1D239F +39D8BD6C3256FDD8D424046A289D17984ADAE316FA39B743B12419DCC3C8582C +EF6BE8C6E7A091F1EF76C6090C15A7742C5F66F66A69DE863256574491B422DA +93F4B0B13E69B03D1A92840D80B39C96A535C2AEAFB579B9051CCC67E32103F6 +21EADDFEF9CEE1980D3F86DB452B61200C9805EDBD219E812F22AD612B436E28 +D86956797AE0FBBE0A0DEDE4340B51D2CEB5127FF7C14C85AC55C55A1A9412B0 +1471CDF9FE7D52A5A069669A9C500FABD920863628E541893B2692B9D40CF391 +69C797742BEB239A6FF37CBEECF5ACC960011BE1CD35241BF35431F902EE41FB +5E89FD3C7FD3E7CE970CEF9A3BA9DB4F10945568813D4566F5939A7CF94CF2B0 +97E9D335CAAB09BBDED1D462EA787E5FD11A63B17D75882E379B490C5B2B4440 +FCCE6CD6EC2F4C21D5443E6269734EAF0A61520285791FAB0B421D5CEB2CB165 +286278D3F21045ABFCA81CD9E50A733CE516E1F4C494FF072C50FFCE2D746CD0 +0D28F9EB6CB77425D0F4188760F61C46101F21215BB89FE5FB9684F2E9BADF1D +8078D29B3160EF63A74A19E17202270928654B95413DA00FF89548F30C8A2146 +8082CFAF97B44733C420572188F01731535A0F5609CE44AB565563B15212E835 +10E5EBA20E3B1635B8E08D85E8D282D51AF0C5D8B4526EB0D43325370644445E +087E067A1EBE6E9C5A69D8F2D32E2960FA2B26B582A4D2D9AA1CC49408E88CCC +19C63FEC3256F43F55CE38B3F2D7902A4978918AA2D9D23EE839BF2A901F0649 +856041B1F62612DD6FBBFBD1D3645ECEBCA6587080C6DE11DA4CC9F8E08758B4 +37D559BA464A49A3AEA6373DAD44C615496C71C41080F4357FF2ED23608BB448 +FF983C196501096A58EC0C0FFC9BFE36C735118DFA981C69365EC6E543BABAEF +0515AAA6E8E34711747D586A6CAAE1D3D0F2EE85DAE124D93A6EDB408D9FC825 +7943607554B3CBF71A9843A76A69D7533865BE78F7BA15316360CEC333F0326E +EDF8B884A60A0E02401A2A1E3C18C89580C030AAB8B94438214A96EFBA9554F8 +2AAAA5C653E94FE70BC18F998BCD6713AE8A087E37097C36E06C1E929278F668 +4E6B169E30196E373D89CDB6BDA65989AC54ABA2678ECC7EDE24AD6263BB0301 +012E31B2361D62F8E08528558CBE40A37939F09069F82095379C56C31EF2984E +78BBA233E706B9575A245E527CCD6EC11075A3FD2623B49E2A68EEB68030AE43 +1D7AE54192A39C52BBA92FAEC3899FF0ED859B0051537F998743B6C5F2DC99AD +FDBC65E51D3E82B70CEC3EF1C3645ADF893C3C5F3D25D51CE54CEAA463F8BF8D +EDC3CDD0422C12FB34C87305CD11F0005B4AEA3E9AAA000546E4383C7B8629A2 +3372E0E857C5A9F564E6FBCE49407740873A109A2B8FC581171B6965DD349786 +E547781395D8F3E42E99BC556A41773DB2BA8AA0918081E4983B9F8B43A15544 +8D15BCF336E93F8CFCE6E79940A52F9B7067C2C8688F20F842B2D0BC02DB70A5 +3074D0CA85BBD01D6D91B2722CC15C866448C91ADAF9EB2D2A52F08B39808E43 +2A492AEFD45480EBB07C4182CD6DAA9C26A561B83E381594A1AA0364C4464AA6 +20621994D2B64D09B7F460C2D6A7C264D89E4415A9E54A53CC8331A3D358BD14 +4894EBA4DD7AE1B836E2C9246DBB0800805683A11DBE420BA989837D86A1A600 +8B669C7A7283BB9313F045A08602B7F98F78A059CB086B5991F761CADE8AEB86 +5039C35C2FD564C0D8CF404A5F32D7C532716169EEB6D08C8CE5BB357E4CDCB1 +5FCEC35440433719FC19DEA55B1662309EC85EB47B323CE2EBA56D17E0A88175 +B2FD7B59B37F7D48FACD52A7DA80BC296E62D60D6C5F251554138DDC4975E308 +2F9673033F0A255FE037F16CE58A3EF652D3DDE2AE7FD39AA20E88FB0A7B4598 +02E993D6550EE854A5D9ABB3B15BE396E3FC2DEE919D354166BC1A2519E0F2C0 +228998A7243FFDAE507841771E4A88B610F1D390F7898CCAE418C8CC15A4B3A0 +9B74E01AC32BCBAA020C99B6856952158F866E0AC66F171C3A3265E713094F71 +BED491A2ABFA737A0EC17DB262A73EBAB9F8F9E96DC7C5764B92D15F5C967CB3 +C846C147DF1568A68BE099D8E38B5A9FEDFC66CE2AD3BBAAFD72AA51D6C08A32 +AD54AE75530267728A9EA3244E8C8CF67C5A28F67068CB4CF90FB76F280930F1 +893C952DC2A7ADE38C692BD19FFF63383308FC2873CF241C1C3D1ECEF6B98CC7 +287D9F5F0C61033CAFA9739D9941AC833A194E67CD1B9CA1FB4A02F0A53A814B +565CFDD9CDA06303ADB599D6CE17A7F6A81C13040FB7D6E98AEC4BE9F88F3B29 +FFA880E8CF8CB6F4FA009C4354337A43DD077D40C993A9AF66D2B524CEE5FC0A +BDF03740A45C0CAD814E869D435C61A964D0644E93C6F228B205ECDE4EE59D67 +C35647FAE9617877DB23272A9D777262A1DDCBB7CDCFD2D6136FF69C000F9B29 +DA30B2A654C27C564F113FFB52CE2F6618EA1C8102FF9D93B0AA2C936CAED8CB +1A9F2FA71930351D74240F88DE47423EAD67D66C20C8DE2ED00C94642C25630D +4A60B8DA5362D00F3399C6796EE25BB88325E11045FB6E00B72706257BDDA2E2 +76C77F6E0030906D646D759447343EE6CDCF9A61CF30C1392BE54A0F5951AA69 +461E856C4A2921C859E03E13AAA1D6F563D5F62A66065F36ADA9A08A697F53E0 +249DB7965E9312F46A18F6016684708F397989B1C291F63C491B48A8B1A51E8A +2C1DB13DB081B75784ECFFA1735A0DA6D443D7BBBF38B16874B57891E3C28A04 +C21978532D806CAD99C9CB00777FC2B9582CA68D285D0488B5724B9EF603D4A5 +4DC01291C0AAE941219EB99398C6051357DF7138324625A4C244A3B127BA85E3 +08C8272EC75E848D984E38F151E9C0D46D1BAE4648F7391B59BA76038391F306 +3E8E72B0B557913A38CD6042D2ECFA192A5124B9F58C887726C72C5518D3CD90 +B24196C04E0D05A6B590E067B17103BB36AC830CA181BAA072B137A344B7570C +7EAA3272A774A58E049F71DC9DF45CD22B1452A26BE34A5179221A01FC5536DF +BBB94E93BA9EC169BE596336768AA8C9A72C258B8A8CE7C511DD923193D886E7 +F6C33E5FD68032A5A4459955FFE76A8D5726AFDECF42818BE43F03D2B4B8958A +38D94568751E5468A1322EBF924C7B587D732486DF8E309CB7FE20F64C6A371D +D62BF5A33B49DD267AE4C3F638A76BE6DF49B693D40D8AE1E9F0C0B0606C84E2 +A6868B4F700A6DA1ECD097C96704B17DB76621FF4876149E6B2FFA89D38D8F3C +1026401F2CB949DE9313115E6626B26082B1AD94D0C1F8E7B907B3676FFEC9E2 +E31FAC5504207CA741486734336521C2F9BC91AF257472E4762966AC19A6E89A +87644A22CBC9FECECD919E513209FF439E2E7F24AA80B4D3C940021C23D7A921 +1B6E544E43FA00C4540C73EB0F3B8F352BAAE6CAA924C1F09C6EF7DCBF4BB88D +0BFEC67C79B6334A4A0E6099A460B57FBB845831ABD0E83BF0F92491ADDE5526 +E036C58BDF78FE25C55B9580F6D02F2C2F7D77399DB7CB4B8B8E037538D2BA64 +BE2BE4697B87366CFAB5A92932465689775FBD9F87AED9B53303DBC13C0C13CD +B549FF2D8C8C6C9082CCBB9B6DABFEBE53A85297555389E5A08E47F27F62EA1F +11915A06C9A1E82C37E4AC72B009B0CBEF25FE046FF9FF20D50DFFA97AD9856B +B51EEFB3DE0472EAB91CB0B51ECF29EA2025422B31C811C3E449416B8916C2B8 +63E9E4A80F9EC738B81A2A32BF196875BF8F52010B1DEEA25BC2719EFFEEA0D3 +A3AB794058EE49333468A3CF5D13336431ED14CEFB1A2D067AB3D2DE942D9DC9 +C0B5CFCBE9D9A4B53D9B2B19E28F5416F5DE29E73156516683F169BEC75C5344 +D953C9640552267E6CE554C418773F06BC8CD88084C60F8D7F37523922B4D49B +ADCC93A64D0C92973527A810F6B0239E5525A6BC6AEFABBC8FDF0B7E1B368A52 +3620DEEC31E00D6CD5F02E1625A571A6129DC18333B395D4680CF6F69CC6D359 +4C444307FB45B09509E36E0905C7B2CED23D9B48FF65F31EDFBD2073F718FC34 +99FB4A68B4225D12A42FBB14D7A3FE9D2CE7DC8925E6BBCC4EB53632EA3432D7 +BBB17498259DC19AF7E6CA3F124A7B39BE4C9768FB49748F5CCAA3D1940E0A49 +136B3F49025B2C3D09AC6598844D9D113297A68027AFBB1D8341FEC07FF6CE10 +28358FDBA753264E7865B5B311532DC8D16E6E1747E53D96E996B9F27D9CFE93 +460158DDB6708485029D6F31729805DA1F445C629D5A7048F06D8BBBC6BB69D6 +FB7BE6BF7FC02EC0B33462CF5C756F35AA56886688B05F6A417B8BCA35886256 +8EE314686DB5BD49E631AC220C299A8C5D6ABB974C45643CBC589EB2D0DF48D7 +F59EEF1FEC4CCBEBA797DF168D1D08EC7467E7C35F421BB6BEA0E9C4846A84C1 +70FEBABA787CC46391393A0B99EF0CFC33730140696B0DE9C57E90231310FAD9 +D67462F55A56D9666EC08AC424E940CAEAD58503911C4D80FD59CDD5182ED504 +656628B1851818197DEACC842E943D5A2B75B5934E8AED3E67529FB51E625A14 +4D91B077A53FD8C69C930C677497A36A6A578A639EFBDE481EBCB80536C9CB96 +0A2E54A15F6940F4FECC203A440AB47439C9FDA12A9D78B74325ADF44010BF40 +6A5FB9C012E07A557A60326983A0802424CEA244DDBF66CDDF918B30618F348A +8C5086F7A7BB1A86C7B4826323802701A584D17C6E19AB720CD13D02E8EBCE16 +4A87BEA7C6B76D05D49CDBE8549640FFE6124D2852A00A46768FEFDD2DD5B60C +3AA80C3839A86B4EFB035B65E1236F6DA58BBE2A9445311E8714C82310E6A0D2 +E926A3D18AC3E7A8F8A61AAE5ADE10E43116C105653E3A03E895BB2F7477A0AA +F1E481B4F1B3BC9DB099E60681EF3B0476D6E84DF5ADDA588E8320B4899D2D40 +F8CEA36C2039AE832C87644E2A3EC19AC8FECDD575364238524BF5F76ACB02EF +094278DAC561F700ACE728478FBB8E0C192795AF982216E2A4A3488D6A4BF06B +AFB8F4EE78DA4FD96437A45C1E1F49E83D6E85390F8FF9B8E487AFA6184FA430 +2A3E13C59C88E3FC8ED9102D485FCCA463197A32821988D1C0A7A86620655DC3 +DFEEDD33B3A1F55CD5599A58D0F4A390B69137D947897DC448A8255A2521EFCE +2CA896955E05BEA3480166F9FF82F1B145DCB56B6872449335275533C38336F5 +4C49F40D0FB04222D14E0AC8057580118B1EB1DD43A8BF334763BBA198D851AD +47F4499A2922816D2F0AC1956B4410E617201C82FDD7761C1A0C8AD025FCB1DA +9A0722266E22C438C10275CC2BFFDBE726084F9CBAD1CA9ECFA072EB5A317EA5 +2A8E39F8794209B978DDF404FAFD22831F3F53356401FFB85334D339426CCFFE +0F869606955F20FA055EE560B4744730EEA18CBBDC134644F124B714FD43653B +C0879B820871B8809020301A71D37A44252491555D9B6278A9070C088C0A80D2 +BC753160E83AF282F3DC077CDF610A18A1A83D4920EB6E2A2B73E40BA112F78C +A18A26ACD11A5D4E12C67A631D4928EFB809640F64571E5605AD4BFD3D00FFCF +FFE4FF9FFF1A63002175D401D4BBD218F40B4C56766A4FBB93741F9D2B746F78 +B062CF36E60973FD3D52810750C06C73CC376F5291442A4EEF4B2842B6317CB7 +E1AE735793AA5CD2F927E4DAD0470D0A6612E8C0557245213B0DC87DF4B9CD12 +60A6FB3955E007041838B667417524FED98D5EE035C212C8377A6E2393D86DCA +BD5092520A83CBFB978D2EEC4847BE9D4365714A5F36B343F87F1DBB1E2759ED +78EAA5491A4EEFB8FE1FBD10112294959C42FA664442335E521CA7D7E7BDA468 +AE36FFEDA896738CDB3054025485FA28A071C96A003DF5A940261ECCE471616C +A5B0223E7F435A096B90FF8ED7D88FADF050BC4C4C1FA51D4D389BC36E9D5D70 +9C38800E0CA38D1A045586E46563D855E4E6A8482BDEC35617411F8E046FB838 +1F745325CEF7AF2EF0D7F912A34BA6CE8676944A3B12212CE7AD55539FD9179C +D8BE8CA39C9EEC948BCCCF2ECCC8F10DD4C8E99A5922BD9A56191C4900063DCC +C3BED41EF16BD2BC1891D87E5DD05AF7C25D7E92B1BB87D53817643B621BB21B +EA839B295433042A7E0CE294C031A4C460F05D16B46430445717EAC72766909F +9008EF1F3F8404DD56B1B1F90A06D99859A1C45F7510B9E7C6929BF9E54053BF +95B4911454183A5F2734C2CC7622ECFD0664B77640C416A1DA10F13BA0238C25 +DF6752C9B793F8FFA012C6E8E2AC81DDD9E402F42DC4CD6F290BFF4B9C633E1E +52397F385B895FA3DC7471F3EB97244EFEAFB11BA92C994CFB511D7532304836 +151A4087F1CEE38AB690E1DE2354FA2A7059F42982D0CFD01BE3A320FB078F2D +7947E9A5C973DFE340D0A742170386831314BDE9D67134451FDE80E093C53F37 +F0FD8CEF42FA08555757888839D9DAF23A735243EBB372A5C3230B1CC2F3B5C1 +C8C19CB3C3E9B1A42D0B314E778F7B3F24C8D61375FA725B40F561C6619D025E +899BAFD602833506BBC5B6EC86A932F46338E7E26EDA743CC51D8E4B3944D186 +7EFEF666F9AE87E395FB9DDE9A936AB87B90771BE94B784B7584D71827874DEE +03B55096CDD953D93FC0FCD7E878A11EB46A10CCCE040A90B375995C5FCBBB27 +5D0745BF763C61DCBF193651A3E36A4112F823B5607F418AC8C41B51221F9E6F +0E9DC72ABCAC248BD8D83949A24D33DFEAA363508C263FF9B222347DA08B99F0 +2173065BB9240A61135E38D461736B04BE918BA150DC90043306056B657D6CA7 +FC27151322B0F132D91C0BD0B9483A6A26D84882095E20127541BC1D93B72AE0 +8A68A5DEFB35E50B37ACB926DD8DB96B910BB6F315FDBAE48531574B9ACBB438 +D1ADA41812A752E9876AB76B31CDE8EFDDB0DE7AF97238A9DA0846EAD39DB2AB +30EB7D7F61DB0876FD294E5E09916F0C79417108B30597932BF1C81DCF5CE0BD +2D65C84441D6354A9C8647D740C1B450E5DD3237EF9BBC793F1148155C0F950A +405BFE9BE30D9EF9F8812279F71B30949F8640E9D0E5B6CD133153B2866E7F35 +78795EDF42FAC47913A9083E7069C4D4E6B0642F55FB481E7004DEA3C3C86177 +A103AFC8FF966BB958BC5EAE139870EC202D1BAC713AF4E3F2FB9594D60E83F0 +8638980BDB2FD061C867E748420E45AFE685D27A2767D31E272B43EC2DDA5424 +AC17EB9D1C7CE94DA05F741F0F635361325F227EC2DEEB5A3EF3AF4FF03F5FFF +349A9571CA07A944C3974706C1E1A2A433F76149A1E33322E05335787A99C9A3 +98EBC8894218611339E7F065F13C02CF110ECED530FF12350140A7BC7BC810C8 +F17E870225D6DA162362C5587A4A13F52E9F92E31D0DC959DA76A3095661D000 +25A9EB458084039E445529C5A08E3C66FE115D2FE1CAD9CF27315D440FD45C76 +464970D0438E3C1E5F9CE9A9ADA95C5584532C7998063FC7E4E4DD3248148EAC +10DD976E786084D5CD51D263AA0B7B5F0C31C1A127E03CA8AAA424C6D31106D9 +5788B85D5B2D4557615AF4B1CE34CB66F61AB005C5968756539C44690C3B93E9 +0629165F9377A1B449E2D07356E10DA88338F5B16EC8DAEA544ADED4B3EDD716 +550D9103F3F97E86181B8379D37E53FDA0557BA5EA231B90655957080E0E6DC6 +114D07BA1C9D1BACD0EF6F7997BF73482B194824A1EE1A39A6050213FDB4C820 +FE4BDE84724041C6F51287B7AF2E7A19558AB32EE2DABA726577787D5A136434 +427EF025B3D99F7B916F17AC1382994BD9DF6FD023D2AA72437FD509F55D5EA9 +189108B7934E0B0CEA9E956A000C5E23732E45BD1762961EFF36F7389BA1BF85 +312959449D0751E198C9C34E1081CD049759573217FB73F6A7B0348533F2D942 +9CF18688587980A65F512906C42593767D8A08F81C62E42CF85B92366E0DDE12 +0B04CD253800423151CCF040354A70EBF850C23013A48ACAFC816C4C002D0BAA +0BCD2869368C497129DFA21813D2689F3EDBDA0956F822751B125CA6ACED9525 +51F85272D896B6A12EB9FB8579DF5FCE686804E3D4BCE113B5FD83478861553D +75E11E30471EC3A76C5DA24F5BDA4C5A8B72E93DFA470B7E49CE1F960FD3F10F +3E0E32BEBBB09244F091ACFD721B806D00593A925F97DAFC22C86BB5B0D4648B +1BD0C32F5EEB7A3CD106C00015CC89B0D2677C7B4F2D3D818B40336B24D3B7B6 +77D03EAE4775C93326F7EE747CBD71FB65A2A2EAC5F1D03A5999C5689B099127 +61A2F058BD984FA3D2785622909A03EDE1A209ED6BB56237887479A782C75A54 +BC20ED5EB4E2BEAD28641E95237D2FE51C70AC77BE31246C92D4A3175EE3FE6C +02612C7134DA79EAC6522DC1B52AD97132FF53EAE224C2DE9BB37E79464F08E1 +7340C8A79B87B439A484AAC56037E30DD391961E99B1BD4034BF50D00C1657E9 +8FCF4C2DD03612021175360A582CEFC4A7D12642EB33567A389EFBE03712DEF1 +00E971320F62E803F0775767620F37B34692C313FB9C0958E00597E1953F79F0 +F32186D202AF03829D2062335B64DE098D4ECBDED19516A3F4DC88D1799D0FFD +F24B2C0E899D45756733EE27A1FCC99BEF10C462E9F9B062E9BFC16E75459B76 +06D84FE9C552AF42B0B3EC237785B3CB5075ECB9DE28817B55C85AAEC0C94C4B +DA282188747A4CF8D63A50B9923CD27DB14D3BC523F41728A2D90ACF46355944 +991DACE13425D8DC18BA74B9F61923E45C978DC8B2D50939947CB4B33596D6D8 +5AB3DD0BD8E4CC3CB8D14590F900354CC46858D09C4BFA8142CDE33F8B75F349 +F535CF80B6DB8E64E6DADDF520D9E29D957BF1E298027BD5D0C4171DB575EA96 +1AECF1C3DEA0950BE26E739FBFB2BE59B86E188816CD44B7ECA980C1E44AA079 +AC2E7BD3C6FF65D9779B60ED34BCB38CCF793BFCF59B84A89A8C719C40EB0A23 +A91CCF0C21CE3DF3985E13C2EB9F89D6B7CE6923077D5E27260B55BC9FAE73B7 +C7EDE7676F922A8366154FAC92C7455863A45C4F4BF140776935BA4583CB1EC7 +1486197EDDFA9E46DCE6A28C992B10DA89C4FB8CF80CD39AC536C1D41C6753E3 +692F8E76928B5D4F2E86D30F7B3954BD6301ABB58CED13884C284C53D7A734BC +46A9502745970B12A16058695801EDDFF1E65F7242CC61F6C4163A67DB236F17 +704CF79727413904319002AA4D81BFDDF64EFAD2DC47FB896BCBC5FF19FCA3ED +B2321FF9F8504241CC25C1922DBB23CD6AFA25DDCFD473AC617F1333CFB469F1 +A343455681B59829DFFBCE8406D374059A724C7124FEBEE05F9BF3206254A931 +0D276555A890E38C69BB578DC8D7511E5F82A15E8E4BECD06D47F6E3AFD854C0 +B968F0923B0D7A3672BF7CDA1DA9CD9FEE74D70A2CCAD4055062E3AD8685FFC0 +B5BDDB530C857C3C826981C0F2F91574DE71274A4E404A1D73020F4B50376EFC +748EEA93D6E1E2DB1144347180ED372D2727E2DBB8E9334778AB1C4E67993D28 +5EA56E402DC2A8B87D017778ACB9585D9C73780CAD7CE94B6BB727BB93366612 +8DC1B3830E7E95EC7EC2D539FE7E73E55633CADBC630F6B7DC36D77ED47B2958 +0B263DB67F07E16A040DC602CA362233C947B95F63F16239F0CA977F1A99F9A6 +B36F831B7D8AA5BD29DC4E26DB4DDB04508C53EA8041AF99D33899327C353C96 +A765BBFE74CFDD198E2FD0D9B9F3F76F2A8178A530919CB701F51DE0BECF3BFA +B6A10EA4DB04DA17C04B2A932E937CCB268F5F427485C217D284CF602C9091E3 +6977BB4ECD4CA46905E79C6E847C0B7FE0A84F0DD43F7EECD10CC502F95293FC +078348DBDAC9DAF6338E1F9D7DD289F52E1021E27851CC45AA0047F2FE07B5C7 +A6F0F8BB5E26BA7FFFB21082351804662F9C476E9D721E8A5BC81F2E5CA81F45 +4FC091EC171438E64ECE1899865F483D6015792450AE1186640D1E3C328B915E +2893621345A8EAEF8A017CCA2D2608C5823A23FC7575397C3646476E8D26BDD2 +8C51C4CEF109EDB677017739A53CFA6A509AC5152077EA5ECD7A176578B6BFC4 +ABABBD0C484F31B293EE6FE8E68A281EECA6198A8BC6CAD2EA4EE2C49390AF4C +6A710275742AFCA4E2A1DBE04123C080FAC65EB8C6AC86388FBFFAC8EEC49BAC +464C4E1AA0DCB37AA6503E364FC954BEC84C9552300DC9495DDDEC35795EF8AF +50D2C0CA0F238B3FA1CBBA9F9CBE1F621C710F73B7D456073082BCB28170407C +FC3007F52CB71E08A85621B22B4DF750D011175E0A29B4FEBC1D8625E713D050 +31325515679F4A0D6EF17529A37C0BBC3F8F2F7AA0A6F57977941AB4133DA64D +1AEBE4C7FABCDC25854BA5583678FFB54956AAE6D94F3E06D5C0F27B1DCF2421 +1C74FD8D4F0A5824DABE0346804CDD2D96BED494EE8B9D99F133F325D8CDF0EF +431AB25D5025BA7A7E8B329AD2F89A53C3855AF9CD54275E030C3051632E5CC0 +994AFBD2A15772BAAFAF46FA10543A2B0AAC06163802D7F748C0EA0DA9072E54 +19E4BE682E9CDBA0B0D7E9F60A90C6C8491A6F30A5D310050DBCF613CC297D4B +66974DACBFAB4377A753A16FE6394542A275D14197D422CF91FF360E8A63E8B0 +2E746082582E2448F6CAD56E488DBC0F40FCBCBB993A787E70BC9D8E24176B61 +FF2984A3855F02787C6C3DB41752B63FE0B7B090FC6D21763E96F2AC80B8994C +FC3DD8AD32562184A3FA34CB6C0C73CB587529E35E72337A1AD22970995051DE +2D10E84A14340589B08FA907F5A3570F98713316F633228AC0BBEC6789BED276 +6E2E1597D0C8C22705A729622749A30BDD267F7BF3CC116F7F888A4F4AFCD688 +63AE5A71F1E2F5EEFA3B100B19D6A893BE519DC5DAA215B143F807296187E4A2 +F52FC1F4448B0F4529E2156CE980293422994E484EA3F21C9FF7A56BB005A4C2 +F073DF6552D40E5DCB7A419C620C9127C451EBC2E341CB0649A503FA0E1B38D6 +2BAD504BEEEC35C13F6CB0659E719FF18C523B882EBD74D43D769E1F8A30354F +8B790EAA99668110FE86806BDB239796E9F55A75D110D000C72AB2A430241713 +FD770F84793CD7BC488B8BBD59DA1BE3AAABC83F5E699F2A9D4870C2130502A1 +7CC2368B92CF0D52CB70446A3F634582E2E3D320CFC4353A748C1F1D91C7E4B5 +5ACA209EA88800AB7293FD1E8064B10C1A5829535E26D3C55AF6AD9B4ACE497B +FAB377677F34D002BCDF35C0BBB7DA7833638683788748A16D075E344CE8FF95 +C09C6DCFCCBDB48EC084126BCF94EBDB1856940C67BBB69B8825E91A98F699EF +2E378557776C9788E2A80ABAFE3E7E3BB6C0F32FA770597E37F271C50C10A9B2 +F90C8D80F4BD9F4C1098A306CE886C127946D3DB39C82F31F1CB1B1451FF6D9D +A519AA74E1C7C4797F5E3EB440105C51ACFF85734924C0576E826B210C501232 +456601B688A3EA9494A8F391E1A0BFB7668BF6D0E1B82A47E91BC893E13EA0BC +F8B7BA17D586DEFE3F7C2C72909106A651908325E055DE4F4E5B266D71716474 +56D5010FDC4012A2D659234BA355366C4E737FDFC04B7BECE1C1E16A7158FB27 +21AB8752DBCF8EF4AD11D185D7CE3BD84CD520553F0EE3FFA0AB3D773978A425 +F6C1B4EEE27F127C469005AFE5E07ACF2E438CCA628A77D90C9EAF7072733357 +CCF508A46C831FB96D0033FECE34E85023015A3AAA5E373A790DEB5D743EADBD +7D249F543389FB089F4ECCAEDC4B75034AAF5DF41AB2DB047BE7C9500D34C60D +7F38EC93219FA9C8A96523B981103196DB4D45031BAA1CF5018F3ABA08A547AD +02E77C769762C162C7931A91CED9B33EE6C3BF4E59FF8EFE17A952FF3EAD46A9 +FDB74FFB0FB988DCEFA31ADB3F2A78E7C51BB09504DBBF1D53D96676E5843D8E +DB50E2C89E2FA58295694AC71D7DC610756278F387A7809C8CD27152672314BE +E287E774C2949A13B03BCEBA7A9A1A0B927AC46D8FF136C5B305EC65609F6162 +39908934CA61A225513E658F6B42F15A3621A45191F5437EBECAC64914548C8A +6750FA2C9CC0E3BC40E01A21E3C4BA1707915D34CB78C96F0BCB7E2B10892E71 +174268D0234CFFCD5E60BD7955A151226F4987B67A69D9313CDB1ED0F9F34958 +33F7D16834BB40A6EEC4A5E24F57067FB59FB8D8C9AADFDBD3A897D8C91770CD +D4820C1AE39A2D1AEC8B457DD856F81B3E698CF1FC5191CF60B1A80CC3230B63 +59C1384BD01EA86208DE000C9D3857B3243C95D6B6BA5BC693C539F7F6423205 +1F0FC68EB360DA674569C20FB993449096394328BB9229F93F45ECF5E11371B9 +63C233E1661C8451A3D1E076D243F6E887C82E49E00E2847CC33858370D560A4 +6742B1F48C2EE6D561A6D43BE796A09976E0D69A4A6C346AB895264C96092511 +7527320E9EA8A73250607B09BBE48D3952998435F36FE4D1CF667BC28ABCCD69 +FEE40049B09F1F39B64F3BE92C1EAC9C4661EBC403A69A9180FA83D1D5E590E0 +647AD00FE509B0E9FEB752F85726783978CE98B4AFAD649D9623F41419F9923A +A11729723270E0847AA464AEF74FBC743D8D805322360364E7751743552A0AFF +CCEB847942D9689E9659D15A3D795AEC8782C6EBCE6760E687F87095FCDDEA8B +C4D8FCE65634148638A8DE5797BF21266AD94E363F58DB84561B74CDD8D5FAB3 +59A521598B34720C54C0AFC5B1A415B7E929D6EDCEE9205DAAB716379C29289F +2C1AA7EE0776B1C6B6AFCDED4C6ED7EDFF1AA20523EC52F8332C2C0ABBAC1A2B +DE91AE501079F2A4ECAE93FB93082B1A241AA79C1F7907F8EB3BD528A2353FBE +749B89A4FD00C8C9472446EE4B6F04F5073EA7C2854835FFBA548920108192AC +8CC658B87F249321015CA481B2A5F19156F63C5F7C285E18456D0CF0E1ECABCA +C9702A3DC3911A3B179C837D4849DFEF463B9648AA2CEE8C7B7304B551296AA5 +4E73AFFD0D86AFBBAAEB71082E250627D70CAF3D246867A3676ED1BBBE99F6FD +32BCA350821E0925E99235BE60C72D8270769DBE50CA12BE348D5145598EB0F6 +2EFC2EAFB348EC74C1F9025DEF33772AB3A41D6F8DDE6CC6746701CF75C86B43 +3F9224B633E510BAB613F6EC46A685D32C1C474F3509FC63268C4DF841B9B38E +9CB08A26518FFD1A402D43C079C5603589D578DE2E8225A160625B6A484460CE +5C445FDC1D3A58A982D205C370D86195D988E277F92937BBC9FF72851B0694B4 +D484FE0755962D2C4D81DA0F1F36973CD69765482A7DF0F5E701A3C5045C97FC +09B5DEC1E35BDF033C02B7155B72851ED7A6BFDE12196DB43AFEDADACD52B93D +E6F247F438A11DBF4A6D6CD59834865EF349F87DBB7EBBC5503492F5BAEA9615 +32AB4D318C6D1BB372FB14CFCB4268EF69128DE3FA99379609DF7099E459B557 +E7CFA0A293121A700CCC679D815F0883CFAF64B603C9E588488904267AD3EE3B +9A8F6BED8EF48582F4A420AAE9CC3E0A61EB8D10C816C3091074E3B6345FF4DC +37E1C1597DA71581A9920E9858DAB295178521766178F2141851EF5E455CE390 +4CD16782A04606397A6B4D13303918255700FFC68D83420E3F37437C073DBE9F +C80EC3F7D915376410FC4961F37D73D13268B7E93C8B4F29880B535D14DE1205 +615CCB9BCDB0164F2D9C3E9515BF00C5D4E164A6B495E6A80EA01D3D6226BABE +762982E7B5B74799A15819EDEDFB01B444BA30899AF2498DF31B1198C9115C88 +720C6BFFE2E0F33944274AB36CDEC08D18D00AD8AAB0037680DA8525AD9EBA6D +8847EEEF0F689C466DB5CA6382B52F56FCF8490F2A931B3A71 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.1: CMTT9 1.0 +%%CreationDate: 1991 Aug 20 16:46:24 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 54 /six put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-6 -233 542 698}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E +2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 +650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 +F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A +D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E +F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 +4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A +438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD +BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B +A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 +AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 +D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB +CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A +082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 +9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 +4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A +9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F +B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D +42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED +F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328 +A2C69F817061D6C60B121EEE844CA5008F23DF07284565BBEF0CE7F1CF6FEF28 +F076C9A548815E85D9217BB252D3891CEE88E98C74015AD579DAB8A8F3CE74B4 +E054D34D0C8CBD8CD31B76ED594A67C314D947D71132A546EFF9F0A1D5C9EF00 +1935D169FDC0597ED3C84AC306B76F096C76CF2415ED28833BA187E53992D4CF +7989F353CEA37B66136E61631E21C0C94A66DD92E36A668D781331758FCEF642 +0BB4EFC8FB6B340077270EF871B3FA6181714DF7B1C4F31E0A878E8A80F17303 +08125D405932EF6347F2076FAEAD5AD3B6BFD37FBDA386349E86AC43FDC075FE +2F723D59ACA1827B7411FAAFDD192B067D9ADC43837A4AFAA44A9B9977F38A40 +B455394BB37FD42F864D87FC6354472FD07ABCCDB8ADB91920F4499E9FF9CED2 +7BC068A35B1E8F42C1D713435484F507D07BD88FCDC2AD786357212007D929AC +91739C997CF60059723035D8118760650266DE84D67BBFFC8F9160A6047E1872 +543B2E6314994D0EC2239A0B392E4E063B59935CB1D746CAB6A0CEAD5C607BFB +2B8D8BE15CABC61545AE4B0ABF52D5D6D4E79676D54319CF5C372B1620FEE9A9 +ED112E8EB0C9926D241005CA3E0713D7C404A4E36BF2CD40ED1BD929C502977E +5519DE3613A4BE33C2202BD51A2931D1B8DF61D0FE4D579E6F0AFE9F8BCE6B81 +620605D3B24BB4E759D444ADE5D414C358E01BD56077326338059D3E072DFC6B +A73042A5079C5D208C68919BCCB94D915B85FDCFA99307121D906A6644B1E985 +7BC0B72B5AA099B6FE5F136CA1D3858A24B67287A286F3A33A14BE5CC6F58AE3 +BAA95A683081195371180499A2DE681E8953092BC24A9491AC8C12135D697161 +9594262B9062AF226ECA469B31E6D983B52CCD2A3052778B124C897419757544 +95F0A7BB2CEA697A5591108D7C19C0AAD06F64A87F5582E0D48587D39701B3E7 +D9DC742E6C7326E030335E0617736614AE8EBA185F40263E79798C73924DDC32 +19CF344BE4EB06576343FE3E443E2CDBDE0EA7835C0D2D1151B4793C27A1B1C5 +E1AE0233C7A19CC23FA2CD07A3D73B7DB2EF96104D94B2F62DD3FB7277351A9A +52A0778A3C83656B338D3F8951BC5A9BA28002BCF4C4815F119C001F6D656924 +FBED0CD9A28A0A49E200A3683F91A705B6847EBA41E47B65AB0905F91F908157 +0172210E075CB7EAED23A3F51147394606C02F9667A5DD977C4AAA8BD09C9294 +72C2428BD937C93EC6BE3E67DCF4928A2A96115EA1A98D6B06658493C2370E6E +088E8B181E6542974FF1C51ECD7FB084932A9931B33C7ED6DD22C036829979D6 +760B78C1F08BAC053C883BFAE5B90FF2C1DD429AD5613D9EFDB35501069B651E +969E59CD89B214F252D6E704FA00601F2ACC744AD9B38717C0BC0DF1E6C6DE99 +069E1E16FDF9CB81D9EEB02D27AEF5DC382BFD68689EBF58F644C0A3341F0529 +9DC677EB851B300E80519FFBCE90300F2D74198F9A4615C55DFFB10540066F5B +DE4597687BA06A7056467B5B2261ECCAA224BDA8B26FC76939AAEEF3D9F19909 +A639FD5FFC9B7EEA77FB99359A55F776D7AEA05AF8F2A58F3D8D683A75C46D8A +14984758C7DDAC37182186FDA630FA43754CF09E518E7760E073A39220C423B9 +AEA6962C84B7EE1389CB8ACDDA116A15A28D48F630685888C05D40A5E2FC1D5B +A1CA6CB880CC2A3D12E68BECD474AB71B601F84047B8F653DCAB5D752D118A15 +05B46BEFAF68B6575E2C24D26DBAC139A29A218042407609D1DC5382C116A77F +B793FC657596D3BE2FF0A30E64488A8749A6051209AB4C9D723442E1F16E66B2 +EF043314E1DF470B2087E9733337B61438E9E730EF61917F094E067457E52DBC +3CB73A61F5599D3F80BC3A30EE2AED6725574804BE163BDA713BC2E16E8A1A65 +293D12C2191AE91FAC7E94A6C0BFFB3F0870DA9EC1F21A9E69654B72886FB22B +6E603A7F31F327CF361B89E1C88FEB1BF3E537DCC0E82E4FE3CE976FEBFF885C +3070D236A7CBB2BDF557C51A5F28AC6CD527508AD903481254A7737FBA4A0800 +D9A54A384C9E5979020A9609D6190E0C24C4D092C7D0B09370AFA5EE3C372ED1 +C3936F20543165F5D70AA0D4CFE2017239954E617907FD9C72AA9C2FD4C94279 +46DBC2FCF2788F62EA5C8E6B16ED355C14C5DCED3A04E276E22268F7D80DB574 +932937B1DB44D2AAF4B8CBED21BD3DCF7C620B115ACA9BF698AAC602BD0BEB65 +25890BCDB375DDA7C8807E43E534B849C21FCB75BF960ABBAD8561902C242DFC +B2D3AA455524985FAE0CBBC9839BA84D77B3EC5B38D378F4C203AA48BBBB9757 +809648484684C95DF804ED2D29F672E4895BE54B821FD25B6C57EFD164DB0E5C +7D178E57DE47D2376AACB150C60D986AA7C3B23392B7A3C7C8D89F86C98BBF80 +4CB51559D210251588340AA851DA3176CCFA61F8AF643A6E52E4109F059EFABA +3973E580FBFBD2E75B73D7FF70C13D1394E187EFA4AF831B5A6876B3748A1CFC +2F642F3829F5699C0DCB3CA99B2FC34176C6FAA943813CAA6A52CB170E87A1F0 +E02DF9C1243E7B4955B4380B6D8800E832E2F799FF72F2C0A3A373F21C43207B +68A816147A46D8B4070E96EECE7AB0FC949D0400EBF6232EA7CC9A81BDB0F7B0 +886D5A1316A9636D779748A7D8E70B36A3AB65967C3258621100E0D6675376B9 +974959879BF814EDE2E764C84077561C357D9B427C3689243BB73C1B49D69B1A +39379E3E0C57C9ED1D8DCA2C2EDD70652020773518B16AF171A14C77720EE361 +B3E79BA06B7B4182A2148356F0D7038E6CE2545E13142C93D3F20F430A927F96 +4902B1A00579EAD4B2EFB6E7BFD074D41A013624A088412D9E961509F1E0D60C +BDAF336DF7FE2240A21A1C16FB2E112A550BB4700A61918AC6A21FBAF2EA2ADC +828F356BC995BCE890CF78D8F0071DBBC47600589A65AB58D5F3ED6F0EFE2C09 +F8182026A24F645830A19B5A14C4DE5337ABECE46CE37EB86D21C6B7944F8C65 +BBB716DFCFB8E7B3885B85D376A69E5EE7A8F7029F6C89E4C442517F66DE9353 +BBE7C67FED5D1BF039960B1169BCB617A99526E7920BBFDCA33E11D279CD8AA6 +A7889AF9C8AA7ACD334E3AE2A4E48C33F44BCC96F3D78143BEAEF0EC9FA357BA +83153E31EC162FB03998063DDE15DA5F51B261CBFC82690C0D4BEFCFAA5FCFFC +E138EBEE9F4DA0CE076805D2FFD37586F1F45E7DFB68349C4173BC7996794EED +EC2673224C40D2E0FFF9707F479745EA603BF93F6A99EFE10C7F449098DFE0E4 +0089BC6533A317F51A4BC0EAD3314DA8CAD24188DF1C6570C6E6DF36FA45ECC1 +39DDF72BE39B4A5ECA23D5E09DD856C10F0D3F25D78F8478D57669085B1D8124 +37C0E20DFF027B15614458F86E1BA3C655448F2FC6AFBDF333568F3704149C63 +E394A7F98322B15FFC5DA905ACCE397BD928054E48ABC3DA121B0A182555A109 +F014E0734D5AAF5858048F49F0B324DC77E060417B54F3A7060DE4475774C5FC +77E7F583918AFB6E7C6E5AF0FF6708EA61ACF225DC79FB5B19AD288B4E2174E4 +A480A30FAB2617A62FA296825CF53C8EBEED170F11EFD6D4917770D273604800 +F384DB40581569C5041992F4EFF39079E8925294D26DFA83B091457E1E8B8B26 +3BC281683D4C19E29701661EE43DB860177E24FE50572FF9B44186165ADCE2EB +FCC16E4D41DA9B0495133941815AD4D559F070B3E05AADC78D01CE604B260AEC +6508DEFC3661719C04EA4F348B21BDD60CDA9EA543BCE78C2B4C85E870DB0B13 +2FA544ACABC56E8ADDA9CBE7FD8FA934C9AE1E0E998402A2CA6EF950A722F550 +6817C340EEAF4AB987C0AEF640BB2B739F5B21A96ACA55DD1DFC43F8CF9D1899 +FDCA0A5D55D2C9F4CF0F738C1D60A216E5ABE76451FD310CE60E485512139FE1 +DAABE87F8619669746C80D3306B8B6BE040F8C15ED2A69191180F3C887C847FA +F3DD9FECE9207774CA07602D32096844F681AD05B79A59EE082B9D70558E9B0D +9C9CDB807773E6EC3EB9BC15100628F961500082D34F2037851BB50546EB32A9 +E2ACE8E919B3A4B0CDC3B772B4670E3D8A23AA5CB70B8887D43C937BDA694362 +630F09DD0D5D759FC52D6464657CB8694E67B021DECF63394ABA00FC5294B482 +E7986938C5A302B41370FAB777A167E19F2615EEEA0B4334C5B644AFEC30FD84 +C61FC154A0442DE42606F4F86BFFBB296FD58EA4C61A266913A052F64E389B39 +00ACF232A472E72DFA9F75DEDC442D9D7BE5FC1E029E6448113EDD17E8F21A0E +C13680609691B776763A537A85F87E4B0AED171C24151F72D63A5DE9A4407FC1 +FDD0FB731C8D37664BC51E050936D73920ACE8F3489470C75732A55C5147302B +1033634FC4BFA63E857E8FCA328E9B7F05D0C0B52627F01AADCD3472281E0872 +F970229A6A64457F49A9BAD409B2FB60B683472212BBB0D65421F72CF3F1C4C5 +3085DB6D43BD7101985C6AED5F847C95EE7C3BC5F25CED1F90BD73A572CA2870 +3207ECA293318FFDAEB6E62B00BF3BF8A74134819BCF8C7ED7F381B3483D150D +BEB0604C226B03E4DE88D7C58EC8C4DB6BF785E03E0381922D29E6AA35979AC4 +0DEBCACC1748EED7BDC1188F32C833D10544CE363D8BA4C1BAEDCB8533BC3C87 +C13A72E1B196E4FF17E364F4161416D54E3E4C81A9F195D0FD825525D5F9EF69 +723E889D8C82E3E22078A8E430B2940329E917728A91D41D834A0B8A6AB146DE +080B33DD7D54BA206BD577952573EABD08BB0028F76DAFD32E5645A0020A71E2 +3503F599EB37E59502A3D87D16BB530007B7A5A01883BBD7755AE618DBA3AF0E +BDC0013822545D40D40ACC23DF07BDBB0AFFAD46FFAA0082AEC302A2A540A30E +DC3DA64D8681E01F744C06E7BD019711CE1AA9C34D60F8CEE96793C3477131AE +672C0FA34AAD8BC6FF10B2D986506E07E0B93CE8AF15BB6F88C2E0F7525F5275 +6279AB8036BD871B0569E924AB1EF44496ECDA2456258128A8875F9C7379A65B +A6E3B1B1B4F7D839E31E682FB9AF51D0F5E16C8C8DDAE9373AFEAE392FFAB643 +8B779858DCFC4D6C917ACD3B5DA3E3BCB41C5F489925D45398709BB202082527 +2CE1113EE58B9ABBE345E1E0B81326A0B5F6D8673F8D916A10D49E17E6A9EE6B +A49DEE9CE9341D60BDCFE7C5E23F2ACE74E2410C8D7AA08B8C87934B7E25A293 +2C009BCF429D4E5855AC07C8BE039BE1C43D88EFC374C5D1D4DD0897CC12C4D6 +832E832670B3AC8810A742D19F2753E07C3FCD214BFD159E68EC7C70777F2623 +FB5A5A493B76C0557970D7D61776B9B10A62CABBFF26AD4BD31FD8B7C7339509 +6AD519595E5D9453EF513F9C8D081D9CDE9BA95864439DBB51215A3750B4BD6B +8224D95966A2A7DE8643A3A4BB25B6D36C4D13832C3596C141B9687C783B42A5 +53393CDAA387B6E5BBD02F8A0EDC987AB79972AA7459833058891202CCB89B55 +8C02A10B0E4B543BBB0940791E72A75AE7F88F74FF4C4F22B0F130D97E38D815 +9CA982109A3D84B7ECB8704F7C553FB8BC64BC61565E48BCBB6F6A2CCC1F5067 +32217F7610347DF4849B4712E02D06908673117D7CC67598DD3B7EEE5C9028C7 +A6E32BD23E40AC3B5CA11E251BC9BBA74A37B4C6E1140555258C09DF0384F318 +8005E822A6801271634B6682938A4265737359B176A9AC91F38C4CC0BBE42205 +9C7896B48BCCA264B690491FF320917C8435649EDE509019E0D346DE9B241C31 +05D5401B68D63395F453D3EFC344948A37859ECF58BFC6B5834D2AE39DDBCB00 +56F9BE5115B8972A8AE8626234CE7505956BD6BF328F4AA09F2FD5B04A6B9273 +536DD8DE5166569A60ADCF27797C39B19DCCA6C928DC8A27C778D57405D77B57 +79A36660CB92D8E0215225F7D0B46DACF80CCBBD1020245B7C728D7F581C5412 +97191889A4199ABE2A0D261F86E5C1004378153AB6DAF5948D7CC2C0D4356B62 +86BCE32439DFDD30F5BAB2DCAF3855E6BB025737CE3FFEB1B2124AA5BE3084C2 +BCF2BC8C54212B75F5E741B66E49D36E51109007076B446C65A112181B42E721 +FF95011DBA1ED7C3349C889A4F6A55C21878647AE8B3615A87D3619057E14471 +04B5D5552CB886808BBC66B2CC86D7C040104A984F3B4E7B28A85FA0E04D83E6 +16877535A40F14FA5E2661D7209212D57B271F009CBB11F4C5096057A940C68D +A2A5D5F2FFE3ADD8AC4B56D73FDF49A8F8C8E253971B74F5F97C9397B6273D92 +1A684C24845A9988D993D26FDD816463B8DC021381FE041E8B39FE1756FD9ACD +93EAF3BD313EFE4334BAC1D5C0BAC7CD96B54CDAC088761FC4A712693AD9E27C +B80042A35B024508831EF37789426A50F7729887A6136623FC72C79EFF02AF92 +C16EEA04C8BDED4E36F7168A6663943677F201B42C6FEABA4451E656F125A768 +71B87E37395283DA33EFBC32EC3CF594F2855934501511D0407F0927D6AD83EF +EE8ACC2218706BBC1EF73DE12A30012DB5AB7585A1111DF2F806A1454C0E027F +7F8A1A20C11F63D5D819E0880D0E0D5FA865CAA0A6AD24705F484CBBE6112CFC +798587925A0B7A7DF5D0A6040B86EB87AC0D70A5B59A109A3BF7EC528E585CB7 +32403F77C45DA7A4734810421F50C25C72FF0F8414F5335789CB749E4D20D251 +2924278C9D4E3ABF5F266A56BECE755E5318C0B37F7F058CE78573914BCFD5D4 +6B147AE4E632C737C9F399F3415914DD3C57C05C697CA13DEF0696402444382E +42257875079560216373E8D049C53D40CDC962D910F62A1D31AD6BE38675D993 +1CC639034FCCB16F47BC2646F9AB7C9A0EC6A6F8C5CF7C5CE4F48907B3734A94 +66E1538A7CCA5A25962D3718DAD9413D4A83FC1D771ADA62BBA18B61E5C316AC +5A5FD60E465957FB57356D489B75BECAD72BE7D8B00E698C638C8559505052FE +BAAAC08FFC1401C6220BD743C1DE9BDD4394EC43301B1286E309E82064C9109D +86EDD1B9463464DD9802CDF87F2C69BDC36FD716070106836B1F094395A237FD +708CF182D7AA177F8035BF20112A89BFB7C91782794BABA06AE5EAE132A409D5 +5495ACD3CC44115FEE36AC1795E5FFB697D5FFDE200CAE0D9F05AA17C290CEE8 +50D4C49C9D454C5B0478E34594C670D68D07AFC5F43DA79BE491AEA1E9580198 +6D1866D7C18D3724BB1E816138866C7365CEE09A417E22DE299410FA84903F08 +930044BD6190BAF3EAB5E6EAF5B9D1ACCD1E0E815842912B294B0AC8D005A107 +699A8D4EA623166AA426DBBE2C40CC591E079DBC45FFF20601D117CA0A350F63 +BC78A120D41C128945530D42C2EF749883C3398605C2FAADE077185E5C00397E +06C2A11F14652CE4C4EB0D2F2D03574FB8B2ACC245F8A574DD8179ADFDC0E33E +CD6485343FDA2B9B93A78A7E5A66E2F124CF7FDA4E7E1ED950CC26252B75F48A +245E6276D3B2B57846E33BE57F199E5E8F2CC4FFC5C8AC892380A74A34370773 +D5545F0866CCB2ADDFFA0DB418FA6603242743E57A6B3865C91D1D2E58C90368 +1D1FDF0EA982DE83FB982AEBEF6B9C6C892A84E31B8F01E789F13D3897594C50 +3CA25239865731A70449CB6F5FB17E27671156D9B5CDEFF26CACDB53A6FDBDC6 +94D182A742DE0A6BA0A94A97285FABBB33978BCA5CACCDA547B5E2B94CF5888E +F1FE5B08E538E181BEA643F837F2C8ECF2F037AE2E3BC799736B872356ED8540 +08132496E96093F6E54D81C839110668811AD8EB85FCCFE57BDA05B3BB36C49D +493B8FBDEEED0A75EA7725F47C88877D3203463EECA12DD006FB114ED670CC01 +5B833EA5B7A2653F6EDE65BB4E4814462CF57D6DA21FCB31AB047B44AE237520 +A0985C465901BFC451154B1EBEBEA93A52426A431EEB4E5B67F09CFBED73847C +5DF607D9B0F652E99D385AE147EB9A4CBC1BA1F8FC0D9BD0950FBB53A0E125EC +5D309660F53D33CBE34F9A8DAB9B6ACC925FA8D5E44D4A925E832230A2E2AED9 +70BF7D0E5F72FFF045730EE23559EDF57276C359D7F4FEA17169C003D8913B18 +ECAD8580AE3216DA2C272665B7E884F1A324A42C3B7198AEB0CA29CC507F436A +0E2F3C844CDDB13A7F08BC02EECE4654B65EA5260C79E6D765BA727C67A05F2C +E859BFF7257A98E7417C6028C65162050D75BCD3204C134033F1F0238979E3BD +16CC87AC37891FBF6CDFEA5F597C580DF2B97F40B30F1C0C3BE5BFE17F50E9BE +649A7176012DE190C87A9A121E0D6FFF8AF785A9296F870CAC751D6AB615142B +F0906CA484D5C6C5FFAA3AB1172121115DC0D6320050D821E127842FDC76E794 +BD15784EF5BA1F9744A5C7E5F5B1C13C8F6A589CE09E34E84E32BE17E8F0A7DB +0EC8A2DF7B42875183FD7203C3648F71CE2E922A523C4992FCF2B3B006EFD0F0 +80C915358A2840CAC25EE98C63066F544867C5DA5D0B38972A30407040210E1C +6521116F8934A475CFEC2EF86FBC3B6D4E505859FAD7EE1C146ADF6AD5BD4153 +9A74388B6E82534EEF4D974959E1817C79F5ADF22EB9FD06B8FD1F3AA33AF4AB +EA293D18517B8E3BB1B188FA33216D2287C8B3B76BB1E1F0B57CEBBC7BC4A33B +241FDC73F1462AE72C85F106C8DCD6258F98522D7F679770931D8571D1ABE54D +4D7D7769C2DC95F8D76C00E43752C9B9EB6728CC52FAD9F0F970039C806001F1 +1F7B6913ED4DA7DC3354C8AA50396ADF00244F235947497731EEC97B62CEC45A +314626A50BA9A651A2DFB2CCB98E267B4B99C4444BBE65B685AF3F75E3EE1823 +3F342FDA1D96D4436C250B2CEC024297689BA42EC47976147E5249DF44D211D2 +A115101B84AC60D85C6F4E0B0FFE40718828EBE248D3528F576A7B09327BEBF2 +75F1C0CA1493627C8CA4CCC318B4DDDE39D19DDE3A3512F37975D6607D13E890 +46B2FC2C190D6BD0FDD3DB46E0828E6FE14B0D4D05004A39742BB0C739771A79 +30FB99D67E3ED9C6D5945CB68CC07445F2814BFEA35E6EC66503F72BDE2FC89C +5AB15BB82D3621AACFB83229AD75D7BABAE812DA050256DBEA32811132BBD3AE +30705DAD3CC04FB369577D6C6A47234D64FB4B65EFE732507D634C104A6D7ED5 +011925FCED5E9B0209C1A6FC7E2241B5AC0137C9B02958DC49BF1ABEB4510EEF +9CE5F52B8DADDDD7E2DC8239883D8E464E1485CF91F86EBA1F05C63EA0DB7D70 +5845A5CD291C4A7DFCFA0485F322E6F6169370B901BDA83074E03E3A7DEF6A51 +D747A4CA0DA80780E5C7750FAB43DCF65825CAF4F1384E732A82B41B7BC10D1A +4DF2D164ECBB5A412A2F661AA9EA5A830B9B9FFA9BA28F7C77B4B44630582D76 +21729619FBE1855B765AAC1D1FC9F210015761110204A1DD1454BC2083E0C0B5 +302ACC80661F07A4E7A383D4504765F1BBA6453656EF433B057745CD4B3188E7 +80B1D64743A3D8D4C833DFDF1F7BE62DCA2E8F19B2E6B42B5824D9DCE4D25169 +B1ECD48AA770DF10B8CDAF0C052B74FA492C8F1F32B8F6653AB71E89C6AC861A +17FC1C2521C3F13D51C8F3E8A194ECEB65D6E378DF77CA59261D89C22F447ABF +F32B364C3317B10D7D4BB125ED13D2652628BB000C93FC0858927502959A08DA +7D7DED2FB05F67DC4C8FD57FF0557DFB41B3B64B70E6CD4CC2BB1A93A9871C95 +8AECE589604D2728AC560357447712D6122A07A718A120192A05C60ACD76AE12 +A770F2BA949E7AEBDABB82DF856FC1B083D94A4F33E59133FC5852C372B3643C +9C9FBCEC3842BE87407FFBCC197CEED5288EC521F8A9FAFFEE7E621ED6F7C4D2 +018B324E40D9DA379D44EA69CCAC6F6AC4B60496E1516EBEA89C3C71154769D5 +2D2DA6E22735EDAA07836CA0D80C75E746A5E10352C7EE38B7194AA011DE3CE4 +B0413B424160BEA8D036BBABB5F6605AB502A8E025ED1DB50854EB564A7F2EBB +20A7D53E060CA39C4DE5031CB1B559F693F8DBDA03621F8F6082C8A23FC06609 +686E9D71059660B2CDD0D87E76EF4F72868347621992CE997D5BCFFD098369EA +D5D393857D30B13A570FA6C7DC6EC565DB0CA5CF839B7F775D14AD508C52C5BE +68CD329DD680503B8E76153A134414DF249A260C80D420E6F58FE267D10C3075 +5BA504D55FADCB03FB567111B64C5A307047607042D3BE73070A6C41A2D5F430 +A02548F6722C56FD30A0A6D29380AAB46B0A3F0CAFA020D5CA4DAFF00B73A08C +568A14A89BC0DD190355AD8F346A5388EE11B5E814C087DF6BA4F2A2A3857706 +0A5DBE5A2FE2E5EF391238BDD884EDF8DA3161988BAD084968492F750BF85D97 +88901D90F27413763D1902690CA542CAB1A11FD7FC392365B20DECFC51642389 +F2E82AE2B0815F2E6D642AC005F9D919D27FA43164D322F44A1FF72811EA9E91 +CBEC140B38E52320B3C2A3E99E12E10CE5B416CD56AB3602595297FC4CB848B9 +8945B09267554B9810986AB04EE880C31B33DD65241ADFF147AD5FB644E98775 +6CCD3DCF3791960CCF51C263C36BD3CD0DE61A0FA8700F94117F8307FA253427 +E64AB799D6CE27239FE3BED969134A380458D4869F9A3D23DD026B21222ED323 +BF0C653347B5D80A1DB74D36CC658EF7DF7049E43E109E9FA712CAF4BF60B32D +E82833CD3B0A264043E27F8A4BD73658FF982D2B7DC1813732714C8F3E07020D +4D729A492CFE3E9F1F4BBC73F5075B25DA735CDAABB9929DFA59CAF06FB32A6B +0DBE4039E516EAFA6D4211397F55CBA368286AF6533707AE9C7FA9C92B3980F2 +6D535BFD1ABDAD8F05B41280069A5ABC2C10E6071891E433C372F736A4F82DBF +A442724B8CA4D1AB913B61CB402BF3638124FCBEED4775219ED8FFE18F26FA11 +46996E807D8F0878537A5E0B202F483ADDEC049817341890CA0515BA9B50EAC0 +D9CF13366E88F2729552BCE9188866A87E084CCC6BE773EC0DB26EF7C84687EA +CB90DFD88A492C7A8A495018375B4FFE2D8A1D2BCAE6BBB4239EF32990ABD96B +9D1FFE94585FAD705AF2C7C5D09F2410536B7BC0F693D2C90BD10E6D1F21F0EA +61B449C48AF9D8DF6B8C40CF3BF5D7AE960ADEE9031B281745FD7E0F2A1C2067 +8BB23277FE5812392A125282235B1CA921BC6D8626994432EA40224D1BBF90C4 +AF80AE41EFA1F501CF0AE7C8CC1AD3EA097F6512E19B1977313B2132300CE351 +14A1B7CF795537B74D83202ABC1F30E246439CDC6853E0E16AA67DE68F91104D +C857A19FD19266774A862AC4EFC6B8012E3734599BF62A2A10987D8E66A12EB9 +0181C1AA5029214BA6C1CE72932E156297EE549BDFE0E400EEBD5AD3E30FA623 +9BD16275D2C673DD757D458FC58814703E0A310658CB3492BC286E8BCEA52119 +4D2DBF77AD22E9E6653DC9B5ABAE4F1699B0118C9328DED651229B82F9C2E674 +8039384372131D1F9C6D3C552ED0E55E88ECC96BFF158D0E13E5BC5C2B893943 +4EB62EB18C0060496641E9CEE93B02E7E5FC55717912E69C015F689EAF43994C +5564E5A4BA753C26315BB868BFD63D9FDC6366679ED1E867FF3527B9A108C907 +FEB1E5BE95D81A49CB46A927F47AEBAD027D728F4869488F3C2EB32A91BEEEC2 +57C0FC84416812685BC269B819650C63D7E89A7B400655A7B9937D57E1B3D66E +CEBB750F0B0EC52CB33C32672980674F983E8314C49D634C541015D18A602B9E +3716039734F351A43C35486F6AE7E4F5E3EF509359AF01F32CE9992AB4AF5876 +24FC19965F574FDAC74535F0D24D5993DD90BE1B308F4D5C9EBF21A0F094FCB1 +0D583DD7B3C56D9D2A5C620E8B993838E73A85C6783AD86ED94A29AEFA298CDF +633CCFB27D5BF4F84F709B5801051BC0088ECA63E6D02D4EC74C2CDABAE14713 +4E6D6FFE4B4F152D14AA973ECE9B09DF78D4BE6B5FB62B1876B1AE7D7F94F61A +D82296959CE171CDE1F5CEEC8DE98A8DB770C428373202AD265DBC8DA00AF665 +15057EAC78B3CAFCE9409D1675D729EAF2C7200FA1B20B372C223DA8C6ACF2BB +2AF4D61985A52DCA98AB61055DCE71CD5C51A5B7AFC46763FE243F1895F8F915 +CE65F0F6833316F5B8294A9790B8F9DEA0F7B2BEB452CED4662B4CDC816261B3 +FB1FCFB4D6A2336EB40408ACE3514509AE32208BBCD952F54AF37DEAA18F44A2 +77AEFD2E07027EFC96B9A22B30FE1D05AD72A617B2C51BA0B3E37F91548AD129 +0A1674D8F8E36D190690E922D3E5D4A11F4A8C1534281EDF1E8AE1D4E7D3DF52 +9A7D82B0D6E73A6A2204561967132AD8150C71A83889EF70744D19C8D2A50989 +1AA29A536DF571345ACA92F4C0767D0AC410561E401FC8E4586A15BB59EF78C8 +307CAF4461BFCE1E5A42DB8505EC1E6E235CC7286966008FE81D8AD2E426E78E +3E9B87BB29B224148F8425AA1B8EBCAFC7070A950920D5F81E498204B5068AD2 +317F664F717AE214FEF8C91DA5F834E7527362B9691B0939A917CAB856831BA7 +AF3268CB4364E8D2826BA3EAD0718EF3E96ECFCF5DE78DC519547EA0ACE1C2A4 +81CD9E1B5613742DB05BBBFD2ABE366A10FD8D90218D738BB34C83A1E4CFBEC5 +D4F8497FAAB97730B21AFB5830D926F2AD6EC81913418DFCAF52393CCE81D23C +E44A38E63AA13F0B05625BE4D681EFFBCBA426B188D722EEF511F5F710988231 +7C89CA1D041C877951BD3666F39CF1E60AFD70237C94DCE0AD24C9A8E3E0E55C +DEAA44D7A654B0DC255B6D1CCDB66B495705334B509879AB4CCBD9F388DEFEF6 +C135B0875658508E2CEF5AB1B1B67EDD2D9B2D8DAF3279B13D088A1A8E9BD07E +9E3E08CEFA9EC5647AA804D126ABE371F5BFE161A7705A4EAC1F41057D0F2036 +B7001AFE5601544C76385797136B91E24364D630AA76DCE510555A0F2F9C3C1F +21AB51814B579459EF58FA80853642BD9B5C61316A44BBBE61C5924D6E2D5E80 +923558A516092C344820B2FDA303695788847B85F382C9AC7356A19B8645F449 +80B5B0A28B148D3B9FF349A97F43FDB668045D055C6F58C3921A8A3FC3DE40B7 +06EEC36786201502FE29A5C31C926E372D0139D2957C7583CF44D2FABF004DA2 +5B613B628210876D18DCA2A9DE7B391027451052B2A09C4153BA2455467BF428 +0DD26997F39C20F41DB43DEFC5880A9FC2987F6E70614403DAABB926ABEEFCB0 +36E2F7B53B9E0AFD3B17944413D3BF32423D4985E540358EBD3CF30B2258E593 +F4154FDB13A2459F51CF66E30973D066ED04C9A184884AC896224C7E8FECC19C +36F83B76826342A517FCDEF4E311B8677C3C3725B048779A498824D9C59952F9 +5D3C35A9C1F46CA02D096152C3AC5B909EB015AA346B72AF75F1DA75052280A6 +9972EE1E02B403D8FA54E303E2795EE7CF99F47949AC1BA8EC0758431E254BD9 +142AD913FABEFC32B5869812F13768D9DB84A92B5C7FF5E36DA2E75121053294 +A32350523F7B1DFFCF898CBA2C6D5963101F5072FA3A22B4B1DFC952160DF160 +77E432EBE4D3789DCC63C6DD72FD93F676E12E0B21ECB97E2D3017103B98D354 +A7272639DDF42E8260DD82A1FEBC06658575B3AC3CB95C51C7725CC878EE4CFE +2D22057854CB47750ED829F15AA969B129A159188CA695DECA2A7416FD750656 +6E38F5CFE680480C8E35FA71CA8879679C5F257BA9708E48ED5ECB8B7C01FC88 +411E872B7F77DFD7CEE57F08811B89DD7671F76BBFB15573074119CF723359EE +3B1C3B2098F3C096EFDE8DDCD1F216333AD4746D953727FFF976125BD1B4C887 +79D9432C118F5D401B427A3CDE48CC5DA66AD31270AF198330E55F75B6D4144C +EFE163FE0025D5BE51D31C881913DCA8A0E7642A1C052A427CCDB71D0D5026C5 +F0DB66B54EE0281A4EE924FC5C803B8D86969793D0CD6D8E359A7FE2391CBDBE +CA9D350217AE564AEAD14139A46C74A780E45BB11986160B42545247A0205F53 +A4EAE8A5C5C39C4C0EBD18715CA92BF4D9AEAE8870C90B9AD239ED31E291C0D5 +DA1B46F9D15B3D0AD0B83281AC2D9C742824BD66B1435AD7EAD5FECEBB47BC6F +354C4271653238ACFE8C3732C575FD574AE3710BEB0EE8A177AB06E715306A3F +6F3FFE555A2D1FE8832CE1F7E34F2D9D25F6CB04002E382E134D9E2714401A03 +8BA326501CD838F7CB060A568C339131F0239DF4CAF57B0F70FEF6E18B229CB6 +7E6B90D2EFE57C053763CF058D472CFA3480CC83F8754DDD38DB5779E0A10020 +4E1D8DB91FB515A5F62353F35333FE72FF99677B51073A7C62854A1A4F6447F4 +6A3D422DAFBDEA495979480E19744FA0176034AABE57E98540A60990F7CD0B31 +0F49891566AED89BC704950DBE56C594F89607F7189B690AD41E36E8EB3F62D2 +5F4AB75E8B5A4AD772654957C02510A7332DF9E0FEE697BF5D3B0A027FC222C5 +774121ECF991C3B55755AF3F448C1605A75DD7955794BD090490BE50A6628995 +1C2F50B25F50347739AAEE9709D2295B8542008C4C6C7F42EC7F1006E50C42AC +9A6DFEBDFE541798C9FBF291DE1EBC14407349300A1266184D165BA45B1895F4 +B659CF40733DB9C6169085DC61D96BEFF0291572557BB39B205970F98EAD6E8E +F3CC19E1DD13547AD53678815EFDA7977BE7928E28ABECFDB71A762ED37B6D3A +9FCC95659715C47317885001DD00261D3AD0E62AB66BE5879427B578F155BF43 +7FB452A8997B4C032170B4AC96B1503C16877FCD5141F0CD1F2C0A265755C548 +FAB6C2B9AFBB90405781AFEFAAB65A172DDF50EC77DB40BCF2C3499B34C44E07 +8E56763B50FFB88985249DC698CC7A338B297DB6FEBC7016B580BC019E18EE78 +F2243FE7B78722F158AACE4B7CBF3F631CD38A49934FD79862B78882381C2CA7 +B52B19877F148B24E336A1105C26CF30AB1091552C997CF4C58F8E3C784448BE +20CEAE23DF2353DE4126E2A541AACFB51871150ECE62F031CA1F6C62D744AB72 +9374B112537F04B3C8B8836724BE1623F5FB11EB83BFB86CDAC9C2D1A6BA4DDE +5B8A0D52D04FB27A50AEDEC8D2ADE5C92869C1714180021DC255EC9293C553F2 +6D0EBDC24351CC3CA028E632236F5F33E659F8666CF0E991B210985EC7BD45D2 +652A601686699EDE09404A423BA6269580394F8C416D924FE5553EACD0580478 +981D4BA194288402277F5EB318C5607570C1C13D7C05B094E996C6B204532541 +58804F66117E1BAFA3FC190641E5E973685F1199E93BA30B2E21E5E55BA9AA1B +8B23A4EEC8E48F3BF1DB8D2A7D2605C08668B155F7ECAFCEBEBBBAD52BD81D3D +6AA3DA75C1070CE27A115FF4CA9A53AE9BEE0BE1688526D5300A853D8E1BB518 +FD612A88DB8C1373F33E0327A5F96A6A949A1A1057F7D10ECEAA6A30737FD126 +8DA97AD95733503C77DC89565C339410019F51910A7A387D9294933B70F4B995 +2C85427E083438743D4B121E184A294CF8B68F60441E89B2769218F1AB2FE409 +127494C22BA1B86A19617C8BE730B10839A73965EC81EA26410821C88E1AF123 +DF47BE758A311E9DB30713C58EB11CB21228C37F8124BAA72B4A257FC7A3BE2F +5DE92314C63D6C29EF43679AE1A6AA2592A8B8F4D261C3913B28C15860A48C61 +FB6082B4CEAF34D8DD48C5477C9C8FB7BE56223157819D5C4FD194AC7DD12CBA +CF445BDB1CEBA5521A71CC528B8E9A03B6D7E8484B033858C27185EAB563D12D +68E5781E3C32A751A3BDC8AA61E2D12A30EBB63B0E65D0C094EBA423CA4F93E3 +4295EA088659ADFCF8D4C04E1DA8662AC56AFB1DABF0F02A4202FAB2834BE0AA +57C78548AFE9CEB728B466673B8281412C3543A74249CF3BE96290741D34C73F +0C8A0BDDE88A751B6C92EE0727A149C4E4897C32464A04F4A9850034802B5B61 +106771D35A0F38A8CCE154ECC6316765A978DB5FBBC40364ED3019277501B797 +B3A82E1A24D0C93B275F62BB22CB13A0870C63E5C17DA91D72A70AE8D8A9263B +F4B11E811DB061322330995DAE4BE9CC77FB8D52EFC409382786DAE1C5FBD89B +976E2C2B2A7EF03994220A47412072DB4B6744A3AF3C8BB7DA94A302A122D2B9 +69603F4996EA7A90F365DE594E09D54B156B5BC62108199052482EFBA2B9509B +80B98030C8A598DF3DD137A980965B6AD38BB36E90468724D3BEBC97470422DE +62D043A0682D30DF47CA36917EE1166E48C178D9EEFC9E5109B0889B3ED61E36 +8FE08EFE67A24856A8E298DE721AA064F68BF38D8FED193A93950DF9D83CE52A +4C70BADEB5626DCC240C798A57E365897DB847E8A1141D2B4A7B34D726D6D9E4 +D56B5D4312D5AC01293A55362A6A7AE6E3221CDE683ABE93D54C8E0421999CBE +982FFCD77D88A7A54874D9E1B3802295683215A15B34F0E6646EF35698253F92 +C9BD94E6CD758647558A130A7F415C32DE5ACF3E829E432FEF4400C177C96C2A +6E43AB236B9E4EBFE4579B08B02FEBA3660406FD3157E1B61634F066FEB313EE +10567E0E52F0445CE2A072A3D4E083DBD64DA04A1EBB2B0D6D131E85FAEB529B +740879214E838CEE99F5E1368B2DC1938A97D9326758B481FCF4C97BDAB3EF68 +25F79B7C6C5CB408BE2BB366D484B258656E3C070D7880BDC1136303A72E2459 +878E53FFD9BB034A84111A2859FF255244E202F05AC5EBA37F8B352A592E14BD +7913DA80C69A0CA65F25BB70783BC3AE556167556B4C5E382F0B84462EE0A51C +1C25042F6893E1D1EAFA8E71953AC764C7473D906E5CD33BAC2A1D0D594B5B51 +446884767B53AC97229DC035CC5A02FAC222AF9D9D4F2F5B0A5530AA6C5FE06D +999D45751D06754600BEE6A778B77CCFD4E00573A1CF1B8169BE1A281FBADE26 +11EDDE9ADC6E0898235D656E6DD0F8966B43622F6AC7904DF39359EE0F3FF7E6 +BFDCCC2480ED79BB17E43D5BB79D0654AD92A5F3DEB90C8AAF2008F8263EDF33 +FAD8329E487A7F31BA46C3F3DD6220153131B305EFD23C10908728A86FA57F22 +47C7A224F7A0E0776BB8A4FF7E2159E7DC61785970FA25ABEB7B11C100E49175 +2EE8346B59150535375D99588830D943FB79CC7D076246EACA26055990D7C8D6 +BB8928AF10FB92F769F2F85DB4280D8F7B39ECDA06C8E18FDF5B6ED0C1E5299A +0C219BC1118AFA68A020D8514835CE357A090DCD39741CBA75BE62ABDE92E2CF +88CD97318B616EF0D6B11A21502354FC9E69A1D4BADA349A6D3D79798B694B2E +8C44A6C31B8348EE672D092B061529EE178739133BF57C766BC3F49B6AE7C62B +781B240959F3275802518F210685EA431490994BCB0CA2ECAECA38F24EE26AF3 +0A4C54E8270196C452F504F9F9213C5B0224F6A0AE1C690338CF83937300C96C +77D4241CB4C0F852E0ADB5AE3E8A456A5B749652621531E5976DBA5BE091A3D9 +6BA18D0F277086B0D773556F6DF40271C8038B3CEE459794AB12FE3A6037C850 +C9C4F1CD1618B53F7A4976BF426288C7D2A41180EB090C9421E8BED372E8EE3F +C4D4C5ACE2590766FBF42B79ABAEE8AA572820C4 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSS10 +%!PS-AdobeFont-1.1: CMSS10 1.0 +%%CreationDate: 1991 Aug 20 17:33:34 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSS10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMSS10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 40 /parenleft put +dup 41 /parenright put +readonly def +/FontBBox{-61 -250 999 759}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BDCEEA888D07B439DBD4E8B4C9 +D198C03874B5E6F8FBF4922065A92BC3E66D05DE53971CB1424510E892442858 +D69CE1F76E4DA76C87C763A4B2FE36321E54B1328C9155B8ED6361855A151723 +3386AEA3D042B8D89C8C0E9A33E5DF3B466F7BB8C2C8A4ED4CDAFF55FC6D3EE6 +0AF2CEBFC1AC3A6E6692F8BB81F82D86BAE85016AD62FCB05467082C2E5AD348 +44D1439C2B59F65590E57CA0DE481A7A34E79931B1513C4C30156170409A4BB8 +46D412D1DAF88AD30722F12DBCA1CCC6B4BCC28D06B0D29149DDEC520C8FBA13 +6B82E2E1790F00B216282FF122EF0D47B70A1B29514DDF7C0435ED238C14BDF5 +6DA243117FBEF7398F97EB95597707ED63C6797EBA1B46EA19ABB1DABDA171B3 +16CD500F5D64CBFBE4F9CBC3E66A34427D3C4D0C432710289381F9BFD91B4FF4 +1E3A896C3EEA2F3105C218877D6C0C6B763760FA364D00065E1CAE9DCB5676ED +286A9ED0D1C946DCA6A2A670EE0936FB4706CC62E234CFEED34AA615C48D2872 +A087F30990C85E64BA68F3D5C117123467DB411C9F2D6F6858CC70C1E352C477 +713097321B4C4FD4C5CDE305415F998E7245908EEDE6E056A736EA77BD8C639C +3A79FFD0B74B3D28F0494A115F2841CF8A8827AB5608F96FD8998A5F40FB3DFE +3AA0C7696DE4E1D18DC0D6E84B943175FC38FFC42A9C0CBB13A908978C98BFE5 +034F88480F32B9DEB2FD228FF6CB0B89B045AB02020C82E3F5716DC640613185 +9F597CE262729BC52132F43922B9E28BB71A30AC8709634561B22D13C4FAFE0A +12C4451969226B220038AD8DDA990A4E2CAD53DBEAB698898BBD3046234EB4EA +901287E71CB41296C431383AB85F18882F65BE36923F6C0FD6FADAC5B42FDB68 +64C06E047434FA7A659EF7F3D1AA8E547939FBF9C2ED7AC829F03CA59AFFBFA5 +A7AD2E0FC7BBE619961AE1785D09444B333993199FFED007382B54DDAEBE21E0 +1E75E0AB6D309DBE53BC7BB9F95D342F51798574D70B95021FA40163A86BE6C9 +342536A5730837C522D5314B1289D9B7E4EDD108BE7F35A20AB2A16608F6F007 +6DDD702A5A9BA1325CE2C1CD020DF677872135CF04F4E4F1E9AA6B494E2BC22F +107C331A7E80718B030A1103804D144802E3B03EF7CB083BCCDEAC7B43F1B4F5 +C1BF6016741B741CF7E12B4BF95221A72CC9F4657264771AA69C73DA1DA29102 +65D01A0E61F3024E672AFCCBE13CD0B7F54AE1418B72E357A0BABB4D03073B1D +F4EB54F899AD4A41A9F94DC200880A0DB99D67235A2451B25F710C29A882865B +A922E56E9FC16756014FA5CBDB1C32750BD6835A70EB715CEA19A8872041905E +8C660BACDCA26C8247D6B3C10FA5DC240E433E479AC6AFCF57CF96697FF46BE6 +44748E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.1: CMTT10 1.00B +%%CreationDate: 1992 Apr 26 10:42:42 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 52 /four put +dup 53 /five put +dup 55 /seven put +dup 56 /eight put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-4 -235 731 800}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 +38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF +D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 +EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 +A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 +F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 +4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA +6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E +A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B +E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F +1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 +452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF +8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 +5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA +DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 +BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 +741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 +E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 +E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 +D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE +C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA +726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 +CEBEF0C9440DC034DAD9C19FB27A350233112B0A339366B7373CE058456E0E1F +139936F6CC9B50441C2F5994977426AD7DC8C717E737F8C201EA55AD94908336 +FFE9568C0E6EF3202D8CD7B7A6CC203EC601F9A7E2A4395ABA3406503DECAC56 +B03219CEBD0E465EA0F635F26D984F5942E4FB186AB874F3E74CC2F2E378BD83 +57CD1B63C9DE9963587B7457D56024D95645ADE0D95DEA748A6ECC6809C2A7E8 +6A568F83BFB184B31349A771DD72ED3FFE8D16E3138EC49EC6D7524E611331C6 +DB2E16059C9A12512C7208E3B30F04273E20BAF41EF8C96BA4B17F31572BDD15 +3FB7D15CE31684D721083208D7698A31D07160927C9A7CF8B7EBE81A83C0BD46 +9CA06245FDA37F0F2DF7948A20D121660A73E079F4ABDD8F90367BDBBA323957 +062438FF3B28A3880380CDC76A055096D30FABA4AECAF238ABC2513F089A6C4D +67EA0050A34F5DBE5FE32D9E75E67F4C87AD8115DBFC00124DB4D3F4CB62CA02 +59BFE46E90DE9ED306D6CDC51005C233BD39F41B264E2892AD23E8F93C8C61A0 +B5C5CC1021411DAB515039DCAC06E1FAEFA259E6AB07135CBB345E90E2BD64AE +37B9A46934BEB383D3AB1787A2656FCCEA6467ECC2582807E7DED181C53829A7 +1818C3FB17567D81D1A833E0559798D06163781D7895C31B1D81CC439AD51CA0 +5E33E96253064B684F3261EF86AA8452B32E9C5907153BBD692BF8BD4AC45E3D +7161488C716CEFAA695877B03781F64840D49C9C1BCE9D5E759BF1812712F2EE +054A34F2153AD6C953E795B6F40AFAB115C5FCDD1864A85C1AEF5DAF40337068 +08730BA7AC580213881F8AF1F76FC830EC76BE4CE6E090A1F91618595AB6D1FB +A885D04A4E73C9C7A923D813275810DD2B2A3AB4FAE4BDA24FC170A4BCF46E05 +572529A19B09E5ADEAADD071EAC20C5DA884C7D414F5AC5206E87E53989B7378 +BADCEEC6FCDD4B4EA03EA994FDF6A80A2E232B1A007B7554471FC1DA24901896 +9CA84283A02FA1D9176026BC1529147F19D07521A4997B70258FFC03821EED0C +D44BC9C2E67C3CD9971954C58BF1775D61115B75E26AFCC3B7CE6E5ECB8CCDFB +640DE440334737D63F539385F83BBF603B631AB2F750DBAE707F5D008591A05E +9D532C165FA35B580D690138463047F77F10FD4FDC8F724367545C0F5B6AF978 +B6AFA49624EC2AEBCB2D19E9652CC74B66289E42A8FC4A694F13626C3CA05926 +C1369F80FF1114F0EB03CFA40C37B2327992DD0CC598F10BD9D1483080CF33C1 +02DE0CA7BC38424C3438B4CDBEE66793A2480A15BF47F2FC621E66CC563F5052 +491ECDD9C38BE1966161403BC22BA41CB3FF9E90A70A99205ECC558C928F2FE6 +5EA5203977100FD3ABE953E7E5BA57AE0700E33A0ECB6FC6953C9029B25D61C5 +F57323AEA10B43D5A46C6F248F021E096E02AD7EB00923B0229336369EC82FE1 +F1C198456B9982956549CC441B859501FAA0CE507A8B131F10BC99B060B8113C +2DB536DE8485DF33F1BDF4FCD571098CC6FC6B2A828D8478991B354B2309E31D +0DAE3E8FAA0189B3C1E8208FC4C31FBF64689BF81BE39FFC2E680246BCFE4448 +8FFF4C7522CC12B622EE7982E0F52863B97965AC2CB74444618C691975D758E5 +53878C44180D2BCAC4CDFF06D1F109FF858198CD225C7F9BCE564D861394730B +9A47876CDAA300EBAA793BDD2881D6D0A66D3727C871D97F199FAF1CA45425BF +5B4A161F8C1408A20FFAEAD31141B18ADE6D229F57CE29E92DF9FD553274CDE4 +28E94100A930CD8F41F9BF6285743EC5DFC9BADB196021E045BA231B0DFFC8E7 +3EB7B7BC8F641CF337FE57D17BCD02C4980FF1A649EE62D2445C28033355500F +B460C58BF63DE130BA82909404613348149F01DA396AF06195B4F42D402F22A3 +708DAB87F85EA515B743CB94D464F1C980F0BEC03EC7E34911F288459B59B672 +9474C93CB8A8A016ED52201F4E43830FF8ECFD652924BDA223DA5E2B2D6C057E +C8E558872D762C0EA343657A627FEB5F492114D38ECA96B14AACAA7EDD85B562 +EA087D768A96507C1E814574B08442C49EA2AF4DD67C322C3D8DD4686632067F +01E7E62E8486C163A39C28F7070318FE91167D148265BBAE808916900F0B45FC +C106F3CB047BE800BF442A75BCFEB94E7DC7E317845097A30F1D2686439BE077 +741A968F3D4C5927030192D52CF2536D4F7489323EAB74EFADEAE1FE3F887925 +8E106352FA0ED99EBC97D693D287AD29E57FD1AA6A9EC121041636311364FCDF +045E969FFB7761D0EDED38DB4477DA4CEB05758B314CA631E704AEA1827B3A3B +8CF8B4785147426AC7F85D15760C964305EC631B21F6280E31DED8549F100B89 +918D6A48BCA74FE4EF45A6E4F9B694C2324B1E700256B84B7DDA3C18EF854626 +DC54291003BB1108B99C1E730C8E562830E12A561F1C292B1EBF809EBC2558DB +71F8949C9B435513BF01AB86D7A7989287D028AC882A98B56EEBC95582D054D8 +21BBD6D4AE1483616321E1C148699B82B3343C2D63BAC0BD2910E0EE97ABE442 +0EE6003D124D45E4CE75C995BF7A75AABC96B9617EDD5ED91C69FA3928F93325 +D7E354E81F8F63E25AFBA8044D95FE560D74DF51FD00F8803E5C257D380A3CE9 +6F2824EE3C538B1CCD59B4BE7DA742200FCFAD187722EECDF8FFCB59C8306AA0 +FEE3C0689093FFF1FD393D24F1B1A6F0A5CC523AB1DC5A34C768B6FDE57F756A +DEEFB6ACC7DC990C0EA07872B9364D2D024B2D56DFB4103242184E0DFA8E2A24 +A6C5F4DDFB1A3F86A508DC15AE85B1C5A8416175B5F1FF33B4CB70FFA6701D5D +D3EE3294391DB669C03DAC462C501555E031AA6E7F221DAA99999E87B2C345CB +2350D7F62242635E55D926FECAF4CFD3B55266BC86722AB631771BFDE91AB7D1 +B55C8651BDCA3BBE77D49E26E8A7B56478068613FB132521C4C800CA93A93CC2 +601D4869ABF79EAEC353363F6A8E7005831B925323D7370B1EDA9CB91626E452 +35E961B3DCEFFA27D8D0092DD911951D4EC48F9BCBF4F19E6DFF6831B5755BF3 +A593FA1314455C1923E8A8DEABC87A93CB4CD22E1CACA7C4A4F6172F7DA6B6A6 +D07E45DA2FCF16C67D730EC221E3E3217CB907756C5783DB363E775598FF8342 +70EB36BD2307E359A7A10DB2FDA8BA18264B7C7159FD6B1C568DCBC67FE75AB1 +A1751BDB4246A135AF6646044E7EA3BE868DC2B2643395129034B14DF42F4B77 +D513EDA2E438DBAEB147CA6F41256048DC034680E91CC5B6B800FA42F0857911 +82790F473119BF368D5A49257D66C665563406265A47661D560329BC4CAEC9E0 +775695224BDD347A896E0A41163D548B8DD7018DF368E3E6FE364DDAAC020B88 +20A6C218CF0D40B300B166B3125D81BCF6C04F43EC7F1C1E3522C7D119473F03 +266547389DAAB843F9AD52D94F12BD620763FD8C13B0C43B29E40373CC86E9A7 +D83F222E5B2448BFB419B3BA7ED209B30485C78F7E0C6C48212B8418B14FC2BD +F4C928C7699F67D6CCA3DA7462D3744280578250E7E6728781DFF9CE34B5403B +07030E9C4B2E69D4309823DE0CE13EE758834416F9DD6F90B8DDECA1C7603DBF +62058D4E768DC18AB628815C30F59CADA4D5BDE8B40F1A59C3CAE107D1696823 +C3AE4393AD8BD1C5AE24AEB00D2D2CE88762D31AB2B1A1D462037F2F1B3B48DB +57298490CF0C4EF23C342152265F86E3A0BA147E3700DC3E889475548A24C577 +D11399C971DC4CB8C122066D20B1FD862CCC440C6D9F9C0D91267CEBC252C67B +A6C7E545DDE69BBA4F5407ED30A8EE165E05E78FFD7632AB5641D76A41C6AF36 +1497E6A3A7D86C4C0D3B4916F044CEBEFF2EB0514F4CF9FB967CA2C1E3676A96 +D30B2CADFF05C328B68914FB584EA5F41A66AE4BCC94D9A0E3006F82A9B90EF1 +00D1519240D0A1E0810B0B061841A49143FD0EC4B14BE095EFF5BF06F2BF4226 +0635EE011E3F05E80838EF86B6F1F183F578873813A6AEA87428BED4A3AAC9E3 +5DD0FE857FC76936B979D12973A5823E75E0A8731AD914B666D8DAE2C8199E56 +0E236D47F36549AEAC1A74951D43A453ADD5154A937EC9CDCAF9D3728406596B +6EA7C1AE4CB09854B52523D6788BAB7AB1CE4389A811E4E8451E3695AC9D336D +B51E9E493E65628FBFD51D6DA8227AD05BF2C4A15076A51A3B83D9975018BBF2 +B3CB2EBC72B9E577C740CC64854635C7637DA157F697EE3EE1FB4E5657CA602A +842AC29523B20BFCB1850C5B329DFC307A17498FF4C0D1050E4A0B72B1B7063D +9E651B9C33C732DEEA4B858E8CBD2B7F507A42323F0F625AB5322DC866E06197 +C3F761F22576CD6C228FF69E54BB1D9B054C6B8BE3C60430A69C2609A32EDEB1 +BC2B1AD00BE0D32E32A66D19E590BC8FE6245782387EAB2E2C55660A3DDF63C2 +A18EEBDA448A6CA3E3AFE4E562A7AA0DA87C31DBC83F208E7D8382E64082A4C3 +EEFD83068DE6DA96F90E3553BD664314FAC4A6BCCA6E520A5D0D9BB4511389B4 +E3E3ACA3F51D47B62F11D8B80A7C75299196F525F9582F33B295CCFCEED4A27A +601CD8052C9BAE30A11BCFF10E426498D23A0E0584C0D171DFA3D52696A1B866 +10413FA62745A826988BFFF1D543271A4DF7AE242A7BCFE154FECCB63247E5B0 +12F45E0DABE15654E160747A4882CEDF036AF7F3A69F11904B8D4E7FB7CD5801 +3A407C9281685669EDECCF91BA3B25AB55AC8E7AD12C9D26839DC9F698C1A854 +2CF430F2B625D3E629D865A013369573A36B89D6A76133E667F952923C387660 +E2B8BB1B09CD385A33CE8DE5208A7A9B404B845DCF9B1872AFB734DCB5E72BF6 +655FBE94E54E6994C4D5FA652D7CAFB00DFFC85475DFD7D8CA078581985DB551 +531482FBBED61652E862F84CAC42C4D786F274DEA28CB8058EE64CB3DBA19940 +8E9ADF1306E971AC8ED60F42268548D16339DCCF0FCB2A52D70241D531469CDD +F306E350EEBC4610B237B93E9D4385D1414B30812C41FB899A5D16ADF8DC4081 +1F207C8CAAE4D39B99E9386C5AAADBDE232E8B751811C971126DF8229D802153 +5DB62D286DADFC847D98AAB73B159F61F6F1BBA9D4E18C71D982436294178EDB +9D3E2C3394F824B1A67B381224AC2B126DC07F9D1FB1FEB55E4E1698130584E6 +EC789847090AC359A465C33889FD6770BE79EAB44A489BE86DC210C61167CACF +328BCC50EDED458A10EC0C0EC907A808B902B92ACABE442C8D17503980929F06 +0EF04CEB2828302E9EAEA75B43A142A791508D1C3576B0F0584AF2064BDE04D5 +4B2A98DD648974BB712F4D4FA0C3E3F247355709CA187F2E22808847E5BFC0C5 +A2D2F6B53340A943379D26BF95AD0E771FDEE47E88299FBA70EEEA09B5CAE91F +3920F5E3DF158B31E60971DAED8211FE21CB82609B581A20DD60D738C186A8F2 +AD2F826A9031831BD1B510A11BE5C61D683922957A8D909773AE1EC6CA3E615C +21AC4ACDC6FABCC1DE0007D16F137B2698D92C312D5913D35BB703A678425D42 +E4E4923C3D6B844682219916B33163CE6D87EFD43ECCEF7BEDD597401FA75A70 +A3D902BF4D8716FF47E5D7B1587ADF4EE2F8718BD6EE9A3FA58460E875AD7E78 +45C2F49981B3E4DDAF2A0E5463BD845A2B7F65A4A7F58B78194AE04F58FE53E1 +6F8029DBFF18E1B52BDA098793EF741C1E4A705A158E47FEF0B7F7DEFB9C9C3B +1A0B82DF66E71AD34E0F0A0AEF314E6040902ABA0822A44B2040156EC942A78B +60E26257686A1C15873986DE3BCFED2A5AED392F9470991040D5147951C84D34 +715E767FC6D1BD855C6FFFFC9B8E0F21303AC01D15E21024CD2936D8BB054E54 +11303C2A225999ACE40F838B36DBC92791AD97112408409FDE74D7CE35B206FF +29C9FB23F71D5D65B2E8961A006B04B81836430E0FF3986EF0DFAAF222DEE50D +D39EF1CD8AEDCC1E7BCDE93D0BEADBDA95781F67E5AD523DCD2404B89ADB12C2 +54519D2627D577B7BCCB6E9D8A2DC4AB0C9F2FF27EFC6BF14F0E187860719120 +A9F604B57AB0473B695038883A6138727F1E093C1DC8848EE2B6B7AB3375E2C2 +4F9666D60D376AF5EC01F409FD3EEE13B0C67A31DC55A2C3C0C9E7B6AD07FFBB +1D91E809AA64890EEDBF695D161FC4F51EB72514E575DBDEFEA70867508B1E19 +8DA5D6FA85F0B1E544D4A3A2F430CCCD13077D9E46DF94AED300DC90F196AEFA +212E5D45C17285E2D13A44E524243A668A23A6C97BC7B6F68321CD4837618CA0 +3D1FBF8EC7C61EE2569A16357D23011C2273B7224C03BB5D1D1767D04B11AED4 +9B0F2157E84576AB864EFF097A6171529E0E6ADB1F42139C91C4CEFA543C06BF +C5D1B3DDA23822234BF0E898D46CBD9A316101E411389856CA6504AB7C1DF7A3 +8602E41303C4E967EEB54D56BEAF159BE060557C9DD0116D88D6B2430DFAF48C +DE6868A6D74A2DE94052E1B44F0CAA0B88469B0E4E778250EA1F121ADD0D0899 +7C88B17A3E719643F9E1E18F781DDA306190BC8725156AA13DE6B589C55B4218 +6E03A3E33B7C31156859DA3070035BBD6B7FC2FBE3DCB9E946895B633754FD2E +CB0919F53655C852FC66C25C83511FE4D11BBA1948EC094FE024234B43FA4161 +D6D7B6917C423D80FEEFD12B32C50F45C46643DBEB2756BB3639ADDB4A628FBF +A08381FDA81E9004DE04644BAC33AC06CC46DEA3B61785F3F7AB20EB09AD90BF +5C522512C09AF7B9B64D2FCB88D297C9113302D601778F4A40502208BDFB6237 +0A58517F03F4EB24ACAEBACFED72DB99C6F09B1A9B52C072A5B4573A0A327A90 +98A10BAB75124A00B8CE0AEEF29A6EB6423B02BE542D9CF5C1C2583AB23B949E +E7F60F643EE1DE8F9EF5A4EE1851970565CC391B1849BFD1CD5CC99E949E3C69 +986292D09396DB57FE068AF5E1FB61A7C2B8C6044EDDF17F8C5B2DB9ADAD93FE +38618487018274733019813027AB1C43D778F02EB94B09FCA7F3E21C566CCF63 +3172A02827FA8056D59E26C74EEFB7B651EDE7C74EF43D205941A58DE5F5ABC1 +0DAB2E0AD8617CA26CA9902DF93AFD42C4DF308D8DECEADB384A913358B0F279 +766F18E6F9C94EAF754C74F2180C61417899EE7C01B52E5EE873AA1EFFCC0DD2 +B58D93E68C4AA4111E7964E82FF7D18A67A14FD181AEE2E12C400E6BE3DAD5F1 +33B0DFD95227F3BAB381813D9E76BE7266A13A7B0DF06BEF237B40B5DC81B5D7 +C601FDFD07965FBA6A51D65DEA26CC0652F149BA86BD366AB2A510CD5DE9B163 +7601EB4273B0703D5ADA2126FA5472CD4FCEE99AF2A7AFB79810433DC93D025A +9CDA1E3D431FA18BBEAB333A510083A1F76A718723D43635826B51868CC0C85E +F16A2A7AF39FA6693A605A65DF42851C444F61CA38E073412AC89E7324997AD0 +2B709EFE96F05B0FC60C4A3C804AF6D2A6C0EEF850728CA7DD5419DF8BF1C324 +4DF2DB944A683FECDA2B29AB564FE6F659037FC499F1D6FB7A6374C5C336C8C7 +4591354CB1E6AF135261AA3222FA156E6128F3EADD591030F59B3D1F0619B506 +498CC2EFA72C35E88EF37DCBC6CEDF837C522E88A5652F947C5407D8FBAF2448 +EAA1F4C03A8A0C173946415FC06B4604F77952C5913E4263B741CD9B1512912B +0CF9D89F82133719BF9D48C7127BDFAB0B2801134127C23F84F8AC313E23F91E +2D357B97A35985B1815E50B645B60A837D530E8AC939EFFD5B336659BECA5F2D +F45CAAAF2BFC57BECAA1A80156CBB1D82FE32639981412B4798501A1404F8458 +0FB53F483971A364D4E4390EA18575885E29ED8C391827AFAD7126C1A7A43E9E +2998941601EA863F89ED0CD76DE298D594D167DD4C11C161D54C804E8AFD78A6 +6C5A1AFC0C939DFF1659C4853CEED6F1BBD689465EAFAA059AA41CF4226C7691 +71854745CE754500AEF5C77F1DBA47C84C62DDB4F8FBD127C29483189EE00F67 +19F601A4C0A61BE1ED927F76A8EB787D7EE62E292CD2AFB1D4396A5338AA16A5 +463B0C8CBE73FE4BBCD4517A4385A77971457C554FBD6DEBF75F696DEEA34C2F +92C01471638D82ECAAF13DFB18896EB5E3D52A5F10E22CEE6542F7DA10E58D89 +CEE3ABADE7721C75B83CDF45EBDCDD258154628DFDF883410DDF7792EF5BF4F2 +27F56501B7910D6D39AD509A4F3163D783E941AAE24579B3AEC898F21DDA9016 +FEB7D49022E004AB49558C877C3133754BE99A3C81177D6517B0668189B55581 +49AA091B3D6E3F1933236F546F4652D464447C44309510BABA869E219EE32BD2 +3E40A733C45A71C79B2116A36A71BD75EFFEA12614AF6E4F8B3329D407D951FC +2EAE537C9EE872EEED792D89FB56C5F0840F804DD18C1256434E58FDB0F15735 +B6EB98363E14CE4EFA0AD8A863018B924F4B4A709D2F7ECFD2C2BECCD2775390 +8EF8029AE33676EFFC5E283CC3376051EBF50EAAC53EA76BE589043E6862FC68 +D7367F06955C799FC4FD98FA4318C8B8A3874B84CF03AA2FDF381AE8D0FB2231 +FBCC5A144BE7D4F9A1449F9C2409E712F3DD107DDB167695843FABFE8EC31DD4 +A660AD9E7B05BDC4122034776412FDE112C1858F79994E3D5000513EA9F8BB94 +7E58D1BDBF9CB797585E16D6BED350A5AF0C999E409D20487DFD21D881699C93 +461F925B7930FC6867372B0D6F7BDA3BB19D8455194961D9A888F27B7ED3B1BB +32AC650E3510EB4A563BACB079210D3B787D153EA12400590A01871C5F7A29B3 +036105A1513ED6DBECE39E7A46C9B47968C083A01C1DA428D5966811F5AB756F +96548832B6EFEDA43C534F4CE9A2F3760750C4341C7A4407D69C90ED68932F02 +49DFA7393011EBB581997FE9FB9AA12A43C15DB1C0211D5A4CE3C1FF8E28FA0D +4A5FE81501EF0ED2E1E2E014B613A56DF164E427AC960FF73391B054FCEB8AE3 +94545520941B8257E08286037A7AB7633E6AC7E37645455A7173A51FB9EA9115 +888A5FD0D419CB90A7D0D6F64B57B76FD74179F8A1A162F0B9D543BF53BDFEBA +3B4ABB7BF27FC1030C6D1A188C595BE9D59F9CA8F3C43678762F6B01408471DA +D7AE01D940A59B7A50D9C0143C0744CB90FADC94A7710450BE6437062D48E8F1 +A34326E9C68CDE3B7E6185E793C0AF505DF186BECEB66667EE0CA04B006ACF8A +0CA407EA918AA7FDCC40D851DC56A2701E646695DBE56EA4193200D98126307F +3FA547ABB75EEF2B33EDEF1371D7C068BB1297CD9536BA228C52F85F2372F3F0 +3C80234C9F6871D0B76687312516EFD1731F9748A14DA6978C86219CA674B267 +DFCAD0FD7BCEF477E0EDA4EFC48161C43D557C732052C5E62AED8C0B00D54A11 +FA51CA87415563603D7CAA21E29C84501DA0777B154F5DE943701E02B811366D +05F520C9E4D53865A3060A9739CB6F6B997BD52A705BEA845DE404392F4DDCB0 +783DD19069033E1D3E095C4804202214A7E2D19A134D1307E5A121BFB04715B3 +5B989751F514B6EE5763D3A8FC64BA558C71E26834144E088FFAD3B183600D60 +A5FCEAD02C1418593B8F1E0DE6FBF324BDF262024F7117CA742260942588093D +C08185A90F23B185B5F95767424C537DFDEAD50CC7FE3B8AE3F5108873C9C7B5 +8CA586AEF7B7F6DDE202FC22740954A10F6AE3E8266CEC7002B9F2DDBCF64CCB +33EA716C6E1B7C0FDC9A8B697393C7FBFABA175FAE04618259614B035EE13E7B +471ECB2ADDC4AFD3ED49FADEE0CC434375A0EDF967011361466A900CBED0E761 +5C9E3D79CC8C844D423ECAF271FFA00B43D3887B9C8860593930D17DB4C20D2A +1E23B070B3C902FC1BC1A88D98B4EC513F38CDF7311717790E1B90B411DCFEC7 +6F238FFC87D1DE418640779C6618854E8DE423A48AD87791633A000DF0BDD49E +F664C20CB025F17ABFC8F606754AF229638C6C0D211C0AD3AA8AC3C9DD5D624E +103854DDA2A834C347E6F242947BF06EB5DBF0D3066E24B8F7880238F72D0F0A +88A4B5A4DB11FEDDBA112D89C755B3759B187F4E12DB3D90CAFEFD91DA9A160A +39A7749BD2E7DF4946457260C6D895347D074CEC06CD3E442DF682B32A9C4753 +CBE4E0F6BDCF150945268A7FE5C0BED753FD298381B34EA0829B2B94DC38007B +B72D0FCFCA0CDF5846190A24036EDEC853AC17BC40FB9BA2F62E96581607C1A2 +B68D50F3F186D48887A5E8204DF84D7EDE2E619B66D2D2AFF968F453D8E585AF +2B2FA4FAD81094530172426CDF5CA0F876502287DD1080047E31D18D67704D31 +07F0BA091DD050E4660FD5DE4912AB5D2A530035ADDA20AE61DCB7B30981309C +3B6BB005EF8729AB0452697BEDDA5DE5AD7D54A1D1454DF0134203E618D02A10 +ED115131B03939E01F741A8502B88BAB4D82C670C76E7F4E8592D5D6A74D81D4 +9E8F3EB18622BE1165050D90C8681283D2476D6404E0B7197429D0F81F1C846E +0FF2EBDBBFCC289D692608F4D82DFEE8AB1D2644195AB3E433C264E991F6E1B2 +E2B21DDBEB4E46E03537B4C3595050E65CB525E082D690240E19768AF062F89A +2970A5C9CAEE6955937196192FCE3D42106B20AC488463B28F5B028B809529B7 +0B164044789AB45CE8FB40D70127B1F3867A1ED544CF8C8CF2E24BB6E1A514C3 +E25E327E51972FBF7E0813FEE52010E48944682FA348A67306E0166BB3069925 +C670F6954E85615EA2758DACE93EE89A43FD0BF53DC7E3BC68966B475C00AD65 +73A9778723FBC930452393FDE06823A5933CD35703C9A327AC36644105AF9277 +A0CA9A3DFC4BD348D001680125321712BA71B16C38A5128985927FB23869EECC +893DD2688367980E7F98E8BD83110464E38EA770B88303AA1DD3F2D1D65A41A6 +EC6BCB3290B82486031D3DCBECD1E6A2C428225F56B6DD66668DEA84CE146CFB +9958AFAF934A5FDCCCCE7B99CC8002C27DE55D867F1B9158121D04D763D9A3BC +D0D8D87AECBEDBC250A2ECFC6F42E58A8BF069DDE94A4A162A6F76A6790EDABA +E564B286BF200D33D9FE6774DA9BD91A1AC4E0906CC8EED350A232FB35C084C9 +3C521EACF914383169C274A83F4EB79F5A0D10E63CB8338366E3273FF831B05C +B37840C7BCCD97B54A954C2542B5DFA9688F2735D993F7ED2F369B6BC37F8B78 +519AB0BA4C936C16C41724AB96F5941D4C6CB6431509CEE02073115C00FCD01F +6F4B76C2F997BF2B9F09C53613766A94E1B466F9D434B73B35173DDA365EEB4F +5B48E85C9CC0A50767FB61D7FD3C6CFE2DE088FF06E1A5DFDCA921A09D73013E +8E9087559F081324576ABB53AEE66FBC9D248EA4DC6ED1BB821235C6A1777319 +FDE6FCDEDC54763C3F822E500D0D557E934631AF88E10BCCC06179708E2B3A99 +0172B0AB69E47849BA8067EA14C184F01CD5400964BC603DF20DDBC055936BBD +E6527DAC9B198DCA9C418AD21FDA370D2141D70CBC8D15276C21273F9E1B93FE +812BBEE4B0D72ADB4B593DCE83865CA3F5ECD20EE28225B729A6800E8FACAA6D +3C64CE11492B491D15C068B37DA58360F9A7F9B9B65A508848E12B83F7DB7FD6 +772033A989B34E46955D2F4C0630494302CD9AD4247DCAE3EB91F67D9544E88D +8FE84ECACA113ABA1D8555FFE1ABD0F431FF157C8595F4397FCCCB80D5B2B17A +0C601D43026FB9ED0E9E9C46CB870672C1324D7283BD28E9693842269669F57B +2EA2D0DC1A8757CF6C583A3235311BCD01539AC00ACE6ADA5EDB20306C469ED9 +73A7DC687570AA2837D3877AD51E17E0A649078E73895ED7A5550E1650A34B33 +72C2EF569CDB2242AB91129175F578BA0134635A03C04F684F7982CDA57C9E90 +4B333E4962ACA9E2686FBBCC0FC2606A514E683AD8351D9795326091339DBC1C +D5B547E449096CA2A71D13DE28B967257F1F0731E1A4ADBFBD6DF74D6DFFA5BC +08C4C2AE615ECD20D52BD8EF537DA2E0FEE314F1D60928A87EFC7A42C4B167FD +537F9256E03CD8D2EEB07AC438E55C33FDBE2FE4438F6F8B29ED01D23BE33F0C +465B0FBD1B55041D16BD5ECB92204B4F614024190EF4B87C6D03EAC1EB863005 +D3AFE487D1686A4A356252745101FDFF3F85C162AFF34B2063E6B2DB7749653A +D3EADDE7C1FDA2F246CB3154737E277509925ED8DD86210C94B64BC7B8C4A037 +9F4C147CCFF8C2C1C431E1E8E5EFD8D49AD10E416A2DA4F45092FD499E4025BD +93588050EE9907A530BE3FF8BD9A4BE19526AB3CCA10F70E702E90C72BEAFC15 +C66774473AF87569AF99B516CD67F2F6D26DC6DB5508AF6286AE547BC63F95C9 +DA6190EC85F3D8605DD1A7A42C7C7B60DD3BFB8E84FE0F584D8A986BF0EDFD3B +33B6C953C8E69DA03A5D0C5DCFC66D800388B2E4473F68F52CA474FB8F1E4D1C +F7F5119CFEDE6F45B2C6BA1E0B82DEC953A26F1104EA8C6EED38B065B02EE952 +4D7CD7FAC772D6AF3862D8FDCF7BEEC514795BF37C14D4A502EA7E10699E2B99 +0EC296F769EA6C20078265D25617B1225C7D7EEDA1A10062216EB83EBAAA8CCC +A1C750FAAF6F44246436DB8C2CA7C3010ECF6FE9A66BA6AF6400618D170DD44F +E231343E2368632C89C738DF38F618DD9774B75EE2B146690EE6726E6462613F +2A6F47522F1843F126BE21A8FF4FA0D9E6AB154ECF0FFA138E036C57D49ED1DF +517D36CA6171E5C4A26027787F2DE873B6438C55B7CFA023CBB5360B60C84496 +130968C3DFD4F16608D310458725E904300D304B660F5D6962592C7073B2C9E0 +513F8F6D25AFFD7E743A710302CD5F12AECB08ABC02E650371A5B23C18FE024C +9827FD131A14E622E7E3F1C2DD0531CC6B91AC9E259E78463314ACA0BC7DD2E9 +B2EC250B3BD48075040FABBC5C87F5EE51B5CBE1E167DC4E151E902403A59F12 +C4E4BD1A31E95E430EB6C214EAB8F6825EDB0ECF123AE0B980C4361A2EFD55C4 +74925A2592AE2195B0267E828F7ECF7B9F674D0D3D4D2A9FE7E03AFE8214C82E +B97F69E4ABD689257F3987F84B31AFE10133A6A86610D497EDEB680145F0D62B +647998A8DA295A5EDB43000C63EB9106BD35C280BBDB84D478EB316E506BE0B7 +1823AE8E409652AC05D96ABB02E8815640B33BFF08793D23A2797847C7793573 +BE9A0AE34ABCBB712BA86BC2B3D614D77CDE77DAD8D41A59C29FE2138BE18717 +60F23F275BEAEA736E1237232B4F5C9171E49C5214F841ACE919411FD651D4EE +D0E49C79E175E2AC19B0690D7F7091665EA3DA20DE5A559D1481EC058B5521F5 +D26A8B10966B6EA55E7B23CF0333D7EE20919C9168A50EF7AF4D4E57D9E5C698 +3A0626D67575BE6CBF0618C12A169F9CA62F3273C4E790DECF8590274D7D7C20 +BED651E2C65107CFE57AA16DB17F45F7F178F8B63EA3E9969FB3D6A376A416A4 +14F809F02F8B9A5331A6A1279B19C9D4CA9D9987B8FC1AD3CEF0797F53B70F25 +CBC85BFFD3AD3F1D460DBBB2CC644109668790DD2B5AB7301F37F19FD1AD0A52 +C6920EA73858AB10EF369E5ACCB35A61051ACB6586B3B5435FB7A8CE51C16EE6 +A9DE7CFB1B7C6695DEB484A8D4A723E83B573B0399AB442A1E57793F9D6AC73D +B8DEC23105D56BEA2424E91B9DA5CAB114BDC3636F0CB34C60BF1B0DBC9174A6 +A8EEB5F832D3B44BB7593250A6ED065309DEDFD9A1B3E57E10CD1C651877151D +B086E2D82959C3BB999C11110C2D61CB8278AC65B013F6A48D501417AC494D51 +E75F579246F4449D4D7B83612A4E80F65845B8766E95EA5129F49BD80CDD2E96 +60CE7A6EB6DFF8E9E94A77A0126892D661AD2FA3D587B7260ABF3A8449A43E9D +1582D0D12DE3E35F3AF68BC48935487A6C8AFF614012FFE86E48DA54DD62B510 +BBCD311AAF2472B2882B0E1A8E4A0B37DCFF968A7F293B529EAEBDFF5861E56B +FA1009DF759867512F68CFD8F01A7122CE07AD3F409F809E3B6A6FC0C5244229 +9199342EDB58E0D35B6519443411794978DB0BBD28E736491B0F04EBE14B2C1C +3BF6EC7CBF1411BA50AAB52088B88997355417A7049F389C770F1D33DCB3CED6 +0ACEB141033F237611D473191C1C54467391EF4BEB3A64241583A603F3C79B7C +2F0B75DCE77C4C88A1AC382503FE2F6421A3CC5824DC16AD7537BCBA4DB1EC4B +F336F77352683BE1546356CCC9702F24DCE6D1F84AC55DC7BF562B6605A36115 +6F9D6ABA30A043C99C1A0194879AE635B4AEE1C0F0D515018F45F9EC58DD76A6 +EA0DD8EE108EE353D8CB3AE7A6E4C2391E24F4607A688E283ACF52199E20902D +F8EB7960666C8552BFD487F6BB348DC50189B03F0F959743183B92DABDE7A8BA +E1DE007CDA5802D6B2F00553B927D9B787630441C04593344EE7BD12DD085A64 +8FB62FB4836C5AA2B1AC7400A00C038E55DE2FB9AD92FEF7EBCD8F11378450E2 +83673F87DE599C80786B0E0BA22356CF30E9D2E16E5D27FABD579D71D399AB7D +4485299038F6813CF8C5063CE55172E3989562DB517522BEA73A4FCBEECF85D8 +AE4A4F9CF3324EDCA9EC981DA2264FFF7284A15E3A30DDB7E347072193D0BA4A +08A127B89F591E2702A7D4D6F95556140AA417CF5CC62D69F9457E0215AE019B +1A8970E87074B208719B4DCEF7679D12D771DE2A01E723391D59DF7BD0A7326F +B5695926DC92E40C177389E289200909E425D1CD28D1A19E1B1E4E41682A82C2 +7FDABF1AE57DEAFE7C395886E06524AD96E214725129A3ADF8D515FF3CF78CFA +EF84B53620D5FFD99B1EA3F28DBABCA650B046C320A028426C44D2AE3953A9D9 +46EFD717B838F2E3FD8FAEAB40F2128F46410F1431440F60326A1198889CCDF9 +C2F9DD3D119A9132541FF09116A8C30C6E8CFFD9AA3EE31E00288566F07DC598 +D7234FDFA8F8B068E1062998F8EB6B4751CF1D4FACF98CED6581FFB46990A524 +B382A1D65C66D131BDC936A1A1834E3CE36525D63BED86416B7B7F1D24564D25 +A60990FDD9E9FB1C1BBE5FFF5DAD9D8525AAD7B823B00EECC9373D671FBA7B8A +5166B2B4B72A93373FA9063DE4B22D7A6D1859EEB440634DB57990ACEA84D507 +69409DBF24C5A96ECEC2DFE715643FDB87703A4B42EB6D3ED5D5FC117199E324 +FA36C00AE07A6A772F6DDB48BC19F6255FA3583BF967ACD54991A78A5E3BD803 +C442C3E8438813F8E4D040FF5F287FE9D9D450F5420AFD1BDB7006A1C2965562 +D8B8BB8A8DB9E8016E69C25B6FEB864CBAC9B1635F78E57A0167E4FBC3269286 +A829BABF548377EDD4A7A7809219941BCF62160DE5EB11A6C3F73F22EEEFAD6D +79349CA6E83DE5F014989BA7801172B7DCE74B1CBA05563434352D8CCA8DE220 +3FE92EEE6DBE5D0F15E1E4A4ADEF7BEF05DD0F5A066373B47C98CDA85509F685 +BB0A9EE13E239C34BAFA19DF1253BA3E03FBC1FC85D5387878EF5EE62B77D254 +5D7468FB55B9D5EFE11BE32F7E7FE83A8D60B15480674FEC54CE1DB50D05C58A +3C3DBA96784AFE89468FE881C7D5E569A6387EB96A2E6C0293FCCB29FD5E3022 +6C4DABDB07C4D2B211A6C7AEB61E6151FBA636EF6403BA6C7B8BB793C5F4F7D9 +62AD6160B6705BB536C7C4C6B6049ECAC5DD72814370EF535444C611CAA0DF1C +CE66A641A30EE8B3B8703410E55970FF5DD77E5B3932355EC6269102D7D9CEE7 +D3E78B00DB3C002CCC5A5447A3568669EBA5133D5682AFBF5589AF5E5833F539 +D767B8BADE673D65B88C8297428CB077E68FECDD2387C58D7C3EB9E545CED26E +A1D7370F2F4DADFBD9722031A72FA1D3E8F564378D08D5D9B05DC16D1E2C187B +C5D20ADA34B3FAB982743B3070977EA4A9CEC000C46CB79BD3E84F30D1A2D334 +6B0771A66033FCA6813F22300E643E33B130939236AA4019AF8641D0D5974AF1 +88D18EC8B25EE465FAEF3E7690391E33FA8EBF2B43A7622894356303D6E7CEB6 +FC2FF5050E1A2D21D61AE6D1F5641EC7689846BA4B7EA87A20D309EFE78C9DE8 +A10251FFB6A4E0269F7A37F566A826B1FA2C55A243769546A2BB9D4CDCF4A543 +029BFC4425E79307F1A3EBF4D5B8EA261CC4C0320E2449A381E9D8E4BA7C7F6D +340FBC8B3C50B0E59A61E9782DCCD9BBD23D3FA9C54230C5E1CE3D0A235F33EE +7D8EF251D33EB218D57BCA368487B0B6F7D5792CEF0B885F71DAED5BBB17BEFD +17DEB3C15BE0F452534DD61094C298FA9B5CFA0E96D091A2589D0F69C85F8BDA +59936C67A80AF924CBA0765706672940476C91C76FAEEFE48467FF8198468BF9 +238E2926377C2CC141CFA2B4FEAC7117FF081EF0FD3B2B48028D57EA49B448E7 +902D0690096EE6C83231FD32653432A231943718F6BB9DB10C534730BC8CF192 +02973DBD125618EF21BA17142C8DA4099A6B530F36F9C782436927BB03B9A761 +77D0ABCD53BF2398562C623260043B3E7D041B5C2A244DAAF6B57245C6A977CF +C5A34693D558DFEB02ACC7C08393E21AE88C22E3C228A2FC4B000A14664F586A +FAF41B2DE959CC3F58FFEBDBCB3D8CECC85660F8F6628643AC63EBE17C02A6D5 +BB3965D42559D47EEF9A98A3DDD12193A445D678E53E55A8FC95A96F3FE1F0BB +825A0A4F158F54097880ED2DABBBF7B6DB3FAAFD59E981FAE49B79406B813E91 +DAA2AB3195A5A0CD655516A92157BD59164840B4F4A7D266B9474BA220A48599 +1C2B1DDD7BDFBD99327D677E45698F80353D43A9BADF034824473765F0EA2F10 +44B98499FC974CB913C4B64E1269E6B5BC912B34D0B89FA37879A63B93A91256 +553416F94A8B00EE325F328631787E37C9DF3AA9D7C2041DC58425FAA5DA0CCA +BE2971E437FE146D557ABD238F8CA06C5E2966815CB4B7E1DA75A5AB83617E0A +AA0DD4F5BFB79225F7D083B6380EF342D6AFCE6B18FBB40EEBC845D20632385E +8063551716EDF22F257487DF1904618ADE7487F6708FAB208A911399351F71A1 +FBBE41602512D92CBA6CEE36043093FAAD2688BB0409D71B6B09C61982EDFFC7 +1BAA404D3ED854ECBFED7E9D4FCA1DF74F5BF05A1417E973C308CB805B4336A9 +2ECEB6CC76908C93D627C557B3BD77018F96DEF4145A9DDCDDE08E47F80626C2 +489C7042DF12A37C574FEE56DB542AED908C22600F22D467B8F50F4C4809015E +EBE96D4A6288A07BEF0D73690D7FCB45995F0701D0DF507675F59FDA3DD997ED +C349ADDB576A6F2FE117CD42978CF975246390610DF22AB9BEE4BC8124FDF869 +0D33C973FB6242981DD07E21EA24F0C4656EF450BE15FAF83BC9B5A5C38C2D68 +99412B858E80CE9ED73E513C8A169F9490C94FD74C837D338A2F627E481F09F0 +89B319F6076A70A0AF1ED9E4E8C6C9C0C697374BE102466C5870E7564C692899 +9A0FAC9A82C038FBFEBB2912E8E335FFED0AA2788856144EC2E147714075988B +FBE652847CC46ACA47F77EA672BA21D6B1815071B85ADF862DB0F26928761F55 +92B610D5524839CACFB89A0C1C3A50063710BF3F85E48748352ED45907122625 +3D1270F4548E6893D1B25F6D0C1384DC91F6400B0AEC3BF07F634716844689E4 +EBF65C1BE2A5B31B111BEC0AD90E4D571F67C0F28A57878D2B93AA616FD1E969 +1DCDA4FD3004CEFB0536057B412318E69D9E589B852E41AB1D79C88A214631EF +6F407003F1E303C6492BA95F475F139E9A508134E39FFA501C01F5979A062085 +E07149AAC966E190DF1C10D6C197F7D90F388AE154B401102B7155B48B5E812B +BB035E4BF85504F0F6D73F12F1871B986DB5037FF1A07BFA91010C69F7DE4D04 +5568FD6DC581C20485C58DC87296AE14D94DD4EFCB90FC49D59B3A24FD5134AE +228F9D6B522B9D698D82B01A2598991D427324AD1418811A30039325134A3991 +1900B9F104CCE14A6FE8060192A9BD2272390DA86710FA38968F84A0EEB722BA +647850892C21E446C52CB44D65CE6ABAF963EF7E4373FC84B8C1C024E21D3EA3 +B9EBDD9A7C55A6F759807BFD086C78CF5B522449B1610F3BD0590C97B17B26B5 +4EED5D1395D9BFE60ED37EF4B00CB48BA1A904C4137433067EB2AEAF35030874 +D0C061F2C83B8A4283ADB386201192832E4C3C5A47031D6AF00CC267F7DE8449 +73CE55232992AE3E71131A18B348EA7D0118857000CECC69B80BAC3EF6508999 +27CBFCC211314D256E112BBAFE8BE0063F85764E2FCBA821CAFB9DEE8EEF9B21 +7B7F361B8F817576F09B9A8A33CDDDE20CD30E5D07BF072553CD55FE164112FA +CEE7AF710FB84812E334ACBF603E21A3A1B78AB470B232041D75E041DDAAAF26 +3F3D9267E9DD307AF620E16B50064D8F5C8F1E917C8608405DE1EB8B1AD1FE90 +6EFB0F29A9540F9A0FFDF4810CE7CEF183A6AE3DDF193ED3C6DF3DFCCF989C64 +37248688B532CF9B91750A86768DB6741E2DB3312FED357B174AA9318DD6A78D +25456E6D80B32495FAE60E5AFE0AC1A05D1D8FDAD6288CC6CBD3EF14B3B87058 +454841B2B5D37DE3ED4E5F0FC4E684836EDD69BDBEAF3C4AC483666715FF6075 +98313AF84619C2C9AEDDD0D20EF2CF95C56F5A910C628DC242FF71BEF79732C4 +93B3897BE143B1C74942F124F194EC904BF92B677FAFCB0A85C3900A75B1F0D5 +CEC1F977AC17C7EC394718CDD08AB218211A5C702FD4246E5737959F527847C4 +C1730B0AAC3E28DF726DEF7BA051EAF425E442493C7A616AC70E9658C95D417B +29E655827D9630AF834C87EE85419F4AD1D6F618493D3C610F1409A8FFE3E5C8 +43642A161300E6C90151CD21EE11DA13C7925B7D5B44C59AF3565D89C7D9594A +66C411A848E067424A23B13EC03FCB090A15791CE346376241809E3851388F9E +BB90C488DB50AA60ABAC64CB67DAE8F374F2C90CFD3D8B2F2CCD41740EAE2349 +2167952F63D005C9F1F09E6DAA22077F7998CA1209633A1F719F2EED5FB3122A +52F67D1CF0FDF42324A6C86EECDD300EBFD9494430BE5B462D70349BB64C2508 +F0D7FCA414462DD4F3CDD0C531F385179B316B7B043404DC4067D450F81366F3 +9D3BFDA706859CEB1DEE3E62C453344BB48D69D093B7B15B71FBC503E2414316 +ECEBD9F7E25C20F06F22469902954AF3B2A128F76C0B7CB6357A5D8402EDAB0C +F5D5288D07CB484B69BB687608F51611ED3AC3780D11AC3AFA9E804EF56D8089 +64ED8A5F0589267D8330F17580BA3E35517EC2C692A66965BC089777DAA7C8E8 +9D419BC85C6DEAD167196761928B28C212B4B88A83096ECB68B84EBE98D97C85 +293B8CB1021DD541EAC2DAE1087D6464A74CDC165479940C9425D636619B1BE7 +967F7259D1A536B2D83EDB38E473311E1FD0C02A31EF851F3AD001482AEC0D9F +D507F00DA975A2EC33F5DED8D6DD551257E20930EA0497E40C692CD76EFD6012 +2FBA02244EE7D0C540D98DB6B33AC5472AD9E653C1EA35FB2CA5A7309061E28A +096617B9F6A34A017A42D2A13C7AEE8D875A94CFDAEA73E1EC32B2F4F0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.1: CMBX12 1.0 +%%CreationDate: 1991 Aug 20 16:34:54 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 44 /comma put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 89 /Y put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-53 -251 1139 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 +B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 +AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 +7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF +20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 +B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D +68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 +D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E +26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D +F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 +77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 +BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E +C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 +30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 +148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C +E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D +E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 +337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 +0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 +472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E +A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 +30F19E1BCE69BC499D860F9B17E6A78469F652E469E22DF3BBBCC803F7483463 +96F1C811AF62FC36891457BD3A5B988F62177864939C23E86BEB50B9FD0D186A +1C14795945646D82AA97F66F6050F81D9279AC6CBB908C7E1F96E082B31DC1CE +66777F3D7C18637E94FFFD28171E19E178CF932B38A8C1681877DCA0CC4BBA17 +250D9C00BCA8F753A4D3CCF503528B0CA11871F2F0E1F400FA9AA5894128D07F +CC739AA7B0A8A3B872647E1BCC9F015E007F208CECB08EE15C91ADF0F06094CF +A1A6ECDF5BAB53B67395C422F009C511570CE39F739F4C5187386037AEC9BAF3 +434368015408A4317115A1A8D296CF477E67C0A49614602F4B9C9007B2C78024 +E33584D32B6A1D226044CA57336FAA01585F3BA39D9616780FD6C124B63F19E2 +F20EBCFD23222358D8229B701B2703280E0B86E4771AE2C5017A3BF22A545246 +8D6BC985C2220034A34E0CA85BACDA735A9ADB3D3981E04B9AAB9E11A959AFF7 +0AC9B7C54AB816E2CF48178CCAC839D1216AF26D93547F242069F877ABA93E19 +45B75BC79A45D12E23B40D1D28074AB7D20597B517E0AC38860D1D0048661999 +4A424F6983DA23E0E6DC06D6F7EFFA87C88EAD1AAE2BC85574596B913279BCAE +B535042306ADE5EE2AEB1FA1B833D56EE907B1FD6838369000023CA728DB364F +6C2012E4C2614E0C662F88E2FD02B32499CAF6918DC050BAD957D7B727927B10 +24F98C9B780E6FBED86B63795719FF60F0EB582D4A5E9CDA6FE05D7FFB0625E1 +FB94151065C607914FFC72D372399283A48B6AA96421974F5AFC60E28BD25D48 +B28BCF78428B21EB03A00C878246EF8BA2A2EE7DB6AFCA47EC9A02EDBC55D2B7 +929A0B178491A4C483699AF945ACB840525647C9E7F55E11BDB76E2A6E3C2828 +FFBB5DB375F4E15293B494868FF31B07860BEADFF66311130A0BD51D976287DC +201EB34FD81BA3274938CE0A3C68324BC9FB70C00910D7C34D507B529EAFC6CD +24CA11385CBAC30928F4E088960C773020720312A7CCD60EA5F822E12855BEE3 +7A734C12C8956A373AA7658C809E4FDC280E3936D422FC50ACE01A66C73A4636 +BFBA5F940E08F3CA382B540FC795D6ED2D57190BFAB1430CE08F39020B29BF2E +B1399B2D3292AA99F892520F88C5A0FF9B479ED45721EB772BC18D4DA9CB02EA +54BDDECF4249FBA0184EEE9990EA902613B5F6D55D5B010D19188B0B36DAEB75 +922A7AE22ED53A34AC47FAD7E72374D47F349943FBDA4731D2E1CF30BC103F4F +575A03E46F37EBAFE903C74D81D8D3F241516021862D9E203CFC1280572E0C50 +359D4E87B2976C7F35334F4744FC78E15DD7979F29308148494C2A42A2FEE1CE +FBF756BA8683B7AB065FB07F666896832A5C83A2B85EE546FCAC2DD870FFDDCD +19890A5FD9D88FBA6AE267FC8F1664270F3BA6B990BE056AC79E55762990CBCB +D8D60EF5A747623D719C6A76414BDBBE4549D31C15EE2DD02D452ADDD22E64F8 +CD13525C274456A216AA919EB8B6CC3692D9128A76B03566CA33C1B0C5E3158A +0722E8236156F1B51302BD02C97D4C00DC60B298E2731485F3EAEEB50A4D7135 +72DB3DE87ACFCE1E40C8602A6C2E00D6F3C7CD712D214A53BB8EA0B445BBCF1A +412AFDA97AD44DA2DFD293420DE95B0B88584B2CC79AEA82685006BE5C6C783F +9957D4B1F77E2932741E056F3FA78033BCB92FDBA00B2E498FBF1000DE6D9DAE +299CD854743A82032DD62F04F4BFA9C5CD84D22F2CF7013C2CB6AC249D67AB12 +3396C3B333A5CBE9A97E4F07BE0DB2C71AE4EF79DF3DE952D7E473C5AB2EE898 +4968FF37D409DADF2432B774B5A0BA55AADA100D27C96102BCEDF0440CFABE41 +19D49D6BA5A8A887EE02068CB1788FA378CB0BCA436847E0925C2F883A980158 +694D66927C117212493015BCAE200249B7758DC98D849B7AEB32C78B2F1577D1 +1D91912C0522AF14F75DA48A197229C2BE08B6F8F52A839AB507C8CA524FCF24 +C91DCE6C53D784D15E691CDA18EB40BE0A7C3B24BCB99F36F7E8F77C45EF87A1 +A0932AB194A0D5E8DE4C567C6E86EB3E734F89EC1E4C485D81B90D505FDEE463 +B4EB9DCE53CDCDC19F4F99033DB2ABF9698FD153FB68576A25FD188B98CE1BB5 +B7FD420849C0835A54391C28A169F57EFB53AB29B0E9DBE776E37C04A6D6BD91 +20FCD689532059A98B4477107E868A123B273128F7E747C0F0724811DF029AA5 +22C2082D557EB8CE9DF349450C4446B4B1DEA70CC1B146AFECA06A1859D212F2 +BDAF41ED546BD1057F6F6AFF46FEE60FE8380E8899F71735D2C8D7EB9653B027 +68321432B37050229B6815A8C4A1EBFE19A76109EE29800B88E6C528054A17B7 +395CF482AE62445478D6F41C0E7B8F78313DF1DBED339E389875A8E883867921 +1AB53CA0A3980594830B13200073F966F005D1B1402877CA4A46485318A1B863 +24464445E264EBDD3567E9273FF01016EC1CDC142FD9DBF980F099509F330305 +3B138C51170BCE3D59072ABA6C241048612434271419A80DFDD1BA156A8AD54B +39E45FE64F1B558A712D93C46D729A1F8B364CBECA67A618FA1337247C08D0CB +9B0A418C729668147DEA47BBDE342C2E0E29A83631077DF34C861EDC9E80EFEA +75BE3040125BCC60D4FB69CDB78C25ADA72F2D104CAB8D3FBAAB5E8931A7B8FB +6EB41252542F302C11D3DCBA66345EFD816D9623BE2019AC332577E1CE8E6A8B +3DA487BC54B82EA9876961A4968E772603F37936C5ECB4C14625DC3E36E4BE99 +E692EFD3AD7B0814DA32B13D6C64FCE750F80E5985E708E54C7A545429496894 +6451BB8608F12DEFBD585ED62A2452377DD91AE560D14E54C9A449FABBD16F26 +AAD76026066CD8F5677BC18FE9F9BF89344D90B454B7A7FF20A3EF058816ECAC +D49486263BB4AC87ABBDF43D8BE4A09F0DEF416C95AD8DA91E187A5528390F9F +FE96D0CEC53022F1DD7C565ADCCBAD63B1105CF11DAEA2D2A9D827171CDE1B90 +0A71D9C2C782B74884C9605DAF063F99759079E3A821196781C756614E400149 +A6199699F5F2AA97859FC36699F86504D58BA77D14810424C2A3FD79247F3DE2 +1EE6CE0011250433EC504A3146827949468227E75687BB81EE40F4EDC2803F71 +CCE3BB5F60FB0E121253C3385543B6AF741BFD67158D2F38227A29C3ABA429A3 +33BC564E8867C1FBB058ED6EEC8FD0D835AAF442103348751C7AD941D1B16566 +761ED69AFCEB4B213CC9A75A1C01260B545654EFDE7042C8E7ABD0508F43D4E8 +B50E6E799A5CC8507E814EBA958EC2DD9655CBD18B018F284658C4C8299532AA +48EA747019D9DB74DAF848CB76192C0125C7A51695E8DCB73C4BAD826A83FC9D +AB177685DDF5CE3A7DCA21B02FBC6DD7B52B6C086B0C06AA24919A38845FB295 +1EA169C8D17210C14E712CD90099334C9EF449FCE214CF640FF39CA1DA2120FF +CF5A9F387B3E0C7EE4904DBA33444A668316DCAC18B85C98826F5FCA5CAB12A5 +9F75424521CAF417B326F8975E6574E5C9E55EE2772FE20AEC65C4CB692A2425 +9A29F75EDF9B31C2503C6A7E79A17B957EB19D4E5E666C83AEA92A8DBDB033EF +1628486E2BFCAC1C9E32676488BA13B3001F6AA2EA03747A3EA5D220A5F33B29 +4AC5AD623B0C9A4D0C4C6D41F89E3FC325747170BCB0803A7D988627CDACDEEB +0D9DFE8AC357C07F6B60E90C5DA3ACF868F145237D1710895C4859A319FEE038 +D7FCC9D56620607F5392D1998C6BB1B2ED2BF4F9B5BB6F80AB0CC5A535D52BE3 +A996A70D581CE43C365EEE168ADAD963D0B2892F56FDECFA8664737A5CC0595D +3D135410CE5CB4B094746D5CD8C3355C4BF77F9D5375334A119833995EBF757F +EAEC6ECAD4A62B90917006A1AE4632D758D437DB443D6D7661434C9A8813BB1A +80C5389D2210F4BFA057DA7900FDF6B60212B5747E586FB865E2FF4260B2E3D8 +0C78E003F3FD527925BCA22DFB87EC7DB2188309D8DF6C6424048D99C0CD7F18 +478740413A816B92D6A38AF0025FC79B4A8D35E2B3FF5BED4523B21E9CE49350 +AB42D25A5B42B1A49D5A468C38635E91AA1B6C835C18D5B2506533B4E77EC0D1 +CEEE1D66569498F6482BEAC3FD818EA2B3191A3A67212EB41D8C725F52937F99 +06D33486272E82A3C9B5A5457D0219A3CFFCA0F18D246AE6506915E055F2E1BE +8678389745B28EDC2DB006A0AA5A4C6483B24DDC0F3A38EED7CF30FA00B81CD5 +56757EA8C44164F2BDE071226598D6246C8A0CF972AF52331D0D2A192C98A320 +01435C77CA0B61256EE98D373A3A8F2B41622A6BCD5AEFEB9004B90F8A9558C5 +D4EF6B36912E854014AB35841B99F6E1AC11F09F536134DE90865F721DF86DA0 +D13B6BA2146D75696B2C2DE21F4ABAC37B3C0CA96BDBAE8334E2FA6E38F75866 +FF7ED0F64D5896CC294032AB86E5C328A6B06C2225A617F39CCE8B69AFD5B041 +9B1F9FF00401D7F0C9189B79B0C2B700945EEEBCAA38A9E202CD5B68469542DE +E9EA782D7C494CC6B411D614867B498B2C2729D65D6087C3D17956227B02345A +FD3E8653A3D4A9CE1FBC46C7E8690C803B4556A80F05674CE27069D24563DA46 +7D2C4219D242453D06650A9522A3184246937CBF4EA2A188C6B2A71E29E0CFB2 +934B93550B451AE9847F96AE18647C09C927C4AC12846180DBABF3F145FE073E +45C129D663E21A1F1F1F6755F6FECD1C1F7061939722D403BC2F2E856BBC25DA +F069F39A441C837FDDD2563B3A370EF73F0835D34DA86CE65162917E84C76201 +0A5F2854830822FAA545FC0A0F77E62A79545FDCAE728FCCDF2B720C0AF9A9C1 +2FB5878E9831D42FC9A56D41904B1551DB2E7410EE055948CDB8B9625C6DC618 +F8282896C1C258608234A372CF031E5660949250072025B7EC4E535899EA8BD8 +D1CE98A870C159964CEBC0ECEA5DEBBAC1CAF86A398D9C84A076ED630991501C +141AE2DED1688C1F1389ADC40B025407BAE7EF3AA847EEBC61DF58A6C3FC8F2A +D9FC820DCF1DB3CD2FD32A46BE1B98D87F3D291C8229DD9169E370BB10706B0A +606D45D65E3F9A4D5CA23DBF23972668A0D0FAD4D485AFF44AE284B91EA6BB13 +108B9E0AA5C0CE5EE80D9A6D10114ADAF14AC05569B7CA7F7A8444D75D504700 +89E7DE515BB66E320816BB61DF65D9B6DBCDF5BFEB475EB6BC93661D39BFABF2 +B542CB9E5F38AB3271CAEC60AFDE8FF533DAD806B61C17A985FA5CD8E537D941 +020D2CF7CAD6389AD73578558B49795CA5D2831FDEA1BB0BC181AC848EDD5FBF +E9A052FCD5BCFB883C704D80D9CA06C7D147645742EC0A601F66A5D198A7B6D1 +7851CF5D65E96E4D801D87FD271D079A59AA5E96E345053FA3CF427A80D78A5A +D5007F12ACEAA2F21E612AC2ADD7B35941EAEC728CE7BF64809270D09D469BC0 +422C3760D1D6FFAA75B0F36A1961278A5E63406E4AAED935320C68A3E5515C5C +226488F98CAC3B04F016A03E343A9835EE8E373A6B49C685F1B02798436BB098 +DF854825EA14526B337630DFC27914F374DE9A915D77369DDD88FEAC626B0183 +EECE378BD9B0FF448EAA2B656A20102641B181433CAEB6D6A0A30A8346E710B6 +B9E2C6103103CD25CBC8195C02DDB8A6E4216F24FEC5E0F8092D9B74F7945F58 +C8BBEDE1F6993592E723AD0F343B2B118098F64D52BC5726B253BCC4EE3526C2 +49D22E2AE02CC44F11C2DF0F3AB0AE48BA03795C1ED3D5E10B1158690D402C43 +FF3DB585DBF3EB9EAA8083DE62B198E2D81D9CCF4CFD13D5F5DCCC1A07F6D94A +E3E11DB551CC1124229C84F311EAD1EA54B30918A44CE0CB565C29C099ABCED3 +25EE19B9B1775C25E2BCC0D580275F4E526571B074CD8531C66A6302FED3EFE6 +C516427341082633AF21777A02140C90779B33CA0D31FB4D8A79474454AF949E +855C5E1D1D9510B2759A9DF9626A2DA26B6DCF05E68ABB11B5321D9299F3D8C3 +91588707B63CDFD33FE34BECACA899612072830172F1481702541322416E3F55 +BFD2BBFDD9A4322E27576748EA043E4092603BC4B79019674A29378AE9A35A82 +42405650D62A13DBDE6BDD55A831685DE31F9C20AB76AE2337E1E7CC6B0FB44C +FC396190083575E186BACB52932AA11624D830A58AFBB2670E39242F8609BA50 +BCB062991C4A193C09466F4FF2AC09F1E7C094F502E664F129500F2B93ACC2CE +B916D080C6DE142E496526F0C9A5804688896D31895D0C0ABB7A0AE4918D3481 +5360C8CD618960A8F014B0AD55575C50B901C5A57AEF996230642A5C8DA0944A +76ECDEC0730E6EFC7FADD09D9095FB540F377D460D159CCFD7059B0A34F738DF +012B7CD8BA63A47263423A9A70C14BF72386746772CA8954C5BD1F1FC4C77115 +FD47E72638FFA322F399D7123BA9DB28022589735875F058DC05521309DE8B01 +27387F330C5489B1752B789561FAB8C92ADF7778068BC27E25C245539AD11B15 +017A7AFD7BFAD63D0DC400B369194B8D9E4D298D548FC1968A0063A7EB8FE1EF +71AE77F99B78F6529CF9415E886C565EC305BEADEC0AB65DEABAC40DCD5E2430 +36315F52C005A9802DC49944A423F1828513EB381F24B0FEFFB99FB53FB86A4D +DBFD7B5994FE736820AEB30AB5832ED56048A846A1388D3BA69C68180E017170 +CD6EDF246A127BD8D8D24664171024ED9E1A99279DB6B5FC91E4248EDB7EF45D +5A9A851EDED58F11D586EA07F9D32D80BFF6112B4395916FBB5DC06BA0896492 +D9C770F973522E6CB5CCC92A08CA1F9067F7ED0A35CE4103EF73C3BEEE22F2EF +B3445433295AFC30D464929C0607FCD7495F9A6C0F5727CD8844BC3EAE436046 +B8D484DE4B8BCE607904DBE5D01924A86E18F73C5D530BBDFE7DEEA30ECF1C80 +D10614F7713CEA36DCA8AB9DD488C57E4D0E846B48433DE35205B57506175570 +F8A0740F6B654B7C3B744C5D030827DD29952CD579BAC27E25AD67D946F707F1 +EC44D9AA1FA6F99BBC9F473FE5191C7A918951F66AB09A9AE6980DBE3CB1742A +9D95175D440778A3F9CB5B5C9A0AFDA59EFB9EFA6883C836D562E2629C9202A1 +0C12FB0B7CD4313B89FC47202D9A9131BAA40082CBD9F3B0757853D79FBB63DC +4230097FD151C9620F5238C8A3900D3F4D0A4E9DFACBE9CEAA5042A8DA1C9838 +554C754D1F947DA0F13861F71919A886935409EABDE5BDF80AB586AD80FDFAC3 +259A58CA5B2164FE4E8BB441C76DFAE412F9D8F6A0791D654C8846415B8F50EE +2B51DDE94C594C35B200F6394727F6AACAB7BCA7089728C4D43D08D92085E899 +4D49B867A20D4D988269E5BE9075B8598815B98A33F71EF1DC57A16F1F8A6A21 +5EFCFCB8D5D6EA63BD71AA812A06B65178BA861B49D228B0562CB643CC272FD5 +5B75D91C52B23F5119AE56700D9316162537A4B11004DD2B36CD5BEEF7CF5007 +1321A5A8FE603B12EB3AA6874E2ACB44FF89228BED8B457E1E671DB262FB3999 +F21754172CD06E250734DD0B037D39BC7F95B59F706D96B3438FBD36F8096AE1 +CEF0C6B206FD1FC09A267F05C2FCAD9D48B7ED79C5274ABB901EBC710C56CB51 +29314F4FBEEA48BF0C63582C5071627BE63F1A8997D45DDF0777F983629FDF43 +1C88D91790B1ADD40007131D9EBFD2775CCC7DB5F43E6549E6DEA92FD93A6E62 +5F19742A969B6DF6835E58FDBA0ACA7561DDA911B8872C5F7649CC798CAE3BAB +D34BE5B8FBC192CD49DBDF869865C89CD13D5E1DEEB078CA83B54115E398B027 +F02F20A2FA1598CE55D6261D71F91B8250C8C2F2774E21C623AB8558E6BE220F +5CF0D43E6F48ABB5E7AE213266ECAB04810CE30BF85EE98D8145427EC8CFF5E9 +86E1BF142EB41D8C7276DE545605BF8104806355303409CAF619EAF139DF67A0 +7F768B867066C95F429DFDF448465B94979CAB16A0DA2B116A4F42968EEFAC43 +C89E9A4B2C9C4EAFFDD84FA4C3A997D042389392AD291133A42152ECEB35D361 +7FEDF25957674492074C77EE5DFBF544DEBCC883C292390C9DDF991B0287D8F6 +D3D070EC59023AEC64BEEF14F870339B83AE10DFFC49AE74AEB45ECAE8AC2E34 +243D7520D4845D89FFA6B594D8AB95DAEA65868E4C6FA56616233269F4DD0A94 +FBCDE3B1BE6D7A98F62E6E58208CF6B524B9B826757A5E443A07FDDB057C550F +D3992B9E464E6EE833CC53086F03F990C82B36E9A1810B24560DB09814C855DC +2CDCE238364E42B9382BEE77D9C29BC8606E9A514C0EA0C83884764F6E034E20 +9BC152C2F10F0C867CA4CC98D0D0769FC254D8DBA38215F6CC85F3767104126B +2CE70A4D40C8F8CE5895FACAF369FD9BCD27441EAB29EA0427FB06F42F8DD689 +11533849A08759376E87AC341AEE5FB95CB3152B2BDFE9CB046E012AA3389B15 +EAFBADF9C8869E53B009964B02239BB7B9DB3AE01D0F5B33DF315520A733745F +904BB8B003624B3B8511D67BECD37DED77F0237C0D51B72A7F7F92EEE9A04BFA +9EFC02EF4699C2EC0F4699CA60381C4F2A39351AEE2772AFEDACC90D92333F89 +54D65F161351FB24368068A78C527BCF188204033CB08065A892828F43C05A2C +2648F9A979733190786A03D47A727FDFE8EDBA3F49255BC3795E373CE2A933B5 +2A72E2F670977F4986156487B4974BDB948E452E2DB429D3D2FB8266F7B36626 +1CC210760CFEC9D23C9621ABE14FC18AD7C9FDAD031D56CE72EB7982B653B8F0 +D991F9B5A0946AD308355EDFBB2A3F62FC8B57B4FF2F66FB35647381E545972B +8099A7DB9CED093055CE1A414062458D701ACA675362598AD0ED73944EA9DAFD +6E3043B91DC39077C7758439BE71CABC2C16B59303B49FA4C02B5A5844A01367 +0B8068FA9B4CB58C5F24FF462AF013F8EEED386DC5E5C0CE30E5908E722E40FF +860C02C080E14282980C09C5307B63806D01E6A61A37D39DC2446470D7D90E45 +2E3CBF1847BF4BF8D7845AEE4AF1CE34978577FAE2A71D501F97C85BE49C1583 +A07B590256324105AC3601D061149ECFD87E1FA726089A2C19D1A4B2B273FC8B +0FBA9E23F63E1766E5FB216877FFEAB2473D023BD1F793F6D7561850BA060C43 +7342682C622E0203BE175097AC69CF9324A87BABCE6FDB4AF08E27C3D8E7D65F +DB19F68B3335B3EC2F5E8EE1462C52AACCB0A9898205855ED815A42830675F9D +457479A33BA6A034F3BBAF66799EAD3A152624C3F50279264C8CF38A66DF5FD9 +97F9EAB52B7A280667B42983D65DFE44144BA34FB1BEEC5FE1B7E3D201038C47 +88A5DAE0E719C8E4B3D2988BF536F2C94962BCACB12A8A28CA12487B709585CE +A36F7C289BDAFC52E9374B05989D2B409ADAD6F18149BEC1DDD16C8FF5B18BB5 +4AEBD7FBF9C62174979665D2BA7914ECBE3D0DFDE3FC2AA6FF7F88A37240A353 +D3EBD858B0D1FF939F40449BA58D592B85F2C6217279FB62B484C2C4EB0B6B5A +D35FD070653A16443D51D291C4A9200AAB185A28EED382C91E307A3B4AA1AF26 +EF0E6837730BA40038B336863431D30525DF8AAFB6FDC92C0E98E5528956D4CB +330DE95CB79542670A8C89A813C356255A263FDDDBBC543AC5D7B2CFD1AE25F0 +D6A01465EACF69BA84AEDB6F0154AA25AEBD7927D636CEF416494AC8E5340424 +4CD0AC43C5C03598CB6BD8049B34B2641060DBB0E3FCB5AC60BE229F355D94C4 +225FEA17641AA23AEE655FF569F90E24C8CF27082E4E7AAD634F281612F87705 +A15B7C05BE8330AA970EB82B01DB4AF18B3117BFB53860B40B370A98EE513E4F +2E6108BA508172CEB8BCD22CE4FE5188D2C7DE76862A3F78747DDEE3A617336C +BB7D3EE52D46ECB52DC057E82B6704A2F1A0C3115AE8E7D2D8B31517DE586AD7 +DB72A4BEDF2D22F883F70DF03593CAC92EBABC5AFCCDE1A78509E024C6AAF558 +C45C7F1A4AAA246778F967ADAAC21699B3C2F7F53CCD424642892C3173F61703 +BCA47E653C62458309689785EF8EE2922E80634449F0D5F7A8D70FF8561E30DD +CC464AA3F3760E7ACD1988BB44770F258EC07172DFEFC95AFE45B7143F61BA47 +EFE05472C43A1240E4ECA51664614FB9E46C08CB00B3BEB9A1979E7CCD6E198B +40D5D6FF8435ED0234FDBC6786B0EED8646EB3F49B68D2F4E238A3A5FB509FFD +0C18D7370C768192A66770F77F254F3D6CE99865EE852437775E2ECF6A070D06 +629D8CD6349D0E40738DFE2B2322F8E9B53A40B6FF442230071FE3C8F1CB165B +5AC61446AF6DDCBAF235AF8C3E5897B295F5C898871FC7676EE5536F23D948CD +730F67D658DCE8BA321DE88BFC5B2D5AFB76D04CB7BDF3142E1CDBE22218DB9D +A2187DB6C2BA28F8B1E56E4FBDA64A73CC93FD301DE2ED8661D61D21A54B258D +664D91305B62BC03F9FBAD1C9B09643DBEB374950E8BDECD2840E3B48A2B0045 +85FF594BB6AFCFB94BC4F82AA8B81073E9A991AFE6A39709606967EA58F6B498 +12B336A139F1C8398B10C43468E4D54F8DF36F74B9A34271759CF249F6987E16 +9A119CB6BA19300AA1602D2A1A68E7859E0BED5ADE943681014B83E4098A9724 +E7BFD908CF6E90A25EFD148CAC2017C71D84D8EF214FF9417B0FC8E475513D3A +39530CD26C08004CFFDCDA05A7858684F5AEC1CCC131ADD910A51A93A4F1E288 +8486BFA3CB3ED0015D8527731C53D273F5C51DF3768C1FA7C004537457D0EC86 +45F2484A76FE59C55523C21EA566D7E75A6A825001173F6A34AED8537C0D312D +9E5AF5BBB8C19BEA4071BE9B14E75EED39BEB37A6E78CCC9C58FC9BD74E93A16 +BA479DAD22BF879F7F76D7CE0A39478190787C410D4E7BAB6CA813CC2AEE1A7F +E1F35431FF07AD1A5DAFAA1853385E96022553EC5B1B625118FCB6C1B30051CA +E231DE09B98D9D99E821F50D435BE18DF0621F60D9D5D37A55CECE00EEC5711E +3DA7A696E412EC22B7B0A48B56FB2FCC5CAB6BCCA80F73AB9E77536E03AEBB21 +AA2E7F5FB2687E7A726B1F24FE9ABD388C2DBFFB8C7645ECA1C3192007EDD223 +6B79D161F94F838C53E1D994A9D89409D998427A4CCA56580F5CEFCD3163F90E +F4DFFFDDAD963264CFD034C40C11B5A425C1A51D2DE781E03EB2648A409819AC +1D6C73F4EA08031B6ADCE61F80323FEAF3C049ED4F7A6008F4EC04193CF051AD +96F15C6A47771B4CB267DF45255EFF5D7BEA21C4B8F06598E0FC2F3E7CBC2B1E +2DDA078D01D9B55D8A20AF61666493B74A369F7B64C2D7B7E3109B033026EC7E +C2A01BE7C8EA7AAD1F533008F6CCDD3AA0898238BE055BAE80E15D3ED7778C1C +0AD9E39ECC67FD9B9910011F980EF3618F8E91ECED76263D0A13B1917A86AE3D +D800879EE7D742328B0B1448AF3540732D52C9D6530CE36032586D5EE643BF51 +17492A3BF5CB62C9EEA019F77026B13581541A06A1098D6F0E330196E0B929E3 +D923C0B43C28D0BDACB639F7D0474B84A43A3CB8A2C61FFF0C07479EF58825F1 +133487DE8B2A382B58538855165F466A3F066BF3BB90F3E49B8F92D69A02D0B1 +F79BF014DF7946D0E492E936837C9102240302E26726943BE70C0BC64BB08D4A +9C0ABF2E1444980CD359553D67B178B52797BD03F64C69BBC4737C654DC2FFA5 +29F64C35D7CDF2EE29DA97A7BA4D32E475702767290E984BF9EE85EBCFDBDA24 +C984826C7564AD82249AD05DD17BCDDFDE646E822492CB3E6648C414F9DB4A20 +A76F6DA8EFA046A0A50A2834671B66852CEEBBBB57F1C162F6C5BCE7A3962A2B +D08D49B3D8A66882132B494FD028BF40161BD24B07F3E851B372D8883BA6B955 +51F5A535D8D44E9F5141420798770F368079954549B505F94541B3988BB1716E +C4336D6FF12EC282597DA8DA87EB66BFE134885A7A1E27DCAC28B228A50CB41B +5AEA034FACBE35433B0764F451A51DDCAA3480A07910501080A94EDE59D95CFA +94C8EF5FA0E86E751A1DB653D6C9022B94CEF77EE80455FE513F17F07E3B6366 +B14032684004763E72298DCDF3A57222D64DEE2E49D8FBFA309FA6F4B78F7414 +CB30A2C8F4168B9DC02C4D489CA1305DB50D1F2F02AD88680285C85DE712D2AC +673C235672CD6B428766575C7032971930AE264A768D40474C275E1CA9D8E690 +E592C565FFA7EA1CBC7F7FA586ED8E2987217F871642F677A588DF3C10F2A855 +78B74CEEA437FC6328DA6E1FF942CE6FA971381FA6440490C0DB60644E1E4237 +E2431B475D7AD678E6A72AD0A3ED0EB7E026ADD2666D99EBD4F05C2E1C25FD19 +86641C1AE15DFA7489AB7B26393A8F77F1410507520ECECECEE8CF5D6CA41F7B +85EEC1DFBE32CF43514CE691289A06286A46AC0FD23A23F7CB60293685ABCA88 +2996BBDE3D98F57EEF708B22007F920EEF74A55BEA404F6B7DCEE10DDBC99241 +E003FFCE303F78C5EBE1E4A60F33C1FE91877806F225712D2095141E1E43BF0A +23B42A2C3BA99F1F3C46127211F4B9D8BEC8563B24D3EA2F1D3C37C59EED8E60 +EBC4A7466E963667BCBA206DDC700B1F99D5BB54B1ADB843797DEADA6DFF0D58 +43E1EBEBAFEB9706857712EDD1F21D0DD1102A95950223A36BD84BA78E7085C4 +ABC2B9852D1BDF205905948B35F85A553FA3719B0E6D5CE2D2167EA238ED03E6 +C83B2909079CF9D0AC89E8ADF899FFEF1A951158C8257C256AD7F00819F29F37 +A3C4D48A6C7D1FD0D212107F462406BE4C74C7D241CA0BA93FE225A31190505B +B47F435974F65228B39D69A2CD94D2E64EC17A0AE11FBD7F88BA89868CAB6B45 +06C9F7C0788A6758594796186EF6561723D9E3D540A0E4C3F4681285E3E53BB6 +0DA52F4A2BDD414D1748586BCC68BB408775EA9A38B02C1D30A12E6EF56D702A +4B2A443854D9F13DAD905587E879497455F80FAF60D5E03F0951A5F57D6B0B87 +FE19E867C3EA3CB445527EFAA4110770828CCF0E013C102C2B1DB02AB939D46A +8EB43B028A10E6C7EC3E616FB498DBD170333013A4008635B23F7CCDCD8A0879 +34D2FF449D6F2B90C31AAD0EF5F5AFB312E0FD496FBF5177999EBA15A448E6BB +A45F5460FA0E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.1: CMSL10 1.0 +%%CreationDate: 1991 Aug 20 16:40:20 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 13 /fl put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-62 -250 1123 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 +08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C +30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF +C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A +BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 +5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D +43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 +374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 +DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 +B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 +63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B +89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A +5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 +C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 +7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B +EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850 +4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5 +7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40 +30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9 +2E080C10DE923C1959C82C55551BEAECA9B83CB5E9364252CFCC406A27FC43B9 +69C5BB80A41C85D80EDDCD5029E57D77EF4128B40B131799B4DE0EBAE17C595D +A450B79703CFDBFF2D455DA910FE978A84F7ED3852BD7E3969F36C3F1BA3BE81 +9B299A46CE155CDD0BB9584D8278BC323B43C6DC278E2AD1D77733116900D045 +22458514359B1EF0E9CFA4516B201C65031C002AA05514C2318959530C2EB73F +439703EB108208492CE953091DB2E5C76FF7E7005FEBCB01A6C62BC823004287 +105EA9213BF4C9D647629BEAE0F304A369E81C6D9A1F24B98E78D0EDE100A874 +E3063FAC51AC5972896DD151B0780613872DA4FEED668C04FB312B7C5186AFF7 +70655B9658FEDFF154B9A13D1B5836F9AF14D66F46D1C45AC7D463648AF9EEF6 +0C17A66F7E9073A202EC00779327F491B51DF6C55D13251D23431B796B2E59AF +3931607D3F1A2A045B89891E7591B2B12D8EF65F473E1247400C6B659B75E8BF +E440E150F2E99A1B10747489BB813DFB1D4E7AA795E2214D3BD602CBA6E8573E +1F4CEB6A1838B9DA209396DD3B91614A4A385198D49FBC655525E2B06F030E3C +49283EEC4478DE3AF41861F4735D3ECE7D33C691A166035F8673FDB0B531F898 +C4E7072358144B59BACA5023AAE3E8036DD031AC6FEBE425DB5F90D39A79E7CE +CA99E6F917EEE7DF2D08126F9136AA95E8E41B478D989C03F4F878F997FBFE04 +2B95720FDA3337E5BED32E070BAC56AF0E355B069E1E6889C9D6F6937BAAC791 +5AED48536D08CA46BB78B23C68BFDC6DE47EEAAB93F2BBC77108230F1EB87F73 +DAF46561BB346ABAFBDB677554C9BC17A2E51C9A9E8B2E34209066D68F00D78A +AF29130FA85DD757793C9F5A530571F5CD66A5F4C5E9FE9E169DE23B884BE1E0 +B2615D294132B328FFEB8F0442ABA50E426A56EFE98BEECC32AC74A7F0F8FDF3 +73DAFB11640FB3E56630463621162219B9724EBEE31091FCF2D8EB2804DE56A1 +6324D717C155FF07E5018CEECCD323F0BA1069107C9622347DF889F4B160FF6A +ABD50968D9FA47DCD238F1C9604776700F419D41838368BF226CB8C55C205FDD +56B5A3F323249337E20A596FB953D84C0985722F0F9C839535DCD876CFD1DB11 +EAD95F81FCBEAC415D2805AA0942008AA3D7AC928A05DC19783FCEC5E01160C9 +63C211AC8E01A6462D900E53B4D1F0D8C10D84F1237324688A08CBBA419E59B0 +6AC55D092D154BBA8DC0B55333776A50F2913818BE2140ED1812AB499E2E38CF +67542F031FD267289A7AB060FAD335561BD52289D97D2AD51A0873EDC8949C19 +AE7B8FB4D296509D9D995FD051EAB8BE66C6659408FAB7BDAD50C31A61523B78 +709A9D262FD5EA01F59268209B4B35D760A539EC69AEEF23DAA56C23B4ECB893 +5AC1FEDE4B478AB5F547D49F2E44018D01E64BE5F36837916F7D19BF15D9D4DB +BCCC32DB9A28EB375D1E4325C7C693D9BD88A70C3620D0599C3342DF779716F9 +E18A42D3E13C9609DAC603A84799610FFBDA4B853A0426106394FA8E42FF8FB9 +1AE904388AFC7F2FBC1150993F5351EC17F8BCC86F41C51D51AA8845294511BC +32AA2479F0141B465FA0ECF4D8761EFD23AFD85420C626C5C35407091A2D214B +30A45EE381C9B898A083354F7CDBDC0CFFEDBFFF455237B54E0ECAF8309E6D8C +FF27D347253E8BB7B417F5B44B01081377EAE2C7436B3FE3D01E464DA600827B +079B0A2254B9F88D1C61C7F6D5617CA305D4F4238C073AE29B6D1983CF94C62E +F0CCA0404BEBD074F11483399E45146BCCF17E6365822B7B51019FD473AEEF2A +695D94232796C71A2C50278FDEA1C0424E58B9CEBE77B5BAB0796CBE1A784766 +A0E839511930F9CD6C8A59B0FCA8CE2EC2664F6E87ACB790C0CA1013B226EBDF +3FADF8FBA0DDBCC7DA37FC5021921FA98F08E9288B21451BC06FD1420C069A53 +CAD2DCC57C2A66F76421D1EC65E5519A11BE065CFD614BE5990EAB0EB683A122 +1C70415F20AAE49258EEC654051C25EDFA0FB0FF0336867F7B18D76F257A8BD5 +D0F082105AA8DD426ACB8CCB1A5079CD845B99FCC4B1240E12A01BB9117CE119 +42FBAE841A1F85902BAD49E631D3AA217AEBBB2DE5B67F7DB47E06ED9FCA76B4 +C738165E8381868EA9185007FD72ECEE398152CABEDA2B0F5A978F3B49917379 +75786B51AEF3178A29DD9B16A223C84561A64E0F9B30D4C3BBF919E50F240AF4 +ABA9ABF1C1D9500DFF5651FBB53B5EEAC51A9A3B27A24BF7541345521949B30C +39F519C040606C747FAFE8E046A98A45D02CCE57CD74A48FC33D9FF36381289C +468139415984B5671790C38DCE919671DB1A8C0EEE1A7F54431A3C59378E829E +F668815796359C54C7EF7305FF3FB0B0CF3E9553C1CB27FE768FE3E098BA4520 +16690A5B3F2D002113F48A8946B6898EAC1C517AF424F915CD5E5B632004B323 +F89D471BE0C1AB5934E73C355C6A72794DE07E6072D1768C25B4B8B4546847A8 +D1A0E21898CAF30F9E298B541AD0E346D4B74512D54B035AC2FA7474C06F6810 +E200C2D10C53EA5F0CAF74A7B0EEA4B9D4401EFEB642AAB30324DA2A5B89D0FF +923616E4555CEEE924E62159EFC62B83009BBF4EDFF78BFF0465D8CFB5804C64 +3085CEB43A7D402E7E52DEA25088FFD361D3CEDBDCF1C18285C15EA1EEFE2EBB +01AC677391DCA6DE005306F81E22BC2C8E24C4652A8CAF251EDB5E0B528A08A4 +809675DCD887033951C59F342AC595AED7A320D18BE2EC00A4FD1D7080A67FE4 +9ACA25B493EFAC70B6C0B432250D2934D05E059BBAF6B3DE86CE33F8BA70BABC +B28E0710F87D08F06FFC885608E9168A379A2F3EB249E62B4B2A0D09D51A13AB +4168398E09F793099C4C5EFADE04027C4E107D31E9919C08AD69AFCFBBA3C3F6 +39552C8DC60752F7FA2BAAA1CA89B8A79F0510B5054C71634CFD2D2401EB5AD3 +C71CE94410DE7AC64315BB52C82FF2E87DAE8DEB0231AC7C95FFF330576AC7E7 +709316BB5FCA67A3FA7B740E9D94E725D12289ED95E379529AD26D950E995616 +9BF5D40DEFFE7320318A6FB359F9D895F7AC454A94DACE6DCAB13103C87654D3 +8641A4029703981BA8EAB3BDF3759704E3297077853BDA0DC32DAA45BAD52B8D +B0B3DFE4CD99E92493937D1FAE4FEF8BFD83034B14119B4E1E81192795ABCC54 +60EA53E59E388B2462579EECAE76E9D7538AE1F030A7C2EDBABFC2EF39264B25 +1AB664E8FB4FD3AFE50C5C789FE09F17047FAB6423F0B8F7245C055961A68A3E +E52EFE2D95FF3D5D4B59926DEE73BD53760C5670825376DE0FE488EACACA1088 +BB49CC951C5123672C77452DD0141E35A4F7A519B781FB7993DB9803EEE0749A +196ECC81583E6F6E6EA5C2483834DFC23DBC6B19073F19753B4694705DFA6498 +72E9DD7B53A123DBFEB26F2E3574160F538A4095C31739EFFB6EBFD95DF1D2D0 +484ED99692BD62E3024684F3ECC3F8F053F7316DC95E87C7FBCF72396025E3DC +211B200C7A0B07DF73DE5C3E54AC0ED5351E730CD35E4FCE7516B4F250B63510 +1B8091E85FDA67E8CB8610FC8C3BA6102FE173418B846AD1F9497B819FDA5B78 +1BF8E370BF18B95E7B26A29B8751E63F38FC78FB882B7B69C25A7F266D958D36 +0D4C7DB1B8DA32D333B50BBDD6AE691EA480AB3DE7A5C6F818EA1E1EFA0AD197 +F03EDCC93A7CE7193DF3E9E583CDEB97D11756DAB3A8E565AFBD7929F8C71A55 +377BA9522684CFB184C8E6F6516FB73E59EE46132FCBEB878D2340FAA2BF051C +64A0F7A398F30EF2C2A7346659CDAEDE932E5579E44EAC17EB31BED2113212E3 +1AEB2DBB63124E60ACB1C853612A1304A15059905F769C6EFD2B2E0FE93EE3E7 +A342131EF659788EAC53FDBBA84D320A6A995ADC6DA03DE53BBFD13533EE7D06 +3C43FE41104DECD6885E397B67B16FF1E1779B5FFA18B8779BB9A99521BB27B8 +9E95CB638EE5A4A41573D6B65A9AB48E20AFAB5373C75C3AA928A828FFD5B8DC +D406C8155F94CC10260E4A2ED282C3D60B0D10E63D97893BF559979F31EA574B +5EF21BCD88136C381C29CE35E2D3F4D63A70F979BEFF8C009AC80C759A03D559 +FE8ACE97B6BB2A713043F853AE57E5783F449B2884A3551A3CD2EF85F485684A +6F9C0493B5F628298F49065BB1E85ABE09A5B8A97779DB4E478FA0567F76BF44 +674429A44BB35EA03D0AE4C0C92C6E674FBFBF39A9090D4E5F9A040B4339EF49 +2B1CF8DA2DD76FC000CB175245F2B4A2135CF04BDF04E9F29BC5749A790379C0 +96C57E8FFE17D61A2833D7E164E1AA1BFE817D5BEE037D4B741BFDB90646A8DB +6C9EFF527EAFAB6FF2A8018C20298B700358229A3435EA4EDBD6B59F4C934520 +9111571018CAE0C6429027C2FF53144AA4FE93AD2AB352EAF0104FD1E5B3DFB4 +1C9627903B2BEF2B3997C8C4A158096AFCEE97DC0A74AAE2563D1922A3C5AE7E +A99ED5BCE2A6E9B775E3986872A9F638625E0CBCD65A80565B3D559147A506FF +81AE38AC03BD4A600E98DD856A8611C6E163088DD4807862F794CD4D324C0FE8 +0D96CB0F9052B4F2835B840DA6783020EC367270EA1E184FC9FEF9D22FCDBC8B +192699B51FBE05B9A80170035929D859F29C44130990ABE674D9ED6C69177580 +9676EEAF9C053F4C514756F3481ED1F6609AA2FB5C6D97F548E4524A423F4B00 +2E4DE423FD134FDF417F74EA4CC17F5E96D153C9D10BB4993123AB835A6B62E2 +CCD4E356062EAB83F019B6FFC689E66D87D4D7F9C95DB7B5CA6614E196552D9D +CABB6B6E0AC3890579CA7F20DEBF377DACD6C0697499110E1B10F2C58641E105 +8B47211E6EDFBE63E38EB023B4904D7459030BA1C4E37F393C8BBF0D3FADA478 +29BFB4436B69238810FAB19C66FEE3DE6DFB43D55F2DFD07A9064DEA5E552104 +4950740A18F1F0B6A7AF574EA71D4BE3714164D362F138868BC698CC4465F675 +AB8EC379E75934696B8E5CB849454F5AACD2C658694DCFDB8A5E9D06D5EA13F9 +A46AD15FD3049207DFB2B51EACC552254C4D4D495CF457FF81990C0A07E56245 +C1CF05311B52547C599817B72E81162540578B35E5296E416F3F0F3BF8A55DBE +22559D5D8352DC7952F6FF1849FD4E257C6F0A063884CDE3F5AAB1893CAC5475 +E78F71D55D1EFEFE2150AFB45066565828CB2B9D672823E669F9DA47E2B5BE5C +8EB31A2FA16CC6D342BA046DFC32AF799476E80C36D87FE89BEAC2455E0757AB +F0AA69CE84B9955EE420973A9FCD16C89032F34EDF41BF044A123F41BDDF71CA +BA5BA6B46E798EAEC9219AECBAA99BC417D7F5C5CD1589D5F84C2F19D7F9A913 +11A7D6C47005514705C9C617E4BD55D92D1528608F72346DDE5DDB47F5C59CE9 +0B27F41EBA097FDB67C335031B5AF893E9BBF4DFE945229E2C4272115A69B65D +025A58098AD6B366207A2065E865EF8F8EA1363A4D5FB0F62A556CC885110B98 +2FF55126EAB50DEC2F28415C27588470601B1FBB9E8FECD8A9C55E213BED6E88 +3CA6CA6A3FFFDCAF09E748EA047CA109960F92ABAAAF99602F5B13E4D998516B +B459808807B52949589A22166076A28EBD49DA713802B7731E047104630C89AF +C99FF96B9B16E0901696AB8E665CB94C39C0957F08423AB6188B3F505B37A3EC +A449345CD1208BE2845C13E9FA2B8D03300928FA5424A7F8F27E9D6716EAEB29 +E2BFC6C41648B9F13FA4A4D8D8B81972C32FE45F1817B3182D270AC9F6B5B001 +4574EFA7EDDD8E4BC7BE6BFDE7CB04FED64E104920892B9E98AC63F16C0366AA +D317A19C71AF274EA7AC9F3409CBC042A1D7875459ED89887497A9152E212915 +B83B7721D57B169B1F201C3B0605ED07D5997EC79D9F367ED4F455DD7DCAE65A +2B9057B3E6B2A719956BBFD189372FB8D3B60B075F15D91F5E3A2DF51430C000 +038E71AE7AE040E1A0CF0A3BDB8F21D6C0FDB1339B2821F7542A782A43B70DCA +6A46832981BC5DB43B5D0CF208F38E642727AB79E710DA022D47D39884A400BD +DB5F80A39CD46558BE7915FD7AFFACF243AF5A3762E76D33D6B6AAE666F67BB6 +B78BD2D2BFF6F7CC10B3B66F3241BF6F8518EA32E020A26905E6AFBFBDBDBA17 +244BCC8D6A127D1A8690DDDF509E06532D3F28D9235E965F4D9E5D8664F0BD12 +11FC9D1A8C7C2A4CE4FBC9EB95611D9581C3FFE6991EF04073803DAE1B5D717F +D65437213F3E1A3CBFC1AE66746FDF8FD949F7D72F73B11A01C0FECC9B51D203 +617750CD5DA57AF8E793594397AA33A1A3205C5D0838EEECD209A67EA5249A56 +7B727F6B22798508D2CB2D5E2460BCA4826B82A3BC1BB6CD709ABC64E2977973 +82B520C7EE77AFF1F940E95E4AC7776D40E6FA636A2BEFF673A61C81BC958BDC +F7EE7BC246DB2474A6761B5B18BEEFD57BDC13688FDCE862356FEAEFE42B8083 +8D388566CFFCAF64F5B494973B56E311D795EC29D9F215012A571AD28903B0AA +C3C46929133385A99EE73B05A603481067E6E813E2C80518835EC64C65DFB130 +2B69257C3814989A9C2C1E49EB02D3A93502871A121EB6A7D07C1F243344AAD8 +6EB61BA565BA9EC0B28909A15FE82E425190A8C1AC8B1DBB92E6289794F24E4F +3A25CDDFC30277669DDA68269500D610254E2E67981B361B919960EC286120FA +6954B91A94341A5EEE52AD61BD71486207463D4A412E45D802D89D3CAC436C6A +EE5C9E06FA42222E004771D58FFC2EE277B720DAD3DE5B505077D0240C4CF3AA +A54A971FADF7C3CEFBBEEEC093E294BDF4D3B21BDBF13B7FBF5DB4D2528B2EC6 +A03FCA688ABDE692AFFBDFA8DE5E80882C1FE4640C7A3A3EFBB49DD31564624B +C5656606CD565B84976820101994B26F41B7AD49A969D93A8CE62212EDBD1E9F +C97B3E26DC29A6540AD72C0504F374B2A4AC955158D4DEB3DD544C8A404753E9 +4D44733D2AB083F6B49286D5BF71BC746E23DAFE40F95E4CD33D026CF949B7E8 +B7955BBC6588914204F8BD1916BC28CE626DE554FFA95BE341EE51536AC10742 +A5FCA8F5F76A417C9DA3D803330A1A6901A26D0278107BEF1301C46BB081D355 +3725DA2B5ABFBD795200B2BD231657FC28B6228BE8A18B00A540A49D69477A6A +538D1F3548270295BFFED29777CE491BBE6D367FF5393D736837823022711475 +1D03EA22D6D4C380F351D3159AC9407C7F1D948B34FEBDCF6AFE7FE0F816F84B +C3682C5BFEDCF6B1332DBF0032BF88F9229AEF4858A3D935B855B5C738A05631 +2A77CACDFD2144E2FA60784AF2166830340A0AED0302F50D0EBA673B1F450F51 +DA9E3C9DF5136EA4167E008E2E2AD0BABDB9E144FFB9D39B54D80BE7F347F4CD +FB2B1C98DA84E855EFD44A169788EE5E08754FCD8C0154F2D601020D918071E3 +C10FC2BB6446437527E237B336D5D04D43530D6F5AED60F2248E7A08F3F17514 +D21B09FE0BF5CE4E23DDEACB81EA87EB649559FF29590B2569CF8C07898D7034 +07B70776F93C0F943F1489F0262C44AF4E300A30A583B6A0030AA64D07E28B65 +2AE7668596D8A7C51C315BAACF5B907F6361E86B2DE484FDE057141204C98F77 +64A8C9B68EC184F7A17FAED61B022161A662DB4569AEF8F04E6B887A0C63AE9D +0284B943B53EF9C247A595887A612B90694876643C35D46FCFCA331E7B3D8646 +F9826CBD0D4F691C2CD9542DFAB7BB3789D9990BA426F9A8F161CB4AF752C023 +46CF0E9AAB48FD24931BDF51B58CFB9C548E93BAE1038D6966A2B997DFA012AF +F4B2FC4C56179DDF4B40D51E7C6A4929EE7CDF2A985DA06EB93D91235BB66BD7 +854A6A6BFE3E8C8578CBF3723339E95AFF4CDDB9DC00AFF87436E1789C3F3CD1 +EC77D8B6C106242C16E35E6DDB58BF9A96FF7CB9C5522E76D76DBE6AF29CC54E +F32A928E53EC588CA74219FAA9B37BF26FFA3954B5C7A3246E47968493FE1BD7 +A7146F58F403018491276DA918180B6C95BB2C4D93A654782E7D7780D1176A0F +CCE14041A005AA613C103D5F47F82327CD646C14A81A9FAE771E944CF70A602B +1E93976C4C6800CC1A9DF0077BB83FFE5186C107C8FDB2D70AAFB230A1F53BC4 +6E930636155C34315FA191AE48DCAFBE12F934283BB7C9E4433F8DA8E5BA24C9 +F47EC01DDA3C61A7327612136249FB3D14596B966F48FE1E1F95E780E8D10EF8 +09CA34C7988B0D6004902D72C03C9343C00DF128648C68A78DBFE16D829342EF +72861BA47C9ECE6DC444B8E03263FDA416F396D90EC4C83E2F55907B963B3793 +AD8AC58A04180EB504F093A069397CBA0E496C8D9B31F7FFE925949910C429C0 +E514429F6F46E467057803CC0603E39F90662C951CE9FFD4525E76D4D29115E7 +2C39128A44C44D4B0E208B6ECDEE73B753F05C7883B1345C3C8CB40EEC35DE4A +2EB8F1A6167B180A8C18C95FBDD462C4BA2A23E884F5FEABB0012C3567F7DF54 +5786B6BA32B5D331A1BA7E819D2E3EA92E288D509FE70DB067D351EA53AD858A +F88F250CD0933421FCFB23B77CC305749FCAAFD49A2BC4BBD7087F04D85DF0C2 +7DF68ED3A0CEA4374123D54C538D05765A482B023EE4BC2519636346AF825D67 +80F78FC3EFF8E9D198E3DD67397F9AC965B1A9D99AF8C96C17CEEF8346007D05 +16E880B8716FF385C0CD679FC7A770E02E06CEA67160D2AE407C64B5E84F2591 +88371FD832A05D190472A74139860FC897C0A93C1ED82766534ED9415D4D7102 +DA832B566A44C52125620ECD7FC4B3147A571156547770E83A08CA935CA16AAA +1201E7B759BDA9A9C35BFB9398651504D3B97440DC2E1B83FD9C68838EB29EB0 +0CAF700CF11FEAAE098F62B3A5A67E9DE2B20FEE44A31C740139859158EEC81C +0F905187C722AE412502B526D03EF5CD45EE125A4DFAF40B51EC4275994A424F +699F61ACD1A09F68895718E56B66CC8F4C59E71158DBB33FA2E35CC2845F516E +96BBF28C8073CCDB88B459BEFA4FF251E3181C563D98EF87A4648D67C31E3FAD +770578BFCA0FFFCD9F6A746DF448B8594A68B81C28536E9E393A8E6241A63450 +54ECAEDE256F21E5D0A2E1A100FB843F6A7B0C97A3B2942DD137C4E7FBE2BBEE +F252E9BAA695EE6C0B21E44623D35F0B11E232E626F292892C8D5F099E216418 +E08420BEBC1EFB03E4D154A2B35E776CD84C8C9EAB0FE10D38DC323851405E17 +4660DE87A1C42298F40F33861FCD9E68FDFE7EEC68FE4EF9341D5B539179CBDD +DB15416397B2E67D937327FB707ED93DD02BEF04EC195D7A901631DB45EB68C3 +F4E38459DE458B6793A157FECA9895EE150DD71216887FBB73279E0FEA743A39 +1F8468931FE798D8196C96E9BBABCB19D2AD97BFE5A776E6626C9F83D745BF14 +E9C10375A3561FA3585BC4E86FBA6513E5AB20C4BABC0761A9A897DB95A1498D +48E4246313758DB16803789B29ED9B04013A8DA79BEAB0E0CD901EE32E241BE1 +BA0C64F93FF30DBF15DB9266C872DFF210DB36E3C71FD096D03DECE673AE73A6 +3A909D7F15807C71729ABE5EC7222DD5C1475FCB9920B8F2B1B5019238C9ACDF +7A2948789A6E5219D964627992618D6AC27D8C898FD50207D6DA833EA2DDC744 +D241C7B7403F8BD4804FC03D89F5A53D80F96E24E8EBD0C5276BC2DD5443A986 +D4FA9262BFBE50D93CEDE92D3741EBC7EBA9DAEB6D3C24F50365D445AD284E3E +88B245CFEC62F0E8A62517E652F2AFD5AC720030AC82768B362E1BE33A3BFBC6 +4862A01E3F70178B3C30C984DE6C14E153AB5663D191599D5DAF55C82C9F045B +243C3FD310FB49C4508F3E71686E6780E96BDC5DE7B93EE02E356155DD12C554 +4723199288C6668D7BC952BFAD9C9AE708AC084EBD43952853864E3195596C52 +1DF754A536EBF9A2B222DFD13DAFDB65AFE622AB231EFFF7643651C3E802ADC2 +65CE15FD0B3AF65285B68CD78055B2012BD4B07C6F44F76594BD8D3571CC2169 +93AFDB2DA8469B4CD9608AA42A70C8C65B18D0BAFFCA685983B114C9C36407FB +9B0CEC6D678DF677B2960DF600EB7A0D8BFC3DE30B779E0E87B4C8756CC8F1E8 +DC0389D9874FF275101681917F62A3BE7F031C3CB45BCAFC4B75ABAC37E472FE +320CA222FF0D93F2952C9DA2CD57B3C976DD6380A21A2A014EB65F634179F992 +6B6DE6E668DD114127152C847FDEE9A9E0DC031D779C273B9822452C0E3E37A4 +EA8A0B836F6FF43A6FE2514926903E92A04A511616AE373E8B65D2ECE3B61CC1 +828478FC9B4934B748644472E615988344F5D54CD785B53B3EADA902D6C1DF47 +2C186FC0427158C014AE68ECDABA015E4E99602350D82DD760BC82DB0FE41A3C +18B6D86F76D56E5E6916FB0B4B0ACE1709766A5131E89A24EC44DBFE292F1A71 +36E71C382051CA99C7DECDF461FCA13EDF3AA06210ED2406EB79C65BF6B4FF64 +98DE9D823F1003DDCF89304D1B3278B3B262A9FF9E13C8B5D16F6587A727456C +C8F72C28F76CAFB9849DD15B6D2450AA91B2EE2D013C702E7BA39CB3C46F9D0B +B31680D89BDD9D06A9319D9EFAC175CEC30A952DC5C87A9E4594AB85173E9E03 +522D9061CDB335A59E4E8B97516AFC7E4EFCABF1D931C80E4D031B3B191AD517 +A5E2F2AA4C23A392FE09906226F1B846D1CCF3D799341EC2C83E6A3E9ED4F35A +66506EEC7C22640E42DCB7D8959ABF8F1EFB45791545AEC4526CDA41CCF07B82 +884D2048CEF6A49E0267579C030E4CD228F6AC78EA3EC6A3D9E35F2F1A690A28 +9060B0F3785EBA06C57F52C5C13FEC575A2D3A2C2FB809C6A3FC3A4E4F11093B +6B03E139505DE7F41FCF765C5427F45243A766FC486E7BCD5B466809432311F1 +0B83A44B03D9B5A65D1F4E385A6FD02BC0A4B3204CE852E1721F6F0E1C2EEBA8 +3D4911A981547FBA5ACA6AACBFF16382A1C980E292DC66D399ECFCC42F078ED2 +A05C06AA792345D157A2D6E59337CA6FD7F951DA2FB02D6F2B80AFDF36B6148F +B6AAE89FE177D9AC92DEE51774059863F58A551352241B9434F383BBA4D61A8A +901283B9D08AC993B49E2CF4B27E8BD2475C02603F5B4A2EC98E21F306DEFBAD +0BB4C0DB806729B61E2839C8345D62C46EA1826B4E7CCD5EB69DD7BD899ED2A0 +B4992CCE2C5FCE9415371001840BFAE846784BD81F2915DF8792C923E37D6823 +A5427949C219D9C8CA716AF631485CD72934B3E8E2F077FF2EDC8E6A0B742FBC +946A608F7FEE8CFEA0583FB6D9BFC68A2A01E379A6AD0DEDCAF66C7900A2F967 +C21804DFE2B5ADD2A334E7208778FEA247BF012D1790C0B796D2C5AD7C0C26AB +311864254A3F88895197C36D5C236D6FD3F58C1B4A7CE43E317B14D488F5B20B +DA16C269B9DCBCD197A72B980C6A443C22EC0741B6680B8D2CB4FF597709EC92 +63BBB449B884B516B50D5003815B2978C5933A6C80D572DB08433B373C7375C4 +EDAE583976BB729F93F57212B521E5046FB5E755AF208BE5987EA8D9CBA315D9 +6E0DECEE1E2469B3C0326A809929B5049766A14DC81923CC25D17AC4A203878B +AC6C2CAD5D7D5D1E9CEEAB73FF195D5EDD81947D6FD078927318C19D382DE6FC +6C44294B400C207DD83270C1E53313CA05735EE194C80F266E2CC34E041F1B66 +E2847E682E22BCC536982D6D6A96250EABC30D5EA344FC019292ADBF477795E7 +CD89D9D47D67214D08DAC6A8E8AE2192F195DA7D41AB0ED40510631C36701CE9 +4670F48AC472D1BE219F48EBF9977A03DA7DE787FBA5CC59C6FEF6A5F76C4865 +8A7F2A267B8CEF6B4CB736BE4C6ED226A57C092BC83E4522D19BF8999244125D +23C36CD772E7ABCB48C7D1A27D482F6D444B910CB957835F78473238D3421CC6 +AEA1399BB2533B2818D77FE394481DBD8CB3C10D931589B0959D217FACADA757 +0DADBF579386DB95A6F12F61D10C465633245E05A100961844CC9A5527B6D7AD +C632910D4ED6D71AFB2B34D975C4A32631FE66BC051728D50C63F481AD641D2B +4E2F7E72F66FD22D424B8C6C93ADD447DCE87C2608E884D36EBE21D97DB9C82E +14417EC97C835FBA7F020B6CB06A0CD989F9D9E5CB5C8F662357B365A581610C +9165823D6BC005B510C60EC4BB3A7FEDE70410355D8E58A1725E4BFD93BCB75D +01988E0F9E4F4F7F007F153C76A450A24FE139A8B7D2C9825A2370664263F1E0 +411A4A0FCBCC1B8F5EBFE15C4143E4E48FA39B5CC68A116E8A96645AD578FCC3 +9475DF1FF6EA1C3F203CFA3952482B6D380C25B80084F849224296B2193CA434 +B4850EF0BD04FB56F1BEB4B465E5193BA62D8D6B6920749ACB685D09E026E12F +1E23C68EB275542E53C855CBE19E400B7DC47046F72AF881EEB1372B5C7B90AE +F3654A9DC8436043A6278B375ACD4F81017FFDC478226EF57CC1C3730E302601 +777AD0E09E9E2CE8D0270DD6F19A6DA3741F25727EB307C7F8AF73CA4CFED885 +0C148D4A2444DDA2C22EDAC2356788B90ACB3428DB71DFC65380959FAFD573EA +9B5793D05C40E2AC8059D024EB873CAFE1711FACCB17E6CA35F5F6B55C4539BA +0F66A1EA6D16A26D4CA8C07765F76C68638FEC66CFF951DD13E0F48CD839AC23 +0E183844C5DDC94AC5ACB56C532960E0C24ACD0C7F29530E9DB888C260F651D4 +A063B9489961BE9D68F3138CC2006D0EEC618B1165C22CA07802840DD8562BC8 +04FEFB8300B01DA3A5D25CEEB5115AEF6EE197EB88B4CE3FA5092867044274F0 +B2C49E7604FE33554BFC8BC782019F0342806089BF8BF7FE6F9779D61702015E +1D8CDE9B2F199ECA9F5AE69E4E286DB30A02B9FA44A53081E015B5FFD2DE7D6F +9932903EF3FF0259BE2D491DB2F15B9170AD9C3BEEC5818B65D58C2EAEA21EB7 +874960E7F46D8D76856926345542E021148D95559520FB876D13B2B18D9C5EE6 +6FF720F22F1EDB66E0216D20C46153B1CFB096105DCCB04DD7F4F606566EEF62 +C638DAA0044D2DBCC6B460682F0FD9973F4396F4CA99D56F28C0105DF0110714 +906A9EBA29B9AB375F250C065CC0329DCE53577386E005EDC452BAC822CE7E69 +F9973AE14490E9FE6C033BC6A77391052BCB476AFD901DB71DC2BD5BEAF51C99 +609D01BF2696558515B6FCF825217DA206C87C894133D0B49E8944ABADC9FF3C +E8BF10B2CB5D5AC9CAAE9AFFF7779A48DAE362E4F97EEBA75144F4610DEF1F4F +F89E6DCAA88CB1910B0AA98BB53DFAE78611B28DF5C42D6253218E48187D65E1 +C093CE0CC8A137F6D9C268203B483F153928415EB96784E993F4B13E598348B4 +0ED07D148B74B5FBEE7BCBB298F4E3E364DC6AE166C0D91C4FB69AF8B7A47C9D +03692EEACD8E700B9E79807311E320CEB913BAEC5E305A96DEA1456145E2113E +871A649B7D143E05FB3E1242782F2CE15CDDCC9ED74F12D02FB74D23F2103979 +DD5CC27040B20F0324A3367DEABE17FA6069C1645F801E9ED5C9E653F9207C6B +C03622E1F65E3280AB84ED97BD555DA13AA3AD7DA97C4772185F63F009D4EE5A +9A8898A99A4CE1AB51B60F872D337233BA7E0BBF6C4F7302F0F9CAB90022ABC9 +AEE327C1A866BAA2F2CEF71E9B71A7070649E1C25EF91AA389B2C56B53B2DDC1 +CCEB2DF6571E19F71ECD136B0370C6417D484C4FC1DA9C200F3406D26377C807 +FF79460F38019130498C0F8E283D3A6416A51A2099F78D4B66DCD2FE873C2B4E +B9DCDE7F8DFD42EF767F381C034C8106F5AEE118B209952FB6BDF693611433A3 +CA8814367719F0CEC27352AF826A1455EF8A5DDDBA6853932A1B1212A3FD8B93 +2E83EBBC72F2CCCE97CF5EE3A85CDA4805A5D4663D66015A9E92F670BA5FD46F +B5735192AE1B0630B6857B070B43A8E602DA6127EDCDD3550A17FBC52BC26229 +399DBDFA557C94ABD7409495921931C68D1372BB0AF7F5F1414735 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTI10 +%!PS-AdobeFont-1.1: CMTI10 1.00B +%%CreationDate: 1992 Feb 19 19:56:16 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 121 /y put +readonly def +/FontBBox{-163 -250 1146 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F +21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 +06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF +55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 +B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 +0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 +1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 +7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A +7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 +356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B +19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 +C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F +244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B +AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 +5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC +D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D +993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363 +2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B +E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3 +309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513 +F42EDDCF39AE522A1DC2D80B2772B05DA60F3DC15A815A6BAFEDC399C7956E75 +3851CB3588E22936FBFB63A58300298B11C45D82385C083D07AF133BB1BC941A +FDD9F34D5E0B8087EF2A58C54D8AB7580EE3ED58AEB83B72CB9028F472ADBF11 +05A77651F118824F6CD00209EFB60C1D32D46A78E8C8DCB8B0E742828E3B7D17 +DF5200D68189C91FB8489CDEE8BC223C4281DDCA5F7DA80BD5C2D66A14695EA1 +5F05E03500579ADD440ED2C57F535807560C6FE3873143D792734FEAB93AE8DD +633BA6FC5683083402BF086D23594AAC84A4868AFAA32AFBDF86142B350F8F62 +E2531321E4CCF34293024EF8AB617BAB11A3A5EDA03CAC5AC431C893607DF8E5 +C3DC8646027A7554625A16FD184A70DB5FE6DCEA366B64430A147144CC9839F5 +72829FFA42BC3A8406D680E44A0305C9C9E265E91AE82EDF30F73730DCD4AA20 +8B63D3B568DBA690DFC2103EE47296E0EE2AD4627B84BF062FF54A76E4C48137 +E491AFA711FA8087A3F3FAD6C3BC571655D66A52BFFC2AB09CB9035AA67A50B2 +E938298E2DA5C50C50948BBFB6DAE4613B0C70E5E2E0E7C72621E61E51107C33 +463BC505D3FE9FE04CE5A67B252B8BBA81759F6EADADF1DADEB0B15872130D09 +D48E8AA0633DAF01025F36A0C224A65540E062922F9FAE9DD77BA007CF237ECB +1DBEB5BC617C7B84599EC193456F2959D222DCECE46B26699F71AB1B2640D8D2 +3EC0C04CE0CCD5B6940E36472275ECE2E42ACA7B3E886F9846A6894D1E16A448 +6DE9DCA4F5CAC1DD63172DD7603A082CF812D1427FFB51E155AFDEAF583BE97F +5CE8E4E9FEA15618846B1FAE475C62689784326A95DB1383BEFDFAED6BB9194E +9BBB86476F78F0243B4515002D76AFC202225F62B1F04FF4B69D4B63C16B3063 +711F889BF159978BB6F83E2C090D44195AA4791554F092D82D50D4A3A3B7153D +7078A482E02D272728CBF0A96B85948C31B71028F03B77CB61EF7AECBA66676A +D050B06C53BA2401E3B0AFED364E0864A5B65CF9093F78A84A0DD628730D6F4A +B65C861E42E9466E7D1E477BE5D7035CF30F9675585B52C01924AC437DCE2943 +8B545C90ECFE190144AA8A7A76FA522D98EC1B581C9F5253F704EBE33FF1D1A6 +86CD1F9B706ECA6A1BBF01F0C56FA59C014512C31432A9ABF09AD6C49363AA5D +8E08AA4D0AB995DCD4CCC0400B71055505EBE7D21D2061504E990600C3C04937 +424C2527DADEF40A0C058E76B08BC7B8CDC5BAA13E4E7AC6D3B59F25439BCABC +1A940BB9D4BDCA9DECBF4EC7F4FF3655C89E05A7706613C9BDD0179F8C686333 +C9A876055B3ADB816692BAD1AF575011E30287CC9B65902F2BCB1BB45CD441C2 +1968E8DE4FEA5837AA93CD73FAF6F50B87DD2EEE0C1487149C562864A528EDA5 +A3612AE68D8ACC67C5207735F4AFD19462CB84EEEFBE81DFC66CE8E89311DE83 +6546CFBC19D4A18F4A3725838DE19D7F4DE87F9F1866DC65E155A82FD5555D79 +F799EDF508A4F7BBD16D7C09C035DB51858CFC00DE7CEFA7A8C6ED6C47EC33C1 +0E613E1FAB5B5686B439F467DBE384AEDF8836B2CEFC1B917AE95AEE4329BC16 +EEFE7CFE5B43323E90AC167B1DAC570C3FA61A334427495A5B53C6DE597AC069 +1E56B9CC27C7789AD915F2A33A70F2D194859EFE129A9A6994559A898DC9267A +A1966BB9438FBB2EDD33995A4749416205A3E2F71A30114B161AA043FFCFD30A +1094C56555DA272AAD08228C0AB1FC39BB11D103894FA0A899E0AED597A595A2 +EA8D70AA76BEB04C244BDF4CF94226EED1B01DFBE1F0C3E3AC90DB4AA8BFF2E1 +C718A17B6B69F423E7E44F8D42EB67C0A6369CC1CFA9E9D7F50F09402431B2DC +B5CA0FEF2E24242C5027836C6399D28F384F1236DFD33EC8634997BB78B25DFA +CE75E060D19009A6AF994F883A0908B4AD79FA8D69D1930D9CE40B53D1396553 +9D9A7FA0CF827957BC1244A816576C8B2DAB8BA123A164E717E9BCEA023CAA5F +265D9D24E4EAF58F0B580A351B8AB2BC43E338AF241AFD001A19A984CFC62A59 +8B2013E8824A6827A7FEE516A09485F301AF11D925D18F59A2E907B17646C8AE +586E9168900605CA101CD78C24D3559508F80E844D31BA7E197DEA3A38A82766 +A45E8C41B60DED52B1DF8691737FD7D57C807968D6937B90275F082C692E1C0D +2C767E0C77B192774D37B2BD4E80E214A8E28EDA8926A120C12A4E7901DBFBC0 +B5A72A1CCECF325FFB569231EC8AD0528086D6E94397F8F3ACA26BB976FFBB1C +F49B8B6BF7B3A9E953E9D089FBF8E0B82D156A6C11BA6520F91B8B9ECE690FF6 +324176A8016379348959A20C78F07D82DDF803D38C73BB3E0C0DC1028ACBD6CC +8DF50D96AE276FD243FDC8C8FAE66E146160C966F3F67177436F9F861940AA6D +B5348AEEC6B0E923DCDC589E392C72D0936D958884858E397B8BA8B553333BAC +6022064E4F1D42C3CC143061D377FDD0542BBB5F3CD1A089CE64B60B4B436A14 +6A429D05FAD474C84CD8672364D35543C605EE5FDDCABE2C06B4AE7D4F8490BA +E2CC28E290E5323E4676391739E2EA134105BBC58B3A74D940575BB9A919DD7A +C38E05A366F23A0143F4C192316CB7408F5E64028F28840A27FC4DEC8448D593 +9D5468134DAECF543F5697EF5989FFEB34807A1D79DBF2A354A0714B27B97DEB +0D8EEAED69E1F90211E1BB6A6795537BEA950601168458AFE5940E78A5FFAD60 +ED2E04D99E7FC6BC0E5747B56E80805FE24D81A604E867CFA1F9814E048D2DFC +34D04E8884EBDCA85AAC94DA6ECE609228892682EB8C569C974CC0E7362234DE +0B81F683B81ED714DC0F586D903EFD97805FBEB92170C0C25A6A13F76DD60921 +2F1CFD57CC219FE6B91DC1C99C0FF4951027EDE31DC5535DF6612BCD4963F9D8 +E6D01817CBA5A350CA666B64B6A6B45E4AA33694142CC1E150C0CCEDE5168DBA +50938787F91B44CFC3DB90121B49032F0D73F631F16A82D4E19245CB94BF688A +213A56D62D546ABC818C730AD4F40E4C622276BB12C090C9ED9C1B8A9FFF2DBB +AC82A80CA2406A842AC497F5EC0B227194714BC6D47312177616C638CAB94C31 +42ABC4FAD725A3DB1B83A590B4E05A984EF6492C68BD2E13FAEE77DEAA2CA56D +B8F6CF2800B15BE370179ACA404C87E7D9A6C7F70ABECDA8AE07DD3AA14808F8 +219CC49DCC2828AC72966710D1506B400640CF80090F5BB400EEEC11851E630E +23F01BBBBD9D2B84246FC644567C45C2324998679A7EB28ADBD2C4FC20CD3F5B +E712E38F87EBC6621769C99ED42789505EB5135A47DE4F6D15B536586D7F2382 +9514C2528E4E9BC0CC8BA6828AB7ECF3D87A0CF5B7A26F52AA89B5A1B5980AB4 +399F408B0A1AC21AD1C6A40F1B489BC8051B8D3C537C765AFC909D5C62A2F5D7 +C30C349576D36B1FD4EBBEC9F3FA3466FE03C885FDFBB308929CDEF89BF35E00 +DE9A5EE59B1730528FC4A653397FFBB2833073CC792AAFDF9421E5DBE494BDEF +70243094C61678C79CAFD7DA8363FBAB45202455F72241CD4037225FBDAE983C +22F1CE3831BECA0F99B1BE8C239563B2BDA6B32246B213DDB45F2CA748E43769 +A49AC5042B18CB894E9A108A1062B0D8E72AB0A81B866AEF65B1B993DFB12ACB +68265B8408568516415E4C1900204B0617110C98E9EABC34712BC3306B595761 +79F96C39D826C959536B2F2F9320EC9FAAF97427E07EEFC64523CAED57C2D6D7 +DA9AC41E4F589F223C214E80140D2F65E062685D333B44C39365C1721DF60B77 +990E6B0E3EA4AB7354905C402416BC67356D485798C00DDEE17A812091590520 +FC2845FE24345017180408BB143B6B6054B947961A307A3CDD9CCD858ADFF2F3 +D3430EDB2254DCA877BA18A46D48FA1979B434DBF737ABE3AA240DFF74A2994D +B8D53B6A2A85B81E815B22BC7A61190D8A56DCDA40DABA6F0EB7C1A5549A5516 +FE816ADBEC811EA881A820BA1816E2D42C45AD4FE575551D3EB4976D5E975479 +D0A32D47D874E94A4A5AEE8BBCAD973053749AA70D03105828DF417813E61169 +BB5F6ABA5CFE500AA78582E4BE8074FEFB29EB32A8BEF9FB6FE4CBA2A6D72BE5 +05F8B488FABC424FB00EA88C43712BAEE1AC2FE75D93C2E759963962AAF81A4F +F802636AA0B493B93C2D6D39F070CB0B36776950CB2E60C437F7E32809C25F66 +CC7424AB194B88C30EADFC68E83F856A0293DB2C4749A0098EF5CF33D07DB18D +13EEA54031B24D2D5D131183F8DEA7C98417C985EF148F64A48D95DC8C1D7F8F +F0536B1B0C00A8C3BFC67E558DB07A2A9C8BF6F462E3531B6E7E3BBCEE830E9A +12A7F85D1E7EABC09221C4BF383AC8ED6BF538640B25426E59CF9060A6D40B71 +BE73C09C847786462AB9B2A5AE60F99E628DC5E83CB4F44786457C85DCC76D6C +816EBDD86013E6EEC0B9305390AC028E99E98C7DD7AFD17548F5EBB7FEC28E31 +9B2EED71BCA9E5A24380E0C4DB993A1B9E93A2DE919EE00257A682CD0F48F38E +686B0AC7F2CE64789AC368DDEF067C79A1F0CB3CFCA3BD7D7CB7A9582C6ED4FA +F3A5EFF59E995E04B6543F3A25CD2FDCD39D2C87E980C175740EF0D6805C154E +B422B9826CF396C64DA951DD3A1449CAE447BDAC920846E0CDB4DC4256B4C832 +87E907C43E933C70D04F84EECE984B7701732592BC81E7AD669E30A32F65DF87 +94AC9AC35C56F3FD5E25F67DBA459F76D2711B621D85EF0034C5F2D16F27AF13 +2CABFFDADFB87AC4FB1BABD2658CAFFBBEB290D9F62619120D0A4FE45B9EEC26 +FC2E285AED3F5FADB85F2B0D64DD278A86FD01FB80E251DFAB40A371F183FB2D +A72C7FA2176128F7A85F01343A3A5BACC7CF7ECF9C5FE98D058201B31E7F3FDB +F9CFCE3A66FA77382A43240FD80E97A933C5FE116C911D14BCCD8947B0C50C34 +799EB0A2391A8B49E29FA94EE7F4563D38C3B9A700FB608DF98D2ECF6841221C +6AC099E8318392F1F28AB7E6E97CDA9196A87B509E67BA93C74DBC84D8B72B78 +D6F5C3CA30CFE25150DA227F9DD260A57FCE041BC8DDE287FD0DBD65EC465B00 +80E564FE2967F1FCB1E072ACA9C168AA746F4F54B4A9F83381DD11EF6F8DAE6D +14077695AA1113EDBDC6B8DF4BEC621FF81A2D505CD5B7D30F90CEF1A477FF01 +BE15B018484169432E922D935E4863C66E8769651A899D5E1A1BA511CF49D211 +446546B71DDA8C2F944E66F76202EB4DC8F6CA54103DBB01CAC20CB08DC77A4D +3973E29C2DE8C858865FBBEAE5D71E81E0CCEF5FD4FFD706D7428EC33D5AF789 +C13C5AE91FD36FB215D4D9A51C96739B0DA033D83BFB812411CE25D49C19819E +533F4EB14FCAC3F746F7FFC7270E4E947AD2C5FB4447B9BA284D788C9AACCF69 +B35CD1EF290B662DD72118B0C475C2DFF997FD62E279BC0C44AE5D2F7290E4AA +E6443141D9CB366CD71374BD411C4E72B09165021AADE20E747E2CC89D8BEA12 +59EDF9CF61FC957C9DB0F1B4B3CA73B2DACF4DA0BF1E08912EB4C23C66C21447 +E22B8B8F93B89D853F6CB728111E6788BF95F969A654C9FE69F0CE3DCF436CFD +8B3B68353ED1DCD6C26DE48817E4B0F46741D0DA7695802A16442F1052C99131 +F8D7D2FC2965B90B9D9675E6F66BF502B4BA495A5899A46760B8E8E2426396FD +2BBABEA05AFFE78DAE98972BB61E07385A8566AAB160BA5E4030F1BC6DDFACAC +850354E3F98294698DA8553D2D4F40DEAFC25DDEE47C5047776AAE8AE49A0E3F +B52F4EC8D68F195AFF4C13FCED0FF91B06F6C9160F6A0BD1518CF4A2F6353357 +846DE266C22B4FCB2550C4E1CC9BF7FBD5ACCF31CF037EC4AFC8D2560D0F5FF7 +3B3F3D1E0399F7ED51C7D194EA17E298C33CFA73133A64C29F834E8684017D26 +4E9FEDE39001667895474D7649C39DAA83BA7EB97A3A5F66E7F07C9C389579E6 +E07C7B8517CFC535DB0D12B6F57A7C292582309C09E89CF4111734BAA78CAB3B +DD6B34C23235968C14851E3760940A38F367A42D48D453 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMCSC10 +%!PS-AdobeFont-1.1: CMCSC10 1.0 +%%CreationDate: 1991 Aug 18 17:46:49 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMCSC10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMCSC10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 99 /c put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 105 /i put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 115 /s put +dup 117 /u put +dup 120 /x put +readonly def +/FontBBox{14 -250 1077 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 +900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA +87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 +076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 +9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A +FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD +B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 +CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 +40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D +C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B +7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 +FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC +81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D +5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 +CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6877C1B3D2 +24030F377820DA58F4B95CFE645109F3F1B80DB5FACFD7D05AE2909EEFCF95AD +9CB286C8B6C075CA2267C101B736139863186C193E31085E7C9FD88EF8BBECE3 +933542C85309013325B4BBFE9A5B606780C8580ABDA2F5D0064EBFC23939B307 +08568C3B7F5F053BF367DEBA349FABB9F760C44D100BDEEFBB01F27BFC61FCD3 +64512116F2751A1B95D2439E266074DB3B9FC76ED319B2851588B1F38F46C8FE +040793C860F05E26700B72A766D0BF3F6F2EDEE06A26866BF0207CEF2841BCD2 +84F5873A147D5BAD18FD74DF7B77B8CF1913AD882DC1F4A94020B2A8A73237BB +222E6B78BD1C4C0975B9B6683B5DFBFA693970DD53FB5D5CA5805B7728C11D6F +92E6293F82E628C9FDD901010DEC199055B6682D6B2A688E3EE8759F7E592F54 +43E63699F1D60CD915365B85B8713DC4EB3EC4D2860880035348966F004FBE18 +9299E1DD0D491A5D542D450C8945321BFB9E823E18D1F33178BECAADD34378BF +6FDE26691802F24E43CFA4ED1FB81C824F808A049085FA95CA518D9F4EE91D78 +26A8B8B461486419D598E7E341E9D43CED2402BF225B2C75CEE127D8B8633FC3 +6F4F69DBAF7134D4F3D669B35822FA701A441E5FBA3DC1F02A00B25C583EDB52 +4D4D488C6A810128777654B956C3CCE8FFB0D1985AE2A2735BA415941D1CAD5D +62D9DBBF01CC979B8E1509F5DDD3BA6E87B14879955F978209CB398825E40199 +2B1C7D2C55251F321BAC0764D40B80D7AE1B787E5690CB5907719044B2AC832C +C002C181088BA15AEFDA44D2305E6327358D1DC1D9B93AB1802FE9F24CF49739 +9863288D0195F5610441122648F5E38208E1AE5F01D1966DE10B8AAC02EF9F2E +27D2383BC6D5BF9DA8F9018BABA01B70755FCA281588B85BB705FB7016F6D7D6 +8607BD0739433B54DFB87614A76902A3C122F39A21E80CC1970C5A6932C6046A +771484EA9BD04CF0963E1D372B456C50625807B3557384F5368C520E757716F0 +16EF17F3A58F2F7EA42C9BFE2A64AE786F49213CC47B496B8F127696EDD017A2 +A07FD72357F4D847CE1EC8103EECDE35AA194F9CE466E733F66515749B3C36DB +6F7E83B31034687CE18CBD15342723FC21689731B45C72DA278994FF8C5824A0 +EFE9F8D734D75C3C263F9D4BEACDD86406567055B1A8A5EF73ACAB4A09255E39 +BE9AD89DBF4624E686541E2FF03742C99BE71E7CE3B4756A22CA4B0121E1FC6D +D62BB37F46B6EDA0AC3669802D1DF75B0F9F61976B2FA2DFB5AE2274CF08A000 +AB716CF047D7770A76B6577C75D806D878BC185C4117FD7BBE29E767E028633D +257C34395F8988DE13F0F9083823F028E05D16BAB6B3E9002F01AD5039CA62BD +07AE9C5FA71D6F234899382F90EBCC371C5501FE01E38646BC3C734C7E2C1AA2 +11355703BE46724DD85F5DB4051F65E48A3E8DA4CF8845BB4B3F39C47000E871 +AD2FB60C3161437D8C76A10377B98456BC205F3676D02132B174AC046658D059 +5E506F3C4178C400AD4E721AD613199FD1395413EC7AE6960F96849D6A26F695 +B78395941D62A7F7B6E25CD6824E78804A8CFA780E9919BA860C2951EB88DB5B +C2F9E9AF635BD2C95C7D6AD4BA85E4B85483EEA4EF1908E3D5451AF6EE9176C2 +BA3F1622024250AC2A1F8E66811EE9C1608FDE0E91287AFBEFB43800212C90C1 +6D2D8066C742EAC7D611CB9F0590AB2AA66C17340FC81E55C339FE83B68D060B +33A10B037B3370E351168E98E9DC4E8AB2B909879566CC28DD053B6EEB04A3EE +6016A02EBB0E8D0BDB7F0B1B3BEC8C559F48448AFBBFFF5E11051516E9CB5F45 +6F38CEADF429570FB2DEC6E13CFB2A59D5FFBF0A2396FE9F7B3A0836C76B06CF +9B9D99035BFF40EA918DC4A8CBF4576809F49DF330A9F742AB2FB385C9382076 +6FA8BB32BA81FA3E57E91BB6757C6E98047E9537A0595EC0F2A9BB2D3E093294 +023360099DC1D4EBE77960AB4E26211D1A75ADE1C764E5C2E80EC234F678159E +3E64331306FB3E2BE3AE0CFEED0FC3F583E875A98694742C3DEDC35CCD9D45B5 +D4200D69F93C5B730AF952EA0DCC88EE1F6D50B9477E249C6274EA0FD849B537 +BA497FBD6617943E7BE06CAF71A0F6B13CFFBB51AEF3E042F28BFCAD6CBA2DBA +CECBDB7BB399AF5D80487592A820F82A7255B46A0D7C739CCF16B7F60B709651 +0B91A26FF4854483DEF0336B7633C1E053BA889F4306F7398D85C3EBE21A5A41 +B7DB32141ACA892DDD4C0FE0C95328A70F53DD95940017CFA865D15FB0BB281A +13E2CF735AB238D278FE175EB8B72337218B5F66B62FFD912FCCD0E180AA69D4 +23701D46D44EC2E80D3C4275DC7B5848F50682394C4E67ED98A2E6B41C348263 +EABA9705AA74CD35EC6E1D9DD55634102C6633ED9117DD472DA7F41705DC5772 +72A3C2D8BF6B308567D07153BC750C8CE867E40355C3D50747B757E52F7575DF +9B5B913AF7FC3FDBEB317DA46DB498C7C044F83E46BAA00321A84DAE2DF14604 +12031AF813C994414F098824C30FC07E9B5307EFD8D01B56481BBD2EF648A69E +7507FED42C6605B09EA047F09DFA9BE15B59B93395DF192C0FB33F6F31F325E4 +DCC9A5DFAA157D1D5B4E5BF811F6F5B0FD1E69ED7EE1A6FBC2CE14D11D6FA699 +255370376844BFF3C2BE814A1FEDD0B0854647B9B193B4984394C8602820A17C +62704CEEC824C3C745BC615C54EE5DF86EBD79E874CC3522F8B8954C8E4A6FB4 +F715EE641A3D52C06574E8D7DCFCE83F3F8809D08A3C9C70C962D33F5B3D6128 +16EF2DCD4D6DCF0DD055AEA2293E10C1B7C2399C0DE4928F0A47E0BA652943B1 +004568BBA7CE62F12C7B58966BBF7B0327481DCCFC56218E7C4B9F0761063BA3 +BEA01AD1BC99DB3C1FE550DED79B243A7A554F2B1752F18FEE94120B708FE4DB +5948387091DF4198859CF49ECAC3AB49CE2E5F0451EA4EDF9BD49633C9826026 +BC9E7E1544A0318C545ED1C37C64176504D175B83CF974B4ACC39F5790E24B11 +85F01604144C0E694DB7206941933B60651A800DF182E19C3BF2862E72F25F2F +2D9BD71056559C0FE547D0C752640DD4DC6110A849CF9557FCB0643A1EE77855 +512015F57A80140FC06B8CDEABC5580B89F9F30A489696AEF2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD +0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE +E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C +7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37 +88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6 +DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1 +AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.1: CMMI12 1.100 +%%CreationDate: 1996 Jul 27 08:57:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-30 -250 1026 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 +3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 +EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F +4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 +2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A +323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C +2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 +D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA +5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F +0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D +A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 +2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 +00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 +CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757 +99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA +C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D +5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295 +55B50047CC8911C98FE1A7BA6CDEA82D34476286E710776823690AD333DD3A49 +335002F4680DBE1C21174BF016B0DF799B01EB9D6988479A8334BBA2F8DC7146 +BC0DAE9DE3A6453B181808E68A89E0C02DAC6264D002B422EBC1CF14F65D9888 +15EE6D514D3457F7F3C6A3D17EE1DA076F73ECC392D349174DA9E4680F29CE10 +0157E42CA35F5DBFF56BFC3AA07E61A78DBE882C5AB388220C19750D3643E7C8 +23D6673027CE568A4ACCE1D12B1D9E5A43507F4AF9BC873237F65A6B95078DD2 +378007CF0F0DE7CCEF760E19D6D1D7B412EC5D4972 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 13 /circlecopyrt put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8BFEF75B4DEFAF34B44B356A516B765AFCDD3F5475B1F928731D09D2170 +B97E40F12CCEDF4F6BB3756C4734F6E98D74B7E942A954B1BAAB83D4AD727FF6 +DF6DC50B2223BCB5568A73A112E4860AD490554E64E780073FF3399CB4688D33 +9E8829667CD6EAEF25E0C7D2D44F2BBFA40E999325F9561514844221B50BC8FC +4C7AD68CA7220D69125C2AF06849A3E068D18733276F0C0A6A2936D3C2C87CDE +59CD1AF148C44F85784A5DAD569F5FF53C061056C067CE29AEF1E3BD1FD8B0B8 +71A0A638CDAC6AEEDBD5337D4683C084BB60B1859E600F59CB4E19C5FC5C6327 +EC544A68134496A9BD0B87D83AF6FDA3CB62FBF0B54FACE1F0E6A2D84B467AFF +0F62DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258431 52099146 1000 600 600 (readline.dvi) +@start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 133[34 +41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 1[21 43 +38 23 34 43 34 43 38 39[38 38 38 38 38 38 38 38 38 38 +2[26 21 30[43 43 12[{}39 74.7198 /CMR9 rf /Fc 134[39 +39 2[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 19[39 +27[39 39 2[39 45[{}18 74.7198 /CMSLTT10 rf /Fd 167[62 +3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 +83.022 /CMR10 rf /Fe 129[39 39 39 39 39 39 39 39 39 39 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 +39 39 39 39 1[39 39 39 1[39 39 39 39 39 39 39 39 39 39 +39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 +39 39 39 39 3[39 1[39 39 39 39 39 39 39 39 39 39 39 39 +39 39 39 39 1[39 39 39 33[{}86 74.7198 /CMTT9 rf /Ff +214[35 35 40[{}2 90.9091 /CMSS10 rf /Fg 133[52 52 52 +52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 +52 52 52 52 52 1[52 18[52 52 1[52 2[52 52 26[52 42[{}32 +99.6264 /CMTT10 rf /Fh 134[65 65 89 65 68 48 48 50 1[68 +61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 7[93 1[127 +93 94 85 68 92 3[96 116 74 96 1[46 96 1[77 81 1[89 87 +93 7[61 61 61 61 61 61 61 61 61 61 1[34 46[{}52 109.091 +/CMBX12 rf /Fi 134[48 48 66 48 51 35 36 36 48 51 45 51 +76 25 48 1[25 51 45 28 40 51 40 51 45 9[93 1[68 66 51 +67 1[62 71 68 83 57 71 1[33 68 1[59 62 69 66 64 68 15[45 +45 1[25 30 25 1[45 28[51 51 12[{}51 90.9091 /CMSL10 rf +/Fj 134[44 1[60 42 49 30 37 38 1[46 46 51 74 23 2[28 +1[42 1[42 46 42 1[46 84[51 12[{}19 90.9091 /CMTI10 rf +/Fk 134[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 1[48 48 48 48 48 48 48 1[48 2[48 14[48 48 1[48 +1[48 2[48 48 48 17[48 48 2[48 5[48 39[{}37 90.9091 /CMSLTT10 +rf /Fl 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 +1[56 97[{}12 90.9091 /CMCSC10 rf /Fm 197[25 58[{}1 90.9091 +/CMMI10 rf /Fn 197[33 58[{}1 119.552 /CMMI12 rf /Fo 135[85 +117 1[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 +90 72 90 78 10[122 124 112 1[120 1[110 1[126 1[97 2[60 +1[127 101 106 124 117 1[122 14[81 81 49[{}36 143.462 +/CMBX12 rf /Fp 242[91 13[{}1 90.9091 /CMSY10 rf /Fq 134[71 +71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 +61 75 60 75 65 7[102 1[139 102 103 94 75 100 101 92 101 +105 128 81 105 1[50 105 106 85 88 103 97 96 102 6[37 +1[67 67 67 67 67 67 67 67 2[37 1[37 44[{}56 119.552 /CMBX12 +rf /Fr 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 +48 1[48 48 1[48 48 1[48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 33[{}89 90.9091 /CMTT10 rf /Fs 131[91 +45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 +25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 +68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 +69 66 64 68 5[25 25 45 45 45 45 45 45 45 45 45 45 45 +25 30 25 2[35 35 25 2[45 1[45 19[76 51 51 53 11[{}83 +90.9091 /CMR10 rf /Ft 134[102 6[79 3[108 1[54 2[54 3[88 +108 1[108 94 11[149 2[144 3[151 1[116 4[152 71[{}14 172.154 +/CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop 150 1318 a Ft(GNU)65 b(Readline)g(Library)p +150 1418 3600 34 v 1873 1515 a Fs(Edition)30 b(6.2,)i(for)e +Fr(Readline)e(Library)h Fs(V)-8 b(ersion)31 b(6.2.)3118 +1623 y(Septem)m(b)s(er)f(2010)150 4935 y Fq(Chet)45 b(Ramey)-11 +b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 +5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) +-11 b(oundation)p 150 5141 3600 17 v eop end +%%Page: 2 2 +TeXDict begin 2 1 bop 150 3024 a Fs(This)24 b(man)m(ual)h(describ)s(es) +g(the)g(GNU)g(Readline)h(Library)e(\(v)m(ersion)i(6.2,)h(Septem)m(b)s +(er)d(6)i(2010\),)i(a)d(library)150 3133 y(whic)m(h)39 +b(aids)g(in)g(the)g(consistency)h(of)g(user)e(in)m(terface)j(across)f +(discrete)g(programs)e(whic)m(h)h(pro)m(vide)h(a)150 +3243 y(command)30 b(line)h(in)m(terface.)150 3377 y(Cop)m(yrigh)m(t)602 +3374 y(c)577 3377 y Fp(\015)f Fs(1988{2011)35 b(F)-8 +b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)150 +3512 y(P)m(ermission)h(is)h(gran)m(ted)g(to)f(mak)m(e)i(and)d +(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g(man)m(ual)h(pro)m +(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f(and)f(this)g(p)s +(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g(copies.)390 +3756 y(P)m(ermission)k(is)h(gran)m(ted)f(to)h(cop)m(y)-8 +b(,)38 b(distribute)d(and/or)g(mo)s(dify)f(this)h(do)s(cumen)m(t)g +(under)390 3866 y(the)j(terms)g(of)g(the)g(GNU)h(F)-8 +b(ree)39 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)39 +b(1.3)g(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)28 +b(published)d(b)m(y)j(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8 +b(oundation;)30 b(with)d(no)g(In)m(v)-5 b(arian)m(t)28 +b(Sections,)390 4085 y(with)i(the)h(F)-8 b(ron)m(t-Co)m(v)m(er)33 +b(texts)e(b)s(eing)g(\\A)g(GNU)g(Man)m(ual",)h(and)e(with)g(the)h(Bac)m +(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)f(\(a\))h(b)s(elo)m +(w.)47 b(A)33 b(cop)m(y)g(of)f(the)h(license)g(is)g(included)e(in)h +(the)h(section)g(en)m(titled)390 4304 y(\\GNU)e(F)-8 +b(ree)32 b(Do)s(cumen)m(tation)g(License".)390 4438 y(\(a\))f(The)f +(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)31 b(is:)41 +b(Y)-8 b(ou)31 b(are)f(free)h(to)f(cop)m(y)h(and)f(mo)s(dify)f(this)h +(GNU)390 4548 y(man)m(ual.)41 b(Buying)30 b(copies)h(from)e(GNU)i +(Press)f(supp)s(orts)e(the)i(FSF)g(in)g(dev)m(eloping)h(GNU)390 +4658 y(and)f(promoting)g(soft)m(w)m(are)i(freedom.")150 +4902 y(Published)d(b)m(y)h(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 +b(oundation)150 5011 y(59)31 b(T)-8 b(emple)31 b(Place,)h(Suite)e(330,) +150 5121 y(Boston,)i(MA)e(02111-1307)150 5230 y(USA)p +eop end +%%Page: -1 3 +TeXDict begin -1 2 bop 3725 -116 a Fs(i)150 299 y Fo(T)-13 +b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fq(1)135 b(Command)45 +b(Line)g(Editing)35 b Fn(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)79 +b Fq(1)275 778 y Fs(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f +(Editing)9 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)39 b Fs(1)275 888 y(1.2)92 b(Readline)31 +b(In)m(teraction)11 b Fm(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 +b Fs(1)399 997 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)9 +b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)40 b Fs(1)399 1107 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i +(Commands)10 b Fm(:)k(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)40 +b Fs(2)399 1216 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)21 +b Fm(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 +b Fs(2)399 1326 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)14 +b Fm(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)44 b Fs(3)399 1435 y(1.2.5)93 b(Searc)m(hing)31 +b(for)f(Commands)f(in)h(the)h(History)11 b Fm(:)16 b(:)g(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)42 +b Fs(3)275 1545 y(1.3)92 b(Readline)31 b(Init)f(File)c +Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 b +Fs(4)399 1655 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)17 +b Fm(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 +b Fs(4)399 1764 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)e +Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)58 +b Fs(10)399 1874 y(1.3.3)93 b(Sample)30 b(Init)g(File)14 +b Fm(:)j(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)44 b Fs(11)275 1983 y(1.4)92 +b(Bindable)30 b(Readline)h(Commands)14 b Fm(:)g(:)i(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fs(14)399 2093 y(1.4.1)93 +b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)10 b Fm(:)17 +b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 +b Fs(14)399 2203 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 +b(Manipulating)g(The)f(History)20 b Fm(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fs(14)399 2312 y(1.4.3)93 +b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)25 +b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)53 b Fs(16)399 +2422 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)26 +b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)55 b Fs(17)399 2531 y(1.4.5)93 b(Sp)s(ecifying)30 +b(Numeric)g(Argumen)m(ts)19 b Fm(:)d(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)49 +b Fs(18)399 2641 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 +b(or)31 b(Y)-8 b(ou)14 b Fm(:)i(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 +b Fs(18)399 2751 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)23 +b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)53 b Fs(19)399 2860 y(1.4.8)93 +b(Some)30 b(Miscellaneous)j(Commands)26 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)58 b Fs(19)275 2970 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)22 +b Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)52 b Fs(21)150 +3212 y Fq(2)135 b(Programming)46 b(with)f(GNU)g(Readline)17 +b Fn(:)k(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)62 b Fq(22)275 +3349 y Fs(2.1)92 b(Basic)31 b(Beha)m(vior)15 b Fm(:)i(:)e(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)44 b Fs(22)275 3459 y(2.2)92 +b(Custom)29 b(F)-8 b(unctions)10 b Fm(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)40 b Fs(23)399 3568 y(2.2.1)93 b(Readline)31 +b(T)m(yp)s(edefs)9 b Fm(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fs(24)399 +3678 y(2.2.2)93 b(W)-8 b(riting)31 b(a)g(New)g(F)-8 b(unction)15 +b Fm(:)h(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)45 +b Fs(24)275 3787 y(2.3)92 b(Readline)31 b(V)-8 b(ariables)23 +b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)53 b Fs(25)275 +3897 y(2.4)92 b(Readline)31 b(Con)m(v)m(enience)g(F)-8 +b(unctions)14 b Fm(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +43 b Fs(29)399 4007 y(2.4.1)93 b(Naming)31 b(a)g(F)-8 +b(unction)13 b Fm(:)j(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)43 b Fs(29)399 4116 y(2.4.2)93 +b(Selecting)32 b(a)e(Keymap)21 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b +Fs(30)399 4226 y(2.4.3)93 b(Binding)30 b(Keys)c Fm(:)16 +b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Fs(31)399 4335 y(2.4.4)93 +b(Asso)s(ciating)32 b(F)-8 b(unction)31 b(Names)g(and)e(Bindings)18 +b Fm(:)d(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)47 +b Fs(32)399 4445 y(2.4.5)93 b(Allo)m(wing)32 b(Undoing)19 +b Fm(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)48 b Fs(33)399 4555 y(2.4.6)93 +b(Redispla)m(y)21 b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h +(:)f(:)51 b Fs(34)399 4664 y(2.4.7)93 b(Mo)s(difying)30 +b(T)-8 b(ext)28 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)57 b +Fs(35)399 4774 y(2.4.8)93 b(Character)31 b(Input)13 b +Fm(:)h(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)43 b Fs(36)399 4883 y(2.4.9)93 +b(T)-8 b(erminal)30 b(Managemen)m(t)8 b Fm(:)18 b(:)e(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38 b +Fs(36)399 4993 y(2.4.10)93 b(Utilit)m(y)33 b(F)-8 b(unctions)15 +b Fm(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)45 b Fs(37)399 5103 y(2.4.11)93 +b(Miscellaneous)33 b(F)-8 b(unctions)15 b Fm(:)g(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)44 b Fs(38)399 5212 +y(2.4.12)93 b(Alternate)32 b(In)m(terface)17 b Fm(:)g(:)e(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)47 +b Fs(39)399 5322 y(2.4.13)93 b(A)31 b(Readline)g(Example)24 +b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)53 b Fs(40)p eop end +%%Page: -2 4 +TeXDict begin -2 3 bop 3699 -116 a Fs(ii)275 83 y(2.5)92 +b(Readline)31 b(Signal)f(Handling)10 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)39 +b Fs(41)275 193 y(2.6)92 b(Custom)29 b(Completers)18 +b Fm(:)e(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)48 b Fs(43)399 302 +y(2.6.1)93 b(Ho)m(w)31 b(Completing)g(W)-8 b(orks)24 +b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +53 b Fs(43)399 412 y(2.6.2)93 b(Completion)31 b(F)-8 +b(unctions)19 b Fm(:)d(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)g(:)49 b Fs(44)399 521 y(2.6.3)93 b(Completion)31 +b(V)-8 b(ariables)9 b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fs(45)399 631 y(2.6.4)93 +b(A)30 b(Short)g(Completion)h(Example)c Fm(:)15 b(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)56 b Fs(49)150 873 y Fq(App)t(endix)44 +b(A)160 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)446 +1006 y Fn(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 +b Fq(58)150 1276 y(Concept)45 b(Index)18 b Fn(:)i(:)f(:)g(:)h(:)f(:)h +(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)63 +b Fq(66)150 1546 y(F)-11 b(unction)44 b(and)h(V)-11 b(ariable)45 +b(Index)29 b Fn(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)73 b Fq(67)p eop end +%%Page: 1 5 +TeXDict begin 1 4 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(1)150 299 y Fo(1)80 +b(Command)54 b(Line)f(Editing)150 532 y Fs(This)30 b(c)m(hapter)h +(describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fl(gnu)g +Fs(command)h(line)f(editing)h(in)m(terface.)150 764 y +Fq(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 +923 y Fs(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h +(notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 +1058 y(The)35 b(text)i Fk(C-k)f Fs(is)g(read)g(as)h(`Con)m(trol-K')g +(and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h +Fr(k)150 1167 y Fs(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) +g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fk(M-k)e +Fs(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) +h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h +(ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fr(k)g +Fs(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s +(eled)f Fr(ALT)150 1521 y Fs(on)c(man)m(y)h(k)m(eyb)s(oards.)40 +b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g +Fr(ALT)e Fs(\(usually)i(to)g(either)g(side)g(of)g(the)150 +1630 y(space)h(bar\),)f(the)g Fr(ALT)f Fs(on)h(the)g(left)h(side)f(is)g +(generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 +b(.)42 b(The)29 b Fr(ALT)g Fs(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h +(ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i +(k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 +1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f +(t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1984 y(If)23 +b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fr(ALT)e +Fs(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g +(Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2093 +y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g +Fr(ESC)e Fj(\014rst)p Fs(,)j(and)e(then)g(t)m(yping)h +Fr(k)p Fs(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 +2203 y(as)j Fi(metafying)39 b Fs(the)30 b Fr(k)g Fs(k)m(ey)-8 +b(.)275 2337 y(The)39 b(text)j Fk(M-C-k)d Fs(is)h(read)g(as)h +(`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i +(pro)s(duced)d(b)m(y)150 2447 y Fi(metafying)g Fk(C-k)p +Fs(.)275 2581 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g +(their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 +b Fr(DEL)p Fs(,)f Fr(ESC)p Fs(,)g Fr(LFD)p Fs(,)g Fr(SPC)p +Fs(,)g Fr(RET)p Fs(,)150 2690 y(and)d Fr(TAB)f Fs(all)j(stand)e(for)g +(themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) +h(\014le)f(\(see)i(Section)f(1.3)150 2800 y([Readline)c(Init)e(File],)j +(page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f +Fr(LFD)f Fs(k)m(ey)-8 b(,)31 b(t)m(yping)g Fr(C-j)d Fs(will)i(pro)s +(duce)f(the)150 2910 y(desired)h(c)m(haracter.)42 b(The)30 +b Fr(RET)g Fs(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i +Fr(Return)e Fs(or)h Fr(Enter)f Fs(on)h(some)h(k)m(eyb)s(oards.)150 +3142 y Fq(1.2)68 b(Readline)47 b(In)l(teraction)150 3301 +y Fs(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) +m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g +(that)f(the)150 3411 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g +(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g +(a)g(set)g(of)f(commands)g(for)150 3520 y(manipulating)e(the)g(text)h +(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h +(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 +3630 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 +b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m +(ou)h(mo)m(v)m(e)g(the)g(cursor)150 3739 y(to)35 b(the)f(place)i(that)e +(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g +(the)f(corrections.)54 b(Then,)150 3849 y(when)24 b(y)m(ou)h(are)g +(satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g +Fr(RET)p Fs(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e +(at)h(the)h(end)150 3959 y(of)33 b(the)h(line)g(to)g(press)e +Fr(RET)p Fs(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g +(of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4068 +y(within)c(the)g(line.)150 4267 y Fh(1.2.1)63 b(Readline)40 +b(Bare)h(Essen)m(tials)150 4414 y Fs(In)31 b(order)h(to)h(en)m(ter)g(c) +m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 +b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 +4523 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) +m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 +b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4633 y(c)m(haracter,)f(y)m(ou)f(can)g +(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f +(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4767 +y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g +(and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) +m(yp)s(ed)150 4877 y(sev)m(eral)e(other)f(c)m(haracters.)42 +b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h +Fk(C-b)d Fs(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 +4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 +b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g +(with)f Fk(C-f)p Fs(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) +h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m +(haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h +(`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h +(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 +5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m +(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p +eop end +%%Page: 2 6 +TeXDict begin 2 5 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 +b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g +(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g +(bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g +(an)f(input)f(line)i(follo)m(ws.)150 562 y Fk(C-b)336 +b Fs(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 +715 y Fk(C-f)336 b Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) +150 869 y Fr(DEL)e Fs(or)i Fr(Backspace)630 978 y Fs(Delete)i(the)d(c)m +(haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 +1132 y Fk(C-d)336 b Fs(Delete)33 b(the)d(c)m(haracter)i(underneath)d +(the)i(cursor.)150 1285 y(Prin)m(ting)g(c)m(haracters)630 +1394 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g +(cursor.)150 1548 y Fk(C-_)e Fs(or)i Fk(C-x)e(C-u)630 +1657 y Fs(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 +b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g +(empt)m(y)630 1767 y(line.)150 1920 y(\(Dep)s(ending)29 +b(on)h(y)m(our)f(con\014guration,)i(the)e Fr(Backspace)e +Fs(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) +150 2030 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g +Fr(DEL)g Fs(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i +(underneath)d(the)h(cursor,)i(lik)m(e)150 2140 y Fk(C-d)p +Fs(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g +(the)f(cursor.\))150 2333 y Fh(1.2.2)63 b(Readline)40 +b(Mo)m(v)m(emen)m(t)h(Commands)150 2480 y Fs(The)27 b(ab)s(o)m(v)m(e)i +(table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f +(y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 +2589 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m +(enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g +(in)h(addition)150 2699 y(to)j Fk(C-b)p Fs(,)f Fk(C-f)p +Fs(,)g Fk(C-d)p Fs(,)h(and)e Fr(DEL)p Fs(.)54 b(Here)35 +b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h +(the)150 2808 y(line.)150 2962 y Fk(C-a)336 b Fs(Mo)m(v)m(e)32 +b(to)g(the)e(start)h(of)g(the)f(line.)150 3115 y Fk(C-e)336 +b Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +3269 y Fk(M-f)336 b Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f +(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) +150 3422 y Fk(M-b)336 b Fs(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m +(ord.)150 3575 y Fk(C-l)336 b Fs(Clear)31 b(the)f(screen,)h(reprin)m +(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 +3729 y(Notice)c(ho)m(w)f Fk(C-f)e Fs(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m +(haracter,)j(while)d Fk(M-f)e Fs(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m +(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3838 y(con)m(v)m(en)m(tion)32 +b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m +(haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 +3948 y(w)m(ords.)150 4141 y Fh(1.2.3)63 b(Readline)40 +b(Killing)i(Commands)150 4288 y Fi(Killing)35 b Fs(text)28 +b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h +(sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 +4398 y(b)m(y)g Fi(y)m(anking)35 b Fs(\(re-inserting\))28 +b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 +b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 +4507 y(`kill')32 b(and)d(`y)m(ank'.\))275 4639 y(If)g(the)i +(description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g +(text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 +4748 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g +(\(or)g(the)f(same\))h(place)h(later.)275 4880 y(When)23 +b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i +(in)e(a)g Fi(kill-ring)p Fs(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h +(consecutiv)m(e)150 4989 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g +(killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f +(bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5099 +y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g +(that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f +(is)h(a)m(v)-5 b(ailable)150 5208 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) +m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)275 +5340 y(Here)f(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)p +eop end +%%Page: 3 7 +TeXDict begin 3 6 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(3)150 299 y Fk(C-k)336 +b Fs(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s +(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 461 +y Fk(M-d)336 b Fs(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h +(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,) +g(to)g(the)630 570 y(end)j(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) +f(b)m(y)g Fk(M-f)p Fs(.)150 732 y Fk(M-DEL)240 b Fs(Kill)31 +b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) +h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 +842 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 +b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m +(y)630 951 y Fk(M-b)p Fs(.)150 1113 y Fk(C-w)336 b Fs(Kill)35 +b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 +b(This)34 b(is)h(di\013eren)m(t)h(than)e Fk(M-DEL)630 +1223 y Fs(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 +1386 y(Here)42 b(is)f(ho)m(w)h(to)g Fi(y)m(ank)47 b Fs(the)42 +b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 +b(means)e(to)h(cop)m(y)h(the)e(most-)150 1496 y(recen)m(tly-killed)33 +b(text)e(from)f(the)g(kill)i(bu\013er.)150 1659 y Fk(C-y)336 +b Fs(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m +(k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 +1821 y Fk(M-y)336 b Fs(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h +(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h +(the)g(prior)630 1930 y(command)30 b(is)h Fk(C-y)e Fs(or)h +Fk(M-y)p Fs(.)150 2132 y Fh(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 +2279 y Fs(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f +(Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 +2389 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g +Fj(sign)47 b Fs(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m +(t.)71 b(If)40 b(y)m(ou)150 2498 y(pass)33 b(a)h(negativ)m(e)i(argumen) +m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m +(ard)f(direction,)i(that)150 2608 y(command)g(will)h(act)g(in)f(a)h +(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g +(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2717 y(the)31 +b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fr(M--)f(C-k)p +Fs('.)275 2854 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g +(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i +(digits)e(b)s(efore)150 2964 y(the)j(command.)42 b(If)30 +b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h +(\(`)p Fr(-)p Fs('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 +3073 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m +(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h +(started,)i(y)m(ou)150 3183 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f +(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 +b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fk(C-d)150 +3293 y Fs(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f +(t)m(yp)s(e)h(`)p Fr(M-1)29 b(0)h(C-d)p Fs(',)39 b(whic)m(h)e(will)h +(delete)h(the)e(next)h(ten)150 3402 y(c)m(haracters)32 +b(on)e(the)h(input)e(line.)150 3604 y Fh(1.2.5)63 b(Searc)m(hing)40 +b(for)i(Commands)g(in)f(the)g(History)150 3751 y Fs(Readline)22 +b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g +(command)h(history)f(for)g(lines)g(con)m(taining)150 +3861 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 +b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fi(incremen)m(tal)35 +b Fs(and)30 b Fi(non-incremen)m(tal)p Fs(.)275 3998 y(Incremen)m(tal)c +(searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e +(t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 +4107 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s +(ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i +(history)150 4217 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g +(far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g +(man)m(y)g(c)m(haracters)i(as)150 4326 y(needed)i(to)i(\014nd)d(the)i +(desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 +b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i +(particular)150 4436 y(string,)g(t)m(yp)s(e)f Fk(C-r)p +Fs(.)40 b(T)m(yping)29 b Fk(C-s)g Fs(searc)m(hes)h(forw)m(ard)f +(through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m +(t)150 4545 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g +Fr(isearch-terminators)33 b Fs(v)-5 b(ariable)39 b(are)f(used)f(to)i +(terminate)g(an)f(incremen)m(tal)150 4655 y(searc)m(h.)71 +b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i +(a)f(v)-5 b(alue,)44 b(the)c Fr(ESC)g Fs(and)f Fk(C-J)h +Fs(c)m(haracters)i(will)150 4765 y(terminate)h(an)g(incremen)m(tal)g +(searc)m(h.)78 b Fk(C-g)41 b Fs(will)i(ab)s(ort)f(an)g(incremen)m(tal)i +(searc)m(h)f(and)f(restore)h(the)150 4874 y(original)30 +b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f +(history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 +4984 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5121 +y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h +(history)g(list,)h(t)m(yp)s(e)g Fk(C-r)e Fs(or)h Fk(C-s)f +Fs(as)h(appropriate.)43 b(This)150 5230 y(will)26 b(searc)m(h)h(bac)m +(kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g +(en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150 +5340 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i +(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h +(the)p eop end +%%Page: 4 8 +TeXDict begin 4 7 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(searc)m(h)26 +b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f +Fr(RET)f Fs(will)g(terminate)i(the)f(searc)m(h)g(and)e(accept)150 +408 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e(command)g(from)g +(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will) +150 518 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g +(found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275 +647 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g +(searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fk(C-r)p +Fs(s)c(are)i(t)m(yp)s(ed)g(without)150 757 y(an)m(y)i(in)m(terv)m +(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h +(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150 +866 y(used.)275 995 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the) +h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h(searc)m +(h)f(for)150 1105 y(matc)m(hing)d(history)e(lines.)78 +b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g +(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1214 y(con)m(ten)m(ts)32 +b(of)f(the)f(curren)m(t)g(line.)150 1436 y Fq(1.3)68 +b(Readline)47 b(Init)e(File)150 1595 y Fs(Although)f(the)g(Readline)g +(library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m +(eybindings)f(installed)g(b)m(y)150 1705 y(default,)26 +b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) +m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 +1814 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an) +g Fi(inputrc)49 b Fs(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g +(home)150 1924 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h +(\014le)f(is)g(tak)m(en)i(from)e(the)g(v)-5 b(alue)24 +b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b +Fr(INPUTRC)p Fs(.)150 2033 y(If)34 b(that)g(v)-5 b(ariable)35 +b(is)g(unset,)g(the)f(default)g(is)g(`)p Fr(~/.inputrc)p +Fs('.)50 b(If)34 b(that)h(\014le)f(do)s(es)g(not)g(exist)h(or)f(cannot) +150 2143 y(b)s(e)c(read,)g(the)h(ultimate)g(default)g(is)f(`)p +Fr(/etc/inputrc)p Fs('.)275 2272 y(When)f(a)h(program)f(whic)m(h)h +(uses)f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f +(is)h(read,)g(and)f(the)150 2381 y(k)m(ey)i(bindings)e(are)i(set.)275 +2510 y(In)26 b(addition,)i(the)f Fr(C-x)i(C-r)d Fs(command)h(re-reads)g +(this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m +(hanges)150 2620 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g +(it.)150 2808 y Fh(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 +2955 y Fs(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) +m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 +b(lines)h(are)150 3065 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h +(a)g(`)p Fr(#)p Fs(')g(are)h(commen)m(ts.)73 b(Lines)41 +b(b)s(eginning)f(with)g(a)i(`)p Fr($)p Fs(')f(indicate)150 +3174 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h +([Conditional)f(Init)f(Constructs],)j(page)f(10\).)74 +b(Other)150 3284 y(lines)31 b(denote)g(v)-5 b(ariable)31 +b(settings)g(and)f(k)m(ey)h(bindings.)150 3432 y(V)-8 +b(ariable)32 b(Settings)630 3542 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e +(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h +(the)g(v)-5 b(alues)41 b(of)630 3651 y(v)-5 b(ariables)34 +b(in)f(Readline)i(using)e(the)g Fr(set)g Fs(command)g(within)g(the)h +(init)g(\014le.)50 b(The)33 b(syn)m(tax)630 3761 y(is)d(simple:)870 +3890 y Fr(set)47 b Fk(variable)56 b(value)630 4019 y +Fs(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f +(the)g(default)h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 +4128 y(use)k Fr(vi)g Fs(line)h(editing)g(commands:)870 +4257 y Fr(set)47 b(editing-mode)d(vi)630 4386 y Fs(V)-8 +b(ariable)36 b(names)f(and)g(v)-5 b(alues,)36 b(where)f(appropriate,)h +(are)g(recognized)g(without)f(regard)630 4496 y(to)c(case.)42 +b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 +4624 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f +(set)i(to)g(on)f(or)g(o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the) +g(v)-5 b(alue)26 b(is)630 4734 y(n)m(ull)e(or)g(empt)m(y)-8 +b(,)27 b Fi(on)d Fs(\(case-insensitiv)m(e\),)29 b(or)24 +b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) +-5 b(ariable)630 4844 y(b)s(eing)30 b(set)h(to)g(o\013.)630 +4973 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m +(hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 +5121 y Fr(bell-style)1110 5230 y Fs(Con)m(trols)44 b(what)g(happ)s(ens) +e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h(termi-)1110 +5340 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p +Fr(none)p Fs(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61 +b(If)36 b(set)i(to)p eop end +%%Page: 5 9 +TeXDict begin 5 8 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(5)1110 299 y(`)p +Fr(visible)p Fs(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g +(one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 +408 y(`)p Fr(audible)p Fs(')j(\(the)i(default\),)i(Readline)e(attempts) +g(to)h(ring)e(the)g(terminal's)1110 518 y(b)s(ell.)630 +664 y Fr(bind-tty-special-chars)1110 774 y Fs(If)45 b(set)h(to)f(`)p +Fr(on)p Fs(',)50 b(Readline)45 b(attempts)i(to)f(bind)d(the)j(con)m +(trol)g(c)m(haracters)1110 883 y(treated)36 b(sp)s(ecially)h(b)m(y)e +(the)h(k)m(ernel's)g(terminal)g(driv)m(er)f(to)h(their)f(Readline)1110 +993 y(equiv)-5 b(alen)m(ts.)630 1139 y Fr(comment-begin)1110 +1249 y Fs(The)29 b(string)g(to)h(insert)f(at)h(the)f(b)s(eginning)g(of) +g(the)h(line)f(when)f(the)i Fr(insert-)1110 1358 y(comment)e +Fs(command)j(is)f(executed.)42 b(The)29 b(default)i(v)-5 +b(alue)31 b(is)f Fr("#")p Fs(.)630 1504 y Fr(completion-display-width) +1110 1614 y Fs(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) +g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 1724 +y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 +b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 +1833 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 +b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 +1943 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e +(line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 +2089 y Fr(completion-ignore-case)1110 2198 y Fs(If)d(set)h(to)g(`)p +Fr(on)p Fs(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i +(and)e(completion)1110 2308 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) +40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fr(off)p +Fs('.)630 2454 y Fr(completion-map-case)1110 2564 y Fs(If)22 +b(set)g(to)h(`)p Fr(on)p Fs(',)h(and)e Fi(completion-ignore-case)31 +b Fs(is)22 b(enabled,)i(Readline)f(treats)1110 2673 y(h)m(yphens)29 +b(\(`)p Fr(-)p Fs('\))j(and)e(underscores)g(\(`)p Fr(_)p +Fs('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 +2783 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e +(completion.)630 2929 y Fr(completion-prefix-displa)o(y-le)o(ngth)1110 +3039 y Fs(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h +(pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 3148 +y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s +(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 3258 +y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e +(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 3367 +y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) +f(completions.)630 3513 y Fr(completion-query-items)1110 +3623 y Fs(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h +(that)g(determines)f(when)f(the)i(user)1110 3733 y(is)i(ask)m(ed)h +(whether)f(the)h(list)g(of)f(p)s(ossibilities)h(should)e(b)s(e)h +(displa)m(y)m(ed.)41 b(If)29 b(the)1110 3842 y(n)m(um)m(b)s(er)d(of)h +(p)s(ossible)f(completions)i(is)f(greater)h(than)e(this)h(v)-5 +b(alue,)28 b(Readline)1110 3952 y(will)f(ask)g(the)f(user)g(whether)g +(or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 +4061 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 +b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5 +b(alue)1110 4171 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40 +b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110 +4281 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g +Fr(100)p Fs(.)630 4427 y Fr(convert-meta)1110 4536 y +Fs(If)22 b(set)g(to)h(`)p Fr(on)p Fs(',)h(Readline)f(will)f(con)m(v)m +(ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 +4646 y(to)33 b(an)e Fl(asci)r(i)h Fs(k)m(ey)h(sequence)f(b)m(y)g +(stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 +4756 y(an)24 b Fr(ESC)g Fs(c)m(haracter,)j(con)m(v)m(erting)f(them)f +(to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 4865 +y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fr(on)p +Fs('.)630 5011 y Fr(disable-completion)1110 5121 y Fs(If)36 +b(set)h(to)h(`)p Fr(On)p Fs(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h +(completion.)60 b(Completion)1110 5230 y(c)m(haracters)28 +b(will)e(b)s(e)f(inserted)h(in)m(to)h(the)g(line)f(as)g(if)g(they)h +(had)e(b)s(een)g(mapp)s(ed)1110 5340 y(to)31 b Fr(self-insert)p +Fs(.)38 b(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)p +eop end +%%Page: 6 10 +TeXDict begin 6 9 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(6)630 299 y Fr(editing-mode)1110 +408 y Fs(The)28 b Fr(editing-mode)e Fs(v)-5 b(ariable)29 +b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 +518 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f +(up)f(in)h(Emacs)g(editing)h(mo)s(de,)1110 628 y(where)j(the)g(k)m +(eystrok)m(es)i(are)e(most)h(similar)f(to)h(Emacs.)40 +b(This)29 b(v)-5 b(ariable)30 b(can)1110 737 y(b)s(e)g(set)h(to)g +(either)g(`)p Fr(emacs)p Fs(')e(or)h(`)p Fr(vi)p Fs('.)630 +883 y Fr(echo-control-characters)1110 993 y Fs(When)g(set)h(to)g(`)p +Fr(on)p Fs(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g +(supp)s(ort)1110 1103 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m +(haracter)h(corresp)s(onding)d(to)j(a)f(signal)g(generated)1110 +1212 y(from)e(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p +Fr(on)p Fs('.)630 1358 y Fr(enable-keypad)1110 1468 y +Fs(When)23 b(set)h(to)g(`)p Fr(on)p Fs(',)h(Readline)f(will)g(try)f(to) +h(enable)g(the)f(application)i(k)m(eypad)1110 1577 y(when)h(it)h(is)f +(called.)41 b(Some)27 b(systems)f(need)h(this)f(to)h(enable)g(the)g +(arro)m(w)g(k)m(eys.)1110 1687 y(The)j(default)g(is)h(`)p +Fr(off)p Fs('.)630 1833 y Fr(enable-meta-key)1110 1943 +y Fs(When)40 b(set)g(to)g(`)p Fr(on)p Fs(',)j(Readline)d(will)g(try)g +(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 2052 +y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g +(called.)76 b(On)41 b(man)m(y)1110 2162 y(terminals,)c(the)e(meta)h(k)m +(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 +b(The)1110 2271 y(default)31 b(is)f(`)p Fr(on)p Fs('.)630 +2418 y Fr(expand-tilde)1110 2527 y Fs(If)d(set)h(to)h(`)p +Fr(on)p Fs(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h +(Readline)h(attempts)1110 2637 y(w)m(ord)i(completion.)42 +b(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)630 2783 +y Fr(history-preserve-point)1110 2892 y Fs(If)41 b(set)h(to)h(`)p +Fr(on)p Fs(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f +(p)s(oin)m(t)f(\(the)1110 3002 y(curren)m(t)35 b(cursor)g(p)s +(osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g +(line)1110 3112 y(retriev)m(ed)h(with)f Fr(previous-history)c +Fs(or)37 b Fr(next-history)p Fs(.)55 b(The)36 b(default)1110 +3221 y(is)30 b(`)p Fr(off)p Fs('.)630 3367 y Fr(history-size)1110 +3477 y Fs(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g +(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 3587 +y(list.)53 b(If)34 b(set)h(to)g(zero,)i(the)d(n)m(um)m(b)s(er)g(of)g +(en)m(tries)h(in)f(the)h(history)f(list)h(is)g(not)1110 +3696 y(limited.)630 3842 y Fr(horizontal-scroll-mode)1110 +3952 y Fs(This)g(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f +(`)p Fr(on)p Fs(')g(or)g(`)p Fr(off)p Fs('.)57 b(Setting)36 +b(it)g(to)h(`)p Fr(on)p Fs(')1110 4061 y(means)26 b(that)h(the)f(text)h +(of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m +(tally)1110 4171 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i +(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 4281 +y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g +(line.)39 b(By)27 b(default,)g(this)1110 4390 y(v)-5 +b(ariable)31 b(is)g(set)f(to)i(`)p Fr(off)p Fs('.)630 +4536 y Fr(input-meta)1110 4646 y Fs(If)f(set)g(to)h(`)p +Fr(on)p Fs(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) +i(will)f(not)h(clear)1110 4756 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h +(c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 +4865 y(terminal)g(claims)h(it)g(can)f(supp)s(ort.)68 +b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fr(off)p +Fs('.)69 b(The)1110 4975 y(name)30 b Fr(meta-flag)e Fs(is)j(a)f(synon)m +(ym)g(for)g(this)h(v)-5 b(ariable.)630 5121 y Fr(isearch-terminators) +1110 5230 y Fs(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e +(terminate)j(an)f(incremen)m(tal)1110 5340 y(searc)m(h)25 +b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g +(command)p eop end +%%Page: 7 11 +TeXDict begin 7 10 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(7)1110 299 y(\(see)45 +b(Section)h(1.2.5)g([Searc)m(hing],)j(page)d(3\).)84 +b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 408 +y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h +Fr(ESC)d Fs(and)h Fk(C-J)g Fs(will)h(terminate)g(an)1110 +518 y(incremen)m(tal)c(searc)m(h.)630 689 y Fr(keymap)192 +b Fs(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h +(for)g(k)m(ey)g(binding)f(com-)1110 798 y(mands.)81 b(Acceptable)47 +b Fr(keymap)42 b Fs(names)i(are)h Fr(emacs)p Fs(,)i Fr(emacs-standard)p +Fs(,)1110 908 y Fr(emacs-meta)p Fs(,)99 b Fr(emacs-ctlx)p +Fs(,)f Fr(vi)p Fs(,)j Fr(vi-move)p Fs(,)f Fr(vi-command)p +Fs(,)f(and)1110 1017 y Fr(vi-insert)p Fs(.)64 b Fr(vi)38 +b Fs(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fr(vi-command)p +Fs(;)i Fr(emacs)c Fs(is)i(equiv)-5 b(alen)m(t)1110 1127 +y(to)33 b Fr(emacs-standard)p Fs(.)41 b(The)31 b(default)h(v)-5 +b(alue)32 b(is)g Fr(emacs)p Fs(.)44 b(The)31 b(v)-5 b(alue)33 +b(of)f(the)1110 1236 y Fr(editing-mode)27 b Fs(v)-5 b(ariable)31 +b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 1407 +y Fr(mark-directories)1110 1517 y Fs(If)38 b(set)g(to)h(`)p +Fr(on)p Fs(',)i(completed)e(directory)f(names)g(ha)m(v)m(e)i(a)e(slash) +g(app)s(ended.)1110 1626 y(The)30 b(default)g(is)h(`)p +Fr(on)p Fs('.)630 1797 y Fr(mark-modified-lines)1110 +1906 y Fs(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p +Fr(on)p Fs(',)g(causes)g(Readline)f(to)h(displa)m(y)f(an)f(as-)1110 +2016 y(terisk)f(\(`)p Fr(*)p Fs('\))h(at)f(the)g(start)g(of)g(history)g +(lines)g(whic)m(h)f(ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 +2125 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fr(off)p Fs(')g(b)m(y)g +(default.)630 2296 y Fr(mark-symlinked-directori)o(es)1110 +2405 y Fs(If)44 b(set)h(to)h(`)p Fr(on)p Fs(',)i(completed)e(names)f +(whic)m(h)f(are)h(sym)m(b)s(olic)g(links)g(to)g(di-)1110 +2515 y(rectories)j(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)e(\(sub)5 +b(ject)47 b(to)g(the)f(v)-5 b(alue)47 b(of)f Fr(mark-)1110 +2625 y(directories)p Fs(\).)38 b(The)30 b(default)g(is)h(`)p +Fr(off)p Fs('.)630 2795 y Fr(match-hidden-files)1110 +2905 y Fs(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p +Fr(on)p Fs(',)h(causes)f(Readline)g(to)g(matc)m(h)g(\014les)f(whose) +1110 3014 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fr(.)p +Fs(')g(\(hidden)f(\014les\))i(when)e(p)s(erforming)g(\014lename)1110 +3124 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fr(off)p +Fs(',)i(the)e(leading)g(`)p Fr(.)p Fs(')f(m)m(ust)g(b)s(e)g(supplied)f +(b)m(y)1110 3233 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f +(completed.)53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p +Fr(on)p Fs(')g(b)m(y)1110 3343 y(default.)630 3513 y +Fr(menu-complete-display-pr)o(efix)1110 3623 y Fs(If)f(set)h(to)g(`)p +Fr(on)p Fs(',)h(men)m(u)e(completion)i(displa)m(ys)e(the)h(common)g +(pre\014x)e(of)i(the)1110 3733 y(list)k(of)g(p)s(ossible)f(completions) +i(\(whic)m(h)e(ma)m(y)h(b)s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 +3842 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p +Fr(off)p Fs('.)630 4013 y Fr(output-meta)1110 4122 y +Fs(If)35 b(set)h(to)g(`)p Fr(on)p Fs(',)h(Readline)f(will)g(displa)m(y) +f(c)m(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 4232 +y(set)h(directly)g(rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s +(e)h(sequence.)59 b(The)1110 4341 y(default)31 b(is)f(`)p +Fr(off)p Fs('.)630 4512 y Fr(page-completions)1110 4622 +y Fs(If)j(set)i(to)f(`)p Fr(on)p Fs(',)h(Readline)g(uses)e(an)h(in)m +(ternal)h Fr(more)p Fs(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 +4731 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) +47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fr(on)p Fs(')1110 +4841 y(b)m(y)e(default.)630 5011 y Fr(print-completions-horizo)o(ntal)o +(ly)1110 5121 y Fs(If)23 b(set)i(to)g(`)p Fr(on)p Fs(',)g(Readline)g +(will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 +5230 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c +(than)g(do)m(wn)g(the)h(screen.)1110 5340 y(The)30 b(default)g(is)h(`)p +Fr(off)p Fs('.)p eop end +%%Page: 8 12 +TeXDict begin 8 11 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(8)630 299 y Fr +(revert-all-at-newline)1110 408 y Fs(If)29 b(set)h(to)g(`)p +Fr(on)p Fs(',)g(Readline)g(will)g(undo)f(all)h(c)m(hanges)h(to)f +(history)g(lines)f(b)s(efore)1110 518 y(returning)f(when)f +Fr(accept-line)f Fs(is)j(executed.)41 b(By)29 b(default,)g(history)g +(lines)1110 628 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i +(individual)e(undo)g(lists)h(across)g(calls)h(to)1110 +737 y Fr(readline)p Fs(.)38 b(The)30 b(default)h(is)f(`)p +Fr(off)p Fs('.)630 902 y Fr(show-all-if-ambiguous)1110 +1011 y Fs(This)f(alters)i(the)f(default)g(b)s(eha)m(vior)g(of)g(the)h +(completion)g(functions.)40 b(If)29 b(set)1110 1121 y(to)f(`)p +Fr(on)p Fs(',)g(w)m(ords)f(whic)m(h)g(ha)m(v)m(e)i(more)f(than)f(one)h +(p)s(ossible)f(completion)h(cause)1110 1230 y(the)39 +b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i(instead)e(of)g +(ringing)g(the)g(b)s(ell.)1110 1340 y(The)30 b(default)g(v)-5 +b(alue)31 b(is)g(`)p Fr(off)p Fs('.)630 1504 y Fr +(show-all-if-unmodified)1110 1614 y Fs(This)38 b(alters)h(the)g +(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h(functions)e(in)h(a) +1110 1724 y(fashion)25 b(similar)g(to)h Fi(sho)m(w-all-if-am)m(biguous) +t Fs(.)41 b(If)24 b(set)i(to)f(`)p Fr(on)p Fs(',)i(w)m(ords)d(whic)m(h) +1110 1833 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e +(completion)i(without)f(an)m(y)g(p)s(ossible)f(par-)1110 +1943 y(tial)43 b(completion)h(\(the)f(p)s(ossible)f(completions)h +(don't)f(share)g(a)h(common)1110 2052 y(pre\014x\))30 +b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g(immediately)i +(instead)e(of)h(ring-)1110 2162 y(ing)g(the)f(b)s(ell.)41 +b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fr(off)p +Fs('.)630 2326 y Fr(skip-completed-text)1110 2436 y Fs(If)i(set)i(to)f +(`)p Fr(on)p Fs(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s +(eha)m(vior)f(when)f(in-)1110 2545 y(serting)d(a)h(single)g(matc)m(h)f +(in)m(to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s +(erform-)1110 2655 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f +(w)m(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110 +2765 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h +(that)f(matc)m(h)g(c)m(haracters)1110 2874 y(after)c(p)s(oin)m(t)g(in)g +(the)g(w)m(ord)f(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g +(w)m(ord)1110 2984 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g +(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 +3093 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g +(after)h(the)g(`)p Fr(e)p Fs(')f(in)1110 3203 y(`)p Fr(Makefile)p +Fs(')c(will)i(result)f(in)g(`)p Fr(Makefile)p Fs(')f(rather)h(than)h(`) +p Fr(Makefilefile)p Fs(',)1110 3313 y(assuming)d(there)g(is)h(a)f +(single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 +b(alue)1110 3422 y(is)30 b(`)p Fr(off)p Fs('.)630 3587 +y Fr(visible-stats)1110 3696 y Fs(If)h(set)i(to)f(`)p +Fr(on)p Fs(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s +(e)g(is)g(app)s(ended)e(to)j(the)1110 3806 y(\014lename)e(when)e +(listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p +Fr(off)p Fs('.)150 3970 y(Key)f(Bindings)630 4080 y(The)41 +b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g +(init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 +4189 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i +(y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 +4299 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j +(the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 +4408 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h +(do)s(es.)630 4545 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g +(the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 +4655 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h +(bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 +4765 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 +b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g +(and)630 4874 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m +(terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 +b(The)40 b(name)h(of)630 4984 y(the)35 b(k)m(ey)g(can)g(b)s(e)f +(expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h +(what)h(y)m(ou)g(\014nd)e(most)630 5093 y(comfortable.)630 +5230 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h +(k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 +5340 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g +(\(a)h Fi(macro)5 b Fs(\).)p eop end +%%Page: 9 13 +TeXDict begin 9 12 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(9)630 299 y Fi(k)m(eyname)5 +b Fs(:)42 b Fi(function-name)35 b Fs(or)c Fi(macro)1110 +408 y(k)m(eyname)k Fs(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s +(elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 +541 y Fr(Control-u:)45 b(universal-argument)1350 651 +y(Meta-Rubout:)f(backward-kill-word)1350 760 y(Control-o:)h(">)i +(output")1110 893 y Fs(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)h +Fk(C-u)d Fs(is)h(b)s(ound)d(to)k(the)e(function)h Fr(universal-)1110 +1003 y(argument)p Fs(,)f Fk(M-DEL)e Fs(is)i(b)s(ound)e(to)i(the)g +(function)g Fr(backward-kill-word)p Fs(,)1110 1112 y(and)g +Fk(C-o)g Fs(is)h(b)s(ound)e(to)j(run)d(the)j(macro)f(expressed)g(on)f +(the)i(righ)m(t)f(hand)1110 1222 y(side)30 b(\(that)i(is,)e(to)h +(insert)g(the)f(text)i(`)p Fr(>)e(output)p Fs(')f(in)m(to)i(the)g +(line\).)1110 1355 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)g(c)m +(haracter)i(names)e(are)g(recognized)h(while)f(pro-)1110 +1465 y(cessing)22 b(this)g(k)m(ey)g(binding)e(syn)m(tax:)37 +b Fi(DEL)p Fs(,)22 b Fi(ESC)8 b Fs(,)20 b Fi(ESCAPE)5 +b Fs(,)21 b Fi(LFD)5 b Fs(,)22 b Fi(NEW-)1110 1574 y(LINE)5 +b Fs(,)31 b Fi(RET)7 b Fs(,)29 b Fi(RETURN)10 b Fs(,)30 +b Fi(R)m(UBOUT)7 b Fs(,)31 b Fi(SP)-8 b(A)m(CE)5 b Fs(,)31 +b Fi(SPC)8 b Fs(,)29 b(and)h Fi(T)-8 b(AB)5 b Fs(.)630 +1730 y Fr(")p Fi(k)m(eyseq)r Fr(")p Fs(:)41 b Fi(function-name)36 +b Fs(or)30 b Fi(macro)1110 1840 y(k)m(eyseq)k Fs(di\013ers)d(from)f +Fi(k)m(eyname)37 b Fs(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f +(denoting)g(an)g(en-)1110 1949 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s +(e)f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in) +1110 2059 y(double)29 b(quotes.)41 b(Some)29 b Fl(gnu)h +Fs(Emacs)f(st)m(yle)i(k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as) +1110 2169 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s +(ecial)h(c)m(haracter)g(names)f(are)g(not)1110 2278 y(recognized.)1350 +2411 y Fr("\\C-u":)46 b(universal-argument)1350 2521 +y("\\C-x\\C-r":)f(re-read-init-file)1350 2630 y("\\e[11~":)g("Function) +h(Key)g(1")1110 2763 y Fs(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 +b Fk(C-u)64 b Fs(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 +2873 y Fr(universal-argument)39 b Fs(\(just)k(as)h(it)g(w)m(as)g(in)g +(the)f(\014rst)g(example\),)49 b(`)p Fk(C-x)1110 2982 +y(C-r)p Fs(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f +Fr(re-read-init-file)p Fs(,)c(and)j(`)p Fr(ESC)h([)g(1)g(1)1110 +3092 y(~)p Fs(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p +Fr(Function)e(Key)g(1)p Fs('.)630 3248 y(The)g(follo)m(wing)i +Fl(gnu)f Fs(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 +b(ailable)32 b(when)d(sp)s(ecifying)630 3357 y(k)m(ey)i(sequences:)630 +3513 y Fk(\\C-)336 b Fs(con)m(trol)32 b(pre\014x)630 +3670 y Fk(\\M-)336 b Fs(meta)31 b(pre\014x)630 3826 y +Fk(\\e)384 b Fs(an)30 b(escap)s(e)h(c)m(haracter)630 +3982 y Fk(\\\\)384 b Fs(bac)m(kslash)630 4138 y Fk(\\)p +Fr(")g(")p Fs(,)30 b(a)h(double)f(quotation)i(mark)630 +4294 y Fk(\\')384 b Fr(')p Fs(,)30 b(a)h(single)g(quote)g(or)f(ap)s +(ostrophe)630 4450 y(In)d(addition)h(to)g(the)g Fl(gnu)f +Fs(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g +(bac)m(kslash)630 4560 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 +4716 y Fr(\\a)384 b Fs(alert)31 b(\(b)s(ell\))630 4872 +y Fr(\\b)384 b Fs(bac)m(kspace)630 5028 y Fr(\\d)g Fs(delete)630 +5184 y Fr(\\f)g Fs(form)30 b(feed)630 5340 y Fr(\\n)384 +b Fs(newline)p eop end +%%Page: 10 14 +TeXDict begin 10 13 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(10)630 299 y Fr(\\r)384 +b Fs(carriage)32 b(return)630 451 y Fr(\\t)384 b Fs(horizon)m(tal)32 +b(tab)630 604 y Fr(\\v)384 b Fs(v)m(ertical)32 b(tab)630 +756 y Fr(\\)p Fk(nnn)288 b Fs(the)35 b(eigh)m(t-bit)h(c)m(haracter)g +(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 +b(alue)35 b Fi(nnn)e Fs(\(one)i(to)1110 866 y(three)c(digits\))630 +1018 y Fr(\\x)p Fk(HH)288 b Fs(the)40 b(eigh)m(t-bit)h(c)m(haracter)g +(whose)e(v)-5 b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5 +b(alue)40 b Fi(HH)1110 1128 y Fs(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))630 1280 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g +(macro,)i(single)e(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to) +630 1390 y(indicate)23 b(a)e(macro)h(de\014nition.)38 +b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f +(name.)38 b(In)630 1499 y(the)22 b(macro)f(b)s(o)s(dy)-8 +b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m +(e)j(are)e(expanded.)37 b(Bac)m(kslash)630 1609 y(will)j(quote)h(an)m +(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 +b(`)p Fr(")p Fs(')h(and)g(`)p Fr(')p Fs('.)69 b(F)-8 +b(or)630 1718 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i +(mak)m(e)h(`)p Fk(C-x)j Fr(\\)p Fs(')c(insert)f(a)h(single)h(`)p +Fr(\\)p Fs(')f(in)m(to)g(the)g(line:)870 1849 y Fr("\\C-x\\\\":)45 +b("\\\\")150 2042 y Fh(1.3.2)63 b(Conditional)41 b(Init)g(Constructs) +150 2188 y Fs(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f +(in)g(spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 +2298 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g +(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s +(erformed)f(as)i(the)150 2408 y(result)f(of)h(tests.)41 +b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 +2560 y Fr($if)336 b Fs(The)31 b Fr($if)f Fs(construct)i(allo)m(ws)h +(bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g +(the)630 2670 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g +(application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test) +630 2779 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m +(haracters)i(are)f(required)e(to)i(isolate)i(it.)630 +2932 y Fr(mode)288 b Fs(The)20 b Fr(mode=)g Fs(form)g(of)h(the)g +Fr($if)f Fs(directiv)m(e)j(is)e(used)f(to)h(test)h(whether)e(Readline) +1110 3041 y(is)29 b(in)h Fr(emacs)e Fs(or)h Fr(vi)g Fs(mo)s(de.)40 +b(This)29 b(ma)m(y)h(b)s(e)e(used)h(in)g(conjunction)h(with)f(the)1110 +3151 y(`)p Fr(set)h(keymap)p Fs(')c(command,)i(for)f(instance,)i(to)f +(set)g(bindings)f(in)g(the)h Fr(emacs-)1110 3260 y(standard)23 +b Fs(and)h Fr(emacs-ctlx)f Fs(k)m(eymaps)i(only)g(if)g(Readline)h(is)f +(starting)h(out)1110 3370 y(in)k Fr(emacs)f Fs(mo)s(de.)630 +3522 y Fr(term)288 b Fs(The)26 b Fr(term=)g Fs(form)g(ma)m(y)i(b)s(e)e +(used)g(to)i(include)f(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 +3632 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f +(output)g(b)m(y)g(the)g(terminal's)1110 3742 y(function)24 +b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g +(the)g(`)p Fr(=)p Fs(')g(is)g(tested)h(against)1110 3851 +y(b)s(oth)k(the)h(full)g(name)g(of)g(the)g(terminal)h(and)e(the)i(p)s +(ortion)e(of)h(the)g(terminal)1110 3961 y(name)k(b)s(efore)f(the)g +(\014rst)g(`)p Fr(-)p Fs('.)50 b(This)33 b(allo)m(ws)i +Fr(sun)e Fs(to)h(matc)m(h)g(b)s(oth)f Fr(sun)g Fs(and)1110 +4070 y Fr(sun-cmd)p Fs(,)c(for)h(instance.)630 4223 y +Fr(application)1110 4332 y Fs(The)21 b Fi(application)j +Fs(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h +(set-)1110 4442 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h +(Readline)g(library)g(sets)g(the)g Fi(application)1110 +4551 y(name)5 b Fs(,)25 b(and)d(y)m(ou)h(can)g(test)h(for)e(a)h +(particular)h(v)-5 b(alue.)38 b(This)22 b(could)h(b)s(e)f(used)g(to) +1110 4661 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g +(for)h(a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 +4771 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey) +f(sequence)h(that)f(quotes)1110 4880 y(the)e(curren)m(t)f(or)g +(previous)g(w)m(ord)g(in)g(Bash:)1350 5011 y Fr($if)47 +b(Bash)1350 5121 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word) +1350 5230 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 5340 y($endif)p +eop end +%%Page: 11 15 +TeXDict begin 11 14 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(11)150 299 y Fr($endif)192 +b Fs(This)29 b(command,)i(as)f(seen)h(in)f(the)g(previous)g(example,)h +(terminates)g(an)g Fr($if)e Fs(command.)150 458 y Fr($else)240 +b Fs(Commands)29 b(in)h(this)h(branc)m(h)e(of)i(the)f +Fr($if)g Fs(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g(fails.) +150 618 y Fr($include)96 b Fs(This)43 b(directiv)m(e)i(tak)m(es)g(a)e +(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g(commands) +630 727 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 +b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e +(from)630 837 y(`)p Fr(/etc/inputrc)p Fs(':)870 971 y +Fr($include)46 b(/etc/inputrc)150 1171 y Fh(1.3.3)63 +b(Sample)41 b(Init)g(File)150 1318 y Fs(Here)27 b(is)f(an)h(example)g +(of)f(an)h Fi(inputrc)k Fs(\014le.)39 b(This)26 b(illustrates)h(k)m(ey) +h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 +1427 y(conditional)j(syn)m(tax.)p eop end +%%Page: 12 16 +TeXDict begin 12 15 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(12)390 408 y Fr(#)47 +b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h +(editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h +(Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) +g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g +(re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 +956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 +1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(systemwide)e(bindings) +h(and)h(variable)390 1285 y(#)g(assignments)e(from)i(/etc/Inputrc)390 +1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 +y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)390 +1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 +2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) +h(function)f(name)g(is)h(ignored)p 3971 2401 42 76 v +390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 +2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 +3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g +(previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 +3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 +3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 +3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g +(previous-history)390 4025 y("\\M-[B":)g(next-history)390 +4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) +390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 +4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g +(previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 +4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) +390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 +5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end +%%Page: 13 17 +TeXDict begin 13 16 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(13)390 299 y Fr(#"\\M-\\C-[A":)331 +b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 +628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 +y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) +g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f +(are)h(convenient)e(for)i(shell)f(interaction)390 1504 +y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 +y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 +1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 +1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 +2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 +2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g +(backslash)e(\(testing)h(backslash)f(escapes)390 2381 +y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") +390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 +2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e +(to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 +2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f +(on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f +("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 +y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h +(available)390 3587 y(set)f(bell-style)e(visible)390 +3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) +390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e +(characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g +(converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j +(convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g +(eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h +(meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 +5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f +(completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g +(he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f +(completion-query-items)42 b(150)p eop end +%%Page: 14 18 +TeXDict begin 14 17 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(14)390 299 y Fr(#)47 +b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 +628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 +847 y($endif)150 1077 y Fq(1.4)68 b(Bindable)45 b(Readline)i(Commands) +150 1237 y Fs(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e +(that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 +b(Command)150 1346 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m +(ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 +1480 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fi(p)s(oin)m(t)h +Fs(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f +Fi(mark)31 b Fs(refers)150 1590 y(to)40 b(a)f(cursor)f(p)s(osition)h +(sa)m(v)m(ed)h(b)m(y)f(the)g Fr(set-mark)d Fs(command.)66 +b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 +1699 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fi(region)p +Fs(.)150 1897 y Fh(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 +b(Mo)m(ving)150 2067 y Fr(beginning-of-line)26 b(\(C-a\))630 +2177 y Fs(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g +(line.)150 2335 y Fr(end-of-line)d(\(C-e\))630 2444 y +Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +2602 y Fr(forward-char)c(\(C-f\))630 2711 y Fs(Mo)m(v)m(e)32 +b(forw)m(ard)e(a)h(c)m(haracter.)150 2869 y Fr(backward-char)c(\(C-b\)) +630 2978 y Fs(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 +3136 y Fr(forward-word)d(\(M-f\))630 3246 y Fs(Mo)m(v)m(e)32 +b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 +3355 y(digits.)150 3513 y Fr(backward-word)27 b(\(M-b\))630 +3622 y Fs(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g +(curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 +b(are)g(comp)s(osed)630 3732 y(of)d(letters)g(and)f(digits.)150 +3889 y Fr(clear-screen)d(\(C-l\))630 3999 y Fs(Clear)g(the)g(screen)f +(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f +(curren)m(t)g(line)g(at)g(the)g(top)630 4109 y(of)k(the)f(screen.)150 +4266 y Fr(redraw-current-line)25 b(\(\))630 4376 y Fs(Refresh)30 +b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s +(ound.)150 4573 y Fh(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 +b(Manipulating)h(The)f(History)150 4744 y Fr(accept-line)27 +b(\(Newline)h(or)i(Return\))630 4854 y Fs(Accept)36 b(the)g(line)f +(regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 +b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 +4963 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e +(future)g(recall)j(with)d Fr(add_history\(\))p Fs(.)42 +b(If)31 b(this)630 5073 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h +(line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g +(state.)150 5230 y Fr(previous-history)26 b(\(C-p\))630 +5340 y Fs(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g +(fetc)m(hing)g(the)g(previous)f(command.)p eop end +%%Page: 15 19 +TeXDict begin 15 18 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(15)150 299 y Fr(next-history)27 +b(\(C-n\))630 408 y Fs(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i +(history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 +573 y Fr(beginning-of-history)25 b(\(M-<\))630 682 y +Fs(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 +b(.)150 847 y Fr(end-of-history)26 b(\(M->\))630 956 +y Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 +b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 +1121 y Fr(reverse-search-history)24 b(\(C-r\))630 1230 +y Fs(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g +(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 +1340 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m +(tal)i(searc)m(h.)150 1504 y Fr(forward-search-history)24 +b(\(C-s\))630 1614 y Fs(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g +(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the) +h(the)630 1724 y(history)g(as)h(necessary)-8 b(.)41 b(This)30 +b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1888 y Fr +(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 +b(\(M-p\))630 1998 y Fs(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g +(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g +(his-)630 2107 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m +(tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 +2217 y(user.)150 2381 y Fr(non-incremental-forward-)o(sear)o(ch-h)o +(ist)o(ory)24 b(\(M-n\))630 2491 y Fs(Searc)m(h)30 b(forw)m(ard)f +(starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn') +f(through)g(the)h(the)630 2600 y(history)d(as)f(necessary)i(using)e(a)h +(non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i +(the)630 2710 y(user.)150 2874 y Fr(history-search-forward)d(\(\))630 +2984 y Fs(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g +(the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 +3093 y(start)36 b(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m +(t.)55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 3203 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +3367 y Fr(history-search-backward)24 b(\(\))630 3477 +y Fs(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g +(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 +3587 y(start)g(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m(t.) +55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 3696 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +3861 y Fr(yank-nth-arg)c(\(M-C-y\))630 3970 y Fs(Insert)37 +b(the)g(\014rst)f(argumen)m(t)i(to)f(the)h(previous)e(command)h +(\(usually)g(the)g(second)g(w)m(ord)630 4080 y(on)32 +b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 +b(an)g(argumen)m(t)g Fi(n)p Fs(,)g(insert)g(the)g Fi(n)p +Fs(th)f(w)m(ord)g(from)630 4189 y(the)k(previous)f(command)h(\(the)g(w) +m(ords)g(in)f(the)h(previous)g(command)f(b)s(egin)h(with)f(w)m(ord)630 +4299 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f +Fi(n)p Fs(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 +4408 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fi(n)e +Fs(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 +4518 y(the)e(`)p Fr(!)p Fk(n)11 b Fs(')29 b(history)i(expansion)f(had)g +(b)s(een)f(sp)s(eci\014ed.)150 4682 y Fr(yank-last-arg)e(\(M-.)i(or)h +(M-_\))630 4792 y Fs(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous) +f(command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 +4902 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m +(t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fr(yank-nth-arg)p +Fs(.)630 5011 y(Successiv)m(e)26 b(calls)g(to)f Fr(yank-last-arg)c +Fs(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i +(inserting)630 5121 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) +s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i +(of)f(eac)m(h)h(line)630 5230 y(in)36 b(turn.)58 b(An)m(y)36 +b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g +(calls)h(determines)630 5340 y(the)d(direction)g(to)h(mo)m(v)m(e)g +(through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e +(switc)m(hes)h(the)p eop end +%%Page: 16 20 +TeXDict begin 16 19 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(16)630 299 y(direction)23 +b(through)g(the)g(history)f(\(bac)m(k)i(or)f(forw)m(ard\).)38 +b(The)22 b(history)h(expansion)g(facilities)630 408 y(are)28 +b(used)f(to)h(extract)h(the)f(last)g(argumen)m(t,)h(as)e(if)h(the)g(`)p +Fr(!$)p Fs(')f(history)g(expansion)h(had)f(b)s(een)630 +518 y(sp)s(eci\014ed.)150 727 y Fh(1.4.3)63 b(Commands)42 +b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 904 y Fr(delete-char)27 +b(\(C-d\))630 1014 y Fs(Delete)41 b(the)e(c)m(haracter)i(at)e(p)s(oin)m +(t.)66 b(If)39 b(p)s(oin)m(t)f(is)h(at)h(the)f(b)s(eginning)f(of)h(the) +g(line,)j(there)630 1124 y(are)37 b(no)g(c)m(haracters)i(in)d(the)i +(line,)h(and)d(the)h(last)h(c)m(haracter)h(t)m(yp)s(ed)e(w)m(as)g(not)g +(b)s(ound)e(to)630 1233 y Fr(delete-char)p Fs(,)28 b(then)i(return)f +Fl(eof)p Fs(.)150 1403 y Fr(backward-delete-char)c(\(Rubout\))630 +1512 y Fs(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 +b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 +1622 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 +1792 y Fr(forward-backward-delete-)o(char)24 b(\(\))630 +1901 y Fs(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h +(unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 +2011 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s +(ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 +2120 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 +2290 y Fr(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 2399 +y Fs(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h +(v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 +2509 y(sequences)d(lik)m(e)g Fk(C-q)p Fs(,)f(for)g(example.)150 +2679 y Fr(tab-insert)e(\(M-TAB\))630 2788 y Fs(Insert)i(a)h(tab)f(c)m +(haracter.)150 2958 y Fr(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o +(\))630 3067 y Fs(Insert)g(y)m(ourself.)150 3237 y Fr(transpose-chars)c +(\(C-t\))630 3347 y Fs(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g +(cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g +(cursor,)630 3456 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m +(ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) +g(of)h(the)630 3566 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h +(last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 +b(Negativ)m(e)25 b(argumen)m(ts)630 3675 y(ha)m(v)m(e)32 +b(no)e(e\013ect.)150 3845 y Fr(transpose-words)c(\(M-t\))630 +3955 y Fs(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g +(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past) +g(that)630 4064 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 +b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i(the)f +(line,)i(this)e(transp)s(oses)g(the)630 4174 y(last)j(t)m(w)m(o)h(w)m +(ords)e(on)g(the)h(line.)150 4343 y Fr(upcase-word)c(\(M-u\))630 +4453 y Fs(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i +(w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 +4562 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h +(the)e(cursor.)150 4732 y Fr(downcase-word)d(\(M-l\))630 +4842 y Fs(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i +(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m +(ercase)630 4951 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m +(v)m(e)i(the)f(cursor.)150 5121 y Fr(capitalize-word)26 +b(\(M-c\))630 5230 y Fs(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m +(wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h +(capitalize)630 5340 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f +(mo)m(v)m(e)i(the)f(cursor.)p eop end +%%Page: 17 21 +TeXDict begin 17 20 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fr(overwrite-mode)26 +b(\(\))630 408 y Fs(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 +b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) +h(switc)m(hes)630 518 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 +b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m +(t,)i(switc)m(hes)e(to)630 628 y(insert)30 b(mo)s(de.)41 +b(This)30 b(command)h(a\013ects)h(only)e Fr(emacs)f Fs(mo)s(de;)i +Fr(vi)f Fs(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 737 +y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f +Fr(readline\(\))c Fs(starts)k(in)f(insert)g(mo)s(de.)630 +872 y(In)e(o)m(v)m(erwrite)j(mo)s(de,)e(c)m(haracters)i(b)s(ound)c(to)j +Fr(self-insert)c Fs(replace)k(the)g(text)g(at)g(p)s(oin)m(t)630 +982 y(rather)41 b(than)h(pushing)e(the)i(text)g(to)g(the)g(righ)m(t.)75 +b(Characters)42 b(b)s(ound)d(to)j Fr(backward-)630 1092 +y(delete-char)27 b Fs(replace)32 b(the)e(c)m(haracter)i(b)s(efore)e(p)s +(oin)m(t)h(with)f(a)g(space.)630 1227 y(By)h(default,)f(this)h(command) +f(is)g(un)m(b)s(ound.)150 1427 y Fh(1.4.4)63 b(Killing)42 +b(And)e(Y)-10 b(anking)150 1600 y Fr(kill-line)28 b(\(C-k\))630 +1709 y Fs(Kill)j(the)f(text)i(from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of) +i(the)f(line.)150 1870 y Fr(backward-kill-line)25 b(\(C-x)30 +b(Rubout\))630 1980 y Fs(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s +(eginning)g(of)g(the)h(line.)150 2140 y Fr(unix-line-discard)26 +b(\(C-u\))630 2250 y Fs(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor) +f(to)h(the)f(b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 +2411 y Fr(kill-whole-line)c(\(\))630 2520 y Fs(Kill)37 +b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g +(where)f(p)s(oin)m(t)h(is.)59 b(By)36 b(default,)630 +2630 y(this)30 b(is)h(un)m(b)s(ound.)150 2790 y Fr(kill-word)d(\(M-d\)) +630 2900 y Fs(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f +(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h +(the)g(end)630 3010 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fr(forward-word)p +Fs(.)150 3170 y Fr(backward-kill-word)25 b(\(M-DEL\))630 +3280 y Fs(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 +b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g +Fr(backward-word)p Fs(.)150 3441 y Fr(unix-word-rubout)d(\(C-w\))630 +3550 y Fs(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f +(white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 +b(The)31 b(killed)630 3660 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f +(kill-ring.)150 3820 y Fr(unix-filename-rubout)25 b(\(\))630 +3930 y Fs(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e +(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 +4040 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g +(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 4200 y Fr +(delete-horizontal-space)24 b(\(\))630 4310 y Fs(Delete)33 +b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 +b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 4471 +y Fr(kill-region)d(\(\))630 4580 y Fs(Kill)k(the)f(text)i(in)e(the)g +(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) +m(b)s(ound.)150 4741 y Fr(copy-region-as-kill)25 b(\(\))630 +4851 y Fs(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f +(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f +(a)m(w)m(a)m(y)-8 b(.)630 4960 y(By)31 b(default,)f(this)h(command)f +(is)g(un)m(b)s(ound.)150 5121 y Fr(copy-backward-word)25 +b(\(\))630 5230 y Fs(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m +(t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) +f(are)i(the)630 5340 y(same)31 b(as)f Fr(backward-word)p +Fs(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)p +eop end +%%Page: 18 22 +TeXDict begin 18 21 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(18)150 299 y Fr(copy-forward-word) +26 b(\(\))630 408 y Fs(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s +(oin)m(t)f(to)h(the)f(kill)h(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s +(oundaries)e(are)j(the)630 518 y(same)f(as)f Fr(forward-word)p +Fs(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 +684 y Fr(yank)f(\(C-y\))630 793 y Fs(Y)-8 b(ank)31 b(the)f(top)h(of)g +(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h(p)s(oin)m(t.)150 +959 y Fr(yank-pop)d(\(M-y\))630 1068 y Fs(Rotate)36 b(the)f(kill-ring,) +i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 +b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 1178 +y(command)30 b(is)h Fr(yank)e Fs(or)h Fr(yank-pop)p Fs(.)150 +1383 y Fh(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m(ts)150 +1558 y Fr(digit-argument)26 b(\()p Fk(M-0)p Fr(,)j Fk(M-1)p +Fr(,)h(...)f Fk(M--)p Fr(\))630 1668 y Fs(Add)d(this)h(digit)g(to)h +(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f(new) +f(argumen)m(t.)630 1777 y Fk(M--)j Fs(starts)i(a)g(negativ)m(e)i +(argumen)m(t.)150 1943 y Fr(universal-argument)25 b(\(\))630 +2052 y Fs(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g +(argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m +(y)f(one)630 2162 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h +(leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 +2271 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) +m(y)f(digits,)i(executing)f Fr(universal-argument)630 +2381 y Fs(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h +(otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 +2491 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) +d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 +2600 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e +(the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630 +2710 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f +(executing)g(this)f(function)g(the)h(\014rst)e(time)630 +2819 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e +(time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 +2929 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h +(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3134 y Fh(1.4.6)63 +b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 +b(Y)-10 b(ou)150 3309 y Fr(complete)28 b(\(TAB\))630 +3419 y Fs(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g +(b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 +3528 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 +b(The)30 b(default)h(is)f(\014lename)h(completion.)150 +3694 y Fr(possible-completions)25 b(\(M-?\))630 3804 +y Fs(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s +(efore)e(p)s(oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 +3913 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i +(columns)f(used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 +b(alue)33 b(of)630 4023 y Fr(completion-display-width)o +Fs(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 +b(ariable)38 b Fr(COLUMNS)p Fs(,)630 4132 y(or)30 b(the)h(screen)f +(width,)g(in)g(that)h(order.)150 4298 y Fr(insert-completions)25 +b(\(M-*\))630 4407 y Fs(Insert)30 b(all)h(completions)h(of)f(the)g +(text)g(b)s(efore)f(p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s +(een)e(generated)630 4517 y(b)m(y)g Fr(possible-completions)p +Fs(.)150 4682 y Fr(menu-complete)d(\(\))630 4792 y Fs(Similar)d(to)g +Fr(complete)p Fs(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f +(completed)i(with)e(a)i(single)f(matc)m(h)630 4902 y(from)37 +b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 +b(execution)g(of)f Fr(menu-complete)630 5011 y Fs(steps)i(through)g +(the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i +(matc)m(h)f(in)f(turn.)630 5121 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g +(of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 +b(ject)36 b(to)i(the)f(setting)630 5230 y(of)f Fr(bell-style)p +Fs(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 +b(An)36 b(argumen)m(t)h(of)f Fi(n)f Fs(mo)m(v)m(es)i +Fi(n)630 5340 y Fs(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e +(matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f +(used)g(to)p eop end +%%Page: 19 23 +TeXDict begin 19 22 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(19)630 299 y(mo)m(v)m(e)40 +b(bac)m(kw)m(ard)e(through)g(the)g(list.)65 b(This)38 +b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s(ound)e(to)630 +408 y Fr(TAB)p Fs(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m(y)i(default.) +150 554 y Fr(menu-complete-backward)24 b(\(\))630 664 +y Fs(Iden)m(tical)36 b(to)g Fr(menu-complete)p Fs(,)d(but)h(mo)m(v)m +(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g(p)s(ossible)630 +773 y(completions,)d(as)e(if)h Fr(menu-complete)26 b +Fs(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 +919 y Fr(delete-char-or-list)25 b(\(\))630 1028 y Fs(Deletes)k(the)e(c) +m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)g(b)s(eginning) +g(or)f(end)h(of)g(the)g(line)630 1138 y(\(lik)m(e)k Fr(delete-char)p +Fs(\).)37 b(If)29 b(at)h(the)f(end)f(of)i(the)f(line,)h(b)s(eha)m(v)m +(es)g(iden)m(tically)h(to)e Fr(possible-)630 1247 y(completions)p +Fs(.)38 b(This)29 b(command)h(is)h(un)m(b)s(ound)d(b)m(y)i(default.)150 +1433 y Fh(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 1598 +y Fr(start-kbd-macro)26 b(\(C-x)j(\(\))630 1707 y Fs(Begin)i(sa)m(ving) +h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m(to)h(the)g(curren)m(t)f(k)m +(eyb)s(oard)g(macro.)150 1853 y Fr(end-kbd-macro)d(\(C-x)i(\)\))630 +1962 y Fs(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m +(to)i(the)e(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i +(the)630 2072 y(de\014nition.)150 2218 y Fr(call-last-kbd-macro)c +(\(C-x)k(e\))630 2327 y Fs(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard) +f(macro)h(de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the) +630 2437 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m +(eyb)s(oard.)150 2622 y Fh(1.4.8)63 b(Some)41 b(Miscellaneous)i +(Commands)150 2787 y Fr(re-read-init-file)26 b(\(C-x)j(C-r\))630 +2897 y Fs(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g +Fi(inputrc)27 b Fs(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d +(or)i(v)-5 b(ariable)630 3006 y(assignmen)m(ts)31 b(found)e(there.)150 +3152 y Fr(abort)g(\(C-g\))630 3261 y Fs(Ab)s(ort)d(the)h(curren)m(t)f +(editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 +b(ject)26 b(to)i(the)630 3371 y(setting)j(of)g Fr(bell-style)p +Fs(\).)150 3516 y Fr(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p +Fk(x)11 b Fr(,)29 b(...)o(\))630 3626 y Fs(If)e(the)h(meta\014ed)g(c)m +(haracter)h Fi(x)34 b Fs(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g +(command)h(that)g(is)g(b)s(ound)d(to)k(the)630 3736 y(corresp)s(onding) +g(upp)s(ercase)h(c)m(haracter.)150 3881 y Fr(prefix-meta)d(\(ESC\))630 +3991 y Fs(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 +b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 +b(.)630 4100 y(T)m(yping)30 b(`)p Fr(ESC)g(f)p Fs(')g(is)h(equiv)-5 +b(alen)m(t)31 b(to)g(t)m(yping)g Fk(M-f)p Fs(.)150 4246 +y Fr(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 4355 y Fs(Incremen)m(tal)h +(undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 +4501 y Fr(revert-line)27 b(\(M-r\))630 4611 y Fs(Undo)33 +b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 +b(is)h(lik)m(e)i(executing)f(the)f Fr(undo)f Fs(command)630 +4720 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) +150 4866 y Fr(tilde-expand)d(\(M-~\))630 4975 y Fs(P)m(erform)j(tilde)h +(expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 5121 +y Fr(set-mark)d(\(C-@\))630 5230 y Fs(Set)33 b(the)g(mark)f(to)i(the)f +(p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g +(supplied,)f(the)h(mark)g(is)f(set)630 5340 y(to)f(that)g(p)s(osition.) +p eop end +%%Page: 20 24 +TeXDict begin 20 23 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fr +(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 408 +y Fs(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 +b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h +(sa)m(v)m(ed)630 518 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s +(osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 711 +y Fr(character-search)26 b(\(C-]\))630 821 y Fs(A)f(c)m(haracter)h(is)f +(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s +(ccurrence)g(of)g(that)g(c)m(haracter.)630 930 y(A)30 +b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s +(ccurrences.)150 1123 y Fr(character-search-backwar)o(d)24 +b(\(M-C-]\))630 1233 y Fs(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s +(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) +g(that)630 1342 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f +(searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 +1535 y Fr(skip-csi-sequence)d(\(\))630 1645 y Fs(Read)i(enough)f(c)m +(haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f +(as)g(those)h(de\014ned)630 1754 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g +(and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m +(trol)g(Sequence)630 1864 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 +b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fr("\\)p +Fs(e[)p Fr(")p Fs(,)g(k)m(eys)f(pro-)630 1973 y(ducing)31 +b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e +(explicitly)j(b)s(ound)c(to)i(a)h(readline)630 2083 y(command,)f +(instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f +(editing)h(bu\013er.)44 b(This)31 b(is)630 2193 y(un)m(b)s(ound)d(b)m +(y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 +2385 y Fr(insert-comment)26 b(\(M-#\))630 2495 y Fs(Without)36 +b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 +b(of)g(the)g Fr(comment-begin)c Fs(v)-5 b(ariable)36 +b(is)g(in-)630 2605 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f +(curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g +(supplied,)630 2714 y(this)k(command)h(acts)g(as)g(a)g(toggle:)55 +b(if)37 b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g +(line)630 2824 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 +b(alue)31 b(of)f Fr(comment-begin)p Fs(,)e(the)i(v)-5 +b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 2933 +y(c)m(haracters)42 b(in)d Fr(comment-begin)e Fs(are)j(deleted)h(from)f +(the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 3043 +y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h +(newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 3236 y Fr(dump-functions)d +(\(\))630 3345 y Fs(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g +(their)g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 +3455 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h +(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 +3565 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fi(inputrc)k +Fs(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k +(default.)150 3757 y Fr(dump-variables)26 b(\(\))630 +3867 y Fs(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 +b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h +(output)f(stream.)630 3977 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is) +g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a) +m(y)g(that)630 4086 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h +Fi(inputrc)k Fs(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c +(b)m(y)k(default.)150 4279 y Fr(dump-macros)c(\(\))630 +4389 y Fs(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences) +f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 +4498 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e +(supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 +4608 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e +Fi(inputrc)35 b Fs(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) +d(b)m(y)630 4717 y(default.)150 4910 y Fr(emacs-editing-mode)e(\(C-e\)) +630 5020 y Fs(When)30 b(in)g Fr(vi)g Fs(command)g(mo)s(de,)g(this)h +(causes)f(a)h(switc)m(h)g(to)g Fr(emacs)e Fs(editing)i(mo)s(de.)150 +5213 y Fr(vi-editing-mode)26 b(\(M-C-j\))630 5322 y Fs(When)k(in)g +Fr(emacs)f Fs(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g +Fr(vi)f Fs(editing)h(mo)s(de.)p eop end +%%Page: 21 25 +TeXDict begin 21 24 bop 150 -116 a Fs(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fq(1.5)68 +b(Readline)47 b(vi)e(Mo)t(de)150 458 y Fs(While)32 b(the)g(Readline)g +(library)f(do)s(es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g +Fr(vi)f Fs(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 +568 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 +b(The)34 b(Readline)g Fr(vi)g Fs(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s +(eci\014ed)f(in)150 677 y(the)e Fl(posix)e Fs(standard.)275 +812 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m +(een)d Fr(emacs)f Fs(and)g Fr(vi)h Fs(editing)g(mo)s(des,)g(use)g(the)g +(command)150 922 y Fk(M-C-j)36 b Fs(\(b)s(ound)h(to)h(emacs-editing-mo) +s(de)i(when)d(in)g Fr(vi)h Fs(mo)s(de)f(and)g(to)i(vi-editing-mo)s(de)g +(in)e Fr(emacs)150 1031 y Fs(mo)s(de\).)k(The)30 b(Readline)h(default)f +(is)g Fr(emacs)f Fs(mo)s(de.)275 1166 y(When)g(y)m(ou)i(en)m(ter)f(a)h +(line)f(in)g Fr(vi)f Fs(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f +(in)g(`insertion')g(mo)s(de,)g(as)h(if)f(y)m(ou)150 1275 +y(had)f(t)m(yp)s(ed)g(an)g(`)p Fr(i)p Fs('.)41 b(Pressing)29 +b Fr(ESC)f Fs(switc)m(hes)i(y)m(ou)g(in)m(to)h(`command')e(mo)s(de,)h +(where)e(y)m(ou)i(can)g(edit)g(the)150 1385 y(text)35 +b(of)f(the)g(line)g(with)f(the)h(standard)f Fr(vi)g Fs(mo)m(v)m(emen)m +(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g(history)f(lines)h(with)150 +1494 y(`)p Fr(k)p Fs(')d(and)e(subsequen)m(t)h(lines)h(with)f(`)p +Fr(j)p Fs(',)g(and)g(so)h(forth.)p eop end +%%Page: 22 26 +TeXDict begin 22 25 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(22)150 +299 y Fo(2)80 b(Programming)54 b(with)f(GNU)h(Readline)150 +527 y Fs(This)24 b(c)m(hapter)i(describ)s(es)e(the)h(in)m(terface)h(b)s +(et)m(w)m(een)g(the)f Fl(gnu)f Fs(Readline)i(Library)e(and)g(other)h +(programs.)150 636 y(If)k(y)m(ou)g(are)g(a)h(programmer,)f(and)f(y)m +(ou)i(wish)e(to)i(include)f(the)g(features)g(found)f(in)h +Fl(gnu)g Fs(Readline)g(suc)m(h)150 746 y(as)c(completion,)j(line)d +(editing,)i(and)d(in)m(teractiv)m(e)k(history)d(manipulation)g(in)f(y)m +(our)h(o)m(wn)g(programs,)h(this)150 855 y(section)32 +b(is)e(for)g(y)m(ou.)150 1085 y Fq(2.1)68 b(Basic)45 +b(Beha)l(vior)150 1245 y Fs(Man)m(y)39 b(programs)e(pro)m(vide)h(a)h +(command)f(line)g(in)m(terface,)k(suc)m(h)37 b(as)i Fr(mail)p +Fs(,)g Fr(ftp)p Fs(,)g(and)e Fr(sh)p Fs(.)63 b(F)-8 b(or)39 +b(suc)m(h)150 1354 y(programs,)29 b(the)f(default)h(b)s(eha)m(viour)f +(of)h(Readline)g(is)g(su\016cien)m(t.)40 b(This)28 b(section)i(describ) +s(es)d(ho)m(w)i(to)g(use)150 1464 y(Readline)35 b(in)f(the)h(simplest)f +(w)m(a)m(y)h(p)s(ossible,)h(p)s(erhaps)c(to)j(replace)h(calls)f(in)f(y) +m(our)h(co)s(de)f(to)h Fr(gets\(\))e Fs(or)150 1573 y +Fr(fgets\(\))p Fs(.)275 1707 y(The)f(function)g Fr(readline\(\))e +Fs(prin)m(ts)i(a)g(prompt)g Fi(prompt)i Fs(and)e(then)g(reads)g(and)g +(returns)f(a)i(single)150 1816 y(line)g(of)g(text)h(from)e(the)h(user.) +47 b(If)32 b Fi(prompt)i Fs(is)e Fr(NULL)g Fs(or)h(the)f(empt)m(y)i +(string,)f(no)g(prompt)e(is)i(displa)m(y)m(ed.)150 1926 +y(The)k(line)g Fr(readline)e Fs(returns)h(is)h(allo)s(cated)i(with)e +Fr(malloc\(\))p Fs(;)h(the)f(caller)i(should)d Fr(free\(\))f +Fs(the)j(line)150 2035 y(when)29 b(it)i(has)f(\014nished)f(with)h(it.) +42 b(The)29 b(declaration)j(for)f Fr(readline)d Fs(in)i(ANSI)g(C)g(is) +390 2169 y Fr(char)47 b(*readline)e(\(const)h(char)h(*)p +Fk(prompt)11 b Fr(\);)150 2302 y Fs(So,)31 b(one)f(migh)m(t)h(sa)m(y) +390 2435 y Fr(char)47 b(*line)f(=)h(readline)f(\("Enter)g(a)h(line:)g +("\);)150 2568 y Fs(in)23 b(order)f(to)h(read)g(a)g(line)h(of)f(text)h +(from)e(the)h(user.)38 b(The)22 b(line)h(returned)f(has)g(the)h +(\014nal)g(newline)g(remo)m(v)m(ed,)150 2678 y(so)31 +b(only)f(the)h(text)g(remains.)275 2811 y(If)40 b Fr(readline)e +Fs(encoun)m(ters)j(an)f Fr(EOF)f Fs(while)i(reading)f(the)h(line,)j +(and)39 b(the)i(line)g(is)f(empt)m(y)h(at)g(that)150 +2921 y(p)s(oin)m(t,)30 b(then)f Fr(\(char)g(*\)NULL)e +Fs(is)j(returned.)39 b(Otherwise,)30 b(the)f(line)h(is)f(ended)g(just)g +(as)g(if)h(a)f(newline)h(had)150 3030 y(b)s(een)g(t)m(yp)s(ed.)275 +3163 y(If)c(y)m(ou)h(w)m(an)m(t)h(the)f(user)g(to)g(b)s(e)g(able)g(to)h +(get)g(at)g(the)f(line)g(later,)i(\(with)e Fr(C-p)f Fs(for)h +(example\),)i(y)m(ou)e(m)m(ust)150 3273 y(call)32 b Fr(add_history\(\)) +26 b Fs(to)32 b(sa)m(v)m(e)f(the)g(line)g(a)m(w)m(a)m(y)h(in)e(a)h +Fi(history)38 b Fs(list)31 b(of)g(suc)m(h)f(lines.)390 +3406 y Fr(add_history)45 b(\(line\);)150 3539 y Fs(F)-8 +b(or)31 b(full)f(details)i(on)e(the)g(GNU)h(History)g(Library)-8 +b(,)31 b(see)g(the)f(asso)s(ciated)i(man)m(ual.)275 3673 +y(It)f(is)g(preferable)g(to)i(a)m(v)m(oid)f(sa)m(ving)h(empt)m(y)e +(lines)h(on)f(the)h(history)f(list,)h(since)g(users)e(rarely)i(ha)m(v)m +(e)h(a)150 3782 y(burning)28 b(need)h(to)i(reuse)e(a)h(blank)g(line.)40 +b(Here)31 b(is)e(a)h(function)g(whic)m(h)f(usefully)g(replaces)i(the)f +(standard)150 3892 y Fr(gets\(\))f Fs(library)h(function,)g(and)g(has)g +(the)g(adv)-5 b(an)m(tage)33 b(of)d(no)g(static)i(bu\013er)e(to)h(o)m +(v)m(er\015o)m(w:)390 4025 y Fr(/*)47 b(A)h(static)e(variable)f(for)i +(holding)f(the)h(line.)f(*/)390 4134 y(static)g(char)h(*line_read)e(=)i +(\(char)g(*\)NULL;)390 4354 y(/*)g(Read)g(a)g(string,)f(and)h(return)f +(a)i(pointer)d(to)j(it.)533 4463 y(Returns)e(NULL)h(on)g(EOF.)f(*/)390 +4573 y(char)h(*)390 4682 y(rl_gets)f(\(\))390 4792 y({)485 +4902 y(/*)i(If)f(the)g(buffer)f(has)h(already)f(been)g(allocated,)629 +5011 y(return)g(the)h(memory)f(to)h(the)g(free)f(pool.)h(*/)485 +5121 y(if)h(\(line_read\))581 5230 y({)676 5340 y(free)f +(\(line_read\);)p eop end +%%Page: 23 27 +TeXDict begin 23 26 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(23)676 +299 y Fr(line_read)46 b(=)h(\(char)f(*\)NULL;)581 408 +y(})485 628 y(/*)i(Get)f(a)g(line)g(from)f(the)h(user.)g(*/)485 +737 y(line_read)f(=)h(readline)f(\(""\);)485 956 y(/*)i(If)f(the)g +(line)f(has)h(any)g(text)g(in)g(it,)629 1066 y(save)f(it)h(on)h(the)f +(history.)e(*/)485 1176 y(if)j(\(line_read)d(&&)i(*line_read\))581 +1285 y(add_history)e(\(line_read\);)485 1504 y(return)i(\(line_read\);) +390 1614 y(})275 1767 y Fs(This)27 b(function)h(giv)m(es)h(the)f(user)g +(the)g(default)g(b)s(eha)m(viour)g(of)g Fr(TAB)g Fs(completion:)40 +b(completion)30 b(on)e(\014le)150 1877 y(names.)41 b(If)31 +b(y)m(ou)g(do)f(not)h(w)m(an)m(t)g(Readline)h(to)f(complete)h(on)f +(\014lenames,)g(y)m(ou)g(can)f(c)m(hange)i(the)f(binding)150 +1986 y(of)g(the)f Fr(TAB)g Fs(k)m(ey)h(with)f Fr(rl_bind_key\(\))p +Fs(.)390 2139 y Fr(int)47 b(rl_bind_key)e(\(int)h Fk(key)11 +b Fr(,)46 b(rl_command_func_t)d(*)p Fk(function)11 b +Fr(\);)275 2292 y(rl_bind_key\(\))29 b Fs(tak)m(es)35 +b(t)m(w)m(o)g(argumen)m(ts:)47 b Fi(k)m(ey)c Fs(is)33 +b(the)h(c)m(haracter)h(that)f(y)m(ou)g(w)m(an)m(t)g(to)g(bind,)g(and) +150 2402 y Fi(function)39 b Fs(is)f(the)h(address)f(of)h(the)g +(function)g(to)g(call)i(when)c Fi(k)m(ey)48 b Fs(is)39 +b(pressed.)65 b(Binding)38 b Fr(TAB)g Fs(to)i Fr(rl_)150 +2511 y(insert\(\))c Fs(mak)m(es)k Fr(TAB)e Fs(insert)g(itself.)67 +b Fr(rl_bind_key\(\))35 b Fs(returns)j(non-zero)h(if)g +Fi(k)m(ey)47 b Fs(is)39 b(not)g(a)g(v)-5 b(alid)150 2621 +y(ASCI)s(I)29 b(c)m(haracter)j(co)s(de)e(\(b)s(et)m(w)m(een)i(0)f(and)e +(255\).)275 2774 y(Th)m(us,)g(to)i(disable)g(the)f(default)h +Fr(TAB)e Fs(b)s(eha)m(vior,)i(the)g(follo)m(wing)g(su\016ces:)390 +2927 y Fr(rl_bind_key)45 b(\('\\t',)h(rl_insert\);)275 +3080 y Fs(This)25 b(co)s(de)i(should)e(b)s(e)h(executed)h(once)g(at)g +(the)g(start)g(of)f(y)m(our)h(program;)g(y)m(ou)g(migh)m(t)g(write)g(a) +g(func-)150 3190 y(tion)33 b(called)h Fr(initialize_readline\(\))27 +b Fs(whic)m(h)33 b(p)s(erforms)e(this)h(and)h(other)g(desired)f +(initializations,)150 3299 y(suc)m(h)e(as)h(installing)g(custom)g +(completers)g(\(see)g(Section)h(2.6)f([Custom)f(Completers],)h(page)g +(43\).)150 3559 y Fq(2.2)68 b(Custom)45 b(F)-11 b(unctions)150 +3719 y Fs(Readline)28 b(pro)m(vides)f(man)m(y)g(functions)g(for)g +(manipulating)h(the)f(text)h(of)g(the)f(line,)i(but)d(it)i(isn't)f(p)s +(ossible)150 3828 y(to)37 b(an)m(ticipate)i(the)e(needs)f(of)h(all)g +(programs.)59 b(This)36 b(section)h(describ)s(es)f(the)h(v)-5 +b(arious)36 b(functions)h(and)150 3938 y(v)-5 b(ariables)27 +b(de\014ned)e(within)g(the)h(Readline)h(library)f(whic)m(h)g(allo)m(w)h +(a)g(user)e(program)h(to)h(add)e(customized)150 4048 +y(functionalit)m(y)32 b(to)f(Readline.)275 4201 y(Before)37 +b(declaring)g(an)m(y)g(functions)f(that)h(customize)h(Readline's)f(b)s +(eha)m(vior,)h(or)f(using)f(an)m(y)h(func-)150 4310 y(tionalit)m(y)48 +b(Readline)e(pro)m(vides)f(in)g(other)h(co)s(de,)k(an)45 +b(application)i(writer)e(should)g(include)g(the)h(\014le)150 +4420 y Fr(<readline/readline.h>)28 b Fs(in)33 b(an)m(y)h(\014le)f(that) +h(uses)f(Readline's)h(features.)51 b(Since)33 b(some)h(of)g(the)f +(de\014-)150 4529 y(nitions)e(in)g Fr(readline.h)d Fs(use)j(the)h +Fr(stdio)d Fs(library)-8 b(,)32 b(the)f(\014le)h Fr(<stdio.h>)c +Fs(should)i(b)s(e)h(included)f(b)s(efore)150 4639 y Fr(readline.h)p +Fs(.)275 4792 y Fr(readline.h)d Fs(de\014nes)j(a)h(C)f(prepro)s(cessor) +g(v)-5 b(ariable)31 b(that)g(should)f(b)s(e)g(treated)h(as)g(an)g(in)m +(teger,)h Fr(RL_)150 4902 y(READLINE_VERSION)p Fs(,)20 +b(whic)m(h)h(ma)m(y)i(b)s(e)f(used)f(to)i(conditionally)h(compile)f +(application)g(co)s(de)f(dep)s(ending)150 5011 y(on)35 +b(the)g(installed)h(Readline)f(v)m(ersion.)56 b(The)34 +b(v)-5 b(alue)35 b(is)h(a)f(hexadecimal)h(enco)s(ding)f(of)g(the)h(ma)5 +b(jor)35 b(and)150 5121 y(minor)f(v)m(ersion)g(n)m(um)m(b)s(ers)f(of)h +(the)h(library)-8 b(,)35 b(of)f(the)h(form)e(0x)p Fi(MMmm)p +Fs(.)53 b Fi(MM)45 b Fs(is)34 b(the)g(t)m(w)m(o-digit)j(ma)5 +b(jor)150 5230 y(v)m(ersion)29 b(n)m(um)m(b)s(er;)g Fi(mm)f +Fs(is)h(the)g(t)m(w)m(o-digit)j(minor)c(v)m(ersion)i(n)m(um)m(b)s(er.) +38 b(F)-8 b(or)30 b(Readline)g(4.2,)g(for)f(example,)150 +5340 y(the)i(v)-5 b(alue)30 b(of)h Fr(RL_READLINE_VERSION)25 +b Fs(w)m(ould)30 b(b)s(e)g Fr(0x0402)p Fs(.)p eop end +%%Page: 24 28 +TeXDict begin 24 27 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(24)150 +299 y Fh(2.2.1)63 b(Readline)40 b(T)m(yp)s(edefs)150 +446 y Fs(F)-8 b(or)31 b(readabilt)m(y)-8 b(,)32 b(w)m(e)f(declare)h(a)e +(n)m(um)m(b)s(er)f(of)i(new)f(ob)5 b(ject)31 b(t)m(yp)s(es,)g(all)g(p)s +(oin)m(ters)f(to)h(functions.)275 585 y(The)k(reason)h(for)f(declaring) +h(these)h(new)e(t)m(yp)s(es)g(is)h(to)h(mak)m(e)f(it)g(easier)h(to)f +(write)g(co)s(de)g(describing)150 694 y(p)s(oin)m(ters)30 +b(to)h(C)f(functions)g(with)g(appropriately)h(protot)m(yp)s(ed)f +(argumen)m(ts)h(and)f(return)f(v)-5 b(alues.)275 833 +y(F)d(or)37 b(instance,)j(sa)m(y)d(w)m(e)g(w)m(an)m(t)h(to)g(declare)f +(a)h(v)-5 b(ariable)37 b Fi(func)42 b Fs(as)37 b(a)g(p)s(oin)m(ter)g +(to)g(a)h(function)e(whic)m(h)150 943 y(tak)m(es)27 b(t)m(w)m(o)g +Fr(int)e Fs(argumen)m(ts)h(and)f(returns)f(an)i Fr(int)f +Fs(\(this)h(is)f(the)h(t)m(yp)s(e)g(of)g(all)h(of)e(the)h(Readline)h +(bindable)150 1052 y(functions\).)41 b(Instead)30 b(of)g(the)h(classic) +h(C)e(declaration)275 1191 y Fr(int)f(\(*func\)\(\);)150 +1330 y Fs(or)h(the)h(ANSI-C)f(st)m(yle)i(declaration)275 +1468 y Fr(int)d(\(*func\)\(int,)e(int\);)150 1607 y Fs(w)m(e)k(ma)m(y)g +(write)275 1746 y Fr(rl_command_func_t)25 b(*func;)275 +1885 y Fs(The)k(full)h(list)i(of)e(function)g(p)s(oin)m(ter)g(t)m(yp)s +(es)h(a)m(v)-5 b(ailable)33 b(is)150 2051 y Fr(typedef)28 +b(int)i(rl_command_func_t)c(\(int,)i(int\);)150 2160 +y(typedef)g(char)i(*rl_compentry_func_t)24 b(\(const)29 +b(char)g(*,)h(int\);)150 2270 y(typedef)e(char)i +(**rl_completion_func_t)24 b(\(const)29 b(char)g(*,)h(int,)f(int\);)150 +2379 y(typedef)f(char)i(*rl_quote_func_t)c(\(char)i(*,)i(int,)f(char)h +(*\);)150 2489 y(typedef)e(char)i(*rl_dequote_func_t)25 +b(\(char)k(*,)h(int\);)150 2598 y(typedef)e(int)i(rl_compignore_func_t) +25 b(\(char)k(**\);)150 2708 y(typedef)f(void)i(rl_compdisp_func_t)25 +b(\(char)k(**,)g(int,)h(int\);)150 2818 y(typedef)e(int)i +(rl_hook_func_t)c(\(void\);)150 2927 y(typedef)i(int)i(rl_getc_func_t)c +(\(FILE)j(*\);)150 3037 y(typedef)f(int)i(rl_linebuf_func_t)c(\(char)i +(*,)i(int\);)150 3146 y(typedef)e(int)i(rl_intfunc_t)d(\(int\);)150 +3256 y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)150 +3366 y(typedef)h(int)i(rl_icpfunc_t)d(\(char)i(*\);)150 +3475 y(typedef)f(int)i(rl_icppfunc_t)d(\(char)i(**\);)150 +3585 y(typedef)f(void)i(rl_voidfunc_t)c(\(void\);)150 +3694 y(typedef)i(void)i(rl_vintfunc_t)c(\(int\);)150 +3804 y(typedef)i(void)i(rl_vcpfunc_t)d(\(char)i(*\);)150 +3914 y(typedef)f(void)i(rl_vcppfunc_t)c(\(char)j(**\);)150 +4090 y Fh(2.2.2)63 b(W)-10 b(riting)41 b(a)f(New)h(F)-10 +b(unction)150 4237 y Fs(In)30 b(order)h(to)h(write)f(new)g(functions)f +(for)h(Readline,)h(y)m(ou)g(need)e(to)i(kno)m(w)f(the)g(calling)i(con)m +(v)m(en)m(tions)g(for)150 4347 y(k)m(eyb)s(oard-in)m(v)m(ok)m(ed)f +(functions,)d(and)h(the)g(names)g(of)g(the)g(v)-5 b(ariables)31 +b(that)f(describ)s(e)g(the)g(curren)m(t)g(state)150 4456 +y(of)h(the)f(line)h(read)f(so)h(far.)275 4595 y(The)e(calling)j +(sequence)f(for)f(a)h(command)f Fr(foo)g Fs(lo)s(oks)g(lik)m(e)390 +4734 y Fr(int)47 b(foo)g(\(int)f(count,)h(int)f(key\))150 +4872 y Fs(where)35 b Fi(coun)m(t)k Fs(is)d(the)g(n)m(umeric)g(argumen)m +(t)g(\(or)g(1)g(if)g(defaulted\))h(and)e Fi(k)m(ey)44 +b Fs(is)36 b(the)g(k)m(ey)h(that)f(in)m(v)m(ok)m(ed)150 +4982 y(this)30 b(function.)275 5121 y(It)23 b(is)g(completely)h(up)e +(to)i(the)f(function)g(as)g(to)h(what)f(should)f(b)s(e)h(done)f(with)h +(the)g(n)m(umeric)g(argumen)m(t.)150 5230 y(Some)40 b(functions)g(use)f +(it)i(as)f(a)g(rep)s(eat)h(coun)m(t,)i(some)d(as)h(a)f(\015ag,)j(and)c +(others)h(to)h(c)m(ho)s(ose)g(alternate)150 5340 y(b)s(eha)m(vior)i +(\(refreshing)g(the)h(curren)m(t)f(line)h(as)f(opp)s(osed)g(to)h +(refreshing)e(the)i(screen,)j(for)c(example\).)p eop +end +%%Page: 25 29 +TeXDict begin 25 28 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(25)150 +299 y(Some)33 b(c)m(ho)s(ose)h(to)g(ignore)g(it.)50 b(In)32 +b(general,)j(if)f(a)f(function)g(uses)g(the)g(n)m(umeric)g(argumen)m(t) +h(as)f(a)h(rep)s(eat)150 408 y(coun)m(t,)29 b(it)g(should)e(b)s(e)g +(able)h(to)h(do)f(something)g(useful)f(with)h(b)s(oth)f(negativ)m(e)j +(and)d(p)s(ositiv)m(e)i(argumen)m(ts.)150 518 y(A)m(t)i(the)g(v)m(ery)g +(least,)h(it)e(should)g(b)s(e)g(a)m(w)m(are)h(that)g(it)g(can)g(b)s(e)f +(passed)g(a)g(negativ)m(e)j(argumen)m(t.)275 658 y(A)27 +b(command)h(function)f(should)g(return)g(0)h(if)g(its)g(action)h +(completes)g(successfully)-8 b(,)29 b(and)e(a)h(non-zero)150 +768 y(v)-5 b(alue)40 b(if)f(some)g(error)g(o)s(ccurs.)67 +b(This)38 b(is)h(the)g(con)m(v)m(en)m(tion)j(ob)s(ey)m(ed)d(b)m(y)g +(all)h(of)f(the)h(builtin)e(Readline)150 877 y(bindable)30 +b(command)g(functions.)150 1118 y Fq(2.3)68 b(Readline)47 +b(V)-11 b(ariables)150 1278 y Fs(These)30 b(v)-5 b(ariables)31 +b(are)g(a)m(v)-5 b(ailable)33 b(to)e(function)f(writers.)3371 +1473 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_line_buffer)390 +1583 y Fs(This)30 b(is)i(the)f(line)g(gathered)h(so)f(far.)43 +b(Y)-8 b(ou)32 b(are)f(w)m(elcome)i(to)f(mo)s(dify)f(the)g(con)m(ten)m +(ts)i(of)e(the)g(line,)390 1693 y(but)k(see)h(Section)g(2.4.5)h([Allo)m +(wing)h(Undoing],)f(page)f(33.)57 b(The)35 b(function)g +Fr(rl_extend_line_)390 1802 y(buffer)29 b Fs(is)h(a)m(v)-5 +b(ailable)33 b(to)e(increase)g(the)g(memory)f(allo)s(cated)i(to)f +Fr(rl_line_buffer)p Fs(.)3371 1998 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_point)390 2107 y Fs(The)30 b(o\013set)h(of)g(the)f +(curren)m(t)h(cursor)e(p)s(osition)i(in)f Fr(rl_line_buffer)c +Fs(\(the)31 b Fj(p)-5 b(oint)9 b Fs(\).)3371 2303 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(rl_end)390 2413 y Fs(The)27 +b(n)m(um)m(b)s(er)g(of)h(c)m(haracters)h(presen)m(t)f(in)g +Fr(rl_line_buffer)p Fs(.)36 b(When)27 b Fr(rl_point)f +Fs(is)i(at)h(the)f(end)390 2522 y(of)j(the)f(line,)h +Fr(rl_point)d Fs(and)i Fr(rl_end)f Fs(are)h(equal.)3371 +2718 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_mark)390 +2827 y Fs(The)36 b Fi(mark)42 b Fs(\(sa)m(v)m(ed)d(p)s(osition\))e(in)g +(the)g(curren)m(t)f(line.)61 b(If)36 b(set,)k(the)d(mark)f(and)h(p)s +(oin)m(t)f(de\014ne)h(a)390 2937 y Fj(r)-5 b(e)g(gion)p +Fs(.)3371 3133 y([V)d(ariable])-3598 b Fg(int)53 b(rl_done)390 +3242 y Fs(Setting)22 b(this)g(to)g(a)g(non-zero)g(v)-5 +b(alue)23 b(causes)f(Readline)g(to)g(return)f(the)h(curren)m(t)f(line)h +(immediately)-8 b(.)3371 3438 y([V)g(ariable])-3598 b +Fg(int)53 b(rl_num_chars_to_read)390 3548 y Fs(Setting)34 +b(this)e(to)i(a)f(p)s(ositiv)m(e)h(v)-5 b(alue)34 b(b)s(efore)e +(calling)i Fr(readline\(\))d Fs(causes)i(Readline)g(to)h(return)390 +3657 y(after)i(accepting)h(that)g(man)m(y)e(c)m(haracters,)k(rather)d +(than)f(reading)h(up)e(to)j(a)f(c)m(haracter)h(b)s(ound)390 +3767 y(to)31 b Fr(accept-line)p Fs(.)3371 3962 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(rl_pending_input)390 4072 +y Fs(Setting)26 b(this)f(to)h(a)f(v)-5 b(alue)26 b(mak)m(es)g(it)g(the) +f(next)g(k)m(eystrok)m(e)i(read.)39 b(This)24 b(is)i(a)f(w)m(a)m(y)h +(to)g(stu\013)f(a)g(single)390 4182 y(c)m(haracter)32 +b(in)m(to)f(the)g(input)e(stream.)3371 4377 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_dispatching)390 4487 y Fs(Set)24 b(to)h(a)g(non-zero)g +(v)-5 b(alue)24 b(if)h(a)f(function)g(is)g(b)s(eing)g(called)i(from)d +(a)i(k)m(ey)g(binding;)g(zero)g(otherwise.)390 4596 y(Application)37 +b(functions)e(can)h(test)h(this)e(to)i(disco)m(v)m(er)g(whether)e(they) +h(w)m(ere)g(called)h(directly)f(or)390 4706 y(b)m(y)30 +b(Readline's)h(dispatc)m(hing)g(mec)m(hanism.)3371 4902 +y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_erase_empty_line)390 +5011 y Fs(Setting)47 b(this)e(to)i(a)f(non-zero)h(v)-5 +b(alue)46 b(causes)h(Readline)f(to)h(completely)g(erase)g(the)f(curren) +m(t)390 5121 y(line,)f(including)c(an)m(y)g(prompt,)j(an)m(y)d(time)h +(a)g(newline)f(is)h(t)m(yp)s(ed)f(as)g(the)h(only)f(c)m(haracter)i(on) +390 5230 y(an)36 b(otherwise-empt)m(y)i(line.)58 b(The)36 +b(cursor)g(is)g(mo)m(v)m(ed)h(to)g(the)g(b)s(eginning)e(of)i(the)f +(newly-blank)390 5340 y(line.)p eop end +%%Page: 26 30 +TeXDict begin 26 29 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(26)3371 +299 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_prompt)390 +408 y Fs(The)26 b(prompt)f(Readline)i(uses.)38 b(This)26 +b(is)g(set)h(from)e(the)i(argumen)m(t)f(to)h Fr(readline\(\))p +Fs(,)d(and)i(should)390 518 y(not)h(b)s(e)f(assigned)h(to)h(directly)-8 +b(.)41 b(The)26 b Fr(rl_set_prompt\(\))d Fs(function)j(\(see)i(Section) +g(2.4.6)h([Redis-)390 628 y(pla)m(y],)i(page)h(34\))f(ma)m(y)g(b)s(e)f +(used)f(to)j(mo)s(dify)d(the)i(prompt)e(string)h(after)h(calling)h +Fr(readline\(\))p Fs(.)3371 814 y([V)-8 b(ariable])-3598 +b Fg(char)54 b(*)e(rl_display_prompt)390 924 y Fs(The)31 +b(string)h(displa)m(y)m(ed)g(as)g(the)f(prompt.)44 b(This)31 +b(is)g(usually)h(iden)m(tical)h(to)f Fi(rl)p 3029 924 +28 4 v 40 w(prompt)r Fs(,)f(but)g(ma)m(y)390 1033 y(b)s(e)j(c)m(hanged) +g(temp)s(orarily)h(b)m(y)f(functions)g(that)g(use)g(the)h(prompt)e +(string)h(as)h(a)f(message)i(area,)390 1143 y(suc)m(h)30 +b(as)h(incremen)m(tal)g(searc)m(h.)3371 1329 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(rl_already_prompted)390 +1439 y Fs(If)36 b(an)g(application)i(wishes)d(to)i(displa)m(y)g(the)f +(prompt)g(itself,)i(rather)f(than)f(ha)m(v)m(e)h(Readline)g(do)390 +1548 y(it)c(the)g(\014rst)f(time)i Fr(readline\(\))c +Fs(is)i(called,)j(it)e(should)f(set)h(this)g(v)-5 b(ariable)34 +b(to)f(a)g(non-zero)g(v)-5 b(alue)390 1658 y(after)38 +b(displa)m(ying)h(the)f(prompt.)63 b(The)37 b(prompt)g(m)m(ust)h(also)h +(b)s(e)e(passed)g(as)i(the)f(argumen)m(t)g(to)390 1767 +y Fr(readline\(\))30 b Fs(so)j(the)h(redispla)m(y)f(functions)f(can)i +(up)s(date)e(the)h(displa)m(y)g(prop)s(erly)-8 b(.)48 +b(The)32 b(calling)390 1877 y(application)g(is)e(resp)s(onsible)g(for)g +(managing)h(the)f(v)-5 b(alue;)31 b(Readline)g(nev)m(er)g(sets)g(it.) +3371 2063 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_library_version)390 2173 y Fs(The)30 b(v)m(ersion)h(n)m(um)m(b)s +(er)e(of)h(this)h(revision)f(of)h(the)f(library)-8 b(.)3371 +2359 y([V)g(ariable])-3598 b Fg(int)53 b(rl_readline_version)390 +2469 y Fs(An)34 b(in)m(teger)h(enco)s(ding)f(the)g(curren)m(t)g(v)m +(ersion)h(of)f(the)g(library)-8 b(.)52 b(The)34 b(enco)s(ding)g(is)g +(of)g(the)g(form)390 2578 y(0x)p Fi(MMmm)p Fs(,)39 b(where)d +Fi(MM)47 b Fs(is)36 b(the)h(t)m(w)m(o-digit)i(ma)5 b(jor)36 +b(v)m(ersion)h(n)m(um)m(b)s(er,)g(and)f Fi(mm)g Fs(is)h(the)f(t)m(w)m +(o-)390 2688 y(digit)i(minor)f(v)m(ersion)h(n)m(um)m(b)s(er.)60 +b(F)-8 b(or)38 b(example,)i(for)d(Readline-4.2,)k Fr +(rl_readline_version)390 2798 y Fs(w)m(ould)30 b(ha)m(v)m(e)i(the)e(v) +-5 b(alue)31 b(0x0402.)3371 2984 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_gnu_readline_p)390 3093 y Fs(Alw)m(a)m(ys)32 +b(set)f(to)g(1,)g(denoting)f(that)h(this)g(is)f Fl(gnu)g +Fs(readline)h(rather)f(than)g(some)h(em)m(ulation.)3371 +3280 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_terminal_name)390 3389 y Fs(The)28 b(terminal)g(t)m(yp)s(e,)h(used) +e(for)h(initialization.)43 b(If)28 b(not)g(set)h(b)m(y)e(the)i +(application,)h(Readline)f(sets)390 3499 y(this)h(to)h(the)g(v)-5 +b(alue)31 b(of)f(the)h Fr(TERM)e Fs(en)m(vironmen)m(t)i(v)-5 +b(ariable)31 b(the)g(\014rst)e(time)j(it)e(is)h(called.)3371 +3685 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_readline_name)390 3795 y Fs(This)30 b(v)-5 b(ariable)32 +b(is)g(set)f(to)h(a)g(unique)e(name)h(b)m(y)g(eac)m(h)i(application)f +(using)f(Readline.)44 b(The)30 b(v)-5 b(alue)390 3904 +y(allo)m(ws)29 b(conditional)h(parsing)d(of)h(the)h(inputrc)e(\014le)h +(\(see)h(Section)g(1.3.2)g([Conditional)g(Init)f(Con-)390 +4014 y(structs],)j(page)g(10\).)3371 4200 y([V)-8 b(ariable])-3598 +b Fg(FILE)54 b(*)e(rl_instream)390 4310 y Fs(The)40 b(stdio)i(stream)f +(from)g(whic)m(h)f(Readline)i(reads)f(input.)71 b(If)41 +b Fr(NULL)p Fs(,)i(Readline)e(defaults)g(to)390 4419 +y Fi(stdin)p Fs(.)3371 4606 y([V)-8 b(ariable])-3598 +b Fg(FILE)54 b(*)e(rl_outstream)390 4715 y Fs(The)34 +b(stdio)h(stream)f(to)i(whic)m(h)e(Readline)h(p)s(erforms)e(output.)52 +b(If)34 b Fr(NULL)p Fs(,)h(Readline)g(defaults)f(to)390 +4825 y Fi(stdout)r Fs(.)3371 5011 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_prefer_env_winsize)390 5121 y Fs(If)28 +b(non-zero,)h(Readline)g(giv)m(es)h(v)-5 b(alues)29 b(found)e(in)h(the) +g Fr(LINES)f Fs(and)h Fr(COLUMNS)e Fs(en)m(vironmen)m(t)j(v)-5 +b(ari-)390 5230 y(ables)41 b(greater)h(precedence)g(than)e(v)-5 +b(alues)41 b(fetc)m(hed)h(from)e(the)h(k)m(ernel)h(when)e(computing)h +(the)390 5340 y(screen)30 b(dimensions.)p eop end +%%Page: 27 31 +TeXDict begin 27 30 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(27)3371 +299 y([V)-8 b(ariable])-3598 b Fg(rl_command_func_t)57 +b(*)c(rl_last_func)390 408 y Fs(The)34 b(address)g(of)h(the)g(last)h +(command)e(function)g(Readline)i(executed.)55 b(Ma)m(y)35 +b(b)s(e)g(used)f(to)h(test)390 518 y(whether)30 b(or)g(not)h(a)f +(function)h(is)f(b)s(eing)g(executed)h(t)m(wice)h(in)e(succession,)h +(for)f(example.)3371 726 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t) +57 b(*)52 b(rl_startup_hook)390 836 y Fs(If)34 b(non-zero,)i(this)e(is) +h(the)f(address)f(of)i(a)g(function)f(to)h(call)g(just)f(b)s(efore)g +Fr(readline)e Fs(prin)m(ts)i(the)390 945 y(\014rst)c(prompt.)3371 +1154 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t)57 +b(*)52 b(rl_pre_input_hook)390 1263 y Fs(If)35 b(non-zero,)j(this)d(is) +g(the)h(address)f(of)g(a)h(function)f(to)i(call)f(after)g(the)g +(\014rst)f(prompt)f(has)i(b)s(een)390 1373 y(prin)m(ted)30 +b(and)g(just)f(b)s(efore)h Fr(readline)f Fs(starts)h(reading)h(input)e +(c)m(haracters.)3371 1581 y([V)-8 b(ariable])-3598 b +Fg(rl_hook_func_t)57 b(*)52 b(rl_event_hook)390 1691 +y Fs(If)40 b(non-zero,)k(this)d(is)f(the)h(address)f(of)h(a)g(function) +f(to)h(call)h(p)s(erio)s(dically)f(when)f(Readline)h(is)390 +1800 y(w)m(aiting)30 b(for)f(terminal)h(input.)39 b(By)30 +b(default,)g(this)f(will)g(b)s(e)g(called)h(at)g(most)f(ten)h(times)f +(a)h(second)390 1910 y(if)g(there)h(is)f(no)h(k)m(eyb)s(oard)f(input.) +3371 2118 y([V)-8 b(ariable])-3598 b Fg(rl_getc_func_t)57 +b(*)52 b(rl_getc_function)390 2228 y Fs(If)30 b(non-zero,)h(Readline)g +(will)g(call)h(indirectly)e(through)g(this)h(p)s(oin)m(ter)f(to)h(get)h +(a)e(c)m(haracter)i(from)390 2337 y(the)39 b(input)e(stream.)65 +b(By)39 b(default,)i(it)e(is)f(set)h(to)g Fr(rl_getc)p +Fs(,)g(the)g(default)f(Readline)h(c)m(haracter)390 2447 +y(input)29 b(function)h(\(see)i(Section)f(2.4.8)h([Character)f(Input],) +f(page)h(36\).)3371 2655 y([V)-8 b(ariable])-3598 b Fg(rl_voidfunc_t)56 +b(*)d(rl_redisplay_function)390 2765 y Fs(If)36 b(non-zero,)i(Readline) +e(will)h(call)g(indirectly)f(through)g(this)g(p)s(oin)m(ter)g(to)g(up)s +(date)g(the)g(displa)m(y)390 2874 y(with)27 b(the)g(curren)m(t)g(con)m +(ten)m(ts)h(of)f(the)h(editing)f(bu\013er.)39 b(By)27 +b(default,)h(it)g(is)f(set)g(to)h Fr(rl_redisplay)p Fs(,)390 +2984 y(the)j(default)f(Readline)h(redispla)m(y)g(function)f(\(see)h +(Section)g(2.4.6)h([Redispla)m(y],)g(page)f(34\).)3371 +3192 y([V)-8 b(ariable])-3598 b Fg(rl_vintfunc_t)56 b(*)d +(rl_prep_term_function)390 3302 y Fs(If)24 b(non-zero,)i(Readline)e +(will)h(call)g(indirectly)g(through)e(this)h(p)s(oin)m(ter)g(to)h +(initialize)h(the)e(terminal.)390 3411 y(The)37 b(function)f(tak)m(es)j +(a)e(single)h(argumen)m(t,)i(an)d Fr(int)f Fs(\015ag)h(that)h(sa)m(ys)g +(whether)e(or)h(not)g(to)h(use)390 3521 y(eigh)m(t-bit)e(c)m +(haracters.)53 b(By)35 b(default,)g(this)f(is)g(set)h(to)g +Fr(rl_prep_terminal)29 b Fs(\(see)35 b(Section)g(2.4.9)390 +3630 y([T)-8 b(erminal)31 b(Managemen)m(t],)i(page)e(36\).)3371 +3839 y([V)-8 b(ariable])-3598 b Fg(rl_voidfunc_t)56 b(*)d +(rl_deprep_term_functio)q(n)390 3948 y Fs(If)36 b(non-zero,)j(Readline) +e(will)g(call)h(indirectly)f(through)f(this)g(p)s(oin)m(ter)h(to)g +(reset)g(the)g(terminal.)390 4058 y(This)d(function)h(should)f(undo)g +(the)h(e\013ects)h(of)f Fr(rl_prep_term_function)p Fs(.)49 +b(By)35 b(default,)i(this)390 4167 y(is)30 b(set)h(to)g +Fr(rl_deprep_terminal)26 b Fs(\(see)31 b(Section)g(2.4.9)i([T)-8 +b(erminal)30 b(Managemen)m(t],)j(page)e(36\).)3371 4376 +y([V)-8 b(ariable])-3598 b Fg(Keymap)54 b(rl_executing_keymap)390 +4485 y Fs(This)35 b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m +(eymap)h(\(see)g(Section)f(2.4.2)i([Keymaps],)g(page)e(30\))i(in)d +(whic)m(h)390 4595 y(the)c(curren)m(tly)f(executing)i(readline)e +(function)g(w)m(as)h(found.)3371 4803 y([V)-8 b(ariable])-3598 +b Fg(Keymap)54 b(rl_binding_keymap)390 4913 y Fs(This)35 +b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m(eymap)h(\(see)g +(Section)f(2.4.2)i([Keymaps],)g(page)e(30\))i(in)d(whic)m(h)390 +5022 y(the)c(last)g(k)m(ey)g(binding)e(o)s(ccurred.)3371 +5230 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_executing_macro)390 +5340 y Fs(This)30 b(v)-5 b(ariable)31 b(is)f(set)h(to)g(the)g(text)g +(of)g(an)m(y)f(curren)m(tly-executing)i(macro.)p eop +end +%%Page: 28 32 +TeXDict begin 28 31 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(28)3371 +299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_readline_state)390 +408 y Fs(A)35 b(v)-5 b(ariable)35 b(with)f(bit)g(v)-5 +b(alues)35 b(that)g(encapsulate)h(the)e(curren)m(t)h(Readline)g(state.) +54 b(A)34 b(bit)h(is)f(set)390 518 y(with)k(the)g Fr(RL_SETSTATE)c +Fs(macro,)41 b(and)c(unset)h(with)f(the)h Fr(RL_UNSETSTATE)d +Fs(macro.)63 b(Use)39 b(the)390 628 y Fr(RL_ISSTATE)34 +b Fs(macro)k(to)g(test)g(whether)f(a)h(particular)f(state)i(bit)e(is)g +(set.)62 b(Curren)m(t)36 b(state)j(bits)390 737 y(include:)390 +904 y Fr(RL_STATE_NONE)870 1013 y Fs(Readline)31 b(has)f(not)h(y)m(et)g +(b)s(een)f(called,)i(nor)e(has)g(it)h(b)s(egun)e(to)i(in)m(tialize.)390 +1178 y Fr(RL_STATE_INITIALIZING)870 1287 y Fs(Readline)g(is)f +(initializing)j(its)e(in)m(ternal)g(data)g(structures.)390 +1452 y Fr(RL_STATE_INITIALIZED)870 1561 y Fs(Readline)g(has)f +(completed)h(its)g(initialization.)390 1725 y Fr(RL_STATE_TERMPREPPED) +870 1835 y Fs(Readline)e(has)g(mo)s(di\014ed)e(the)i(terminal)g(mo)s +(des)f(to)i(do)e(its)i(o)m(wn)e(input)g(and)g(redis-)870 +1945 y(pla)m(y)-8 b(.)390 2109 y Fr(RL_STATE_READCMD)870 +2218 y Fs(Readline)31 b(is)f(reading)h(a)g(command)f(from)g(the)g(k)m +(eyb)s(oard.)390 2383 y Fr(RL_STATE_METANEXT)870 2492 +y Fs(Readline)h(is)f(reading)h(more)f(input)g(after)h(reading)f(the)h +(meta-pre\014x)f(c)m(haracter.)390 2656 y Fr(RL_STATE_DISPATCHING)870 +2766 y Fs(Readline)h(is)f(dispatc)m(hing)h(to)g(a)g(command.)390 +2930 y Fr(RL_STATE_MOREINPUT)870 3040 y Fs(Readline)g(is)f(reading)h +(more)f(input)g(while)g(executing)i(an)e(editing)h(command.)390 +3204 y Fr(RL_STATE_ISEARCH)870 3314 y Fs(Readline)g(is)f(p)s(erforming) +g(an)g(incremen)m(tal)i(history)e(searc)m(h.)390 3478 +y Fr(RL_STATE_NSEARCH)870 3587 y Fs(Readline)h(is)f(p)s(erforming)g(a)g +(non-incremen)m(tal)i(history)e(searc)m(h.)390 3752 y +Fr(RL_STATE_SEARCH)870 3861 y Fs(Readline)21 b(is)f(searc)m(hing)i(bac) +m(kw)m(ard)e(or)h(forw)m(ard)e(through)h(the)h(history)f(for)g(a)h +(string.)390 4026 y Fr(RL_STATE_NUMERICARG)870 4135 y +Fs(Readline)31 b(is)f(reading)h(a)g(n)m(umeric)f(argumen)m(t.)390 +4299 y Fr(RL_STATE_MACROINPUT)870 4409 y Fs(Readline)25 +b(is)f(curren)m(tly)g(getting)i(its)f(input)e(from)h(a)g +(previously-de\014ned)f(k)m(eyb)s(oard)870 4519 y(macro.)390 +4683 y Fr(RL_STATE_MACRODEF)870 4792 y Fs(Readline)31 +b(is)f(curren)m(tly)h(reading)f(c)m(haracters)i(de\014ning)e(a)g(k)m +(eyb)s(oard)h(macro.)390 4957 y Fr(RL_STATE_OVERWRITE)870 +5066 y Fs(Readline)g(is)f(in)g(o)m(v)m(erwrite)i(mo)s(de.)390 +5230 y Fr(RL_STATE_COMPLETING)870 5340 y Fs(Readline)f(is)f(p)s +(erforming)g(w)m(ord)g(completion.)p eop end +%%Page: 29 33 +TeXDict begin 29 32 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(29)390 +299 y Fr(RL_STATE_SIGHANDLER)870 408 y Fs(Readline)31 +b(is)f(curren)m(tly)h(executing)g(the)g(readline)g(signal)g(handler.) +390 563 y Fr(RL_STATE_UNDOING)870 673 y Fs(Readline)g(is)f(p)s +(erforming)g(an)g(undo.)390 827 y Fr(RL_STATE_INPUTPENDING)870 +937 y Fs(Readline)h(has)f(input)g(p)s(ending)f(due)g(to)i(a)g(call)h +(to)f Fr(rl_execute_next\(\))p Fs(.)390 1092 y Fr(RL_STATE_TTYCSAVED) +870 1201 y Fs(Readline)g(has)f(sa)m(v)m(ed)i(the)e(v)-5 +b(alues)31 b(of)f(the)h(terminal's)g(sp)s(ecial)g(c)m(haracters.)390 +1356 y Fr(RL_STATE_CALLBACK)870 1466 y Fs(Readline)44 +b(is)f(curren)m(tly)g(using)f(the)h(alternate)i(\(callbac)m(k\))h(in)m +(terface)e(\(see)g(Sec-)870 1575 y(tion)31 b(2.4.12)h([Alternate)h(In)m +(terface],)f(page)f(39\).)390 1730 y Fr(RL_STATE_VIMOTION)870 +1839 y Fs(Readline)g(is)f(reading)h(the)f(argumen)m(t)h(to)g(a)g(vi-mo) +s(de)g Fr(")p Fs(motion)p Fr(")f Fs(command.)390 1994 +y Fr(RL_STATE_MULTIKEY)870 2104 y Fs(Readline)h(is)f(reading)h(a)g(m)m +(ultiple-k)m(eystrok)m(e)i(command.)390 2258 y Fr(RL_STATE_VICMDONCE) +870 2368 y Fs(Readline)40 b(has)f(en)m(tered)g(vi)g(command)g(\(mo)m(v) +m(emen)m(t\))j(mo)s(de)d(at)h(least)g(one)f(time)870 +2478 y(during)29 b(the)i(curren)m(t)f(call)i(to)f Fr(readline\(\))p +Fs(.)390 2632 y Fr(RL_STATE_DONE)870 2742 y Fs(Readline)d(has)g(read)f +(a)i(k)m(ey)f(sequence)g(b)s(ound)e(to)i Fr(accept-line)d +Fs(and)i(is)h(ab)s(out)f(to)870 2852 y(return)i(the)i(line)g(to)g(the)f +(caller.)3371 3029 y([V)-8 b(ariable])-3598 b Fg(int)53 +b(rl_explicit_arg)390 3138 y Fs(Set)39 b(to)g(a)h(non-zero)f(v)-5 +b(alue)39 b(if)g(an)g(explicit)h(n)m(umeric)e(argumen)m(t)i(w)m(as)f +(sp)s(eci\014ed)f(b)m(y)g(the)h(user.)390 3248 y(Only)30 +b(v)-5 b(alid)30 b(in)h(a)f(bindable)g(command)g(function.)3371 +3425 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_numeric_arg)390 +3535 y Fs(Set)45 b(to)h(the)g(v)-5 b(alue)46 b(of)f(an)m(y)h(n)m +(umeric)f(argumen)m(t)h(explicitly)h(sp)s(eci\014ed)d(b)m(y)h(the)h +(user)e(b)s(efore)390 3644 y(executing)27 b(the)f(curren)m(t)g +(Readline)h(function.)38 b(Only)26 b(v)-5 b(alid)26 b(in)g(a)g +(bindable)f(command)h(function.)3371 3822 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_editing_mode)390 3931 y Fs(Set)25 b(to)h(a)g(v)-5 +b(alue)25 b(denoting)h(Readline's)f(curren)m(t)g(editing)h(mo)s(de.)39 +b(A)25 b(v)-5 b(alue)25 b(of)h Fi(1)32 b Fs(means)25 +b(Readline)390 4041 y(is)30 b(curren)m(tly)h(in)f(emacs)h(mo)s(de;)f +Fi(0)38 b Fs(means)31 b(that)f(vi)h(mo)s(de)f(is)g(activ)m(e.)150 +4269 y Fq(2.4)68 b(Readline)47 b(Con)l(v)l(enience)f(F)-11 +b(unctions)150 4490 y Fh(2.4.1)63 b(Naming)41 b(a)g(F)-10 +b(unction)150 4637 y Fs(The)24 b(user)h(can)g(dynamically)g(c)m(hange)h +(the)f(bindings)f(of)h(k)m(eys)h(while)e(using)h(Readline.)39 +b(This)24 b(is)h(done)g(b)m(y)150 4747 y(represen)m(ting)30 +b(the)h(function)f(with)g(a)g(descriptiv)m(e)h(name.)41 +b(The)30 b(user)f(is)i(able)f(to)h(t)m(yp)s(e)g(the)f(descriptiv)m(e) +150 4857 y(name)g(when)g(referring)g(to)h(the)f(function.)41 +b(Th)m(us,)29 b(in)h(an)h(init)f(\014le,)h(one)g(migh)m(t)g(\014nd)390 +4989 y Fr(Meta-Rubout:)92 b(backward-kill-word)275 5121 +y Fs(This)33 b(binds)f(the)j(k)m(eystrok)m(e)h Fr(Meta-Rubout)31 +b Fs(to)k(the)f(function)g Fj(descriptively)43 b Fs(named)33 +b Fr(backward-)150 5230 y(kill-word)p Fs(.)59 b(Y)-8 +b(ou,)39 b(as)f(the)f(programmer,)i(should)d(bind)g(the)h(functions)g +(y)m(ou)h(write)f(to)h(descriptiv)m(e)150 5340 y(names)30 +b(as)h(w)m(ell.)42 b(Readline)31 b(pro)m(vides)f(a)h(function)f(for)g +(doing)g(that:)p eop end +%%Page: 30 34 +TeXDict begin 30 33 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(30)3350 +299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_add_defun)c +Ff(\()p Fi(const)32 b(c)m(har)e(*name,)h(rl)p 1885 299 +28 4 v 40 w(command)p 2309 299 V 40 w(func)p 2519 299 +V 39 w(t)g(*function,)g(in)m(t)565 408 y(k)m(ey)p Ff(\))390 +518 y Fs(Add)j Fi(name)41 b Fs(to)36 b(the)f(list)h(of)g(named)e +(functions.)55 b(Mak)m(e)37 b Fi(function)e Fs(b)s(e)g(the)g(function)g +(that)h(gets)390 628 y(called.)42 b(If)30 b Fi(k)m(ey)39 +b Fs(is)30 b(not)h(-1,)g(then)f(bind)f(it)i(to)g Fi(function)f +Fs(using)g Fr(rl_bind_key\(\))p Fs(.)275 813 y(Using)g(this)g(function) +g(alone)h(is)f(su\016cien)m(t)g(for)g(most)h(applications.)42 +b(It)30 b(is)g(the)g(recommended)g(w)m(a)m(y)150 923 +y(to)e(add)e(a)h(few)g(functions)g(to)g(the)g(default)h(functions)e +(that)i(Readline)f(has)g(built)g(in.)39 b(If)26 b(y)m(ou)i(need)e(to)i +(do)150 1032 y(something)34 b(other)g(than)f(adding)h(a)g(function)f +(to)h(Readline,)i(y)m(ou)e(ma)m(y)g(need)f(to)i(use)e(the)h(underlying) +150 1142 y(functions)c(describ)s(ed)f(b)s(elo)m(w.)150 +1342 y Fh(2.4.2)63 b(Selecting)41 b(a)f(Keymap)150 1489 +y Fs(Key)f(bindings)e(tak)m(e)j(place)g(on)f(a)g Fi(k)m(eymap)p +Fs(.)66 b(The)38 b(k)m(eymap)h(is)g(the)g(asso)s(ciation)h(b)s(et)m(w)m +(een)f(the)g(k)m(eys)150 1598 y(that)29 b(the)g(user)e(t)m(yp)s(es)i +(and)f(the)g(functions)g(that)h(get)h(run.)39 b(Y)-8 +b(ou)29 b(can)f(mak)m(e)i(y)m(our)e(o)m(wn)h(k)m(eymaps,)g(cop)m(y)150 +1708 y(existing)i(k)m(eymaps,)g(and)f(tell)i(Readline)f(whic)m(h)f(k)m +(eymap)h(to)g(use.)3350 1894 y([F)-8 b(unction])-3599 +b Fg(Keymap)54 b(rl_make_bare_keymap)d Ff(\()p Fi(v)m(oid)p +Ff(\))390 2003 y Fs(Returns)23 b(a)i(new,)g(empt)m(y)f(k)m(eymap.)40 +b(The)23 b(space)i(for)f(the)g(k)m(eymap)h(is)f(allo)s(cated)i(with)e +Fr(malloc\(\))p Fs(;)390 2113 y(the)31 b(caller)g(should)f(free)g(it)h +(b)m(y)f(calling)i Fr(rl_free_keymap\(\))26 b Fs(when)j(done.)3350 +2298 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_copy_keymap)c +Ff(\()p Fi(Keymap)30 b(map)p Ff(\))390 2408 y Fs(Return)g(a)g(new)g(k)m +(eymap)h(whic)m(h)f(is)h(a)f(cop)m(y)h(of)g Fi(map)s +Fs(.)3350 2594 y([F)-8 b(unction])-3599 b Fg(Keymap)54 +b(rl_make_keymap)c Ff(\()p Fi(v)m(oid)p Ff(\))390 2703 +y Fs(Return)31 b(a)g(new)g(k)m(eymap)h(with)f(the)h(prin)m(ting)f(c)m +(haracters)i(b)s(ound)c(to)j(rl)p 2909 2703 V 40 w(insert,)g(the)g(lo)m +(w)m(ercase)390 2813 y(Meta)24 b(c)m(haracters)g(b)s(ound)d(to)i(run)e +(their)i(equiv)-5 b(alen)m(ts,)25 b(and)d(the)h(Meta)h(digits)f(b)s +(ound)e(to)i(pro)s(duce)390 2922 y(n)m(umeric)30 b(argumen)m(ts.)3350 +3108 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_discard_keymap)c +Ff(\()p Fi(Keymap)31 b(k)m(eymap)p Ff(\))390 3217 y Fs(F)-8 +b(ree)30 b(the)f(storage)h(asso)s(ciated)h(with)d(the)h(data)h(in)f +Fi(k)m(eymap)s Fs(.)40 b(The)28 b(caller)j(should)c(free)i +Fi(k)m(eymap)s Fs(.)3350 3403 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_free_keymap)49 b Ff(\()p Fi(Keymap)31 +b(k)m(eymap)p Ff(\))390 3513 y Fs(F)-8 b(ree)32 b(all)f(storage)h(asso) +s(ciated)g(with)f Fi(k)m(eymap)s Fs(.)41 b(This)30 b(calls)i +Fr(rl_discard_keymap)26 b Fs(to)31 b(free)g(sub-)390 +3622 y(ordindate)f(k)m(eymaps)h(and)f(macros.)275 3808 +y(Readline)45 b(has)g(sev)m(eral)i(in)m(ternal)f(k)m(eymaps.)86 +b(These)45 b(functions)g(allo)m(w)h(y)m(ou)g(to)g(c)m(hange)g(whic)m(h) +150 3917 y(k)m(eymap)31 b(is)f(activ)m(e.)3350 4103 y([F)-8 +b(unction])-3599 b Fg(Keymap)54 b(rl_get_keymap)c Ff(\()p +Fi(v)m(oid)p Ff(\))390 4213 y Fs(Returns)29 b(the)i(curren)m(tly)f +(activ)m(e)j(k)m(eymap.)3350 4398 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_set_keymap)49 b Ff(\()p Fi(Keymap)30 +b(k)m(eymap)p Ff(\))390 4508 y Fs(Mak)m(es)i Fi(k)m(eymap)h +Fs(the)e(curren)m(tly)f(activ)m(e)j(k)m(eymap.)3350 4693 +y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_get_keymap_by_name)e +Ff(\()p Fi(const)31 b(c)m(har)g(*name)p Ff(\))390 4803 +y Fs(Return)h(the)h(k)m(eymap)h(matc)m(hing)f Fi(name)5 +b Fs(.)49 b Fi(name)38 b Fs(is)33 b(one)g(whic)m(h)g(w)m(ould)f(b)s(e)g +(supplied)g(in)h(a)g Fr(set)390 4912 y(keymap)c Fs(inputrc)g(line)i +(\(see)g(Section)g(1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)3350 +5098 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_get_keymap_name)f +Ff(\()p Fi(Keymap)31 b(k)m(eymap)p Ff(\))390 5208 y Fs(Return)h(the)h +(name)h(matc)m(hing)g Fi(k)m(eymap)s Fs(.)49 b Fi(name)38 +b Fs(is)33 b(one)g(whic)m(h)g(w)m(ould)g(b)s(e)f(supplied)g(in)g(a)i +Fr(set)390 5317 y(keymap)29 b Fs(inputrc)g(line)i(\(see)g(Section)g +(1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)p eop +end +%%Page: 31 35 +TeXDict begin 31 34 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(31)150 +299 y Fh(2.4.3)63 b(Binding)42 b(Keys)150 446 y Fs(Key)34 +b(sequences)g(are)h(asso)s(ciate)h(with)e(functions)f(through)h(the)g +(k)m(eymap.)52 b(Readline)35 b(has)f(sev)m(eral)h(in-)150 +555 y(ternal)30 b(k)m(eymaps:)40 b Fr(emacs_standard_keymap)p +Fs(,)24 b Fr(emacs_meta_keymap)p Fs(,)h Fr(emacs_ctlx_keymap)p +Fs(,)g Fr(vi_)150 665 y(movement_keymap)p Fs(,)41 b(and)h +Fr(vi_insertion_keymap)p Fs(.)71 b Fr(emacs_standard_keymap)37 +b Fs(is)42 b(the)g(default,)150 775 y(and)30 b(the)g(examples)h(in)f +(this)h(man)m(ual)f(assume)g(that.)275 920 y(Since)d +Fr(readline\(\))e Fs(installs)j(a)g(set)g(of)g(default)g(k)m(ey)g +(bindings)f(the)h(\014rst)e(time)j(it)f(is)f(called,)j(there)e(is)150 +1030 y(alw)m(a)m(ys)34 b(the)f(danger)f(that)i(a)f(custom)g(binding)e +(installed)j(b)s(efore)e(the)h(\014rst)e(call)j(to)g +Fr(readline\(\))c Fs(will)150 1140 y(b)s(e)25 b(o)m(v)m(erridden.)39 +b(An)26 b(alternate)h(mec)m(hanism)f(is)g(to)g(install)h(custom)f(k)m +(ey)g(bindings)f(in)g(an)h(initialization)150 1249 y(function)37 +b(assigned)g(to)h(the)f Fr(rl_startup_hook)c Fs(v)-5 +b(ariable)38 b(\(see)g(Section)g(2.3)g([Readline)g(V)-8 +b(ariables],)150 1359 y(page)31 b(25\).)275 1505 y(These)f(functions)g +(manage)h(k)m(ey)g(bindings.)3350 1712 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_bind_key)c Ff(\()p Fi(in)m(t)31 b(k)m(ey)-8 +b(,)32 b(rl)p 1403 1712 28 4 v 40 w(command)p 1827 1712 +V 40 w(func)p 2037 1712 V 39 w(t)f(*function)p Ff(\))390 +1821 y Fs(Binds)h Fi(k)m(ey)42 b Fs(to)34 b Fi(function)e +Fs(in)h(the)g(curren)m(tly)g(activ)m(e)i(k)m(eymap.)49 +b(Returns)32 b(non-zero)i(in)f(the)g(case)390 1931 y(of)e(an)f(in)m(v) +-5 b(alid)31 b Fi(k)m(ey)8 b Fs(.)3350 2138 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_bind_key_in_map)e Ff(\()p Fi(in)m(t)31 +b(k)m(ey)-8 b(,)32 b(rl)p 1769 2138 V 40 w(command)p +2193 2138 V 40 w(func)p 2403 2138 V 39 w(t)f(*function,)565 +2247 y(Keymap)f(map)p Ff(\))390 2357 y Fs(Bind)g Fi(k)m(ey)39 +b Fs(to)31 b Fi(function)f Fs(in)g Fi(map)s Fs(.)40 b(Returns)30 +b(non-zero)h(in)f(the)g(case)i(of)e(an)g(in)m(v)-5 b(alid)31 +b Fi(k)m(ey)8 b Fs(.)3350 2564 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_bind_key_if_unboun)q(d)e Ff(\()p Fi(in)m(t)32 +b(k)m(ey)-8 b(,)31 b(rl)p 1978 2564 V 40 w(command)p +2402 2564 V 40 w(func)p 2612 2564 V 39 w(t)g(*function)p +Ff(\))390 2673 y Fs(Binds)43 b Fi(k)m(ey)53 b Fs(to)45 +b Fi(function)e Fs(if)h(it)h(is)f(not)g(already)g(b)s(ound)e(in)i(the)g +(curren)m(tly)g(activ)m(e)i(k)m(eymap.)390 2783 y(Returns)29 +b(non-zero)i(in)f(the)h(case)g(of)g(an)f(in)m(v)-5 b(alid)31 +b Fi(k)m(ey)39 b Fs(or)30 b(if)h Fi(k)m(ey)39 b Fs(is)30 +b(already)h(b)s(ound.)3350 2990 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_bind_key_if_unboun)q(d_in)q(_ma)q(p)e +Ff(\()p Fi(in)m(t)32 b(k)m(ey)-8 b(,)32 b(rl)p 2345 2990 +V 39 w(command)p 2768 2990 V 40 w(func)p 2978 2990 V +39 w(t)565 3100 y(*function,)f(Keymap)f(map)p Ff(\))390 +3209 y Fs(Binds)d Fi(k)m(ey)35 b Fs(to)28 b Fi(function)f +Fs(if)g(it)h(is)f(not)g(already)h(b)s(ound)d(in)i Fi(map)s +Fs(.)39 b(Returns)26 b(non-zero)i(in)f(the)g(case)390 +3319 y(of)k(an)f(in)m(v)-5 b(alid)31 b Fi(k)m(ey)39 b +Fs(or)30 b(if)g Fi(k)m(ey)39 b Fs(is)31 b(already)g(b)s(ound.)3350 +3526 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_key)d +Ff(\()p Fi(in)m(t)31 b(k)m(ey)p Ff(\))390 3635 y Fs(Bind)36 +b Fi(k)m(ey)45 b Fs(to)37 b(the)f(n)m(ull)g(function)g(in)g(the)h +(curren)m(tly)f(activ)m(e)i(k)m(eymap.)59 b(Returns)35 +b(non-zero)i(in)390 3745 y(case)31 b(of)g(error.)3350 +3952 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_key_in_map)f +Ff(\()p Fi(in)m(t)31 b(k)m(ey)-8 b(,)32 b(Keymap)e(map)p +Ff(\))390 4062 y Fs(Bind)g Fi(k)m(ey)39 b Fs(to)31 b(the)g(n)m(ull)f +(function)g(in)g Fi(map)s Fs(.)40 b(Returns)30 b(non-zero)h(in)f(case)h +(of)g(error.)3350 4268 y([F)-8 b(unction])-3599 b Fg(int)53 +b(rl_unbind_function_in)q(_map)f Ff(\()p Fi(rl)p 1814 +4268 V 40 w(command)p 2238 4268 V 40 w(func)p 2448 4268 +V 40 w(t)30 b(*function,)565 4378 y(Keymap)g(map)p Ff(\))390 +4488 y Fs(Un)m(bind)f(all)i(k)m(eys)g(that)g(execute)h +Fi(function)e Fs(in)g Fi(map)s Fs(.)3350 4695 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_unbind_command_in_)q(map)f +Ff(\()p Fi(const)31 b(c)m(har)g(*command,)g(Keymap)f(map)p +Ff(\))390 4804 y Fs(Un)m(bind)f(all)i(k)m(eys)g(that)g(are)g(b)s(ound)e +(to)i Fi(command)i Fs(in)d Fi(map)s Fs(.)3350 5011 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq)d Ff(\()p +Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(rl)p 2036 5011 +V 40 w(command)p 2460 5011 V 40 w(func)p 2670 5011 V +39 w(t)f(*function)p Ff(\))390 5121 y Fs(Bind)43 b(the)g(k)m(ey)h +(sequence)f(represen)m(ted)g(b)m(y)g(the)g(string)g Fi(k)m(eyseq)j +Fs(to)e(the)f(function)g Fi(function)p Fs(,)390 5230 +y(b)s(eginning)27 b(in)h(the)h(curren)m(t)f(k)m(eymap.)40 +b(This)28 b(mak)m(es)h(new)e(k)m(eymaps)i(as)f(necessary)-8 +b(.)41 b(The)28 b(return)390 5340 y(v)-5 b(alue)31 b(is)f(non-zero)h +(if)g Fi(k)m(eyseq)i Fs(is)d(in)m(v)-5 b(alid.)p eop +end +%%Page: 32 36 +TeXDict begin 32 35 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(32)3350 +299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq_in_map)f +Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(rl)p 2402 +299 28 4 v 40 w(command)p 2826 299 V 40 w(func)p 3036 +299 V 39 w(t)565 408 y(*function,)f(Keymap)f(map)p Ff(\))390 +518 y Fs(Bind)25 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g +(the)g(string)g Fi(k)m(eyseq)j Fs(to)e(the)f(function)g +Fi(function)p Fs(.)39 b(This)390 628 y(mak)m(es)30 b(new)e(k)m(eymaps)h +(as)g(necessary)-8 b(.)41 b(Initial)30 b(bindings)e(are)h(p)s(erformed) +e(in)i Fi(map)s Fs(.)40 b(The)28 b(return)390 737 y(v)-5 +b(alue)31 b(is)f(non-zero)h(if)g Fi(k)m(eyseq)i Fs(is)d(in)m(v)-5 +b(alid.)3350 939 y([F)d(unction])-3599 b Fg(int)53 b(rl_set_key)c +Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(rl)p 1827 +939 V 40 w(command)p 2251 939 V 39 w(func)p 2460 939 +V 40 w(t)e(*function,)565 1049 y(Keymap)g(map)p Ff(\))390 +1159 y Fs(Equiv)-5 b(alen)m(t)31 b(to)g Fr(rl_bind_keyseq_in_map)p +Fs(.)3350 1361 y([F)-8 b(unction])-3599 b Fg(int)53 b +(rl_bind_keyseq_if_unb)q(ound)f Ff(\()p Fi(const)31 b(c)m(har)g(*k)m +(eyseq,)565 1470 y(rl)p 632 1470 V 40 w(command)p 1056 +1470 V 40 w(func)p 1266 1470 V 39 w(t)g(*function)p Ff(\))390 +1580 y Fs(Binds)k Fi(k)m(eyseq)k Fs(to)d Fi(function)f +Fs(if)g(it)h(is)g(not)g(already)g(b)s(ound)d(in)i(the)h(curren)m(tly)f +(activ)m(e)j(k)m(eymap.)390 1690 y(Returns)29 b(non-zero)i(in)f(the)h +(case)g(of)g(an)f(in)m(v)-5 b(alid)31 b Fi(k)m(eyseq)j +Fs(or)c(if)g Fi(k)m(eyseq)k Fs(is)c(already)h(b)s(ound.)3350 +1892 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq_if_unb)q +(ound)q(_in)q(_ma)q(p)e Ff(\()p Fi(const)32 b(c)m(har)e(*k)m(eyseq,)565 +2001 y(rl)p 632 2001 V 40 w(command)p 1056 2001 V 40 +w(func)p 1266 2001 V 39 w(t)h(*function,)f(Keymap)h(map)p +Ff(\))390 2111 y Fs(Binds)g Fi(k)m(eyseq)k Fs(to)e Fi(function)e +Fs(if)h(it)g(is)g(not)g(already)g(b)s(ound)e(in)i Fi(map)s +Fs(.)44 b(Returns)31 b(non-zero)h(in)g(the)390 2220 y(case)f(of)g(an)f +(in)m(v)-5 b(alid)31 b Fi(k)m(eyseq)j Fs(or)c(if)g Fi(k)m(eyseq)k +Fs(is)c(already)h(b)s(ound.)3350 2423 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_generic_bind)d Ff(\()p Fi(in)m(t)31 +b(t)m(yp)s(e,)g(const)g(c)m(har)g(*k)m(eyseq,)h(c)m(har)f(*data,)h +(Keymap)565 2532 y(map)p Ff(\))390 2642 y Fs(Bind)27 +b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g(the)g(string)g +Fi(k)m(eyseq)j Fs(to)e(the)f(arbitrary)g(p)s(oin)m(ter)g +Fi(data)p Fs(.)390 2751 y Fi(t)m(yp)s(e)34 b Fs(sa)m(ys)29 +b(what)f(kind)g(of)g(data)h(is)g(p)s(oin)m(ted)f(to)h(b)m(y)g +Fi(data)p Fs(;)h(this)e(can)h(b)s(e)f(a)g(function)g(\()p +Fr(ISFUNC)p Fs(\),)h(a)390 2861 y(macro)h(\()p Fr(ISMACR)p +Fs(\),)f(or)g(a)h(k)m(eymap)g(\()p Fr(ISKMAP)p Fs(\).)40 +b(This)28 b(mak)m(es)j(new)e(k)m(eymaps)g(as)h(necessary)-8 +b(.)41 b(The)390 2971 y(initial)32 b(k)m(eymap)e(in)h(whic)m(h)f(to)h +(do)f(bindings)f(is)i Fi(map)s Fs(.)3350 3173 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_parse_and_bind)e Ff(\()p +Fi(c)m(har)31 b(*line)p Ff(\))390 3282 y Fs(P)m(arse)f +Fi(line)35 b Fs(as)29 b(if)h(it)g(had)e(b)s(een)h(read)g(from)g(the)h +Fr(inputrc)d Fs(\014le)j(and)e(p)s(erform)g(an)m(y)i(k)m(ey)g(bindings) +390 3392 y(and)g(v)-5 b(ariable)31 b(assignmen)m(ts)g(found)e(\(see)i +(Section)h(1.3)f([Readline)g(Init)f(File],)j(page)e(4\).)3350 +3594 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_read_init_file)e +Ff(\()p Fi(const)31 b(c)m(har)g(*\014lename)p Ff(\))390 +3704 y Fs(Read)h(k)m(eybindings)f(and)g(v)-5 b(ariable)32 +b(assignmen)m(ts)g(from)f Fi(\014lename)37 b Fs(\(see)32 +b(Section)g(1.3)h([Readline)390 3813 y(Init)d(File],)i(page)f(4\).)150 +4022 y Fh(2.4.4)63 b(Asso)s(ciating)41 b(F)-10 b(unction)42 +b(Names)f(and)g(Bindings)150 4168 y Fs(These)30 b(functions)g(allo)m(w) +h(y)m(ou)g(to)f(\014nd)f(out)h(what)g(k)m(eys)h(in)m(v)m(ok)m(e)h +(named)e(functions)g(and)f(the)h(functions)150 4278 y(in)m(v)m(ok)m(ed) +f(b)m(y)e(a)h(particular)g(k)m(ey)g(sequence.)40 b(Y)-8 +b(ou)28 b(ma)m(y)g(also)h(asso)s(ciate)g(a)f(new)f(function)g(name)h +(with)f(an)150 4388 y(arbitrary)j(function.)3350 4590 +y([F)-8 b(unction])-3599 b Fg(rl_command_func_t)57 b(*)c +(rl_named_function)e Ff(\()p Fi(const)31 b(c)m(har)g(*name)p +Ff(\))390 4699 y Fs(Return)f(the)g(function)g(with)g(name)h +Fi(name)5 b Fs(.)3350 4902 y([F)-8 b(unction])-3599 b +Fg(rl_command_func_t)57 b(*)c(rl_function_of_keyseq)f +Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)565 5011 +y(Keymap)f(map,)g(in)m(t)h(*t)m(yp)s(e)p Ff(\))390 5121 +y Fs(Return)h(the)g(function)g(in)m(v)m(ok)m(ed)i(b)m(y)e +Fi(k)m(eyseq)k Fs(in)c(k)m(eymap)h Fi(map)s Fs(.)46 b(If)32 +b Fi(map)i Fs(is)f Fr(NULL)p Fs(,)f(the)g(curren)m(t)390 +5230 y(k)m(eymap)37 b(is)g(used.)60 b(If)37 b Fi(t)m(yp)s(e)42 +b Fs(is)37 b(not)g Fr(NULL)p Fs(,)h(the)f(t)m(yp)s(e)g(of)g(the)g(ob)5 +b(ject)38 b(is)f(returned)f(in)h(the)g Fr(int)390 5340 +y Fs(v)-5 b(ariable)31 b(it)g(p)s(oin)m(ts)f(to)h(\(one)g(of)g +Fr(ISFUNC)p Fs(,)e Fr(ISKMAP)p Fs(,)g(or)h Fr(ISMACR)p +Fs(\).)p eop end +%%Page: 33 37 +TeXDict begin 33 36 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(33)3350 +299 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(rl_invoking_keyseqs)g +Ff(\()p Fi(rl)p 1710 299 28 4 v 40 w(command)p 2134 299 +V 40 w(func)p 2344 299 V 39 w(t)31 b(*function)p Ff(\))390 +408 y Fs(Return)f(an)i(arra)m(y)f(of)h(strings)f(represen)m(ting)g(the) +g(k)m(ey)h(sequences)g(used)e(to)i(in)m(v)m(ok)m(e)h +Fi(function)e Fs(in)390 518 y(the)g(curren)m(t)f(k)m(eymap.)3350 +692 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(rl_invoking_keyseqs_i) +q(n_m)q(ap)g Ff(\()p Fi(rl)p 2076 692 V 40 w(command)p +2500 692 V 40 w(func)p 2710 692 V 39 w(t)565 802 y(*function,)31 +b(Keymap)f(map)p Ff(\))390 911 y Fs(Return)g(an)i(arra)m(y)f(of)h +(strings)f(represen)m(ting)g(the)g(k)m(ey)h(sequences)g(used)e(to)i(in) +m(v)m(ok)m(e)h Fi(function)e Fs(in)390 1021 y(the)g(k)m(eymap)f +Fi(map)s Fs(.)3350 1195 y([F)-8 b(unction])-3599 b Fg(void)54 +b(rl_function_dumper)c Ff(\()p Fi(in)m(t)32 b(readable)p +Ff(\))390 1305 y Fs(Prin)m(t)d(the)h(readline)f(function)g(names)g(and) +g(the)g(k)m(ey)h(sequences)g(curren)m(tly)f(b)s(ound)e(to)j(them)f(to) +390 1414 y Fr(rl_outstream)p Fs(.)36 b(If)27 b Fi(readable)33 +b Fs(is)28 b(non-zero,)h(the)e(list)i(is)e(formatted)h(in)f(suc)m(h)g +(a)h(w)m(a)m(y)h(that)f(it)g(can)390 1524 y(b)s(e)i(made)g(part)g(of)h +(an)f Fr(inputrc)f Fs(\014le)h(and)g(re-read.)3350 1698 +y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_list_funmap_names)d +Ff(\()p Fi(v)m(oid)p Ff(\))390 1808 y Fs(Prin)m(t)30 +b(the)h(names)f(of)h(all)g(bindable)f(Readline)h(functions)f(to)h +Fr(rl_outstream)p Fs(.)3350 1982 y([F)-8 b(unction])-3599 +b Fg(const)54 b(char)f(**)g(rl_funmap_names)d Ff(\()p +Fi(v)m(oid)p Ff(\))390 2091 y Fs(Return)25 b(a)i(NULL)f(terminated)g +(arra)m(y)h(of)f(kno)m(wn)f(function)h(names.)39 b(The)26 +b(arra)m(y)g(is)g(sorted.)39 b(The)390 2201 y(arra)m(y)28 +b(itself)h(is)f(allo)s(cated,)j(but)c(not)h(the)h(strings)e(inside.)40 +b(Y)-8 b(ou)29 b(should)e(free)h(the)g(arra)m(y)-8 b(,)29 +b(but)f(not)390 2311 y(the)j(p)s(oin)m(ters,)f(using)g +Fr(free)f Fs(or)i Fr(rl_free)d Fs(when)h(y)m(ou)i(are)g(done.)3350 +2485 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_add_funmap_entry)e +Ff(\()p Fi(const)32 b(c)m(har)e(*name,)i(rl)p 2252 2485 +V 39 w(command)p 2675 2485 V 40 w(func)p 2885 2485 V +39 w(t)565 2594 y(*function)p Ff(\))390 2704 y Fs(Add)g +Fi(name)38 b Fs(to)33 b(the)g(list)h(of)f(bindable)f(Readline)h +(command)g(names,)g(and)f(mak)m(e)i Fi(function)f Fs(the)390 +2814 y(function)d(to)h(b)s(e)f(called)h(when)f Fi(name)35 +b Fs(is)c(in)m(v)m(ok)m(ed.)150 3006 y Fh(2.4.5)63 b(Allo)m(wing)41 +b(Undoing)150 3153 y Fs(Supp)s(orting)34 b(the)i(undo)e(command)i(is)g +(a)g(painless)g(thing,)h(and)e(mak)m(es)i(y)m(our)f(functions)f(m)m(uc) +m(h)h(more)150 3263 y(useful.)k(It)30 b(is)h(certainly)g(easy)g(to)g +(try)g(something)g(if)f(y)m(ou)h(kno)m(w)f(y)m(ou)h(can)f(undo)g(it.) +275 3394 y(If)40 b(y)m(our)h(function)f(simply)g(inserts)h(text)h +(once,)i(or)d(deletes)h(text)g(once,)i(and)c(uses)h Fr(rl_insert_)150 +3503 y(text\(\))26 b Fs(or)i Fr(rl_delete_text\(\))23 +b Fs(to)29 b(do)f(it,)h(then)f(undoing)f(is)g(already)i(done)f(for)f(y) +m(ou)h(automatically)-8 b(.)275 3634 y(If)20 b(y)m(ou)g(do)h(m)m +(ultiple)g(insertions)f(or)h(m)m(ultiple)g(deletions,)j(or)c(an)m(y)h +(com)m(bination)h(of)e(these)h(op)s(erations,)150 3744 +y(y)m(ou)38 b(should)f(group)h(them)g(together)h(in)m(to)g(one)f(op)s +(eration.)64 b(This)37 b(is)h(done)g(with)g Fr(rl_begin_undo_)150 +3854 y(group\(\))28 b Fs(and)i Fr(rl_end_undo_group\(\))p +Fs(.)275 3985 y(The)f(t)m(yp)s(es)i(of)f(ev)m(en)m(ts)i(that)f(can)g(b) +s(e)e(undone)h(are:)390 4093 y Fe(enum)40 b(undo_code)h({)f +(UNDO_DELETE,)i(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)f(};)275 +4225 y Fs(Notice)32 b(that)f Fr(UNDO_DELETE)c Fs(means)j(to)h(insert)f +(some)h(text,)h(and)d Fr(UNDO_INSERT)e Fs(means)k(to)g(delete)150 +4334 y(some)d(text.)41 b(That)27 b(is,)i(the)e(undo)g(co)s(de)h(tells)g +(what)g(to)g(undo,)f(not)h(ho)m(w)g(to)g(undo)e(it.)41 +b Fr(UNDO_BEGIN)25 b Fs(and)150 4444 y Fr(UNDO_END)j +Fs(are)j(tags)g(added)f(b)m(y)g Fr(rl_begin_undo_group\(\))25 +b Fs(and)30 b Fr(rl_end_undo_group\(\))p Fs(.)3350 4618 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_begin_undo_group)e +Ff(\()p Fi(v)m(oid)p Ff(\))390 4727 y Fs(Begins)32 b(sa)m(ving)g(undo)d +(information)j(in)e(a)i(group)e(construct.)43 b(The)30 +b(undo)g(information)h(usually)390 4837 y(comes)42 b(from)f(calls)i(to) +f Fr(rl_insert_text\(\))37 b Fs(and)k Fr(rl_delete_text\(\))p +Fs(,)f(but)h(could)h(b)s(e)f(the)390 4947 y(result)30 +b(of)h(calls)g(to)g Fr(rl_add_undo\(\))p Fs(.)3350 5121 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_end_undo_group)e +Ff(\()p Fi(v)m(oid)p Ff(\))390 5230 y Fs(Closes)29 b(the)h(curren)m(t)e +(undo)g(group)h(started)g(with)g Fr(rl_begin_undo_group)c(\(\))p +Fs(.)39 b(There)29 b(should)390 5340 y(b)s(e)h(one)g(call)i(to)f +Fr(rl_end_undo_group\(\))25 b Fs(for)30 b(eac)m(h)i(call)g(to)f +Fr(rl_begin_undo_group\(\))p Fs(.)p eop end +%%Page: 34 38 +TeXDict begin 34 37 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(34)3350 +299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_add_undo)48 +b Ff(\()p Fi(en)m(um)31 b(undo)p 1517 299 28 4 v 39 w(co)s(de)f(what,)h +(in)m(t)g(start,)g(in)m(t)g(end,)f(c)m(har)g(*text)p +Ff(\))390 408 y Fs(Remem)m(b)s(er)k(ho)m(w)g(to)h(undo)d(an)i(ev)m(en)m +(t)i(\(according)f(to)g Fi(what)r Fs(\).)52 b(The)33 +b(a\013ected)j(text)f(runs)d(from)390 518 y Fi(start)h +Fs(to)e Fi(end)t Fs(,)f(and)f(encompasses)i Fi(text)r +Fs(.)3350 708 y([F)-8 b(unction])-3599 b Fg(void)54 b +(rl_free_undo_list)c Ff(\()p Fi(v)m(oid)p Ff(\))390 818 +y Fs(F)-8 b(ree)31 b(the)g(existing)g(undo)f(list.)3350 +1008 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_do_undo)c +Ff(\()p Fi(v)m(oid)p Ff(\))390 1117 y Fs(Undo)22 b(the)h(\014rst)g +(thing)f(on)h(the)g(undo)f(list.)39 b(Returns)22 b Fr(0)g +Fs(if)h(there)g(w)m(as)g(nothing)g(to)h(undo,)f(non-zero)390 +1227 y(if)30 b(something)h(w)m(as)g(undone.)275 1417 +y(Finally)-8 b(,)32 b(if)f(y)m(ou)h(neither)f(insert)g(nor)f(delete)j +(text,)f(but)f(directly)g(mo)s(dify)g(the)g(existing)h(text)g(\(e.g.,) +150 1526 y(c)m(hange)40 b(its)f(case\),)j(call)e Fr(rl_modifying\(\))35 +b Fs(once,)42 b(just)c(b)s(efore)g(y)m(ou)h(mo)s(dify)f(the)h(text.)67 +b(Y)-8 b(ou)39 b(m)m(ust)150 1636 y(supply)29 b(the)h(indices)h(of)f +(the)h(text)g(range)g(that)g(y)m(ou)g(are)g(going)g(to)g(mo)s(dify)-8 +b(.)3350 1826 y([F)g(unction])-3599 b Fg(int)53 b(rl_modifying)c +Ff(\()p Fi(in)m(t)32 b(start,)f(in)m(t)g(end)p Ff(\))390 +1935 y Fs(T)-8 b(ell)41 b(Readline)g(to)g(sa)m(v)m(e)g(the)g(text)g(b)s +(et)m(w)m(een)g Fi(start)i Fs(and)c Fi(end)k Fs(as)e(a)f(single)h(undo) +e(unit.)70 b(It)40 b(is)390 2045 y(assumed)30 b(that)h(y)m(ou)f(will)h +(subsequen)m(tly)f(mo)s(dify)f(that)i(text.)150 2247 +y Fh(2.4.6)63 b(Redispla)m(y)3350 2447 y Fs([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_redisplay)49 b Ff(\()p Fi(v)m(oid)p +Ff(\))390 2556 y Fs(Change)38 b(what's)f(displa)m(y)m(ed)i(on)e(the)h +(screen)g(to)h(re\015ect)f(the)g(curren)m(t)g(con)m(ten)m(ts)h(of)f +Fr(rl_line_)390 2666 y(buffer)p Fs(.)3350 2856 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_forced_update_disp)q(lay)f +Ff(\()p Fi(v)m(oid)p Ff(\))390 2965 y Fs(F)-8 b(orce)41 +b(the)f(line)g(to)h(b)s(e)e(up)s(dated)f(and)h(redispla)m(y)m(ed,)k +(whether)c(or)g(not)h(Readline)h(thinks)e(the)390 3075 +y(screen)30 b(displa)m(y)h(is)f(correct.)3350 3265 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_on_new_line)d Ff(\()p +Fi(v)m(oid)p Ff(\))390 3375 y Fs(T)-8 b(ell)31 b(the)f(up)s(date)f +(functions)g(that)i(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)g(a)f +(new)f(\(empt)m(y\))i(line,)g(usually)e(after)390 3484 +y(ouputting)h(a)h(newline.)3350 3674 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_on_new_line_with_p)q(romp)q(t)f Ff(\()p +Fi(v)m(oid)p Ff(\))390 3784 y Fs(T)-8 b(ell)25 b(the)f(up)s(date)f +(functions)h(that)h(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)h(a)e +(new)g(line,)i(with)d Fi(rl)p 3106 3784 V 40 w(prompt)i +Fs(already)390 3893 y(displa)m(y)m(ed.)41 b(This)28 b(could)g(b)s(e)g +(used)g(b)m(y)g(applications)i(that)f(w)m(an)m(t)h(to)f(output)f(the)h +(prompt)f(string)390 4003 y(themselv)m(es,)h(but)e(still)h(need)g +(Readline)g(to)g(kno)m(w)f(the)h(prompt)e(string)h(length)h(for)f +(redispla)m(y)-8 b(.)41 b(It)390 4113 y(should)29 b(b)s(e)h(used)g +(after)h(setting)g Fi(rl)p 1590 4113 V 40 w(already)p +1920 4113 V 41 w(prompted)t Fs(.)3350 4303 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_reset_line_state)e Ff(\()p Fi(v)m(oid)p +Ff(\))390 4412 y Fs(Reset)36 b(the)e(displa)m(y)h(state)h(to)g(a)f +(clean)g(state)h(and)e(redispla)m(y)h(the)g(curren)m(t)g(line)g +(starting)g(on)g(a)390 4522 y(new)30 b(line.)3350 4712 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_crlf)48 b Ff(\()p +Fi(v)m(oid)p Ff(\))390 4821 y Fs(Mo)m(v)m(e)32 b(the)f(cursor)f(to)h +(the)f(start)h(of)g(the)f(next)h(screen)f(line.)3350 +5011 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_show_char)c +Ff(\()p Fi(in)m(t)32 b(c)p Ff(\))390 5121 y Fs(Displa)m(y)i(c)m +(haracter)g Fi(c)k Fs(on)32 b Fr(rl_outstream)p Fs(.)44 +b(If)32 b(Readline)h(has)g(not)f(b)s(een)g(set)h(to)g(displa)m(y)g +(meta)390 5230 y(c)m(haracters)27 b(directly)-8 b(,)29 +b(this)c(will)i(con)m(v)m(ert)g(meta)g(c)m(haracters)h(to)e(a)h +(meta-pre\014xed)f(k)m(ey)g(sequence.)390 5340 y(This)k(is)g(in)m +(tended)g(for)g(use)g(b)m(y)h(applications)g(whic)m(h)f(wish)g(to)h(do) +f(their)h(o)m(wn)f(redispla)m(y)-8 b(.)p eop end +%%Page: 35 39 +TeXDict begin 35 38 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(35)3350 +299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_message)c +Ff(\()p Fi(const)31 b(c)m(har)g(*,)36 b(.)22 b(.)h(.)11 +b Ff(\))390 408 y Fs(The)20 b(argumen)m(ts)h(are)g(a)g(format)g(string) +g(as)f(w)m(ould)h(b)s(e)f(supplied)f(to)j Fr(printf)p +Fs(,)f(p)s(ossibly)e(con)m(taining)390 518 y(con)m(v)m(ersion)45 +b(sp)s(eci\014cations)g(suc)m(h)f(as)g(`)p Fr(\045d)p +Fs(',)k(and)c(an)m(y)g(additional)h(argumen)m(ts)g(necessary)f(to)390 +628 y(satisfy)e(the)f(con)m(v)m(ersion)i(sp)s(eci\014cations.)74 +b(The)41 b(resulting)h(string)f(is)g(displa)m(y)m(ed)h(in)f(the)h +Fi(ec)m(ho)390 737 y(area)p Fs(.)63 b(The)37 b(ec)m(ho)i(area)f(is)g +(also)g(used)f(to)h(displa)m(y)g(n)m(umeric)f(argumen)m(ts)h(and)f +(searc)m(h)h(strings.)390 847 y(Y)-8 b(ou)34 b(should)e(call)j +Fr(rl_save_prompt)29 b Fs(to)34 b(sa)m(v)m(e)h(the)f(prompt)e +(information)i(b)s(efore)f(calling)i(this)390 956 y(function.)3350 +1136 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_clear_message)e +Ff(\()p Fi(v)m(oid)p Ff(\))390 1245 y Fs(Clear)29 b(the)g(message)h(in) +f(the)g(ec)m(ho)h(area.)41 b(If)29 b(the)g(prompt)f(w)m(as)h(sa)m(v)m +(ed)h(with)f(a)g(call)i(to)e Fr(rl_save_)390 1355 y(prompt)38 +b Fs(b)s(efore)h(the)g(last)h(call)h(to)f Fr(rl_message)p +Fs(,)f(call)i Fr(rl_restore_prompt)34 b Fs(b)s(efore)39 +b(calling)390 1464 y(this)30 b(function.)3350 1644 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_save_prompt)49 b Ff(\()p +Fi(v)m(oid)p Ff(\))390 1753 y Fs(Sa)m(v)m(e)44 b(the)f(lo)s(cal)i +(Readline)e(prompt)f(displa)m(y)i(state)g(in)f(preparation)g(for)g +(displa)m(ying)g(a)g(new)390 1863 y(message)31 b(in)g(the)f(message)i +(area)f(with)f Fr(rl_message\(\))p Fs(.)3350 2042 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_restore_prompt)c Ff(\()p +Fi(v)m(oid)p Ff(\))390 2152 y Fs(Restore)44 b(the)e(lo)s(cal)i +(Readline)g(prompt)d(displa)m(y)i(state)h(sa)m(v)m(ed)g(b)m(y)f(the)f +(most)h(recen)m(t)h(call)g(to)390 2261 y Fr(rl_save_prompt)p +Fs(.)69 b(if)41 b Fr(rl_save_prompt)d Fs(w)m(as)j(called)i(to)f(sa)m(v) +m(e)h(the)e(prompt)f(b)s(efore)h(a)h(call)390 2371 y(to)37 +b Fr(rl_message)p Fs(,)f(this)h(function)f(should)g(b)s(e)g(called)i(b) +s(efore)f(the)g(corresp)s(onding)e(call)j(to)g Fr(rl_)390 +2480 y(clear_message)p Fs(.)3350 2660 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_expand_prompt)e Ff(\()p Fi(c)m(har)31 +b(*prompt)p Ff(\))390 2769 y Fs(Expand)41 b(an)m(y)j(sp)s(ecial)f(c)m +(haracter)h(sequences)f(in)g Fi(prompt)g Fs(and)f(set)i(up)d(the)i(lo)s +(cal)h(Readline)390 2879 y(prompt)35 b(redispla)m(y)h(v)-5 +b(ariables.)57 b(This)35 b(function)h(is)g(called)h(b)m(y)e +Fr(readline\(\))p Fs(.)55 b(It)35 b(ma)m(y)i(also)g(b)s(e)390 +2988 y(called)22 b(to)g(expand)f(the)g(primary)f(prompt)g(if)i(the)f +Fr(rl_on_new_line_with_prom)o(pt\()o(\))15 b Fs(function)390 +3098 y(or)25 b Fr(rl_already_prompted)c Fs(v)-5 b(ariable)26 +b(is)f(used.)39 b(It)25 b(returns)f(the)i(n)m(um)m(b)s(er)e(of)i +(visible)f(c)m(haracters)390 3208 y(on)34 b(the)g(last)g(line)g(of)g +(the)g(\(p)s(ossibly)f(m)m(ulti-line\))j(prompt.)50 b(Applications)34 +b(ma)m(y)h(indicate)f(that)390 3317 y(the)28 b(prompt)f(con)m(tains)i +(c)m(haracters)g(that)g(tak)m(e)g(up)e(no)h(ph)m(ysical)g(screen)g +(space)g(when)f(displa)m(y)m(ed)390 3427 y(b)m(y)41 b(brac)m(k)m(eting) +i(a)e(sequence)g(of)g(suc)m(h)g(c)m(haracters)h(with)f(the)g(sp)s +(ecial)h(mark)m(ers)f Fr(RL_PROMPT_)390 3536 y(START_IGNORE)27 +b Fs(and)k Fr(RL_PROMPT_END_IGNORE)25 b Fs(\(declared)31 +b(in)g(`)p Fr(readline.h)p Fs('.)39 b(This)30 b(ma)m(y)i(b)s(e)390 +3646 y(used)e(to)h(em)m(b)s(ed)f(terminal-sp)s(eci\014c)h(escap)s(e)f +(sequences)h(in)f(prompts.)3350 3825 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_set_prompt)d Ff(\()p Fi(const)31 b(c)m(har)g(*prompt)p +Ff(\))390 3935 y Fs(Mak)m(e)d(Readline)g(use)f Fi(prompt)h +Fs(for)e(subsequen)m(t)h(redispla)m(y)-8 b(.)40 b(This)26 +b(calls)i Fr(rl_expand_prompt\(\))390 4044 y Fs(to)j(expand)f(the)g +(prompt)g(and)g(sets)g Fr(rl_prompt)e Fs(to)j(the)g(result.)150 +4240 y Fh(2.4.7)63 b(Mo)s(difying)43 b(T)-10 b(ext)3350 +4434 y Fs([F)i(unction])-3599 b Fg(int)53 b(rl_insert_text)d +Ff(\()p Fi(const)31 b(c)m(har)g(*text)p Ff(\))390 4543 +y Fs(Insert)g Fi(text)k Fs(in)m(to)d(the)g(line)g(at)g(the)g(curren)m +(t)f(cursor)g(p)s(osition.)45 b(Returns)30 b(the)i(n)m(um)m(b)s(er)f +(of)g(c)m(har-)390 4653 y(acters)g(inserted.)3350 4832 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_delete_text)d +Ff(\()p Fi(in)m(t)31 b(start,)g(in)m(t)g(end)p Ff(\))390 +4942 y Fs(Delete)40 b(the)e(text)h(b)s(et)m(w)m(een)f +Fi(start)i Fs(and)d Fi(end)k Fs(in)c(the)h(curren)m(t)g(line.)63 +b(Returns)36 b(the)i(n)m(um)m(b)s(er)f(of)390 5051 y(c)m(haracters)32 +b(deleted.)3350 5230 y([F)-8 b(unction])-3599 b Fg(char)54 +b(*)e(rl_copy_text)d Ff(\()p Fi(in)m(t)31 b(start,)h(in)m(t)f(end)p +Ff(\))390 5340 y Fs(Return)f(a)g(cop)m(y)h(of)g(the)g(text)g(b)s(et)m +(w)m(een)g Fi(start)i Fs(and)d Fi(end)j Fs(in)d(the)h(curren)m(t)f +(line.)p eop end +%%Page: 36 40 +TeXDict begin 36 39 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(36)3350 +299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_kill_text)c +Ff(\()p Fi(in)m(t)32 b(start,)f(in)m(t)g(end)p Ff(\))390 +408 y Fs(Cop)m(y)j(the)g(text)i(b)s(et)m(w)m(een)e Fi(start)j +Fs(and)d Fi(end)j Fs(in)d(the)g(curren)m(t)g(line)g(to)h(the)f(kill)h +(ring,)g(app)s(ending)390 518 y(or)f(prep)s(ending)e(to)j(the)f(last)h +(kill)f(if)g(the)g(last)h(command)f(w)m(as)g(a)h(kill)f(command.)51 +b(The)34 b(text)h(is)390 628 y(deleted.)50 b(If)33 b +Fi(start)j Fs(is)e(less)f(than)g Fi(end)t Fs(,)h(the)f(text)i(is)e(app) +s(ended,)g(otherwise)g(prep)s(ended.)48 b(If)33 b(the)390 +737 y(last)e(command)f(w)m(as)h(not)g(a)f(kill,)i(a)f(new)e(kill)i +(ring)g(slot)g(is)f(used.)3350 931 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_push_macro_input)e Ff(\()p Fi(c)m(har)32 +b(*macro)p Ff(\))390 1040 y Fs(Cause)c Fi(macro)33 b +Fs(to)c(b)s(e)f(inserted)g(in)m(to)h(the)g(line,)g(as)f(if)h(it)f(had)g +(b)s(een)g(in)m(v)m(ok)m(ed)h(b)m(y)f(a)h(k)m(ey)g(b)s(ound)d(to)390 +1150 y(a)31 b(macro.)41 b(Not)31 b(esp)s(ecially)h(useful;)e(use)g +Fr(rl_insert_text\(\))c Fs(instead.)150 1354 y Fh(2.4.8)63 +b(Character)39 b(Input)3350 1555 y Fs([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_read_key)c Ff(\()p Fi(v)m(oid)p Ff(\))390 +1665 y Fs(Return)29 b(the)g(next)h(c)m(haracter)h(a)m(v)-5 +b(ailable)32 b(from)d(Readline's)h(curren)m(t)f(input)g(stream.)41 +b(This)28 b(han-)390 1775 y(dles)e(input)g(inserted)g(in)m(to)i(the)e +(input)g(stream)h(via)g Fi(rl)p 2226 1775 28 4 v 40 w(p)s(ending)p +2583 1775 V 38 w(input)h Fs(\(see)f(Section)h(2.3)f([Read-)390 +1884 y(line)40 b(V)-8 b(ariables],)43 b(page)d(25\))g(and)f +Fr(rl_stuff_char\(\))p Fs(,)f(macros,)k(and)d(c)m(haracters)h(read)f +(from)390 1994 y(the)34 b(k)m(eyb)s(oard.)52 b(While)35 +b(w)m(aiting)g(for)f(input,)g(this)g(function)g(will)g(call)i(an)m(y)e +(function)g(assigned)390 2103 y(to)d(the)g Fr(rl_event_hook)26 +b Fs(v)-5 b(ariable.)3350 2297 y([F)d(unction])-3599 +b Fg(int)53 b(rl_getc)48 b Ff(\()p Fi(FILE)30 b(*stream)p +Ff(\))390 2407 y Fs(Return)20 b(the)i(next)f(c)m(haracter)i(a)m(v)-5 +b(ailable)24 b(from)c Fi(stream)p Fs(,)k(whic)m(h)d(is)g(assumed)g(to)h +(b)s(e)e(the)i(k)m(eyb)s(oard.)3350 2600 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_stuff_char)d Ff(\()p Fi(in)m(t)31 b(c)p +Ff(\))390 2710 y Fs(Insert)h Fi(c)39 b Fs(in)m(to)34 +b(the)f(Readline)g(input)f(stream.)49 b(It)33 b(will)g(b)s(e)f +Fr(")p Fs(read)p Fr(")g Fs(b)s(efore)h(Readline)g(attempts)390 +2819 y(to)27 b(read)g(c)m(haracters)h(from)f(the)g(terminal)g(with)f +Fr(rl_read_key\(\))p Fs(.)36 b(Up)27 b(to)g(512)h(c)m(haracters)g(ma)m +(y)390 2929 y(b)s(e)i(pushed)f(bac)m(k.)42 b Fr(rl_stuff_char)27 +b Fs(returns)i(1)i(if)f(the)h(c)m(haracter)h(w)m(as)f(successfully)g +(inserted;)390 3039 y(0)g(otherwise.)3350 3232 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_execute_next)d Ff(\()p +Fi(in)m(t)31 b(c)p Ff(\))390 3342 y Fs(Mak)m(e)37 b Fi(c)42 +b Fs(b)s(e)35 b(the)h(next)f(command)h(to)g(b)s(e)f(executed)i(when)d +Fr(rl_read_key\(\))e Fs(is)k(called.)58 b(This)390 3451 +y(sets)31 b Fi(rl)p 635 3451 V 40 w(p)s(ending)p 992 +3451 V 38 w(input)r Fs(.)3350 3645 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_clear_pending_inpu)q(t)e Ff(\()p Fi(v)m(oid)p +Ff(\))390 3755 y Fs(Unset)42 b Fi(rl)p 729 3755 V 40 +w(p)s(ending)p 1086 3755 V 38 w(input)r Fs(,)i(e\013ectiv)m(ely)g +(negating)f(the)f(e\013ect)h(of)f(an)m(y)g(previous)f(call)i(to)f +Fr(rl_)390 3864 y(execute_next\(\))p Fs(.)59 b(This)36 +b(w)m(orks)i(only)g(if)f(the)h(p)s(ending)e(input)h(has)g(not)h +(already)g(b)s(een)f(read)390 3974 y(with)30 b Fr(rl_read_key\(\))p +Fs(.)3350 4167 y([F)-8 b(unction])-3599 b Fg(int)53 b +(rl_set_keyboard_input)q(_tim)q(eou)q(t)e Ff(\()p Fi(in)m(t)32 +b(u)p Ff(\))390 4277 y Fs(While)41 b(w)m(aiting)g(for)f(k)m(eyb)s(oard) +g(input)f(in)h Fr(rl_read_key\(\))p Fs(,)f(Readline)i(will)f(w)m(ait)h +(for)f Fi(u)g Fs(mi-)390 4387 y(croseconds)31 b(for)g(input)f(b)s +(efore)g(calling)j(an)m(y)e(function)f(assigned)i(to)f +Fr(rl_event_hook)p Fs(.)39 b Fi(u)30 b Fs(m)m(ust)390 +4496 y(b)s(e)h(greater)i(than)f(or)g(equal)g(to)h(zero)f(\(a)h +(zero-length)g(timeout)g(is)f(equiv)-5 b(alen)m(t)33 +b(to)g(a)f(p)s(oll\).)45 b(The)390 4606 y(default)31 +b(w)m(aiting)g(p)s(erio)s(d)e(is)i(one-ten)m(th)g(of)g(a)g(second.)40 +b(Returns)30 b(the)g(old)h(timeout)g(v)-5 b(alue.)150 +4810 y Fh(2.4.9)63 b(T)-10 b(erminal)41 b(Managemen)m(t)3350 +5011 y Fs([F)-8 b(unction])-3599 b Fg(void)54 b(rl_prep_terminal)c +Ff(\()p Fi(in)m(t)31 b(meta)p 1670 5011 V 41 w(\015ag)p +Ff(\))390 5121 y Fs(Mo)s(dify)42 b(the)h(terminal)g(settings)g(for)f +(Readline's)i(use,)h(so)e Fr(readline\(\))c Fs(can)k(read)f(a)h(single) +390 5230 y(c)m(haracter)32 b(at)g(a)f(time)h(from)e(the)h(k)m(eyb)s +(oard.)43 b(The)30 b Fi(meta)p 2376 5230 V 41 w(\015ag)39 +b Fs(argumen)m(t)31 b(should)f(b)s(e)g(non-zero)390 5340 +y(if)g(Readline)h(should)f(read)g(eigh)m(t-bit)i(input.)p +eop end +%%Page: 37 41 +TeXDict begin 37 40 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(37)3350 +299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_deprep_terminal)c +Ff(\()p Fi(v)m(oid)p Ff(\))390 408 y Fs(Undo)31 b(the)h(e\013ects)h(of) +f Fr(rl_prep_terminal\(\))p Fs(,)27 b(lea)m(ving)33 b(the)f(terminal)g +(in)f(the)h(state)h(in)e(whic)m(h)390 518 y(it)g(w)m(as)g(b)s(efore)f +(the)g(most)h(recen)m(t)g(call)h(to)f Fr(rl_prep_terminal\(\))p +Fs(.)3350 698 y([F)-8 b(unction])-3599 b Fg(void)54 b +(rl_tty_set_default_bindi)q(ngs)e Ff(\()p Fi(Keymap)31 +b(kmap)p Ff(\))390 808 y Fs(Read)37 b(the)g(op)s(erating)h(system's)f +(terminal)g(editing)h(c)m(haracters)g(\(as)g(w)m(ould)e(b)s(e)h(displa) +m(y)m(ed)g(b)m(y)390 917 y Fr(stty)p Fs(\))30 b(to)h(their)f(Readline)h +(equiv)-5 b(alen)m(ts.)42 b(The)30 b(bindings)f(are)i(p)s(erformed)e +(in)h Fi(kmap)s Fs(.)3350 1098 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_tty_unset_default_bin)q(din)q(gs)e +Ff(\()p Fi(Keymap)30 b(kmap)p Ff(\))390 1207 y Fs(Reset)j(the)f +(bindings)e(manipulated)i(b)m(y)g Fr(rl_tty_set_default_bind)o(ing)o(s) +26 b Fs(so)32 b(that)g(the)g(ter-)390 1317 y(minal)40 +b(editing)g(c)m(haracters)h(are)f(b)s(ound)e(to)i Fr(rl_insert)p +Fs(.)66 b(The)39 b(bindings)f(are)i(p)s(erformed)e(in)390 +1426 y Fi(kmap)s Fs(.)3350 1606 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_reset_terminal)e Ff(\()p Fi(const)31 +b(c)m(har)g(*terminal)p 2151 1606 28 4 v 41 w(name)p +Ff(\))390 1716 y Fs(Reinitialize)26 b(Readline's)f(idea)f(of)g(the)g +(terminal)h(settings)f(using)g Fi(terminal)p 2977 1716 +V 40 w(name)29 b Fs(as)24 b(the)g(termi-)390 1826 y(nal)32 +b(t)m(yp)s(e)g(\(e.g.,)i Fr(vt100)p Fs(\).)44 b(If)31 +b Fi(terminal)p 1753 1826 V 41 w(name)37 b Fs(is)31 b +Fr(NULL)p Fs(,)h(the)g(v)-5 b(alue)32 b(of)g(the)g Fr(TERM)e +Fs(en)m(vironmen)m(t)390 1935 y(v)-5 b(ariable)31 b(is)g(used.)150 +2132 y Fh(2.4.10)63 b(Utilit)m(y)40 b(F)-10 b(unctions)3350 +2326 y Fs([F)i(unction])-3599 b Fg(int)53 b(rl_save_state)d +Ff(\()p Fi(struct)30 b(readline)p 1702 2326 V 41 w(state)h(*sp)p +Ff(\))390 2435 y Fs(Sa)m(v)m(e)f(a)f(snapshot)f(of)h(Readline's)g(in)m +(ternal)g(state)h(to)g Fi(sp)s Fs(.)39 b(The)28 b(con)m(ten)m(ts)j(of)d +(the)h Fi(readline)p 3523 2435 V 41 w(state)390 2545 +y Fs(structure)38 b(are)g(do)s(cumen)m(ted)g(in)g(`)p +Fr(readline.h)p Fs('.)62 b(The)38 b(caller)h(is)f(resp)s(onsible)g(for) +g(allo)s(cating)390 2654 y(the)31 b(structure.)3350 2835 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_restore_state)e +Ff(\()p Fi(struct)30 b(readline)p 1859 2835 V 41 w(state)h(*sp)p +Ff(\))390 2944 y Fs(Restore)23 b(Readline's)g(in)m(ternal)f(state)i(to) +e(that)h(stored)f(in)g Fi(sp)s Fs(,)h(whic)m(h)e(m)m(ust)h(ha)m(v)m(e)h +(b)s(een)f(sa)m(v)m(ed)h(b)m(y)f(a)390 3054 y(call)30 +b(to)g Fr(rl_save_state)p Fs(.)37 b(The)28 b(con)m(ten)m(ts)j(of)e(the) +g Fi(readline)p 2470 3054 V 41 w(state)35 b Fs(structure)29 +b(are)g(do)s(cumen)m(ted)390 3163 y(in)h(`)p Fr(readline.h)p +Fs('.)38 b(The)30 b(caller)i(is)e(resp)s(onsible)g(for)g(freeing)h(the) +f(structure.)3350 3343 y([F)-8 b(unction])-3599 b Fg(void)54 +b(rl_free)47 b Ff(\()p Fi(v)m(oid)31 b(*mem)p Ff(\))390 +3453 y Fs(Deallo)s(cate)25 b(the)c(memory)g(p)s(oin)m(ted)g(to)h(b)m(y) +f Fi(mem)p Fs(.)38 b Fi(mem)21 b Fs(m)m(ust)g(ha)m(v)m(e)i(b)s(een)d +(allo)s(cated)j(b)m(y)e Fr(malloc)p Fs(.)3350 3633 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_replace_line)c Ff(\()p +Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)e(clear)p 2305 +3633 V 42 w(undo)p Ff(\))390 3743 y Fs(Replace)41 b(the)e(con)m(ten)m +(ts)i(of)e Fr(rl_line_buffer)d Fs(with)j Fi(text)r Fs(.)68 +b(The)39 b(p)s(oin)m(t)g(and)g(mark)g(are)g(pre-)390 +3852 y(serv)m(ed,)27 b(if)e(p)s(ossible.)39 b(If)25 b +Fi(clear)p 1422 3852 V 41 w(undo)k Fs(is)d(non-zero,)h(the)f(undo)e +(list)i(asso)s(ciated)h(with)e(the)h(curren)m(t)390 3962 +y(line)31 b(is)f(cleared.)3350 4142 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_extend_line_buffer)d Ff(\()p Fi(in)m(t)32 +b(len)p Ff(\))390 4252 y Fs(Ensure)d(that)h Fr(rl_line_buffer)d +Fs(has)j(enough)f(space)i(to)g(hold)f Fi(len)g Fs(c)m(haracters,)i(p)s +(ossibly)d(real-)390 4361 y(lo)s(cating)j(it)f(if)f(necessary)-8 +b(.)3350 4541 y([F)g(unction])-3599 b Fg(int)53 b(rl_initialize)d +Ff(\()p Fi(v)m(oid)p Ff(\))390 4651 y Fs(Initialize)39 +b(or)e(re-initialize)i(Readline's)f(in)m(ternal)f(state.)62 +b(It's)37 b(not)g(strictly)h(necessary)f(to)h(call)390 +4761 y(this;)31 b Fr(readline\(\))c Fs(calls)32 b(it)f(b)s(efore)f +(reading)g(an)m(y)h(input.)3350 4941 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_ding)48 b Ff(\()p Fi(v)m(oid)p Ff(\))390 +5050 y Fs(Ring)30 b(the)h(terminal)g(b)s(ell,)f(ob)s(eying)h(the)f +(setting)i(of)e Fr(bell-style)p Fs(.)3350 5230 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_alphabetic)d Ff(\()p +Fi(in)m(t)31 b(c)p Ff(\))390 5340 y Fs(Return)f(1)g(if)h +Fi(c)36 b Fs(is)30 b(an)h(alphab)s(etic)g(c)m(haracter.)p +eop end +%%Page: 38 42 +TeXDict begin 38 41 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(38)3350 +299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_display_match_list)d +Ff(\()p Fi(c)m(har)31 b(**matc)m(hes,)i(in)m(t)e(len,)g(in)m(t)g(max)p +Ff(\))390 408 y Fs(A)k(con)m(v)m(enience)h(function)e(for)g(displa)m +(ying)h(a)g(list)g(of)g(strings)f(in)g(columnar)g(format)h(on)f(Read-) +390 518 y(line's)g(output)f(stream.)51 b Fr(matches)31 +b Fs(is)j(the)f(list)i(of)e(strings,)i(in)e(argv)h(format,)h(suc)m(h)e +(as)h(a)g(list)g(of)390 628 y(completion)26 b(matc)m(hes.)39 +b Fr(len)24 b Fs(is)g(the)g(n)m(um)m(b)s(er)f(of)i(strings)f(in)g +Fr(matches)p Fs(,)f(and)h Fr(max)f Fs(is)i(the)f(length)h(of)390 +737 y(the)h(longest)i(string)e(in)g Fr(matches)p Fs(.)37 +b(This)25 b(function)h(uses)g(the)g(setting)i(of)e Fr +(print-completions-)390 847 y(horizontally)33 b Fs(to)k(select)h(ho)m +(w)e(the)g(matc)m(hes)i(are)e(displa)m(y)m(ed)h(\(see)g(Section)g +(1.3.1)h([Readline)390 956 y(Init)30 b(File)h(Syn)m(tax],)g(page)g +(4\).)42 b(When)29 b(displa)m(ying)i(completions,)h(this)e(function)g +(sets)g(the)g(n)m(um-)390 1066 y(b)s(er)23 b(of)g(columns)g(used)g(for) +h(displa)m(y)f(to)i(the)e(v)-5 b(alue)24 b(of)g Fr +(completion-display-width)p Fs(,)19 b(the)k(v)-5 b(alue)390 +1176 y(of)31 b(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)31 +b Fr(COLUMNS)p Fs(,)e(or)h(the)h(screen)f(width,)g(in)g(that)h(order.) +275 1374 y(The)g(follo)m(wing)j(are)e(implemen)m(ted)h(as)f(macros,)h +(de\014ned)e(in)h Fr(chardefs.h)p Fs(.)43 b(Applications)33 +b(should)150 1483 y(refrain)d(from)g(using)g(them.)3350 +1681 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_uppercase_p)d +Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 1791 y Fs(Return)f(1)g(if)h +Fi(c)36 b Fs(is)30 b(an)h(upp)s(ercase)e(alphab)s(etic)i(c)m(haracter.) +3350 1989 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_lowercase_p)d +Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 2098 y Fs(Return)f(1)g(if)h +Fi(c)36 b Fs(is)30 b(a)h(lo)m(w)m(ercase)i(alphab)s(etic)e(c)m +(haracter.)3350 2296 y([F)-8 b(unction])-3599 b Fg(int)53 +b(_rl_digit_p)c Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 +2406 y Fs(Return)f(1)g(if)h Fi(c)36 b Fs(is)30 b(a)h(n)m(umeric)f(c)m +(haracter.)3350 2604 y([F)-8 b(unction])-3599 b Fg(int)53 +b(_rl_to_upper)c Ff(\()p Fi(in)m(t)32 b(c)p Ff(\))390 +2714 y Fs(If)23 b Fi(c)30 b Fs(is)24 b(a)g(lo)m(w)m(ercase)i(alphab)s +(etic)e(c)m(haracter,)j(return)c(the)h(corresp)s(onding)e(upp)s(ercase) +h(c)m(haracter.)3350 2912 y([F)-8 b(unction])-3599 b +Fg(int)53 b(_rl_to_lower)c Ff(\()p Fi(in)m(t)32 b(c)p +Ff(\))390 3021 y Fs(If)c Fi(c)35 b Fs(is)29 b(an)g(upp)s(ercase)f +(alphab)s(etic)h(c)m(haracter,)i(return)d(the)h(corresp)s(onding)f(lo)m +(w)m(ercase)j(c)m(harac-)390 3131 y(ter.)3350 3329 y([F)-8 +b(unction])-3599 b Fg(int)53 b(_rl_digit_value)d Ff(\()p +Fi(in)m(t)31 b(c)p Ff(\))390 3438 y Fs(If)f Fi(c)36 b +Fs(is)31 b(a)f(n)m(um)m(b)s(er,)g(return)f(the)h(v)-5 +b(alue)31 b(it)g(represen)m(ts.)150 3644 y Fh(2.4.11)63 +b(Miscellaneous)42 b(F)-10 b(unctions)3350 3848 y Fs([F)i(unction]) +-3599 b Fg(int)53 b(rl_macro_bind)d Ff(\()p Fi(const)31 +b(c)m(har)g(*k)m(eyseq,)h(const)f(c)m(har)f(*macro,)i(Keymap)565 +3958 y(map)p Ff(\))390 4067 y Fs(Bind)22 b(the)i(k)m(ey)f(sequence)g +Fi(k)m(eyseq)j Fs(to)e(in)m(v)m(ok)m(e)h(the)e(macro)g +Fi(macro)5 b Fs(.)39 b(The)22 b(binding)g(is)h(p)s(erformed)e(in)390 +4177 y Fi(map)s Fs(.)39 b(When)27 b Fi(k)m(eyseq)k Fs(is)c(in)m(v)m(ok) +m(ed,)j(the)d Fi(macro)33 b Fs(will)27 b(b)s(e)g(inserted)g(in)m(to)h +(the)g(line.)40 b(This)26 b(function)390 4286 y(is)k(deprecated;)i(use) +e Fr(rl_generic_bind\(\))25 b Fs(instead.)3350 4484 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_macro_dumper)c Ff(\()p +Fi(in)m(t)31 b(readable)p Ff(\))390 4594 y Fs(Prin)m(t)c(the)g(k)m(ey)h +(sequences)g(b)s(ound)d(to)j(macros)f(and)g(their)g(v)-5 +b(alues,)28 b(using)f(the)g(curren)m(t)g(k)m(eymap,)390 +4704 y(to)32 b Fr(rl_outstream)p Fs(.)40 b(If)31 b Fi(readable)36 +b Fs(is)c(non-zero,)g(the)f(list)h(is)f(formatted)h(in)f(suc)m(h)g(a)g +(w)m(a)m(y)i(that)e(it)390 4813 y(can)g(b)s(e)e(made)i(part)f(of)h(an)f +Fr(inputrc)e Fs(\014le)j(and)e(re-read.)3350 5011 y([F)-8 +b(unction])-3599 b Fg(int)53 b(rl_variable_bind)e Ff(\()p +Fi(const)31 b(c)m(har)g(*v)-5 b(ariable,)31 b(const)g(c)m(har)g(*v)-5 +b(alue)p Ff(\))390 5121 y Fs(Mak)m(e)30 b(the)f(Readline)g(v)-5 +b(ariable)29 b Fi(v)-5 b(ariable)35 b Fs(ha)m(v)m(e)30 +b Fi(v)-5 b(alue)5 b Fs(.)40 b(This)28 b(b)s(eha)m(v)m(es)h(as)g(if)f +(the)h(readline)g(com-)390 5230 y(mand)f(`)p Fr(set)i +Fk(variable)38 b(value)11 b Fs(')28 b(had)g(b)s(een)g(executed)i(in)e +(an)h Fr(inputrc)e Fs(\014le)i(\(see)g(Section)h(1.3.1)390 +5340 y([Readline)h(Init)f(File)i(Syn)m(tax],)f(page)g(4\).)p +eop end +%%Page: 39 43 +TeXDict begin 39 42 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(39)3350 +299 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_variable_value)f +Ff(\()p Fi(const)31 b(c)m(har)g(*v)-5 b(ariable)p Ff(\))390 +408 y Fs(Return)28 b(a)h(string)g(represen)m(ting)g(the)g(v)-5 +b(alue)29 b(of)g(the)g(Readline)h(v)-5 b(ariable)29 b +Fi(v)-5 b(ariable)5 b Fs(.)41 b(F)-8 b(or)30 b(b)s(o)s(olean)390 +518 y(v)-5 b(ariables,)31 b(this)g(string)f(is)g(either)h(`)p +Fr(on)p Fs(')f(or)h(`)p Fr(off)p Fs('.)3350 712 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_variable_dumper)c +Ff(\()p Fi(in)m(t)32 b(readable)p Ff(\))390 822 y Fs(Prin)m(t)d(the)f +(readline)h(v)-5 b(ariable)30 b(names)e(and)g(their)h(curren)m(t)f(v)-5 +b(alues)29 b(to)h Fr(rl_outstream)p Fs(.)37 b(If)28 b +Fi(read-)390 931 y(able)40 b Fs(is)34 b(non-zero,)i(the)e(list)g(is)g +(formatted)h(in)f(suc)m(h)g(a)g(w)m(a)m(y)h(that)g(it)f(can)g(b)s(e)g +(made)g(part)g(of)g(an)390 1041 y Fr(inputrc)28 b Fs(\014le)j(and)f +(re-read.)3350 1235 y([F)-8 b(unction])-3599 b Fg(int)53 +b(rl_set_paren_blink_ti)q(meou)q(t)f Ff(\()p Fi(in)m(t)31 +b(u)p Ff(\))390 1345 y Fs(Set)25 b(the)h(time)f(in)m(terv)-5 +b(al)27 b(\(in)e(microseconds\))h(that)g(Readline)f(w)m(aits)h(when)e +(sho)m(wing)i(a)f(balancing)390 1454 y(c)m(haracter)32 +b(when)d Fr(blink-matching-paren)c Fs(has)30 b(b)s(een)g(enabled.)3350 +1649 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_get_termcap)e +Ff(\()p Fi(const)31 b(c)m(har)g(*cap)p Ff(\))390 1758 +y Fs(Retriev)m(e)d(the)f(string)g(v)-5 b(alue)27 b(of)g(the)g(termcap)g +(capabilit)m(y)i Fi(cap)s Fs(.)39 b(Readline)28 b(fetc)m(hes)g(the)f +(termcap)390 1868 y(en)m(try)34 b(for)f(the)h(curren)m(t)f(terminal)h +(name)g(and)f(uses)g(those)h(capabilities)h(to)f(mo)m(v)m(e)h(around)e +(the)390 1977 y(screen)21 b(line)h(and)e(p)s(erform)g(other)h +(terminal-sp)s(eci\014c)h(op)s(erations,)h(lik)m(e)f(erasing)g(a)f +(line.)38 b(Readline)390 2087 y(do)s(es)d(not)g(use)g(all)g(of)h(a)f +(terminal's)g(capabilities,)k(and)34 b(this)h(function)g(will)g(return) +f(v)-5 b(alues)35 b(for)390 2197 y(only)30 b(those)h(capabilities)i +(Readline)e(uses.)150 2401 y Fh(2.4.12)63 b(Alternate)40 +b(In)m(terface)150 2548 y Fs(An)21 b(alternate)j(in)m(terface)f(is)f(a) +m(v)-5 b(ailable)24 b(to)e(plain)g Fr(readline\(\))p +Fs(.)35 b(Some)21 b(applications)i(need)f(to)g(in)m(terlea)m(v)m(e)150 +2657 y(k)m(eyb)s(oard)35 b(I/O)h(with)f(\014le,)i(device,)h(or)e(windo) +m(w)f(system)g(I/O,)h(t)m(ypically)i(b)m(y)d(using)g(a)h(main)g(lo)s +(op)f(to)150 2767 y Fr(select\(\))24 b Fs(on)h(v)-5 b(arious)26 +b(\014le)g(descriptors.)39 b(T)-8 b(o)26 b(accomo)s(date)i(this)e +(need,)g(readline)h(can)f(also)g(b)s(e)f(in)m(v)m(ok)m(ed)150 +2877 y(as)i(a)g(`callbac)m(k')j(function)c(from)g(an)h(ev)m(en)m(t)h +(lo)s(op.)40 b(There)26 b(are)h(functions)g(a)m(v)-5 +b(ailable)29 b(to)e(mak)m(e)h(this)f(easy)-8 b(.)3350 +3071 y([F)g(unction])-3599 b Fg(void)54 b(rl_callback_handler_inst)q +(all)e Ff(\()p Fi(const)31 b(c)m(har)g(*prompt,)565 3180 +y(rl)p 632 3180 28 4 v 40 w(v)m(cpfunc)p 978 3180 V 40 +w(t)f(*lhandler)p Ff(\))390 3290 y Fs(Set)25 b(up)e(the)i(terminal)g +(for)g(readline)g(I/O)f(and)g(displa)m(y)h(the)g(initial)h(expanded)e +(v)-5 b(alue)25 b(of)g Fi(prompt)r Fs(.)390 3400 y(Sa)m(v)m(e)33 +b(the)f(v)-5 b(alue)32 b(of)g Fi(lhandler)37 b Fs(to)c(use)e(as)h(a)g +(function)f(to)h(call)h(when)e(a)h(complete)h(line)f(of)g(input)390 +3509 y(has)e(b)s(een)g(en)m(tered.)41 b(The)30 b(function)g(tak)m(es)i +(the)e(text)i(of)e(the)h(line)g(as)f(an)g(argumen)m(t.)3350 +3703 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_callback_read_char)d +Ff(\()p Fi(v)m(oid)p Ff(\))390 3813 y Fs(Whenev)m(er)34 +b(an)g(application)h(determines)e(that)i(k)m(eyb)s(oard)e(input)g(is)h +(a)m(v)-5 b(ailable,)37 b(it)d(should)f(call)390 3923 +y Fr(rl_callback_read_char\(\))p Fs(,)17 b(whic)m(h)22 +b(will)g(read)f(the)h(next)g(c)m(haracter)h(from)f(the)f(curren)m(t)h +(input)390 4032 y(source.)77 b(If)41 b(that)i(c)m(haracter)h(completes) +g(the)e(line,)k Fr(rl_callback_read_char)36 b Fs(will)43 +b(in)m(v)m(ok)m(e)390 4142 y(the)36 b Fi(lhandler)41 +b Fs(function)35 b(sa)m(v)m(ed)h(b)m(y)g Fr(rl_callback_handler_ins)o +(tall)29 b Fs(to)36 b(pro)s(cess)f(the)g(line.)390 4251 +y(Before)28 b(calling)g(the)f Fi(lhandler)32 b Fs(function,)c(the)e +(terminal)i(settings)f(are)g(reset)h(to)f(the)g(v)-5 +b(alues)27 b(they)390 4361 y(had)i(b)s(efore)g(calling)j +Fr(rl_callback_handler_ins)o(tall)o Fs(.)j(If)29 b(the)h +Fi(lhandler)36 b Fs(function)29 b(returns,)390 4471 y(the)c(terminal)g +(settings)h(are)f(mo)s(di\014ed)e(for)i(Readline's)g(use)f(again.)40 +b Fr(EOF)24 b Fs(is)h(indicated)g(b)m(y)f(calling)390 +4580 y Fi(lhandler)36 b Fs(with)30 b(a)h Fr(NULL)e Fs(line.)3350 +4774 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_callback_handler_remo)q +(ve)e Ff(\()p Fi(v)m(oid)p Ff(\))390 4884 y Fs(Restore)38 +b(the)f(terminal)h(to)g(its)f(initial)i(state)f(and)f(remo)m(v)m(e)h +(the)g(line)f(handler.)60 b(This)37 b(ma)m(y)h(b)s(e)390 +4994 y(called)f(from)f(within)g(a)h(callbac)m(k)h(as)f(w)m(ell)g(as)f +(indep)s(enden)m(tly)-8 b(.)58 b(If)36 b(the)h Fi(lhandler)42 +b Fs(installed)37 b(b)m(y)390 5103 y Fr(rl_callback_handler_inst)o(all) +32 b Fs(do)s(es)39 b(not)g(exit)g(the)g(program,)i(either)e(this)g +(function)f(or)390 5213 y(the)32 b(function)f(referred)f(to)i(b)m(y)g +(the)f(v)-5 b(alue)32 b(of)g Fr(rl_deprep_term_function)25 +b Fs(should)30 b(b)s(e)h(called)390 5322 y(b)s(efore)f(the)h(program)f +(exits)h(to)g(reset)g(the)f(terminal)h(settings.)p eop +end +%%Page: 40 44 +TeXDict begin 40 43 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(40)150 +299 y Fh(2.4.13)63 b(A)41 b(Readline)f(Example)150 446 +y Fs(Here)34 b(is)g(a)g(function)g(whic)m(h)g(c)m(hanges)g(lo)m(w)m +(ercase)j(c)m(haracters)e(to)f(their)g(upp)s(ercase)f(equiv)-5 +b(alen)m(ts,)37 b(and)150 555 y(upp)s(ercase)d(c)m(haracters)j(to)f(lo) +m(w)m(ercase.)58 b(If)35 b(this)g(function)g(w)m(as)h(b)s(ound)d(to)j +(`)p Fr(M-c)p Fs(',)h(then)e(t)m(yping)g(`)p Fr(M-c)p +Fs(')150 665 y(w)m(ould)c(c)m(hange)i(the)f(case)g(of)g(the)g(c)m +(haracter)h(under)d(p)s(oin)m(t.)44 b(T)m(yping)31 b(`)p +Fr(M-1)f(0)g(M-c)p Fs(')h(w)m(ould)g(c)m(hange)i(the)150 +775 y(case)e(of)g(the)g(follo)m(wing)g(10)h(c)m(haracters,)g(lea)m +(ving)g(the)e(cursor)g(on)g(the)h(last)g(c)m(haracter)h(c)m(hanged.)390 +956 y Fr(/*)47 b(Invert)f(the)h(case)g(of)g(the)g(COUNT)f(following)g +(characters.)e(*/)390 1066 y(int)390 1176 y(invert_case_line)f +(\(count,)j(key\))629 1285 y(int)h(count,)f(key;)390 +1395 y({)485 1504 y(register)g(int)h(start,)f(end,)h(i;)485 +1724 y(start)g(=)g(rl_point;)485 1943 y(if)h(\(rl_point)d(>=)i +(rl_end\))581 2052 y(return)f(\(0\);)485 2271 y(if)i(\(count)e(<)h(0\)) +581 2381 y({)676 2491 y(direction)f(=)h(-1;)676 2600 +y(count)g(=)g(-count;)581 2710 y(})485 2819 y(else)581 +2929 y(direction)e(=)j(1;)485 3148 y(/*)g(Find)e(the)h(end)g(of)g(the)g +(range)g(to)g(modify.)f(*/)485 3258 y(end)h(=)h(start)e(+)i(\(count)e +(*)h(direction\);)485 3477 y(/*)h(Force)e(it)h(to)g(be)h(within)e +(range.)g(*/)485 3587 y(if)i(\(end)e(>)i(rl_end\))581 +3696 y(end)f(=)g(rl_end;)485 3806 y(else)g(if)g(\(end)g(<)g(0\))581 +3915 y(end)g(=)g(0;)485 4134 y(if)h(\(start)e(==)h(end\))581 +4244 y(return)f(\(0\);)485 4463 y(if)i(\(start)e(>)h(end\))581 +4573 y({)676 4682 y(int)g(temp)g(=)g(start;)676 4792 +y(start)g(=)g(end;)676 4902 y(end)g(=)h(temp;)581 5011 +y(})485 5230 y(/*)g(Tell)e(readline)g(that)g(we)i(are)f(modifying)e +(the)i(line,)629 5340 y(so)g(it)g(will)g(save)f(the)h(undo)g +(information.)d(*/)p eop end +%%Page: 41 45 +TeXDict begin 41 44 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(41)485 +299 y Fr(rl_modifying)45 b(\(start,)h(end\);)485 518 +y(for)h(\(i)h(=)f(start;)f(i)i(!=)f(end;)f(i++\))581 +628 y({)676 737 y(if)i(\(_rl_uppercase_p)43 b(\(rl_line_buffer[i]\)\)) +772 847 y(rl_line_buffer[i])g(=)k(_rl_to_lower)e +(\(rl_line_buffer[i]\);)676 956 y(else)i(if)g(\(_rl_lowercase_p)d +(\(rl_line_buffer[i]\)\))772 1066 y(rl_line_buffer[i])f(=)k +(_rl_to_upper)e(\(rl_line_buffer[i]\);)581 1176 y(})485 +1285 y(/*)j(Move)e(point)h(to)g(on)g(top)g(of)g(the)g(last)g(character) +e(changed.)g(*/)485 1395 y(rl_point)h(=)h(\(direction)e(==)j(1\))f(?)g +(end)g(-)h(1)f(:)h(start;)485 1504 y(return)f(\(0\);)390 +1614 y(})150 1947 y Fq(2.5)68 b(Readline)47 b(Signal)e(Handling)150 +2106 y Fs(Signals)31 b(are)f(async)m(hronous)g(ev)m(en)m(ts)i(sen)m(t)f +(to)g(a)g(pro)s(cess)f(b)m(y)h(the)f(Unix)g(k)m(ernel,)i(sometimes)f +(on)g(b)s(ehalf)150 2216 y(of)k(another)g(pro)s(cess.)53 +b(They)34 b(are)h(in)m(tended)g(to)g(indicate)h(exceptional)g(ev)m(en)m +(ts,)i(lik)m(e)e(a)f(user)f(pressing)150 2325 y(the)g(in)m(terrupt)f(k) +m(ey)h(on)g(his)f(terminal,)i(or)f(a)g(net)m(w)m(ork)g(connection)h(b)s +(eing)e(brok)m(en.)50 b(There)34 b(is)f(a)h(class)150 +2435 y(of)29 b(signals)g(that)h(can)f(b)s(e)f(sen)m(t)h(to)h(the)f(pro) +s(cess)f(curren)m(tly)h(reading)g(input)f(from)g(the)h(k)m(eyb)s(oard.) +40 b(Since)150 2544 y(Readline)45 b(c)m(hanges)g(the)g(terminal)g +(attributes)g(when)e(it)i(is)g(called,)k(it)c(needs)f(to)h(p)s(erform)e +(sp)s(ecial)150 2654 y(pro)s(cessing)27 b(when)g(suc)m(h)g(a)h(signal)g +(is)g(receiv)m(ed)h(in)e(order)g(to)h(restore)h(the)e(terminal)h(to)h +(a)f(sane)f(state,)j(or)150 2764 y(pro)m(vide)g(application)i(writers)e +(with)g(functions)g(to)h(do)g(so)f(man)m(ually)-8 b(.)275 +2965 y(Readline)40 b(con)m(tains)i(an)e(in)m(ternal)h(signal)g(handler) +f(that)h(is)f(installed)h(for)f(a)h(n)m(um)m(b)s(er)e(of)h(signals)150 +3074 y(\()p Fr(SIGINT)p Fs(,)k Fr(SIGQUIT)p Fs(,)f Fr(SIGTERM)p +Fs(,)g Fr(SIGALRM)p Fs(,)h Fr(SIGTSTP)p Fs(,)f Fr(SIGTTIN)p +Fs(,)g(and)e Fr(SIGTTOU)p Fs(\).)75 b(When)41 b(one)i(of)150 +3184 y(these)32 b(signals)g(is)g(receiv)m(ed,)i(the)e(signal)g(handler) +f(will)h(reset)g(the)g(terminal)g(attributes)h(to)f(those)g(that)150 +3294 y(w)m(ere)c(in)f(e\013ect)h(b)s(efore)f Fr(readline\(\))d +Fs(w)m(as)k(called,)h(reset)f(the)g(signal)f(handling)g(to)h(what)f(it) +h(w)m(as)f(b)s(efore)150 3403 y Fr(readline\(\))42 b +Fs(w)m(as)k(called,)k(and)44 b(resend)h(the)g(signal)h(to)g(the)f +(calling)i(application.)86 b(If)44 b(and)h(when)150 3513 +y(the)34 b(calling)i(application's)f(signal)g(handler)e(returns,)h +(Readline)g(will)h(reinitialize)h(the)e(terminal)h(and)150 +3622 y(con)m(tin)m(ue)29 b(to)g(accept)h(input.)39 b(When)28 +b(a)h Fr(SIGINT)d Fs(is)j(receiv)m(ed,)h(the)e(Readline)h(signal)g +(handler)f(p)s(erforms)150 3732 y(some)39 b(additional)h(w)m(ork,)h +(whic)m(h)d(will)h(cause)g(an)m(y)h(partially-en)m(tered)g(line)f(to)h +(b)s(e)e(ab)s(orted)g(\(see)i(the)150 3842 y(description)30 +b(of)h Fr(rl_free_line_state\(\))25 b Fs(b)s(elo)m(w\).)275 +4043 y(There)e(is)i(an)f(additional)h(Readline)g(signal)g(handler,)g +(for)f Fr(SIGWINCH)p Fs(,)g(whic)m(h)g(the)g(k)m(ernel)h(sends)e(to)j +(a)150 4152 y(pro)s(cess)i(whenev)m(er)h(the)g(terminal's)g(size)h(c)m +(hanges)g(\(for)f(example,)h(if)f(a)g(user)f(resizes)i(an)e +Fr(xterm)p Fs(\).)39 b(The)150 4262 y(Readline)d Fr(SIGWINCH)e +Fs(handler)g(up)s(dates)h(Readline's)h(in)m(ternal)h(screen)e(size)i +(information,)g(and)e(then)150 4372 y(calls)g(an)m(y)f +Fr(SIGWINCH)e Fs(signal)i(handler)f(the)h(calling)h(application)g(has)f +(installed.)51 b(Readline)35 b(calls)g(the)150 4481 y(application's)i +Fr(SIGWINCH)c Fs(signal)i(handler)g(without)g(resetting)h(the)g +(terminal)f(to)h(its)g(original)g(state.)150 4591 y(If)31 +b(the)i(application's)g(signal)g(handler)e(do)s(es)g(more)h(than)g(up)s +(date)f(its)i(idea)f(of)g(the)g(terminal)h(size)g(and)150 +4700 y(return)28 b(\(for)i(example,)h(a)f Fr(longjmp)d +Fs(bac)m(k)k(to)f(a)g(main)g(pro)s(cessing)f(lo)s(op\),)h(it)g +Fj(must)39 b Fs(call)31 b Fr(rl_cleanup_)150 4810 y(after_signal\(\))26 +b Fs(\(describ)s(ed)k(b)s(elo)m(w\),)h(to)g(restore)g(the)g(terminal)g +(state.)275 5011 y(Readline)e(pro)m(vides)f(t)m(w)m(o)i(v)-5 +b(ariables)29 b(that)h(allo)m(w)g(application)g(writers)e(to)h(con)m +(trol)h(whether)e(or)h(not)150 5121 y(it)34 b(will)f(catc)m(h)i +(certain)f(signals)f(and)g(act)h(on)f(them)g(when)f(they)i(are)f +(receiv)m(ed.)51 b(It)33 b(is)g(imp)s(ortan)m(t)g(that)150 +5230 y(applications)38 b(c)m(hange)g(the)e(v)-5 b(alues)37 +b(of)g(these)g(v)-5 b(ariables)37 b(only)g(when)f(calling)i +Fr(readline\(\))p Fs(,)d(not)i(in)g(a)150 5340 y(signal)31 +b(handler,)f(so)g(Readline's)i(in)m(ternal)f(signal)g(state)h(is)e(not) +h(corrupted.)p eop end +%%Page: 42 46 +TeXDict begin 42 45 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(42)3371 +299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_catch_signals)390 +408 y Fs(If)28 b(this)h(v)-5 b(ariable)30 b(is)f(non-zero,)h(Readline)f +(will)g(install)h(signal)f(handlers)f(for)h Fr(SIGINT)p +Fs(,)f Fr(SIGQUIT)p Fs(,)390 518 y Fr(SIGTERM)p Fs(,)h +Fr(SIGALRM)p Fs(,)f Fr(SIGTSTP)p Fs(,)h Fr(SIGTTIN)p +Fs(,)g(and)g Fr(SIGTTOU)p Fs(.)390 661 y(The)h(default)g(v)-5 +b(alue)31 b(of)g Fr(rl_catch_signals)26 b Fs(is)k(1.)3371 +863 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_catch_sigwinch)390 +972 y Fs(If)30 b(this)g(v)-5 b(ariable)31 b(is)g(non-zero,)g(Readline)g +(will)g(install)g(a)g(signal)g(handler)e(for)h Fr(SIGWINCH)p +Fs(.)390 1115 y(The)g(default)g(v)-5 b(alue)31 b(of)g +Fr(rl_catch_sigwinch)25 b Fs(is)31 b(1.)275 1317 y(If)f(an)h +(application)h(do)s(es)f(not)g(wish)f(to)i(ha)m(v)m(e)g(Readline)g +(catc)m(h)g(an)m(y)f(signals,)h(or)f(to)h(handle)e(signals)150 +1426 y(other)39 b(than)f(those)h(Readline)h(catc)m(hes)g(\()p +Fr(SIGHUP)p Fs(,)g(for)e(example\),)k(Readline)d(pro)m(vides)g(con)m(v) +m(enience)150 1536 y(functions)30 b(to)h(do)f(the)h(necessary)g +(terminal)g(and)e(in)m(ternal)i(state)h(clean)m(up)f(up)s(on)e(receipt) +i(of)g(a)f(signal.)3350 1738 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_cleanup_after_signal)e Ff(\()p Fi(v)m(oid)p +Ff(\))390 1847 y Fs(This)33 b(function)h(will)g(reset)g(the)g(state)i +(of)e(the)g(terminal)g(to)h(what)f(it)g(w)m(as)g(b)s(efore)g +Fr(readline\(\))390 1957 y Fs(w)m(as)c(called,)h(and)d(remo)m(v)m(e)j +(the)f(Readline)g(signal)g(handlers)e(for)h(all)h(signals,)h(dep)s +(ending)d(on)h(the)390 2066 y(v)-5 b(alues)31 b(of)f +Fr(rl_catch_signals)c Fs(and)k Fr(rl_catch_sigwinch)p +Fs(.)3350 2268 y([F)-8 b(unction])-3599 b Fg(void)54 +b(rl_free_line_state)c Ff(\()p Fi(v)m(oid)p Ff(\))390 +2377 y Fs(This)38 b(will)i(free)f(an)m(y)h(partial)g(state)g(asso)s +(ciated)h(with)e(the)g(curren)m(t)g(input)f(line)i(\(undo)e(infor-)390 +2487 y(mation,)46 b(an)m(y)d(partial)h(history)e(en)m(try)-8 +b(,)47 b(an)m(y)42 b(partially-en)m(tered)j(k)m(eyb)s(oard)d(macro,)47 +b(and)42 b(an)m(y)390 2597 y(partially-en)m(tered)50 +b(n)m(umeric)d(argumen)m(t\).)94 b(This)47 b(should)g(b)s(e)g(called)i +(b)s(efore)e Fr(rl_cleanup_)390 2706 y(after_signal\(\))p +Fs(.)74 b(The)42 b(Readline)h(signal)g(handler)f(for)h +Fr(SIGINT)e Fs(calls)i(this)g(to)g(ab)s(ort)g(the)390 +2816 y(curren)m(t)30 b(input)g(line.)3350 3017 y([F)-8 +b(unction])-3599 b Fg(void)54 b(rl_reset_after_signal)d +Ff(\()p Fi(v)m(oid)p Ff(\))390 3127 y Fs(This)28 b(will)g(reinitialize) +j(the)e(terminal)g(and)f(reinstall)h(an)m(y)g(Readline)g(signal)g +(handlers,)f(dep)s(end-)390 3236 y(ing)j(on)f(the)g(v)-5 +b(alues)31 b(of)g Fr(rl_catch_signals)26 b Fs(and)j Fr +(rl_catch_sigwinch)p Fs(.)275 3438 y(If)38 b(an)i(application)g(do)s +(es)f(not)h(wish)f(Readline)h(to)g(catc)m(h)h Fr(SIGWINCH)p +Fs(,)e(it)h(ma)m(y)g(call)h Fr(rl_resize_)150 3548 y(terminal\(\))24 +b Fs(or)j Fr(rl_set_screen_size\(\))22 b Fs(to)28 b(force)g(Readline)f +(to)h(up)s(date)f(its)g(idea)h(of)f(the)g(terminal)150 +3657 y(size)k(when)f(a)g Fr(SIGWINCH)e Fs(is)j(receiv)m(ed.)3350 +3859 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_echo_signal_char)d +Ff(\()p Fi(in)m(t)31 b(sig)p Ff(\))390 3968 y Fs(If)43 +b(an)g(application)i(wishes)e(to)i(install)f(its)g(o)m(wn)f(signal)i +(handlers,)h(but)c(still)j(ha)m(v)m(e)g(readline)390 +4078 y(displa)m(y)31 b(c)m(haracters)h(that)f(generate)h(signals,)f +(calling)h(this)e(function)g(with)g Fi(sig)39 b Fs(set)31 +b(to)g Fr(SIGINT)p Fs(,)390 4187 y Fr(SIGQUIT)p Fs(,)e(or)h +Fr(SIGTSTP)e Fs(will)j(displa)m(y)g(the)f(c)m(haracter)i(generating)g +(that)f(signal.)3350 4389 y([F)-8 b(unction])-3599 b +Fg(void)54 b(rl_resize_terminal)c Ff(\()p Fi(v)m(oid)p +Ff(\))390 4499 y Fs(Up)s(date)30 b(Readline's)h(in)m(ternal)g(screen)g +(size)g(b)m(y)f(reading)h(v)-5 b(alues)31 b(from)f(the)g(k)m(ernel.) +3350 4700 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_set_screen_size)c +Ff(\()p Fi(in)m(t)32 b(ro)m(ws,)e(in)m(t)h(cols)p Ff(\))390 +4810 y Fs(Set)d(Readline's)h(idea)g(of)f(the)g(terminal)h(size)g(to)g +Fi(ro)m(ws)j Fs(ro)m(ws)c(and)f Fi(cols)33 b Fs(columns.)40 +b(If)27 b(either)i Fi(ro)m(ws)390 4919 y Fs(or)35 b Fi(columns)k +Fs(is)c(less)g(than)g(or)g(equal)h(to)g(0,)h(Readline's)f(idea)g(of)f +(that)h(terminal)f(dimension)g(is)390 5029 y(unc)m(hanged.)275 +5230 y(If)d(an)i(application)g(do)s(es)f(not)h(w)m(an)m(t)g(to)g +(install)g(a)g Fr(SIGWINCH)d Fs(handler,)j(but)e(is)i(still)g(in)m +(terested)g(in)150 5340 y(the)d(screen)f(dimensions,)g(Readline's)h +(idea)g(of)g(the)f(screen)h(size)g(ma)m(y)g(b)s(e)f(queried.)p +eop end +%%Page: 43 47 +TeXDict begin 43 46 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(43)3350 +299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_get_screen_size)c +Ff(\()p Fi(in)m(t)32 b(*ro)m(ws,)f(in)m(t)g(*cols)p Ff(\))390 +408 y Fs(Return)e(Readline's)i(idea)g(of)f(the)g(terminal's)h(size)g +(in)f(the)g(v)-5 b(ariables)31 b(p)s(oin)m(ted)f(to)g(b)m(y)g(the)h +(argu-)390 518 y(men)m(ts.)3350 696 y([F)-8 b(unction])-3599 +b Fg(void)54 b(rl_reset_screen_size)d Ff(\()p Fi(v)m(oid)p +Ff(\))390 806 y Fs(Cause)30 b(Readline)h(to)g(reobtain)g(the)g(screen)f +(size)h(and)f(recalculate)j(its)e(dimensions.)275 984 +y(The)e(follo)m(wing)j(functions)e(install)h(and)f(remo)m(v)m(e)i +(Readline's)f(signal)g(handlers.)3350 1162 y([F)-8 b(unction])-3599 +b Fg(int)53 b(rl_set_signals)d Ff(\()p Fi(v)m(oid)p Ff(\))390 +1272 y Fs(Install)36 b(Readline's)f(signal)h(handler)e(for)h +Fr(SIGINT)p Fs(,)g Fr(SIGQUIT)p Fs(,)g Fr(SIGTERM)p Fs(,)f +Fr(SIGALRM)p Fs(,)h Fr(SIGTSTP)p Fs(,)390 1381 y Fr(SIGTTIN)p +Fs(,)23 b Fr(SIGTTOU)p Fs(,)g(and)f Fr(SIGWINCH)p Fs(,)h(dep)s(ending)f +(on)h(the)g(v)-5 b(alues)23 b(of)h Fr(rl_catch_signals)19 +b Fs(and)390 1491 y Fr(rl_catch_sigwinch)p Fs(.)3350 +1669 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_clear_signals)e +Ff(\()p Fi(v)m(oid)p Ff(\))390 1779 y Fs(Remo)m(v)m(e)32 +b(all)f(of)g(the)g(Readline)g(signal)g(handlers)e(installed)i(b)m(y)f +Fr(rl_set_signals\(\))p Fs(.)150 2007 y Fq(2.6)68 b(Custom)45 +b(Completers)150 2167 y Fs(T)m(ypically)-8 b(,)47 b(a)c(program)g(that) +g(reads)f(commands)h(from)f(the)g(user)g(has)h(a)g(w)m(a)m(y)g(of)g +(disam)m(biguating)150 2276 y(commands)35 b(and)g(data.)56 +b(If)35 b(y)m(our)h(program)f(is)g(one)h(of)g(these,)h(then)e(it)h(can) +g(pro)m(vide)f(completion)i(for)150 2386 y(commands,)29 +b(data,)i(or)e(b)s(oth.)39 b(The)29 b(follo)m(wing)i(sections)f +(describ)s(e)e(ho)m(w)i(y)m(our)f(program)g(and)f(Readline)150 +2495 y(co)s(op)s(erate)j(to)h(pro)m(vide)e(this)g(service.)150 +2691 y Fh(2.6.1)63 b(Ho)m(w)40 b(Completing)i(W)-10 b(orks)150 +2838 y Fs(In)26 b(order)f(to)i(complete)h(some)f(text,)h(the)f(full)f +(list)h(of)f(p)s(ossible)g(completions)h(m)m(ust)g(b)s(e)e(a)m(v)-5 +b(ailable.)42 b(That)150 2947 y(is,)28 b(it)f(is)g(not)g(p)s(ossible)g +(to)g(accurately)i(expand)d(a)h(partial)h(w)m(ord)f(without)f(kno)m +(wing)i(all)f(of)g(the)g(p)s(ossible)150 3057 y(w)m(ords)33 +b(whic)m(h)g(mak)m(e)h(sense)f(in)g(that)g(con)m(text.)51 +b(The)33 b(Readline)h(library)e(pro)m(vides)i(the)f(user)f(in)m +(terface)150 3166 y(to)d(completion,)h(and)e(t)m(w)m(o)i(of)e(the)h +(most)f(common)h(completion)h(functions:)39 b(\014lename)29 +b(and)e(username.)150 3276 y(F)-8 b(or)39 b(completing)g(other)f(t)m +(yp)s(es)g(of)h(text,)i(y)m(ou)d(m)m(ust)g(write)g(y)m(our)g(o)m(wn)g +(completion)h(function.)64 b(This)150 3385 y(section)32 +b(describ)s(es)d(exactly)j(what)f(suc)m(h)f(functions)g(m)m(ust)g(do,)g +(and)g(pro)m(vides)g(an)h(example.)275 3518 y(There)e(are)i(three)g(ma) +5 b(jor)30 b(functions)g(used)g(to)h(p)s(erform)e(completion:)199 +3650 y(1.)61 b(The)43 b(user-in)m(terface)h(function)f +Fr(rl_complete\(\))p Fs(.)76 b(This)43 b(function)g(is)g(called)i(with) +e(the)h(same)330 3760 y(argumen)m(ts)35 b(as)h(other)f(bindable)f +(Readline)i(functions:)49 b Fi(coun)m(t)38 b Fs(and)c +Fi(in)m(v)m(oking)p 3101 3760 28 4 v 42 w(k)m(ey)8 b +Fs(.)55 b(It)35 b(isolates)330 3870 y(the)j(w)m(ord)f(to)h(b)s(e)f +(completed)i(and)d(calls)j Fr(rl_completion_matches\(\))31 +b Fs(to)39 b(generate)g(a)f(list)g(of)330 3979 y(p)s(ossible)31 +b(completions.)44 b(It)31 b(then)g(either)g(lists)h(the)f(p)s(ossible)g +(completions,)h(inserts)f(the)g(p)s(ossible)330 4089 +y(completions,)50 b(or)45 b(actually)i(p)s(erforms)d(the)h(completion,) +50 b(dep)s(ending)44 b(on)h(whic)m(h)g(b)s(eha)m(vior)g(is)330 +4198 y(desired.)199 4331 y(2.)61 b(The)33 b(in)m(ternal)h(function)g +Fr(rl_completion_matches\(\))27 b Fs(uses)33 b(an)g +(application-supplied)h Fi(gener-)330 4440 y(ator)44 +b Fs(function)37 b(to)h(generate)g(the)f(list)h(of)f(p)s(ossible)f +(matc)m(hes,)k(and)d(then)f(returns)g(the)h(arra)m(y)h(of)330 +4550 y(these)h(matc)m(hes.)68 b(The)39 b(caller)h(should)e(place)i(the) +f(address)f(of)h(its)g(generator)i(function)d(in)h Fr(rl_)330 +4660 y(completion_entry_functio)o(n)p Fs(.)199 4792 y(3.)61 +b(The)22 b(generator)i(function)f(is)g(called)h(rep)s(eatedly)f(from)g +Fr(rl_completion_matches\(\))o Fs(,)c(returning)330 4902 +y(a)33 b(string)f(eac)m(h)i(time.)48 b(The)32 b(argumen)m(ts)h(to)g +(the)g(generator)h(function)e(are)h Fi(text)i Fs(and)d +Fi(state)5 b Fs(.)49 b Fi(text)330 5011 y Fs(is)32 b(the)g(partial)h(w) +m(ord)f(to)h(b)s(e)e(completed.)47 b Fi(state)38 b Fs(is)32 +b(zero)h(the)f(\014rst)g(time)g(the)h(function)e(is)h(called,)330 +5121 y(allo)m(wing)46 b(the)e(generator)h(to)f(p)s(erform)f(an)m(y)h +(necessary)g(initialization,)51 b(and)43 b(a)h(p)s(ositiv)m(e)h(non-) +330 5230 y(zero)30 b(in)m(teger)h(for)d(eac)m(h)j(subsequen)m(t)d +(call.)42 b(The)29 b(generator)h(function)f(returns)f +Fr(\(char)h(*\)NULL)e Fs(to)330 5340 y(inform)37 b Fr +(rl_completion_matches\(\))32 b Fs(that)39 b(there)f(are)g(no)g(more)g +(p)s(ossibilities)h(left.)65 b(Usually)p eop end +%%Page: 44 48 +TeXDict begin 44 47 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(44)330 +299 y(the)39 b(generator)h(function)e(computes)h(the)g(list)g(of)g(p)s +(ossible)f(completions)i(when)e Fi(state)45 b Fs(is)39 +b(zero,)330 408 y(and)25 b(returns)f(them)i(one)f(at)i(a)f(time)g(on)f +(subsequen)m(t)g(calls.)40 b(Eac)m(h)26 b(string)g(the)g(generator)g +(function)330 518 y(returns)31 b(as)h(a)g(matc)m(h)h(m)m(ust)f(b)s(e)f +(allo)s(cated)j(with)d Fr(malloc\(\))p Fs(;)g(Readline)h(frees)g(the)g +(strings)g(when)330 628 y(it)i(has)g(\014nished)e(with)i(them.)51 +b(Suc)m(h)33 b(a)h(generator)h(function)f(is)g(referred)f(to)h(as)h(an) +e Fi(application-)330 737 y(sp)s(eci\014c)d(completion)i(function)p +Fs(.)3350 923 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_complete)c +Ff(\()p Fi(in)m(t)31 b(ignore,)g(in)m(t)g(in)m(v)m(oking)p +1929 923 28 4 v 42 w(k)m(ey)p Ff(\))390 1032 y Fs(Complete)g(the)g(w)m +(ord)g(at)g(or)g(b)s(efore)f(p)s(oin)m(t.)41 b(Y)-8 b(ou)32 +b(ha)m(v)m(e)g(supplied)d(the)i(function)f(that)h(do)s(es)g(the)390 +1142 y(initial)42 b(simple)f(matc)m(hing)i(selection)f(algorithm)h +(\(see)f Fr(rl_completion_matches\(\))o Fs(\).)67 b(The)390 +1251 y(default)31 b(is)f(to)h(do)f(\014lename)h(completion.)3371 +1437 y([V)-8 b(ariable])-3598 b Fg(rl_compentry_func_t)58 +b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 1546 +y Fs(This)39 b(is)h(a)g(p)s(oin)m(ter)g(to)h(the)f(generator)h +(function)f(for)f Fr(rl_completion_matches\(\))p Fs(.)63 +b(If)40 b(the)390 1656 y(v)-5 b(alue)24 b(of)g Fr +(rl_completion_entry_funct)o(ion)17 b Fs(is)24 b Fr(NULL)f +Fs(then)g(the)h(default)g(\014lename)g(generator)390 +1765 y(function,)49 b Fr(rl_filename_completion_)o(fun)o(ctio)o(n\(\))p +Fs(,)42 b(is)j(used.)84 b(An)44 b Fi(application-sp)s(eci\014c)390 +1875 y(completion)22 b(function)f Fs(is)g(a)h(function)e(whose)h +(address)f(is)h(assigned)h(to)f Fr(rl_completion_entry_)390 +1985 y(function)28 b Fs(and)i(whose)g(return)f(v)-5 b(alues)31 +b(are)g(used)e(to)j(generate)f(p)s(ossible)f(completions.)150 +2184 y Fh(2.6.2)63 b(Completion)41 b(F)-10 b(unctions)150 +2331 y Fs(Here)31 b(is)f(the)h(complete)h(list)f(of)f(callable)j +(completion)e(functions)f(presen)m(t)h(in)f(Readline.)3350 +2517 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_complete_internal)f +Ff(\()p Fi(in)m(t)31 b(what)p 1828 2517 V 40 w(to)p 1948 +2517 V 41 w(do)p Ff(\))390 2626 y Fs(Complete)37 b(the)g(w)m(ord)f(at)i +(or)e(b)s(efore)g(p)s(oin)m(t.)60 b Fi(what)p 2208 2626 +V 40 w(to)p 2328 2626 V 41 w(do)41 b Fs(sa)m(ys)c(what)f(to)i(do)e +(with)g(the)h(com-)390 2736 y(pletion.)44 b(A)31 b(v)-5 +b(alue)32 b(of)f(`)p Fr(?)p Fs(')g(means)h(list)f(the)h(p)s(ossible)e +(completions.)45 b(`)p Fr(TAB)p Fs(')31 b(means)g(do)g(standard)390 +2845 y(completion.)44 b(`)p Fr(*)p Fs(')32 b(means)f(insert)g(all)h(of) +f(the)g(p)s(ossible)g(completions.)44 b(`)p Fr(!)p Fs(')32 +b(means)f(to)h(displa)m(y)f(all)390 2955 y(of)k(the)f(p)s(ossible)g +(completions,)j(if)d(there)h(is)f(more)g(than)h(one,)g(as)g(w)m(ell)g +(as)g(p)s(erforming)e(partial)390 3065 y(completion.)41 +b(`)p Fr(@)p Fs(')27 b(is)h(similar)f(to)h(`)p Fr(!)p +Fs(',)h(but)d(p)s(ossible)h(completions)i(are)e(not)h(listed)g(if)f +(the)g(p)s(ossible)390 3174 y(completions)32 b(share)e(a)g(common)h +(pre\014x.)3350 3359 y([F)-8 b(unction])-3599 b Fg(int)53 +b(rl_complete)c Ff(\()p Fi(in)m(t)31 b(ignore,)g(in)m(t)g(in)m(v)m +(oking)p 1929 3359 V 42 w(k)m(ey)p Ff(\))390 3469 y Fs(Complete)42 +b(the)f(w)m(ord)g(at)h(or)f(b)s(efore)g(p)s(oin)m(t.)73 +b(Y)-8 b(ou)41 b(ha)m(v)m(e)i(supplied)c(the)j(function)f(that)g(do)s +(es)390 3579 y(the)33 b(initial)h(simple)f(matc)m(hing)h(selection)h +(algorithm)f(\(see)g Fr(rl_completion_matches\(\))27 +b Fs(and)390 3688 y Fr(rl_completion_entry_func)o(tion)o +Fs(\).)52 b(The)35 b(default)h(is)g(to)h(do)e(\014lename)h(completion.) +59 b(This)390 3798 y(calls)32 b Fr(rl_complete_internal\(\))24 +b Fs(with)30 b(an)g(argumen)m(t)h(dep)s(ending)e(on)h +Fi(in)m(v)m(oking)p 3314 3798 V 41 w(k)m(ey)8 b Fs(.)3350 +3983 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_possible_completio)q(ns) +f Ff(\()p Fi(in)m(t)31 b(coun)m(t,)g(in)m(t)g(in)m(v)m(oking)p +2534 3983 V 41 w(k)m(ey)p Ff(\))390 4093 y Fs(List)41 +b(the)f(p)s(ossible)g(completions.)73 b(See)40 b(description)h(of)g +Fr(rl_complete)27 b(\(\))p Fs(.)70 b(This)40 b(calls)i +Fr(rl_)390 4202 y(complete_internal\(\))25 b Fs(with)30 +b(an)g(argumen)m(t)h(of)g(`)p Fr(?)p Fs('.)3350 4388 +y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_insert_completions)f +Ff(\()p Fi(in)m(t)31 b(coun)m(t,)h(in)m(t)e(in)m(v)m(oking)p +2429 4388 V 42 w(k)m(ey)p Ff(\))390 4497 y Fs(Insert)j(the)h(list)g(of) +g(p)s(ossible)f(completions)i(in)m(to)f(the)g(line,)h(deleting)g(the)f +(partially-completed)390 4607 y(w)m(ord.)44 b(See)32 +b(description)g(of)g Fr(rl_complete\(\))p Fs(.)41 b(This)31 +b(calls)i Fr(rl_complete_internal\(\))25 b Fs(with)390 +4716 y(an)30 b(argumen)m(t)h(of)g(`)p Fr(*)p Fs('.)3350 +4902 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_completion_mode)e +Ff(\()p Fi(rl)p 1448 4902 V 40 w(command)p 1872 4902 +V 40 w(func)p 2082 4902 V 39 w(t)31 b(*cfunc)p Ff(\))390 +5011 y Fs(Returns)50 b(the)g(apppriate)h(v)-5 b(alue)50 +b(to)i(pass)e(to)h Fr(rl_complete_internal\(\))44 b Fs(dep)s(ending)49 +b(on)390 5121 y(whether)40 b Fi(cfunc)46 b Fs(w)m(as)41 +b(called)h(t)m(wice)g(in)f(succession)g(and)f(the)h(v)-5 +b(alues)41 b(of)g(the)g Fr(show-all-if-)390 5230 y(ambiguous)25 +b Fs(and)i Fr(show-all-if-unmodified)21 b Fs(v)-5 b(ariables.)41 +b(Application-sp)s(eci\014c)29 b(completion)390 5340 +y(functions)h(ma)m(y)h(use)f(this)g(function)g(to)h(presen)m(t)g(the)f +(same)h(in)m(terface)h(as)f Fr(rl_complete\(\))p Fs(.)p +eop end +%%Page: 45 49 +TeXDict begin 45 48 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(45)3350 +299 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(rl_completion_matches) +g Ff(\()p Fi(const)31 b(c)m(har)g(*text,)565 408 y(rl)p +632 408 28 4 v 40 w(comp)s(en)m(try)p 1094 408 V 40 w(func)p +1304 408 V 39 w(t)g(*en)m(try)p 1661 408 V 41 w(func)p +Ff(\))390 518 y Fs(Returns)37 b(an)g(arra)m(y)i(of)f(strings)f(whic)m +(h)h(is)f(a)h(list)h(of)f(completions)g(for)g Fi(text)r +Fs(.)64 b(If)37 b(there)h(are)g(no)390 628 y(completions,)f(returns)c +Fr(NULL)p Fs(.)52 b(The)34 b(\014rst)f(en)m(try)i(in)f(the)h(returned)e +(arra)m(y)i(is)g(the)f(substitution)390 737 y(for)26 +b Fi(text)r Fs(.)40 b(The)26 b(remaining)g(en)m(tries)h(are)g(the)f(p)s +(ossible)g(completions.)40 b(The)26 b(arra)m(y)g(is)g(terminated)390 +847 y(with)k(a)h Fr(NULL)e Fs(p)s(oin)m(ter.)390 986 +y Fi(en)m(try)p 603 986 V 40 w(func)44 b Fs(is)c(a)g(function)f(of)h(t) +m(w)m(o)g(args,)j(and)38 b(returns)h(a)g Fr(char)30 b(*)p +Fs(.)67 b(The)39 b(\014rst)g(argumen)m(t)h(is)390 1095 +y Fi(text)r Fs(.)66 b(The)38 b(second)h(is)f(a)h(state)h(argumen)m(t;)j +(it)c(is)g(zero)g(on)g(the)f(\014rst)g(call,)k(and)c(non-zero)h(on)390 +1205 y(subsequen)m(t)33 b(calls.)52 b Fi(en)m(try)p 1320 +1205 V 41 w(func)38 b Fs(returns)33 b(a)h Fr(NULL)f Fs(p)s(oin)m(ter)g +(to)i(the)f(caller)h(when)e(there)h(are)g(no)390 1314 +y(more)d(matc)m(hes.)3350 1507 y([F)-8 b(unction])-3599 +b Fg(char)54 b(*)e(rl_filename_completion)q(_fu)q(nct)q(ion)g +Ff(\()p Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)565 1617 +y(state)p Ff(\))390 1726 y Fs(A)26 b(generator)h(function)e(for)g +(\014lename)h(completion)h(in)e(the)h(general)h(case.)40 +b Fi(text)28 b Fs(is)e(a)g(partial)h(\014le-)390 1836 +y(name.)38 b(The)21 b(Bash)g(source)h(is)g(a)f(useful)g(reference)h +(for)f(writing)h(application-sp)s(eci\014c)h(completion)390 +1946 y(functions)30 b(\(the)h(Bash)f(completion)i(functions)e(call)i +(this)e(and)g(other)g(Readline)h(functions\).)3350 2139 +y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_username_completion)q +(_fu)q(nct)q(ion)g Ff(\()p Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)565 +2248 y(state)p Ff(\))390 2358 y Fs(A)d(completion)g(generator)h(for)e +(usernames.)40 b Fi(text)31 b Fs(con)m(tains)f(a)f(partial)g(username)f +(preceded)g(b)m(y)390 2467 y(a)j(random)f(c)m(haracter)i(\(usually)e(`) +p Fr(~)p Fs('\).)42 b(As)31 b(with)f(all)h(completion)h(generators,)g +Fi(state)37 b Fs(is)31 b(zero)g(on)390 2577 y(the)g(\014rst)e(call)j +(and)e(non-zero)h(for)f(subsequen)m(t)f(calls.)150 2780 +y Fh(2.6.3)63 b(Completion)41 b(V)-10 b(ariables)3371 +2982 y Fs([V)i(ariable])-3598 b Fg(rl_compentry_func_t)58 +b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 3091 +y Fs(A)34 b(p)s(oin)m(ter)f(to)h(the)g(generator)h(function)e(for)g +Fr(rl_completion_matches\(\))p Fs(.)44 b Fr(NULL)32 b +Fs(means)h(to)390 3201 y(use)d Fr(rl_filename_completion_fu)o(nct)o +(ion\()o(\))p Fs(,)25 b(the)30 b(default)h(\014lename)f(completer.)3371 +3394 y([V)-8 b(ariable])-3598 b Fg(rl_completion_func_t)58 +b(*)53 b(rl_attempted_completio)q(n_f)q(unct)q(ion)390 +3503 y Fs(A)35 b(p)s(oin)m(ter)g(to)g(an)g(alternativ)m(e)i(function)d +(to)i(create)g(matc)m(hes.)55 b(The)34 b(function)h(is)f(called)i(with) +390 3613 y Fi(text)r Fs(,)50 b Fi(start)r Fs(,)g(and)44 +b Fi(end)t Fs(.)84 b Fi(start)48 b Fs(and)d Fi(end)j +Fs(are)d(indices)g(in)g Fr(rl_line_buffer)d Fs(de\014ning)i(the)390 +3722 y(b)s(oundaries)37 b(of)i Fi(text)r Fs(,)i(whic)m(h)d(is)h(a)g(c)m +(haracter)h(string.)65 b(If)38 b(this)g(function)g(exists)h(and)f +(returns)390 3832 y Fr(NULL)p Fs(,)j(or)f(if)g(this)g(v)-5 +b(ariable)41 b(is)f(set)g(to)h Fr(NULL)p Fs(,)h(then)d +Fr(rl_complete\(\))e Fs(will)j(call)h(the)f(v)-5 b(alue)41 +b(of)390 3942 y Fr(rl_completion_entry_func)o(tion)20 +b Fs(to)28 b(generate)h(matc)m(hes,)g(otherwise)f(the)f(arra)m(y)h(of)f +(strings)390 4051 y(returned)44 b(will)h(b)s(e)f(used.)82 +b(If)45 b(this)f(function)h(sets)g(the)g Fr(rl_attempted_completion)o +(_ove)o(r)390 4161 y Fs(v)-5 b(ariable)31 b(to)f(a)h(non-zero)f(v)-5 +b(alue,)31 b(Readline)f(will)g(not)g(p)s(erform)f(its)h(default)g +(completion)h(ev)m(en)g(if)390 4270 y(this)f(function)g(returns)f(no)i +(matc)m(hes.)3371 4463 y([V)-8 b(ariable])-3598 b Fg(rl_quote_func_t)57 +b(*)52 b(rl_filename_quoting_)q(func)q(tio)q(n)390 4573 +y Fs(A)33 b(p)s(oin)m(ter)f(to)h(a)g(function)g(that)g(will)g(quote)g +(a)g(\014lename)f(in)h(an)f(application-sp)s(eci\014c)i(fashion.)390 +4682 y(This)k(is)i(called)g(if)f(\014lename)h(completion)g(is)f(b)s +(eing)g(attempted)i(and)d(one)i(of)f(the)g(c)m(haracters)390 +4792 y(in)33 b Fr(rl_filename_quote_charac)o(ter)o(s)27 +b Fs(app)s(ears)33 b(in)g(a)g(completed)h(\014lename.)50 +b(The)32 b(function)390 4902 y(is)k(called)h(with)f Fi(text)r +Fs(,)i Fi(matc)m(h)p 1436 4902 V 41 w(t)m(yp)s(e)5 b +Fs(,)38 b(and)e Fi(quote)p 2121 4902 V 40 w(p)s(oin)m(ter)7 +b Fs(.)57 b(The)36 b Fi(text)j Fs(is)d(the)g(\014lename)g(to)h(b)s(e) +390 5011 y(quoted.)76 b(The)42 b Fi(matc)m(h)p 1210 5011 +V 41 w(t)m(yp)s(e)48 b Fs(is)42 b(either)h Fr(SINGLE_MATCH)p +Fs(,)f(if)g(there)g(is)h(only)f(one)h(completion)390 +5121 y(matc)m(h,)33 b(or)e Fr(MULT_MATCH)p Fs(.)41 b(Some)31 +b(functions)g(use)g(this)h(to)g(decide)f(whether)g(or)h(not)f(to)h +(insert)g(a)390 5230 y(closing)22 b(quote)f(c)m(haracter.)40 +b(The)20 b Fi(quote)p 1751 5230 V 41 w(p)s(oin)m(ter)27 +b Fs(is)21 b(a)g(p)s(oin)m(ter)g(to)g(an)m(y)h(op)s(ening)e(quote)h(c)m +(haracter)390 5340 y(the)31 b(user)e(t)m(yp)s(ed.)41 +b(Some)30 b(functions)g(c)m(ho)s(ose)h(to)g(reset)g(this)g(c)m +(haracter.)p eop end +%%Page: 46 50 +TeXDict begin 46 49 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(46)3371 +299 y([V)-8 b(ariable])-3598 b Fg(rl_dequote_func_t)57 +b(*)c(rl_filename_dequoting_)q(fun)q(cti)q(on)390 408 +y Fs(A)30 b(p)s(oin)m(ter)f(to)i(a)f(function)f(that)h(will)g(remo)m(v) +m(e)h(application-sp)s(eci\014c)g(quoting)f(c)m(haracters)h(from)390 +518 y(a)i(\014lename)g(b)s(efore)f(completion)h(is)g(attempted,)h(so)f +(those)g(c)m(haracters)h(do)e(not)h(in)m(terfere)g(with)390 +628 y(matc)m(hing)39 b(the)f(text)h(against)g(names)f(in)g(the)g +(\014lesystem.)64 b(It)38 b(is)g(called)h(with)f Fi(text)r +Fs(,)j(the)d(text)390 737 y(of)k(the)g(w)m(ord)f(to)i(b)s(e)e +(dequoted,)j(and)d Fi(quote)p 2010 737 28 4 v 41 w(c)m(har)7 +b Fs(,)45 b(whic)m(h)c(is)h(the)g(quoting)g(c)m(haracter)h(that)390 +847 y(delimits)33 b(the)f(\014lename)g(\(usually)h(`)p +Fr(')p Fs(')f(or)g(`)p Fr(")p Fs('\).)46 b(If)32 b Fi(quote)p +2368 847 V 41 w(c)m(har)39 b Fs(is)32 b(zero,)i(the)e(\014lename)g(w)m +(as)h(not)390 956 y(in)d(an)g(em)m(b)s(edded)g(string.)3371 +1148 y([V)-8 b(ariable])-3598 b Fg(rl_linebuf_func_t)57 +b(*)c(rl_char_is_quoted_p)390 1258 y Fs(A)37 b(p)s(oin)m(ter)g(to)g(a)g +(function)g(to)g(call)h(that)g(determines)f(whether)f(or)h(not)g(a)g +(sp)s(eci\014c)f(c)m(haracter)390 1367 y(in)e(the)h(line)f(bu\013er)g +(is)g(quoted,)i(according)g(to)f(whatev)m(er)g(quoting)g(mec)m(hanism)g +(the)f(program)390 1477 y(calling)26 b(Readline)f(uses.)39 +b(The)24 b(function)g(is)h(called)h(with)e(t)m(w)m(o)i(argumen)m(ts:)38 +b Fi(text)r Fs(,)27 b(the)e(text)h(of)f(the)390 1587 +y(line,)31 b(and)f Fi(index)6 b Fs(,)30 b(the)h(index)f(of)h(the)f(c)m +(haracter)i(in)e(the)h(line.)41 b(It)31 b(is)f(used)g(to)h(decide)g +(whether)f(a)390 1696 y(c)m(haracter)i(found)d(in)g Fr +(rl_completer_word_break_ch)o(ara)o(cter)o(s)24 b Fs(should)29 +b(b)s(e)h(used)f(to)i(break)390 1806 y(w)m(ords)f(for)g(the)h +(completer.)3371 1998 y([V)-8 b(ariable])-3598 b Fg +(rl_compignore_func_t)58 b(*)53 b(rl_ignore_some_complet)q(ion)q(s_fu)q +(nct)q(ion)390 2107 y Fs(This)37 b(function,)i(if)f(de\014ned,)g(is)g +(called)h(b)m(y)e(the)h(completer)h(when)e(real)h(\014lename)g +(completion)390 2217 y(is)c(done,)h(after)f(all)h(the)g(matc)m(hing)g +(names)e(ha)m(v)m(e)j(b)s(een)d(generated.)53 b(It)34 +b(is)g(passed)f(a)i Fr(NULL)d Fs(ter-)390 2326 y(minated)f(arra)m(y)g +(of)g(matc)m(hes.)43 b(The)31 b(\014rst)f(elemen)m(t)i(\()p +Fr(matches[0])p Fs(\))d(is)h(the)h(maximal)h(substring)390 +2436 y(common)d(to)g(all)h(matc)m(hes.)41 b(This)28 b(function)h(can)g +(re-arrange)g(the)g(list)h(of)f(matc)m(hes)g(as)g(required,)390 +2545 y(but)h(eac)m(h)h(elemen)m(t)h(deleted)f(from)f(the)h(arra)m(y)g +(m)m(ust)f(b)s(e)g(freed.)3371 2737 y([V)-8 b(ariable])-3598 +b Fg(rl_icppfunc_t)56 b(*)d(rl_directory_completio)q(n_ho)q(ok)390 +2847 y Fs(This)44 b(function,)49 b(if)d(de\014ned,)i(is)d(allo)m(w)m +(ed)i(to)f(mo)s(dify)e(the)i(directory)g(p)s(ortion)e(of)i(\014lenames) +390 2956 y(Readline)35 b(completes.)56 b(It)35 b(could)g(b)s(e)f(used)g +(to)i(expand)e(sym)m(b)s(olic)h(links)g(or)g(shell)g(v)-5 +b(ariables)35 b(in)390 3066 y(pathnames.)70 b(It)41 b(is)f(called)h +(with)f(the)h(address)e(of)i(a)g(string)f(\(the)h(curren)m(t)f +(directory)h(name\))390 3176 y(as)d(an)f(argumen)m(t,)j(and)d(ma)m(y)i +(mo)s(dify)d(that)j(string.)62 b(If)37 b(the)h(string)f(is)h(replaced)g +(with)f(a)h(new)390 3285 y(string,)j(the)d(old)h(v)-5 +b(alue)39 b(should)e(b)s(e)h(freed.)64 b(An)m(y)39 b(mo)s(di\014ed)e +(directory)i(name)f(should)g(ha)m(v)m(e)i(a)390 3395 +y(trailing)c(slash.)54 b(The)35 b(mo)s(di\014ed)e(v)-5 +b(alue)36 b(will)f(b)s(e)f(used)g(as)i(part)e(of)h(the)h(completion,)h +(replacing)390 3504 y(the)32 b(directory)g(p)s(ortion)f(of)h(the)g +(pathname)f(the)h(user)f(t)m(yp)s(ed.)44 b(A)m(t)33 b(the)f(least,)h +(ev)m(en)g(if)e(no)h(other)390 3614 y(expansion)j(is)h(p)s(erformed,)f +(this)h(function)f(should)g(remo)m(v)m(e)i(an)m(y)f(quote)g(c)m +(haracters)h(from)e(the)390 3724 y(directory)24 b(name,)h(b)s(ecause)f +(its)g(result)f(will)h(b)s(e)f(passed)g(directly)h(to)g +Fr(opendir\(\))p Fs(.)36 b(The)23 b(directory)390 3833 +y(completion)34 b(ho)s(ok)f(returns)f(an)h(in)m(teger)h(that)g(should)e +(b)s(e)g(non-zero)i(if)f(the)g(function)g(mo)s(di\014es)390 +3943 y(its)f(directory)f(argumen)m(t.)44 b(The)31 b(function)f(should)h +(not)g(mo)s(dify)g(the)g(directory)h(argumen)m(t)f(if)g(it)390 +4052 y(returns)e(0.)3371 4244 y([V)-8 b(ariable])-3598 +b Fg(rl_dequote_func_t)57 b(*)c(rl_filename_rewrite_ho)q(ok)390 +4354 y Fs(If)23 b(non-zero,)j(this)e(is)g(the)g(address)e(of)i(a)h +(function)e(called)i(when)e(reading)h(directory)g(en)m(tries)g(from)390 +4463 y(the)d(\014lesystem)g(for)g(completion)i(and)d(comparing)h(them)g +(to)h(the)f(partial)h(w)m(ord)f(to)g(b)s(e)g(completed.)390 +4573 y(The)g(function)g(should)f(p)s(erform)g(an)m(y)h(necesary)h +(application)h(or)e(system-sp)s(eci\014c)g(con)m(v)m(ersion)i(on)390 +4682 y(the)f(\014lename,)j(suc)m(h)d(as)g(con)m(v)m(erting)i(b)s(et)m +(w)m(een)f(c)m(haracter)h(sets)e(or)g(con)m(v)m(erting)i(from)e(a)h +(\014lesystem)390 4792 y(format)34 b(to)h(a)f(c)m(haracter)i(input)d +(format.)52 b(The)33 b(function)h(tak)m(es)h(t)m(w)m(o)h(argumen)m(ts:) +48 b Fi(fname)5 b Fs(,)35 b(the)390 4902 y(\014lename)29 +b(to)g(b)s(e)f(con)m(v)m(erted,)j(and)d Fi(fnlen)p Fs(,)g(its)h(length) +g(in)f(b)m(ytes.)41 b(It)29 b(m)m(ust)f(either)h(return)f(its)h +(\014rst)390 5011 y(argumen)m(t)i(\(if)g(no)g(con)m(v)m(ersion)h(tak)m +(es)g(place\))g(or)f(the)g(con)m(v)m(erted)h(\014lename)f(in)g +(newly-allo)s(cated)390 5121 y(memory)-8 b(.)48 b(The)32 +b(con)m(v)m(erted)i(form)e(is)h(used)f(to)h(compare)g(against)h(the)f +(w)m(ord)f(to)i(b)s(e)e(completed,)390 5230 y(and,)37 +b(if)g(it)g(matc)m(hes,)i(is)d(added)g(to)h(the)f(list)h(of)g(matc)m +(hes.)59 b(Readline)37 b(will)g(free)f(the)h(allo)s(cated)390 +5340 y(string.)p eop end +%%Page: 47 51 +TeXDict begin 47 50 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(47)3371 +299 y([V)-8 b(ariable])-3598 b Fg(rl_compdisp_func_t)58 +b(*)52 b(rl_completion_display)q(_ma)q(tch)q(es_h)q(ook)390 +408 y Fs(If)22 b(non-zero,)i(then)e(this)g(is)g(the)g(address)f(of)h(a) +g(function)g(to)h(call)g(when)e(completing)i(a)g(w)m(ord)e(w)m(ould)390 +518 y(normally)h(displa)m(y)h(the)f(list)h(of)f(p)s(ossible)g(matc)m +(hes.)39 b(This)21 b(function)h(is)g(called)i(in)e(lieu)g(of)g +(Readline)390 628 y(displa)m(ying)37 b(the)f(list.)60 +b(It)36 b(tak)m(es)i(three)f(argumen)m(ts:)53 b(\()p +Fr(char)30 b(**)p Fi(matc)m(hes)t Fs(,)38 b Fr(int)e +Fi(n)m(um)p 3367 628 28 4 v 39 w(matc)m(hes)t Fs(,)390 +737 y Fr(int)26 b Fi(max)p 735 737 V 40 w(length)p Fs(\))h(where)f +Fi(matc)m(hes)31 b Fs(is)c(the)f(arra)m(y)h(of)g(matc)m(hing)g +(strings,)h Fi(n)m(um)p 3152 737 V 39 w(matc)m(hes)j +Fs(is)c(the)390 847 y(n)m(um)m(b)s(er)h(of)h(strings)g(in)g(that)g +(arra)m(y)-8 b(,)31 b(and)d Fi(max)p 2020 847 V 40 w(length)i +Fs(is)f(the)g(length)h(of)f(the)g(longest)h(string)f(in)390 +956 y(that)g(arra)m(y)-8 b(.)41 b(Readline)28 b(pro)m(vides)g(a)h(con)m +(v)m(enience)h(function,)e Fr(rl_display_match_list)p +Fs(,)23 b(that)390 1066 y(tak)m(es)36 b(care)g(of)f(doing)g(the)g +(displa)m(y)f(to)i(Readline's)f(output)g(stream.)54 b(That)35 +b(function)f(ma)m(y)i(b)s(e)390 1176 y(called)c(from)d(this)i(ho)s(ok.) +3371 1367 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_basic_word_break_ch)q(ara)q(cter)q(s)390 1477 y Fs(The)44 +b(basic)g(list)h(of)f(c)m(haracters)i(that)f(signal)g(a)f(break)g(b)s +(et)m(w)m(een)h(w)m(ords)f(for)g(the)g(completer)390 +1587 y(routine.)61 b(The)37 b(default)g(v)-5 b(alue)37 +b(of)h(this)f(v)-5 b(ariable)38 b(is)f(the)g(c)m(haracters)i(whic)m(h)e +(break)g(w)m(ords)f(for)390 1696 y(completion)c(in)e(Bash:)41 +b Fr(")30 b(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fs(.)3371 1888 +y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_basic_quote_charact)q(ers)390 1998 y Fs(A)30 b(list)i(of)e(quote)h +(c)m(haracters)h(whic)m(h)e(can)h(cause)g(a)f(w)m(ord)g(break.)3371 +2189 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_completer_word_brea)q(k_c)q(hara)q(cte)q(rs)390 2299 +y Fs(The)64 b(list)i(of)f(c)m(haracters)h(that)g(signal)g(a)f(break)g +(b)s(et)m(w)m(een)g(w)m(ords)g(for)f Fr(rl_complete_)390 +2408 y(internal\(\))p Fs(.)38 b(The)30 b(default)g(list)h(is)g(the)f(v) +-5 b(alue)31 b(of)g Fr(rl_basic_word_break_cha)o(ract)o(ers)p +Fs(.)3371 2600 y([V)-8 b(ariable])-3598 b Fg(rl_cpvfunc_t)56 +b(*)d(rl_completion_word_brea)q(k_ho)q(ok)390 2710 y +Fs(If)31 b(non-zero,)i(this)e(is)h(the)f(address)g(of)g(a)h(function)g +(to)g(call)h(when)d(Readline)i(is)g(deciding)f(where)390 +2819 y(to)k(separate)g(w)m(ords)f(for)g(w)m(ord)g(completion.)54 +b(It)34 b(should)f(return)g(a)i(c)m(haracter)h(string)e(lik)m(e)i +Fr(rl_)390 2929 y(completer_word_break_cha)o(ract)o(ers)26 +b Fs(to)34 b(b)s(e)e(used)g(to)i(p)s(erform)e(the)h(curren)m(t)f +(completion.)390 3039 y(The)24 b(function)h(ma)m(y)g(c)m(ho)s(ose)h(to) +f(set)g Fr(rl_completer_word_break_ch)o(arac)o(ter)o(s)19 +b Fs(itself.)39 b(If)25 b(the)390 3148 y(function)30 +b(returns)f Fr(NULL)p Fs(,)h Fr(rl_completer_word_break)o(_cha)o(rac)o +(ters)24 b Fs(is)30 b(used.)3371 3340 y([V)-8 b(ariable])-3598 +b Fg(const)54 b(char)f(*)g(rl_completer_quote_cha)q(rac)q(ters)390 +3450 y Fs(A)34 b(list)g(of)g(c)m(haracters)h(whic)m(h)e(can)h(b)s(e)g +(used)e(to)j(quote)f(a)g(substring)f(of)h(the)f(line.)51 +b(Completion)390 3559 y(o)s(ccurs)26 b(on)g(the)g(en)m(tire)i +(substring,)e(and)f(within)h(the)g(substring)g Fr +(rl_completer_word_break)o(_)390 3669 y(characters)32 +b Fs(are)k(treated)g(as)f(an)m(y)h(other)f(c)m(haracter,)j(unless)d +(they)g(also)h(app)s(ear)e(within)h(this)390 3778 y(list.)3371 +3970 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_filename_quote_char)q(act)q(ers)390 4080 y Fs(A)34 +b(list)g(of)g(c)m(haracters)h(that)f(cause)h(a)f(\014lename)g(to)g(b)s +(e)f(quoted)h(b)m(y)f(the)h(completer)h(when)e(they)390 +4189 y(app)s(ear)d(in)g(a)h(completed)g(\014lename.)41 +b(The)30 b(default)g(is)h(the)f(n)m(ull)h(string.)3371 +4381 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g +(rl_special_prefixes)390 4491 y Fs(The)27 b(list)i(of)e(c)m(haracters)j +(that)e(are)g(w)m(ord)f(break)h(c)m(haracters,)i(but)d(should)f(b)s(e)h +(left)i(in)e Fi(text)k Fs(when)390 4600 y(it)25 b(is)g(passed)f(to)h +(the)g(completion)h(function.)38 b(Programs)25 b(can)g(use)f(this)h(to) +g(help)f(determine)h(what)390 4710 y(kind)j(of)i(completing)g(to)g(do.) +41 b(F)-8 b(or)30 b(instance,)g(Bash)g(sets)f(this)g(v)-5 +b(ariable)31 b(to)f Fr(")p Fs($)p Fr(@")e Fs(so)i(that)g(it)g(can)390 +4819 y(complete)i(shell)e(v)-5 b(ariables)31 b(and)f(hostnames.)3371 +5011 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_query_i)q +(tems)390 5121 y Fs(Up)36 b(to)h(this)f(man)m(y)g(items)h(will)f(b)s(e) +g(displa)m(y)m(ed)h(in)e(resp)s(onse)h(to)h(a)f(p)s +(ossible-completions)h(call.)390 5230 y(After)28 b(that,)h(readline)f +(asks)g(the)g(user)f(if)h(she)f(is)h(sure)f(she)h(w)m(an)m(ts)g(to)h +(see)f(them)g(all.)40 b(The)28 b(default)390 5340 y(v)-5 +b(alue)31 b(is)f(100.)42 b(A)31 b(negativ)m(e)h(v)-5 +b(alue)31 b(indicates)g(that)g(Readline)g(should)f(nev)m(er)h(ask)f +(the)h(user.)p eop end +%%Page: 48 52 +TeXDict begin 48 51 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(48)3371 +299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_append_)q +(char)q(act)q(er)390 408 y Fs(When)33 b(a)h(single)f(completion)i +(alternativ)m(e)h(matc)m(hes)e(at)g(the)f(end)g(of)g(the)h(command)f +(line,)h(this)390 518 y(c)m(haracter)23 b(is)e(app)s(ended)f(to)i(the)g +(inserted)f(completion)i(text.)39 b(The)20 b(default)i(is)g(a)f(space)h +(c)m(haracter)390 628 y(\(`)31 b('\).)86 b(Setting)46 +b(this)f(to)h(the)g(n)m(ull)f(c)m(haracter)i(\(`)p Fr(\\0)p +Fs('\))f(prev)m(en)m(ts)g(an)m(ything)g(b)s(eing)f(app)s(ended)390 +737 y(automatically)-8 b(.)66 b(This)37 b(can)h(b)s(e)f(c)m(hanged)h +(in)g(application-sp)s(eci\014c)h(completion)g(functions)e(to)390 +847 y(pro)m(vide)j(the)g(\\most)g(sensible)g(w)m(ord)f(separator)i(c)m +(haracter")h(according)e(to)h(an)e(application-)390 956 +y(sp)s(eci\014c)30 b(command)g(line)h(syn)m(tax)g(sp)s(eci\014cation.) +3371 1176 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_suppres) +q(s_ap)q(pen)q(d)390 1285 y Fs(If)33 b(non-zero,)i Fi(rl)p +949 1285 28 4 v 39 w(completion)p 1421 1285 V 42 w(app)s(end)p +1755 1285 V 38 w(c)m(haracter)42 b Fs(is)33 b(not)g(app)s(ended)f(to)i +(matc)m(hes)g(at)g(the)g(end)390 1395 y(of)28 b(the)f(command)h(line,)h +(as)e(describ)s(ed)g(ab)s(o)m(v)m(e.)41 b(It)27 b(is)h(set)g(to)g(0)g +(b)s(efore)g(an)m(y)f(application-sp)s(eci\014c)390 1504 +y(completion)32 b(function)e(is)g(called,)i(and)e(ma)m(y)h(only)f(b)s +(e)g(c)m(hanged)h(within)f(suc)m(h)g(a)h(function.)3371 +1724 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_quote_c)q +(hara)q(cte)q(r)390 1833 y Fs(When)36 b(Readline)h(is)f(completing)h +(quoted)g(text,)h(as)f(delimited)g(b)m(y)f(one)g(of)g(the)h(c)m +(haracters)g(in)390 1943 y Fi(rl)p 457 1943 V 40 w(completer)p +885 1943 V 41 w(quote)p 1145 1943 V 41 w(c)m(haracters)t +Fs(,)42 b(it)d(sets)g(this)f(v)-5 b(ariable)40 b(to)f(the)g(quoting)g +(c)m(haracter)h(found.)390 2052 y(This)30 b(is)g(set)h(b)s(efore)f(an)m +(y)h(application-sp)s(eci\014c)g(completion)h(function)e(is)h(called.) +3371 2271 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_suppres) +q(s_qu)q(ote)390 2381 y Fs(If)32 b(non-zero,)h(Readline)g(do)s(es)f +(not)h(app)s(end)d(a)j(matc)m(hing)g(quote)g(c)m(haracter)h(when)d(p)s +(erforming)390 2491 y(completion)25 b(on)e(a)h(quoted)g(string.)38 +b(It)24 b(is)f(set)h(to)h(0)f(b)s(efore)f(an)m(y)h(application-sp)s +(eci\014c)h(completion)390 2600 y(function)30 b(is)g(called,)i(and)e +(ma)m(y)h(only)g(b)s(e)e(c)m(hanged)i(within)f(suc)m(h)g(a)h(function.) +3371 2819 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_found_q) +q(uote)390 2929 y Fs(When)31 b(Readline)i(is)e(completing)i(quoted)f +(text,)h(it)f(sets)g(this)g(v)-5 b(ariable)32 b(to)h(a)f(non-zero)g(v) +-5 b(alue)32 b(if)390 3039 y(the)21 b(w)m(ord)g(b)s(eing)g(completed)h +(con)m(tains)g(or)f(is)g(delimited)h(b)m(y)f(an)m(y)g(quoting)h(c)m +(haracters,)i(including)390 3148 y(bac)m(kslashes.)42 +b(This)29 b(is)i(set)g(b)s(efore)f(an)m(y)g(application-sp)s(eci\014c)i +(completion)g(function)e(is)g(called.)3371 3367 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(rl_completion_mark_sy)q(mlin)q(k_d)q +(irs)390 3477 y Fs(If)31 b(non-zero,)i(a)f(slash)g(will)g(b)s(e)f(app)s +(ended)f(to)j(completed)g(\014lenames)e(that)i(are)f(sym)m(b)s(olic)g +(links)390 3587 y(to)25 b(directory)g(names,)g(sub)5 +b(ject)24 b(to)h(the)f(v)-5 b(alue)25 b(of)f(the)h(user-settable)g +Fi(mark-directories)k Fs(v)-5 b(ariable.)390 3696 y(This)27 +b(v)-5 b(ariable)28 b(exists)g(so)f(that)h(application-sp)s(eci\014c)h +(completion)g(functions)e(can)g(o)m(v)m(erride)i(the)390 +3806 y(user's)42 b(global)h(preference)g(\(set)g(via)g(the)f +Fi(mark-symlink)m(ed-directories)48 b Fs(Readline)43 +b(v)-5 b(ariable\))390 3915 y(if)38 b(appropriate.)62 +b(This)37 b(v)-5 b(ariable)38 b(is)g(set)g(to)g(the)g(user's)f +(preference)g(b)s(efore)g(an)m(y)h(application-)390 4025 +y(sp)s(eci\014c)31 b(completion)i(function)f(is)f(called,)j(so)e +(unless)f(that)h(function)f(mo)s(di\014es)g(the)h(v)-5 +b(alue,)33 b(the)390 4134 y(user's)d(preferences)g(are)h(honored.)3371 +4354 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_ignore_completion_)q +(dupl)q(ica)q(tes)390 4463 y Fs(If)30 b(non-zero,)h(then)f(duplicates)h +(in)f(the)h(matc)m(hes)g(are)g(remo)m(v)m(ed.)42 b(The)29 +b(default)i(is)f(1.)3371 4682 y([V)-8 b(ariable])-3598 +b Fg(int)53 b(rl_filename_completio)q(n_de)q(sir)q(ed)390 +4792 y Fs(Non-zero)33 b(means)f(that)g(the)g(results)f(of)h(the)g(matc) +m(hes)h(are)f(to)h(b)s(e)e(treated)i(as)f(\014lenames.)45 +b(This)390 4902 y(is)40 b Fj(always)49 b Fs(zero)41 b(when)e +(completion)i(is)f(attempted,)j(and)d(can)g(only)g(b)s(e)f(c)m(hanged)i +(within)e(an)390 5011 y(application-sp)s(eci\014c)i(completion)g +(function.)67 b(If)39 b(it)h(is)f(set)h(to)h(a)e(non-zero)h(v)-5 +b(alue)40 b(b)m(y)f(suc)m(h)h(a)390 5121 y(function,)24 +b(directory)f(names)f(ha)m(v)m(e)h(a)g(slash)f(app)s(ended)e(and)i +(Readline)h(attempts)g(to)g(quote)g(com-)390 5230 y(pleted)35 +b(\014lenames)g(if)g(they)h(con)m(tain)g(an)m(y)f(c)m(haracters)i(in)e +Fr(rl_filename_quote_chara)o(cter)o(s)390 5340 y Fs(and)30 +b Fr(rl_filename_quoting_des)o(ired)24 b Fs(is)30 b(set)h(to)g(a)g +(non-zero)g(v)-5 b(alue.)p eop end +%%Page: 49 53 +TeXDict begin 49 52 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(49)3371 +299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_filename_quoting_d)q +(esir)q(ed)390 408 y Fs(Non-zero)29 b(means)f(that)h(the)f(results)g +(of)g(the)g(matc)m(hes)i(are)e(to)h(b)s(e)e(quoted)h(using)g(double)f +(quotes)390 518 y(\(or)43 b(an)f(application-sp)s(eci\014c)i(quoting)f +(mec)m(hanism\))g(if)f(the)h(completed)g(\014lename)g(con)m(tains)390 +628 y(an)m(y)28 b(c)m(haracters)h(in)e Fr(rl_filename_quote_chars)p +Fs(.)34 b(This)27 b(is)g Fj(always)37 b Fs(non-zero)28 +b(when)f(comple-)390 737 y(tion)h(is)g(attempted,)h(and)e(can)h(only)g +(b)s(e)f(c)m(hanged)h(within)f(an)h(application-sp)s(eci\014c)h +(completion)390 847 y(function.)37 b(The)21 b(quoting)g(is)g +(e\013ected)i(via)e(a)h(call)g(to)g(the)f(function)g(p)s(oin)m(ted)g +(to)g(b)m(y)g Fr(rl_filename_)390 956 y(quoting_function)p +Fs(.)3371 1141 y([V)-8 b(ariable])-3598 b Fg(int)53 b +(rl_attempted_completi)q(on_o)q(ver)390 1250 y Fs(If)93 +b(an)h(application-sp)s(eci\014c)i(completion)f(function)f(assigned)g +(to)h Fr(rl_attempted_)390 1360 y(completion_function)48 +b Fs(sets)53 b(this)g(v)-5 b(ariable)54 b(to)g(a)f(non-zero)h(v)-5 +b(alue,)60 b(Readline)53 b(will)h(not)390 1469 y(p)s(erform)28 +b(its)i(default)g(\014lename)g(completion)h(ev)m(en)f(if)g(the)f +(application's)i(completion)g(function)390 1579 y(returns)e(no)h(matc)m +(hes.)42 b(It)31 b(should)e(b)s(e)h(set)h(only)f(b)m(y)h(an)f +(application's)i(completion)f(function.)3371 1763 y([V)-8 +b(ariable])-3598 b Fg(int)53 b(rl_sort_completion_ma)q(tche)q(s)390 +1873 y Fs(If)29 b(an)h(application)h(sets)f(this)g(v)-5 +b(ariable)31 b(to)f(0,)h(Readline)f(will)g(not)g(sort)g(the)g(list)h +(of)f(completions)390 1983 y(\(whic)m(h)25 b(implies)f(that)i(it)f +(cannot)g(remo)m(v)m(e)h(an)m(y)f(duplicate)g(completions\).)40 +b(The)24 b(default)h(v)-5 b(alue)25 b(is)390 2092 y(1,)32 +b(whic)m(h)f(means)g(that)h(Readline)g(will)f(sort)h(the)f(completions) +h(and,)f(dep)s(ending)f(on)h(the)g(v)-5 b(alue)390 2202 +y(of)31 b Fr(rl_ignore_completion_du)o(pli)o(cate)o(s)p +Fs(,)25 b(will)30 b(attempt)i(to)f(remo)m(v)m(e)h(duplicate)f(matc)m +(hes.)3371 2386 y([V)-8 b(ariable])-3598 b Fg(int)53 +b(rl_completion_type)390 2496 y Fs(Set)35 b(to)h(a)f(c)m(haracter)i +(describing)e(the)g(t)m(yp)s(e)g(of)g(completion)i(Readline)e(is)g +(curren)m(tly)h(attempt-)390 2605 y(ing;)f(see)f(the)g(description)f +(of)g Fr(rl_complete_internal\(\))28 b Fs(\(see)34 b(Section)g(2.6.2)h +([Completion)390 2715 y(F)-8 b(unctions],)39 b(page)f(44\))f(for)g(the) +g(list)g(of)g(c)m(haracters.)61 b(This)36 b(is)g(set)i(to)f(the)g +(appropriate)f(v)-5 b(alue)390 2824 y(b)s(efore)31 b(an)m(y)h +(application-sp)s(eci\014c)h(completion)g(function)f(is)f(called,)j +(allo)m(wing)f(suc)m(h)e(functions)390 2934 y(to)g(presen)m(t)g(the)f +(same)h(in)m(terface)h(as)e Fr(rl_complete\(\))p Fs(.)3371 +3118 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_invokin)q +(g_ke)q(y)390 3228 y Fs(Set)41 b(to)g(the)g(\014nal)g(c)m(haracter)h +(in)e(the)h(k)m(ey)g(sequence)h(that)f(in)m(v)m(ok)m(ed)h(one)f(of)g +(the)g(completion)390 3337 y(functions)c(that)h(call)h +Fr(rl_complete_internal\(\))p Fs(.)56 b(This)37 b(is)g(set)h(to)g(the)g +(appropriate)f(v)-5 b(alue)390 3447 y(b)s(efore)30 b(an)m(y)h +(application-sp)s(eci\014c)h(completion)f(function)f(is)h(called.)3371 +3631 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_inhibit_completion)390 +3741 y Fs(If)28 b(this)g(v)-5 b(ariable)29 b(is)f(non-zero,)i +(completion)f(is)f(inhibited.)40 b(The)28 b(completion)h(c)m(haracter)h +(will)f(b)s(e)390 3851 y(inserted)h(as)h(an)m(y)g(other)f(b)s(ound)e +(to)k Fr(self-insert)p Fs(.)150 4050 y Fh(2.6.4)63 b(A)40 +b(Short)i(Completion)g(Example)150 4197 y Fs(Here)30 +b(is)f(a)g(small)h(application)g(demonstrating)f(the)h(use)e(of)i(the)f +(GNU)h(Readline)f(library)-8 b(.)40 b(It)30 b(is)f(called)150 +4306 y Fr(fileman)p Fs(,)35 b(and)g(the)h(source)f(co)s(de)h(resides)f +(in)h(`)p Fr(examples/fileman.c)p Fs('.)51 b(This)35 +b(sample)h(application)150 4416 y(pro)m(vides)26 b(completion)i(of)e +(command)g(names,)h(line)f(editing)h(features,)h(and)d(access)j(to)f +(the)f(history)g(list.)p eop end +%%Page: 50 54 +TeXDict begin 50 53 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(50)390 +299 y Fe(/*)40 b(fileman.c)h(--)f(A)f(tiny)h(application)i(which)e +(demonstrates)i(how)e(to)g(use)g(the)508 386 y(GNU)g(Readline)h +(library.)80 b(This)40 b(application)i(interactively)g(allows)f(users) +508 473 y(to)e(manipulate)j(files)e(and)g(their)h(modes.)f(*/)390 +648 y(#ifdef)h(HAVE_CONFIG_H)390 735 y(#)79 b(include)40 +b(<config.h>)390 822 y(#endif)390 996 y(#include)h(<sys/types.h>)390 +1083 y(#ifdef)g(HAVE_SYS_FILE_H)390 1171 y(#)79 b(include)40 +b(<sys/file.h>)390 1258 y(#endif)390 1345 y(#include)h(<sys/stat.h>)390 +1519 y(#ifdef)g(HAVE_UNISTD_H)390 1606 y(#)79 b(include)40 +b(<unistd.h>)390 1694 y(#endif)390 1868 y(#include)h(<fcntl.h>)390 +1955 y(#include)g(<stdio.h>)390 2042 y(#include)g(<errno.h>)390 +2217 y(#if)f(defined)h(\(HAVE_STRING_H\))390 2304 y(#)79 +b(include)40 b(<string.h>)390 2391 y(#else)g(/*)g(!HAVE_STRING_H)i(*/) +390 2478 y(#)79 b(include)40 b(<strings.h>)390 2565 y(#endif)h(/*)e +(!HAVE_STRING_H)k(*/)390 2740 y(#ifdef)e(HAVE_STDLIB_H)390 +2827 y(#)79 b(include)40 b(<stdlib.h>)390 2914 y(#endif)390 +3088 y(#include)h(<time.h>)390 3263 y(#include)g(<readline/readline.h>) +390 3350 y(#include)g(<readline/history.h>)390 3524 y(extern)g(char)f +(*xmalloc)h(PARAMS\(\(size_t\)\);)390 3699 y(/*)f(The)g(names)g(of)g +(functions)h(that)f(actually)h(do)f(the)g(manipulation.)i(*/)390 +3786 y(int)e(com_list)h(PARAMS\(\(char)h(*\)\);)390 3873 +y(int)e(com_view)h(PARAMS\(\(char)h(*\)\);)390 3960 y(int)e(com_rename) +h(PARAMS\(\(char)h(*\)\);)390 4047 y(int)e(com_stat)h(PARAMS\(\(char)h +(*\)\);)390 4134 y(int)e(com_pwd)h(PARAMS\(\(char)h(*\)\);)390 +4222 y(int)e(com_delete)h(PARAMS\(\(char)h(*\)\);)390 +4309 y(int)e(com_help)h(PARAMS\(\(char)h(*\)\);)390 4396 +y(int)e(com_cd)g(PARAMS\(\(char)i(*\)\);)390 4483 y(int)e(com_quit)h +(PARAMS\(\(char)h(*\)\);)390 4658 y(/*)e(A)f(structure)i(which)g +(contains)g(information)h(on)d(the)h(commands)h(this)f(program)508 +4745 y(can)g(understand.)h(*/)390 4919 y(typedef)g(struct)f({)468 +5006 y(char)h(*name;)f(/*)g(User)g(printable)h(name)f(of)g(the)g +(function.)h(*/)468 5093 y(rl_icpfunc_t)h(*func;)f(/*)f(Function)h(to)e +(call)i(to)e(do)h(the)g(job.)g(*/)468 5181 y(char)h(*doc;)f(/*)g +(Documentation)i(for)e(this)g(function.)80 b(*/)390 5268 +y(})39 b(COMMAND;)p eop end +%%Page: 51 55 +TeXDict begin 51 54 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(51)390 +386 y Fe(COMMAND)41 b(commands[])g(=)f({)468 473 y({)g("cd",)g(com_cd,) +h("Change)g(to)f(directory)h(DIR")f(},)468 560 y({)g("delete",)h +(com_delete,)h("Delete)f(FILE")f(},)468 648 y({)g("help",)h(com_help,)g +("Display)g(this)f(text")h(},)468 735 y({)f("?",)g(com_help,)h +("Synonym)g(for)f(`help'")h(},)468 822 y({)f("list",)h(com_list,)g +("List)f(files)h(in)e(DIR")i(},)468 909 y({)f("ls",)g(com_list,)i +("Synonym)f(for)f(`list'")g(},)468 996 y({)g("pwd",)g(com_pwd,)i +("Print)e(the)g(current)h(working)g(directory")g(},)468 +1083 y({)f("quit",)h(com_quit,)g("Quit)f(using)h(Fileman")g(},)468 +1171 y({)f("rename",)h(com_rename,)h("Rename)f(FILE)f(to)g(NEWNAME")h +(},)468 1258 y({)f("stat",)h(com_stat,)g("Print)g(out)f(statistics)h +(on)f(FILE")g(},)468 1345 y({)g("view",)h(com_view,)g("View)f(the)g +(contents)h(of)f(FILE")g(},)468 1432 y({)g(\(char)g(*\)NULL,)h +(\(rl_icpfunc_t)h(*\)NULL,)f(\(char)f(*\)NULL)h(})390 +1519 y(};)390 1694 y(/*)f(Forward)g(declarations.)j(*/)390 +1781 y(char)d(*stripwhite)i(\(\);)390 1868 y(COMMAND)f(*find_command)h +(\(\);)390 2042 y(/*)e(The)g(name)g(of)f(this)i(program,)g(as)e(taken)i +(from)f(argv[0].)h(*/)390 2130 y(char)f(*progname;)390 +2304 y(/*)g(When)g(non-zero,)h(this)f(global)h(means)f(the)g(user)g(is) +g(done)g(using)g(this)h(program.)g(*/)390 2391 y(int)f(done;)390 +2565 y(char)g(*)390 2653 y(dupstr)h(\(s\))586 2740 y(char)f(*s;)390 +2827 y({)468 2914 y(char)h(*r;)468 3088 y(r)f(=)f(xmalloc)i(\(strlen)g +(\(s\))f(+)f(1\);)468 3176 y(strcpy)i(\(r,)f(s\);)468 +3263 y(return)h(\(r\);)390 3350 y(})390 3524 y(main)f(\(argc,)h(argv\)) +586 3611 y(int)f(argc;)586 3699 y(char)g(**argv;)390 +3786 y({)468 3873 y(char)h(*line,)f(*s;)468 4047 y(progname)h(=)f +(argv[0];)468 4222 y(initialize_readline)k(\(\);)c(/*)g(Bind)g(our)g +(completer.)h(*/)468 4396 y(/*)f(Loop)g(reading)h(and)f(executing)h +(lines)g(until)f(the)g(user)g(quits.)h(*/)468 4483 y(for)f(\()g(;)f +(done)h(==)g(0;)g(\))547 4570 y({)625 4658 y(line)g(=)g(readline)h +(\("FileMan:)h("\);)625 4832 y(if)e(\(!line\))704 4919 +y(break;)625 5093 y(/*)g(Remove)h(leading)f(and)g(trailing)h +(whitespace)h(from)e(the)g(line.)743 5181 y(Then,)g(if)g(there)g(is)g +(anything)h(left,)g(add)e(it)h(to)g(the)g(history)h(list)743 +5268 y(and)f(execute)h(it.)f(*/)p eop end +%%Page: 52 56 +TeXDict begin 52 55 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(52)625 +299 y Fe(s)40 b(=)f(stripwhite)j(\(line\);)625 473 y(if)e(\(*s\))704 +560 y({)782 648 y(add_history)i(\(s\);)782 735 y(execute_line)g(\(s\);) +704 822 y(})625 996 y(free)e(\(line\);)547 1083 y(})468 +1171 y(exit)h(\(0\);)390 1258 y(})390 1432 y(/*)f(Execute)g(a)g +(command)h(line.)f(*/)390 1519 y(int)390 1606 y(execute_line)i +(\(line\))586 1694 y(char)e(*line;)390 1781 y({)468 1868 +y(register)h(int)f(i;)468 1955 y(COMMAND)h(*command;)468 +2042 y(char)g(*word;)468 2217 y(/*)f(Isolate)h(the)f(command)h(word.)f +(*/)468 2304 y(i)g(=)f(0;)468 2391 y(while)i(\(line[i])g(&&)f +(whitespace)h(\(line[i]\)\))547 2478 y(i++;)468 2565 +y(word)g(=)e(line)h(+)g(i;)468 2740 y(while)h(\(line[i])g(&&)f +(!whitespace)h(\(line[i]\)\))547 2827 y(i++;)468 3001 +y(if)f(\(line[i]\))547 3088 y(line[i++])h(=)f('\\0';)468 +3263 y(command)h(=)f(find_command)i(\(word\);)468 3437 +y(if)e(\(!command\))547 3524 y({)625 3611 y(fprintf)h(\(stderr,)g +("\045s:)f(No)g(such)g(command)h(for)f(FileMan.\\n",)i(word\);)625 +3699 y(return)f(\(-1\);)547 3786 y(})468 3960 y(/*)f(Get)g(argument)h +(to)f(command,)h(if)f(any.)g(*/)468 4047 y(while)h(\(whitespace)h +(\(line[i]\)\))547 4134 y(i++;)468 4309 y(word)f(=)e(line)h(+)g(i;)468 +4483 y(/*)g(Call)g(the)g(function.)h(*/)468 4570 y(return)g +(\(\(*\(command->func\)\))j(\(word\)\);)390 4658 y(})390 +4832 y(/*)c(Look)g(up)f(NAME)i(as)e(the)h(name)g(of)g(a)g(command,)h +(and)e(return)i(a)f(pointer)g(to)g(that)508 4919 y(command.)80 +b(Return)41 b(a)e(NULL)h(pointer)h(if)f(NAME)g(isn't)g(a)g(command)g +(name.)h(*/)390 5006 y(COMMAND)g(*)390 5093 y(find_command)h(\(name\)) +586 5181 y(char)e(*name;)390 5268 y({)p eop end +%%Page: 53 57 +TeXDict begin 53 56 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(53)468 +299 y Fe(register)41 b(int)f(i;)468 473 y(for)g(\(i)g(=)f(0;)h +(commands[i].name;)j(i++\))547 560 y(if)d(\(strcmp)g(\(name,)h +(commands[i].name\))i(==)d(0\))625 648 y(return)h(\(&commands[i]\);)468 +822 y(return)g(\(\(COMMAND)g(*\)NULL\);)390 909 y(})390 +1083 y(/*)f(Strip)g(whitespace)i(from)e(the)g(start)g(and)g(end)g(of)f +(STRING.)81 b(Return)40 b(a)g(pointer)508 1171 y(into)g(STRING.)h(*/) +390 1258 y(char)f(*)390 1345 y(stripwhite)h(\(string\))586 +1432 y(char)f(*string;)390 1519 y({)468 1606 y(register)h(char)g(*s,)f +(*t;)468 1781 y(for)g(\(s)g(=)f(string;)i(whitespace)h(\(*s\);)e(s++\)) +547 1868 y(;)468 2042 y(if)g(\(*s)g(==)g(0\))547 2130 +y(return)g(\(s\);)468 2304 y(t)g(=)f(s)h(+)f(strlen)i(\(s\))f(-)f(1;) +468 2391 y(while)i(\(t)e(>)h(s)f(&&)h(whitespace)i(\(*t\)\))547 +2478 y(t--;)468 2565 y(*++t)f(=)e('\\0';)468 2740 y(return)i(s;)390 +2827 y(})390 3001 y(/*)f(******************************)q(*****)q(****) +q(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 +3088 y(/*)2589 b(*/)390 3176 y(/*)707 b(Interface)41 +b(to)f(Readline)h(Completion)629 b(*/)390 3263 y(/*)2589 +b(*/)390 3350 y(/*)40 b(******************************)q(*****)q(****)q +(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 +3524 y(char)40 b(*command_generator)j(PARAMS\(\(const)g(char)d(*,)f +(int\)\);)390 3611 y(char)h(**fileman_completion)k(PARAMS\(\(const)e +(char)e(*,)g(int,)g(int\)\);)390 3786 y(/*)g(Tell)g(the)g(GNU)g +(Readline)h(library)g(how)e(to)h(complete.)81 b(We)39 +b(want)h(to)g(try)g(to)g(complete)508 3873 y(on)f(command)i(names)g(if) +e(this)h(is)g(the)g(first)g(word)g(in)g(the)g(line,)g(or)g(on)g +(filenames)508 3960 y(if)f(not.)h(*/)390 4047 y(initialize_readline)k +(\(\))390 4134 y({)468 4222 y(/*)c(Allow)g(conditional)i(parsing)f(of)f +(the)g(~/.inputrc)h(file.)g(*/)468 4309 y(rl_readline_name)i(=)d +("FileMan";)468 4483 y(/*)g(Tell)g(the)g(completer)h(that)g(we)e(want)h +(a)g(crack)g(first.)h(*/)468 4570 y(rl_attempted_completion_fun)q(ctio) +q(n)k(=)39 b(fileman_completion;)390 4658 y(})390 4832 +y(/*)h(Attempt)g(to)g(complete)h(on)f(the)g(contents)h(of)f(TEXT.)79 +b(START)41 b(and)e(END)h(bound)h(the)508 4919 y(region)f(of)g +(rl_line_buffer)i(that)f(contains)g(the)e(word)i(to)e(complete.)81 +b(TEXT)40 b(is)508 5006 y(the)g(word)g(to)f(complete.)81 +b(We)40 b(can)g(use)f(the)h(entire)h(contents)g(of)f(rl_line_buffer)508 +5093 y(in)f(case)h(we)g(want)g(to)g(do)g(some)g(simple)g(parsing.)81 +b(Return)40 b(the)g(array)h(of)e(matches,)508 5181 y(or)g(NULL)h(if)g +(there)h(aren't)f(any.)g(*/)390 5268 y(char)g(**)p eop +end +%%Page: 54 58 +TeXDict begin 54 57 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(54)390 +299 y Fe(fileman_completion)43 b(\(text,)e(start,)g(end\))586 +386 y(const)f(char)h(*text;)586 473 y(int)f(start,)h(end;)390 +560 y({)468 648 y(char)g(**matches;)468 822 y(matches)g(=)f(\(char)g +(**\)NULL;)468 996 y(/*)g(If)g(this)g(word)g(is)g(at)f(the)h(start)h +(of)e(the)h(line,)h(then)f(it)g(is)f(a)h(command)586 +1083 y(to)g(complete.)80 b(Otherwise)42 b(it)d(is)h(the)g(name)g(of)g +(a)f(file)h(in)g(the)g(current)586 1171 y(directory.)i(*/)468 +1258 y(if)e(\(start)h(==)e(0\))547 1345 y(matches)i(=)e +(rl_completion_matches)44 b(\(text,)d(command_generator\);)468 +1519 y(return)g(\(matches\);)390 1606 y(})390 1781 y(/*)f(Generator)h +(function)g(for)f(command)h(completion.)81 b(STATE)40 +b(lets)g(us)g(know)g(whether)508 1868 y(to)f(start)i(from)f(scratch;)h +(without)g(any)f(state)g(\(i.e.)g(STATE)h(==)e(0\),)h(then)g(we)508 +1955 y(start)g(at)g(the)g(top)g(of)f(the)h(list.)h(*/)390 +2042 y(char)f(*)390 2130 y(command_generator)j(\(text,)e(state\))586 +2217 y(const)f(char)h(*text;)586 2304 y(int)f(state;)390 +2391 y({)468 2478 y(static)h(int)f(list_index,)i(len;)468 +2565 y(char)f(*name;)468 2740 y(/*)f(If)g(this)g(is)g(a)f(new)h(word)g +(to)g(complete,)h(initialize)h(now.)79 b(This)40 b(includes)586 +2827 y(saving)h(the)f(length)g(of)g(TEXT)g(for)g(efficiency,)i(and)e +(initializing)i(the)d(index)586 2914 y(variable)i(to)f(0.)g(*/)468 +3001 y(if)g(\(!state\))547 3088 y({)625 3176 y(list_index)i(=)d(0;)625 +3263 y(len)h(=)g(strlen)g(\(text\);)547 3350 y(})468 +3524 y(/*)g(Return)h(the)f(next)g(name)g(which)g(partially)i(matches)e +(from)h(the)e(command)i(list.)g(*/)468 3611 y(while)g(\(name)f(=)g +(commands[list_index].name\))547 3699 y({)625 3786 y(list_index++;)625 +3960 y(if)g(\(strncmp)h(\(name,)g(text,)f(len\))g(==)g(0\))704 +4047 y(return)g(\(dupstr\(name\)\);)547 4134 y(})468 +4309 y(/*)g(If)g(no)f(names)i(matched,)g(then)f(return)h(NULL.)f(*/)468 +4396 y(return)h(\(\(char)g(*\)NULL\);)390 4483 y(})390 +4658 y(/*)f(******************************)q(*****)q(****)q(*****)q +(****)q(****)q(*****)q(****)q(***)45 b(*/)390 4745 y(/*)2589 +b(*/)390 4832 y(/*)903 b(FileMan)41 b(Commands)1060 b(*/)390 +4919 y(/*)2589 b(*/)390 5006 y(/*)40 b(******************************)q +(*****)q(****)q(*****)q(****)q(****)q(*****)q(****)q(***)45 +b(*/)390 5181 y(/*)40 b(String)g(to)g(pass)g(to)g(system)g(\(\).)80 +b(This)40 b(is)f(for)h(the)g(LIST,)h(VIEW)f(and)g(RENAME)508 +5268 y(commands.)h(*/)p eop end +%%Page: 55 59 +TeXDict begin 55 58 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(55)390 +299 y Fe(static)41 b(char)f(syscom[1024];)390 473 y(/*)g(List)g(the)g +(file\(s\))h(named)f(in)g(arg.)g(*/)390 560 y(com_list)h(\(arg\))586 +648 y(char)f(*arg;)390 735 y({)468 822 y(if)g(\(!arg\))547 +909 y(arg)g(=)f("";)468 1083 y(sprintf)i(\(syscom,)g("ls)f(-FClg)h +(\045s",)f(arg\);)468 1171 y(return)h(\(system)g(\(syscom\)\);)390 +1258 y(})390 1432 y(com_view)g(\(arg\))586 1519 y(char)f(*arg;)390 +1606 y({)468 1694 y(if)g(\(!valid_argument)j(\("view",)e(arg\)\))547 +1781 y(return)f(1;)390 1955 y(#if)g(defined)h(\(__MSDOS__\))468 +2042 y(/*)f(more.com)h(doesn't)g(grok)f(slashes)h(in)f(pathnames)h(*/) +468 2130 y(sprintf)g(\(syscom,)g("less)g(\045s",)f(arg\);)390 +2217 y(#else)468 2304 y(sprintf)h(\(syscom,)g("more)g(\045s",)f(arg\);) +390 2391 y(#endif)468 2478 y(return)h(\(system)g(\(syscom\)\);)390 +2565 y(})390 2740 y(com_rename)g(\(arg\))586 2827 y(char)f(*arg;)390 +2914 y({)468 3001 y(too_dangerous)j(\("rename"\);)468 +3088 y(return)e(\(1\);)390 3176 y(})390 3350 y(com_stat)g(\(arg\))586 +3437 y(char)f(*arg;)390 3524 y({)468 3611 y(struct)h(stat)f(finfo;)468 +3786 y(if)g(\(!valid_argument)j(\("stat",)e(arg\)\))547 +3873 y(return)f(\(1\);)468 4047 y(if)g(\(stat)g(\(arg,)h(&finfo\))g(==) +e(-1\))547 4134 y({)625 4222 y(perror)i(\(arg\);)625 +4309 y(return)g(\(1\);)547 4396 y(})468 4570 y(printf)g(\("Statistics)h +(for)e(`\045s':\\n",)h(arg\);)468 4745 y(printf)g(\("\045s)f(has)g +(\045d)g(link\045s,)h(and)f(is)f(\045d)h(byte\045s)g(in)g(length.\\n",) +468 4832 y(arg,)782 4919 y(finfo.st_nlink,)782 5006 y(\(finfo.st_nlink) +j(==)d(1\))f(?)h("")f(:)h("s",)782 5093 y(finfo.st_size,)782 +5181 y(\(finfo.st_size)j(==)c(1\))h(?)g("")f(:)h("s"\);)468 +5268 y(printf)h(\("Inode)g(Last)f(Change)h(at:)f(\045s",)g(ctime)g +(\(&finfo.st_ctime\)\);)p eop end +%%Page: 56 60 +TeXDict begin 56 59 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(56)468 +299 y Fe(printf)41 b(\(")236 b(Last)40 b(access)h(at:)f(\045s",)g +(ctime)g(\(&finfo.st_atime\)\);)468 386 y(printf)h(\(")157 +b(Last)41 b(modified)g(at:)f(\045s",)g(ctime)g(\(&finfo.st_mtime\)\);) +468 473 y(return)h(\(0\);)390 560 y(})390 735 y(com_delete)g(\(arg\)) +586 822 y(char)f(*arg;)390 909 y({)468 996 y(too_dangerous)j +(\("delete"\);)468 1083 y(return)e(\(1\);)390 1171 y(})390 +1345 y(/*)f(Print)g(out)g(help)g(for)g(ARG,)g(or)g(for)g(all)g(of)f +(the)h(commands)h(if)f(ARG)g(is)508 1432 y(not)g(present.)h(*/)390 +1519 y(com_help)g(\(arg\))586 1606 y(char)f(*arg;)390 +1694 y({)468 1781 y(register)h(int)f(i;)468 1868 y(int)g(printed)h(=)f +(0;)468 2042 y(for)g(\(i)g(=)f(0;)h(commands[i].name;)j(i++\))547 +2130 y({)625 2217 y(if)d(\(!*arg)h(||)e(\(strcmp)i(\(arg,)g +(commands[i].name\))i(==)c(0\)\))704 2304 y({)782 2391 +y(printf)i(\("\045s\\t\\t\045s.\\n",)i(commands[i].name,)g +(commands[i].doc\);)782 2478 y(printed++;)704 2565 y(})547 +2653 y(})468 2827 y(if)d(\(!printed\))547 2914 y({)625 +3001 y(printf)h(\("No)f(commands)h(match)g(`\045s'.)79 +b(Possibilties)42 b(are:\\n",)f(arg\);)625 3176 y(for)f(\(i)g(=)f(0;)h +(commands[i].name;)j(i++\))704 3263 y({)782 3350 y(/*)d(Print)g(in)g +(six)g(columns.)h(*/)782 3437 y(if)f(\(printed)h(==)f(6\))861 +3524 y({)939 3611 y(printed)h(=)e(0;)939 3699 y(printf)i(\("\\n"\);)861 +3786 y(})782 3960 y(printf)g(\("\045s\\t",)g(commands[i].name\);)782 +4047 y(printed++;)704 4134 y(})625 4309 y(if)f(\(printed\))704 +4396 y(printf)g(\("\\n"\);)547 4483 y(})468 4570 y(return)h(\(0\);)390 +4658 y(})390 4832 y(/*)f(Change)g(to)g(the)g(directory)h(ARG.)f(*/)390 +4919 y(com_cd)h(\(arg\))586 5006 y(char)f(*arg;)390 5093 +y({)468 5181 y(if)g(\(chdir)h(\(arg\))f(==)g(-1\))547 +5268 y({)p eop end +%%Page: 57 61 +TeXDict begin 57 60 bop 150 -116 a Fs(Chapter)30 b(2:)41 +b(Programming)30 b(with)g(GNU)h(Readline)1683 b(57)625 +299 y Fe(perror)41 b(\(arg\);)625 386 y(return)g(1;)547 +473 y(})468 648 y(com_pwd)g(\(""\);)468 735 y(return)g(\(0\);)390 +822 y(})390 996 y(/*)f(Print)g(out)g(the)g(current)h(working)g +(directory.)g(*/)390 1083 y(com_pwd)g(\(ignore\))586 +1171 y(char)f(*ignore;)390 1258 y({)468 1345 y(char)h(dir[1024],)g(*s;) +468 1519 y(s)f(=)f(getcwd)i(\(dir,)f(sizeof\(dir\))i(-)e(1\);)468 +1606 y(if)g(\(s)g(==)f(0\))547 1694 y({)625 1781 y(printf)i(\("Error)g +(getting)g(pwd:)f(\045s\\n",)g(dir\);)625 1868 y(return)h(1;)547 +1955 y(})468 2130 y(printf)g(\("Current)g(directory)h(is)d(\045s\\n",)i +(dir\);)468 2217 y(return)g(0;)390 2304 y(})390 2478 +y(/*)f(The)g(user)g(wishes)g(to)g(quit)g(using)h(this)f(program.)80 +b(Just)40 b(set)g(DONE)g(non-zero.)h(*/)390 2565 y(com_quit)g(\(arg\)) +586 2653 y(char)f(*arg;)390 2740 y({)468 2827 y(done)h(=)e(1;)468 +2914 y(return)i(\(0\);)390 3001 y(})390 3176 y(/*)f(Function)h(which)f +(tells)g(you)g(that)h(you)e(can't)i(do)e(this.)i(*/)390 +3263 y(too_dangerous)h(\(caller\))586 3350 y(char)e(*caller;)390 +3437 y({)468 3524 y(fprintf)h(\(stderr,)821 3611 y("\045s:)g(Too)f +(dangerous)h(for)f(me)f(to)h(distribute.)81 b(Write)40 +b(it)g(yourself.\\n",)821 3699 y(caller\);)390 3786 y(})390 +3960 y(/*)g(Return)g(non-zero)h(if)f(ARG)g(is)g(a)f(valid)h(argument)h +(for)f(CALLER,)h(else)f(print)508 4047 y(an)f(error)i(message)g(and)e +(return)i(zero.)f(*/)390 4134 y(int)390 4222 y(valid_argument)i +(\(caller,)f(arg\))586 4309 y(char)f(*caller,)h(*arg;)390 +4396 y({)468 4483 y(if)f(\(!arg)g(||)g(!*arg\))547 4570 +y({)625 4658 y(fprintf)h(\(stderr,)g("\045s:)f(Argument)h +(required.\\n",)i(caller\);)625 4745 y(return)e(\(0\);)547 +4832 y(})468 5006 y(return)g(\(1\);)390 5093 y(})p eop +end +%%Page: 58 62 +TeXDict begin 58 61 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(58)150 299 y Fo(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 +b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fs(V)-8 +b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 +635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fp(\015)e +Fs(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 +b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 +y Fr(http://fsf.org/)390 964 y Fs(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f +(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 +1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f +(is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 +1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g +(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1450 y(useful)29 b(do)s(cumen)m(t)h Fi(free)36 b Fs(in)29 +b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j +(the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 +y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)p eop end +%%Page: 59 63 +TeXDict begin 59 62 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(59)330 299 y(under)26 b(this)i(License.)40 b(If)27 +b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) +g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 +b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) +j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f +(Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 +b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 +b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m +(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m +(ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g +(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 +b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s +(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g +(public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s +(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) +f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g +(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g +(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 +y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g +(formatters)f(or)g(for)g(automatic)i(translation)f(to)330 +1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) +g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g +(otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g +(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f +(arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g +(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 +b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 +b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g +(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g +(is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i +(\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) +-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g +Fs(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j +(LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j +Fd(SGML)f Fs(or)f Fd(XML)g Fs(using)g(a)g(publicly)330 +2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Fs(,)g(and)d +(standard-conforming)h(simple)g Fd(HTML)p Fs(,)g(P)m(ostScript)h(or)f +Fd(PDF)g Fs(designed)330 2614 y(for)e(h)m(uman)g(mo)s(di\014cation.)65 +b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g +Fd(PNG)p Fs(,)h Fd(X)n(CF)330 2724 y Fs(and)h Fd(JPG)p +Fs(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can) +f(b)s(e)f(read)g(and)h(edited)330 2833 y(only)54 b(b)m(y)f(proprietary) +h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Fs(or)f +Fd(XML)h Fs(for)g(whic)m(h)f(the)h Fd(DTD)g Fs(and/or)330 +2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5 +b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j +Fd(HTML)p Fs(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h +Fs(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s(cessors)g(for)g(output) +g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i +(means,)e(for)f(a)h(prin)m(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f +(itself,)h(plus)e(suc)m(h)f(follo)m(wing)330 3313 y(pages)28 +b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 +b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f(in)h +(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g +(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e(title)j(page)e +(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i +(near)e(the)h(most)g(prominen)m(t)g(app)s(earance)f(of)h(the)g(w)m +(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h +(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h +(an)m(y)f(p)s(erson)g(or)h(en)m(tit)m(y)h(that)f(distributes)f(copies)i +(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 +4052 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g +(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 +4162 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m +(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 +4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g +(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m +(h)330 4381 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e +(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 +b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g +(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e +(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g +(according)g(to)g(this)g(de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t) +i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) +g(the)g(notice)h(whic)m(h)e(states)i(that)330 4861 y(this)34 +b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 +b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 +4970 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j +(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 +5080 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 +b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g +(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h +(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 +b(COPYING)p eop end +%%Page: 60 64 +TeXDict begin 60 63 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(60)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +(the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h +(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 +b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j +(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e +(License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e +(in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h +(other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f +(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 +737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h +(the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 +847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 +b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d +(copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f +(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g +(the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 +y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 +y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 +b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 +2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 +b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g +(added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 +4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g +(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 +4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g +(the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 +b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 +b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e +(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 +5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m +(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 +b(,)p eop end +%%Page: 61 65 +TeXDict begin 61 64 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(61)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) +h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) +i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 +545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h +(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c +(for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g +(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h +(\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s +(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g +(few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g +(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m +(tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 +b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h +(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 +b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p +eop end +%%Page: 62 66 +TeXDict begin 62 65 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(62)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 +b(ersion's)36 b(license)g(notice.)57 b(These)330 408 +y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g +(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) +i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g +(nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s +(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 +b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 +y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) +m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 +880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 +b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m +(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 +b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e +(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i +(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s +(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f +(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m +(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 +y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) +g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) +g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g +(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m +(y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m +(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g +(not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) +f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 +1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g +(Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 +b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3455 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m +(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 +3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h +(com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 +b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 +4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end +%%Page: 63 67 +TeXDict begin 63 66 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(63)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h +(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f +(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) +s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h +(on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g +(is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i +(resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g +(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e +(b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g +(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g +(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h +(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h +(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 +b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e +(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 +b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 +b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g +(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 +3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) +i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 +3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i +(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h +(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h +(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g +(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h +(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 +b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 +b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h +(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 +y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d +(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h +(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h +(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g +(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m +(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f +(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 +4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g +(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h +(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 +b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h +(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 +b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g +(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) +330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g +(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f +(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f +(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end +%%Page: 64 68 +TeXDict begin 64 67 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(64)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 +433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 +b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g +(the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 +b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 +b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 +653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f +(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 +762 y(See)c Fr(http://www.gnu.org/copy)o(left)o(/)p Fs(.)330 +897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g +(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 +b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g +(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h +(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 +b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i +(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 +b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f +(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f +(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) +m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m +(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g +(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 +2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) +e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 +2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m +(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h +(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g +(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i +(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 +b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s +(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 +2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m +(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 +2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m +(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 +2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) +g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 +2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 +b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) +f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g +(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e +(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h +(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 +3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h +(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 +3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h +(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 +3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f +(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) +330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j +(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s +(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h +(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) +g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g +(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) +330 4005 y(eligible)h(for)e(relicensing.)p eop end +%%Page: 65 69 +TeXDict begin 65 68 bop 150 -116 a Fs(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(65)150 299 y Fq(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f +(for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fs(T)-8 b(o)35 +b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) +i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 +568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) +m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 +680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)88 b(your)40 +b(name)9 b Fe(.)468 767 y(Permission)42 b(is)e(granted)g(to)g(copy,)h +(distribute)g(and/or)g(modify)f(this)g(document)468 854 +y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i +(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h +(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 +1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g +(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f +(license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 +1203 y(Free)g(Documentation)h(License''.)275 1337 y Fs(If)d(y)m(ou)h +(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 +b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k +(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 +b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 +1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g +Fc(list)f(their)g(titles)9 b Fe(,)41 b(with)547 1646 +y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)9 b Fe(,)40 +b(and)g(with)g(the)g(Back-Cover)i(Texts)547 1733 y(being)e +Fc(list)9 b Fe(.)275 1868 y Fs(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 +b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 +1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e +(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f +(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m +(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g +(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h +(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 +b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m +(w)m(are.)p eop end +%%Page: 66 70 +TeXDict begin 66 69 bop 150 -116 a Fs(Concept)31 b(Index)2927 +b(66)150 299 y Fo(Concept)52 b(Index)150 638 y Fq(A)150 +754 y Fb(application-sp)r(eci\014c)27 b(completion)f(functions)17 +b Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)43 b Fb(43)150 1005 y +Fq(C)150 1121 y Fb(command)26 b(editing)17 b Fa(:)d(:)f(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)44 b Fb(1)150 1372 y Fq(E)150 +1488 y Fb(editing)26 b(command)g(lines)15 b Fa(:)f(:)f(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)42 b Fb(1)150 1738 y Fq(I)150 1855 y Fb(initialization)28 +b(\014le,)e(readline)15 b Fa(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b +Fb(4)150 1942 y(in)n(teraction,)27 b(readline)c Fa(:)13 +b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)49 b Fb(1)150 +2193 y Fq(K)150 2309 y Fb(kill)26 b(ring)d Fa(:)13 b(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 +b Fb(2)2025 638 y(killing)26 b(text)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 +b Fb(2)2025 925 y Fq(N)2025 1056 y Fb(notation,)26 b(readline)11 +b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)38 +b Fb(1)2025 1343 y Fq(R)2025 1474 y Fb(readline,)26 b(function)12 +b Fa(:)i(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 +b Fb(22)2025 1761 y Fq(V)2025 1891 y Fb(v)l(ariables,)27 +b(readline)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)50 +b Fb(4)2025 2178 y Fq(Y)2025 2309 y Fb(y)n(anking)25 +b(text)11 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)38 b Fb(2)p eop end +%%Page: 67 71 +TeXDict begin 67 70 bop 150 -116 a Fs(F)-8 b(unction)31 +b(and)f(V)-8 b(ariable)32 b(Index)2370 b(67)150 299 y +Fo(F)-13 b(unction)52 b(and)h(V)-13 b(ariable)53 b(Index)p +159 610 41 6 v 150 726 a Fe(_rl_digit_p)24 b Fa(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 +b Fb(38)150 814 y Fe(_rl_digit_value)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(38)150 901 y Fe(_rl_lowercase_p)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(38)150 988 y Fe(_rl_to_lower)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(38)150 1076 +y Fe(_rl_to_upper)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)45 b Fb(38)150 1163 y Fe(_rl_uppercase_p)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(38)150 1415 y Fq(A)150 1531 y Fe(abort)27 b(\(C-g\))11 +b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)37 b Fb(19)150 1618 y Fe(accept-line)28 b(\(Newline)g(or)e(Return\)) +8 b Fa(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 +b Fb(14)150 1871 y Fq(B)150 1987 y Fe(backward-char)29 +b(\(C-b\))8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 +b Fb(14)150 2074 y Fe(backward-delete-char)c(\(Rubout\))17 +b Fa(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 +b Fb(16)150 2161 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))18 +b Fa(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)45 +b Fb(17)150 2249 y Fe(backward-kill-word)30 b(\(M-DEL\))7 +b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)33 b Fb(17)150 2336 y Fe(backward-word)c(\(M-b\))8 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(14)150 +2423 y Fe(beginning-of-history)c(\(M-<\))7 b Fa(:)15 +b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 +b Fb(15)150 2511 y Fe(beginning-of-line)c(\(C-a\))15 +b Fa(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)41 b Fb(14)150 2598 y(b)r(ell-st)n(yle)21 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)47 b Fb(4)150 2685 y(bind-tt)n(y-sp)r(ecial-c)n +(hars)15 b Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 +b Fb(5)150 2935 y Fq(C)150 3051 y Fe(call-last-kbd-macro)30 +b(\(C-x)c(e\))11 b Fa(:)j(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)38 b Fb(19)150 3139 y Fe(capitalize-word)29 +b(\(M-c\))21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(16)150 +3226 y Fe(character-search)29 b(\(C-]\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(20)150 3313 y Fe(character-search-backward)31 b(\(M-C-]\))6 +b Fa(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(20)150 +3401 y Fe(clear-screen)28 b(\(C-l\))10 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)37 b Fb(14)150 3488 y(commen)n(t-b)r(egin)17 +b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)44 +b Fb(5)150 3575 y Fe(complete)27 b(\(TAB\))22 b Fa(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(18)150 3662 y(completion-displa)n(y-width)22 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)48 b Fb(5)150 3750 y(completion-ignore-case)13 +b Fa(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)40 b Fb(5)150 3837 +y(completion-map-case)9 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +36 b Fb(5)150 3924 y(completion-pre\014x-displa)n(y-length)8 +b Fa(:)k(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +34 b Fb(5)150 4012 y(completion-query-items)17 b Fa(:)c(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)44 b Fb(5)150 4099 y(con)n(v)n(ert-meta)20 b +Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)47 b Fb(5)150 4186 y Fe(copy-backward-word)30 b(\(\))20 +b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(17)150 4273 y Fe(copy-forward-word) +29 b(\(\))23 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(18)150 +4361 y Fe(copy-region-as-kill)30 b(\(\))17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(17)150 4613 y Fq(D)150 4729 y Fe(delete-char)28 +b(\(C-d\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(16)150 4816 y Fe(delete-char-or-list)30 b(\(\))17 +b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)44 b Fb(19)150 4904 y Fe(delete-horizontal-space)31 +b(\(\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)33 b Fb(17)150 4991 y Fe(digit-argument)c(\()p +Fc(M-0)p Fe(,)e Fc(M-1)p Fe(,)f(...)g Fc(M--)p Fe(\))7 +b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(18)150 +5078 y(disable-completion)13 b Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)40 b Fb(5)150 5166 y Fe(do-uppercase-version)30 +b(\(M-a,)d(M-b,)f(M-)p Fc(x)9 b Fe(,)27 b(...\))310 5253 +y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(19)150 5340 +y Fe(downcase-word)c(\(M-l\))8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +34 b Fb(16)2025 610 y Fe(dump-functions)29 b(\(\))13 +b Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(20)2025 +698 y Fe(dump-macros)28 b(\(\))21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(20)2025 785 y Fe(dump-variables)29 +b(\(\))13 b Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 +b Fb(20)2025 1039 y Fq(E)2025 1156 y Fb(editing-mo)r(de)21 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)48 b Fb(6)2025 1243 y Fe(emacs-editing-mode)29 b(\(C-e\))12 +b Fa(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)39 b Fb(20)2025 1331 y(enable-k)n(eypad)17 +b Fa(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 +b Fb(6)2025 1419 y Fe(end-kbd-macro)28 b(\(C-x)f(\)\))10 +b Fa(:)j(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(19)2025 1506 y Fe(end-of-history)29 +b(\(M->\))23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(15)2025 +1594 y Fe(end-of-line)28 b(\(C-e\))13 b Fa(:)h(:)f(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)39 b Fb(14)2025 1681 y Fe(exchange-point-and-mark)31 +b(\(C-x)26 b(C-x\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(20)2025 1769 y(expand-tilde)14 b Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)41 b Fb(6)2025 +2020 y Fq(F)2025 2137 y Fe(forward-backward-delete-char)32 +b(\(\))11 b Fa(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 +b Fb(16)2025 2225 y Fe(forward-char)28 b(\(C-f\))10 b +Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(14)2025 +2312 y Fe(forward-search-history)30 b(\(C-s\))21 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 +b Fb(15)2025 2400 y Fe(forward-word)28 b(\(M-f\))10 b +Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(14)2025 +2643 y Fq(H)2025 2760 y Fb(history-preserv)n(e-p)r(oin)n(t)9 +b Fa(:)j(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(6)2025 +2848 y Fe(history-search-backward)31 b(\(\))7 b Fa(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 +b Fb(15)2025 2935 y Fe(history-search-forward)c(\(\))10 +b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)36 b Fb(15)2025 3023 y(history-size)16 b Fa(:)d(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)43 +b Fb(6)2025 3110 y(horizon)n(tal-scroll-mo)r(de)23 b +Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)48 b Fb(6)2025 +3345 y Fq(I)2025 3462 y Fb(input-meta)19 b Fa(:)13 b(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 +b Fb(6)2025 3550 y Fe(insert-comment)29 b(\(M-#\))23 +b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(20)2025 3637 y +Fe(insert-completions)29 b(\(M-*\))12 b Fa(:)j(:)e(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 +b Fb(18)2025 3725 y(isearc)n(h-terminators)21 b Fa(:)13 +b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(6)2025 +3960 y Fq(K)2025 4077 y Fb(k)n(eymap)8 b Fa(:)k(:)h(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 +b Fb(7)2025 4164 y Fe(kill-line)27 b(\(C-k\))18 b Fa(:)d(:)e(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)2025 4252 y +Fe(kill-region)28 b(\(\))21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)47 b Fb(17)2025 4339 y Fe(kill-whole-line)29 +b(\(\))10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 +b Fb(17)2025 4427 y Fe(kill-word)27 b(\(M-d\))18 b Fa(:)d(:)e(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)2025 4670 +y Fq(M)2025 4787 y Fb(mark-mo)r(di\014ed-lines)11 b Fa(:)i(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(7)2025 4875 y(mark-symlink)n +(ed-directories)8 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(7)2025 +4962 y(matc)n(h-hidden-\014les)18 b Fa(:)12 b(:)h(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)45 b Fb(7)2025 5050 y Fe(menu-complete)28 +b(\(\))16 b Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(18)2025 5137 y Fe(menu-complete-backward)30 b(\(\))10 +b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)36 b Fb(19)2025 5225 y(men)n(u-complete-displa)n(y-pre\014x)19 +b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)49 b Fb(7)2025 5312 y(meta-\015ag)15 b Fa(:)f(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)42 +b Fb(6)p eop end +%%Page: 68 72 +TeXDict begin 68 71 bop 150 -116 a Fs(F)-8 b(unction)31 +b(and)f(V)-8 b(ariable)32 b(Index)2370 b(68)150 299 y +Fq(N)150 417 y Fe(next-history)28 b(\(C-n\))10 b Fa(:)15 +b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(15)150 506 +y Fe(non-incremental-forward-searc)q(h-hi)q(story)32 +b(\(M-n\))310 593 y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 +b Fb(15)150 681 y Fe(non-incremental-reverse-searc)q(h-hi)q(story)f +(\(M-p\))310 769 y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 +b Fb(15)150 1008 y Fq(O)150 1126 y Fb(output-meta)13 +b Fa(:)f(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)40 b Fb(7)150 1215 y Fe(overwrite-mode)29 b(\(\))13 +b Fa(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(17)150 +1462 y Fq(P)150 1581 y Fb(page-completions)21 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)46 +b Fb(7)150 1669 y Fe(possible-completions)30 b(\(M-?\))7 +b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)33 b Fb(18)150 1758 y Fe(prefix-meta)28 b(\(ESC\))13 +b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(19)150 +1846 y Fe(previous-history)29 b(\(C-p\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(14)150 2104 y Fq(Q)150 2223 y Fe(quoted-insert)29 +b(\(C-q)d(or)g(C-v\))c Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(16)150 2481 y Fq(R)150 +2599 y Fe(re-read-init-file)29 b(\(C-x)e(C-r\))11 b Fa(:)j(:)g(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(19)150 2687 y Fe(readline)12 b Fa(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b +Fb(22)150 2776 y Fe(redraw-current-line)30 b(\(\))17 +b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)44 b Fb(14)150 2864 y Fe(reverse-search-history)31 +b(\(C-r\))20 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)45 b Fb(15)150 2953 y(rev)n(ert-all-at-newline)22 +b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)48 b Fb(8)150 +3041 y Fe(revert-line)28 b(\(M-r\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)39 b Fb(19)150 3130 y Fe(rl_add_defun)22 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 +b Fb(30)150 3218 y Fe(rl_add_funmap_entry)18 b Fa(:)g(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(33)150 3306 y Fe(rl_add_undo)24 +b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +48 b Fb(34)150 3395 y Fe(rl_alphabetic)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(37)150 3483 y +Fe(rl_already_prompted)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(26)150 3572 y Fe(rl_attempted_completion_funct)q(ion)25 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(45)150 +3660 y Fe(rl_attempted_completion_over)13 b Fa(:)19 b(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 +b Fb(49)150 3748 y Fe(rl_basic_quote_characters)26 b +Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)46 b Fb(47)150 3837 y Fe(rl_basic_word_break_character)q(s)7 +b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 +b Fb(47)150 3925 y Fe(rl_begin_undo_group)18 b Fa(:)g(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(33)150 4014 y Fe(rl_bind_key)24 +b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +48 b Fb(31)150 4102 y Fe(rl_bind_key_if_unbound)10 b +Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(31)150 4191 y Fe +(rl_bind_key_if_unbound_in_map)11 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(31)150 4279 y Fe(rl_bind_key_in_map) +25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(31)150 +4367 y Fe(rl_bind_keyseq)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)40 b Fb(31)150 4456 y Fe(rl_bind_keyseq_if_unbound)26 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)46 b Fb(32)150 4544 y Fe(rl_bind_keyseq_if_unbound_in_)q(map)25 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(32)150 +4633 y Fe(rl_bind_keyseq_in_map)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(32)150 4721 y Fe(rl_binding_keymap)6 b Fa(:)17 b(:)c(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)32 b Fb(27)150 4809 y Fe +(rl_callback_handler_install)15 b Fa(:)k(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(39)150 4898 y +Fe(rl_callback_handler_remove)18 b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(39)150 4986 +y Fe(rl_callback_read_char)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(39)150 5075 y Fe(rl_catch_signals)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(42)150 5163 y Fe(rl_catch_sigwinch)6 +b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(42)150 +5252 y Fe(rl_char_is_quoted_p)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(46)150 5340 y Fe(rl_cleanup_after_signal)8 b Fa(:)18 +b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)34 b Fb(42)2025 299 y Fe(rl_clear_message)9 +b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 +b Fb(35)2025 387 y Fe(rl_clear_pending_input)10 b Fa(:)18 +b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)37 b Fb(36)2025 476 y Fe(rl_clear_signals)9 +b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 +b Fb(43)2025 564 y Fe(rl_complete)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(44)2025 +653 y Fe(rl_complete_internal)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(44)2025 741 y Fe(rl_completer_quote_characters)10 +b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 +b Fb(47)2025 830 y Fe(rl_completer_word_break_charac)q(ters)15 +b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)g(:)41 b Fb(47)2025 +918 y Fe(rl_completion_append_character)8 b Fa(:)19 b(:)13 +b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(48)2025 +1006 y Fe(rl_completion_display_matches_)q(hook)15 b +Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)g(:)41 b Fb(47)2025 1095 +y Fe(rl_completion_entry_function)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)45 b Fb(44,)27 b(45)2025 1183 y Fe +(rl_completion_found_quote)e Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(48)2025 1272 +y Fe(rl_completion_invoking_key)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(49)2025 +1360 y Fe(rl_completion_mark_symlink_dir)q(s)27 b Fa(:)14 +b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(48)2025 +1449 y Fe(rl_completion_matches)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 +b Fb(45)2025 1537 y Fe(rl_completion_mode)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(44)2025 1625 y +Fe(rl_completion_query_items)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(47)2025 +1714 y Fe(rl_completion_quote_character)10 b Fa(:)19 +b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 +b Fb(48)2025 1802 y Fe(rl_completion_suppress_append)10 +b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 +b Fb(48)2025 1891 y Fe(rl_completion_suppress_quote)13 +b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 +b Fb(48)2025 1979 y Fe(rl_completion_type)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(49)2025 2068 y +Fe(rl_completion_word_break_hook)10 b Fa(:)19 b(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b +Fb(47)2025 2156 y Fe(rl_copy_keymap)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(30)2025 2245 y Fe(rl_copy_text)21 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 +b Fb(35)2025 2333 y Fe(rl_crlf)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(34)2025 2421 y Fe(rl_delete_text)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(35)2025 2510 y Fe +(rl_deprep_term_function)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 +b Fb(27)2025 2598 y Fe(rl_deprep_terminal)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(37)2025 2687 y +Fe(rl_ding)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(37)2025 2775 +y Fe(rl_directory_completion_hook)13 b Fa(:)19 b(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 +b Fb(46)2025 2864 y Fe(rl_discard_keymap)6 b Fa(:)17 +b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(30)2025 +2952 y Fe(rl_dispatching)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)40 b Fb(25)2025 3041 y Fe(rl_display_match_list)13 +b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(38)2025 3129 y +Fe(rl_display_prompt)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +33 b Fb(26)2025 3217 y Fe(rl_do_undo)7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b +Fb(34)2025 3306 y Fe(rl_done)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(25)2025 3394 y Fe(rl_echo_signal_char)18 b Fa(:)f(:)c(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)45 b Fb(42)2025 3483 y Fe(rl_editing_mode)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(29)2025 3571 y Fe(rl_end)17 b Fa(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(25)2025 3660 y Fe(rl_end_undo_group)6 b Fa(:)17 +b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(33)2025 +3748 y Fe(rl_erase_empty_line)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 +b Fb(25)2025 3836 y Fe(rl_event_hook)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(27)2025 3925 y +Fe(rl_execute_next)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)38 b Fb(36)2025 4013 y Fe(rl_executing_keymap)18 +b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(27)2025 4102 +y Fe(rl_executing_macro)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 +b Fb(27)2025 4190 y Fe(rl_expand_prompt)9 b Fa(:)16 b(:)d(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(35)2025 4279 y Fe(rl_explicit_arg)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 +b Fb(29)2025 4367 y Fe(rl_extend_line_buffer)13 b Fa(:)18 +b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)40 b Fb(37)2025 4456 y Fe +(rl_filename_completion_desired)8 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(48)2025 4544 y Fe +(rl_filename_completion_functio)q(n)27 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)48 b Fb(45)2025 4632 y Fe +(rl_filename_dequoting_function)8 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(46)2025 4721 y Fe +(rl_filename_quote_characters)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 b Fb(47)2025 4809 y +Fe(rl_filename_quoting_desired)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(49)2025 4898 +y Fe(rl_filename_quoting_function)13 b Fa(:)19 b(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 +b Fb(45)2025 4986 y Fe(rl_filename_rewrite_hook)28 b +Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)49 b Fb(46)2025 5075 y Fe(rl_forced_update_display)28 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)49 b Fb(34)2025 5163 y Fe(rl_free)15 b Fa(:)f(:)f(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 +b Fb(37)2025 5252 y Fe(rl_free_keymap)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(30)2025 5340 y Fe +(rl_free_line_state)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 +b Fb(42)p eop end +%%Page: 69 73 +TeXDict begin 69 72 bop 150 -116 a Fs(F)-8 b(unction)31 +b(and)f(V)-8 b(ariable)32 b(Index)2370 b(69)150 299 y +Fe(rl_free_undo_list)6 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) +32 b Fb(34)150 387 y Fe(rl_function_dumper)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(33)150 476 y Fe +(rl_function_of_keyseq)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(32)150 564 y Fe(rl_funmap_names)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(33)150 653 y Fe(rl_generic_bind)11 +b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 +b Fb(32)150 741 y Fe(rl_get_keymap)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(30)150 830 y Fe +(rl_get_keymap_by_name)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(30)150 918 y Fe(rl_get_keymap_name)25 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(30)150 1006 y +Fe(rl_get_screen_size)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 +b Fb(43)150 1095 y Fe(rl_get_termcap)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(39)150 1183 y Fe(rl_getc)15 +b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)41 b Fb(36)150 1272 y Fe(rl_getc_function)9 +b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 +b Fb(27)150 1360 y Fe(rl_gnu_readline_p)6 b Fa(:)17 b(:)c(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)32 b Fb(26)150 1449 y Fe +(rl_ignore_completion_duplicat)q(es)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)48 b Fb(48)150 1537 y Fe(rl_ignore_some_completions_fu)q +(ncti)q(on)12 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)38 +b Fb(46)150 1625 y Fe(rl_inhibit_completion)13 b Fa(:)18 +b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)39 b Fb(49)150 1714 y Fe(rl_initialize)16 +b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 +b Fb(37)150 1802 y Fe(rl_insert_completions)13 b Fa(:)18 +b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)39 b Fb(44)150 1891 y Fe(rl_insert_text)14 +b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)40 +b Fb(35)150 1979 y Fe(rl_instream)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(26)150 +2068 y Fe(rl_invoking_keyseqs)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(33)150 2156 y Fe(rl_invoking_keyseqs_in_map)18 b +Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 +b Fb(33)150 2245 y Fe(rl_kill_text)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(36)150 2333 +y Fe(rl_last_func)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)45 b Fb(27)150 2421 y Fe(rl_library_version)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(26)150 +2510 y Fe(rl_line_buffer)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)40 b Fb(25)150 2598 y Fe(rl_list_funmap_names)16 +b Fa(:)h(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)42 b Fb(33)150 2687 y Fe(rl_macro_bind)16 +b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 +b Fb(38)150 2775 y Fe(rl_macro_dumper)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(38)150 2864 y Fe +(rl_make_bare_keymap)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 +b Fb(30)150 2952 y Fe(rl_make_keymap)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(30)150 3041 y Fe(rl_mark)15 +b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)41 b Fb(25)150 3129 y Fe(rl_message)7 +b Fa(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)33 b Fb(35)150 3217 y Fe(rl_modifying)22 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 +b Fb(34)150 3306 y Fe(rl_named_function)6 b Fa(:)17 b(:)c(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)32 b Fb(32)150 3394 y Fe(rl_num_chars_to_read)16 +b Fa(:)h(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)42 b Fb(25)150 3483 y Fe(rl_numeric_arg)14 +b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)40 +b Fb(29)150 3571 y Fe(rl_on_new_line)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(34)150 3660 y Fe +(rl_on_new_line_with_prompt)18 b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(34)150 3748 y +Fe(rl_outstream)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)45 b Fb(26)150 3836 y Fe(rl_parse_and_bind)6 +b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(32)150 +3925 y Fe(rl_pending_input)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)35 b Fb(25)150 4013 y Fe(rl_point)12 b Fa(:)j(:)e(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 +b Fb(25)150 4102 y Fe(rl_possible_completions)8 b Fa(:)18 +b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)34 b Fb(44)150 4190 y Fe(rl_pre_input_hook)6 +b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(27)150 +4279 y Fe(rl_prefer_env_winsize)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 +b Fb(26)150 4367 y Fe(rl_prep_term_function)13 b Fa(:)18 +b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)39 b Fb(27)150 4456 y Fe(rl_prep_terminal)9 +b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 +b Fb(36)150 4544 y Fe(rl_prompt)9 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b +Fb(26)150 4632 y Fe(rl_push_macro_input)18 b Fa(:)g(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(36)150 4721 y Fe(rl_read_init_file)6 +b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(32)150 +4809 y Fe(rl_read_key)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(36)150 4898 y Fe(rl_readline_name)9 +b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 +b Fb(26)150 4986 y Fe(rl_readline_state)6 b Fa(:)17 b(:)c(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)32 b Fb(28)150 5075 y Fe(rl_readline_version)18 +b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(26)150 5163 +y Fe(rl_redisplay)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)45 b Fb(34)150 5252 y Fe(rl_redisplay_function)13 +b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(27)150 5340 y +Fe(rl_replace_line)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)38 b Fb(37)2025 299 y Fe(rl_reset_after_signal)13 +b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(42)2025 386 y +Fe(rl_reset_line_state)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 +b Fb(34)2025 474 y Fe(rl_reset_screen_size)16 b Fa(:)h(:)c(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)42 b Fb(43)2025 561 y Fe(rl_reset_terminal)6 b Fa(:)17 +b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(37)2025 +648 y Fe(rl_resize_terminal)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +47 b Fb(42)2025 736 y Fe(rl_restore_prompt)6 b Fa(:)17 +b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(35)2025 +823 y Fe(rl_restore_state)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)35 b Fb(37)2025 910 y Fe(rl_save_prompt)14 b +Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 +b Fb(35)2025 998 y Fe(rl_save_state)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(37)2025 1085 y Fe(rl_set_key)7 +b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)33 b Fb(32)2025 1173 y Fe(rl_set_keyboard_input_timeout)10 +b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 +b Fb(36)2025 1260 y Fe(rl_set_keymap)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(30)2025 1347 y +Fe(rl_set_paren_blink_timeout)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(39)2025 1435 +y Fe(rl_set_prompt)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)43 b Fb(35)2025 1522 y Fe(rl_set_screen_size)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(42)2025 +1609 y Fe(rl_set_signals)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)40 b Fb(43)2025 1697 y Fe(rl_show_char)21 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 +b Fb(34)2025 1784 y Fe(rl_sort_completion_matches)17 +b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)44 b Fb(49)2025 1872 y Fe(rl_special_prefixes)18 b +Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(47)2025 1959 y +Fe(rl_startup_hook)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)38 b Fb(27)2025 2046 y Fe(rl_stuff_char)16 b +Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 +b Fb(36)2025 2134 y Fe(rl_terminal_name)9 b Fa(:)16 b(:)d(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(26)2025 2221 y Fe +(rl_tty_set_default_bindings)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(37)2025 2308 y +Fe(rl_tty_unset_default_bindings)10 b Fa(:)19 b(:)13 +b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b +Fb(37)2025 2396 y Fe(rl_unbind_command_in_map)28 b Fa(:)13 +b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)49 b Fb(31)2025 2483 y Fe(rl_unbind_function_in_map)25 +b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g +(:)h(:)46 b Fb(31)2025 2570 y Fe(rl_unbind_key)16 b Fa(:)g(:)d(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(31)2025 +2658 y Fe(rl_unbind_key_in_map)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 +b Fb(31)2025 2745 y Fe(rl_username_completion_functio)q(n)27 +b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 +b Fb(45)2025 2833 y Fe(rl_variable_bind)9 b Fa(:)16 b(:)d(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(38)2025 2920 y Fe(rl_variable_dumper)25 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(39)2025 +3007 y Fe(rl_variable_value)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)33 b Fb(39)2025 3250 y Fq(S)2025 3367 y Fe(self-insert)28 +b(\(a,)e(b,)g(A,)g(1,)g(!,)g(...)q(\))9 b Fa(:)k(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(16)2025 3454 y Fe(set-mark)27 +b(\(C-@\))22 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) +f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)47 b Fb(19)2025 3542 y(sho)n(w-all-if-am)n(biguous)14 +b Fa(:)h(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(8)2025 +3629 y(sho)n(w-all-if-unmo)r(di\014ed)23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:) +g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g +(:)g(:)g(:)50 b Fb(8)2025 3716 y(skip-completed-text)11 +b Fa(:)h(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b +Fb(8)2025 3804 y Fe(skip-csi-sequence)29 b(\(\))23 b +Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(20)2025 3891 y +Fe(start-kbd-macro)29 b(\(C-x)d(\(\))c Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)48 +b Fb(19)2025 4133 y Fq(T)2025 4249 y Fe(tab-insert)28 +b(\(M-TAB\))10 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 +b Fb(16)2025 4337 y Fe(tilde-expand)28 b(\(M-~\))10 b +Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(19)2025 +4424 y Fe(transpose-chars)29 b(\(C-t\))21 b Fa(:)13 b(:)g(:)g(:)g(:)g +(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) +46 b Fb(16)2025 4512 y Fe(transpose-words)29 b(\(M-t\))21 +b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)46 b Fb(16)2025 4764 y Fq(U)2025 +4880 y Fe(undo)26 b(\(C-_)h(or)f(C-x)g(C-u\))6 b Fa(:)14 +b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(19)2025 4968 y Fe +(universal-argument)c(\(\))21 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)46 +b Fb(18)2025 5055 y Fe(unix-filename-rubout)30 b(\(\))15 +b Fa(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) +g(:)g(:)h(:)f(:)41 b Fb(17)2025 5143 y Fe(unix-line-discard)29 +b(\(C-u\))15 b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(17)2025 5230 y +Fe(unix-word-rubout)29 b(\(C-w\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:) +g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)44 +b Fb(17)2025 5317 y Fe(upcase-word)28 b(\(M-u\))13 b +Fa(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(16)p +eop end +%%Page: 70 74 +TeXDict begin 70 73 bop 150 -116 a Fs(F)-8 b(unction)31 +b(and)f(V)-8 b(ariable)32 b(Index)2370 b(70)150 299 y +Fq(V)150 425 y Fe(vi-editing-mode)29 b(\(M-C-j\))15 b +Fa(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h +(:)f(:)g(:)g(:)41 b Fb(20)150 518 y(visible-stats)7 b +Fa(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g +(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) +h(:)f(:)g(:)34 b Fb(8)2025 299 y Fq(Y)2025 416 y Fe(yank)26 +b(\(C-y\))14 b Fa(:)g(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)40 b Fb(18)2025 503 y Fe(yank-last-arg)28 +b(\(M-.)f(or)f(M-_\))c Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) +g(:)g(:)g(:)g(:)g(:)h(:)f(:)47 b Fb(15)2025 591 y Fe(yank-nth-arg)28 +b(\(M-C-y\))c Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(15)2025 +679 y Fe(yank-pop)27 b(\(M-y\))22 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g +(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) +g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(18)p eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/readline-6.2/doc/readline_3.ps b/readline-6.2/doc/readline_3.ps new file mode 100644 index 0000000..27d1a63 --- /dev/null +++ b/readline-6.2/doc/readline_3.ps @@ -0,0 +1,1461 @@ +%!PS-Adobe-3.0 +%%Creator: groff version 1.19.2 +%%CreationDate: Tue Feb 8 11:13:01 2011 +%%DocumentNeededResources: font Times-Roman +%%+ font Times-Bold +%%+ font Times-Italic +%%+ font Courier +%%DocumentSuppliedResources: procset grops 1.19 2 +%%Pages: 15 +%%PageOrder: Ascend +%%DocumentMedia: Default 595 842 0 () () +%%Orientation: Portrait +%%EndComments +%%BeginDefaults +%%PageMedia: Default +%%EndDefaults +%%BeginProlog +%%BeginResource: procset grops 1.19 2 +%!PS-Adobe-3.0 Resource-ProcSet +/setpacking where{ +pop +currentpacking +true setpacking +}if +/grops 120 dict dup begin +/SC 32 def +/A/show load def +/B{0 SC 3 -1 roll widthshow}bind def +/C{0 exch ashow}bind def +/D{0 exch 0 SC 5 2 roll awidthshow}bind def +/E{0 rmoveto show}bind def +/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def +/G{0 rmoveto 0 exch ashow}bind def +/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/I{0 exch rmoveto show}bind def +/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def +/K{0 exch rmoveto 0 exch ashow}bind def +/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/M{rmoveto show}bind def +/N{rmoveto 0 SC 3 -1 roll widthshow}bind def +/O{rmoveto 0 exch ashow}bind def +/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/Q{moveto show}bind def +/R{moveto 0 SC 3 -1 roll widthshow}bind def +/S{moveto 0 exch ashow}bind def +/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def +/SF{ +findfont exch +[exch dup 0 exch 0 exch neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/MF{ +findfont +[5 2 roll +0 3 1 roll +neg 0 0]makefont +dup setfont +[exch/setfont cvx]cvx bind def +}bind def +/level0 0 def +/RES 0 def +/PL 0 def +/LS 0 def +/MANUAL{ +statusdict begin/manualfeed true store end +}bind def +/PLG{ +gsave newpath clippath pathbbox grestore +exch pop add exch pop +}bind def +/BP{ +/level0 save def +1 setlinecap +1 setlinejoin +72 RES div dup scale +LS{ +90 rotate +}{ +0 PL translate +}ifelse +1 -1 scale +}bind def +/EP{ +level0 restore +showpage +}def +/DA{ +newpath arcn stroke +}bind def +/SN{ +transform +.25 sub exch .25 sub exch +round .25 add exch round .25 add exch +itransform +}bind def +/DL{ +SN +moveto +SN +lineto stroke +}bind def +/DC{ +newpath 0 360 arc closepath +}bind def +/TM matrix def +/DE{ +TM currentmatrix pop +translate scale newpath 0 0 .5 0 360 arc closepath +TM setmatrix +}bind def +/RC/rcurveto load def +/RL/rlineto load def +/ST/stroke load def +/MT/moveto load def +/CL/closepath load def +/Fr{ +setrgbcolor fill +}bind def +/setcmykcolor where{ +pop +/Fk{ +setcmykcolor fill +}bind def +}if +/Fg{ +setgray fill +}bind def +/FL/fill load def +/LW/setlinewidth load def +/Cr/setrgbcolor load def +/setcmykcolor where{ +pop +/Ck/setcmykcolor load def +}if +/Cg/setgray load def +/RE{ +findfont +dup maxlength 1 index/FontName known not{1 add}if dict begin +{ +1 index/FID ne{def}{pop pop}ifelse +}forall +/Encoding exch def +dup/FontName exch def +currentdict end definefont pop +}bind def +/DEFS 0 def +/EBEGIN{ +moveto +DEFS begin +}bind def +/EEND/end load def +/CNT 0 def +/level1 0 def +/PBEGIN{ +/level1 save def +translate +div 3 1 roll div exch scale +neg exch neg exch translate +0 setgray +0 setlinecap +1 setlinewidth +0 setlinejoin +10 setmiterlimit +[]0 setdash +/setstrokeadjust where{ +pop +false setstrokeadjust +}if +/setoverprint where{ +pop +false setoverprint +}if +newpath +/CNT countdictstack def +userdict begin +/showpage{}def +/setpagedevice{}def +}bind def +/PEND{ +countdictstack CNT sub{end}repeat +level1 restore +}bind def +end def +/setpacking where{ +pop +setpacking +}if +%%EndResource +%%EndProlog +%%BeginSetup +%%BeginFeature: *PageSize Default +<< /PageSize [ 595 842 ] /ImagingBBox null >> setpagedevice +%%EndFeature +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-Italic +%%IncludeResource: font Courier +grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 +def/PL 841.89 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron +/Zcaron/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent +/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen +/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon +/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O +/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex +/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y +/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft +/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl +/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut +/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash +/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen +/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft +/logicalnot/minus/registered/macron/degree/plusminus/twosuperior +/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior +/ordmasculine/guilsinglright/onequarter/onehalf/threequarters +/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE +/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn +/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash +/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def +/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE +/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 +10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 +(readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS) +72 112.8 Q/F2 10/Times-Bold@0 SF(#include <stdio.h>)108 124.8 Q +(#include <r)108 136.8 Q(eadline/r)-.18 E(eadline.h>)-.18 E(#include <r) +108 148.8 Q(eadline/history)-.18 E(.h>)-.7 E/F3 10/Times-Italic@0 SF +-.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0 +(\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT) +72 194.4 Q F0(Readline is Cop)108 206.4 Q +(yright \251 1989\2552011 Free Softw)-.1 E(are F)-.1 E(oundation, Inc.) +-.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S(adline).18 E F0 +.088(will read a line from the terminal and return it, using)2.588 F F2 +(pr)2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr) +2.587 E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42 +(the empty string, no prompt is issued.)108 247.2 R .421 +(The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421 +(\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q +(The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15 +G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108 +276 S(adline).18 E F0(of)3.79 E 1.29 +(fers editing capabilities while the user is entering the line.)-.25 F +1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F +(mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G +(i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G +(ilable.).25 E .272 +(This manual page describes only the most basic use of)108 304.8 R F2 +-.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272 +(uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25 +F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3 +(The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.) +2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.478 E F2 -.18(re)108 345.6 S +(adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.) +-.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589 +F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283 +(while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2 +(NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF) +2.783 E F0 .283(is read with a non\255empty line, it)2.783 F +(is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.986(TA) +-.438 G(TION)-.054 E F0 .077 +(An Emacs-style notation is used to denote k)108 398.4 R -.15(ey)-.1 G +(strok).15 E 2.576(es. Control)-.1 F -.1(ke)2.576 G .076 +(ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.576(,e)C .076 +(.g., C\255n means)-2.576 F 2.582(Control\255N. Similarly)108 410.4 R(,) +-.65 E F3(meta)2.962 E F0 -.1(ke)2.842 G .082(ys are denoted by M\255) +-.05 F F3 -.1(ke)C(y)-.2 E F0 2.583(,s)C 2.583(oM)-2.583 G .083 +(\255x means Meta\255X.)-2.583 F .083(\(On k)5.083 F -.15(ey)-.1 G .083 +(boards without a).15 F F3(meta)108 422.4 Q F0 -.1(ke)3.491 G 2.031 -.65 +(y, M)-.05 H<ad>.65 E F3(x)A F0 .731(means ESC)3.231 F F3(x)3.231 E F0 +3.231(,i)C .731(.e., press the Escape k)-3.231 F 1.03 -.15(ey t)-.1 H +.73(hen the).15 F F3(x)4 E F0 -.1(ke)3.76 G 4.53 -.65(y. T)-.05 H .73 +(his mak).65 F .73(es ESC the)-.1 F F3 .73(meta pr)3.23 F(e\214x)-.37 E +F0(.)A .48(The combination M\255C\255)108 434.4 R F3(x)A F0 .48 +(means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o)C 2.98(rp)-2.98 G .48 +(ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48 +(hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E +(pressing the)108 446.4 Q F3(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G +(\)).65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G +3.119(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w) +.27 G .619(hich normally act as a repeat count.)-3.119 F(Sometimes,) +5.619 E(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H +3.118(ti).4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 +(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) +.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 +(ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018 +(ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C +1.018(auses that command to act in a backw)-3.518 F 1.018 +(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q +(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted.)-.25 E +.811(When a command is described as)108 516 R F3(killing)3.311 E F0(te) +3.311 E .811(xt, the te)-.15 F .811(xt deleted is sa)-.15 F -.15(ve)-.2 +G 3.311(df).15 G .812(or possible future retrie)-3.311 F -.25(va)-.25 G +3.312(l\().25 G F3(yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029 +(killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G +2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E +.329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029 +(xt to be accumulated into one unit,)-.15 F .567(which can be yank)108 +540 R .567(ed all at once.)-.1 F .567(Commands which do not kill te) +5.567 F .567(xt separate the chunks of te)-.15 F .567(xt on the kill) +-.15 F(ring.)108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-1.04 E F0 +.091(Readline is customized by putting commands in an initialization \ +\214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591 +(\214le\). The)2.591 F .091(name of this \214le)2.591 F 1.442(is tak)108 +592.8 R 1.443(en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC) +3.943 E F0(en)3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F +1.443(that v)3.943 F 1.443(ariable is unset, the def)-.25 F 1.443 +(ault is)-.1 F F3(~/.inputr)108 604.8 Q(c)-.37 E F0 5.058(.I).31 G 2.558 +(ft)-5.058 G .058(hat \214le)-2.558 F .058(does not e)5.058 F .058 +(xist or cannot be read, the ultimate def)-.15 F .058(ault is)-.1 F F3 +(/etc/inputr)2.557 E(c)-.37 E F0 5.057(.W).31 G .057(hen a program) +-5.057 F 1.158(which uses the readline library starts up, the init \214\ +le is read, and the k)108 616.8 R 1.459 -.15(ey b)-.1 H 1.159 +(indings and v).15 F 1.159(ariables are set.)-.25 F .029 +(There are only a fe)108 628.8 R 2.529(wb)-.25 G .029 +(asic constructs allo)-2.529 F .028(wed in the readline init \214le.) +-.25 F .028(Blank lines are ignored.)5.028 F .028(Lines be)5.028 F(gin-) +-.15 E .553(ning with a)108 640.8 R F2(#)3.053 E F0 .554(are comments.) +3.053 F .554(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F0 +.554(indicate conditional constructs.)3.054 F .554(Other lines denote) +5.554 F -.1(ke)108 652.8 S 2.987(yb)-.05 G .487(indings and v)-2.987 F +.487(ariable settings.)-.25 F .487 +(Each program using this library may add its o)5.487 F .486 +(wn commands and bind-)-.25 F(ings.)108 664.8 Q -.15(Fo)108 681.6 S 2.5 +(re).15 G(xample, placing)-2.65 E(M\255Control\255u: uni)144 698.4 Q +-.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(or)108 710.4 Q +(C\255Meta\255u: uni)144 722.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument) +-.18 E(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(1)197.055 E 0 +Cg EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R +(into the)108 84 Q/F1 10/Times-Italic@0 SF(inputr)2.51 E(c)-.37 E F0 -.1 +(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G +(cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument) +-.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795 +(wing symbolic character names are recognized while processing k)-.25 F +3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC) +5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,) +.28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5 +E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC) +-.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5 +(TA)2.5 G(B).5 E F0(.).27 E .209 +(In addition to command names, readline allo)108 129.6 R .209(ws k)-.25 +F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 +(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) +-.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2 +10/Times-Bold@0 SF -.25(Ke)87 163.2 S 2.5(yB).25 G(indings)-2.5 E F0 +.366(The syntax for controlling k)108 175.2 R .666 -.15(ey b)-.1 H .366 +(indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366 +(\214le is simple.)3.176 F .366(All that is required is the name of the) +5.366 F .383(command or the te)108 187.2 R .383(xt of a macro and a k) +-.15 F .683 -.15(ey s)-.1 H .383 +(equence to which it should be bound. The name may be speci-).15 F .853 +(\214ed in one of tw)108 199.2 R 3.353(ow)-.1 G .853 +(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853 +(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr) +3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15 +(ey)-.1 G 2.919(sequence. The)108 211.2 R .419(name and k)2.919 F .719 +-.15(ey s)-.1 H .419(equence are separated by a colon.).15 F .419 +(There can be no whitespace between the)5.419 F(name and the colon.)108 +223.2 Q 1.755(When using the form)108 240 R F2 -.1(ke)4.255 G(yname).1 E +F0(:)A F1(function-name).833 E F0(or)4.255 E F1(macr)4.255 E(o)-.45 E F0 +(,)A F1 -.1(ke)4.255 G(yname)-.2 E F0 1.756(is the name of a k)4.435 F +2.056 -.15(ey s)-.1 H 1.756(pelled out in).15 F 2.5(English. F)108 252 R +(or e)-.15 E(xample:)-.15 E(Control\255u: uni)144 276 Q -.15(ve)-.25 G +(rsal\255ar).15 E(gument)-.18 E(Meta\255Rubout: backw)144 288 Q +(ard\255kill\255w)-.1 E(ord)-.1 E(Control\255o: "> output")144 300 Q +.148(In the abo)108 316.8 R .448 -.15(ve ex)-.15 H(ample,).15 E F1 +(C\255u)2.488 E F0 .148(is bound to the function)2.898 F F2(uni)2.647 E +-.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)3.327 E F0 +.147(is bound to the function)3.177 F F2(backward\255kill\255w)108 328.8 +Q(ord)-.1 E F0 3.835(,a)C(nd)-3.835 E F1(C\255o)3.675 E F0 1.336 +(is bound to run the macro e)4.016 F 1.336 +(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 +340.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 +(into the line\).)2.5 E .056(In the second form,)108 357.6 R F2("k)2.556 +E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) +2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 +(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 +(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 +(denoting an entire k)108 369.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ +ay be speci\214ed by placing the sequence within double quotes.).15 F +(Some)6.284 E .386(GNU Emacs style k)108 381.6 R .686 -.15(ey e)-.1 H +.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 +(xample, b)-.15 F .385(ut the symbolic character names)-.2 F +(are not recognized.)108 393.6 Q("\\C\255u": uni)144 417.6 Q -.15(ve) +-.25 G(rsal\255ar).15 E(gument)-.18 E +("\\C\255x\\C\255r": re\255read\255init\255\214le)144 429.6 Q +("\\e[11~": "Function K)144 441.6 Q .3 -.15(ey 1)-.25 H(").15 E .198 +(In this e)108 458.4 R(xample,)-.15 E F1(C-u)2.538 E F0 .199(is ag)2.949 +F .199(ain bound to the function)-.05 F F2(uni)2.699 E -.1(ve)-.1 G +(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .199(C-x C-r)5.039 F F0 .199 +(is bound to the function)3.429 F F2 -.18(re)108 470.4 S<ad72>.18 E +(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)3.01 +E F0(is bound to insert the te)3.94 E(xt)-.15 E F3(Function Key 1)2.5 E +F0(.)A(The full set of GNU Emacs style escape sequences a)108 487.2 Q +-.25(va)-.2 G(ilable when specifying k).25 E .3 -.15(ey s)-.1 H +(equences is).15 E F2<5c43ad>144 499.2 Q F0(control pre\214x)20.3 E F2 +<5c4dad>144 511.2 Q F0(meta pre\214x)18.08 E F2(\\e)144 523.2 Q F0 +(an escape character)28.78 E F2(\\\\)144 535.2 Q F0(backslash)30.44 E F2 +(\\")144 547.2 Q F0(literal ", a double quote)27.67 E F2(\\')144 559.2 Q +F0(literal ', a single quote)29.89 E(In addition to the GNU Emacs style\ + escape sequences, a second set of backslash escapes is a)108 576 Q -.25 +(va)-.2 G(ilable:).25 E F2(\\a)144 588 Q F0(alert \(bell\))28.22 E F2 +(\\b)144 600 Q F0(backspace)27.66 E F2(\\d)144 612 Q F0(delete)27.66 E +F2(\\f)144 624 Q F0(form feed)29.89 E F2(\\n)144 636 Q F0(ne)27.66 E +(wline)-.25 E F2(\\r)144 648 Q F0(carriage return)28.78 E F2(\\t)144 660 +Q F0(horizontal tab)29.89 E F2(\\v)144 672 Q F0 -.15(ve)28.22 G +(rtical tab).15 E F2(\\)144 684 Q F1(nnn)A F0 +(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E +(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 +696 Q F1(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he) +-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E +2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74(When entering the te) +108 712.8 R .74(xt of a macro, single or double quotes should be used t\ +o indicate a macro de\214nition.)-.15 F .089(Unquoted te)108 724.8 R +.089(xt is assumed to be a function name.)-.15 F .09(In the macro body) +5.089 F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F +-.15(ve)-.15 G(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(2) +197.055 E 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R(are e) +108 84 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G +(ther character in the macro te)-2.5 E(xt, including " and '.)-.15 E/F1 +10/Times-Bold@0 SF(Bash)108 100.8 Q F0(allo)2.93 E .43 +(ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429 +(indings to be displayed or modi\214ed with the).15 F F1(bind)2.929 E F0 +-.2(bu)2.929 G .429(iltin command.).2 F 1.095 +(The editing mode may be switched during interacti)108 112.8 R 1.395 +-.15(ve u)-.25 H 1.095(se by using the).15 F F1<ad6f>3.595 E F0 1.095 +(option to the)3.595 F F1(set)3.595 E F0 -.2(bu)3.595 G 1.095 +(iltin com-).2 F 3.076(mand. Other)108 124.8 R .576 +(programs using this library pro)3.076 F .575(vide similar mechanisms.) +-.15 F(The)5.575 E/F2 10/Times-Italic@0 SF(inputr)3.085 E(c)-.37 E F0 +.575(\214le may be edited and)3.385 F(re-read if a program does not pro) +108 136.8 Q(vide an)-.15 E 2.5(yo)-.15 G(ther means to incorporate ne) +-2.5 E 2.5(wb)-.25 G(indings.)-2.5 E F1 -.92(Va)87 153.6 S(riables).92 E +F0 .043(Readline has v)108 165.6 R .043 +(ariables that can be used to further customize its beha)-.25 F(vior)-.2 +E 5.043(.A)-.55 G -.25(va)-2.5 G .043(riable may be set in the).25 F F2 +(inpu-)2.554 E(tr)108 177.6 Q(c)-.37 E F0 +(\214le with a statement of the form)2.81 E F1(set)144 194.4 Q F2 +(variable\255name value)2.5 E F0 .79(Except where noted, readline v)108 +211.2 R .79(ariables can tak)-.25 F 3.29(et)-.1 G .79(he v)-3.29 F +(alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1(Off)3.29 E F0 .79 +(\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).).05 F(Unrecog-) +5.79 E .448(nized v)108 223.2 R .448(ariable names are ignored.)-.25 F +.448(When a v)5.448 F .448(ariable v)-.25 F .448 +(alue is read, empty or null v)-.25 F .449(alues, "on" \(case-insensi-) +-.25 F(ti)108 235.2 Q -.15(ve)-.25 G .468(\), and "1" are equi).15 F +-.25(va)-.25 G .468(lent to).25 F F1(On)2.968 E F0 5.468(.A)C .468 +(ll other v)-5.468 F .468(alues are equi)-.25 F -.25(va)-.25 G .468 +(lent to).25 F F1(Off)2.968 E F0 5.468(.T)C .467(he v)-5.468 F .467 +(ariables and their def)-.25 F(ault)-.1 E -.25(va)108 247.2 S(lues are:) +.25 E F1(bell\255style \(audible\))108 264 Q F0 .01 +(Controls what happens when readline w)144 276 R .011 +(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) +2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E +.94(rings the bell.)144 288 R .94(If set to)5.94 F F1(visible)3.44 E F0 +3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) +-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0(,)A +(readline attempts to ring the terminal')144 300 Q 2.5(sb)-.55 G(ell.) +-2.5 E F1(bind\255tty\255special\255chars \(On\))108 312 Q F0 .055 +(If set to)144 324 R F1(On)2.555 E F0 2.555(,r)C .056(eadline attempts \ +to bind the control characters treated specially by the k)-2.555 F +(ernel')-.1 E 2.556(st)-.55 G(ermi-)-2.556 E(nal dri)144 336 Q -.15(ve) +-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va)-.25 +G(lents.).25 E F1(comment\255begin \(`)108 348 Q(`#')-.63 E('\))-.63 E +F0 .062(The string that is inserted in)144 360 R F1(vi)2.562 E F0 .062 +(mode when the)2.562 F F1(insert\255comment)2.562 E F0 .062 +(command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562 +E(mand is bound to)144 372 Q F1(M\255#)2.5 E F0(in emacs mode and to)2.5 +E F1(#)2.5 E F0(in vi command mode.)2.5 E F1 +(completion\255display\255width \(-1\))108 384 Q F0 1.453(The number of\ + screen columns used to display possible matches when performing comple\ +tion.)144 396 R .194(The v)144 408 R .193(alue is ignored if it is less\ + than 0 or greater than the terminal screen width.)-.25 F 2.693(Av)5.193 +G .193(alue of 0 will)-2.943 F +(cause matches to be displayed one per line.)144 420 Q(The def)5 E +(ault v)-.1 E(alue is -1.)-.25 E F1(completion\255ignor)108 432 Q +(e\255case \(Off\))-.18 E F0(If set to)144 444 Q F1(On)2.5 E F0 2.5(,r)C +(eadline performs \214lename matching and completion in a case\255insen\ +siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 +(completion\255map\255case \(Off\))108 456 Q F0 .093(If set to)144 468 R +F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E +(e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093 +(yphens \()-.05 F F2<ad>A F0 2.593(\)a)C .094(nd underscores)-2.593 F +(\()144 480 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G(qui)-2.5 E -.25(va)-.25 +G(lent when performing case\255insensiti).25 E .3 -.15(ve \214)-.25 H +(lename matching and completion.).15 E F1(completion\255pr)108 492 Q +(e\214x\255display\255length \(0\))-.18 E F0 .829(The length in charact\ +ers of the common pre\214x of a list of possible completions that is di\ +splayed)144 504 R 1.274(without modi\214cation.)144 516 R 1.274 +(When set to a v)6.274 F 1.274(alue greater than zero, common pre\214x) +-.25 F 1.275(es longer than this)-.15 F -.25(va)144 528 S(lue are repla\ +ced with an ellipsis when displaying possible completions.).25 E F1 +(completion\255query\255items \(100\))108 540 Q F0 .53 +(This determines when the user is queried about vie)144 552 R .529 +(wing the number of possible completions gen-)-.25 F .56(erated by the) +144 564 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F +.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) +-.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 576 R +.783(If the number of possible completions is greater than or equal to \ +the v)5.783 F .782(alue of this)-.25 F -.25(va)144 588 S .237 +(riable, the user is ask).25 F .237(ed whether or not he wishes to vie) +-.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G +.237(re simply listed)-2.737 F(on the terminal.)144 600 Q 2.5(An)5 G +-2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve v)-.25 H +(alue causes readline to ne)-.1 E -.15(ve)-.25 G 2.5(ra).15 G(sk.)-2.5 E +F1(con)108 612 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to) +144 624 R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F +-.15(ve)-.4 G .613(rt characters with the eighth bit set to an ASCII k) +.15 F .912 -.15(ey s)-.1 H .612(equence by).15 F 1.315(stripping the ei\ +ghth bit and pre\214xing it with an escape character \(in ef)144 636 R +1.316(fect, using escape as the)-.25 F F2(meta pr)144 648 Q(e\214x)-.37 +E F0(\).)A F1(disable\255completion \(Off\))108 660 Q F0 .038(If set to) +144 672 R F1(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 +F .038(ord completion.)-.1 F .038 +(Completion characters will be inserted into the)5.038 F(line as if the) +144 684 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 +(.)A F1(editing\255mode \(emacs\))108 696 Q F0 .141 +(Controls whether readline be)144 708 R .141(gins with a set of k)-.15 F +.441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.642 E F0 +(or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode)5.142 E F0 +(can be set to either)144 720 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E +F0(.)A(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(3)197.055 E 0 +Cg EP +%%Page: 4 4 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF(echo\255contr)108 84 Q(ol\255characters \(On\))-.18 E +F0 1.211(When set to)144 96 R F1(On)3.711 E F0 3.711(,o)C 3.711(no) +-3.711 G 1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 +G 1.21(upport it, readline echoes a character)-3.711 F +(corresponding to a signal generated from the k)144 108 Q -.15(ey)-.1 G +(board.).15 E F1(enable\255k)108 120 Q(eypad \(Off\))-.1 E F0 .892 +(When set to)144 132 R F1(On)3.393 E F0 3.393(,r)C .893 +(eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G +.893(pad when it is called.).15 F .893(Some sys-)5.893 F +(tems need this to enable the arro)144 144 Q 2.5(wk)-.25 G -.15(ey)-2.6 +G(s.).15 E F1(enable\255meta\255k)108 156 Q(ey \(On\))-.1 E F0 .64 +(When set to)144 168 R F1(On)3.14 E F0 3.14(,r)C .64 +(eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 +(eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 +(he terminal claims to support).15 F(when it is called.)144 180 Q +(On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H +2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 +(expand\255tilde \(Off\))108 192 Q F0(If set to)144 204 Q F1(On)2.5 E F0 +2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) +-.15 E(ord completion.)-.1 E F1(history\255pr)108 216 Q(eser)-.18 E -.1 +(ve)-.1 G(\255point \(Off\)).1 E F0 1.338(If set to)144 228 R F1(On) +3.838 E F0 3.838(,t)C 1.338(he history code attempts to place point at \ +the same location on each history line)-3.838 F(retrie)144 240 Q -.15 +(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G +(ious-history).15 E F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1 +(history\255size \(0\))108 252 Q F0 .463 +(Set the maximum number of history entries sa)144 264 R -.15(ve)-.2 G +2.963(di).15 G 2.963(nt)-2.963 G .463(he history list.)-2.963 F .462 +(If set to zero, the number of)5.463 F +(entries in the history list is not limited.)144 276 Q F1 +(horizontal\255scr)108 288 Q(oll\255mode \(Off\))-.18 E F0 .448 +(When set to)144 300 R F1(On)2.948 E F0 2.948(,m)C(ak)-2.948 E .448 +(es readline use a single line for display)-.1 F 2.948(,s)-.65 G .449 +(crolling the input horizontally on a)-2.948 F 1.194(single screen line\ + when it becomes longer than the screen width rather than wrapping to a\ + ne)144 312 R(w)-.25 E(line.)144 324 Q F1(input\255meta \(Off\))108 336 +Q F0 .367(If set to)144 348 R F1(On)2.867 E F0 2.867(,r)C .367(eadline \ +will enable eight-bit input \(that is, it will not clear the eighth bit\ + in the char)-2.867 F(-)-.2 E .957(acters it reads\), re)144 360 R -.05 +(ga)-.15 G .956(rdless of what the terminal claims it can support.).05 F +.956(The name)5.956 F F1(meta\255\215ag)3.456 E F0 .956(is a)3.456 F +(synon)144 372 Q(ym for this v)-.15 E(ariable.)-.25 E F1(isear)108 384 Q +(ch\255terminators \(`)-.18 E(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439 +(The string of characters that should terminate an incremental search w\ +ithout subsequently e)144 396 R -.15(xe)-.15 G(cut-).15 E .935 +(ing the character as a command.)144 408 R .935(If this v)5.935 F .935 +(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934 +(alue, the characters)-3.684 F/F2 10/Times-Italic@0 SF(ESC)3.434 E F0 +(and)144 420 Q F2(C\255J)2.5 E F0(will terminate an incremental search.) +2.5 E F1 -.1(ke)108 432 S(ymap \(emacs\)).1 E F0 2.323 +(Set the current readline k)144 444 R -.15(ey)-.1 G 4.823(map. The).15 F +2.323(set of le)4.823 F -.05(ga)-.15 G 4.823(lk).05 G -.15(ey)-4.923 G +2.323(map names is).15 F F2 2.324(emacs, emacs-standar)4.823 F(d,)-.37 E +.809(emacs-meta, emacs-ctlx, vi, vi-mo)144 456 R(ve)-.1 E 3.308(,v)-.1 G +(i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.) +.68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .808(lent to) +.25 F F2(vi-command)3.308 E F0(;)A F2(emacs)144 468 Q F0 .697(is equi) +3.196 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d) +-.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697 +(alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F +.697(alue of)-.25 F F1(editing\255mode)3.197 E F0(also af)144 480 Q +(fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 +(mark\255dir)108 492 Q(ectories \(On\))-.18 E F0(If set to)144 504 Q F1 +(On)2.5 E F0 2.5(,c)C(ompleted directory names ha)-2.5 E .3 -.15(ve a s) +-.2 H(lash appended.).15 E F1(mark\255modi\214ed\255lines \(Off\))108 +516 Q F0(If set to)144 528 Q F1(On)2.5 E F0 2.5(,h)C +(istory lines that ha)-2.5 E .3 -.15(ve b)-.2 H +(een modi\214ed are displayed with a preceding asterisk \().15 E F1(*)A +F0(\).)A F1(mark\255symlink)108 540 Q(ed\255dir)-.1 E(ectories \(Off\)) +-.18 E F0 .175(If set to)144 552 R F1(On)2.675 E F0 2.675(,c)C .175 +(ompleted names which are symbolic links to directories ha)-2.675 F .475 +-.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 564 +Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1 +(match\255hidden\255\214les \(On\))108 576 Q F0 .192(This v)144 588 R +.192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C .192 +(auses readline to match \214les whose names be)-2.692 F .193 +(gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457 +(\214les\) when performing \214lename completion.)144 600 R .456 +(If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.) +-2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F +(user in the \214lename to be completed.)144 612 Q F1 +(menu\255complete\255display\255pr)108 624 Q(e\214x \(Off\))-.18 E F0 +1.585(If set to)144 636 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\ +ion displays the common pre\214x of the list of possible completions) +-4.085 F(\(which may be empty\) before c)144 648 Q +(ycling through the list.)-.15 E F1(output\255meta \(Off\))108 660 Q F0 +.507(If set to)144 672 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \ +display characters with the eighth bit set directly rather than as a me\ +ta-)-3.007 F(pre\214x)144 684 Q(ed escape sequence.)-.15 E F1 +(page\255completions \(On\))108 696 Q F0 .808(If set to)144 708 R F1(On) +3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F2(mor) +3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 +(ager to display a screenful of possible comple-)-3.308 F +(tions at a time.)144 720 Q(GNU Readline 6.2)72 768 Q(2010 August 28) +127.345 E(4)197.055 E 0 Cg EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF(print\255completions\255horizontally \(Off\))108 84 Q +F0 1.319(If set to)144 96 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline w\ +ill display completions with matches sorted horizontally in alphabetica\ +l)-3.819 F(order)144 108 Q 2.5(,r)-.4 G(ather than do)-2.5 E +(wn the screen.)-.25 E F1 -2.29 -.18(re v)108 120 T +(ert\255all\255at\255newline \(Off\)).08 E F0 .698(If set to)144 132 R +F1(On)3.198 E F0 3.198(,r)C .699 +(eadline will undo all changes to history lines before returning when) +-3.198 F F1(accept\255line)3.199 E F0(is)3.199 E -.15(exe)144 144 S +2.686(cuted. By).15 F(def)2.686 E .186 +(ault, history lines may be modi\214ed and retain indi)-.1 F .186 +(vidual undo lists across calls to)-.25 F F1 -.18(re)144 156 S(adline) +.18 E F0(.)A F1(sho)108 168 Q(w\255all\255if\255ambiguous \(Off\))-.1 E +F0 .303(This alters the def)144 180 R .303(ault beha)-.1 F .304 +(vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On) +2.804 E F0 2.804(,w)C .304(ords which ha)-2.904 F .604 -.15(ve m)-.2 H +(ore).15 E 1.264(than one possible completion cause the matches to be l\ +isted immediately instead of ringing the)144 192 R(bell.)144 204 Q F1 +(sho)108 216 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.345 +(This alters the def)144 228 R 5.345(ault beha)-.1 F 5.345 +(vior of the completion functions in a f)-.2 F 5.346(ashion similar to) +-.1 F F1(sho)144 240 Q(w\255all\255if\255ambiguous)-.1 E F0 6.691(.I)C +4.191(fs)-6.691 G 1.691(et to)-4.191 F F1(On)4.191 E F0 4.191(,w)C 1.691 +(ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 +(ore than one possible completion).15 F 1.039(without an)144 252 R 3.539 +(yp)-.15 G 1.039 +(ossible partial completion \(the possible completions don')-3.539 F +3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ +s to be listed immediately instead of ringing the bell.)144 264 Q F1 +(skip\255completed\255text \(Off\))108 276 Q F0 .095(If set to)144 288 R +F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095 +(ault completion beha)-.1 F .094 +(vior when inserting a single match into the line.)-.2 F(It')144 300 Q +2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046 +(hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1 +F .046(enabled, readline does not)2.546 F 1.394(insert characters from \ +the completion that match characters after point in the w)144 312 R +1.394(ord being com-)-.1 F(pleted, so portions of the w)144 324 Q +(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1 +(visible\255stats \(Off\))108 336 Q F0 .846(If set to)144 348 R F1(On) +3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 +(st)-.55 G .846(ype as reported by)-3.346 F/F2 10/Times-Italic@0 SF +(stat)3.346 E F0 .846(\(2\) is appended to the \214lename)B +(when listing possible completions.)144 360 Q F1(Conditional Constructs) +87 376.8 Q F0 .05(Readline implements a f)108 388.8 R .05(acility simil\ +ar in spirit to the conditional compilation features of the C preproces\ +sor)-.1 F .096(which allo)108 400.8 R .096(ws k)-.25 F .396 -.15(ey b) +-.1 H .096(indings and v).15 F .096 +(ariable settings to be performed as the result of tests.)-.25 F .097 +(There are four parser)5.096 F(directi)108 412.8 Q -.15(ve)-.25 G 2.5 +(su).15 G(sed.)-2.5 E F1($if)108 429.6 Q F0(The)24.89 E F1($if)2.963 E +F0 .463(construct allo)2.963 F .462(ws bindings to be made based on the\ + editing mode, the terminal being used,)-.25 F .477 +(or the application using readline.)144 441.6 R .477(The te)5.477 F .477 +(xt of the test e)-.15 F .477 +(xtends to the end of the line; no characters)-.15 F +(are required to isolate it.)144 453.6 Q F1(mode)144 470.4 Q F0(The) +12.67 E F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0 +(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 +(sed to test whether readline is in emacs or vi)-3.711 F 3.065 +(mode. This)180 482.4 R .565(may be used in conjunction with the)3.065 F +F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) +3.065 F .03(set bindings in the)180 494.4 R F2(emacs-standar)2.529 E(d) +-.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029 +(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 506.4 +Q F1(term)144 523.2 Q F0(The)15.46 E F1(term=)3.196 E F0 .696 +(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 +(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 535.2 R +.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 +(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 +(wo)3.154 G .654(rd on the right side of).1 F(the)180 547.2 Q F1(=)3.003 +E F0 .503(is tested ag)3.003 F .504(ainst the full name of the terminal\ + and the portion of the terminal name)-.05 F(before the \214rst)180 +559.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.84 E F0 +(to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.5 E F0 +2.5(,f).77 G(or instance.)-2.5 E F1(application)144 576 Q F0(The)180 588 +Q F1(application)3.003 E F0 .503 +(construct is used to include application-speci\214c settings.)3.003 F +.503(Each program)5.503 F .114(using the readline library sets the)180 +600 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 +(nd an initialization \214le can test for a)-2.614 F .501(particular v) +180 612 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F +.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F +.396(ci\214c program.)180 624 R -.15(Fo)5.396 G 2.896(ri).15 G .396 +(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 +(ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 636 Q +(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 660 Q F0 +(Bash)2.5 E 2.5(#Q)180 672 S(uote the current or pre)-2.5 E(vious w)-.25 +E(ord)-.1 E("\\C-xq": "\\eb\\"\\ef\\"")180 684 Q F1($endif)180 696 Q +($endif)108 712.8 Q F0(This command, as seen in the pre)9.33 E(vious e) +-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E +(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(5)197.055 E 0 Cg EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF($else)108 84 Q F0(Commands in this branch of the)15.45 +E F1($if)2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe) +-.15 G(cuted if the test f).15 E(ails.)-.1 E F1($include)108 100.8 Q F0 +.357(This directi)144 112.8 R .657 -.15(ve t)-.25 H(ak).15 E .357 +(es a single \214lename as an ar)-.1 F .356 +(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) +144 124.8 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 +-.15(ve w)-.25 H(ould read).05 E/F2 10/Times-Italic@0 SF(/etc/inputr)2.5 +E(c)-.37 E F0(:)A F1($include)144 148.8 Q F2(/etc/inputr)5.833 E(c)-.37 +E/F3 10.95/Times-Bold@0 SF(SEARCHING)72 165.6 Q F0 1.003(Readline pro) +108 177.6 R 1.003(vides commands for searching through the command hist\ +ory for lines containing a speci\214ed)-.15 F 2.5(string. There)108 +189.6 R(are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E +(emental)-.37 E F0(and)3.01 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 +E .698(Incremental searches be)108 206.4 R .698 +(gin before the user has \214nished typing the search string.)-.15 F +.697(As each character of the)5.697 F .112 +(search string is typed, readline displays the ne)108 218.4 R .112 +(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 +E 5.113(.A)-.55 G(n)-5.113 E .545 +(incremental search requires only as man)108 230.4 R 3.045(yc)-.15 G +.544(haracters as needed to \214nd the desired history entry)-3.045 F +5.544(.T)-.65 G 3.044(os)-6.344 G(earch)-3.044 E(backw)108 242.4 Q .18 +(ard in the history for a particular string, type)-.1 F F1(C\255r)2.681 +E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.681 E F0 .181(searches forw) +2.681 F .181(ard through the history)-.1 F(.)-.65 E .354 +(The characters present in the v)108 254.4 R .354(alue of the)-.25 F F1 +(isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354 +(riable are used to terminate an incremen-).25 F .6(tal search.)108 +266.4 R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F +.6(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6 +(characters will terminate an)3.1 F .123(incremental search.)108 278.4 R +F1(C\255G)5.123 E F0 .123 +(will abort an incremental search and restore the original line.)2.623 F +.122(When the search is)5.122 F(terminated, the history entry containin\ +g the search string becomes the current line.)108 290.4 Q 2.406 -.8 +(To \214)108 307.2 T .806 +(nd other matching entries in the history list, type).8 F F1(C\255s) +3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F +.807(This will search back-)5.806 F -.1(wa)108 319.2 S 1.309(rd or forw) +.1 F 1.309(ard in the history for the ne)-.1 F 1.309 +(xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A) +-.55 G 1.609 -.15(ny o)-6.309 H 1.308(ther k).15 F -.15(ey)-.1 G .317 +(sequence bound to a readline command will terminate the search and e) +108 331.2 R -.15(xe)-.15 G .318(cute that command.).15 F -.15(Fo)5.318 G +2.818(ri).15 G(nstance,)-2.818 E 3.481(an)108 343.2 S -.25(ew)-3.481 G +.981(line will terminate the search and accept the line, thereby e).25 F +-.15(xe)-.15 G .98(cuting the command from the history).15 F 3.061 +(list. A)108 355.2 R(mo)3.061 E -.15(ve)-.15 G .562 +(ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562 +(he last line found the current line, and be)-3.062 F(gin)-.15 E +(editing.)108 367.2 Q .567(Non-incremental searches read the entire sea\ +rch string before starting to search for matching history lines.)108 384 +R(The search string may be typed by the user or be part of the contents\ + of the current line.)108 396 Q F3(EDITING COMMANDS)72 412.8 Q F0 1.391 +(The follo)108 424.8 R 1.391 +(wing is a list of the names of the commands and the def)-.25 F 1.391 +(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F +3.892(ya)-.15 G(re)-3.892 E 2.5(bound. Command)108 436.8 R +(names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H +(equence are unbound by def).15 E(ault.)-.1 E .055(In the follo)108 +453.6 R .055(wing descriptions,)-.25 F F2(point)2.555 E F0 .055 +(refers to the current cursor position, and)2.555 F F2(mark)2.555 E F0 +.054(refers to a cursor position)2.554 F(sa)108 465.6 Q -.15(ve)-.2 G +2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5 +(command. The)2.5 F(te)2.5 E +(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) +2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 482.4 Q(or Mo)-.25 E(ving)-.1 +E(beginning\255of\255line \(C\255a\))108 494.4 Q F0(Mo)144 506.4 Q .3 +-.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 +(end\255of\255line \(C\255e\))108 518.4 Q F0(Mo)144 530.4 Q .3 -.15 +(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 +542.4 S(rward\255char \(C\255f\)).25 E F0(Mo)144 554.4 Q .3 -.15(ve f) +-.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 +(backward\255char \(C\255b\))108 566.4 Q F0(Mo)144 578.4 Q .3 -.15(ve b) +-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 590.4 S(rward\255w) +.25 E(ord \(M\255f\))-.1 E F0(Mo)144 602.4 Q .822 -.15(ve f)-.15 H(orw) +.15 E .522(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W) +-.1 F .523(ords are composed of alphanumeric characters \(let-)-.8 F +(ters and digits\).)144 614.4 Q F1(backward\255w)108 626.4 Q +(ord \(M\255b\))-.1 E F0(Mo)144 638.4 Q 1.71 -.15(ve b)-.15 H 1.41 +(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 +(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F +(characters \(letters and digits\).)144 650.4 Q F1(clear\255scr)108 +662.4 Q(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 674.4 R +.993(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 +G .993(th an ar).4 F .993(gument, refresh the)-.18 F +(current line without clearing the screen.)144 686.4 Q F1 -.18(re)108 +698.4 S(draw\255curr).18 E(ent\255line)-.18 E F0 +(Refresh the current line.)144 710.4 Q(GNU Readline 6.2)72 768 Q +(2010 August 28)127.345 E(6)197.055 E 0 Cg EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF(Commands f)87 84 Q(or Manipulating the History)-.25 E +(accept\255line \(Newline, Retur)108 96 Q(n\))-.15 E F0 .365 +(Accept the line re)144 108 R -.05(ga)-.15 G .364 +(rdless of where the cursor is.).05 F .364(If this line is non-empty) +5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .364(ay be added to the)-2.864 +F .74(history list for future recall with)144 120 R F1(add_history\(\)) +3.24 E F0 5.741(.I)C 3.241(ft)-5.741 G .741 +(he line is a modi\214ed history line, the history)-3.241 F +(line is restored to its original state.)144 132 Q F1(pr)108 144 Q -.15 +(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144 156 Q +(vious command from the history list, mo)-.25 E(ving back in the list.) +-.15 E F1(next\255history \(C\255n\))108 168 Q F0(Fetch the ne)144 180 Q +(xt command from the history list, mo)-.15 E(ving forw)-.15 E +(ard in the list.)-.1 E F1(beginning\255of\255history \(M\255<\))108 192 +Q F0(Mo)144 204 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G +(he \214rst line in the history)-2.5 E(.)-.65 E F1 +(end\255of\255history \(M\255>\))108 216 Q F0(Mo)144 228 Q .3 -.15(ve t) +-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 G +(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108 +240 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.471 +(Search backw)144 252 R 1.471(ard starting at the current line and mo) +-.1 F 1.47(ving `up' through the history as necessary)-.15 F(.)-.65 E +(This is an incremental search.)144 264 Q F1 -.25(fo)108 276 S +(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131 +(Search forw)144 288 R 1.131(ard starting at the current line and mo)-.1 +F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary)-.25 +F(.)-.65 E(This is an incremental search.)144 300 Q F1(non\255incr)108 +312 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E +(ch\255history \(M\255p\))-.18 E F0 .165(Search backw)144 324 R .164(ar\ +d through the history starting at the current line using a non-incremen\ +tal search for)-.1 F 2.5(as)144 336 S(tring supplied by the user)-2.5 E +(.)-.55 E F1(non\255incr)108 348 Q(emental\255f)-.18 E(orward\255sear) +-.25 E(ch\255history \(M\255n\))-.18 E F0 1.353(Search forw)144 360 R +1.354(ard through the history using a non-incremental search for a stri\ +ng supplied by the)-.1 F(user)144 372 Q(.)-.55 E F1(history\255sear)108 +384 Q(ch\255f)-.18 E(orward)-.25 E F0 .249(Search forw)144 396 R .249(a\ +rd through the history for the string of characters between the start o\ +f the current line)-.1 F(and the current cursor position \(the)144 408 Q +/F2 10/Times-Italic@0 SF(point)2.5 E F0 2.5(\). This)B +(is a non-incremental search.)2.5 E F1(history\255sear)108 420 Q +(ch\255backward)-.18 E F0 .95(Search backw)144 432 R .951(ard through t\ +he history for the string of characters between the start of the curren\ +t)-.1 F(line and the point.)144 444 Q(This is a non-incremental search.) +5 E F1(yank\255nth\255ar)108 456 Q 2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 +.622(Insert the \214rst ar)144 468 R .622(gument to the pre)-.18 F .622 +(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F +.622(vious line\))-.25 F .794(at point.)144 480 R -.4(Wi)5.794 G .794 +(th an ar).4 F(gument)-.18 E F2(n)3.294 E F0 3.294(,i).24 G .794 +(nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794(ord from the pre) +-.1 F .794(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144 +492 Q .292(vious command be)-.25 F .292(gin with w)-.15 F .291(ord 0\).) +-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 -.15(ve a) +-.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E F0 .291 +(th w)B .291(ord from the end of)-.1 F .281(the pre)144 504 R .281 +(vious command.)-.25 F .281(Once the ar)5.281 F(gument)-.18 E F2(n)2.781 +E F0 .281(is computed, the ar)2.781 F .281(gument is e)-.18 F .282 +(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 516 Q +(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 528 Q +2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.308 +(Insert the last ar)144 540 R 1.308(gument to the pre)-.18 F 1.307 +(vious command \(the last w)-.25 F 1.307(ord of the pre)-.1 F 1.307 +(vious history entry\).)-.25 F -.4(Wi)144 552 S .203(th a numeric ar).4 +F .203(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) +-.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.204(.S)C(uccessi)-5.204 +E .504 -.15(ve c)-.25 H .204(alls to).15 F F1(yank\255last\255ar)2.704 E +(g)-.1 E F0(mo)144 564 Q .807 -.15(ve b)-.15 H .507 +(ack through the history list, inserting the last w).15 F .507 +(ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E +1.396(to the \214rst call\) of each line in turn.)144 576 R(An)6.396 E +3.896(yn)-.15 G 1.396(umeric ar)-3.896 F 1.397 +(gument supplied to these successi)-.18 F 1.697 -.15(ve c)-.25 H(alls) +.15 E .492(determines the direction to mo)144 588 R .792 -.15(ve t)-.15 +H .492(hrough the history).15 F 5.491(.A)-.65 G(ne)-2.5 E -.05(ga)-.15 G +(ti).05 E .791 -.15(ve a)-.25 H -.18(rg).15 G .491 +(ument switches the direction).18 F .494 +(through the history \(back or forw)144 600 R 2.994(ard\). The)-.1 F +.494(history e)2.994 F .494(xpansion f)-.15 F .494 +(acilities are used to e)-.1 F .494(xtract the last)-.15 F(ar)144 612 Q +(gument, as if the "!$" history e)-.18 E(xpansion had been speci\214ed.) +-.15 E F1(Commands f)87 628.8 Q(or Changing T)-.25 E(ext)-.92 E +(delete\255char \(C\255d\))108 640.8 Q F0 .358 +(Delete the character at point.)144 652.8 R .358(If point is at the be) +5.358 F .358(ginning of the line, there are no characters in the)-.15 F +(line, and the last character typed w)144 664.8 Q(as not bound to)-.1 E +F1(delete\255char)2.5 E F0 2.5(,t)C(hen return)-2.5 E/F3 9/Times-Bold@0 +SF(EOF)2.5 E/F4 9/Times-Roman@0 SF(.)A F1 +(backward\255delete\255char \(Rubout\))108 676.8 Q F0 .552 +(Delete the character behind the cursor)144 688.8 R 5.553(.W)-.55 G .553 +(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F +.553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553(he deleted te).15 F +.553(xt on)-.15 F(the kill ring.)144 700.8 Q(GNU Readline 6.2)72 768 Q +(2010 August 28)127.345 E(7)197.055 E 0 Cg EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF -.25(fo)108 84 S(rward\255backward\255delete\255char) +.25 E F0 .474(Delete the character under the cursor)144 96 R 2.974(,u) +-.4 G .474 +(nless the cursor is at the end of the line, in which case the)-2.974 F +(character behind the cursor is deleted.)144 108 Q F1 +(quoted\255insert \(C\255q, C\255v\))108 120 Q F0 1.228(Add the ne)144 +132 R 1.228(xt character that you type to the line v)-.15 F 3.728 +(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.729(wt)-.25 G 3.729(oi) +-3.729 G 1.229(nsert characters lik)-3.729 F(e)-.1 E F1(C\255q)144 144 Q +F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 156 Q +(AB\))-.9 E F0(Insert a tab character)144 168 Q(.)-.55 E F1 +(self\255insert \(a, b, A, 1, !, ...\))108 180 Q F0 +(Insert the character typed.)144 192 Q F1(transpose\255chars \(C\255t\)) +108 204 Q F0 .322(Drag the character before point forw)144 216 R .321 +(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321 +(he character at point, mo)-2.821 F .321(ving point forw)-.15 F .321 +(ard as well.)-.1 F 1.182 +(If point is at the end of the line, then this transposes the tw)144 228 +R 3.683(oc)-.1 G 1.183(haracters before point.)-3.683 F(Ne)6.183 E -.05 +(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 240 Q(guments ha)-.18 E .3 +-.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 +(transpose\255w)108 252 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 +264 R .024(ord before point past the w)-.1 F .023(ord after point, mo) +-.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.523(rt).15 G .023(hat w) +-2.523 F .023(ord as well.)-.1 F .023(If point)5.023 F +(is at the end of the line, this transposes the last tw)144 276 Q 2.5 +(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 288 Q +(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 300 +R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 1.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699 +(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 312 S(rd, b).1 E +(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 324 Q +(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 336 Q 1.648 +(wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148 +(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15 +(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre) +-.25 F(vious)-.25 E -.1(wo)144 348 S(rd, b).1 E(ut do not mo)-.2 E .3 +-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 360 Q +(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 372 +R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) +-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.975 +(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 384 S(rd, b).1 +E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 396 +S(rwrite\255mode).1 E F0 -.8(To)144 408 S .438(ggle o).8 F -.15(ve)-.15 +G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e).4 F .438 +(xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15 F .437 +(gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15 F -.4 +(Wi)144 420 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 -.15 +(ve n)-.25 H .781(umeric ar).15 F .781(gument, switches to insert mode.) +-.18 F .781(This command af)5.781 F(fects)-.25 E(only)144 432 Q F1 +(emacs)4.395 E F0(mode;)4.395 E F1(vi)4.395 E F0 1.894(mode does o)4.395 +F -.15(ve)-.15 G 1.894(rwrite dif).15 F(ferently)-.25 E 6.894(.E)-.65 G +1.894(ach call to)-6.894 F/F2 10/Times-Italic@0 SF -.37(re)4.394 G +(adline\(\)).37 E F0 1.894(starts in insert)4.394 F 3.968(mode. In)144 +444 R -.15(ove)3.968 G 1.468(rwrite mode, characters bound to).15 F F1 +(self\255insert)3.969 E F0 1.469(replace the te)3.969 F 1.469 +(xt at point rather than)-.15 F .958(pushing the te)144 456 R .958 +(xt to the right.)-.15 F .957(Characters bound to)5.958 F F1 +(backward\255delete\255char)3.457 E F0 .957(replace the character)3.457 +F(before point with a space.)144 468 Q(By def)5 E +(ault, this command is unbound.)-.1 E F1(Killing and Y)87 484.8 Q +(anking)-.85 E(kill\255line \(C\255k\))108 496.8 Q F0(Kill the te)144 +508.8 Q(xt from point to the end of the line.)-.15 E F1 +(backward\255kill\255line \(C\255x Rubout\))108 520.8 Q F0(Kill backw) +144 532.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 +(unix\255line\255discard \(C\255u\))108 544.8 Q F0(Kill backw)144 556.8 +Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E +(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) +-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 568.8 Q F0 +(Kill all characters on the current line, no matter where point is.)144 +580.8 Q F1(kill\255w)108 592.8 Q(ord \(M\255d\))-.1 E F0 1.308 +(Kill from point the end of the current w)144 604.8 R 1.308 +(ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.308 +(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 616.8 S +(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G +(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 628.8 Q +(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 640.8 Q(ord behind point.) +-.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 +(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(unix\255w)108 652.8 Q +(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 664.8 R .365 +(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1 +F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 +(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144 +676.8 Q F1(unix\255\214lename\255rubout)108 688.8 Q F0 .166(Kill the w) +144 700.8 R .166 +(ord behind point, using white space and the slash character as the w) +-.1 F .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 712.8 Q +(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) +-2.5 E(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(8)197.055 E 0 +Cg EP +%%Page: 9 9 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF(delete\255horizontal\255space \(M\255\\\))108 84 Q F0 +(Delete all spaces and tabs around point.)144 96 Q F1(kill\255r)108 108 +Q(egion)-.18 E F0 1.13(Kill the te)144 120 R 1.13 +(xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0 +(\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F +1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144 +132 S(gion)-.03 E F0(.)A F1(copy\255r)108 144 Q(egion\255as\255kill)-.18 +E F0(Cop)144 156 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E +(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 +(copy\255backward\255w)108 168 Q(ord)-.1 E F0(Cop)144 180 Q 4.8(yt)-.1 G +2.3(he w)-4.8 F 2.3(ord before point to the kill b)-.1 F(uf)-.2 E(fer) +-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.301 +(ord boundaries are the same as)-.1 F F1(back-)4.801 E(ward\255w)144 192 +Q(ord)-.1 E F0(.)A F1(copy\255f)108 204 Q(orward\255w)-.25 E(ord)-.1 E +F0(Cop)144 216 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1 +F 2.008(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.007(.T) +-.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F1 +-.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 228 Q(ord)-.1 E F0(.)A F1 +(yank \(C\255y\))108 240 Q F0 -1(Ya)144 252 S +(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 +E F1(yank\255pop \(M\255y\))108 264 Q F0 +(Rotate the kill ring, and yank the ne)144 276 Q 2.5(wt)-.25 G 2.5 +(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E +F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 292.8 Q +(guments)-.1 E(digit\255ar)108 304.8 Q +(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .641 +(Add this digit to the ar)144 316.8 R .641 +(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18 +(rg)-3.141 G 3.142(ument. M\255\255).18 F .642(starts a ne)3.142 F(g-) +-.15 E(ati)144 328.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1 +(uni)108 340.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .779 +(This is another w)144 352.8 R .779(ay to specify an ar)-.1 F 3.279 +(gument. If)-.18 F .779(this command is follo)3.279 F .778 +(wed by one or more digits,)-.25 F 1.376 +(optionally with a leading minus sign, those digits de\214ne the ar)144 +364.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 +376.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) +3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 +(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) +-.2 F(-)-.2 E .898(wise ignored.)144 388.8 R .898 +(As a special case, if this command is immediately follo)5.898 F .898 +(wed by a character that is)-.25 F .243 +(neither a digit or minus sign, the ar)144 400.8 R .243 +(gument count for the ne)-.18 F .243(xt command is multiplied by four) +-.15 F 5.242(.T)-.55 G(he)-5.242 E(ar)144 412.8 Q .378 +(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 +(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F +.378(gument count)-.18 F(four)144 424.8 Q 2.5(,as)-.4 G(econd time mak) +-2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 +(Completing)87 441.6 Q(complete \(T)108 453.6 Q(AB\))-.9 E F0 1.909 +(Attempt to perform completion on the te)144 465.6 R 1.908 +(xt before point.)-.15 F 1.908(The actual completion performed is)6.908 +F(application-speci\214c.)144 477.6 Q F1(Bash)5.517 E F0 3.017(,f)C .518 +(or instance, attempts completion treating the te)-3.017 F .518 +(xt as a v)-.15 F .518(ariable \(if the)-.25 F(te)144 489.6 Q .657 +(xt be)-.15 F .657(gins with)-.15 F F1($)3.156 E F0 .656 +(\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1 +(~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656 +(gins with)-.15 F F1(@)3.156 E F0 .656(\), or)B .929 +(command \(including aliases and functions\) in turn.)144 501.6 R .93 +(If none of these produces a match, \214lename)5.929 F 1.274 +(completion is attempted.)144 513.6 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773 +(nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273 +(ws completion of program functions and)-.25 F -.25(va)144 525.6 S(riab\ +les, and only attempts \214lename completion under certain circumstance\ +s.).25 E F1(possible\255completions \(M\255?\))108 537.6 Q F0 .261 +(List the possible completions of the te)144 549.6 R .262 +(xt before point.)-.15 F .262 +(When displaying completions, readline sets)5.262 F 1.002 +(the number of columns used for display to the v)144 561.6 R 1.002 +(alue of)-.25 F F1(completion-display-width)3.502 E F0 3.502(,t)C 1.002 +(he v)-3.502 F 1.002(alue of)-.25 F(the en)144 573.6 Q(vironment v)-.4 E +(ariable)-.25 E/F3 9/Times-Bold@0 SF(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF +(,)A F0(or the screen width, in that order)2.25 E(.)-.55 E F1 +(insert\255completions \(M\255*\))108 585.6 Q F0 .783 +(Insert all completions of the te)144 597.6 R .783 +(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H +.783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144 +609.6 Q F0(.)A F1(menu\255complete)108 621.6 Q F0 .929(Similar to)144 +633.6 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629 +F .929(ord to be completed with a single match from the list of)-.1 F +1.193(possible completions.)144 645.6 R 1.193(Repeated e)6.193 F -.15 +(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194 +(steps through the list of possible)3.694 F .829 +(completions, inserting each match in turn.)144 657.6 R .828 +(At the end of the list of completions, the bell is rung)5.828 F .727 +(\(subject to the setting of)144 669.6 R F1(bell\255style)3.227 E F0 +3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F +.727(An ar)5.727 F .727(gument of)-.18 F F2(n)3.227 E F0(mo)3.227 E -.15 +(ve)-.15 G(s).15 E F2(n)3.228 E F0 1.73(positions forw)144 681.6 R 1.73 +(ard in the list of matches; a ne)-.1 F -.05(ga)-.15 G(ti).05 E 2.03 +-.15(ve a)-.25 H -.18(rg).15 G 1.73(ument may be used to mo).18 F 2.03 +-.15(ve b)-.15 H(ackw).15 E(ard)-.1 E(through the list.)144 693.6 Q +(This command is intended to be bound to)5 E F1 -.9(TA)2.5 G(B).9 E F0 +2.5(,b)C(ut is unbound by def)-2.7 E(ault.)-.1 E F1 +(menu\255complete\255backward)108 705.6 Q F0 .82(Identical to)144 717.6 +R F1(menu\255complete)3.32 E F0 3.32(,b)C .82(ut mo)-3.52 F -.15(ve)-.15 +G 3.32(sb).15 G(ackw)-3.32 E .82 +(ard through the list of possible completions, as if)-.1 F F1 +(menu\255complete)144 729.6 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5 +(nan).15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg) +.15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E +(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(9)197.055 E 0 Cg EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Bold@0 SF(delete\255char\255or\255list)108 84 Q F0 .374 +(Deletes the character under the cursor if not at the be)144 96 R .373 +(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char)2.873 E +F0(\).)A(If at the end of the line, beha)144 108 Q -.15(ve)-.2 G 2.5(si) +.15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A F1 -.25 +(Ke)87 124.8 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)108 +136.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 148.8 Q +(gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15 +(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 160.8 Q 2.5(o\() +-.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 172.8 Q +(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G +(board macro and store the de\214nition.).15 E F1 +(call\255last\255kbd\255macr)108 184.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 +E F0(Re-e)144 196.8 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey) +-.1 G .999(board macro de\214ned, by making the characters in the macro\ + appear as if).15 F(typed at the k)144 208.8 Q -.15(ey)-.1 G(board.).15 +E F1(Miscellaneous)87 225.6 Q -.18(re)108 237.6 S<ad72>.18 E +(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777 +(Read in the contents of the)144 249.6 R/F2 10/Times-Italic@0 SF(inputr) +4.277 E(c)-.37 E F0 1.776(\214le, and incorporate an)4.276 F 4.276(yb) +-.15 G 1.776(indings or v)-4.276 F 1.776(ariable assignments)-.25 F +(found there.)144 261.6 Q F1(abort \(C\255g\))108 273.6 Q F0 3.248 +(Abort the current editing command and ring the terminal')144 285.6 R +5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1 +(bell\255style)144 297.6 Q F0(\).)A F1(do\255upper)108 309.6 Q +(case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.) +C(..\))-2.5 E F0 1.756(If the meta\214ed character)144 321.6 R F2(x) +4.256 E F0 1.755(is lo)4.256 F 1.755 +(wercase, run the command that is bound to the corresponding)-.25 F +(uppercase character)144 333.6 Q(.)-.55 E F1(pr)108 345.6 Q +(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 357.6 Q +(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0 +(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1 +(undo \(C\255_, C\255x C\255u\))108 369.6 Q F0 +(Incremental undo, separately remembered for each line.)144 381.6 Q F1 +-2.29 -.18(re v)108 393.6 T(ert\255line \(M\255r\)).08 E F0 1.095 +(Undo all changes made to this line.)144 405.6 R 1.095(This is lik)6.095 +F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E +F0 1.095(command enough times to)3.595 F +(return the line to its initial state.)144 417.6 Q F1 +(tilde\255expand \(M\255&\))108 429.6 Q F0(Perform tilde e)144 441.6 Q +(xpansion on the current w)-.15 E(ord.)-.1 E F1 +(set\255mark \(C\255@, M\255<space>\))108 453.6 Q F0 +(Set the mark to the point.)144 465.6 Q(If a numeric ar)5 E +(gument is supplied, the mark is set to that position.)-.18 E F1 +(exchange\255point\255and\255mark \(C\255x C\255x\))108 477.6 Q F0(Sw) +144 489.6 Q .283(ap the point with the mark.)-.1 F .283 +(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G +2.782(dp).15 G .282(osition, and the old)-2.782 F(cursor position is sa) +144 501.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 +(character\255sear)108 513.6 Q(ch \(C\255]\))-.18 E F0 3.035(Ac)144 +525.6 S .535(haracter is read and point is mo)-3.035 F -.15(ve)-.15 G +3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 +(xt occurrence of that character)-.15 F 5.536(.A)-.55 G(ne)-2.5 E -.05 +(ga)-.15 G(ti).05 E .836 -.15(ve c)-.25 H(ount).15 E(searches for pre) +144 537.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 549.6 Q +(ch\255backward \(M\255C\255]\))-.18 E F0 3.544(Ac)144 561.6 S 1.044 +(haracter is read and point is mo)-3.544 F -.15(ve)-.15 G 3.544(dt).15 G +3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 +(vious occurrence of that character)-.25 F 6.043(.A)-.55 G(ne)-2.5 E +-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G +(count searches for subsequent occurrences.)144 573.6 Q F1 +(skip\255csi\255sequence)108 585.6 Q F0 1.826 +(Read enough characters to consume a multi-k)144 597.6 R 2.126 -.15 +(ey s)-.1 H 1.827(equence such as those de\214ned for k).15 F -.15(ey) +-.1 G 4.327(sl).15 G(ik)-4.327 E(e)-.1 E .791(Home and End.)144 609.6 R +.791(Such sequences be)5.791 F .791 +(gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F +.331(If this sequence is bound to "\\[", k)144 621.6 R -.15(ey)-.1 G +2.831(sp).15 G .331(roducing such sequences will ha)-2.831 F .632 -.15 +(ve n)-.2 H 2.832(oe).15 G -.25(ff)-2.832 G .332(ect unless e).25 F +(xplic-)-.15 E .026(itly bound to a readline command, instead of insert\ +ing stray characters into the editing b)144 633.6 R(uf)-.2 E(fer)-.25 E +5.026(.T)-.55 G(his)-5.026 E(is unbound by def)144 645.6 Q(ault, b)-.1 E +(ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 +657.6 Q F0 -.4(Wi)144 669.6 S .48(thout a numeric ar).4 F .48 +(gument, the v)-.18 F .481(alue of the readline)-.25 F F1 +(comment\255begin)2.981 E F0 -.25(va)2.981 G .481 +(riable is inserted at the).25 F(be)144 681.6 Q .098 +(ginning of the current line.)-.15 F .098(If a numeric ar)5.098 F .097 +(gument is supplied, this command acts as a toggle:)-.18 F(if)5.097 E +.321(the characters at the be)144 693.6 R .321 +(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 +(comment\255begin)2.821 E F0 2.822(,t)C .322(he v)-2.822 F .322(alue is) +-.25 F 1.014(inserted, otherwise the characters in)144 705.6 R F1 +(comment-begin)3.514 E F0 1.014(are deleted from the be)3.514 F 1.013 +(ginning of the line.)-.15 F 1.468 +(In either case, the line is accepted as if a ne)144 717.6 R 1.468 +(wline had been typed.)-.25 F 1.469(The def)6.469 F 1.469(ault v)-.1 F +1.469(alue of)-.25 F F1(com-)3.969 E(ment\255begin)144 729.6 Q F0(mak) +2.983 E .483(es the current line a shell comment.)-.1 F .483 +(If a numeric ar)5.483 F .482(gument causes the comment)-.18 F +(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(10)192.055 E 0 Cg EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R +(character to be remo)144 84 Q -.15(ve)-.15 G(d, the line will be e).15 +E -.15(xe)-.15 G(cuted by the shell.).15 E/F1 10/Times-Bold@0 SF +(dump\255functions)108 96 Q F0 .626 +(Print all of the functions and their k)144 108 R .926 -.15(ey b)-.1 H +.627(indings to the readline output stream.).15 F .627(If a numeric ar) +5.627 F(gu-)-.18 E +(ment is supplied, the output is formatted in such a w)144 120 Q +(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) +2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 132 Q(ariables)-.1 E F0 +.283(Print all of the settable v)144 144 R .283(ariables and their v) +-.25 F .283(alues to the readline output stream.)-.25 F .283 +(If a numeric ar)5.283 F(gu-)-.18 E +(ment is supplied, the output is formatted in such a w)144 156 Q +(ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0 +(\214le.)2.5 E F1(dump\255macr)108 168 Q(os)-.18 E F0 .592 +(Print all of the readline k)144 180 R .892 -.15(ey s)-.1 H .592 +(equences bound to macros and the strings the).15 F 3.093(yo)-.15 G +3.093(utput. If)-3.093 F 3.093(an)3.093 G(umeric)-3.093 E(ar)144 192 Q +.528(gument is supplied, the output is formatted in such a w)-.18 F .528 +(ay that it can be made part of an)-.1 F F2(inputr)3.027 E(c)-.37 E F0 +(\214le.)144 204 Q F1(emacs\255editing\255mode \(C\255e\))108 216 Q F0 +(When in)144 228 Q F1(vi)2.5 E F0(command mode, this causes a switch to) +2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1 +(vi\255editing\255mode \(M\255C\255j\))108 240 Q F0(When in)144 252 Q F1 +(emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E +F0(editing mode.)2.5 E/F3 10.95/Times-Bold@0 SF(DEF)72 268.8 Q -.548(AU) +-.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .064(The follo) +108 280.8 R .064(wing is a list of the def)-.25 F .064 +(ault emacs and vi bindings.)-.1 F .065 +(Characters with the eighth bit set are written as)5.065 F .527 +(M\255<character>, and are referred to as)108 292.8 R F2(meta\214ed) +3.407 E F0 3.027(characters. The)3.797 F .527 +(printable ASCII characters not mentioned)3.027 F 1.115 +(in the list of emacs standard bindings are bound to the)108 304.8 R F1 +(self\255insert)3.615 E F0 1.116(function, which just inserts the gi) +3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108 +316.8 R .945(In vi insertion mode, all characters not speci\214cally me\ +ntioned are bound to)5.945 F F1(self\255insert)108 328.8 Q F0 5.358(.C)C +.358(haracters assigned to signal generation by)-5.358 F F2(stty)2.859 E +F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s) +.15 H .359(uch as C-Z or C-C,).4 F .188(retain that function.)108 340.8 +R .188(Upper and lo)5.188 F .188(wer case meta\214ed characters are bou\ +nd to the same function in the emacs)-.25 F .304(mode meta k)108 352.8 R +-.15(ey)-.1 G 2.804(map. The).15 F .305(remaining characters are unboun\ +d, which causes readline to ring the bell \(subject)2.804 F +(to the setting of the)108 364.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5 +G(riable\).).25 E F1(Emacs Mode)87 381.6 Q F0(Emacs Standard bindings) +151.2 393.6 Q 2.5("C-@" set-mark)151.2 417.6 R 2.5("C-A" be)151.2 429.6 +R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 441.6 R(ard-char)-.1 E +2.5("C-D" delete-char)151.2 453.6 R 2.5("C-E" end-of-line)151.2 465.6 R +2.5("C-F" forw)151.2 477.6 R(ard-char)-.1 E 2.5("C-G" abort)151.2 489.6 +R 2.5("C-H" backw)151.2 501.6 R(ard-delete-char)-.1 E 2.5 +("C-I" complete)151.2 513.6 R 2.5("C-J" accept-line)151.2 525.6 R 2.5 +("C-K" kill-line)151.2 537.6 R 2.5("C-L" clear)151.2 549.6 R(-screen)-.2 +E 2.5("C-M" accept-line)151.2 561.6 R 2.5("C-N" ne)151.2 573.6 R +(xt-history)-.15 E 2.5("C-P" pre)151.2 585.6 R(vious-history)-.25 E 2.5 +("C-Q" quoted-insert)151.2 597.6 R 2.5("C-R" re)151.2 609.6 R -.15(ve) +-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 621.6 R +(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 633.6 R 2.5 +("C-U" unix-line-discard)151.2 645.6 R 2.5("C-V" quoted-insert)151.2 +657.6 R 2.5("C-W" unix-w)151.2 669.6 R(ord-rubout)-.1 E 2.5("C-Y" yank) +151.2 681.6 R 2.5("C-]" character)151.2 693.6 R(-search)-.2 E 2.5 +("C-_" undo)151.2 705.6 R 3.333("")151.2 717.6 S(to "/")-.833 E +(self-insert)5 E 2.5("0" to)151.2 729.6 R 2.5("9" self-insert)2.5 F +(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(11)192.055 E 0 Cg EP +%%Page: 12 12 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 +(":" to)151.2 84 R 2.5("~" self-insert)2.5 F 2.5("C-?" backw)151.2 96 R +(ard-delete-char)-.1 E(Emacs Meta bindings)151.2 112.8 Q 2.5 +("M-C-G" abort)151.2 136.8 R 2.5("M-C-H" backw)151.2 148.8 R(ard-kill-w) +-.1 E(ord)-.1 E 2.5("M-C-I" tab-insert)151.2 160.8 R 2.5 +("M-C-J" vi-editing-mode)151.2 172.8 R 2.5("M-C-M" vi-editing-mode)151.2 +184.8 R 2.5("M-C-R" re)151.2 196.8 R -.15(ve)-.25 G(rt-line).15 E 2.5 +("M-C-Y" yank-nth-ar)151.2 208.8 R(g)-.18 E 2.5("M-C-[" complete)151.2 +220.8 R 2.5("M-C-]" character)151.2 232.8 R(-search-backw)-.2 E(ard)-.1 +E 2.5("M-space" set-mark)151.2 244.8 R 2.5("M-#" insert-comment)151.2 +256.8 R 2.5("M-&" tilde-e)151.2 268.8 R(xpand)-.15 E 2.5 +("M-*" insert-completions)151.2 280.8 R 2.5("M--" digit-ar)151.2 292.8 R +(gument)-.18 E 2.5("M-." yank-last-ar)151.2 304.8 R(g)-.18 E 2.5 +("M-0" digit-ar)151.2 316.8 R(gument)-.18 E 2.5("M-1" digit-ar)151.2 +328.8 R(gument)-.18 E 2.5("M-2" digit-ar)151.2 340.8 R(gument)-.18 E 2.5 +("M-3" digit-ar)151.2 352.8 R(gument)-.18 E 2.5("M-4" digit-ar)151.2 +364.8 R(gument)-.18 E 2.5("M-5" digit-ar)151.2 376.8 R(gument)-.18 E 2.5 +("M-6" digit-ar)151.2 388.8 R(gument)-.18 E 2.5("M-7" digit-ar)151.2 +400.8 R(gument)-.18 E 2.5("M-8" digit-ar)151.2 412.8 R(gument)-.18 E 2.5 +("M-9" digit-ar)151.2 424.8 R(gument)-.18 E 2.5("M-<" be)151.2 436.8 R +(ginning-of-history)-.15 E 2.5("M-=" possible-completions)151.2 448.8 R +2.5("M->" end-of-history)151.2 460.8 R 2.5("M-?" possible-completions) +151.2 472.8 R 2.5("M-B" backw)151.2 484.8 R(ard-w)-.1 E(ord)-.1 E 2.5 +("M-C" capitalize-w)151.2 496.8 R(ord)-.1 E 2.5("M-D" kill-w)151.2 508.8 +R(ord)-.1 E 2.5("M-F" forw)151.2 520.8 R(ard-w)-.1 E(ord)-.1 E 2.5 +("M-L" do)151.2 532.8 R(wncase-w)-.25 E(ord)-.1 E 2.5 +("M-N" non-incremental-forw)151.2 544.8 R(ard-search-history)-.1 E 2.5 +("M-P" non-incremental-re)151.2 556.8 R -.15(ve)-.25 G +(rse-search-history).15 E 2.5("M-R" re)151.2 568.8 R -.15(ve)-.25 G +(rt-line).15 E 2.5("M-T" transpose-w)151.2 580.8 R(ords)-.1 E 2.5 +("M-U" upcase-w)151.2 592.8 R(ord)-.1 E 2.5("M-Y" yank-pop)151.2 604.8 R +2.5("M-\\" delete-horizontal-space)151.2 616.8 R 2.5("M-~" tilde-e)151.2 +628.8 R(xpand)-.15 E 2.5("M-C-?" backw)151.2 640.8 R(ard-kill-w)-.1 E +(ord)-.1 E 2.5("M-_" yank-last-ar)151.2 652.8 R(g)-.18 E +(Emacs Control-X bindings)151.2 669.6 Q 2.5("C-XC-G" abort)151.2 693.6 R +2.5("C-XC-R" re-read-init-\214le)151.2 705.6 R 2.5("C-XC-U" undo)151.2 +717.6 R 2.5("C-XC-X" e)151.2 729.6 R(xchange-point-and-mark)-.15 E +(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(12)192.055 E 0 Cg EP +%%Page: 13 13 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 +("C-X\(" start-kbd-macro)151.2 84 R 2.5("C-X\)" end-kbd-macro)151.2 96 R +2.5("C-XE" call-last-kbd-macro)151.2 108 R 2.5("C-XC-?" backw)151.2 120 +R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF(VI Mode bindings)87 148.8 Q +F0(VI Insert Mode functions)151.2 160.8 Q 2.5("C-D" vi-eof-maybe)151.2 +184.8 R 2.5("C-H" backw)151.2 196.8 R(ard-delete-char)-.1 E 2.5 +("C-I" complete)151.2 208.8 R 2.5("C-J" accept-line)151.2 220.8 R 2.5 +("C-M" accept-line)151.2 232.8 R 2.5("C-R" re)151.2 244.8 R -.15(ve)-.25 +G(rse-search-history).15 E 2.5("C-S" forw)151.2 256.8 R +(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 268.8 R 2.5 +("C-U" unix-line-discard)151.2 280.8 R 2.5("C-V" quoted-insert)151.2 +292.8 R 2.5("C-W" unix-w)151.2 304.8 R(ord-rubout)-.1 E 2.5("C-Y" yank) +151.2 316.8 R 2.5("C-[" vi-mo)151.2 328.8 R -.15(ve)-.15 G(ment-mode).15 +E 2.5("C-_" undo)151.2 340.8 R 3.333("")151.2 352.8 S(to "~")-.833 E +(self-insert)5 E 2.5("C-?" backw)151.2 364.8 R(ard-delete-char)-.1 E +(VI Command Mode functions)151.2 381.6 Q 2.5("C-D" vi-eof-maybe)151.2 +405.6 R 2.5("C-E" emacs-editing-mode)151.2 417.6 R 2.5("C-G" abort)151.2 +429.6 R 2.5("C-H" backw)151.2 441.6 R(ard-char)-.1 E 2.5 +("C-J" accept-line)151.2 453.6 R 2.5("C-K" kill-line)151.2 465.6 R 2.5 +("C-L" clear)151.2 477.6 R(-screen)-.2 E 2.5("C-M" accept-line)151.2 +489.6 R 2.5("C-N" ne)151.2 501.6 R(xt-history)-.15 E 2.5("C-P" pre)151.2 +513.6 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 525.6 R 2.5 +("C-R" re)151.2 537.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 +("C-S" forw)151.2 549.6 R(ard-search-history)-.1 E 2.5 +("C-T" transpose-chars)151.2 561.6 R 2.5("C-U" unix-line-discard)151.2 +573.6 R 2.5("C-V" quoted-insert)151.2 585.6 R 2.5("C-W" unix-w)151.2 +597.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 609.6 R 2.5("C-_" vi-undo) +151.2 621.6 R -4.166 3.333("" f)151.2 633.6 T(orw)-3.333 E(ard-char)-.1 +E 2.5("#" insert-comment)151.2 645.6 R 2.5("$" end-of-line)151.2 657.6 R +2.5("%" vi-match)151.2 669.6 R 2.5("&" vi-tilde-e)151.2 681.6 R(xpand) +-.15 E 2.5("*" vi-complete)151.2 693.6 R 2.5("+" ne)151.2 705.6 R +(xt-history)-.15 E 2.5("," vi-char)151.2 717.6 R(-search)-.2 E 2.5 +("-" pre)151.2 729.6 R(vious-history)-.25 E(GNU Readline 6.2)72 768 Q +(2010 August 28)127.345 E(13)192.055 E 0 Cg EP +%%Page: 14 14 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 +("." vi-redo)151.2 84 R 2.5("/" vi-search)151.2 96 R 2.5("0" be)151.2 +108 R(ginning-of-line)-.15 E("1" to "9")151.2 120 Q(vi-ar)5 E(g-digit) +-.18 E 2.5(";" vi-char)151.2 132 R(-search)-.2 E 2.5("=" vi-complete) +151.2 144 R 2.5("?" vi-search)151.2 156 R 2.5("A" vi-append-eol)151.2 +168 R 2.5("B" vi-pre)151.2 180 R(v-w)-.25 E(ord)-.1 E 2.5 +("C" vi-change-to)151.2 192 R 2.5("D" vi-delete-to)151.2 204 R 2.5 +("E" vi-end-w)151.2 216 R(ord)-.1 E 2.5("F" vi-char)151.2 228 R(-search) +-.2 E 2.5("G" vi-fetch-history)151.2 240 R 2.5("I" vi-insert-be)151.2 +252 R(g)-.15 E 2.5("N" vi-search-ag)151.2 264 R(ain)-.05 E 2.5 +("P" vi-put)151.2 276 R 2.5("R" vi-replace)151.2 288 R 2.5("S" vi-subst) +151.2 300 R 2.5("T" vi-char)151.2 312 R(-search)-.2 E 2.5("U" re)151.2 +324 R -.15(ve)-.25 G(rt-line).15 E 2.5("W" vi-ne)151.2 336 R(xt-w)-.15 E +(ord)-.1 E 2.5("X" backw)151.2 348 R(ard-delete-char)-.1 E 2.5 +("Y" vi-yank-to)151.2 360 R 2.5("\\" vi-complete)151.2 372 R 2.5 +("^" vi-\214rst-print)151.2 384 R 2.5("_" vi-yank-ar)151.2 396 R(g)-.18 +E 2.5("`" vi-goto-mark)151.2 408 R 2.5("a" vi-append-mode)151.2 420 R +2.5("b" vi-pre)151.2 432 R(v-w)-.25 E(ord)-.1 E 2.5("c" vi-change-to) +151.2 444 R 2.5("d" vi-delete-to)151.2 456 R 2.5("e" vi-end-w)151.2 468 +R(ord)-.1 E 2.5("f" vi-char)151.2 480 R(-search)-.2 E 2.5("h" backw) +151.2 492 R(ard-char)-.1 E 2.5("i" vi-insertion-mode)151.2 504 R 2.5 +("j" ne)151.2 516 R(xt-history)-.15 E 2.5("k" pre)151.2 528 R(v-history) +-.25 E 2.5("l" forw)151.2 540 R(ard-char)-.1 E 2.5("m" vi-set-mark)151.2 +552 R 2.5("n" vi-search-ag)151.2 564 R(ain)-.05 E 2.5("p" vi-put)151.2 +576 R 2.5("r" vi-change-char)151.2 588 R 2.5("s" vi-subst)151.2 600 R +2.5("t" vi-char)151.2 612 R(-search)-.2 E 2.5("u" vi-undo)151.2 624 R +2.5("w" vi-ne)151.2 636 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 +648 R 2.5("y" vi-yank-to)151.2 660 R 2.5("|" vi-column)151.2 672 R 2.5 +("~" vi-change-case)151.2 684 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 +700.8 Q F0(GNU Readline 6.2)72 768 Q(2010 August 28)127.345 E(14)192.055 +E 0 Cg EP +%%Page: 15 15 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 +/Times-Italic@0 SF(The Gnu Readline Libr)108 84 Q(ary)-.15 E F0 2.5(,B)C +(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F1(The Gnu History Libr) +108 96 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y) +-.15 E F1(bash)108 108 Q F0(\(1\))A/F2 10.95/Times-Bold@0 SF(FILES)72 +124.8 Q F1(~/.inputr)109.666 136.8 Q(c)-.37 E F0(Indi)144 148.8 Q +(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E F0 +(initialization \214le)2.5 E F2 -.548(AU)72 165.6 S(THORS).548 E F0 +(Brian F)108 177.6 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E +(bfox@gnu.or)108 189.6 Q(g)-.18 E(Chet Rame)108 206.4 Q 1.3 -.65(y, C) +-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) +-.25 G(rsity).15 E(chet@ins.CWR)108 218.4 Q(U.Edu)-.4 E F2 -.11(BU)72 +235.2 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .691 +(If you \214nd a b)108 247.2 R .691(ug in)-.2 F F3 -.18(re)3.191 G +(adline,).18 E F0 .691(you should report it.)3.191 F .69 +(But \214rst, you should mak)5.69 F 3.19(es)-.1 G .69 +(ure that it really is a b)-3.19 F(ug,)-.2 E +(and that it appears in the latest v)108 259.2 Q(ersion of the)-.15 E F3 +-.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.) +.15 E .704(Once you ha)108 276 R 1.004 -.15(ve d)-.2 H .704 +(etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b) +-.15 F .705(ug report to)-.2 F F1 -.2(bu)3.205 G(g\255r).2 E(eadline) +-.37 E F0(@)A F1(gnu.or)A(g)-.37 E F0 5.705(.I)C 3.205(fy)-5.705 G(ou) +-3.205 E(ha)108 288 Q 1.81 -.15(ve a \214)-.2 H 1.51 +(x, you are welcome to mail that as well!).15 F 1.509 +(Suggestions and `philosophical' b)6.509 F 1.509(ug reports may be)-.2 F +(mailed to)108 300 Q F1 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F1 +(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3 +(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 316.8 Q +(ug reports concerning this manual page should be directed to)-.2 E F1 +-.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E F2 +-.11(BU)72 333.6 S(GS).11 E F0(It')108 345.6 Q 2.5(st)-.55 G +(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 6.2)72 768 Q +(2010 August 28)127.345 E(15)192.055 E 0 Cg EP +%%Trailer +end +%%EOF diff --git a/readline-6.2/doc/rlman.texi b/readline-6.2/doc/rlman.texi new file mode 100644 index 0000000..1c9ac13 --- /dev/null +++ b/readline-6.2/doc/rlman.texi @@ -0,0 +1,97 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename readline.info +@settitle GNU Readline Library +@comment %**end of header (This is for running Texinfo on a region.) +@synindex vr fn + +@include version.texi + +@copying +This manual describes the GNU Readline Library +(version @value{VERSION}, @value{UPDATED}), a library which aids in the +consistency of user interface across discrete programs which provide +a command line interface. + +Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. + +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. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', +and with the Back-Cover Texts as in (a) below. A copy of the license is +included in the section entitled ``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: You are free to copy and modify +this GNU manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' + +@end quotation +@end copying + +@dircategory Libraries +@direntry +* Readline: (readline). The GNU readline library API. +@end direntry + +@titlepage +@title GNU Readline Library +@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. +@subtitle @value{UPDATED-MONTH} +@author Chet Ramey, Case Western Reserve University +@author Brian Fox, Free Software Foundation + +@page +@vskip 0pt plus 1filll +@insertcopying + +@sp 1 +Published by the Free Software Foundation @* +59 Temple Place, Suite 330, @* +Boston, MA 02111-1307 @* +USA @* + +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU Readline Library + +This document describes the GNU Readline Library, a utility which aids +in the consistency of user interface across discrete programs which +provide a command line interface. + +@menu +* Command Line Editing:: GNU Readline User's Manual. +* Programming with GNU Readline:: GNU Readline Programmer's Manual. +* GNU Free Documentation License:: License for copying this manual. +* Concept Index:: Index of concepts described in this manual. +* Function and Variable Index:: Index of externally visible functions + and variables. +@end menu +@end ifnottex + +@include rluser.texi +@include rltech.texi + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@include fdl.texi + +@node Concept Index +@unnumbered Concept Index +@printindex cp + +@node Function and Variable Index +@unnumbered Function and Variable Index +@printindex fn + +@bye diff --git a/readline-6.2/doc/rltech.texi b/readline-6.2/doc/rltech.texi new file mode 100644 index 0000000..dc272a2 --- /dev/null +++ b/readline-6.2/doc/rltech.texi @@ -0,0 +1,2420 @@ +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename rltech.info +@comment %**end of header (This is for running Texinfo on a region.) + +@ifinfo +This document describes the GNU Readline Library, a utility for aiding +in the consistency of user interface across discrete programs that need +to provide a command line interface. + +Copyright (C) 1988--2011 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +pare preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). +@end ignore + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end ifinfo + +@node Programming with GNU Readline +@chapter Programming with GNU Readline + +This chapter describes the interface between the @sc{gnu} Readline Library and +other programs. If you are a programmer, and you wish to include the +features found in @sc{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. +@end menu + +@node Basic Behavior +@section Basic Behavior + +Many programs provide a command line interface, such as @code{mail}, +@code{ftp}, and @code{sh}. For such programs, the default behaviour of +Readline is sufficient. This section describes how to use Readline in +the simplest way possible, perhaps to replace calls in your code to +@code{gets()} or @code{fgets()}. + +@findex readline +@cindex readline, function + +The function @code{readline()} prints a prompt @var{prompt} +and then reads and returns a single line of text from the user. +If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed. +The line @code{readline} returns is allocated with @code{malloc()}; +the caller should @code{free()} the line when it has finished with it. +The declaration for @code{readline} in ANSI C is + +@example +@code{char *readline (const char *@var{prompt});} +@end example + +@noindent +So, one might say +@example +@code{char *line = readline ("Enter a line: ");} +@end example +@noindent +in order to read a line of text from the user. +The line returned has the final newline removed, so only the +text remains. + +If @code{readline} encounters an @code{EOF} while reading the line, and the +line is empty at that point, then @code{(char *)NULL} is returned. +Otherwise, the line is ended just as if a newline had been typed. + +If you want the user to be able to get at the line later, (with +@key{C-p} for example), you must call @code{add_history()} to save the +line away in a @dfn{history} list of such lines. + +@example +@code{add_history (line)}; +@end example + +@noindent +For full details on the GNU History Library, see the associated manual. + +It is preferable to avoid saving empty lines on the history list, since +users rarely have a burning need to reuse a blank line. Here is +a function which usefully replaces the standard @code{gets()} library +function, and has the advantage of no static buffer to overflow: + +@example +/* A static variable for holding the line. */ +static char *line_read = (char *)NULL; + +/* Read a string, and return a pointer to it. + Returns NULL on EOF. */ +char * +rl_gets () +@{ + /* If the buffer has already been allocated, + return the memory to the free pool. */ + if (line_read) + @{ + free (line_read); + line_read = (char *)NULL; + @} + + /* Get a line from the user. */ + line_read = readline (""); + + /* If the line has any text in it, + save it on the history. */ + if (line_read && *line_read) + add_history (line_read); + + return (line_read); +@} +@end example + +This function gives the user the default behaviour of @key{TAB} +completion: completion on file names. If you do not want Readline to +complete on filenames, you can change the binding of the @key{TAB} key +with @code{rl_bind_key()}. + +@example +@code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});} +@end example + +@code{rl_bind_key()} takes two arguments: @var{key} is the character that +you want to bind, and @var{function} is the address of the function to +call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert()} +makes @key{TAB} insert itself. +@code{rl_bind_key()} returns non-zero if @var{key} is not a valid +ASCII character code (between 0 and 255). + +Thus, to disable the default @key{TAB} behavior, the following suffices: +@example +@code{rl_bind_key ('\t', rl_insert);} +@end example + +This code should be executed once at the start of your program; you +might write a function called @code{initialize_readline()} which +performs this and other desired initializations, such as installing +custom completers (@pxref{Custom Completers}). + +@node Custom Functions +@section Custom Functions + +Readline provides many functions for manipulating the text of +the line, but it isn't possible to anticipate the needs of all +programs. This section describes the various functions and variables +defined within the Readline library which allow a user program to add +customized functionality to Readline. + +Before declaring any functions that customize Readline's behavior, or +using any functionality Readline provides in other code, an +application writer should include the file @code{<readline/readline.h>} +in any file that uses Readline's features. Since some of the definitions +in @code{readline.h} use the @code{stdio} library, the file +@code{<stdio.h>} should be included before @code{readline.h}. + +@code{readline.h} defines a C preprocessor variable that should +be treated as an integer, @code{RL_READLINE_VERSION}, which may +be used to conditionally compile application code depending on +the installed Readline version. The value is a hexadecimal +encoding of the major and minor version numbers of the library, +of the form 0x@var{MMmm}. @var{MM} is the two-digit major +version number; @var{mm} is the two-digit minor version number. +For Readline 4.2, for example, the value of +@code{RL_READLINE_VERSION} would be @code{0x0402}. + +@menu +* Readline Typedefs:: C declarations to make code readable. +* Function Writing:: Variables and calling conventions. +@end menu + +@node Readline Typedefs +@subsection Readline Typedefs + +For readabilty, we declare a number of new object types, all pointers +to functions. + +The reason for declaring these new types is to make it easier to write +code describing pointers to C functions with appropriately prototyped +arguments and return values. + +For instance, say we want to declare a variable @var{func} as a pointer +to a function which takes two @code{int} arguments and returns an +@code{int} (this is the type of all of the Readline bindable functions). +Instead of the classic C declaration + +@code{int (*func)();} + +@noindent +or the ANSI-C style declaration + +@code{int (*func)(int, int);} + +@noindent +we may write + +@code{rl_command_func_t *func;} + +The full list of function pointer types available is + +@table @code +@item typedef int rl_command_func_t (int, int); + +@item typedef char *rl_compentry_func_t (const char *, int); + +@item typedef char **rl_completion_func_t (const char *, int, int); + +@item typedef char *rl_quote_func_t (char *, int, char *); + +@item typedef char *rl_dequote_func_t (char *, int); + +@item typedef int rl_compignore_func_t (char **); + +@item typedef void rl_compdisp_func_t (char **, int, int); + +@item typedef int rl_hook_func_t (void); + +@item typedef int rl_getc_func_t (FILE *); + +@item typedef int rl_linebuf_func_t (char *, int); + +@item typedef int rl_intfunc_t (int); +@item #define rl_ivoidfunc_t rl_hook_func_t +@item typedef int rl_icpfunc_t (char *); +@item typedef int rl_icppfunc_t (char **); + +@item typedef void rl_voidfunc_t (void); +@item typedef void rl_vintfunc_t (int); +@item typedef void rl_vcpfunc_t (char *); +@item typedef void rl_vcppfunc_t (char **); + +@end table + +@node Function Writing +@subsection Writing a New Function + +In order to write new functions for Readline, you need to know the +calling conventions for keyboard-invoked functions, and the names of the +variables that describe the current state of the line read so far. + +The calling sequence for a command @code{foo} looks like + +@example +@code{int foo (int count, int key)} +@end example + +@noindent +where @var{count} is the numeric argument (or 1 if defaulted) and +@var{key} is the key that invoked this function. + +It is completely up to the function as to what should be done with the +numeric argument. Some functions use it as a repeat count, some +as a flag, and others to choose alternate behavior (refreshing the current +line as opposed to refreshing the screen, for example). Some choose to +ignore it. In general, if a +function uses the numeric argument as a repeat count, it should be able +to do something useful with both negative and positive arguments. +At the very least, it should be aware that it can be passed a +negative argument. + +A command function should return 0 if its action completes successfully, +and a non-zero value if some error occurs. +This is the convention obeyed by all of the builtin Readline bindable +command functions. + +@node Readline Variables +@section Readline Variables + +These variables are available to function writers. + +@deftypevar {char *} rl_line_buffer +This is the line gathered so far. You are welcome to modify the +contents of the line, but see @ref{Allowing Undoing}. The +function @code{rl_extend_line_buffer} is available to increase +the memory allocated to @code{rl_line_buffer}. +@end deftypevar + +@deftypevar int rl_point +The offset of the current cursor position in @code{rl_line_buffer} +(the @emph{point}). +@end deftypevar + +@deftypevar int rl_end +The number of characters present in @code{rl_line_buffer}. When +@code{rl_point} is at the end of the line, @code{rl_point} and +@code{rl_end} are equal. +@end deftypevar + +@deftypevar int rl_mark +The @var{mark} (saved position) in the current line. If set, the mark +and point define a @emph{region}. +@end deftypevar + +@deftypevar int rl_done +Setting this to a non-zero value causes Readline to return the current +line immediately. +@end deftypevar + +@deftypevar int rl_num_chars_to_read +Setting this to a positive value before calling @code{readline()} causes +Readline to return after accepting that many characters, rather +than reading up to a character bound to @code{accept-line}. +@end deftypevar + +@deftypevar int rl_pending_input +Setting this to a value makes it the next keystroke read. This is a +way to stuff a single character into the input stream. +@end deftypevar + +@deftypevar int rl_dispatching +Set to a non-zero value if a function is being called from a key binding; +zero otherwise. Application functions can test this to discover whether +they were called directly or by Readline's dispatching mechanism. +@end deftypevar + +@deftypevar 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. +@end deftypevar + +@deftypevar {char *} rl_prompt +The prompt Readline uses. This is set from the argument to +@code{readline()}, and should not be assigned to directly. +The @code{rl_set_prompt()} function (@pxref{Redisplay}) may +be used to modify the prompt string after calling @code{readline()}. +@end deftypevar + +@deftypevar {char *} rl_display_prompt +The string displayed as the prompt. This is usually identical to +@var{rl_prompt}, but may be changed temporarily by functions that +use the prompt string as a message area, such as incremental search. +@end deftypevar + +@deftypevar int rl_already_prompted +If an application wishes to display the prompt itself, rather than have +Readline do it the first time @code{readline()} is called, it should set +this variable to a non-zero value after displaying the prompt. +The prompt must also be passed as the argument to @code{readline()} so +the redisplay functions can update the display properly. +The calling application is responsible for managing the value; Readline +never sets it. +@end deftypevar + +@deftypevar {const char *} rl_library_version +The version number of this revision of the library. +@end deftypevar + +@deftypevar int rl_readline_version +An integer encoding the current version of the library. The encoding is +of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version +number, and @var{mm} is the two-digit minor version number. +For example, for Readline-4.2, @code{rl_readline_version} would have the +value 0x0402. +@end deftypevar + +@deftypevar {int} rl_gnu_readline_p +Always set to 1, denoting that this is @sc{gnu} readline rather than some +emulation. +@end deftypevar + +@deftypevar {const char *} rl_terminal_name +The terminal type, used for initialization. If not set by the application, +Readline sets this to the value of the @env{TERM} environment variable +the first time it is called. +@end deftypevar + +@deftypevar {const char *} rl_readline_name +This variable is set to a unique name by each application using Readline. +The value allows conditional parsing of the inputrc file +(@pxref{Conditional Init Constructs}). +@end deftypevar + +@deftypevar {FILE *} rl_instream +The stdio stream from which Readline reads input. +If @code{NULL}, Readline defaults to @var{stdin}. +@end deftypevar + +@deftypevar {FILE *} rl_outstream +The stdio stream to which Readline performs output. +If @code{NULL}, Readline defaults to @var{stdout}. +@end deftypevar + +@deftypevar int rl_prefer_env_winsize +If non-zero, Readline gives values found in the @env{LINES} and +@env{COLUMNS} environment variables greater precedence than values fetched +from the kernel when computing the screen dimensions. +@end deftypevar + +@deftypevar {rl_command_func_t *} rl_last_func +The address of the last command function Readline executed. May be used to +test whether or not a function is being executed twice in succession, for +example. +@end deftypevar + +@deftypevar {rl_hook_func_t *} rl_startup_hook +If non-zero, this is the address of a function to call just +before @code{readline} prints the first prompt. +@end deftypevar + +@deftypevar {rl_hook_func_t *} 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 @code{readline} +starts reading input characters. +@end deftypevar + +@deftypevar {rl_hook_func_t *} rl_event_hook +If non-zero, this is the address of a function to call periodically +when Readline is waiting for terminal input. +By default, this will be called at most ten times a second if there +is no keyboard input. +@end deftypevar + +@deftypevar {rl_getc_func_t *} 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 +@code{rl_getc}, the default Readline character input function +(@pxref{Character Input}). +@end deftypevar + +@deftypevar {rl_voidfunc_t *} 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 @code{rl_redisplay}, the default Readline +redisplay function (@pxref{Redisplay}). +@end deftypevar + +@deftypevar {rl_vintfunc_t *} rl_prep_term_function +If non-zero, Readline will call indirectly through this pointer +to initialize the terminal. The function takes a single argument, an +@code{int} flag that says whether or not to use eight-bit characters. +By default, this is set to @code{rl_prep_terminal} +(@pxref{Terminal Management}). +@end deftypevar + +@deftypevar {rl_voidfunc_t *} rl_deprep_term_function +If non-zero, Readline will call indirectly through this pointer +to reset the terminal. This function should undo the effects of +@code{rl_prep_term_function}. +By default, this is set to @code{rl_deprep_terminal} +(@pxref{Terminal Management}). +@end deftypevar + +@deftypevar {Keymap} rl_executing_keymap +This variable is set to the keymap (@pxref{Keymaps}) in which the +currently executing readline function was found. +@end deftypevar + +@deftypevar {Keymap} rl_binding_keymap +This variable is set to the keymap (@pxref{Keymaps}) in which the +last key binding occurred. +@end deftypevar + +@deftypevar {char *} rl_executing_macro +This variable is set to the text of any currently-executing macro. +@end deftypevar + +@deftypevar {int} rl_readline_state +A variable with bit values that encapsulate the current Readline state. +A bit is set with the @code{RL_SETSTATE} macro, and unset with the +@code{RL_UNSETSTATE} macro. Use the @code{RL_ISSTATE} macro to test +whether a particular state bit is set. Current state bits include: + +@table @code +@item RL_STATE_NONE +Readline has not yet been called, nor has it begun to intialize. +@item RL_STATE_INITIALIZING +Readline is initializing its internal data structures. +@item RL_STATE_INITIALIZED +Readline has completed its initialization. +@item RL_STATE_TERMPREPPED +Readline has modified the terminal modes to do its own input and redisplay. +@item RL_STATE_READCMD +Readline is reading a command from the keyboard. +@item RL_STATE_METANEXT +Readline is reading more input after reading the meta-prefix character. +@item RL_STATE_DISPATCHING +Readline is dispatching to a command. +@item RL_STATE_MOREINPUT +Readline is reading more input while executing an editing command. +@item RL_STATE_ISEARCH +Readline is performing an incremental history search. +@item RL_STATE_NSEARCH +Readline is performing a non-incremental history search. +@item RL_STATE_SEARCH +Readline is searching backward or forward through the history for a string. +@item RL_STATE_NUMERICARG +Readline is reading a numeric argument. +@item RL_STATE_MACROINPUT +Readline is currently getting its input from a previously-defined keyboard +macro. +@item RL_STATE_MACRODEF +Readline is currently reading characters defining a keyboard macro. +@item RL_STATE_OVERWRITE +Readline is in overwrite mode. +@item RL_STATE_COMPLETING +Readline is performing word completion. +@item RL_STATE_SIGHANDLER +Readline is currently executing the readline signal handler. +@item RL_STATE_UNDOING +Readline is performing an undo. +@item RL_STATE_INPUTPENDING +Readline has input pending due to a call to @code{rl_execute_next()}. +@item RL_STATE_TTYCSAVED +Readline has saved the values of the terminal's special characters. +@item RL_STATE_CALLBACK +Readline is currently using the alternate (callback) interface +(@pxref{Alternate Interface}). +@item RL_STATE_VIMOTION +Readline is reading the argument to a vi-mode "motion" command. +@item RL_STATE_MULTIKEY +Readline is reading a multiple-keystroke command. +@item RL_STATE_VICMDONCE +Readline has entered vi command (movement) mode at least one time during +the current call to @code{readline()}. +@item RL_STATE_DONE +Readline has read a key sequence bound to @code{accept-line} +and is about to return the line to the caller. +@end table + +@end deftypevar + +@deftypevar {int} rl_explicit_arg +Set to a non-zero value if an explicit numeric argument was specified by +the user. Only valid in a bindable command function. +@end deftypevar + +@deftypevar {int} rl_numeric_arg +Set to the value of any numeric argument explicitly specified by the user +before executing the current Readline function. Only valid in a bindable +command function. +@end deftypevar + +@deftypevar {int} rl_editing_mode +Set to a value denoting Readline's current editing mode. A value of +@var{1} means Readline is currently in emacs mode; @var{0} +means that vi mode is active. +@end deftypevar + + +@node Readline Convenience Functions +@section Readline Convenience Functions + +@menu +* Function Naming:: How to give a function you write a name. +* Keymaps:: Making keymaps. +* Binding Keys:: Changing Keymaps. +* Associating Function Names and Bindings:: Translate function names to + key sequences. +* Allowing Undoing:: How to make your functions undoable. +* Redisplay:: Functions to control line display. +* Modifying Text:: Functions to modify @code{rl_line_buffer}. +* Character Input:: Functions to read keyboard input. +* Terminal Management:: Functions to manage terminal settings. +* Utility Functions:: Generally useful functions and hooks. +* Miscellaneous Functions:: Functions that don't fall into any category. +* Alternate Interface:: Using Readline in a `callback' fashion. +* A Readline Example:: An example Readline function. +@end menu + +@node Function Naming +@subsection Naming a Function + +The user can dynamically change the bindings of keys while using +Readline. This is done by representing the function with a descriptive +name. The user is able to type the descriptive name when referring to +the function. Thus, in an init file, one might find + +@example +Meta-Rubout: backward-kill-word +@end example + +This binds the keystroke @key{Meta-Rubout} to the function +@emph{descriptively} named @code{backward-kill-word}. You, as the +programmer, should bind the functions you write to descriptive names as +well. Readline provides a function for doing that: + +@deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key) +Add @var{name} to the list of named functions. Make @var{function} be +the function that gets called. If @var{key} is not -1, then bind it to +@var{function} using @code{rl_bind_key()}. +@end deftypefun + +Using this function alone is sufficient for most applications. +It is the recommended way to add a few functions to the default +functions that Readline has built in. +If you need to do something other than adding a function to Readline, +you may need to use the underlying functions described below. + +@node Keymaps +@subsection Selecting a Keymap + +Key bindings take place on a @dfn{keymap}. The keymap is the +association between the keys that the user types and the functions that +get run. You can make your own keymaps, copy existing keymaps, and tell +Readline which keymap to use. + +@deftypefun Keymap rl_make_bare_keymap (void) +Returns a new, empty keymap. The space for the keymap is allocated with +@code{malloc()}; the caller should free it by calling +@code{rl_free_keymap()} when done. +@end deftypefun + +@deftypefun Keymap rl_copy_keymap (Keymap map) +Return a new keymap which is a copy of @var{map}. +@end deftypefun + +@deftypefun Keymap rl_make_keymap (void) +Return a new keymap with the printing characters bound to rl_insert, +the lowercase Meta characters bound to run their equivalents, and +the Meta digits bound to produce numeric arguments. +@end deftypefun + +@deftypefun void rl_discard_keymap (Keymap keymap) +Free the storage associated with the data in @var{keymap}. +The caller should free @var{keymap}. +@end deftypefun + +@deftypefun void rl_free_keymap (Keymap keymap) +Free all storage associated with @var{keymap}. This calls +@code{rl_discard_keymap} to free subordindate keymaps and macros. +@end deftypefun + +Readline has several internal keymaps. These functions allow you to +change which keymap is active. + +@deftypefun Keymap rl_get_keymap (void) +Returns the currently active keymap. +@end deftypefun + +@deftypefun void rl_set_keymap (Keymap keymap) +Makes @var{keymap} the currently active keymap. +@end deftypefun + +@deftypefun Keymap rl_get_keymap_by_name (const char *name) +Return the keymap matching @var{name}. @var{name} is one which would +be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). +@end deftypefun + +@deftypefun {char *} rl_get_keymap_name (Keymap keymap) +Return the name matching @var{keymap}. @var{name} is one which would +be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). +@end deftypefun + +@node Binding Keys +@subsection Binding Keys + +Key sequences are associate with functions through the keymap. +Readline has several internal keymaps: @code{emacs_standard_keymap}, +@code{emacs_meta_keymap}, @code{emacs_ctlx_keymap}, +@code{vi_movement_keymap}, and @code{vi_insertion_keymap}. +@code{emacs_standard_keymap} is the default, and the examples in +this manual assume that. + +Since @code{readline()} installs a set of default key bindings the first +time it is called, there is always the danger that a custom binding +installed before the first call to @code{readline()} will be overridden. +An alternate mechanism is to install custom key bindings in an +initialization function assigned to the @code{rl_startup_hook} variable +(@pxref{Readline Variables}). + +These functions manage key bindings. + +@deftypefun int rl_bind_key (int key, rl_command_func_t *function) +Binds @var{key} to @var{function} in the currently active keymap. +Returns non-zero in the case of an invalid @var{key}. +@end deftypefun + +@deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) +Bind @var{key} to @var{function} in @var{map}. +Returns non-zero in the case of an invalid @var{key}. +@end deftypefun + +@deftypefun int rl_bind_key_if_unbound (int key, rl_command_func_t *function) +Binds @var{key} to @var{function} if it is not already bound in the +currently active keymap. +Returns non-zero in the case of an invalid @var{key} or if @var{key} is +already bound. +@end deftypefun + +@deftypefun int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map) +Binds @var{key} to @var{function} if it is not already bound in @var{map}. +Returns non-zero in the case of an invalid @var{key} or if @var{key} is +already bound. +@end deftypefun + +@deftypefun int rl_unbind_key (int key) +Bind @var{key} to the null function in the currently active keymap. +Returns non-zero in case of error. +@end deftypefun + +@deftypefun int rl_unbind_key_in_map (int key, Keymap map) +Bind @var{key} to the null function in @var{map}. +Returns non-zero in case of error. +@end deftypefun + +@deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) +Unbind all keys that execute @var{function} in @var{map}. +@end deftypefun + +@deftypefun int rl_unbind_command_in_map (const char *command, Keymap map) +Unbind all keys that are bound to @var{command} in @var{map}. +@end deftypefun + +@deftypefun int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function) +Bind the key sequence represented by the string @var{keyseq} to the function +@var{function}, beginning in the current keymap. +This makes new keymaps as necessary. +The return value is non-zero if @var{keyseq} is invalid. +@end deftypefun + +@deftypefun int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) +Bind the key sequence represented by the string @var{keyseq} to the function +@var{function}. This makes new keymaps as necessary. +Initial bindings are performed in @var{map}. +The return value is non-zero if @var{keyseq} is invalid. +@end deftypefun + +@deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) +Equivalent to @code{rl_bind_keyseq_in_map}. +@end deftypefun + +@deftypefun int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function) +Binds @var{keyseq} to @var{function} if it is not already bound in the +currently active keymap. +Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is +already bound. +@end deftypefun + +@deftypefun int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) +Binds @var{keyseq} to @var{function} if it is not already bound in @var{map}. +Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is +already bound. +@end deftypefun + +@deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) +Bind the key sequence represented by the string @var{keyseq} to the arbitrary +pointer @var{data}. @var{type} says what kind of data is pointed to by +@var{data}; this can be a function (@code{ISFUNC}), a macro +(@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as +necessary. The initial keymap in which to do bindings is @var{map}. +@end deftypefun + +@deftypefun int rl_parse_and_bind (char *line) +Parse @var{line} as if it had been read from the @code{inputrc} file and +perform any key bindings and variable assignments found +(@pxref{Readline Init File}). +@end deftypefun + +@deftypefun int rl_read_init_file (const char *filename) +Read keybindings and variable assignments from @var{filename} +(@pxref{Readline Init File}). +@end deftypefun + +@node Associating Function Names and Bindings +@subsection Associating Function Names and Bindings + +These functions allow you to find out what keys invoke named functions +and the functions invoked by a particular key sequence. You may also +associate a new function name with an arbitrary function. + +@deftypefun {rl_command_func_t *} rl_named_function (const char *name) +Return the function with name @var{name}. +@end deftypefun + +@deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) +Return the function invoked by @var{keyseq} in keymap @var{map}. +If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is +not @code{NULL}, the type of the object is returned in the @code{int} variable +it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}). +@end deftypefun + +@deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function) +Return an array of strings representing the key sequences used to +invoke @var{function} in the current keymap. +@end deftypefun + +@deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) +Return an array of strings representing the key sequences used to +invoke @var{function} in the keymap @var{map}. +@end deftypefun + +@deftypefun void rl_function_dumper (int readable) +Print the readline function names and the key sequences currently +bound to them to @code{rl_outstream}. If @var{readable} is non-zero, +the list is formatted in such a way that it can be made part of an +@code{inputrc} file and re-read. +@end deftypefun + +@deftypefun void rl_list_funmap_names (void) +Print the names of all bindable Readline functions to @code{rl_outstream}. +@end deftypefun + +@deftypefun {const char **} rl_funmap_names (void) +Return a NULL terminated array of known function names. The array is +sorted. The array itself is allocated, but not the strings inside. You +should free the array, but not the pointers, using @code{free} or +@code{rl_free} when you are done. +@end deftypefun + +@deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function) +Add @var{name} to the list of bindable Readline command names, and make +@var{function} the function to be called when @var{name} is invoked. +@end deftypefun + +@node Allowing Undoing +@subsection Allowing Undoing + +Supporting the undo command is a painless thing, and makes your +functions much more useful. It is certainly easy to try +something if you know you can undo it. + +If your function simply inserts text once, or deletes text once, and +uses @code{rl_insert_text()} or @code{rl_delete_text()} to do it, then +undoing is already done for you automatically. + +If you do multiple insertions or multiple deletions, or any combination +of these operations, you should group them together into one operation. +This is done with @code{rl_begin_undo_group()} and +@code{rl_end_undo_group()}. + +The types of events that can be undone are: + +@smallexample +enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; +@end smallexample + +Notice that @code{UNDO_DELETE} means to insert some text, and +@code{UNDO_INSERT} means to delete some text. That is, the undo code +tells what to undo, not how to undo it. @code{UNDO_BEGIN} and +@code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and +@code{rl_end_undo_group()}. + +@deftypefun int rl_begin_undo_group (void) +Begins saving undo information in a group construct. The undo +information usually comes from calls to @code{rl_insert_text()} and +@code{rl_delete_text()}, but could be the result of calls to +@code{rl_add_undo()}. +@end deftypefun + +@deftypefun int rl_end_undo_group (void) +Closes the current undo group started with @code{rl_begin_undo_group +()}. There should be one call to @code{rl_end_undo_group()} +for each call to @code{rl_begin_undo_group()}. +@end deftypefun + +@deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text) +Remember how to undo an event (according to @var{what}). The affected +text runs from @var{start} to @var{end}, and encompasses @var{text}. +@end deftypefun + +@deftypefun void rl_free_undo_list (void) +Free the existing undo list. +@end deftypefun + +@deftypefun int rl_do_undo (void) +Undo the first thing on the undo list. Returns @code{0} if there was +nothing to undo, non-zero if something was undone. +@end deftypefun + +Finally, if you neither insert nor delete text, but directly modify the +existing text (e.g., change its case), call @code{rl_modifying()} +once, just before you modify the text. You must supply the indices of +the text range that you are going to modify. + +@deftypefun int rl_modifying (int start, int end) +Tell Readline to save the text between @var{start} and @var{end} as a +single undo unit. It is assumed that you will subsequently modify +that text. +@end deftypefun + +@node Redisplay +@subsection Redisplay + +@deftypefun void rl_redisplay (void) +Change what's displayed on the screen to reflect the current contents +of @code{rl_line_buffer}. +@end deftypefun + +@deftypefun int rl_forced_update_display (void) +Force the line to be updated and redisplayed, whether or not +Readline thinks the screen display is correct. +@end deftypefun + +@deftypefun int rl_on_new_line (void) +Tell the update functions that we have moved onto a new (empty) line, +usually after ouputting a newline. +@end deftypefun + +@deftypefun int rl_on_new_line_with_prompt (void) +Tell the update functions that we have moved onto a new line, with +@var{rl_prompt} already displayed. +This could be used by applications that want to output the prompt string +themselves, but still need Readline to know the prompt string length for +redisplay. +It should be used after setting @var{rl_already_prompted}. +@end deftypefun + +@deftypefun int rl_reset_line_state (void) +Reset the display state to a clean state and redisplay the current line +starting on a new line. +@end deftypefun + +@deftypefun int rl_crlf (void) +Move the cursor to the start of the next screen line. +@end deftypefun + +@deftypefun int rl_show_char (int c) +Display character @var{c} on @code{rl_outstream}. +If Readline has not been set to display meta characters directly, this +will convert meta characters to a meta-prefixed key sequence. +This is intended for use by applications which wish to do their own +redisplay. +@end deftypefun + +@deftypefun int rl_message (const char *, @dots{}) +The arguments are a format string as would be supplied to @code{printf}, +possibly containing conversion specifications such as @samp{%d}, and +any additional arguments necessary to satisfy the conversion specifications. +The resulting string is displayed in the @dfn{echo area}. The echo area +is also used to display numeric arguments and search strings. +You should call @code{rl_save_prompt} to save the prompt information +before calling this function. +@end deftypefun + +@deftypefun int rl_clear_message (void) +Clear the message in the echo area. If the prompt was saved with a call to +@code{rl_save_prompt} before the last call to @code{rl_message}, +call @code{rl_restore_prompt} before calling this function. +@end deftypefun + +@deftypefun void rl_save_prompt (void) +Save the local Readline prompt display state in preparation for +displaying a new message in the message area with @code{rl_message()}. +@end deftypefun + +@deftypefun void rl_restore_prompt (void) +Restore the local Readline prompt display state saved by the most +recent call to @code{rl_save_prompt}. +if @code{rl_save_prompt} was called to save the prompt before a call +to @code{rl_message}, this function should be called before the +corresponding call to @code{rl_clear_message}. +@end deftypefun + +@deftypefun int rl_expand_prompt (char *prompt) +Expand any special character sequences in @var{prompt} and set up the +local Readline prompt redisplay variables. +This function is called by @code{readline()}. It may also be called to +expand the primary prompt if the @code{rl_on_new_line_with_prompt()} +function or @code{rl_already_prompted} variable is used. +It returns the number of visible characters on the last line of the +(possibly multi-line) prompt. +Applications may indicate that the prompt contains characters that take +up no physical screen space when displayed by bracketing a sequence of +such characters with the special markers @code{RL_PROMPT_START_IGNORE} +and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}. This may +be used to embed terminal-specific escape sequences in prompts. +@end deftypefun + +@deftypefun int rl_set_prompt (const char *prompt) +Make Readline use @var{prompt} for subsequent redisplay. This calls +@code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt} +to the result. +@end deftypefun + +@node Modifying Text +@subsection Modifying Text + +@deftypefun int rl_insert_text (const char *text) +Insert @var{text} into the line at the current cursor position. +Returns the number of characters inserted. +@end deftypefun + +@deftypefun int rl_delete_text (int start, int end) +Delete the text between @var{start} and @var{end} in the current line. +Returns the number of characters deleted. +@end deftypefun + +@deftypefun {char *} rl_copy_text (int start, int end) +Return a copy of the text between @var{start} and @var{end} in +the current line. +@end deftypefun + +@deftypefun int rl_kill_text (int start, int end) +Copy the text between @var{start} and @var{end} in the current line +to the kill ring, appending or prepending to the last kill if the +last command was a kill command. The text is deleted. +If @var{start} is less than @var{end}, +the text is appended, otherwise prepended. If the last command was +not a kill, a new kill ring slot is used. +@end deftypefun + +@deftypefun int rl_push_macro_input (char *macro) +Cause @var{macro} to be inserted into the line, as if it had been invoked +by a key bound to a macro. Not especially useful; use +@code{rl_insert_text()} instead. +@end deftypefun + +@node Character Input +@subsection Character Input + +@deftypefun int rl_read_key (void) +Return the next character available from Readline's current input stream. +This handles input inserted into +the input stream via @var{rl_pending_input} (@pxref{Readline Variables}) +and @code{rl_stuff_char()}, macros, and characters read from the keyboard. +While waiting for input, this function will call any function assigned to +the @code{rl_event_hook} variable. +@end deftypefun + +@deftypefun int rl_getc (FILE *stream) +Return the next character available from @var{stream}, which is assumed to +be the keyboard. +@end deftypefun + +@deftypefun int rl_stuff_char (int c) +Insert @var{c} into the Readline input stream. It will be "read" +before Readline attempts to read characters from the terminal with +@code{rl_read_key()}. Up to 512 characters may be pushed back. +@code{rl_stuff_char} returns 1 if the character was successfully inserted; +0 otherwise. +@end deftypefun + +@deftypefun int rl_execute_next (int c) +Make @var{c} be the next command to be executed when @code{rl_read_key()} +is called. This sets @var{rl_pending_input}. +@end deftypefun + +@deftypefun int rl_clear_pending_input (void) +Unset @var{rl_pending_input}, effectively negating the effect of any +previous call to @code{rl_execute_next()}. This works only if the +pending input has not already been read with @code{rl_read_key()}. +@end deftypefun + +@deftypefun int rl_set_keyboard_input_timeout (int u) +While waiting for keyboard input in @code{rl_read_key()}, Readline will +wait for @var{u} microseconds for input before calling any function +assigned to @code{rl_event_hook}. @var{u} must be greater than or equal +to zero (a zero-length timeout is equivalent to a poll). +The default waiting period is one-tenth of a second. +Returns the old timeout value. +@end deftypefun + +@node Terminal Management +@subsection Terminal Management + +@deftypefun void rl_prep_terminal (int meta_flag) +Modify the terminal settings for Readline's use, so @code{readline()} +can read a single character at a time from the keyboard. +The @var{meta_flag} argument should be non-zero if Readline should +read eight-bit input. +@end deftypefun + +@deftypefun void rl_deprep_terminal (void) +Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in +the state in which it was before the most recent call to +@code{rl_prep_terminal()}. +@end deftypefun + +@deftypefun void rl_tty_set_default_bindings (Keymap kmap) +Read the operating system's terminal editing characters (as would be +displayed by @code{stty}) to their Readline equivalents. +The bindings are performed in @var{kmap}. +@end deftypefun + +@deftypefun void rl_tty_unset_default_bindings (Keymap kmap) +Reset the bindings manipulated by @code{rl_tty_set_default_bindings} so +that the terminal editing characters are bound to @code{rl_insert}. +The bindings are performed in @var{kmap}. +@end deftypefun + +@deftypefun int rl_reset_terminal (const char *terminal_name) +Reinitialize Readline's idea of the terminal settings using +@var{terminal_name} as the terminal type (e.g., @code{vt100}). +If @var{terminal_name} is @code{NULL}, the value of the @code{TERM} +environment variable is used. +@end deftypefun + +@node Utility Functions +@subsection Utility Functions + +@deftypefun int rl_save_state (struct readline_state *sp) +Save a snapshot of Readline's internal state to @var{sp}. +The contents of the @var{readline_state} structure are documented +in @file{readline.h}. +The caller is responsible for allocating the structure. +@end deftypefun + +@deftypefun int rl_restore_state (struct readline_state *sp) +Restore Readline's internal state to that stored in @var{sp}, which must +have been saved by a call to @code{rl_save_state}. +The contents of the @var{readline_state} structure are documented +in @file{readline.h}. +The caller is responsible for freeing the structure. +@end deftypefun + +@deftypefun void rl_free (void *mem) +Deallocate the memory pointed to by @var{mem}. @var{mem} must have been +allocated by @code{malloc}. +@end deftypefun + +@deftypefun void rl_replace_line (const char *text, int clear_undo) +Replace the contents of @code{rl_line_buffer} with @var{text}. +The point and mark are preserved, if possible. +If @var{clear_undo} is non-zero, the undo list associated with the +current line is cleared. +@end deftypefun + +@deftypefun void rl_extend_line_buffer (int len) +Ensure that @code{rl_line_buffer} has enough space to hold @var{len} +characters, possibly reallocating it if necessary. +@end deftypefun + +@deftypefun int rl_initialize (void) +Initialize or re-initialize Readline's internal state. +It's not strictly necessary to call this; @code{readline()} calls it before +reading any input. +@end deftypefun + +@deftypefun int rl_ding (void) +Ring the terminal bell, obeying the setting of @code{bell-style}. +@end deftypefun + +@deftypefun int rl_alphabetic (int c) +Return 1 if @var{c} is an alphabetic character. +@end deftypefun + +@deftypefun 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. @code{matches} is the list +of strings, in argv format, such as a list of completion matches. +@code{len} is the number of strings in @code{matches}, and @code{max} +is the length of the longest string in @code{matches}. This function uses +the setting of @code{print-completions-horizontally} to select how the +matches are displayed (@pxref{Readline Init File Syntax}). +When displaying completions, this function sets the number of columns used +for display to the value of @code{completion-display-width}, the value of +the environment variable @env{COLUMNS}, or the screen width, in that order. +@end deftypefun + +The following are implemented as macros, defined in @code{chardefs.h}. +Applications should refrain from using them. + +@deftypefun int _rl_uppercase_p (int c) +Return 1 if @var{c} is an uppercase alphabetic character. +@end deftypefun + +@deftypefun int _rl_lowercase_p (int c) +Return 1 if @var{c} is a lowercase alphabetic character. +@end deftypefun + +@deftypefun int _rl_digit_p (int c) +Return 1 if @var{c} is a numeric character. +@end deftypefun + +@deftypefun int _rl_to_upper (int c) +If @var{c} is a lowercase alphabetic character, return the corresponding +uppercase character. +@end deftypefun + +@deftypefun int _rl_to_lower (int c) +If @var{c} is an uppercase alphabetic character, return the corresponding +lowercase character. +@end deftypefun + +@deftypefun int _rl_digit_value (int c) +If @var{c} is a number, return the value it represents. +@end deftypefun + +@node Miscellaneous Functions +@subsection Miscellaneous Functions + +@deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) +Bind the key sequence @var{keyseq} to invoke the macro @var{macro}. +The binding is performed in @var{map}. When @var{keyseq} is invoked, the +@var{macro} will be inserted into the line. This function is deprecated; +use @code{rl_generic_bind()} instead. +@end deftypefun + +@deftypefun void rl_macro_dumper (int readable) +Print the key sequences bound to macros and their values, using +the current keymap, to @code{rl_outstream}. +If @var{readable} is non-zero, the list is formatted in such a way +that it can be made part of an @code{inputrc} file and re-read. +@end deftypefun + +@deftypefun int rl_variable_bind (const char *variable, const char *value) +Make the Readline variable @var{variable} have @var{value}. +This behaves as if the readline command +@samp{set @var{variable} @var{value}} had been executed in an @code{inputrc} +file (@pxref{Readline Init File Syntax}). +@end deftypefun + +@deftypefun {char *} rl_variable_value (const char *variable) +Return a string representing the value of the Readline variable @var{variable}. +For boolean variables, this string is either @samp{on} or @samp{off}. +@end deftypefun + +@deftypefun void rl_variable_dumper (int readable) +Print the readline variable names and their current values +to @code{rl_outstream}. +If @var{readable} is non-zero, the list is formatted in such a way +that it can be made part of an @code{inputrc} file and re-read. +@end deftypefun + +@deftypefun int rl_set_paren_blink_timeout (int u) +Set the time interval (in microseconds) that Readline waits when showing +a balancing character when @code{blink-matching-paren} has been enabled. +@end deftypefun + +@deftypefun {char *} rl_get_termcap (const char *cap) +Retrieve the string value of the termcap capability @var{cap}. +Readline fetches the termcap entry for the current terminal name and +uses those capabilities to move around the screen line and perform other +terminal-specific operations, like erasing a line. Readline does not +use all of a terminal's capabilities, and this function will return +values for only those capabilities Readline uses. +@end deftypefun + +@node Alternate Interface +@subsection Alternate Interface + +An alternate interface is available to plain @code{readline()}. Some +applications need to interleave keyboard I/O with file, device, or +window system I/O, typically by using a main loop to @code{select()} +on various file descriptors. To accomodate this need, readline can +also be invoked as a `callback' function from an event loop. There +are functions available to make this easy. + +@deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) +Set up the terminal for readline I/O and display the initial +expanded value of @var{prompt}. Save the value of @var{lhandler} to +use as a function to call when a complete line of input has been entered. +The function takes the text of the line as an argument. +@end deftypefun + +@deftypefun void rl_callback_read_char (void) +Whenever an application determines that keyboard input is available, it +should call @code{rl_callback_read_char()}, which will read the next +character from the current input source. +If that character completes the line, @code{rl_callback_read_char} will +invoke the @var{lhandler} function saved by @code{rl_callback_handler_install} +to process the line. +Before calling the @var{lhandler} function, the terminal settings are +reset to the values they had before calling +@code{rl_callback_handler_install}. +If the @var{lhandler} function returns, +the terminal settings are modified for Readline's use again. +@code{EOF} is indicated by calling @var{lhandler} with a +@code{NULL} line. +@end deftypefun + +@deftypefun void rl_callback_handler_remove (void) +Restore the terminal to its initial state and remove the line handler. +This may be called from within a callback as well as independently. +If the @var{lhandler} installed by @code{rl_callback_handler_install} +does not exit the program, either this function or the function referred +to by the value of @code{rl_deprep_term_function} should be called before +the program exits to reset the terminal settings. +@end deftypefun + +@node A Readline Example +@subsection A Readline Example + +Here is a function which changes lowercase characters to their uppercase +equivalents, and uppercase characters to lowercase. If +this function was bound to @samp{M-c}, then typing @samp{M-c} would +change the case of the character under point. Typing @samp{M-1 0 M-c} +would change the case of the following 10 characters, leaving the cursor on +the last character changed. + +@example +/* Invert the case of the COUNT following characters. */ +int +invert_case_line (count, key) + int count, key; +@{ + register int start, end, i; + + start = rl_point; + + if (rl_point >= rl_end) + return (0); + + if (count < 0) + @{ + direction = -1; + count = -count; + @} + else + direction = 1; + + /* Find the end of the range to modify. */ + end = start + (count * direction); + + /* Force it to be within range. */ + if (end > rl_end) + end = rl_end; + else if (end < 0) + end = 0; + + if (start == end) + return (0); + + if (start > end) + @{ + int temp = start; + start = end; + end = temp; + @} + + /* Tell readline that we are modifying the line, + so it will save the undo information. */ + rl_modifying (start, end); + + for (i = start; i != end; i++) + @{ + if (_rl_uppercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); + else if (_rl_lowercase_p (rl_line_buffer[i])) + rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]); + @} + /* Move point to on top of the last character changed. */ + rl_point = (direction == 1) ? end - 1 : start; + return (0); +@} +@end example + +@node Readline Signal Handling +@section 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 such a signal is received in order 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 (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, +@code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}). +When one of these signals is received, the signal handler +will reset the terminal attributes to those that were in effect before +@code{readline()} was called, reset the signal handling to what it was +before @code{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 @code{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 @code{rl_free_line_state()} below). + +There is an additional Readline signal handler, for @code{SIGWINCH}, which +the kernel sends to a process whenever the terminal's size changes (for +example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH} +handler updates Readline's internal screen size information, and then calls +any @code{SIGWINCH} signal handler the calling application has installed. +Readline calls the application's @code{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 @code{longjmp} back to a main processing loop), it @emph{must} +call @code{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 @code{readline()}, not in +a signal handler, so Readline's internal signal state is not corrupted. + +@deftypevar int rl_catch_signals +If this variable is non-zero, Readline will install signal handlers for +@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGALRM}, +@code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}. + +The default value of @code{rl_catch_signals} is 1. +@end deftypevar + +@deftypevar int rl_catch_sigwinch +If this variable is non-zero, Readline will install a signal handler for +@code{SIGWINCH}. + +The default value of @code{rl_catch_sigwinch} is 1. +@end deftypevar + +If an application does not wish to have Readline catch any signals, or +to handle signals other than those Readline catches (@code{SIGHUP}, +for example), +Readline provides convenience functions to do the necessary terminal +and internal state cleanup upon receipt of a signal. + +@deftypefun void rl_cleanup_after_signal (void) +This function will reset the state of the terminal to what it was before +@code{readline()} was called, and remove the Readline signal handlers for +all signals, depending on the values of @code{rl_catch_signals} and +@code{rl_catch_sigwinch}. +@end deftypefun + +@deftypefun 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 @code{rl_cleanup_after_signal()}. The +Readline signal handler for @code{SIGINT} calls this to abort the +current input line. +@end deftypefun + +@deftypefun void rl_reset_after_signal (void) +This will reinitialize the terminal and reinstall any Readline signal +handlers, depending on the values of @code{rl_catch_signals} and +@code{rl_catch_sigwinch}. +@end deftypefun + +If an application does not wish Readline to catch @code{SIGWINCH}, it may +call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force +Readline to update its idea of the terminal size when a @code{SIGWINCH} +is received. + +@deftypefun void rl_echo_signal_char (int sig) +If an application wishes to install its own signal handlers, but still +have readline display characters that generate signals, calling this +function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or +@code{SIGTSTP} will display the character generating that signal. +@end deftypefun + +@deftypefun void rl_resize_terminal (void) +Update Readline's internal screen size by reading values from the kernel. +@end deftypefun + +@deftypefun void rl_set_screen_size (int rows, int cols) +Set Readline's idea of the terminal size to @var{rows} rows and +@var{cols} columns. If either @var{rows} or @var{columns} is less than +or equal to 0, Readline's idea of that terminal dimension is unchanged. +@end deftypefun + +If an application does not want to install a @code{SIGWINCH} handler, but +is still interested in the screen dimensions, Readline's idea of the screen +size may be queried. + +@deftypefun void rl_get_screen_size (int *rows, int *cols) +Return Readline's idea of the terminal's size in the +variables pointed to by the arguments. +@end deftypefun + +@deftypefun void rl_reset_screen_size (void) +Cause Readline to reobtain the screen size and recalculate its dimensions. +@end deftypefun + +The following functions install and remove Readline's signal handlers. + +@deftypefun int rl_set_signals (void) +Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT}, +@code{SIGTERM}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, +@code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of +@code{rl_catch_signals} and @code{rl_catch_sigwinch}. +@end deftypefun + +@deftypefun int rl_clear_signals (void) +Remove all of the Readline signal handlers installed by +@code{rl_set_signals()}. +@end deftypefun + +@node Custom Completers +@section Custom Completers +@cindex application-specific completion functions + +Typically, a program that reads commands from the user has a way of +disambiguating commands and data. If your program is one of these, then +it can provide completion for commands, data, or both. +The following sections describe how your program and Readline +cooperate to provide this service. + +@menu +* How Completing Works:: The logic used to do completion. +* Completion Functions:: Functions provided by Readline. +* Completion Variables:: Variables which control completion. +* A Short Completion Example:: An example of writing completer subroutines. +@end menu + +@node How Completing Works +@subsection How Completing Works + +In order to complete some text, the full list of possible completions +must be available. That is, it is not possible to accurately +expand a partial word without knowing all of the possible words +which make sense in that context. The Readline library provides +the user interface to completion, and two of the most common +completion functions: filename and username. For completing other types +of text, you must write your own completion function. This section +describes exactly what such functions must do, and provides an example. + +There are three major functions used to perform completion: + +@enumerate +@item +The user-interface function @code{rl_complete()}. This function is +called with the same arguments as other bindable Readline functions: +@var{count} and @var{invoking_key}. +It isolates the word to be completed and calls +@code{rl_completion_matches()} to generate a list of possible completions. +It then either lists the possible completions, inserts the possible +completions, or actually performs the +completion, depending on which behavior is desired. + +@item +The internal function @code{rl_completion_matches()} uses an +application-supplied @dfn{generator} function to generate the list of +possible matches, and then returns the array of these matches. +The caller should place the address of its generator function in +@code{rl_completion_entry_function}. + +@item +The generator function is called repeatedly from +@code{rl_completion_matches()}, returning a string each time. The +arguments to the generator function are @var{text} and @var{state}. +@var{text} is the partial word to be completed. @var{state} is zero the +first time the function is called, allowing the generator to perform +any necessary initialization, and a positive non-zero integer for +each subsequent call. The generator function returns +@code{(char *)NULL} to inform @code{rl_completion_matches()} that there are +no more possibilities left. Usually the generator function computes the +list of possible completions when @var{state} is zero, and returns them +one at a time on subsequent calls. Each string the generator function +returns as a match must be allocated with @code{malloc()}; Readline +frees the strings when it has finished with them. +Such a generator function is referred to as an +@dfn{application-specific completion function}. + +@end enumerate + +@deftypefun int rl_complete (int ignore, int invoking_key) +Complete the word at or before point. You have supplied the function +that does the initial simple matching selection algorithm (see +@code{rl_completion_matches()}). The default is to do filename completion. +@end deftypefun + +@deftypevar {rl_compentry_func_t *} rl_completion_entry_function +This is a pointer to the generator function for +@code{rl_completion_matches()}. +If the value of @code{rl_completion_entry_function} is +@code{NULL} then the default filename generator +function, @code{rl_filename_completion_function()}, is used. +An @dfn{application-specific completion function} is a function whose +address is assigned to @code{rl_completion_entry_function} and whose +return values are used to generate possible completions. +@end deftypevar + +@node Completion Functions +@subsection Completion Functions + +Here is the complete list of callable completion functions present in +Readline. + +@deftypefun int rl_complete_internal (int what_to_do) +Complete the word at or before point. @var{what_to_do} says what to do +with the completion. A value of @samp{?} means list the possible +completions. @samp{TAB} means do standard completion. @samp{*} means +insert all of the possible completions. @samp{!} means to display +all of the possible completions, if there is more than one, as well as +performing partial completion. @samp{@@} is similar to @samp{!}, but +possible completions are not listed if the possible completions share +a common prefix. +@end deftypefun + +@deftypefun int rl_complete (int ignore, int invoking_key) +Complete the word at or before point. You have supplied the function +that does the initial simple matching selection algorithm (see +@code{rl_completion_matches()} and @code{rl_completion_entry_function}). +The default is to do filename +completion. This calls @code{rl_complete_internal()} with an +argument depending on @var{invoking_key}. +@end deftypefun + +@deftypefun int rl_possible_completions (int count, int invoking_key) +List the possible completions. See description of @code{rl_complete +()}. This calls @code{rl_complete_internal()} with an argument of +@samp{?}. +@end deftypefun + +@deftypefun int rl_insert_completions (int count, int invoking_key) +Insert the list of possible completions into the line, deleting the +partially-completed word. See description of @code{rl_complete()}. +This calls @code{rl_complete_internal()} with an argument of @samp{*}. +@end deftypefun + +@deftypefun int rl_completion_mode (rl_command_func_t *cfunc) +Returns the apppriate value to pass to @code{rl_complete_internal()} +depending on whether @var{cfunc} was called twice in succession and +the values of the @code{show-all-if-ambiguous} and +@code{show-all-if-unmodified} variables. +Application-specific completion functions may use this function to present +the same interface as @code{rl_complete()}. +@end deftypefun + +@deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) +Returns an array of strings which is a list of completions for +@var{text}. If there are no completions, returns @code{NULL}. +The first entry in the returned array is the substitution for @var{text}. +The remaining entries are the possible completions. The array is +terminated with a @code{NULL} pointer. + +@var{entry_func} is a function of two args, and returns a +@code{char *}. The first argument is @var{text}. The second is a +state argument; it is zero on the first call, and non-zero on subsequent +calls. @var{entry_func} returns a @code{NULL} pointer to the caller +when there are no more matches. +@end deftypefun + +@deftypefun {char *} rl_filename_completion_function (const char *text, int state) +A generator function for filename completion in the general case. +@var{text} is a partial filename. +The Bash source is a useful reference for writing application-specific +completion functions (the Bash completion functions call this and other +Readline functions). +@end deftypefun + +@deftypefun {char *} rl_username_completion_function (const char *text, int state) +A completion generator for usernames. @var{text} contains a partial +username preceded by a random character (usually @samp{~}). As with all +completion generators, @var{state} is zero on the first call and non-zero +for subsequent calls. +@end deftypefun + +@node Completion Variables +@subsection Completion Variables + +@deftypevar {rl_compentry_func_t *} rl_completion_entry_function +A pointer to the generator function for @code{rl_completion_matches()}. +@code{NULL} means to use @code{rl_filename_completion_function()}, +the default filename completer. +@end deftypevar + +@deftypevar {rl_completion_func_t *} rl_attempted_completion_function +A pointer to an alternative function to create matches. +The function is called with @var{text}, @var{start}, and @var{end}. +@var{start} and @var{end} are indices in @code{rl_line_buffer} defining +the boundaries of @var{text}, which is a character string. +If this function exists and returns @code{NULL}, or if this variable is +set to @code{NULL}, then @code{rl_complete()} will call the value of +@code{rl_completion_entry_function} to generate matches, otherwise the +array of strings returned will be used. +If this function sets the @code{rl_attempted_completion_over} +variable to a non-zero value, Readline will not perform its default +completion even if this function returns no matches. +@end deftypevar + +@deftypevar {rl_quote_func_t *} rl_filename_quoting_function +A pointer to a function that will quote a filename in an +application-specific fashion. This is called if filename completion is being +attempted and one of the characters in @code{rl_filename_quote_characters} +appears in a completed filename. The function is called with +@var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text} +is the filename to be quoted. The @var{match_type} is either +@code{SINGLE_MATCH}, if there is only one completion match, or +@code{MULT_MATCH}. Some functions use this to decide whether or not to +insert a closing quote character. The @var{quote_pointer} is a pointer +to any opening quote character the user typed. Some functions choose +to reset this character. +@end deftypevar + +@deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function +A pointer to a function that will remove application-specific quoting +characters from a filename before completion is attempted, so those +characters do not interfere with matching the text against names in +the filesystem. It is called with @var{text}, the text of the word +to be dequoted, and @var{quote_char}, which is the quoting character +that delimits the filename (usually @samp{'} or @samp{"}). If +@var{quote_char} is zero, the filename was not in an embedded string. +@end deftypevar + +@deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p +A pointer to a function to call that determines whether or not a specific +character in the line buffer is quoted, according to whatever quoting +mechanism the program calling Readline uses. The function is called with +two arguments: @var{text}, the text of the line, and @var{index}, the +index of the character in the line. It is used to decide whether a +character found in @code{rl_completer_word_break_characters} should be +used to break words for the completer. +@end deftypevar + +@deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function +This function, if defined, is called by the completer when real filename +completion is done, after all the matching names have been generated. +It is passed a @code{NULL} terminated array of matches. +The first element (@code{matches[0]}) is the +maximal substring common to all matches. This function can +re-arrange the list of matches as required, but each element deleted +from the array must be freed. +@end deftypevar + +@deftypevar {rl_icppfunc_t *} rl_directory_completion_hook +This function, if defined, is allowed to modify the directory portion +of filenames Readline completes. +It could be used to expand symbolic links or shell variables in pathnames. +It is called with the address of a string (the current directory name) as an +argument, and may modify that string. +If the string is replaced with a new string, the old value should be freed. +Any modified directory name should have a trailing slash. +The modified value will be used as part of the completion, replacing +the directory portion of the pathname the user typed. +At the least, even if no other expansion is performed, this function should +remove any quote characters from the directory name, because its result will +be passed directly to @code{opendir()}. +The directory completion hook returns an integer that should be non-zero if +the function modifies its directory argument. +The function should not modify the directory argument if it returns 0. +@end deftypevar + +@ignore +@deftypevar extern rl_icppfunc_t *rl_directory_rewrite_hook; +If non-zero, this is the address of a function to call when completing +a directory name. This function takes the address of the directory name +to be modified as an argument. Unlike @code{rl_directory_completion_hook}, +it only modifies the directory name used in @code{opendir}, not what is +displayed when the possible completions are printed or inserted. It is +called before rl_directory_completion_hook. + +I'm not happy with how this works yet, so it's undocumented. +@end deftypevar +@end ignore + +@deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook +If non-zero, this is the address of a function called when reading +directory entries from the filesystem for completion and comparing +them to the partial word to be completed. The function should +perform any necesary application or system-specific conversion on +the filename, such as converting between character sets or converting +from a filesystem format to a character input format. +The function takes two arguments: @var{fname}, the filename to be converted, +and @var{fnlen}, its length in bytes. +It must either return its first argument (if no conversion takes place) +or the converted filename in newly-allocated memory. The converted +form is used to compare against the word to be completed, and, if it +matches, is added to the list of matches. Readline will free the +allocated string. +@end deftypevar + +@deftypevar {rl_compdisp_func_t *} 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: +(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length}) +where @var{matches} is the array of matching strings, +@var{num_matches} is the number of strings in that array, and +@var{max_length} is the length of the longest string in that array. +Readline provides a convenience function, @code{rl_display_match_list}, +that takes care of doing the display to Readline's output stream. That +function may be called from this hook. +@end deftypevar + +@deftypevar {const 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: +@code{" \t\n\"\\'`@@$><=;|&@{("}. +@end deftypevar + +@deftypevar {const char *} rl_basic_quote_characters +A list of quote characters which can cause a word break. +@end deftypevar + +@deftypevar {const char *} rl_completer_word_break_characters +The list of characters that signal a break between words for +@code{rl_complete_internal()}. The default list is the value of +@code{rl_basic_word_break_characters}. +@end deftypevar + +@deftypevar {rl_cpvfunc_t *} rl_completion_word_break_hook +If non-zero, this is the address of a function to call when Readline is +deciding where to separate words for word completion. It should return +a character string like @code{rl_completer_word_break_characters} to be +used to perform the current completion. The function may choose to set +@code{rl_completer_word_break_characters} itself. If the function +returns @code{NULL}, @code{rl_completer_word_break_characters} is used. +@end deftypevar + +@deftypevar {const char *} rl_completer_quote_characters +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} are treated as any other character, +unless they also appear within this list. +@end deftypevar + +@deftypevar {const 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. +@end deftypevar + +@deftypevar {const char *} rl_special_prefixes +The list of characters that are word break characters, but should be +left in @var{text} when it is passed to the completion function. +Programs can use this to help determine what kind of completing to do. +For instance, Bash sets this variable to "$@@" so that it can complete +shell variables and hostnames. +@end deftypevar + +@deftypevar int rl_completion_query_items +Up to this many items will be displayed in response to a +possible-completions call. After that, readline asks the user if she is sure +she wants to see them all. The default value is 100. A negative value +indicates that Readline should never ask the user. +@end deftypevar + +@deftypevar {int} rl_completion_append_character +When a single completion alternative matches at the end of the command +line, this character is appended to the inserted completion text. The +default is a space character (@samp{ }). Setting this to the null +character (@samp{\0}) prevents anything being appended automatically. +This can be changed in application-specific completion functions to +provide the ``most sensible word separator character'' according to +an application-specific command line syntax specification. +@end deftypevar + +@deftypevar int rl_completion_suppress_append +If non-zero, @var{rl_completion_append_character} is not appended to +matches at the end of the command line, as described above. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. +@end deftypevar + +@deftypevar int rl_completion_quote_character +When Readline is completing quoted text, as delimited by one of the +characters in @var{rl_completer_quote_characters}, it sets this variable +to the quoting character found. +This is set before any application-specific completion function is called. +@end deftypevar + +@deftypevar int rl_completion_suppress_quote +If non-zero, Readline does not append a matching quote character when +performing completion on a quoted string. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. +@end deftypevar + +@deftypevar int rl_completion_found_quote +When Readline is completing quoted text, it sets this variable +to a non-zero value if the word being completed contains or is delimited +by any quoting characters, including backslashes. +This is set before any application-specific completion function is called. +@end deftypevar + +@deftypevar int rl_completion_mark_symlink_dirs +If non-zero, a slash will be appended to completed filenames that are +symbolic links to directory names, subject to the value of the +user-settable @var{mark-directories} variable. +This variable exists so that application-specific completion functions +can override the user's global preference (set via the +@var{mark-symlinked-directories} Readline variable) if appropriate. +This variable is set to the user's preference before any +application-specific completion function is called, so unless that +function modifies the value, the user's preferences are honored. +@end deftypevar + +@deftypevar int rl_ignore_completion_duplicates +If non-zero, then duplicates in the matches are removed. +The default is 1. +@end deftypevar + +@deftypevar int rl_filename_completion_desired +Non-zero means that the results of the matches are to be treated as +filenames. This is @emph{always} zero when completion is attempted, +and can only be changed +within an application-specific completion function. If it is set to a +non-zero value by such a function, directory names have a slash appended +and Readline attempts to quote completed filenames if they contain any +characters in @code{rl_filename_quote_characters} and +@code{rl_filename_quoting_desired} is set to a non-zero value. +@end deftypevar + +@deftypevar int rl_filename_quoting_desired +Non-zero means that the results of the matches are to be quoted using +double quotes (or an application-specific quoting mechanism) if the +completed filename contains any characters in +@code{rl_filename_quote_chars}. This is @emph{always} non-zero +when completion is attempted, and can only be changed within an +application-specific completion function. +The quoting is effected via a call to the function pointed to +by @code{rl_filename_quoting_function}. +@end deftypevar + +@deftypevar int rl_attempted_completion_over +If an application-specific completion function assigned to +@code{rl_attempted_completion_function} sets this variable to a non-zero +value, Readline will not perform its default filename completion even +if the application's completion function returns no matches. +It should be set only by an application's completion function. +@end deftypevar + +@deftypevar int rl_sort_completion_matches +If an application sets this variable to 0, Readline will not sort the +list of completions (which implies that it cannot remove any duplicate +completions). The default value is 1, which means that Readline will +sort the completions and, depending on the value of +@code{rl_ignore_completion_duplicates}, will attempt to remove duplicate +matches. +@end deftypevar + +@deftypevar int rl_completion_type +Set to a character describing the type of completion Readline is currently +attempting; see the description of @code{rl_complete_internal()} +(@pxref{Completion Functions}) for the list of characters. +This is set to the appropriate value before any application-specific +completion function is called, allowing such functions to present +the same interface as @code{rl_complete()}. +@end deftypevar + +@deftypevar int rl_completion_invoking_key +Set to the final character in the key sequence that invoked one of the +completion functions that call @code{rl_complete_internal()}. This is +set to the appropriate value before any application-specific completion +function is called. +@end deftypevar + +@deftypevar int rl_inhibit_completion +If this variable is non-zero, completion is inhibited. The completion +character will be inserted as any other bound to @code{self-insert}. +@end deftypevar + +@node A Short Completion Example +@subsection A Short Completion Example + +Here is a small application demonstrating the use of the GNU Readline +library. It is called @code{fileman}, and the source code resides in +@file{examples/fileman.c}. This sample application provides +completion of command names, line editing features, and access to the +history list. + +@page +@smallexample +/* fileman.c -- A tiny application which demonstrates how to use the + GNU Readline library. This application interactively allows users + to manipulate files and their modes. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> +#ifdef HAVE_SYS_FILE_H +# include <sys/file.h> +#endif +#include <sys/stat.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include <fcntl.h> +#include <stdio.h> +#include <errno.h> + +#if defined (HAVE_STRING_H) +# include <string.h> +#else /* !HAVE_STRING_H */ +# include <strings.h> +#endif /* !HAVE_STRING_H */ + +#ifdef HAVE_STDLIB_H +# include <stdlib.h> +#endif + +#include <time.h> + +#include <readline/readline.h> +#include <readline/history.h> + +extern char *xmalloc PARAMS((size_t)); + +/* The names of functions that actually do the manipulation. */ +int com_list PARAMS((char *)); +int com_view PARAMS((char *)); +int com_rename PARAMS((char *)); +int com_stat PARAMS((char *)); +int com_pwd PARAMS((char *)); +int com_delete PARAMS((char *)); +int com_help PARAMS((char *)); +int com_cd PARAMS((char *)); +int com_quit PARAMS((char *)); + +/* A structure which contains information on the commands this program + can understand. */ + +typedef struct @{ + char *name; /* User printable name of the function. */ + rl_icpfunc_t *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, (rl_icpfunc_t *)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) + char *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 PARAMS((const char *, int)); +char **fileman_completion PARAMS((const char *, int, int)); + +/* 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 = 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) + const 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 = rl_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) + const 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; + +#if defined (__MSDOS__) + /* more.com doesn't grok slashes in pathnames */ + sprintf (syscom, "less %s", arg); +#else + sprintf (syscom, "more %s", arg); +#endif + 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 = getcwd (dir, sizeof(dir) - 1); + if (s == 0) + @{ + printf ("Error getting pwd: %s\n", dir); + return 1; + @} + + printf ("Current directory is %s\n", dir); + return 0; +@} + +/* The user wishes to quit using this program. Just set DONE non-zero. */ +com_quit (arg) + char *arg; +@{ + done = 1; + return (0); +@} + +/* Function which tells you that you can't do this. */ +too_dangerous (caller) + char *caller; +@{ + fprintf (stderr, + "%s: Too dangerous for me to distribute. Write it yourself.\n", + caller); +@} + +/* Return non-zero if ARG is a valid argument for CALLER, else print + an error message and return zero. */ +int +valid_argument (caller, arg) + char *caller, *arg; +@{ + if (!arg || !*arg) + @{ + fprintf (stderr, "%s: Argument required.\n", caller); + return (0); + @} + + return (1); +@} +@end smallexample diff --git a/readline-6.2/doc/rluser.texi b/readline-6.2/doc/rluser.texi new file mode 100644 index 0000000..8a69c99 --- /dev/null +++ b/readline-6.2/doc/rluser.texi @@ -0,0 +1,2037 @@ +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename rluser.info +@comment %**end of header (This is for running Texinfo on a region.) + +@ignore +This file documents the end user interface to the GNU command line +editing features. It is to be an appendix to manuals for programs which +use these features. There is a document entitled "readline.texinfo" +which contains both end-user and programmer documentation for the +GNU Readline Library. + +Copyright (C) 1988--2011 Free Software Foundation, Inc. + +Authored by Brian Fox and Chet Ramey. + +Permission is granted to process this file through Tex and print the +results, provided the printed document carries copying permission notice +identical to this one except for the removal of this paragraph (this +paragraph not being relevant to the printed manual). + +Permission is granted to make and distribute verbatim copies of this manual +provided the copyright notice and this permission notice are preserved on +all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +GNU Copyright statement is available to the distributee, and provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions. +@end ignore + +@comment If you are including this manual as an appendix, then set the +@comment variable readline-appendix. + +@ifclear BashFeatures +@defcodeindex bt +@end ifclear + +@node Command Line Editing +@chapter Command Line Editing + +This chapter describes the basic features of the @sc{gnu} +command line editing interface. +@ifset BashFeatures +Command line editing is provided by the Readline library, which is +used by several different programs, including Bash. +Command line editing is enabled by default when using an interactive shell, +unless the @option{--noediting} option is supplied at shell invocation. +Line editing is also used when using the @option{-e} option to the +@code{read} builtin command (@pxref{Bash Builtins}). +By default, the line editing commands are similar to those of Emacs. +A vi-style line editing interface is also available. +Line editing can be enabled at any time using the @option{-o emacs} or +@option{-o vi} options to the @code{set} builtin command +(@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or +@option{+o vi} options to @code{set}. +@end ifset + +@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. +@ifset BashFeatures +* Programmable Completion:: How to specify the possible completions for + a specific command. +* Programmable Completion Builtins:: Builtin commands to specify how to + complete arguments for a particular command. +@end ifset +@end menu + +@node Introduction and Notation +@section Introduction to Line Editing + +The following paragraphs describe the notation used to represent +keystrokes. + +The text @kbd{C-k} is read as `Control-K' and describes the character +produced when the @key{k} key is pressed while the Control key +is depressed. + +The text @kbd{M-k} is read as `Meta-K' and describes the character +produced when the Meta key (if you have one) is depressed, and the @key{k} +key is pressed. +The Meta key is labeled @key{ALT} on many keyboards. +On keyboards with two keys labeled @key{ALT} (usually to either side of +the space bar), the @key{ALT} on the left side is generally set to +work as a Meta key. +The @key{ALT} key on the right may also be configured to work as a +Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. + +If you do not have a Meta or @key{ALT} key, or another key working as +a Meta key, the identical keystroke can be generated by typing @key{ESC} +@emph{first}, and then typing @key{k}. +Either process is known as @dfn{metafying} the @key{k} key. + +The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the +character produced by @dfn{metafying} @kbd{C-k}. + +In addition, several keys have their own names. Specifically, +@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all +stand for themselves when seen in this text, or in an init file +(@pxref{Readline Init File}). +If your keyboard lacks a @key{LFD} key, typing @key{C-j} will +produce the desired character. +The @key{RET} key may be labeled @key{Return} or @key{Enter} on +some keyboards. + +@node Readline Interaction +@section Readline Interaction +@cindex interaction, readline + +Often during an interactive session you type in a long line of text, +only to notice that the first word on the line is misspelled. The +Readline library gives you a set of commands for manipulating the text +as you type it in, allowing you to just fix your typo, and not forcing +you to retype the majority of the line. Using these editing commands, +you move the cursor to the place that needs correction, and delete or +insert the text of the corrections. Then, when you are satisfied with +the line, you simply press @key{RET}. You do not have to be at the +end of the line to press @key{RET}; the entire line is accepted +regardless of the location of the cursor within the line. + +@menu +* Readline Bare Essentials:: The least you need to know about Readline. +* Readline Movement Commands:: Moving about the input line. +* Readline Killing Commands:: How to delete text, and how to get it back! +* Readline Arguments:: Giving numeric arguments to commands. +* Searching:: Searching through previous lines. +@end menu + +@node Readline Bare Essentials +@subsection Readline Bare Essentials +@cindex notation, readline +@cindex command editing +@cindex editing command lines + +In order to enter characters into the line, simply type them. The typed +character appears where the cursor was, and then the cursor moves one +space to the right. If you mistype a character, you can use your +erase character to back up and delete the mistyped character. + +Sometimes you may mistype a character, and +not notice the error until you have typed several other characters. In +that case, you can type @kbd{C-b} 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}. + +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 bare +essentials for editing the text of an input line follows. + +@table @asis +@item @kbd{C-b} +Move back one character. +@item @kbd{C-f} +Move forward one character. +@item @key{DEL} or @key{Backspace} +Delete the character to the left of the cursor. +@item @kbd{C-d} +Delete the character underneath the cursor. +@item @w{Printing characters} +Insert the character into the line at the cursor. +@item @kbd{C-_} or @kbd{C-x C-u} +Undo the last editing command. You can undo all the way back to an +empty line. +@end table + +@noindent +(Depending on your configuration, the @key{Backspace} key be set to +delete the character to the left of the cursor and the @key{DEL} key set +to delete the character underneath the cursor, like @kbd{C-d}, rather +than the character to the left of the cursor.) + +@node Readline Movement Commands +@subsection Readline Movement Commands + + +The above table describes the most basic 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{C-f}, +@kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly +about the line. + +@table @kbd +@item C-a +Move to the start of the line. +@item C-e +Move to the end of the line. +@item M-f +Move forward a word, where a word is composed of letters and digits. +@item M-b +Move backward a word. +@item C-l +Clear the screen, reprinting the current line at the top. +@end table + +Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves +forward a word. It is a loose convention that control keystrokes +operate on characters while meta keystrokes operate on words. + +@node Readline Killing Commands +@subsection Readline Killing Commands + +@cindex killing text +@cindex yanking text + +@dfn{Killing} text means to delete the text from the line, but to save +it away for later use, usually by @dfn{yanking} (re-inserting) +it back into the line. +(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) + +If the description for a command says that it `kills' text, then you can +be sure that you can get the text back in a different (or the same) +place later. + +When you use a kill command, the text is saved in a @dfn{kill-ring}. +Any number of consecutive kills save all of the killed text together, so +that when you yank it back, you get it all. The kill +ring is not line specific; the text that you killed on a previously +typed line is available to be yanked back later, when you are typing +another line. +@cindex kill ring + +Here is the list of commands for killing text. + +@table @kbd +@item C-k +Kill the text from the current cursor position to the end of the line. + +@item M-d +Kill from the cursor to the end of the current word, or, if between +words, to the end of the next word. +Word boundaries are the same as those used by @kbd{M-f}. + +@item M-@key{DEL} +Kill from the cursor the start of the current word, or, if between +words, to the start of the previous word. +Word boundaries are the same as those used by @kbd{M-b}. + +@item C-w +Kill from the cursor to the previous whitespace. This is different than +@kbd{M-@key{DEL}} because the word boundaries differ. + +@end table + +Here is how to @dfn{yank} the text back into the line. Yanking +means to copy the most-recently-killed text from the kill buffer. + +@table @kbd +@item C-y +Yank the most recently killed text back into the buffer at the cursor. + +@item M-y +Rotate the kill-ring, and yank the new top. You can only do this if +the prior command is @kbd{C-y} or @kbd{M-y}. +@end table + +@node Readline Arguments +@subsection Readline Arguments + +You can pass numeric arguments to Readline commands. Sometimes the +argument acts as a repeat count, other times it is the @i{sign} of the +argument that is significant. If you pass a negative argument to a +command which normally acts in a forward direction, that command will +act in a backward direction. For example, to kill text back to the +start of the line, you might type @samp{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 (@samp{-}), 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} command an argument of 10, you could type @samp{M-1 0 C-d}, +which will delete the next ten characters on the input line. + +@node Searching +@subsection Searching for Commands in the History + +Readline provides commands for searching through the command history +@ifset BashFeatures +(@pxref{Bash History Facilities}) +@end ifset +for lines containing a specified string. +There are two search modes: @dfn{incremental} and @dfn{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. +To search backward in the history for a particular string, type +@kbd{C-r}. Typing @kbd{C-s} searches forward through the history. +The characters present in the value of the @code{isearch-terminators} variable +are used to terminate an incremental search. +If that variable has not been assigned a value, the @key{ESC} and +@kbd{C-J} characters will terminate an incremental search. +@kbd{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 @kbd{C-r} or +@kbd{C-s} 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 @key{RET} will terminate the search and accept +the line, thereby executing the command from the history list. +A movement command will terminate the search, make the last line found +the current line, and begin editing. + +Readline remembers the last incremental search string. If two +@kbd{C-r}s are typed without any intervening characters defining a new +search string, any remembered search string is used. + +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. + +@node Readline Init File +@section Readline Init File +@cindex initialization file, readline + +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 @dfn{inputrc} file, conventionally in his home directory. +The name of this +@ifset BashFeatures +file is taken from the value of the shell variable @env{INPUTRC}. If +@end ifset +@ifclear BashFeatures +file is taken from the value of the environment variable @env{INPUTRC}. If +@end ifclear +that variable is unset, the default is @file{~/.inputrc}. If that +file does not exist or cannot be read, the ultimate default is +@file{/etc/inputrc}. + +When a program which uses the Readline library starts up, the +init file is read, and the key bindings are set. + +In addition, the @code{C-x C-r} command re-reads this init file, thus +incorporating any changes that you might have made to it. + +@menu +* Readline Init File Syntax:: Syntax for the commands in the inputrc file. + +* Conditional Init Constructs:: Conditional key bindings in the inputrc file. + +* Sample Init File:: An example inputrc file. +@end menu + +@node Readline Init File Syntax +@subsection Readline Init File Syntax + +There are only a few basic constructs allowed in the +Readline init file. Blank lines are ignored. +Lines beginning with a @samp{#} are comments. +Lines beginning with a @samp{$} indicate conditional +constructs (@pxref{Conditional Init Constructs}). Other lines +denote variable settings and key bindings. + +@table @asis +@item Variable Settings +You can modify the run-time behavior of Readline by +altering the values of variables in Readline +using the @code{set} command within the init file. +The syntax is simple: + +@example +set @var{variable} @var{value} +@end example + +@noindent +Here, for example, is how to +change from the default Emacs-like key binding to use +@code{vi} line editing commands: + +@example +set editing-mode vi +@end example + +Variable names and values, where appropriate, are recognized without regard +to case. Unrecognized variable names are ignored. + +Boolean variables (those that can be set to on or off) are set to on if +the value is null or empty, @var{on} (case-insensitive), or 1. Any other +value results in the variable being set to off. + +@ifset BashFeatures +The @w{@code{bind -V}} command lists the current Readline variable names +and values. @xref{Bash Builtins}. +@end ifset + +A great deal of run-time behavior is changeable with the following +variables. + +@cindex variables, readline +@table @code + +@item bell-style +@vindex bell-style +Controls what happens when Readline wants to ring the terminal bell. +If set to @samp{none}, Readline never rings the bell. If set to +@samp{visible}, Readline uses a visible bell if one is available. +If set to @samp{audible} (the default), Readline attempts to ring +the terminal's bell. + +@item bind-tty-special-chars +@vindex bind-tty-special-chars +If set to @samp{on}, Readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their Readline +equivalents. + +@item comment-begin +@vindex comment-begin +The string to insert at the beginning of the line when the +@code{insert-comment} command is executed. The default value +is @code{"#"}. + +@item completion-display-width +@vindex completion-display-width +The number of screen columns used to display possible matches +when performing completion. +The value is ignored if it is less than 0 or greater than the terminal +screen width. +A value of 0 will cause matches to be displayed one per line. +The default value is -1. + +@item completion-ignore-case +@vindex completion-ignore-case +If set to @samp{on}, Readline performs filename matching and completion +in a case-insensitive fashion. +The default value is @samp{off}. + +@item completion-map-case +@vindex completion-map-case +If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline +treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when +performing case-insensitive filename matching and completion. + +@item completion-prefix-display-length +@vindex completion-prefix-display-length +The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. + +@item completion-query-items +@vindex completion-query-items +The number of possible completions that determines when the user is +asked whether the list of possibilities should be displayed. +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. +This variable must be set to an integer value greater than or equal to 0. +A negative value means Readline should never ask. +The default limit is @code{100}. + +@item convert-meta +@vindex convert-meta +If set to @samp{on}, Readline will convert characters with the +eighth bit set to an @sc{ascii} key sequence by stripping the eighth +bit and prefixing an @key{ESC} character, converting them to a +meta-prefixed key sequence. The default value is @samp{on}. + +@item disable-completion +@vindex disable-completion +If set to @samp{On}, Readline will inhibit word completion. +Completion characters will be inserted into the line as if they had +been mapped to @code{self-insert}. The default is @samp{off}. + +@item editing-mode +@vindex editing-mode +The @code{editing-mode} variable controls which 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} or @samp{vi}. + +@item echo-control-characters +When set to @samp{on}, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. The default is @samp{on}. + +@item enable-keypad +@vindex enable-keypad +When set to @samp{on}, Readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. The default is @samp{off}. + +@item enable-meta-key +When set to @samp{on}, Readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +The default is @samp{on}. + +@item expand-tilde +@vindex expand-tilde +If set to @samp{on}, tilde expansion is performed when Readline +attempts word completion. The default is @samp{off}. + +@item history-preserve-point +@vindex history-preserve-point +If set to @samp{on}, the history code attempts to place the point (the +current cursor position) at the +same location on each history line retrieved with @code{previous-history} +or @code{next-history}. The default is @samp{off}. + +@item history-size +@vindex history-size +Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. + +@item horizontal-scroll-mode +@vindex horizontal-scroll-mode +This variable can be set to either @samp{on} or @samp{off}. Setting it +to @samp{on} means that the text of the lines 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}. + +@item input-meta +@vindex input-meta +@vindex meta-flag +If set to @samp{on}, Readline will enable eight-bit input (it +will not clear the eighth bit in the characters it reads), +regardless of what the terminal claims it can support. The +default value is @samp{off}. The name @code{meta-flag} is a +synonym for this variable. + +@item isearch-terminators +@vindex isearch-terminators +The string of characters that should terminate an incremental search without +subsequently executing the character as a command (@pxref{Searching}). +If this variable has not been given a value, the characters @key{ESC} and +@kbd{C-J} will terminate an incremental search. + +@item keymap +@vindex keymap +Sets Readline's idea of the current keymap for key binding commands. +Acceptable @code{keymap} names are +@code{emacs}, +@code{emacs-standard}, +@code{emacs-meta}, +@code{emacs-ctlx}, +@code{vi}, +@code{vi-move}, +@code{vi-command}, and +@code{vi-insert}. +@code{vi} is equivalent to @code{vi-command}; @code{emacs} is +equivalent to @code{emacs-standard}. The default value is @code{emacs}. +The value of the @code{editing-mode} variable also affects the +default keymap. + +@item mark-directories +If set to @samp{on}, completed directory names have a slash +appended. The default is @samp{on}. + +@item mark-modified-lines +@vindex mark-modified-lines +This variable, when set to @samp{on}, causes Readline to display an +asterisk (@samp{*}) at the start of history lines which have been modified. +This variable is @samp{off} by default. + +@item mark-symlinked-directories +@vindex mark-symlinked-directories +If set to @samp{on}, completed names which are symbolic links +to directories have a slash appended (subject to the value of +@code{mark-directories}). +The default is @samp{off}. + +@item match-hidden-files +@vindex match-hidden-files +This variable, when set to @samp{on}, causes Readline to match files whose +names begin with a @samp{.} (hidden files) when performing filename +completion. +If set to @samp{off}, the leading @samp{.} must be +supplied by the user in the filename to be completed. +This variable is @samp{on} by default. + +@item menu-complete-display-prefix +@vindex menu-complete-display-prefix +If set to @samp{on}, menu completion displays the common prefix of the +list of possible completions (which may be empty) before cycling through +the list. The default is @samp{off}. + +@item output-meta +@vindex output-meta +If set to @samp{on}, Readline will display characters with the +eighth bit set directly rather than as a meta-prefixed escape +sequence. The default is @samp{off}. + +@item page-completions +@vindex page-completions +If set to @samp{on}, Readline uses an internal @code{more}-like pager +to display a screenful of possible completions at a time. +This variable is @samp{on} by default. + +@item print-completions-horizontally +If set to @samp{on}, Readline will display completions with matches +sorted horizontally in alphabetical order, rather than down the screen. +The default is @samp{off}. + +@item revert-all-at-newline +@vindex revert-all-at-newline +If set to @samp{on}, Readline will undo all changes to history lines +before returning when @code{accept-line} is executed. By default, +history lines may be modified and retain individual undo lists across +calls to @code{readline}. The default is @samp{off}. + +@item show-all-if-ambiguous +@vindex show-all-if-ambiguous +This alters the default behavior of the completion functions. If +set to @samp{on}, +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +The default value is @samp{off}. + +@item show-all-if-unmodified +@vindex show-all-if-unmodified +This alters the default behavior of the completion functions in +a fashion similar to @var{show-all-if-ambiguous}. +If set to @samp{on}, +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +The default value is @samp{off}. + +@item skip-completed-text +@vindex skip-completed-text +If set to @samp{on}, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +For instance, if this is enabled, attempting completion when the cursor +is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile} +rather than @samp{Makefilefile}, assuming there is a single possible +completion. +The default value is @samp{off}. + +@item visible-stats +@vindex visible-stats +If set to @samp{on}, a character denoting a file's type +is appended to the filename when listing possible +completions. The default is @samp{off}. + +@end table + +@item Key Bindings +The syntax for controlling key bindings in the init file is +simple. First you need to find 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 on a line +in the init file the name of the key +you wish to bind the command to, a colon, and then the name of the +command. +There can be no space between the key name and the colon -- that will be +interpreted as part of the key name. +The name of the key can be expressed in different ways, depending on +what you find most comfortable. + +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a @var{macro}). + +@ifset BashFeatures +The @w{@code{bind -p}} command displays Readline function names and +bindings in a format that can put directly into an initialization file. +@xref{Bash Builtins}. +@end ifset + +@table @asis +@item @w{@var{keyname}: @var{function-name} or @var{macro}} +@var{keyname} is the name of a key spelled out in English. For example: +@example +Control-u: universal-argument +Meta-Rubout: backward-kill-word +Control-o: "> output" +@end example + +In the above example, @kbd{C-u} is bound to the function +@code{universal-argument}, +@kbd{M-DEL} is bound to the function @code{backward-kill-word}, and +@kbd{C-o} is bound to run the macro +expressed on the right hand side (that is, to insert the text +@samp{> output} into the line). + +A number of symbolic character names are recognized while +processing this key binding syntax: +@var{DEL}, +@var{ESC}, +@var{ESCAPE}, +@var{LFD}, +@var{NEWLINE}, +@var{RET}, +@var{RETURN}, +@var{RUBOUT}, +@var{SPACE}, +@var{SPC}, +and +@var{TAB}. + +@item @w{"@var{keyseq}": @var{function-name} or @var{macro}} +@var{keyseq} differs from @var{keyname} above in that strings +denoting an entire key sequence can be specified, by placing +the key sequence in double quotes. Some @sc{gnu} Emacs style key +escapes can be used, as in the following example, but the +special character names are not recognized. + +@example +"\C-u": universal-argument +"\C-x\C-r": re-read-init-file +"\e[11~": "Function Key 1" +@end example + +In the above example, @kbd{C-u} is again bound to the function +@code{universal-argument} (just as it was in the first example), +@samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file}, +and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert +the text @samp{Function Key 1}. + +@end table + +The following @sc{gnu} Emacs style escape sequences are available when +specifying key sequences: + +@table @code +@item @kbd{\C-} +control prefix +@item @kbd{\M-} +meta prefix +@item @kbd{\e} +an escape character +@item @kbd{\\} +backslash +@item @kbd{\"} +@key{"}, a double quotation mark +@item @kbd{\'} +@key{'}, a single quote or apostrophe +@end table + +In addition to the @sc{gnu} Emacs style escape sequences, a second +set of backslash escapes is available: + +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \d +delete +@item \f +form feed +@item \n +newline +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \@var{nnn} +the eight-bit character whose value is the octal value @var{nnn} +(one to three digits) +@item \x@var{HH} +the eight-bit character whose value is the hexadecimal value @var{HH} +(one or two hex digits) +@end table + +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{"} and @samp{'}. +For example, the following binding will make @samp{@kbd{C-x} \} +insert a single @samp{\} into the line: +@example +"\C-x\\": "\\" +@end example + +@end table + +@node Conditional Init Constructs +@subsection Conditional Init Constructs + +Readline implements a facility similar in spirit to the conditional +compilation features of the C preprocessor which allows key +bindings and variable settings to be performed as the result +of tests. There are four parser directives used. + +@table @code +@item $if +The @code{$if} construct allows bindings to be made based on the +editing mode, the terminal being used, or the application using +Readline. The text of the test extends to the end of the line; +no characters are required to isolate it. + +@table @code +@item mode +The @code{mode=} form of the @code{$if} directive is used to test +whether Readline is in @code{emacs} or @code{vi} mode. +This may be used in conjunction +with the @samp{set keymap} command, for instance, to set bindings in +the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if +Readline is starting out in @code{emacs} mode. + +@item term +The @code{term=} form may be used to include terminal-specific +key bindings, perhaps to bind the key sequences output by the +terminal's function keys. The word on the right side of the +@samp{=} is tested against both the full name of the terminal and +the portion of the terminal name before the first @samp{-}. This +allows @code{sun} to match both @code{sun} and @code{sun-cmd}, +for instance. + +@item application +The @var{application} construct is used to include +application-specific settings. Each program using the Readline +library sets the @var{application name}, and you can test for +a particular value. +This could be used to bind key sequences to functions useful for +a specific program. For instance, the following command adds a +key sequence that quotes the current or previous word in Bash: +@example +$if Bash +# Quote the current or previous word +"\C-xq": "\eb\"\ef\"" +$endif +@end example +@end table + +@item $endif +This command, as seen in the previous example, terminates an +@code{$if} command. + +@item $else +Commands in this branch of the @code{$if} directive are executed if +the test fails. + +@item $include +This directive takes a single filename as an argument and reads commands +and bindings from that file. +For example, the following directive reads from @file{/etc/inputrc}: +@example +$include /etc/inputrc +@end example +@end table + +@node Sample Init File +@subsection Sample Init File + +Here is an example of an @var{inputrc} file. This illustrates key +binding, variable assignment, and conditional syntax. + +@example +@page +# This file controls the behaviour of line input editing for +# programs that use the GNU Readline library. Existing +# programs include FTP, Bash, and GDB. +# +# You can re-read the inputrc file with C-x C-r. +# Lines beginning with '#' are comments. +# +# 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 +@end example + +@node Bindable Readline Commands +@section Bindable Readline Commands + +@menu +* Commands For Moving:: Moving about the line. +* Commands For History:: Getting at previous lines. +* Commands For Text:: Commands for changing text. +* Commands For Killing:: Commands for killing and yanking. +* Numeric Arguments:: Specifying numeric arguments, repeat counts. +* Commands For Completion:: Getting Readline to do the typing for you. +* Keyboard Macros:: Saving and re-executing typed characters +* Miscellaneous Commands:: Other miscellaneous commands. +@end menu + +This section describes Readline commands that may be bound to key +sequences. +@ifset BashFeatures +You can list your key bindings by executing +@w{@code{bind -P}} or, for a more terse format, suitable for an +@var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.) +@end ifset +Command names without an accompanying key sequence are unbound by default. + +In the following descriptions, @dfn{point} refers to the current cursor +position, and @dfn{mark} refers to a cursor position saved by the +@code{set-mark} command. +The text between the point and mark is referred to as the @dfn{region}. + +@node Commands For Moving +@subsection Commands For Moving +@ftable @code +@item beginning-of-line (C-a) +Move to the start of the current line. + +@item end-of-line (C-e) +Move to the end of the line. + +@item forward-char (C-f) +Move forward a character. + +@item backward-char (C-b) +Move back a character. + +@item forward-word (M-f) +Move forward to the end of the next word. +Words are composed of letters and digits. + +@item backward-word (M-b) +Move back to the start of the current or previous word. +Words are composed of letters and digits. + +@ifset BashFeatures +@item shell-forward-word () +Move forward to the end of the next word. +Words are delimited by non-quoted shell metacharacters. + +@item shell-backward-word () +Move back to the start of the current or previous word. +Words are delimited by non-quoted shell metacharacters. +@end ifset + +@item clear-screen (C-l) +Clear the screen and redraw the current line, +leaving the current line at the top of the screen. + +@item redraw-current-line () +Refresh the current line. By default, this is unbound. + +@end ftable + +@node Commands For History +@subsection Commands For Manipulating The History + +@ftable @code +@item accept-line (Newline or Return) +@ifset BashFeatures +Accept the line regardless of where the cursor is. +If this line is +non-empty, add it to the history list according to the setting of +the @env{HISTCONTROL} and @env{HISTIGNORE} variables. +If this line is a modified history line, then restore the history line +to its original state. +@end ifset +@ifclear BashFeatures +Accept the line regardless of where the cursor is. +If this line is +non-empty, it may be added to the history list for future recall with +@code{add_history()}. +If this line is a modified history line, the history line is restored +to its original state. +@end ifclear + +@item previous-history (C-p) +Move `back' through the history list, fetching the previous command. + +@item next-history (C-n) +Move `forward' through the history list, fetching the next command. + +@item beginning-of-history (M-<) +Move to the first line in the history. + +@item end-of-history (M->) +Move to the end of the input history, i.e., the line currently +being entered. + +@item reverse-search-history (C-r) +Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. + +@item forward-search-history (C-s) +Search forward starting at the current line and moving `down' through +the the history as necessary. This is an incremental search. + +@item non-incremental-reverse-search-history (M-p) +Search backward starting at the current line and moving `up' +through the history as necessary using a non-incremental search +for a string supplied by the user. + +@item non-incremental-forward-search-history (M-n) +Search forward starting at the current line and moving `down' +through the the history as necessary using a non-incremental search +for a string supplied by the user. + +@item history-search-forward () +Search forward through the history for the string of characters +between the start of the current line and the point. +This is a non-incremental search. +By default, this command is unbound. + +@item history-search-backward () +Search backward through the history for the string of characters +between the start of the current line and the point. This +is a non-incremental search. By default, this command is unbound. + +@item yank-nth-arg (M-C-y) +Insert the first argument to the previous command (usually +the second word on the previous line) at point. +With an argument @var{n}, +insert the @var{n}th word from the previous command (the words +in the previous command begin with word 0). A negative argument +inserts the @var{n}th word from the end of the previous command. +Once the argument @var{n} is computed, the argument is extracted +as if the @samp{!@var{n}} history expansion had been specified. + +@item yank-last-arg (M-. or M-_) +Insert last argument to the previous command (the last word of the +previous history entry). +With a numeric argument, behave exactly like @code{yank-nth-arg}. +Successive calls to @code{yank-last-arg} move back through the history +list, inserting the last word (or the word specified by the argument to +the first call) of each line in turn. +Any numeric argument supplied to these successive calls determines +the direction to move through the history. A negative argument switches +the direction through the history (back or forward). +The history expansion facilities are used to extract the last argument, +as if the @samp{!$} history expansion had been specified. + +@end ftable + +@node Commands For Text +@subsection Commands For Changing Text + +@ftable @code +@item delete-char (C-d) +Delete the character at point. If point 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}, then +return @sc{eof}. + +@item backward-delete-char (Rubout) +Delete the character behind the cursor. A numeric argument means +to kill the characters instead of deleting them. + +@item 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. + +@item quoted-insert (C-q or C-v) +Add the next character typed to the line verbatim. This is +how to insert key sequences like @kbd{C-q}, for example. + +@ifclear BashFeatures +@item tab-insert (M-@key{TAB}) +Insert a tab character. +@end ifclear + +@item self-insert (a, b, A, 1, !, @dots{}) +Insert yourself. + +@item transpose-chars (C-t) +Drag the character before the cursor forward over +the character at the cursor, moving the +cursor forward as well. If the insertion point +is at the end of the line, then this +transposes the last two characters of the line. +Negative arguments have no effect. + +@item transpose-words (M-t) +Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. + +@item upcase-word (M-u) +Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move the cursor. + +@item downcase-word (M-l) +Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move the cursor. + +@item capitalize-word (M-c) +Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move the cursor. + +@item overwrite-mode () +Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +@code{emacs} mode; @code{vi} mode does overwrite differently. +Each call to @code{readline()} starts in insert mode. + +In overwrite mode, characters bound to @code{self-insert} replace +the text at point rather than pushing the text to the right. +Characters bound to @code{backward-delete-char} replace the character +before point with a space. + +By default, this command is unbound. + +@end ftable + +@node Commands For Killing +@subsection Killing And Yanking + +@ftable @code + +@item kill-line (C-k) +Kill the text from point to the end of the line. + +@item backward-kill-line (C-x Rubout) +Kill backward to the beginning of the line. + +@item unix-line-discard (C-u) +Kill backward from the cursor to the beginning of the current line. + +@item kill-whole-line () +Kill all characters on the current line, no matter where point is. +By default, this is unbound. + +@item kill-word (M-d) +Kill from point to the end of the current word, or if between +words, to the end of the next word. +Word boundaries are the same as @code{forward-word}. + +@item backward-kill-word (M-@key{DEL}) +Kill the word behind point. +Word boundaries are the same as @code{backward-word}. + +@ifset BashFeatures +@item shell-kill-word () +Kill from point 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{shell-forward-word}. + +@item shell-backward-kill-word () +Kill the word behind point. +Word boundaries are the same as @code{shell-backward-word}. +@end ifset + +@item unix-word-rubout (C-w) +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. + +@item unix-filename-rubout () +Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. + +@item delete-horizontal-space () +Delete all spaces and tabs around point. By default, this is unbound. + +@item kill-region () +Kill the text in the current region. +By default, this command is unbound. + +@item 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. + +@item copy-backward-word () +Copy the word before point to the kill buffer. +The word boundaries are the same as @code{backward-word}. +By default, this command is unbound. + +@item copy-forward-word () +Copy the word following point to the kill buffer. +The word boundaries are the same as @code{forward-word}. +By default, this command is unbound. + +@item yank (C-y) +Yank the top of the kill ring into the buffer at point. + +@item yank-pop (M-y) +Rotate the kill-ring, and yank the new top. You can only do this if +the prior command is @code{yank} or @code{yank-pop}. +@end ftable + +@node Numeric Arguments +@subsection Specifying Numeric Arguments +@ftable @code + +@item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--}) +Add this digit to the argument already accumulating, or start a new +argument. @kbd{M--} starts a negative argument. + +@item 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 @code{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. +@end ftable + +@node Commands For Completion +@subsection Letting Readline Type For You + +@ftable @code +@item complete (@key{TAB}) +Attempt to perform completion on the text before point. +The actual completion performed is application-specific. +@ifset BashFeatures +Bash attempts completion treating the text as a variable (if the +text begins with @samp{$}), username (if the text begins with +@samp{~}), hostname (if the text begins with @samp{@@}), or +command (including aliases and functions) in turn. If none +of these produces a match, filename completion is attempted. +@end ifset +@ifclear BashFeatures +The default is filename completion. +@end ifclear + +@item possible-completions (M-?) +List the possible completions of the text before point. +When displaying completions, Readline sets the number of columns used +for display to the value of @code{completion-display-width}, the value of +the environment variable @env{COLUMNS}, or the screen width, in that order. + +@item insert-completions (M-*) +Insert all completions of the text before point that would have +been generated by @code{possible-completions}. + +@item menu-complete () +Similar to @code{complete}, but replaces the word to be completed +with a single match from the list of possible completions. +Repeated execution of @code{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 +(subject to the setting of @code{bell-style}) +and the original text is restored. +An argument of @var{n} moves @var{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 @key{TAB}, but is unbound +by default. + +@item menu-complete-backward () +Identical to @code{menu-complete}, but moves backward through the list +of possible completions, as if @code{menu-complete} had been given a +negative argument. + +@item delete-char-or-list () +Deletes the character under the cursor if not at the beginning or +end of the line (like @code{delete-char}). +If at the end of the line, behaves identically to +@code{possible-completions}. +This command is unbound by default. + +@ifset BashFeatures +@item complete-filename (M-/) +Attempt filename completion on the text before point. + +@item possible-filename-completions (C-x /) +List the possible completions of the text before point, +treating it as a filename. + +@item complete-username (M-~) +Attempt completion on the text before point, treating +it as a username. + +@item possible-username-completions (C-x ~) +List the possible completions of the text before point, +treating it as a username. + +@item complete-variable (M-$) +Attempt completion on the text before point, treating +it as a shell variable. + +@item possible-variable-completions (C-x $) +List the possible completions of the text before point, +treating it as a shell variable. + +@item complete-hostname (M-@@) +Attempt completion on the text before point, treating +it as a hostname. + +@item possible-hostname-completions (C-x @@) +List the possible completions of the text before point, +treating it as a hostname. + +@item complete-command (M-!) +Attempt completion on the text before point, treating +it as a command name. Command completion attempts to +match the text against aliases, reserved words, shell +functions, shell builtins, and finally executable filenames, +in that order. + +@item possible-command-completions (C-x !) +List the possible completions of the text before point, +treating it as a command name. + +@item dynamic-complete-history (M-@key{TAB}) +Attempt completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. + +@item dabbrev-expand () +Attempt menu completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. + +@item complete-into-braces (M-@{) +Perform filename completion and insert the list of possible completions +enclosed within braces so the list is available to the shell +(@pxref{Brace Expansion}). + +@end ifset +@end ftable + +@node Keyboard Macros +@subsection Keyboard Macros +@ftable @code + +@item start-kbd-macro (C-x () +Begin saving the characters typed into the current keyboard macro. + +@item end-kbd-macro (C-x )) +Stop saving the characters typed into the current keyboard macro +and save the definition. + +@item call-last-kbd-macro (C-x e) +Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. + +@end ftable + +@node Miscellaneous Commands +@subsection Some Miscellaneous Commands +@ftable @code + +@item re-read-init-file (C-x C-r) +Read in the contents of the @var{inputrc} file, and incorporate +any bindings or variable assignments found there. + +@item abort (C-g) +Abort the current editing command and +ring the terminal's bell (subject to the setting of +@code{bell-style}). + +@item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{}) +If the metafied character @var{x} is lowercase, run the command +that is bound to the corresponding uppercase character. + +@item prefix-meta (@key{ESC}) +Metafy the next character typed. This is for keyboards +without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing +@kbd{M-f}. + +@item undo (C-_ or C-x C-u) +Incremental undo, separately remembered for each line. + +@item revert-line (M-r) +Undo all changes made to this line. This is like executing the @code{undo} +command enough times to get back to the beginning. + +@ifset BashFeatures +@item tilde-expand (M-&) +@end ifset +@ifclear BashFeatures +@item tilde-expand (M-~) +@end ifclear +Perform tilde expansion on the current word. + +@item set-mark (C-@@) +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. + +@item exchange-point-and-mark (C-x C-x) +Swap the point with the mark. The current cursor position is set to +the saved position, and the old cursor position is saved as the mark. + +@item character-search (C-]) +A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. + +@item character-search-backward (M-C-]) +A character is read and point is moved to the previous occurrence +of that character. A negative count searches for subsequent +occurrences. + +@item skip-csi-sequence () +Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC-[. + +@item insert-comment (M-#) +Without a numeric argument, the value of the @code{comment-begin} +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of @code{comment-begin}, the value is inserted, otherwise +the characters in @code{comment-begin} are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +@ifset BashFeatures +The default value of @code{comment-begin} causes this command +to make the current line a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +@end ifset + +@item dump-functions () +Print all of the functions and their key bindings to the +Readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an @var{inputrc} file. This command is unbound by default. + +@item dump-variables () +Print all of the settable variables and their values to the +Readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an @var{inputrc} file. This command is unbound by default. + +@item dump-macros () +Print all of the Readline key sequences bound to macros and the +strings they output. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an @var{inputrc} file. This command is unbound by default. + +@ifset BashFeatures +@item glob-complete-word (M-g) +The word before point is treated as a pattern for pathname expansion, +with an asterisk implicitly appended. This pattern is used to +generate a list of matching file names for possible completions. + +@item glob-expand-word (C-x *) +The word before point is treated as a pattern for pathname expansion, +and the list of matching file names is inserted, replacing the word. +If a numeric argument is supplied, a @samp{*} is appended before +pathname expansion. + +@item glob-list-expansions (C-x g) +The list of expansions that would have been generated by +@code{glob-expand-word} is displayed, and the line is redrawn. +If a numeric argument is supplied, a @samp{*} is appended before +pathname expansion. + +@item display-shell-version (C-x C-v) +Display version information about the current instance of Bash. + +@item shell-expand-line (M-C-e) +Expand the line as the shell does. +This performs alias and history expansion as well as all of the shell +word expansions (@pxref{Shell Expansions}). + +@item history-expand-line (M-^) +Perform history expansion on the current line. + +@item magic-space () +Perform history expansion on the current line and insert a space +(@pxref{History Interaction}). + +@item alias-expand-line () +Perform alias expansion on the current line (@pxref{Aliases}). + +@item history-and-alias-expand-line () +Perform history and alias expansion on the current line. + +@item insert-last-argument (M-. or M-_) +A synonym for @code{yank-last-arg}. + +@item operate-and-get-next (C-o) +Accept the current line for execution and fetch the next line +relative to the current line from the history for editing. Any +argument is ignored. + +@item edit-and-execute-command (C-xC-e) +Invoke an editor on the current command line, and execute the result as shell +commands. +Bash attempts to invoke +@code{$VISUAL}, @code{$EDITOR}, and @code{emacs} +as the editor, in that order. + +@end ifset + +@ifclear BashFeatures +@item emacs-editing-mode (C-e) +When in @code{vi} command mode, this causes a switch to @code{emacs} +editing mode. + +@item vi-editing-mode (M-C-j) +When in @code{emacs} editing mode, this causes a switch to @code{vi} +editing mode. + +@end ifclear + +@end ftable + +@node Readline vi Mode +@section Readline vi Mode + +While the Readline library does not have a full set of @code{vi} +editing functions, it does contain enough to allow simple editing +of the line. The Readline @code{vi} mode behaves as specified in +the @sc{posix} standard. + +@ifset BashFeatures +In order to switch interactively between @code{emacs} and @code{vi} +editing modes, use the @samp{set -o emacs} and @samp{set -o vi} +commands (@pxref{The Set Builtin}). +@end ifset +@ifclear BashFeatures +In order to switch interactively between @code{emacs} and @code{vi} +editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode +when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode). +@end ifclear +The Readline default is @code{emacs} mode. + +When you enter a line in @code{vi} mode, you are already placed in +`insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC} +switches you into `command' mode, where you can edit the text of the +line with the standard @code{vi} movement keys, move to previous +history lines with @samp{k} and subsequent lines with @samp{j}, and +so forth. + +@ifset BashFeatures +@node Programmable Completion +@section Programmable Completion +@cindex programmable completion + +When word completion is attempted for an argument to a command for +which a completion specification (a @var{compspec}) has been defined +using the @code{complete} builtin (@pxref{Programmable Completion Builtins}), +the programmable completion facilities are invoked. + +First, the command name is identified. +If a compspec has been defined for that command, the +compspec is used to generate the list of possible completions for the word. +If the command word is the empty string (completion attempted at the +beginning of an empty line), any compspec defined with +the @option{-E} option to @code{complete} is used. +If the command word is a full pathname, a compspec for the full +pathname is searched for first. +If no compspec is found for the full pathname, an attempt is made to +find a compspec for the portion following the final slash. +If those searches do not result in a compspec, any compspec defined with +the @option{-D} option to @code{complete} is used as the default. + +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default Bash completion +described above (@pxref{Commands For Completion}) is performed. + +First, the actions specified by the compspec are used. +Only matches which are prefixed by the word being completed are +returned. +When the @option{-f} or @option{-d} option is used for filename or +directory name completion, the shell variable @env{FIGNORE} is +used to filter the matches. +@xref{Bash Variables}, for a description of @env{FIGNORE}. + +Any completions specified by a filename expansion pattern to the +@option{-G} option are generated next. +The words generated by the pattern need not match the word being completed. +The @env{GLOBIGNORE} shell variable is not used to filter the matches, +but the @env{FIGNORE} shell variable is used. + +Next, the string specified as the argument to the @option{-W} option +is considered. +The string is first split using the characters in the @env{IFS} +special variable as delimiters. +Shell quoting is honored. +Each word is then expanded using +brace expansion, tilde expansion, parameter and variable expansion, +command substitution, and arithmetic expansion, +as described above (@pxref{Shell Expansions}). +The results are split using the rules described above +(@pxref{Word Splitting}). +The results of the expansion are prefix-matched against the word being +completed, and the matching words become the possible completions. + +After these matches have been generated, any shell function or command +specified with the @option{-F} and @option{-C} options is invoked. +When the command or function is invoked, the @env{COMP_LINE}, +@env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are +assigned values as described above (@pxref{Bash Variables}). +If a shell function is being invoked, the @env{COMP_WORDS} and +@env{COMP_CWORD} variables are also set. +When the function or command is invoked, the first argument is the +name of the command whose arguments are being completed, the +second argument is the word being completed, and the third argument +is the word preceding the word being completed on the current command line. +No filtering of the generated completions against the word being completed +is performed; the function or command has complete freedom in generating +the matches. + +Any function specified with @option{-F} is invoked first. +The function may use any of the shell facilities, including the +@code{compgen} and @code{compopt} builtins described below +(@pxref{Programmable Completion Builtins}), to generate the matches. +It must put the possible completions in the @env{COMPREPLY} array +variable. + +Next, any command specified with the @option{-C} option is invoked +in an environment equivalent to command substitution. +It should print a list of completions, one per line, to +the standard output. +Backslash may be used to escape a newline, if necessary. + +After all of the possible completions are generated, any filter +specified with the @option{-X} option is applied to the list. +The filter is a pattern as used for pathname expansion; a @samp{&} +in the pattern is replaced with the text of the word being completed. +A literal @samp{&} may be escaped with a backslash; the backslash +is removed before attempting a match. +Any completion that matches the pattern will be removed from the list. +A leading @samp{!} negates the pattern; in this case any completion +not matching the pattern will be removed. + +Finally, any prefix and suffix specified with the @option{-P} and @option{-S} +options are added to each member of the completion list, and the result is +returned to the Readline completion code as the list of possible +completions. + +If the previously-applied actions do not generate any matches, and the +@option{-o dirnames} option was supplied to @code{complete} when the +compspec was defined, directory name completion is attempted. + +If the @option{-o plusdirs} option was supplied to @code{complete} when +the compspec was defined, directory name completion is attempted and any +matches are added to the results of the other actions. + +By default, if a compspec is found, whatever it generates is returned to +the completion code as the full set of possible completions. +The default Bash completions are not attempted, and the Readline default +of filename completion is disabled. +If the @option{-o bashdefault} option was supplied to @code{complete} when +the compspec was defined, the default Bash completions are attempted +if the compspec generates no matches. +If the @option{-o default} option was supplied to @code{complete} when the +compspec was defined, Readline's default completion will be performed +if the compspec (and, if attempted, the default Bash completions) +generate no matches. + +When a compspec indicates that directory name completion is desired, +the programmable completion functions force Readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the @var{mark-directories} Readline variable, regardless +of the setting of the @var{mark-symlinked-directories} Readline variable. + +There is some support for dynamically modifying completions. This is +most useful when used in combination with a default completion specified +with @option{-D}. It's possible for shell functions executed as completion +handlers to indicate that completion should be retried by returning an +exit status of 124. If a shell function returns 124, and changes +the compspec associated with the command on which completion is being +attempted (supplied as the first argument when the function is executed), +programmable completion restarts from the beginning, with an +attempt to find a new compspec for that command. This allows a set of +completions to be built dynamically as completion is attempted, rather than +being loaded all at once. + +For instance, assuming that there is a library of compspecs, each kept in a +file corresponding to the name of the command, the following default +completion function would load completions dynamically: + +@example +_completion_loader() +@{ + . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 +@} +complete -D -F _completion_loader +@end example + +@node Programmable Completion Builtins +@section Programmable Completion Builtins +@cindex completion builtins + +Two builtin commands are available to manipulate the programmable completion +facilities. + +@table @code +@item compgen +@btindex compgen +@example +@code{compgen [@var{option}] [@var{word}]} +@end example + +Generate possible completion matches for @var{word} according to +the @var{option}s, which may be any option accepted by the +@code{complete} +builtin with the exception of @option{-p} and @option{-r}, and write +the matches to the standard output. +When using the @option{-F} or @option{-C} options, the various shell variables +set by the programmable completion facilities, while available, will not +have useful values. + +The matches will be generated in the same way as if the programmable +completion code had generated them directly from a completion specification +with the same flags. +If @var{word} is specified, only those completions matching @var{word} +will be displayed. + +The return value is true unless an invalid option is supplied, or no +matches were generated. + +@item complete +@btindex complete +@example +@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] +[-F @var{function}] [-C @var{command}] [-X @var{filterpat}] +[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} +@code{complete -pr [-DE] [@var{name} @dots{}]} +@end example + +Specify how arguments to each @var{name} should be completed. +If the @option{-p} option is supplied, or if no options are supplied, existing +completion specifications are printed in a way that allows them to be +reused as input. +The @option{-r} option removes a completion specification for +each @var{name}, or, if no @var{name}s are supplied, all +completion specifications. +The @option{-D} option indicates that the remaining options and actions should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The @option{-E} option indicates that the remaining options and actions should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. + +The process of applying these completion specifications when word completion +is attempted is described above (@pxref{Programmable Completion}). The +@option{-D} option takes precedence over @option{-E}. + +Other options, if specified, have the following meanings. +The arguments to the @option{-G}, @option{-W}, and @option{-X} options +(and, if necessary, the @option{-P} and @option{-S} options) +should be quoted to protect them from expansion before the +@code{complete} builtin is invoked. + + +@table @code +@item -o @var{comp-option} +The @var{comp-option} controls several aspects of the compspec's behavior +beyond the simple generation of completions. +@var{comp-option} may be one of: + +@table @code + +@item bashdefault +Perform the rest of the default Bash completions if the compspec +generates no matches. + +@item default +Use Readline's default filename completion if the compspec generates +no matches. + +@item dirnames +Perform directory name completion if the compspec generates no matches. + +@item filenames +Tell Readline that the compspec generates filenames, so it can perform any +filename-specific processing (like adding a slash to directory names +quoting special characters, or suppressing trailing spaces). +This option is intended to be used with shell functions specified +with @option{-F}. + +@item nospace +Tell Readline not to append a space (the default) to words completed at +the end of the line. + +@item plusdirs +After any matches defined by the compspec are generated, +directory name completion is attempted and any +matches are added to the results of the other actions. + +@end table + +@item -A @var{action} +The @var{action} may be one of the following to generate a list of possible +completions: + +@table @code +@item alias +Alias names. May also be specified as @option{-a}. + +@item arrayvar +Array variable names. + +@item binding +Readline key binding names (@pxref{Bindable Readline Commands}). + +@item builtin +Names of shell builtin commands. May also be specified as @option{-b}. + +@item command +Command names. May also be specified as @option{-c}. + +@item directory +Directory names. May also be specified as @option{-d}. + +@item disabled +Names of disabled shell builtins. + +@item enabled +Names of enabled shell builtins. + +@item export +Names of exported shell variables. May also be specified as @option{-e}. + +@item file +File names. May also be specified as @option{-f}. + +@item function +Names of shell functions. + +@item group +Group names. May also be specified as @option{-g}. + +@item helptopic +Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}). + +@item hostname +Hostnames, as taken from the file specified by the +@env{HOSTFILE} shell variable (@pxref{Bash Variables}). + +@item job +Job names, if job control is active. May also be specified as @option{-j}. + +@item keyword +Shell reserved words. May also be specified as @option{-k}. + +@item running +Names of running jobs, if job control is active. + +@item service +Service names. May also be specified as @option{-s}. + +@item setopt +Valid arguments for the @option{-o} option to the @code{set} builtin +(@pxref{The Set Builtin}). + +@item shopt +Shell option names as accepted by the @code{shopt} builtin +(@pxref{Bash Builtins}). + +@item signal +Signal names. + +@item stopped +Names of stopped jobs, if job control is active. + +@item user +User names. May also be specified as @option{-u}. + +@item variable +Names of all shell variables. May also be specified as @option{-v}. +@end table + +@item -C @var{command} +@var{command} is executed in a subshell environment, and its output is +used as the possible completions. + +@item -F @var{function} +The shell function @var{function} is executed in the current shell +environment. +When it finishes, the possible completions are retrieved from the value +of the @env{COMPREPLY} array variable. + +@item -G @var{globpat} +The filename expansion pattern @var{globpat} is expanded to generate +the possible completions. + +@item -P @var{prefix} +@var{prefix} is added at the beginning of each possible completion +after all other options have been applied. + +@item -S @var{suffix} +@var{suffix} is appended to each possible completion +after all other options have been applied. + +@item -W @var{wordlist} +The @var{wordlist} is split using the characters in the +@env{IFS} special variable as delimiters, and each resultant word +is expanded. +The possible completions are the members of the resultant list which +match the word being completed. + +@item -X @var{filterpat} +@var{filterpat} is a pattern as used for filename expansion. +It is applied to the list of possible completions generated by the +preceding options and arguments, and each completion matching +@var{filterpat} is removed from the list. +A leading @samp{!} in @var{filterpat} negates the pattern; in this +case, any completion not matching @var{filterpat} is removed. +@end table + +The return value is true unless an invalid option is supplied, an option +other than @option{-p} or @option{-r} is supplied without a @var{name} +argument, an attempt is made to remove a completion specification for +a @var{name} for which no specification exists, or +an error occurs adding a completion specification. + +@item compopt +@btindex compopt +@example +@code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}] +@end example +Modify completion options for each @var{name} according to the +@var{option}s, or for the currently-executing completion if no @var{name}s +are supplied. +If no @var{option}s are given, display the completion options for each +@var{name} or the current completion. +The possible values of @var{option} are those valid for the @code{complete} +builtin described above. +The @option{-D} option indicates that the remaining options should +apply to the ``default'' command completion; that is, completion attempted +on a command for which no completion has previously been defined. +The @option{-E} option indicates that the remaining options should +apply to ``empty'' command completion; that is, completion attempted on a +blank line. + +The @option{-D} option takes precedence over @option{-E}. + +The return value is true unless an invalid option is supplied, an attempt +is made to modify the options for a @var{name} for which no completion +specification exists, or an output error occurs. + +@end table + +@end ifset diff --git a/readline-6.2/doc/rluserman.dvi b/readline-6.2/doc/rluserman.dvi Binary files differnew file mode 100644 index 0000000..3797f6a --- /dev/null +++ b/readline-6.2/doc/rluserman.dvi diff --git a/readline-6.2/doc/rluserman.html b/readline-6.2/doc/rluserman.html new file mode 100644 index 0000000..1e9c579 --- /dev/null +++ b/readline-6.2/doc/rluserman.html @@ -0,0 +1,2926 @@ +<HTML> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- Created on February, 8 2011 by texi2html 1.64 --> +<!-- +Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) + Karl Berry <karl@freefriends.org> + Olaf Bachmann <obachman@mathematik.uni-kl.de> + and many others. +Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> +Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> + +--> +<HEAD> +<TITLE>GNU Readline Library: </TITLE> + +<META NAME="description" CONTENT="GNU Readline Library: "> +<META NAME="keywords" CONTENT="GNU Readline Library: "> +<META NAME="resource-type" CONTENT="document"> +<META NAME="distribution" CONTENT="global"> +<META NAME="Generator" CONTENT="texi2html 1.64"> + +</HEAD> + +<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> + +<A NAME="SEC_Top"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>GNU Readline Library</H1></P><P> + +This document describes the end user interface of the GNU Readline Library, +a utility which aids in the consistency of user interface across discrete +programs which provide a command line interface. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC1">1. Command Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC23">A. GNU Free Documentation License</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">License for copying this manual.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<HR SIZE=1> +<A NAME="SEC1"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<A NAME="Command Line Editing"></A> +<H1> 1. Command Line Editing </H1> +<!--docid::SEC1::--> +<P> + +This chapter describes the basic features of the GNU +command line editing interface. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC3">1.2 Readline Interaction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC9">1.3 Readline Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands + available for binding</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline + behave like the vi editor.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Introduction and Notation"></A> +<HR SIZE="6"> +<A NAME="SEC2"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.1 Introduction to Line Editing </H2> +<!--docid::SEC2::--> +<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. +The Meta key is labeled <KBD>ALT</KBD> on many keyboards. +On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of +the space bar), the <KBD>ALT</KBD> on the left side is generally set to +work as a Meta key. +The <KBD>ALT</KBD> key on the right may also be configured to work as a +Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. +</P><P> + +If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as +a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> +<EM>first</EM>, 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="rluserman.html#SEC9">1.3 Readline Init File</A>). +If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will +produce the desired character. +The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on +some keyboards. +</P><P> + +<A NAME="Readline Interaction"></A> +<HR SIZE="6"> +<A NAME="SEC3"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.2 Readline Interaction </H2> +<!--docid::SEC3::--> +<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>RET</KBD>. You do not have to be at the +end of the line to press <KBD>RET</KBD>; the entire line is accepted +regardless of the location of the cursor within the line. +</P><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Readline Bare Essentials"></A> +<HR SIZE="6"> +<A NAME="SEC4"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.1 Readline Bare Essentials </H3> +<!--docid::SEC4::--> +<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 mistype a character, and +not notice the 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 bare +essentials for editing the text of an input line follows. +</P><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> or <KBD>Backspace</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> or <KBD>C-x C-u</KBD> +<DD>Undo the last editing command. You can undo all the way back to an +empty line. +</DL> +<P> + +(Depending on your configuration, the <KBD>Backspace</KBD> key be set to +delete the character to the left of the cursor and the <KBD>DEL</KBD> key set +to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather +than the character to the left of the cursor.) +</P><P> + +<A NAME="Readline Movement Commands"></A> +<HR SIZE="6"> +<A NAME="SEC5"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.2 Readline Movement Commands </H3> +<!--docid::SEC5::--> +<P> + +The above table describes the most basic 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><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><P> + +<A NAME="Readline Killing Commands"></A> +<HR SIZE="6"> +<A NAME="SEC6"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.3 Readline Killing Commands </H3> +<!--docid::SEC6::--> +<P> + +<A NAME="IDX1"></A> +<A NAME="IDX2"></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. +(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) +</P><P> + +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="IDX3"></A> +</P><P> + +Here is the list of commands for killing text. +</P><P> + +<DL COMPACT> +<DT><KBD>C-k</KBD> +<DD>Kill the text from the current cursor position to the end of the line. +<P> + +<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. +Word boundaries are the same as those used by <KBD>M-f</KBD>. +<P> + +<DT><KBD>M-<KBD>DEL</KBD></KBD> +<DD>Kill from the cursor the start of the current word, or, if between +words, to the start of the previous word. +Word boundaries are the same as those used by <KBD>M-b</KBD>. +<P> + +<DT><KBD>C-w</KBD> +<DD>Kill from the cursor to the previous whitespace. This is different than +<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ. +<P> + +</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><P> + +<DL COMPACT> +<DT><KBD>C-y</KBD> +<DD>Yank the most recently killed text back into the buffer at the cursor. +<P> + +<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> +<P> + +<A NAME="Readline Arguments"></A> +<HR SIZE="6"> +<A NAME="SEC7"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.4 Readline Arguments </H3> +<!--docid::SEC7::--> +<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 (<SAMP>`-'</SAMP>), 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>, +which will delete the next ten characters on the input line. +</P><P> + +<A NAME="Searching"></A> +<HR SIZE="6"> +<A NAME="SEC8"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.2.5 Searching for Commands in the History </H3> +<!--docid::SEC8::--> +<P> + +Readline provides commands for searching through the command history +for lines containing a specified string. +There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>. +</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. +To search backward in the history for a particular string, type +<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. +The characters present in the value of the <CODE>isearch-terminators</CODE> 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. +</P><P> + +To find other matching entries in the history list, type <KBD>C-r</KBD> or +<KBD>C-s</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. +A movement command will terminate the search, make the last line found +the current line, and begin editing. +</P><P> + +Readline remembers the last incremental search string. If two +<KBD>C-r</KBD>s are typed without any intervening characters defining a new +search string, any remembered search string is used. +</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><P> + +<A NAME="Readline Init File"></A> +<HR SIZE="6"> +<A NAME="SEC9"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.3 Readline Init File </H2> +<!--docid::SEC9::--> +<P> + +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 <EM>inputrc</EM> file, conventionally 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>. If that +file does not exist or cannot be read, the ultimate default is +<TT>`/etc/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><P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR> +</TABLE> + +<br> +<TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR> +</TABLE> + +<br> +<TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +<A NAME="Readline Init File Syntax"></A> +<HR SIZE="6"> +<A NAME="SEC10"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.1 Readline Init File Syntax </H3> +<!--docid::SEC10::--> +<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="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>). Other lines +denote variable settings and key bindings. +</P><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. +The syntax is simple: +<P> + +<TABLE><tr><td> </td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR> +</pre></td></tr></table></P><P> + +Here, for example, is how to +change from the default Emacs-like key binding to use +<CODE>vi</CODE> line editing commands: +</P><P> + +<TABLE><tr><td> </td><td class=example><pre>set editing-mode vi +</pre></td></tr></table></P><P> + +Variable names and values, where appropriate, are recognized without regard +to case. Unrecognized variable names are ignored. +</P><P> + +Boolean variables (those that can be set to on or off) are set to on if +the value is null or empty, <VAR>on</VAR> (case-insensitive), or 1. Any other +value results in the variable being set to off. +</P><P> + +A great deal of run-time behavior is changeable with the following +variables. +</P><P> + +<A NAME="IDX4"></A> +<DL COMPACT> + +<DT><CODE>bell-style</CODE> +<DD><A NAME="IDX5"></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. +<P> + +<DT><CODE>bind-tty-special-chars</CODE> +<DD><A NAME="IDX6"></A> +If set to <SAMP>`on'</SAMP>, Readline attempts to bind the control characters +treated specially by the kernel's terminal driver to their Readline +equivalents. +<P> + +<DT><CODE>comment-begin</CODE> +<DD><A NAME="IDX7"></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>. +<P> + +<DT><CODE>completion-display-width</CODE> +<DD><A NAME="IDX8"></A> +The number of screen columns used to display possible matches +when performing completion. +The value is ignored if it is less than 0 or greater than the terminal +screen width. +A value of 0 will cause matches to be displayed one per line. +The default value is -1. +<P> + +<DT><CODE>completion-ignore-case</CODE> +<DD><A NAME="IDX9"></A> +If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion +in a case-insensitive fashion. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>completion-map-case</CODE> +<DD><A NAME="IDX10"></A> +If set to <SAMP>`on'</SAMP>, and <VAR>completion-ignore-case</VAR> is enabled, Readline +treats hyphens (<SAMP>`-'</SAMP>) and underscores (<SAMP>`_'</SAMP>) as equivalent when +performing case-insensitive filename matching and completion. +<P> + +<DT><CODE>completion-prefix-display-length</CODE> +<DD><A NAME="IDX11"></A> +The length in characters of the common prefix of a list of possible +completions that is displayed without modification. When set to a +value greater than zero, common prefixes longer than this value are +replaced with an ellipsis when displaying possible completions. +<P> + +<DT><CODE>completion-query-items</CODE> +<DD><A NAME="IDX12"></A> +The number of possible completions that determines when the user is +asked whether the list of possibilities should be displayed. +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. +This variable must be set to an integer value greater than or equal to 0. +A negative value means Readline should never ask. +The default limit is <CODE>100</CODE>. +<P> + +<DT><CODE>convert-meta</CODE> +<DD><A NAME="IDX13"></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 prefixing an <KBD>ESC</KBD> character, converting them to a +meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>disable-completion</CODE> +<DD><A NAME="IDX14"></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>. +<P> + +<DT><CODE>editing-mode</CODE> +<DD><A NAME="IDX15"></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>. +<P> + +<DT><CODE>echo-control-characters</CODE> +<DD>When set to <SAMP>`on'</SAMP>, on operating systems that indicate they support it, +readline echoes a character corresponding to a signal generated from the +keyboard. The default is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>enable-keypad</CODE> +<DD><A NAME="IDX16"></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>. +<P> + +<DT><CODE>enable-meta-key</CODE> +<DD>When set to <SAMP>`on'</SAMP>, Readline will try to enable any meta modifier +key the terminal claims to support when it is called. On many terminals, +the meta key is used to send eight-bit characters. +The default is <SAMP>`on'</SAMP>. +<P> + +<DT><CODE>expand-tilde</CODE> +<DD><A NAME="IDX17"></A> +If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline +attempts word completion. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>history-preserve-point</CODE> +<DD><A NAME="IDX18"></A> +If set to <SAMP>`on'</SAMP>, the history code attempts to place the point (the +current cursor position) at the +same location on each history line retrieved with <CODE>previous-history</CODE> +or <CODE>next-history</CODE>. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>history-size</CODE> +<DD><A NAME="IDX19"></A> +Set the maximum number of history entries saved in the history list. If +set to zero, the number of entries in the history list is not limited. +<P> + +<DT><CODE>horizontal-scroll-mode</CODE> +<DD><A NAME="IDX20"></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>. +<P> + +<DT><CODE>input-meta</CODE> +<DD><A NAME="IDX21"></A> +<A NAME="IDX22"></A> +If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it +will not clear the eighth bit in 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. +<P> + +<DT><CODE>isearch-terminators</CODE> +<DD><A NAME="IDX23"></A> +The string of characters that should terminate an incremental search without +subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">1.2.5 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. +<P> + +<DT><CODE>keymap</CODE> +<DD><A NAME="IDX24"></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-move</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. +<P> + +<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>. +<P> + +<DT><CODE>mark-modified-lines</CODE> +<DD><A NAME="IDX25"></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. +<P> + +<DT><CODE>mark-symlinked-directories</CODE> +<DD><A NAME="IDX26"></A> +If set to <SAMP>`on'</SAMP>, completed names which are symbolic links +to directories have a slash appended (subject to the value of +<CODE>mark-directories</CODE>). +The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>match-hidden-files</CODE> +<DD><A NAME="IDX27"></A> +This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose +names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename +completion. +If set to <SAMP>`off'</SAMP>, the leading <SAMP>`.'</SAMP> must be +supplied by the user in the filename to be completed. +This variable is <SAMP>`on'</SAMP> by default. +<P> + +<DT><CODE>menu-complete-display-prefix</CODE> +<DD><A NAME="IDX28"></A> +If set to <SAMP>`on'</SAMP>, menu completion displays the common prefix of the +list of possible completions (which may be empty) before cycling through +the list. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>output-meta</CODE> +<DD><A NAME="IDX29"></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>. +<P> + +<DT><CODE>page-completions</CODE> +<DD><A NAME="IDX30"></A> +If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager +to display a screenful of possible completions at a time. +This variable is <SAMP>`on'</SAMP> by default. +<P> + +<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>. +<P> + +<DT><CODE>revert-all-at-newline</CODE> +<DD><A NAME="IDX31"></A> +If set to <SAMP>`on'</SAMP>, Readline will undo all changes to history lines +before returning when <CODE>accept-line</CODE> is executed. By default, +history lines may be modified and retain individual undo lists across +calls to <CODE>readline</CODE>. The default is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>show-all-if-ambiguous</CODE> +<DD><A NAME="IDX32"></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>. +<P> + +<DT><CODE>show-all-if-unmodified</CODE> +<DD><A NAME="IDX33"></A> +This alters the default behavior of the completion functions in +a fashion similar to <VAR>show-all-if-ambiguous</VAR>. +If set to <SAMP>`on'</SAMP>, +words which have more than one possible completion without any +possible partial completion (the possible completions don't share +a common prefix) cause the matches to be listed immediately instead +of ringing the bell. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>skip-completed-text</CODE> +<DD><A NAME="IDX34"></A> +If set to <SAMP>`on'</SAMP>, this alters the default completion behavior when +inserting a single match into the line. It's only active when +performing completion in the middle of a word. If enabled, readline +does not insert characters from the completion that match characters +after point in the word being completed, so portions of the word +following the cursor are not duplicated. +For instance, if this is enabled, attempting completion when the cursor +is after the <SAMP>`e'</SAMP> in <SAMP>`Makefile'</SAMP> will result in <SAMP>`Makefile'</SAMP> +rather than <SAMP>`Makefilefile'</SAMP>, assuming there is a single possible +completion. +The default value is <SAMP>`off'</SAMP>. +<P> + +<DT><CODE>visible-stats</CODE> +<DD><A NAME="IDX35"></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>. +<P> + +</DL> +<P> + +<DT>Key Bindings +<DD>The syntax for controlling key bindings in the init file is +simple. First you need to find 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. +<P> + +Once you know the name of the command, simply place on a line +in the init file the name of the key +you wish to bind the command to, a colon, and then the name of the +command. +There can be no space between the key name and the colon -- that will be +interpreted as part of the key name. +The name of the key can be expressed in different ways, depending on +what you find most comfortable. +</P><P> + +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a <VAR>macro</VAR>). +</P><P> + +<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: +<TABLE><tr><td> </td><td class=example><pre>Control-u: universal-argument +Meta-Rubout: backward-kill-word +Control-o: "> output" +</pre></td></tr></table><P> + +In the above example, <KBD>C-u</KBD> is bound to the function +<CODE>universal-argument</CODE>, +<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</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>`> output'</SAMP> into the line). +</P><P> + +A number of symbolic character names are recognized while +processing this key binding syntax: +<VAR>DEL</VAR>, +<VAR>ESC</VAR>, +<VAR>ESCAPE</VAR>, +<VAR>LFD</VAR>, +<VAR>NEWLINE</VAR>, +<VAR>RET</VAR>, +<VAR>RETURN</VAR>, +<VAR>RUBOUT</VAR>, +<VAR>SPACE</VAR>, +<VAR>SPC</VAR>, +and +<VAR>TAB</VAR>. +</P><P> + +<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. +<P> + +<TABLE><tr><td> </td><td class=example><pre>"\C-u": universal-argument +"\C-x\C-r": re-read-init-file +"\e[11~": "Function Key 1" +</pre></td></tr></table></P><P> + +In the above example, <KBD>C-u</KBD> is again 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>. +</P><P> + +</DL> +<P> + +The following GNU Emacs style escape sequences are available when +specifying key sequences: +</P><P> + +<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>, a double quotation mark +<DT><CODE><KBD>\'</KBD></CODE> +<DD><KBD>'</KBD>, a single quote or apostrophe +</DL> +<P> + +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +</P><P> + +<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 eight-bit character whose value is the octal value <VAR>nnn</VAR> +(one to three digits) +<DT><CODE>\x<VAR>HH</VAR></CODE> +<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR> +(one or two hex digits) +</DL> +<P> + +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>`<KBD>C-x</KBD> \'</SAMP> +insert a single <SAMP>`\'</SAMP> into the line: +<TABLE><tr><td> </td><td class=example><pre>"\C-x\\": "\\" +</pre></td></tr></table></P><P> + +</DL> +<P> + +<A NAME="Conditional Init Constructs"></A> +<HR SIZE="6"> +<A NAME="SEC11"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.2 Conditional Init Constructs </H3> +<!--docid::SEC11::--> +<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><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. +<P> + +<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. +<P> + +<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. +<P> + +<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 +a particular value. +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: +<TABLE><tr><td> </td><td class=example><pre>$if Bash +# Quote the current or previous word +"\C-xq": "\eb\"\ef\"" +$endif +</pre></td></tr></table></DL> +<P> + +<DT><CODE>$endif</CODE> +<DD>This command, as seen in the previous example, terminates an +<CODE>$if</CODE> command. +<P> + +<DT><CODE>$else</CODE> +<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if +the test fails. +<P> + +<DT><CODE>$include</CODE> +<DD>This directive takes a single filename as an argument and reads commands +and bindings from that file. +For example, the following directive reads from <TT>`/etc/inputrc'</TT>: +<TABLE><tr><td> </td><td class=example><pre>$include /etc/inputrc +</pre></td></tr></table></DL> +<P> + +<A NAME="Sample Init File"></A> +<HR SIZE="6"> +<A NAME="SEC12"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.3.3 Sample Init File </H3> +<!--docid::SEC12::--> +<P> + +Here is an example of an <VAR>inputrc</VAR> file. This illustrates key +binding, variable assignment, and conditional syntax. +</P><P> + +<TABLE><tr><td> </td><td class=example><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></td></tr></table></P><P> + +<A NAME="Bindable Readline Commands"></A> +<HR SIZE="6"> +<A NAME="SEC13"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.4 Bindable Readline Commands </H2> +<!--docid::SEC13::--> +<P> + +<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR> +<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR> +</TABLE></BLOCKQUOTE> +<P> + +This section describes Readline commands that may be bound to key +sequences. +Command names without an accompanying key sequence are unbound by default. +</P><P> + +In the following descriptions, <EM>point</EM> refers to the current cursor +position, and <EM>mark</EM> refers to a cursor position saved by the +<CODE>set-mark</CODE> command. +The text between the point and mark is referred to as the <EM>region</EM>. +</P><P> + +<A NAME="Commands For Moving"></A> +<HR SIZE="6"> +<A NAME="SEC14"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.1 Commands For Moving </H3> +<!--docid::SEC14::--> +<DL COMPACT> +<A NAME="IDX36"></A> +<DT><CODE>beginning-of-line (C-a)</CODE> +<DD><A NAME="IDX37"></A> +Move to the start of the current line. +<P> + +<A NAME="IDX38"></A> +<DT><CODE>end-of-line (C-e)</CODE> +<DD><A NAME="IDX39"></A> +Move to the end of the line. +<P> + +<A NAME="IDX40"></A> +<DT><CODE>forward-char (C-f)</CODE> +<DD><A NAME="IDX41"></A> +Move forward a character. +<P> + +<A NAME="IDX42"></A> +<DT><CODE>backward-char (C-b)</CODE> +<DD><A NAME="IDX43"></A> +Move back a character. +<P> + +<A NAME="IDX44"></A> +<DT><CODE>forward-word (M-f)</CODE> +<DD><A NAME="IDX45"></A> +Move forward to the end of the next word. +Words are composed of letters and digits. +<P> + +<A NAME="IDX46"></A> +<DT><CODE>backward-word (M-b)</CODE> +<DD><A NAME="IDX47"></A> +Move back to the start of the current or previous word. +Words are composed of letters and digits. +<P> + +<A NAME="IDX48"></A> +<DT><CODE>clear-screen (C-l)</CODE> +<DD><A NAME="IDX49"></A> +Clear the screen and redraw the current line, +leaving the current line at the top of the screen. +<P> + +<A NAME="IDX50"></A> +<DT><CODE>redraw-current-line ()</CODE> +<DD><A NAME="IDX51"></A> +Refresh the current line. By default, this is unbound. +<P> + +</DL> +<P> + +<A NAME="Commands For History"></A> +<HR SIZE="6"> +<A NAME="SEC15"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.2 Commands For Manipulating The History </H3> +<!--docid::SEC15::--> +<P> + +<DL COMPACT> +<A NAME="IDX52"></A> +<DT><CODE>accept-line (Newline or Return)</CODE> +<DD><A NAME="IDX53"></A> +Accept the line regardless of where the cursor is. +If this line is +non-empty, it may be added to the history list for future recall with +<CODE>add_history()</CODE>. +If this line is a modified history line, the history line is restored +to its original state. +<P> + +<A NAME="IDX54"></A> +<DT><CODE>previous-history (C-p)</CODE> +<DD><A NAME="IDX55"></A> +Move `back' through the history list, fetching the previous command. +<P> + +<A NAME="IDX56"></A> +<DT><CODE>next-history (C-n)</CODE> +<DD><A NAME="IDX57"></A> +Move `forward' through the history list, fetching the next command. +<P> + +<A NAME="IDX58"></A> +<DT><CODE>beginning-of-history (M-<)</CODE> +<DD><A NAME="IDX59"></A> +Move to the first line in the history. +<P> + +<A NAME="IDX60"></A> +<DT><CODE>end-of-history (M->)</CODE> +<DD><A NAME="IDX61"></A> +Move to the end of the input history, i.e., the line currently +being entered. +<P> + +<A NAME="IDX62"></A> +<DT><CODE>reverse-search-history (C-r)</CODE> +<DD><A NAME="IDX63"></A> +Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. +<P> + +<A NAME="IDX64"></A> +<DT><CODE>forward-search-history (C-s)</CODE> +<DD><A NAME="IDX65"></A> +Search forward starting at the current line and moving `down' through +the the history as necessary. This is an incremental search. +<P> + +<A NAME="IDX66"></A> +<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> +<DD><A NAME="IDX67"></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. +<P> + +<A NAME="IDX68"></A> +<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> +<DD><A NAME="IDX69"></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. +<P> + +<A NAME="IDX70"></A> +<DT><CODE>history-search-forward ()</CODE> +<DD><A NAME="IDX71"></A> +Search forward 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. +<P> + +<A NAME="IDX72"></A> +<DT><CODE>history-search-backward ()</CODE> +<DD><A NAME="IDX73"></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. +<P> + +<A NAME="IDX74"></A> +<DT><CODE>yank-nth-arg (M-C-y)</CODE> +<DD><A NAME="IDX75"></A> +Insert the first argument to the previous command (usually +the second word on the previous line) at point. +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. +Once the argument <VAR>n</VAR> is computed, the argument is extracted +as if the <SAMP>`!<VAR>n</VAR>'</SAMP> history expansion had been specified. +<P> + +<A NAME="IDX76"></A> +<DT><CODE>yank-last-arg (M-. or M-_)</CODE> +<DD><A NAME="IDX77"></A> +Insert last argument to the previous command (the last word of the +previous history entry). +With a numeric 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 word (or the word specified by the argument to +the first call) of each line in turn. +Any numeric argument supplied to these successive calls determines +the direction to move through the history. A negative argument switches +the direction through the history (back or forward). +The history expansion facilities are used to extract the last argument, +as if the <SAMP>`!$'</SAMP> history expansion had been specified. +<P> + +</DL> +<P> + +<A NAME="Commands For Text"></A> +<HR SIZE="6"> +<A NAME="SEC16"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.3 Commands For Changing Text </H3> +<!--docid::SEC16::--> +<P> + +<DL COMPACT> +<A NAME="IDX78"></A> +<DT><CODE>delete-char (C-d)</CODE> +<DD><A NAME="IDX79"></A> +Delete the character at point. If point 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 EOF. +<P> + +<A NAME="IDX80"></A> +<DT><CODE>backward-delete-char (Rubout)</CODE> +<DD><A NAME="IDX81"></A> +Delete the character behind the cursor. A numeric argument means +to kill the characters instead of deleting them. +<P> + +<A NAME="IDX82"></A> +<DT><CODE>forward-backward-delete-char ()</CODE> +<DD><A NAME="IDX83"></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. +<P> + +<A NAME="IDX84"></A> +<DT><CODE>quoted-insert (C-q or C-v)</CODE> +<DD><A NAME="IDX85"></A> +Add the next character typed to the line verbatim. This is +how to insert key sequences like <KBD>C-q</KBD>, for example. +<P> + +<A NAME="IDX86"></A> +<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE> +<DD><A NAME="IDX87"></A> +Insert a tab character. +<P> + +<A NAME="IDX88"></A> +<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE> +<DD><A NAME="IDX89"></A> +Insert yourself. +<P> + +<A NAME="IDX90"></A> +<DT><CODE>transpose-chars (C-t)</CODE> +<DD><A NAME="IDX91"></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 have no effect. +<P> + +<A NAME="IDX92"></A> +<DT><CODE>transpose-words (M-t)</CODE> +<DD><A NAME="IDX93"></A> +Drag the word before point past the word after point, +moving point past that word as well. +If the insertion point is at the end of the line, this transposes +the last two words on the line. +<P> + +<A NAME="IDX94"></A> +<DT><CODE>upcase-word (M-u)</CODE> +<DD><A NAME="IDX95"></A> +Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move the cursor. +<P> + +<A NAME="IDX96"></A> +<DT><CODE>downcase-word (M-l)</CODE> +<DD><A NAME="IDX97"></A> +Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move the cursor. +<P> + +<A NAME="IDX98"></A> +<DT><CODE>capitalize-word (M-c)</CODE> +<DD><A NAME="IDX99"></A> +Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move the cursor. +<P> + +<A NAME="IDX100"></A> +<DT><CODE>overwrite-mode ()</CODE> +<DD><A NAME="IDX101"></A> +Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently. +Each call to <CODE>readline()</CODE> starts in insert mode. +<P> + +In overwrite mode, characters bound to <CODE>self-insert</CODE> replace +the text at point rather than pushing the text to the right. +Characters bound to <CODE>backward-delete-char</CODE> replace the character +before point with a space. +</P><P> + +By default, this command is unbound. +</P><P> + +</DL> +<P> + +<A NAME="Commands For Killing"></A> +<HR SIZE="6"> +<A NAME="SEC17"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.4 Killing And Yanking </H3> +<!--docid::SEC17::--> +<P> + +<DL COMPACT> + +<A NAME="IDX102"></A> +<DT><CODE>kill-line (C-k)</CODE> +<DD><A NAME="IDX103"></A> +Kill the text from point to the end of the line. +<P> + +<A NAME="IDX104"></A> +<DT><CODE>backward-kill-line (C-x Rubout)</CODE> +<DD><A NAME="IDX105"></A> +Kill backward to the beginning of the line. +<P> + +<A NAME="IDX106"></A> +<DT><CODE>unix-line-discard (C-u)</CODE> +<DD><A NAME="IDX107"></A> +Kill backward from the cursor to the beginning of the current line. +<P> + +<A NAME="IDX108"></A> +<DT><CODE>kill-whole-line ()</CODE> +<DD><A NAME="IDX109"></A> +Kill all characters on the current line, no matter where point is. +By default, this is unbound. +<P> + +<A NAME="IDX110"></A> +<DT><CODE>kill-word (M-d)</CODE> +<DD><A NAME="IDX111"></A> +Kill from point 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>. +<P> + +<A NAME="IDX112"></A> +<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE> +<DD><A NAME="IDX113"></A> +Kill the word behind point. +Word boundaries are the same as <CODE>backward-word</CODE>. +<P> + +<A NAME="IDX114"></A> +<DT><CODE>unix-word-rubout (C-w)</CODE> +<DD><A NAME="IDX115"></A> +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +<P> + +<A NAME="IDX116"></A> +<DT><CODE>unix-filename-rubout ()</CODE> +<DD><A NAME="IDX117"></A> +Kill the word behind point, using white space and the slash character +as the word boundaries. +The killed text is saved on the kill-ring. +<P> + +<A NAME="IDX118"></A> +<DT><CODE>delete-horizontal-space ()</CODE> +<DD><A NAME="IDX119"></A> +Delete all spaces and tabs around point. By default, this is unbound. +<P> + +<A NAME="IDX120"></A> +<DT><CODE>kill-region ()</CODE> +<DD><A NAME="IDX121"></A> +Kill the text in the current region. +By default, this command is unbound. +<P> + +<A NAME="IDX122"></A> +<DT><CODE>copy-region-as-kill ()</CODE> +<DD><A NAME="IDX123"></A> +Copy the text in the region to the kill buffer, so it can be yanked +right away. By default, this command is unbound. +<P> + +<A NAME="IDX124"></A> +<DT><CODE>copy-backward-word ()</CODE> +<DD><A NAME="IDX125"></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. +<P> + +<A NAME="IDX126"></A> +<DT><CODE>copy-forward-word ()</CODE> +<DD><A NAME="IDX127"></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. +<P> + +<A NAME="IDX128"></A> +<DT><CODE>yank (C-y)</CODE> +<DD><A NAME="IDX129"></A> +Yank the top of the kill ring into the buffer at point. +<P> + +<A NAME="IDX130"></A> +<DT><CODE>yank-pop (M-y)</CODE> +<DD><A NAME="IDX131"></A> +Rotate the kill-ring, and yank the new top. You can only do this if +the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. +</DL> +<P> + +<A NAME="Numeric Arguments"></A> +<HR SIZE="6"> +<A NAME="SEC18"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.5 Specifying Numeric Arguments </H3> +<!--docid::SEC18::--> +<DL COMPACT> + +<A NAME="IDX132"></A> +<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> +<DD><A NAME="IDX133"></A> +Add this digit to the argument already accumulating, or start a new +argument. <KBD>M--</KBD> starts a negative argument. +<P> + +<A NAME="IDX134"></A> +<DT><CODE>universal-argument ()</CODE> +<DD><A NAME="IDX135"></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> +<P> + +<A NAME="Commands For Completion"></A> +<HR SIZE="6"> +<A NAME="SEC19"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.6 Letting Readline Type For You </H3> +<!--docid::SEC19::--> +<P> + +<DL COMPACT> +<A NAME="IDX136"></A> +<DT><CODE>complete (<KBD>TAB</KBD>)</CODE> +<DD><A NAME="IDX137"></A> +Attempt to perform completion on the text before point. +The actual completion performed is application-specific. +The default is filename completion. +<P> + +<A NAME="IDX138"></A> +<DT><CODE>possible-completions (M-?)</CODE> +<DD><A NAME="IDX139"></A> +List the possible completions of the text before point. +When displaying completions, Readline sets the number of columns used +for display to the value of <CODE>completion-display-width</CODE>, the value of +the environment variable <CODE>COLUMNS</CODE>, or the screen width, in that order. +<P> + +<A NAME="IDX140"></A> +<DT><CODE>insert-completions (M-*)</CODE> +<DD><A NAME="IDX141"></A> +Insert all completions of the text before point that would have +been generated by <CODE>possible-completions</CODE>. +<P> + +<A NAME="IDX142"></A> +<DT><CODE>menu-complete ()</CODE> +<DD><A NAME="IDX143"></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 +(subject to the setting of <CODE>bell-style</CODE>) +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 <KBD>TAB</KBD>, but is unbound +by default. +<P> + +<A NAME="IDX144"></A> +<DT><CODE>menu-complete-backward ()</CODE> +<DD><A NAME="IDX145"></A> +Identical to <CODE>menu-complete</CODE>, but moves backward through the list +of possible completions, as if <CODE>menu-complete</CODE> had been given a +negative argument. +<P> + +<A NAME="IDX146"></A> +<DT><CODE>delete-char-or-list ()</CODE> +<DD><A NAME="IDX147"></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. +<P> + +</DL> +<P> + +<A NAME="Keyboard Macros"></A> +<HR SIZE="6"> +<A NAME="SEC20"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.7 Keyboard Macros </H3> +<!--docid::SEC20::--> +<DL COMPACT> + +<A NAME="IDX148"></A> +<DT><CODE>start-kbd-macro (C-x ()</CODE> +<DD><A NAME="IDX149"></A> +Begin saving the characters typed into the current keyboard macro. +<P> + +<A NAME="IDX150"></A> +<DT><CODE>end-kbd-macro (C-x ))</CODE> +<DD><A NAME="IDX151"></A> +Stop saving the characters typed into the current keyboard macro +and save the definition. +<P> + +<A NAME="IDX152"></A> +<DT><CODE>call-last-kbd-macro (C-x e)</CODE> +<DD><A NAME="IDX153"></A> +Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. +<P> + +</DL> +<P> + +<A NAME="Miscellaneous Commands"></A> +<HR SIZE="6"> +<A NAME="SEC21"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H3> 1.4.8 Some Miscellaneous Commands </H3> +<!--docid::SEC21::--> +<DL COMPACT> + +<A NAME="IDX154"></A> +<DT><CODE>re-read-init-file (C-x C-r)</CODE> +<DD><A NAME="IDX155"></A> +Read in the contents of the <VAR>inputrc</VAR> file, and incorporate +any bindings or variable assignments found there. +<P> + +<A NAME="IDX156"></A> +<DT><CODE>abort (C-g)</CODE> +<DD><A NAME="IDX157"></A> +Abort the current editing command and +ring the terminal's bell (subject to the setting of +<CODE>bell-style</CODE>). +<P> + +<A NAME="IDX158"></A> +<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> +<DD><A NAME="IDX159"></A> +If the metafied character <VAR>x</VAR> is lowercase, run the command +that is bound to the corresponding uppercase character. +<P> + +<A NAME="IDX160"></A> +<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> +<DD><A NAME="IDX161"></A> +Metafy the next character typed. This is for keyboards +without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing +<KBD>M-f</KBD>. +<P> + +<A NAME="IDX162"></A> +<DT><CODE>undo (C-_ or C-x C-u)</CODE> +<DD><A NAME="IDX163"></A> +Incremental undo, separately remembered for each line. +<P> + +<A NAME="IDX164"></A> +<DT><CODE>revert-line (M-r)</CODE> +<DD><A NAME="IDX165"></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. +<P> + +<A NAME="IDX166"></A> +<DT><CODE>tilde-expand (M-~)</CODE> +<DD><A NAME="IDX167"></A> +Perform tilde expansion on the current word. +<P> + +<A NAME="IDX168"></A> +<DT><CODE>set-mark (C-@)</CODE> +<DD><A NAME="IDX169"></A> +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +<P> + +<A NAME="IDX170"></A> +<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> +<DD><A NAME="IDX171"></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. +<P> + +<A NAME="IDX172"></A> +<DT><CODE>character-search (C-])</CODE> +<DD><A NAME="IDX173"></A> +A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +<P> + +<A NAME="IDX174"></A> +<DT><CODE>character-search-backward (M-C-])</CODE> +<DD><A NAME="IDX175"></A> +A character is read and point is moved to the previous occurrence +of that character. A negative count searches for subsequent +occurrences. +<P> + +<A NAME="IDX176"></A> +<DT><CODE>skip-csi-sequence ()</CODE> +<DD><A NAME="IDX177"></A> +Read enough characters to consume a multi-key sequence such as those +defined for keys like Home and End. Such sequences begin with a +Control Sequence Indicator (CSI), usually ESC-[. If this sequence is +bound to "\e[", keys producing such sequences will have no effect +unless explicitly bound to a readline command, instead of inserting +stray characters into the editing buffer. This is unbound by default, +but usually bound to ESC-[. +<P> + +<A NAME="IDX178"></A> +<DT><CODE>insert-comment (M-#)</CODE> +<DD><A NAME="IDX179"></A> +Without a numeric argument, the value of the <CODE>comment-begin</CODE> +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of <CODE>comment-begin</CODE>, the value is inserted, otherwise +the characters in <CODE>comment-begin</CODE> are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +<P> + +<A NAME="IDX180"></A> +<DT><CODE>dump-functions ()</CODE> +<DD><A NAME="IDX181"></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. +<P> + +<A NAME="IDX182"></A> +<DT><CODE>dump-variables ()</CODE> +<DD><A NAME="IDX183"></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. +<P> + +<A NAME="IDX184"></A> +<DT><CODE>dump-macros ()</CODE> +<DD><A NAME="IDX185"></A> +Print all of the Readline key sequences bound to macros and the +strings they output. 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. +<P> + +<A NAME="IDX186"></A> +<DT><CODE>emacs-editing-mode (C-e)</CODE> +<DD><A NAME="IDX187"></A> +When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> +editing mode. +<P> + +<A NAME="IDX188"></A> +<DT><CODE>vi-editing-mode (M-C-j)</CODE> +<DD><A NAME="IDX189"></A> +When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> +editing mode. +<P> + +</DL> +<P> + +<A NAME="Readline vi Mode"></A> +<HR SIZE="6"> +<A NAME="SEC22"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC23"> > </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC23"> >> </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H2> 1.5 Readline vi Mode </H2> +<!--docid::SEC22::--> +<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 standard. +</P><P> + +In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> +editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode +when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> 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><P> + +<A NAME="GNU Free Documentation License"></A> +<HR SIZE="6"> +<A NAME="SEC23"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> < </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> << </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> Up </A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1> A. GNU Free Documentation License </H1> +<!--docid::SEC23::--> +<P> + +<center> + Version 1.3, 3 November 2008 +</center> +</P><P> + +<TABLE><tr><td> </td><td class=display><pre style="font-family: serif">Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +<A HREF="http://fsf.org/">http://fsf.org/</A> + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +</pre></td></tr></table></P><P> + +<OL> +<LI> +PREAMBLE +<P> + +The purpose of this License is to make a manual, textbook, or other +functional and useful document <EM>free</EM> in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +</P><P> + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +</P><P> + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +</P><P> + +<LI> +APPLICABILITY AND DEFINITIONS +<P> + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +</P><P> + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +</P><P> + +A "Secondary Section" is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +</P><P> + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +</P><P> + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +</P><P> + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". +</P><P> + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, <FONT SIZE="-1">SGML</FONT> or <FONT SIZE="-1">XML</FONT> using a publicly available +<FONT SIZE="-1">DTD</FONT>, and standard-conforming simple <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> designed for human modification. Examples +of transparent image formats include <FONT SIZE="-1">PNG</FONT>, <FONT SIZE="-1">XCF</FONT> and +<FONT SIZE="-1">JPG</FONT>. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, <FONT SIZE="-1">SGML</FONT> or +<FONT SIZE="-1">XML</FONT> for which the <FONT SIZE="-1">DTD</FONT> and/or processing tools are +not generally available, and the machine-generated <FONT SIZE="-1">HTML</FONT>, +PostScript or <FONT SIZE="-1">PDF</FONT> produced by some word processors for +output purposes only. +</P><P> + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +</P><P> + +The "publisher" means any person or entity that distributes copies +of the Document to the public. +</P><P> + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. +</P><P> + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +</P><P> + +<LI> +VERBATIM COPYING +<P> + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +</P><P> + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +</P><P> + +<LI> +COPYING IN QUANTITY +<P> + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +</P><P> + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +</P><P> + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +</P><P> + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +</P><P> + +<LI> +MODIFICATIONS +<P> + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +</P><P> + +<OL> +<LI> +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. +<P> + +<LI> +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. +<P> + +<LI> +State on the Title page the name of the publisher of the +Modified Version, as the publisher. +<P> + +<LI> +Preserve all the copyright notices of the Document. +<P> + +<LI> +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. +<P> + +<LI> +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. +<P> + +<LI> +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. +<P> + +<LI> +Include an unaltered copy of this License. +<P> + +<LI> +Preserve the section Entitled "History", Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled "History" in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. +<P> + +<LI> +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the "History" section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. +<P> + +<LI> +For any section Entitled "Acknowledgements" or "Dedications", Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. +<P> + +<LI> +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. +<P> + +<LI> +Delete any section Entitled "Endorsements". Such a section +may not be included in the Modified Version. +<P> + +<LI> +Do not retitle any existing section to be Entitled "Endorsements" or +to conflict in title with any Invariant Section. +<P> + +<LI> +Preserve any Warranty Disclaimers. +</OL> +<P> + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +</P><P> + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +</P><P> + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +</P><P> + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +</P><P> + +<LI> +COMBINING DOCUMENTS +<P> + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +</P><P> + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +</P><P> + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all +sections Entitled "Endorsements." +</P><P> + +<LI> +COLLECTIONS OF DOCUMENTS +<P> + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +</P><P> + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +</P><P> + +<LI> +AGGREGATION WITH INDEPENDENT WORKS +<P> + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +</P><P> + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +</P><P> + +<LI> +TRANSLATION +<P> + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +</P><P> + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +</P><P> + +<LI> +TERMINATION +<P> + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +</P><P> + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +</P><P> + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +</P><P> + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +</P><P> + +<LI> +FUTURE REVISIONS OF THIS LICENSE +<P> + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +<A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>. +</P><P> + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +</P><P> + +<LI> +RELICENSING +<P> + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the +site means any set of copyrightable works thus published on the MMC +site. +</P><P> + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +</P><P> + +"Incorporate" means to publish or republish a Document, in whole or +in part, as part of another Document. +</P><P> + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +</P><P> + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +</P><P> + +</OL> +<P> + +<A NAME="SEC24"></A> +<H2> ADDENDUM: How to use this License for your documents </H2> +<!--docid::SEC24::--> +<P> + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> Copyright (C) <VAR>year</VAR> <VAR>your name</VAR>. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with<small>...</small>Texts." line with this: +</P><P> + +<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> with the Invariant Sections being <VAR>list their titles</VAR>, with + the Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts + being <VAR>list</VAR>. +</FONT></pre></td></tr></table></P><P> + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +</P><P> + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +</P><P> + +<HR SIZE="6"> +<A NAME="SEC_Contents"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Table of Contents</H1> +<UL> +<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A> +<BR> +<UL> +<A NAME="TOC2" HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A> +<BR> +<A NAME="TOC3" HREF="rluserman.html#SEC3">1.2 Readline Interaction</A> +<BR> +<UL> +<A NAME="TOC4" HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A> +<BR> +<A NAME="TOC5" HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A> +<BR> +<A NAME="TOC6" HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A> +<BR> +<A NAME="TOC7" HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A> +<BR> +<A NAME="TOC8" HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A> +<BR> +</UL> +<A NAME="TOC9" HREF="rluserman.html#SEC9">1.3 Readline Init File</A> +<BR> +<UL> +<A NAME="TOC10" HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A> +<BR> +<A NAME="TOC11" HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A> +<BR> +<A NAME="TOC12" HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A> +<BR> +</UL> +<A NAME="TOC13" HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A> +<BR> +<UL> +<A NAME="TOC14" HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A> +<BR> +<A NAME="TOC15" HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A> +<BR> +<A NAME="TOC16" HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A> +<BR> +<A NAME="TOC17" HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A> +<BR> +<A NAME="TOC18" HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A> +<BR> +<A NAME="TOC19" HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A> +<BR> +<A NAME="TOC20" HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A> +<BR> +<A NAME="TOC21" HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A> +<BR> +</UL> +<A NAME="TOC22" HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A> +<BR> +</UL> +<A NAME="TOC23" HREF="rluserman.html#SEC23">A. GNU Free Documentation License</A> +<BR> +</UL> +<HR SIZE=1> +<A NAME="SEC_OVERVIEW"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>Short Table of Contents</H1> +<BLOCKQUOTE> +<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A> +<BR> +<A NAME="TOC23" HREF="rluserman.html#SEC23">A. GNU Free Documentation License</A> +<BR> + +</BLOCKQUOTE> +<HR SIZE=1> +<A NAME="SEC_About"></A> +<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> +<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> +<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> +</TR></TABLE> +<H1>About this document</H1> +This document was generated by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> +<P></P> +The buttons in the navigation panels have the following meaning: +<P></P> +<table border = "1"> +<TR> +<TH> Button </TH> +<TH> Name </TH> +<TH> Go to </TH> +<TH> From 1.2.3 go to</TH> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ < ] </TD> +<TD ALIGN="CENTER"> +Back +</TD> +<TD> +previous section in reading order +</TD> +<TD> +1.2.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ > ] </TD> +<TD ALIGN="CENTER"> +Forward +</TD> +<TD> +next section in reading order +</TD> +<TD> +1.2.4 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ << ] </TD> +<TD ALIGN="CENTER"> +FastBack +</TD> +<TD> +previous or up-and-previous section +</TD> +<TD> +1.1 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ Up ] </TD> +<TD ALIGN="CENTER"> +Up +</TD> +<TD> +up section +</TD> +<TD> +1.2 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ >> ] </TD> +<TD ALIGN="CENTER"> +FastForward +</TD> +<TD> +next or up-and-next section +</TD> +<TD> +1.3 +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Top] </TD> +<TD ALIGN="CENTER"> +Top +</TD> +<TD> +cover (top) of document +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Contents] </TD> +<TD ALIGN="CENTER"> +Contents +</TD> +<TD> +table of contents +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [Index] </TD> +<TD ALIGN="CENTER"> +Index +</TD> +<TD> +concept index +</TD> +<TD> + +</TD> +</TR> +<TR> +<TD ALIGN="CENTER"> + [ ? ] </TD> +<TD ALIGN="CENTER"> +About +</TD> +<TD> +this page +</TD> +<TD> + +</TD> +</TR> +</TABLE> +<P></P> +where the <STRONG> Example </STRONG> assumes that the current position +is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of +the following structure: +<UL> +<LI> 1. Section One </LI> +<UL> +<LI>1.1 Subsection One-One</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.2 Subsection One-Two</LI> +<UL> +<LI>1.2.1 Subsubsection One-Two-One +</LI><LI>1.2.2 Subsubsection One-Two-Two +</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> +<== Current Position </STRONG> +</LI><LI>1.2.4 Subsubsection One-Two-Four +</LI></UL> +<LI>1.3 Subsection One-Three</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.4 Subsection One-Four</LI> +</UL> +</UL> + +<HR SIZE=1> +<BR> +<FONT SIZE="-1"> +This document was generated +by <I>Chet Ramey</I> on <I>February, 8 2011</I> +using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html +"><I>texi2html</I></A> + +</BODY> +</HTML> diff --git a/readline-6.2/doc/rluserman.info b/readline-6.2/doc/rluserman.info new file mode 100644 index 0000000..dc06b20 --- /dev/null +++ b/readline-6.2/doc/rluserman.info @@ -0,0 +1,1875 @@ +This is rluserman.info, produced by makeinfo version 4.13 from +/usr/src/local/chet/src/bash/readline-src/doc/rluserman.texi. + +This manual describes the end user interface of the GNU Readline Library +(version 6.2, September 6 2010), a library which aids in the +consistency of user interface across discrete programs which provide a +command line interface. + + Copyright (C) 1988-2011 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, with the Front-Cover texts + being "A GNU Manual", and with the Back-Cover Texts as in (a) + below. A copy of the license is included in the section entitled + "GNU Free Documentation License". + + (a) The FSF's Back-Cover Text is: You are free to copy and modify + this GNU manual. Buying copies from GNU Press supports the FSF in + developing GNU and promoting software freedom." + + +INFO-DIR-SECTION Libraries +START-INFO-DIR-ENTRY +* RLuserman: (rluserman). The GNU readline library User's Manual. +END-INFO-DIR-ENTRY + + +File: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) + +GNU Readline Library +******************** + +This document describes the end user interface of the GNU Readline +Library, a utility which aids in the consistency of user interface +across discrete programs which provide a command line interface. + +* Menu: + +* Command Line Editing:: GNU Readline User's Manual. +* GNU Free Documentation License:: License for copying this manual. + + +File: rluserman.info, Node: Command Line Editing, Next: GNU Free Documentation License, Prev: Top, Up: Top + +1 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: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing + +1.1 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. The Meta key is labeled <ALT> on many keyboards. On +keyboards with two keys labeled <ALT> (usually to either side of the +space bar), the <ALT> on the left side is generally set to work as a +Meta key. The <ALT> key on the right may also be configured to work as +a Meta key or may be configured as some other modifier, such as a +Compose key for typing accented characters. + + If you do not have a Meta or <ALT> key, or another key working as 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::). +If your keyboard lacks a <LFD> key, typing <C-j> will produce the +desired character. The <RET> key may be labeled <Return> or <Enter> on +some keyboards. + + +File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing + +1.2 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 <RET>. You do not have to be at the end of +the line to press <RET>; the entire line is accepted regardless of the +location of the cursor within the line. + +* Menu: + +* Readline Bare Essentials:: The least you need to know about Readline. +* Readline Movement Commands:: Moving about the input line. +* Readline Killing Commands:: How to delete text, and how to get it back! +* Readline Arguments:: Giving numeric arguments to commands. +* Searching:: Searching through previous lines. + + +File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction + +1.2.1 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 mistype a character, and not notice the 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 bare essentials for editing the text of an input line +follows. + +`C-b' + Move back one character. + +`C-f' + Move forward one character. + +<DEL> or <Backspace> + 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-_' or `C-x C-u' + Undo the last editing command. You can undo all the way back to an + empty line. + +(Depending on your configuration, the <Backspace> key be set to delete +the character to the left of the cursor and the <DEL> key set to delete +the character underneath the cursor, like `C-d', rather than the +character to the left of the cursor.) + + +File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction + +1.2.2 Readline Movement Commands +-------------------------------- + +The above table describes the most basic 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: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction + +1.2.3 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. (`Cut' and `paste' are more recent jargon for `kill' and +`yank'.) + + 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. Word boundaries are the same + as those used by `M-f'. + +`M-<DEL>' + Kill from the cursor the start of the current word, or, if between + words, to the start of the previous word. Word boundaries are the + same as those used by `M-b'. + +`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: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction + +1.2.4 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', which +will delete the next ten characters on the input line. + + +File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction + +1.2.5 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. To search backward in the +history for a particular string, type `C-r'. Typing `C-s' searches +forward through the history. 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-r' or +`C-s' 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. A movement command will terminate the search, make the +last line found the current line, and begin editing. + + Readline remembers the last incremental search string. If two +`C-r's are typed without any intervening characters defining a new +search string, any remembered search string is used. + + 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: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing + +1.3 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, conventionally 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'. If that file does not exist or cannot be read, the +ultimate default is `/etc/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: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File + +1.3.1 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. The syntax is simple: + + set VARIABLE VALUE + + Here, for example, is how to change from the default Emacs-like + key binding to use `vi' line editing commands: + + set editing-mode vi + + Variable names and values, where appropriate, are recognized + without regard to case. Unrecognized variable names are ignored. + + Boolean variables (those that can be set to on or off) are set to + on if the value is null or empty, ON (case-insensitive), or 1. + Any other value results in the variable being set to off. + + 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. + + `bind-tty-special-chars' + If set to `on', Readline attempts to bind the control + characters treated specially by the kernel's terminal driver + to their Readline equivalents. + + `comment-begin' + The string to insert at the beginning of the line when the + `insert-comment' command is executed. The default value is + `"#"'. + + `completion-display-width' + The number of screen columns used to display possible matches + when performing completion. The value is ignored if it is + less than 0 or greater than the terminal screen width. A + value of 0 will cause matches to be displayed one per line. + The default value is -1. + + `completion-ignore-case' + If set to `on', Readline performs filename matching and + completion in a case-insensitive fashion. The default value + is `off'. + + `completion-map-case' + If set to `on', and COMPLETION-IGNORE-CASE is enabled, + Readline treats hyphens (`-') and underscores (`_') as + equivalent when performing case-insensitive filename matching + and completion. + + `completion-prefix-display-length' + The length in characters of the common prefix of a list of + possible completions that is displayed without modification. + When set to a value greater than zero, common prefixes longer + than this value are replaced with an ellipsis when displaying + possible completions. + + `completion-query-items' + The number of possible completions that determines when the + user is asked whether the list of possibilities should be + displayed. 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. This + variable must be set to an integer value greater than or + equal to 0. A negative value means Readline should never ask. + 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 prefixing 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'. + + `echo-control-characters' + When set to `on', on operating systems that indicate they + support it, readline echoes a character corresponding to a + signal generated from the keyboard. The default is `on'. + + `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'. + + `enable-meta-key' + When set to `on', Readline will try to enable any meta + modifier key the terminal claims to support when it is + called. On many terminals, the meta key is used to send + eight-bit characters. The default is `on'. + + `expand-tilde' + If set to `on', tilde expansion is performed when Readline + attempts word completion. The default is `off'. + + `history-preserve-point' + If set to `on', the history code attempts to place the point + (the current cursor position) at the same location on each + history line retrieved with `previous-history' or + `next-history'. The default is `off'. + + `history-size' + Set the maximum number of history entries saved in the + history list. If set to zero, the number of entries in the + history list is not limited. + + `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 clear the eighth bit in 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-move', + `vi-command', and `vi-insert'. `vi' is equivalent to + `vi-command'; `emacs' is equivalent to `emacs-standard'. The + default value is `emacs'. The value of the `editing-mode' + variable also affects the default keymap. + + `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. + + `mark-symlinked-directories' + If set to `on', completed names which are symbolic links to + directories have a slash appended (subject to the value of + `mark-directories'). The default is `off'. + + `match-hidden-files' + This variable, when set to `on', causes Readline to match + files whose names begin with a `.' (hidden files) when + performing filename completion. If set to `off', the leading + `.' must be supplied by the user in the filename to be + completed. This variable is `on' by default. + + `menu-complete-display-prefix' + If set to `on', menu completion displays the common prefix of + the list of possible completions (which may be empty) before + cycling through the list. The default is `off'. + + `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'. + + `page-completions' + If set to `on', Readline uses an internal `more'-like pager + to display a screenful of possible completions at a time. + This variable is `on' by default. + + `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'. + + `revert-all-at-newline' + If set to `on', Readline will undo all changes to history + lines before returning when `accept-line' is executed. By + default, history lines may be modified and retain individual + undo lists across calls to `readline'. 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'. + + `show-all-if-unmodified' + This alters the default behavior of the completion functions + in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to + `on', words which have more than one possible completion + without any possible partial completion (the possible + completions don't share a common prefix) cause the matches to + be listed immediately instead of ringing the bell. The + default value is `off'. + + `skip-completed-text' + If set to `on', this alters the default completion behavior + when inserting a single match into the line. It's only + active when performing completion in the middle of a word. + If enabled, readline does not insert characters from the + completion that match characters after point in the word + being completed, so portions of the word following the cursor + are not duplicated. For instance, if this is enabled, + attempting completion when the cursor is after the `e' in + `Makefile' will result in `Makefile' rather than + `Makefilefile', assuming there is a single possible + completion. 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 need to find 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 on a line in + the init file the name of the key you wish to bind the command to, + a colon, and then the name of the command. There can be no space + between the key name and the colon - that will be interpreted as + part of the key name. The name of the key can be expressed in + different ways, depending on what you find most comfortable. + + In addition to command names, readline allows keys to be bound to + a string that is inserted when the key is pressed (a MACRO). + + 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', `M-DEL' is bound to the function + `backward-kill-word', 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). + + A number of symbolic character names are recognized while + processing this key binding syntax: DEL, ESC, ESCAPE, LFD, + NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. + + "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 again 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 + + `\"' + <">, a double quotation mark + + `\'' + <'>, a single quote or apostrophe + + 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 eight-bit character whose value is the octal value NNN + (one to three digits) + + `\xHH' + the eight-bit character whose value is the hexadecimal value + HH (one or two hex 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: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File + +1.3.2 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 a particular value. 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. For example, the following + directive reads from `/etc/inputrc': + $include /etc/inputrc + + +File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File + +1.3.3 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: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing + +1.4 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. Command names without an accompanying key sequence are +unbound by default. + + In the following descriptions, "point" refers to the current cursor +position, and "mark" refers to a cursor position saved by the +`set-mark' command. The text between the point and mark is referred to +as the "region". + + +File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands + +1.4.1 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 the current or 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: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands + +1.4.2 Commands For Manipulating The History +------------------------------------------- + +`accept-line (Newline or Return)' + Accept the line regardless of where the cursor is. If this line is + non-empty, it may be added to the history list for future recall + with `add_history()'. If this line is a modified history line, + the history line is restored to its original state. + +`previous-history (C-p)' + Move `back' through the history list, fetching the previous + command. + +`next-history (C-n)' + Move `forward' through the history list, fetching the next command. + +`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 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) at point. 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. Once the + argument N is computed, the argument is extracted as if the `!N' + history expansion had been specified. + +`yank-last-arg (M-. or M-_)' + Insert last argument to the previous command (the last word of the + previous history entry). With a numeric argument, behave exactly + like `yank-nth-arg'. Successive calls to `yank-last-arg' move + back through the history list, inserting the last word (or the + word specified by the argument to the first call) of each line in + turn. Any numeric argument supplied to these successive calls + determines the direction to move through the history. A negative + argument switches the direction through the history (back or + forward). The history expansion facilities are used to extract + the last argument, as if the `!$' history expansion had been + specified. + + + +File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands + +1.4.3 Commands For Changing Text +-------------------------------- + +`delete-char (C-d)' + Delete the character at point. If point 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 or 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 have no effect. + +`transpose-words (M-t)' + Drag the word before point past the word after point, moving point + past that word as well. If the insertion point is at the end of + the line, this transposes the last two words on the line. + +`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. + +`overwrite-mode ()' + Toggle overwrite mode. With an explicit positive numeric argument, + switches to overwrite mode. With an explicit non-positive numeric + argument, switches to insert mode. This command affects only + `emacs' mode; `vi' mode does overwrite differently. Each call to + `readline()' starts in insert mode. + + In overwrite mode, characters bound to `self-insert' replace the + text at point rather than pushing the text to the right. + Characters bound to `backward-delete-char' replace the character + before point with a space. + + By default, this command is unbound. + + + +File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands + +1.4.4 Killing And Yanking +------------------------- + +`kill-line (C-k)' + Kill the text from point 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. + +`kill-whole-line ()' + Kill all characters on the current line, no matter where point is. + By default, this is unbound. + +`kill-word (M-d)' + Kill from point 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 point. Word boundaries are the same as + `backward-word'. + +`unix-word-rubout (C-w)' + Kill the word behind point, using white space as a word boundary. + The killed text is saved on the kill-ring. + +`unix-filename-rubout ()' + Kill the word behind point, using white space and the slash + character as the word boundaries. 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 in the current 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 point. + +`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: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands + +1.4.5 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: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands + +1.4.6 Letting Readline Type For You +----------------------------------- + +`complete (<TAB>)' + Attempt to perform completion on the text before point. The + actual completion performed is application-specific. The default + is filename completion. + +`possible-completions (M-?)' + List the possible completions of the text before point. When + displaying completions, Readline sets the number of columns used + for display to the value of `completion-display-width', the value + of the environment variable `COLUMNS', or the screen width, in + that order. + +`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 (subject to the setting of + `bell-style') 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. + +`menu-complete-backward ()' + Identical to `menu-complete', but moves backward through the list + of possible completions, as if `menu-complete' had been given a + negative argument. + +`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: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands + +1.4.7 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: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands + +1.4.8 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>)' + Metafy the next character typed. This is for keyboards without a + meta key. Typing `<ESC> f' is equivalent to typing `M-f'. + +`undo (C-_ or 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 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. + +`skip-csi-sequence ()' + Read enough characters to consume a multi-key sequence such as + those defined for keys like Home and End. Such sequences begin + with a Control Sequence Indicator (CSI), usually ESC-[. If this + sequence is bound to "\e[", keys producing such sequences will + have no effect unless explicitly bound to a readline command, + instead of inserting stray characters into the editing buffer. + This is unbound by default, but usually bound to ESC-[. + +`insert-comment (M-#)' + Without a numeric argument, the value of the `comment-begin' + variable is inserted at the beginning of the current line. If a + numeric argument is supplied, this command acts as a toggle: if + the characters at the beginning of the line do not match the value + of `comment-begin', the value is inserted, otherwise the + characters in `comment-begin' are deleted from the beginning of + the line. In either case, 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 output. 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. + +`emacs-editing-mode (C-e)' + When in `vi' command mode, this causes a switch to `emacs' editing + mode. + +`vi-editing-mode (M-C-j)' + When in `emacs' editing mode, this causes a switch to `vi' editing + mode. + + + +File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing + +1.5 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 standard. + + In order to switch interactively between `emacs' and `vi' editing +modes, use the command `M-C-j' (bound to emacs-editing-mode when in +`vi' mode and to vi-editing-mode in `emacs' 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. + + +File: rluserman.info, Node: GNU Free Documentation License, Prev: Command Line Editing, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + + +Tag Table: +Node: Top1373 +Node: Command Line Editing1827 +Node: Introduction and Notation2481 +Node: Readline Interaction4105 +Node: Readline Bare Essentials5298 +Node: Readline Movement Commands7089 +Node: Readline Killing Commands8056 +Node: Readline Arguments9978 +Node: Searching11024 +Node: Readline Init File13177 +Node: Readline Init File Syntax14332 +Node: Conditional Init Constructs29394 +Node: Sample Init File31929 +Node: Bindable Readline Commands35048 +Node: Commands For Moving36107 +Node: Commands For History36970 +Node: Commands For Text40376 +Node: Commands For Killing43104 +Node: Numeric Arguments45248 +Node: Commands For Completion46389 +Node: Keyboard Macros48360 +Node: Miscellaneous Commands48933 +Node: Readline vi Mode52791 +Node: GNU Free Documentation License53705 + +End Tag Table diff --git a/readline-6.2/doc/rluserman.pdf b/readline-6.2/doc/rluserman.pdf Binary files differnew file mode 100644 index 0000000..f0a2d2f --- /dev/null +++ b/readline-6.2/doc/rluserman.pdf diff --git a/readline-6.2/doc/rluserman.ps b/readline-6.2/doc/rluserman.ps new file mode 100644 index 0000000..46c7f69 --- /dev/null +++ b/readline-6.2/doc/rluserman.ps @@ -0,0 +1,4975 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software +%%Title: rluserman.dvi +%%Pages: 32 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 +%%+ CMSLTT10 CMTI10 CMSL10 CMTT9 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -D 600 -t letter -o rluserman.ps rluserman.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2011.02.08:1113 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A +mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 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/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.1: CMSLTT10 1.0 +%%CreationDate: 1991 Aug 20 16:41:43 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +end readonly def +/FontName /CMSLTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 39 /quoteright put +dup 45 /hyphen put +dup 48 /zero put +dup 49 /one put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 72 /H put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 92 /backslash put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-20 -233 617 696}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 +0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB +4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 +8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 +8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 +B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F +ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 +C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F +EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F +2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 +4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 +52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D +38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA +00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 +B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D +CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF +B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F +802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE +32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 +00DE382ABED85350033F8ECB97398E4E0A75D4877A107F6A909D0C76D14F9A96 +8A6CFDE3FD9D79B6FD82693A9F354BD2ECF30C6D99F7AC522F8D6C93EA214F7B +3D0ED77F042ACDE9414264C0698E86398562E2C640DEBBA0734AB4C3ACE3907D +CC79E6B2C6C3C3F9B01526E8CD98237D4A9B403FF8CE3132222FA60C196A19BC +A2393AE6935C0F8B67FC1D1A12A45ED5F28B5D6A266A3ECAA5BC3429F2B2FFDD +70F50A94CACA6AA6B2215B41EA683DF13679E9C950276294B15370256F17E3E8 +5FB8B575E7D4A3FC9BD8A5FAE6FCA53DF678F37701E83F18F1E116E901A39DCB +C05CF72BFAF7FD8CC6A63A23C1CFC064EF32F3F67EE47B4209A5F83A5B2681C7 +8349B0C686E9D9844242C28DEC5E33DF480418F784EF676681D52ED234561B62 +4B7896DEC847A783789BFA4159279438404D596C9E6789B5C63C749AF0C3FBB3 +AADFC022B8682FD21F13460FE480C6B8CC1FB4EAC8E7AAFDCFDAD39508EF9B61 +BBCC73F90FB40E94EAC04892831753F15E06F77399F8ADB508F411A89A0399B4 +240C28E4DDDA98B9E771FE6AA0E2C8DE04DDA8AE54BD1A90DAFC1B0B66964F3E +31475DBBC3D3BA2CA2C3D55D91917F6E496EFBCD5CBC46A27DB7E3FD229DE5AE +A194E4B767F933C434D204BB080A5C24805A23E477BCFF6D19DB22FAFFEB97CA +5445129773D40A43537F15EE90CC399EF58C31253BBC0177D05A1DBF23EB26D0 +159FA4D20E5E5B04A125FFF85CD1154B20BC5BFBA18F87670A2BF1A32A696A70 +4E82EBEC804D798202DAF537B468B5880FCAC75BDCFBF65FE6EBB93A1309D343 +09CCF1B81155761809E4ABA53CC9BF8D3FEC5602A6F3561CF2AF6D0A35B8876A +8BE4CCBCB2DE4E4D07F50F9C5F831C499ADC35827F7F7BE7E1E0CE1BF2E3578E +FA292C0CFCA10329156FC79BE3D80225794DE7062B8CE232355007F53F9184BA +93F2C8F0EC8FD88F01397E1EC2ADBAA889C003AE4847BD08FBD9673C4B4D20D7 +53D0FD11FE4DE30AF01AF0141573DEB0B054DE244035E6161962D9BA836D42B9 +8B8006A40E357E28859D867052CE7DAA86F32641C1764A51F631CBA3FC206667 +81863B28C5BEE78C574F1946253D192C50CED9746B01CF4BEDDB5AB7492E36B0 +FDDB90206C5410551EA2F44E427B6A254FB2E965932DFA8A4465B509276CDAF3 +CFE6FC9963F801813A03D434B74273BC4FBA6FFB8545A10B453F8AC8086DA9CB +49A701C500FD3D1577A215026EEB1AD2616223CC65E34CA84D1BAB896EE60C08 +7708BB0E5FFAC9EE1A24F72F03C13B8A275264CE267728084388365FF79B895C +B65A33011BBEB2356016786F62EBCE765891CCEBC5A57453AA1AE771147D23C5 +7E289B67C94A4C7DBB3520A7E5BA938DDDE360FF69484CC4F31D57271BE2D19F +7E689DD8373EC2CF7E3874711F3E3EDEEB09435AA0909418AD76074944C06BC6 +10C087339F57A1C828E1DCAC8B6F7D1F94A25133D72E68BA0C15586C997581B5 +957F59D0445D39E0F8226D4C621E9B12256EB583A7EE4A5EBD15B3E6BC9F6687 +28735EC4962332DEAD2D2A28714FB8F606B358E3E9ABC868E169E3FCEA409A48 +6998A5F444CE13F65F3F9D4B2A90CF483346348E4E6B4868C442C83726634EA4 +D4917AC8ED021012707DFC72926B58917264925482CA53A2BB96E2FC58A6083E +4D7193E39B0B20EA7BC306FFBD70D434795176E77DC76C9643560472AC2718E2 +9A70D6973D0903263D1DEC1E82752CAC7AC2EC5442D9151BF459C27D96A28096 +42ADFD3D9FAA7A42A2EBE9CA3D7DC90AD0A6BA1B9F5224FBE0051352176DA443 +039B52443A0031BCD66485F49B55D7DBF4F4EB7E4A87DCF7A1F3F345EF85DA6D +30CA6E389FC39930850B63E8EF3523AE1FF188DE5E26766C160A2F1631E1846D +6DAEF695D585909E1F9A85C551B864046B534FDE0A35E54ACB3EDCF34A87CCC7 +C6073D2761CF74B07D154A4C560F5595A87250E3549E3706A402F3CC879AB051 +796A168E1197187ECF09AC42398AE4085F4C70EFDF98C387C232E3C323C6C496 +5EA1A799D2EC3E9E6C8060ACFFEB714FBBF8210D285D871A40DE8C39DF37FE1F +241491B1B483A0B7D95DEA6E211954DCF49DA353F4A71CD9E0D144E84CE4A426 +8558F4B2BC06A7D44C961B6ADABA9759D1FF06DCFDE125D0947BC6982C375891 +72762550A44639B5E5E19EBD541848342C060714443D5E96537E1A214E9843F0 +5321B2479DFEE8DD1836B48CDDD5A117E20032334F18267B7323BCEDE5896BFC +F0D91FA4B1AD0C4E38D9906ABD7009FB69A77CD280BF9BF43772371975CA6145 +A96F562D335A5B4D1366F728243C521B01D9008E655890AACABA0C45DCB1F45E +BB6CABA51B1D31EA51637D0EE279B49257EE30B587E17DFF959E000AAA048D31 +F998B857205295CBE7177CDF44CC9BDA33CBC918B0AE72187BBB0BC23696F7AB +1BB5A7D3705FE0579F20707008CD2A88D110343AA8B827A5EE6118F5D846F250 +6FDBC37270FB344E37B33F5F6DF16920CE3518BD459A8349CB87F8D9A61F36B8 +B1D26717D4BD4B8E76E283489718D38C66D0B4473D577F373F9A938705E0C620 +CD56F9B105C4E65B56E55CDD6893B3441F8B215C17E35E3EE4E734AF17C48895 +CE02A9B55C7738B8836EFEBE12AC9E6488CE6C828F2422EFBFDB4EBE80FD6E61 +0D0B85F1DFF9B8F319B0B696E90F60312506934F212454E10C673DF013C6F913 +E60BD6301A9AAB7DAFE5D6193731260024AFA425D46B4BEBD55133A3BB27B27E +8837C39FFF999C01E9A3EB8905D2FFD482348BC97C07E7B2256CA33303322A5B +587B1FF198422716A4577CE681B120C4D074EA2B3C275646B853360FC134D674 +0CF1007077B35E3A1D100A3C620BA005BB9F80444DC927E6AAC738DE5B3F87EE +190B2FF31CE1B1A0AD34C19B28DE21136462A3591002EDB5CBDC06E09326733A +8498626848549F36B077DFB2A2FCCBB775BAFC2C46BA20811049B7AF4F34C009 +71468C3641D8ED8616C21D1DC90E21A72AFE14B5F5718A42F11F46F2C3CF3FFA +992DAAA3A3BC90073B3E2765C75F05A5EBDE85F37826131DCE2967089E8F7E69 +F16B41BCFB8914BF2F0B806CB35B133564224C0C9C1D6E3032D276D5464873D9 +0D17CC512E5CFAB6570D61E8D023D2CFE020212DB7B0FBF3D324FA5B3AFE7951 +E8382B7A8FDEBBACAE4B02CDD3D1791C79A78B9D49F20FD6F22B7E55CE36836E +31A5B619B305CDDC722F6AC84CBC0D49835647204BDABCFF59D9F3B5EA22D533 +F316DD5EFC59A7F645AEE0BCDC07193111510563159EF684A739CE67EEB77638 +54F0C3D4E1A54801F4887BAD58EEDA68539B2A43B5B5D79369F74035966F07E1 +3FFD43FFF05F7EBA48DB0F988F34A44A0B15B028508868EFEA89F22C61DBA74C +E04F9DBFD28DEC1EBC536587EF7A8DDD7B0ADAF459C0F22C24DC2D8C797C14B5 +9370504500422265C0AEFA2A8C367AD89ABC057E4B6043D991EA59564C1ABD06 +6C6E9147806C79DEA43EB8B7D0560DEB9C81766B9D79608A91D7AB606A7CD6C6 +276BF4F7E294BD0D0D3F94B321434B1A9CD4206E3146B3CE1113D62E7791BD79 +9AE322A997557EDC27045FA4521AB379253C27A4A234662FB4F73AE398C4C9E0 +2D4B3E7EF5F1E5BEEA50FE62B8AC0D42C131FD507D6D1735FD79F8223516E84E +755930A2E30B80E63A6B24CD4244584BF7E93083EE46EFD9CD19A71A4B8453AB +233710DC0AE68FAB2B1D9E3A17DE97AE09935E0056589BB7B3AFF3672B406CD8 +E914F786600C5B7AC4E8C57BB65B580A02BE8491E0D8E5817A99C4695E1D3A27 +12E5F7A945BFDB67E2CA285C3ABE5C15C870530F588E0B8686A4C551941BB2C4 +9E9A8DA9A4D4834E09A78F824F60A84C4A84B6C5748BA8D752D0CAB8CABDA89D +8E21E4FC69C5994E3E100967DBFFA4D2E12BB0E73ED53EA1AD925855DA1A77BA +1231422722DA75174ADD0F0BD549B6BD08114D32BB6E728DC5DBE05CC0FB960B +F1D35253BA31654C6E6DD306285953AA681E9E1414D5F23CBF08E29A5B38F69D +99C6E44DA0C42FB260F1E6D4E947215A0FF41F756177180D3754737C0BF59083 +C47C302D87268AAED752370EFDBC276D0AD59C5A75CA13B292437DA5A90B1713 +723728166637A3C4805B4A2BA8CA1F20B4FD331043FB69331E485BF48025BE08 +6369DBD8FAF526B08E633223D011E1E81BE662D98BD64917F09BA1F4277BA164 +4611705F5ADD316341366D3BF8CAB85A21C88F54792D05EAB91D985A557B4C99 +0BD3B4C020F20C860A6ED0E8CAD870045D69BC434F345EE42830FFCF7468CAF3 +93BD5666598D5CA7ADEC208006B7CF38AFA1A0BE24190E283841B9A5FD0696C2 +CB6FB04BE6108AB9E4CD3F772D78D7468EB761444A5B7FC8995D53880BF2616C +522EEA33E0F27A5AA1EA25347FD12A1A95F11CF2F3625D56CF8A9FA23A4EC609 +035CD02CA0934BF6CE80DF59E1B60849B9B4A58C11E83D03BEA42A1A4AC10893 +4B92D0B99362180E29AFF2ACF9E0C99A156725071758399F318D720E37FB73DE +9C5958CC9471C424B5F8E0C76FE28193D2C6514D0EACFEDAB7B76B713BC3AE3D +57DA9D62396F7A7675CDBD164CE3320EC81A1ACE77EF63CC8FDD466564B8171F +2157EC631437182AFC083A1B29C223FA944A54930A41824F76E35E5FEF17A836 +4440E9BB793DCDA897B938696458A3BD9C3DED24C2C638C3603939AF44DB144E +5BCA51A7D729DFBE26E0884B22C0C4E3131AB82CDA170474168D89124A65B0BA +91523CD1D67475C9D43CB7525451A27B62723867F123003A99B98F2C3C2A482F +68FB4C42547AA6C4B9B1C8A4259A8A27305A2F0B147BBE39264F510142668128 +FE6610D8D748A20B9F75D48C3692FBFA1EBFE73A3279BD4C38DBDBA0CD429439 +F3C0FE231D0F381D369A1E356917184A4DE9CBB64F400C28B41DFD35F9F74FC1 +57F46400574ECE064CA9AAEA8D70A61F5BE95B5FDFECF87E04D4C45AC7D441A5 +88E6CF0C447DFC832179C012B46B19A7B2542EE40727DED27E08417639D6FDF7 +901CA1AF7385704E7EDF49D8A9AC990CE68A8898B02D618F8700D04426A5692F +24640B4311C917D9D0B86E45D9D43B99DC81836AE454C14242D107BCE8E4B989 +D8CAA8C401A56CFA611923072B72EF56284AE467BB8E2B04AF81D1C968321611 +B4D1A07B8E2CD4ADA29A8DBE695BCB6F022C8C53E9F0210A0D08F9A531FBAF0A +902E31DA6B2A3EC290F1A0EB4A5FA4FD504530AF768C15E3EB857849824EE965 +94E2F1974A60615DEDEBC4F4D8D70CA6A4385A45ECEBAC78C945ABFA42B90EA1 +17C59E615272A91488161C2B7B23A8B1F2C7119A49EB7226BEEB3A4C7CDB67DF +11F945CF22FFED4DDCDDE1E9AD88C63A6A271883F9104CD7F596AA77CCACA8B9 +D5D772A3C0ABDE3F7BBFFD678744DB7540FBF0BDC9D00A0C7E9170A127D21C72 +4B81D78F949773598921A5D3F756CF5823ECE57613DDBEE58F3428BD29BFAC3F +1EA57663472AEAAD48260EAC5912FC7273F102D1217BF43D6E52CFA93A991B74 +8C6489D7ABD79227C82F85E06D736602AFF3F497C64644DF79F460569F2C3BA2 +250D48D0C0EF5B4A3668BEDD804CD134A0E26FCA4BF071FEA9EB46D5AA52D66B +4F954E3AB2BA1EA71EB9BE254AD0C5C39A408AF4D287AA24C533BE9BFC0853AC +C31C43D8C419F5CD294ED38E56645A31FE4AB2C60D4486493ED8199461483F82 +EBDF44F1792BB87CE851105BF44213B35EA812CE967FBAF7304703315F2D126F +12460B0EB045BC8E196C7816B105259BFDE8C8EC49A751B0DBD7367C0661EA7D +1A79053C371DE08C233E1774998F8C86F78E4FF7E9239524A784509254D65002 +F9BE0D2A40488E0BE2DE6F336BB7337750F57F94B20764111594B2EAC17391ED +3C20C8F3277E1E431D55893EA0CAB659ADBC502D85B75DE299044985575C09D6 +C2D275221C738B967F1C92E73FE4E43353845D74B103D6B57B442DDAB3A46B7A +EF6E776D82B5B9873EF5B3AA77A18FA7069429441BB791123974281B720E6EB2 +6472549EB921883170FCFE289C00A159EAE56B9A8515482CBD5161B70B643718 +92D7BB3FC8E9E45F3635B242BD08FBD958C297205ED7FC812B7B70F65E979BA5 +73E7A7A348FB656843988DA4518F13814A14C336A4F2A610B5D9AD65CE1135F3 +3ACB2594B4204A0A852841F6D3EC52B4262AF8FD7B1E7A860105C85CB95D94D5 +C3BA8374B1DA93F493A25920058409C83B7529FFA6B3FFE79D7EA6F57E2E12F2 +A210EF27BF52F1A366C1B193821BD775FC92335B42854C7C11B253A653A74A7B +D213A63B69BD0B1FFB4DFBAEBD66C1096C6F2C9B065B5F20E9B02478D1CB8595 +0F68DADA125FA3EB8B7602E94A31750DFCCDED8759E4D87110D7F7B05EC9604E +364A9BE1D94E15B807C74E2ADC03047EE296179FD4F2C8BA93122598435D2D5F +D3C824E327629F16631BEA2FEABEA5F49E5A9C4AE2F44D5390CE0628A6915660 +C177B8F431D31410DC7709D57275C7FC45F5EB14F71132FB3BC77C2A7B2EE446 +CEE143193419B97A5B25D1756FA017E17848159CB5FF55E5D240B4E01C83161D +F3DC8D5D72000BDFE5F53F037CAF57994ACC60FF66417D6B5B6C9287323E201E +A13DB21DCAE0AFBD2149E8620B22EC21144BFAED02E1B16980897218538DE59C +E9B8009A4E0708802905AFDB35CC605097EB8CC6C48C73243364F184861B11D5 +070EBA71620C255AE2FBF270941222C302E8F0DA166423B88C3854C352B9E792 +ECD12B40F0B0A5A334695B6DC4360B0476E7993730524AB92DC9F8A74DBEA699 +F9F2C31D4DA3F4426595E729F9B7C88E7B46CC3172168F00EF3F60458D5475A0 +F1B42CDDD171E7E8C98C620CB5548F7CEB4E5BB758C197A09CCB3893D3117350 +F42328EAEB3F0034419A838D5ADCA8483BDF72F02E8821CFADC50E9A09A616E7 +4CE5E6CF698C3F919FD0110F5BFCA55E98753C67168AA91EFCDC2A4AB4CC6C18 +1DA72667621CD578C1E449F0E660B35F43244F09DE26C4ED62360AC69C8F8DAF +DA76554E6E0F012CA451F0B946462FC564B1AEAB508EBD2B1A1E43D1E7136DB7 +8173F6C2D2837F0FBCA8864AB719C09898108A4273ADD74721F47AFB2850E12B +CF897301AAA1432DEC0080B2D555BE3C4CE6E652C4806066CB2C19262F219291 +EBB6206B25A12120B1FB077E4638D675B3C50DE867E2C69D9B6BCA9394CA8B5F +AA2D002D9FB8ECEFA144DBD51905024AB54D6EC3F82A0D625AFBBEEEF6C854F2 +7344A10BE1C8CA785D8C3B2DE606D00D19CFDBE7BF781AA177E651EB07705E1C +2DD4A54DBB0ABBF1B57A1BA564FE5A9B12E39E346A387E05C4C3986D9CA23C2B +B2E6A3B4CFD3AD177FC5366B55F11CE924691A1B4DF73830A44E67D750DACBEF +1893527DABFB8970C3D8ADA24918158142D3EC5730F9202A7B9F61C4FFF4B09C +C09DE278B71CA6A061396C3671D3F48E85D1E958E7AE94C0706B90B6906C7587 +CE5DC4A9EF4882C314CC987BCAD4A789A09E4D51F370DE4D4484652836363966 +C80CEDEA41FA816AD86C2D792B5B8D04489DE99F06B3C5CC0110C9F24BA5E95A +E2D78D7FCAFB013BD160BADF4CF2D89F37EEAD80702E440CA21997CA213B96AA +531A385C254518FD23F710EE0573E86499DFCAF6F038D74C9E617446DA8EF87F +0861C3BB2FDF70EE95BAA0BD6728E9B4D9381C2B33E17D17BA54AA45DBDB8413 +CE1589C3E63AD7217F9C6B44FDBCAD121D3219A978EA2DBA90A27CF814B313DC +58C578DF4381F5235499009FEB3CA7D0B4EB8F0839602341D676CD827449D24A +D9E8223C40B5D34B0846BD9615090EAE3CB77D0B8725A3BD5B0A46558BDA5868 +3A00194345114644BD144EA11F49478FF77E259534791C200B0F98B2DDFF2106 +BB10EDDEBDEA6910C4B897B2BC1791DA +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.1: CMTT9 1.0 +%%CreationDate: 1991 Aug 20 16:46:24 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT9 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 49 /one put +dup 51 /three put +dup 59 /semicolon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 70 /F put +dup 71 /G put +dup 73 /I put +dup 76 /L put +dup 78 /N put +dup 80 /P put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-6 -233 542 698}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E +2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 +650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 +F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A +D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E +F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 +4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A +438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD +BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B +A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 +AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 +D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB +CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A +082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 +9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 +4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1 +0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095 +B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53 +703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024 +61E91C6D25FD6823CB24FC863D3836C77A7D349AFA8525388E252386788B28B5 +E463F5448C9A287140C4F5FBE612C8F2C2749196D12097233794F702BE49897A +6DB52147CE35CFED4CC9F38BF3C4AA917D990F007357194F51FF6B77E97C5208 +AE6CB3AC6AF0B5DFD252847C5F1793F5896655EC8D617DFA7FFD9CD861631156 +D178F8C3B2045AE1B4D702708822F2238A29934A870273858FDDD2B9CC74EB9A +4F610646943F34ACF7707568F66F7CD9F3293060431C2A7AD92904FDD44E8079 +80D54755DFA1FFA2A42C954AC6DE1CBB7BD95B11999FA46F57C467CC5E4ABC3D +965925F0572DC4368E8D5F5777A11255BFFF91E833F42339775D1BAB2137B328 +59666E88912D609777309A032B3725AC11BF5CF5EC760438BE5303A48DF475FE +BB57771CB82751F8AE79B3D72CB9B65B192D21E1E3388AC0C9500E132F4017D2 +B6A8BFF48342C94359DCA32D9CE12D6C30011EDA9E28A57A854482FDEA0B6D15 +4574BAD94C43538D87E8DD1FA03AF5FD965C473EF1371A3F125592A0094BE7EE +CAA3E94F48E86E66D203F3AED59CE58AA1EFE006A136D55545B506172CA14C70 +6452DD81DBC1B3721922DDCF2DF6914E354FBBE00D3CBFE8A0AB309FCC3B8B6A +6F9F858984D90E731C80F9B050F48E670CA19D05F5D77441E15F304666154B53 +CBAE581CE6091CAC6485522E795B76C9FC509705F3EB4EF36B7CDF757A509617 +D116D7B97C1A3B7334AEF807C23F9F1B150C895E12F73265E5578C24CCBFD2F6 +3BEF1311E0E015D354F3D18BD4BA1757D95C9C583CD60057385A8BE4D14A730C +BA4DC18D4494D7E765A4CE24E17125FCBECA981F4C2CB4A360B6441A6DB73363 +44F62B470EBD387F1918A814A7B268623F7ADE9229AD314BFA0EC784071190A4 +99FB32985881E32FAD162E8EFFEB6B33E646F97FA94B2AA53F869AA563E519A4 +2EE643CB14B64AD6FC75125203E17826E81F352F5AAA616505D10F7F123EF3E3 +8BC7C41FDE75F110629B87ECC42A3CF2A13308A737D994DBDF999E7496F9B78D +01BC7889B7BCC46A95887C4C5C34A2BF484068B2B5A40FB408FA8A2F6BE6C3E4 +672116535B37825FDDE04CB8B873D9C022955F4AD86D33E836264BD2B907A86E +48647DB50B10327E47259BF9262D2573BB34DC48A9D4731E58CB3617D02004ED +5ACF344C15FF73AD804A871DAF364E51C8907FA058501B08FDD944077C49E44B +8BAB387A220228E5239CAD4856FF52BB67F4FE3916890521F62C9A015162A0E6 +1D9333C4307B1AA0E049783917E2A8E59F47C80861EAC6C277835BDCE9A2AD9D +8F3CA78D928D70843707E4CEA121E2AB97841F9184C7AB1D8D3EEC941FBF1213 +9A03AA68069161FFE31C367F80FE36625EC4524CAC0FDC8647558A1303DFCDE7 +B82D289ACEEDDA1227ADA57600B53C1B8C35D3F011B4B15680C2956E91E5604E +FD866E976DC441EE935D223AE58A57E5AD0F563FCE23DB6D5E03CB0924AF8487 +7A78A88D97581E4F038690F8FE2095C2641CEDE7660EB009B7C2D1A21E425EF0 +CAA97367F222A0E230787CC239F0288E3CE2E97E88B316F57B0238C7E84A84DF +A636A78892873B8FEB525049AEF96A04F90FDEA521DAA5315FE6090F40F34B7F +EC8BAECC2790D7FC35EAA4034F4E95ACDA31608C24075C658750CFA390839E34 +1EA429EE352A5A77DC57AD3467E5704FA3568F1021FB4A0587B16284C3CA9918 +E342156D8675ABBC9A18865926748EE6ED03858C53F4CF5F1D08EE1C43E194CA +4A0DFF7484F620EEAB133D8CEA80A1CEA837B7194FD9964E9C38FB3A4B41593B +30D6B59B1A0CE6775E9A416D97987BEB3930C88E9AA25119BE8DA9F400A6C096 +ABFEF4732C562FB06C963154CE19580639CC09450196616EDB99B6B7ACA1200B +5093FB118CD91AAC60410D522BF73D60BE20C8518A2D242576CDAC5B0FE3E337 +AFE60C493DF2DE758B10A4CA8128CB077C4E73329CC1F3BA0F2E2F2396C19384 +0C2B81621D4712A7BB68EC6163DDD4466BA03A7EC26E54881C05036CB957FD23 +57BF528E13370217A4889F3BADE81CC3658CB9EB356DE450887761DD7BB19C59 +31F8C46886EED761CC1E950086FE1A7BC469FF88780B218F2202A4F1FE006743 +4A5BCCA6D1EB301544E55172485105CF04E05E5A892D2EC0D26B4C1C65162ACD +D0E1E922DE12FB4EE9A1C285F873E0210C756557568BA77FE33770B59197ADCE +ADA771B078D746F5E2E096E3DA6E7FB9659819789AF94FA9A8133940EC2AAC28 +AE8DF11DEB67F5E28A8EDB6700E9D2E39F90C1975A2BD58B67BC3C64CC9CD71C +A0CDAE7E535A207F87523C6B204BB480BC34E9E0CF52C79B6F5D0CAFBA30576A +523D331EEABCBBFAD18B979696C7210BD5B4AE34BB106D7C9A2A84D95B22885D +18542BFA65D9791DB2A84DFE88251BDB7C907C373B3C2E116ECB8EC2B7FDBB12 +4E40313348A394A58589C1E23C66A9024BF2057719A198D1F0FF01929FB15C46 +DDAF40B4DCF2F16BE69532711C49A0B670442C0FE53C404703610369C3E6B6C7 +22AEE42C0D314AAA1E0EA01594F9F8694C5A16F44476C42C6E07307BD9940490 +E89A6E30111B2BC725C51F5917885D5375F0A4B4F32720A6F364A6AE68B55B84 +35CA3F4215DB779C15EFD82D21129399F699F5815BA34A139A76F5EFA9774820 +51379E30298252B6CD7DFCB140E9AED951C6A527A3E59923F725A32AB2FADA37 +25AAE28C4F0FA92538D60ED5D26939090EF43A89A70104C5D6C7A26CB9E070D8 +C2F2C1BDD073814033B5325532DEEAA46FED75CE884080F4DBAD326DC98309CA +81589FF76AC06C0FB447132349DB7886966F674B1DC3FAB46BC1BC8D4CC3D32E +1D7A6F1EA0E77E65261552F0087FFF05A68049420D02A6C005FABCF9C975867E +B8335E379DD474540EC81EFD7953A432E5932EC6EFEC3675CEE49848BE80618A +A45477C9237F4F2DA7D37C6777EABBAF1B1C53DE47C4536D603E905E6C0A7E0E +E30E854E2DA543976B97907DF179223D91D0E53094A9664C721E593958A3FDBB +A91F79F4AACAE75408D31333293CFDE40332CBBEB470FA9CA803FDEF80D5FBE5 +8DF12584626DC7F4C1AC5B58BA2070CC29E7292324B111AA158EDC483FBD675F +135A04191543C6CF33449EC04458A4A07B72FD2D3530B3DAD847B6F1627C2A69 +DC68BA7143D2A614574F17EC31D46326F85677F5DA9A6BEC19167EBB7FBFA0D0 +495669797774D6532FAAC83E1D587885F11F947689C745284DBB2AAA34E7E9E2 +2024A5C2BE3973DB40C1FA23352300ABDE8AC895555A432F3C068EB24D16797D +CD48C62C308015C3BEDE20231C2DEEA689EBC3B82933FAD0E0F44BE307027B23 +4338B870F04CDDA8CE8770E02B71186B6AB50490C1811F3FA178663BDC8FBC18 +C8BA28F090A60F04FA34AA13BCB2158560B2506A2A458984E9DDD7756B84A527 +B52A76E24B0440B1DAB33DAE996020C737B01976BBF32E9FF3AE69EFFD597841 +60FE04A632FD3023EF6F66D94FCD983D2B418DC31BDCA7ED38D89BB61C598824 +9B028A89A1AF9B3D5DF82FE4AC81AF89D7B3944CAB85FF3432050917403DAC0C +0E66EE586A3E4714CCF623C865D54FAE1F943B1C8BF2DD7396806C22F8E1F7C8 +0B644A2FE78D6FA1DBEE7B5EDC9643565D0B435BF6867843A0AA2C530ED06BAC +91E3612069C9E45760DB8D862ACE47856D74610F3FEA376CF2C841B8A55DDB4C +C6A00428119023F900F1E61CE840425A3BFB31DACFC751065F3E8F50602C8DAD +2B1E213810BF12F28870C97A14574AC1D0EF2A2FF21EBA2C62D113BECD741475 +8E226A77C0E9B52AA70CC8606A72CE70063C2DEF10FE37EAC6B553076A6A77D8 +46563F37009714CDC333A46E2A4FF4E4663546CE102B1DA7F673F3766F86D82A +2FDA1B71D681A105CB35F48DE3159D34D00EE2F26519E6FC322022D82AE2262C +6292B221E1F3CF1712702D5C46E1C379AD2DE59E14B905C8D933CDB400376578 +A7C8134FD801216231CCB286678214E036802260DCB46EC504F055CC23779C56 +EF6674A78092CB4F700DADBC3DF9F43009A2770B9AB98F1D4E5B15CD7A1024AE +8E612E7A5C3C964A8A21B9EED14C035E673D0FAFA8D11172C216EC721F5AA841 +69851049D93C04977246A2D21FFB7EB6ACE1DE6366D202D05046DE2CDB3E0ED4 +231828154A202C43E63BA97313AAB34B1FB9DC40E8588E2ACB81700A03CF6CA9 +178B673A2A5AA0A6A25096DA0444FFBDF89FE56EE129B725A1251936AE79A715 +4829296422CB1EFEDBCD5D1A67C38EA209B8C4C86E669B3D9303AFE9A73AB5B4 +751FCB6E2EBD6E94E7D6D94F61DA1DBEBE7DB352341400BE02367A01618DFB09 +4635C3BE9A4DAC48E689C6AE09DE15BE92B9D9A9219FB25CA900D7D3710BFF63 +1D5392049F8BA435D4DCD77DFC998A02207F0DBB34780CE632E2FC0283D4DC17 +2EF91FAC1C1027DB0CCED0389D9AB0A20E4D9BAFA70EA2512BF7BA5D0FEC73EE +DFD4EFDD8507E71D8664527E4B0DAF2033ECE1A2326E21439199A9938D792905 +E5A9B0AD4F79290172D8B20F817247DE6A9F2FD95CB4A4312895634BE440A07A +406D7715F6C1DA42D17577B3F290DFBBE4001EBB1CFECADD3BB4CC93A7B539BC +9DCFD8C66C78B6C4CFB1E9F4F8E37E82878F92DE67864AE93354E78F56D54DAD +6B9DC4CB315BDDF5D032AFC7629E10C084506F7C22CE7CBDC8648A042551DDC5 +A391F65ABB6A890920DF87C71883FA1BAB6317B325AD967EB864640AC8A3C2C8 +E41D68614E058D1CEB140588C8C5BEE436B112E7FB82FBCE2BFF44DFEEC1B587 +E36E96EBBA14930703C5A5EA3D45FF0277C39F5CDB9C4AC3655A161A838FB08F +B0C1AA048E23276A9CB4E8BC114A0E024FAC0BCCFBCA8EFD8A48A2783D7EB4A7 +272737ED343978D2E966DA09A923C93CBB3C3E7F451390430880036479C353D4 +D687759BD75F80DF78349DC28AADEA6FCCA01039431F83E4E864AB54E899D30A +25ADB18891C4D7A679558127B8AC5273FFF1F28BB7E682EECEB208F0C07CEB1F +AED0DB62784BC08DCFF99656DAD754BB352C3994DC46CF27BBD463C6CE1753F7 +93774336051D9F67D95F5315AA6A543BFFC708A75700E0FB6523E576724D4F56 +813C825EAF293DC28C007E4C58353A1D5DB1047DC1B1F1F9558B114D582ECE43 +77A4260E2462BB4494A73FD20F73561123A0BAC258FBD8FEB1028039BAEBC4AC +0E6FC625A4EF0E22AF5726BD88DF2A0AB230411EB5C54980F8B79E80041F944D +190940C2CF0A24DFAB250EF983DC58BCFCFF40B0EAA9303A0BD0D059B6D6F835 +A1E3AD4E45EAFF511985CBED8E6A46657BCBF149089AC659043D5A09F9993ADE +81E9C35A5C047816649E521BEA5EDB2BBC66C31901861182C5F660B80CCA72D5 +3B22D840F62B21ECCD91246233AE25FC860919493B625EC6FC6FADDA3DACC9B5 +A71C5B26E3B1ECD0AD570979BC5EA35A91AB34481CC304A7200C322B8A2AEA42 +C418E91C658D78055F2FAF4B3D68F58A284E571759CCC7F00BE3474132D4D2FE +43DF39479E3A9C4E09AA4A338F26D5C939BD7E1CA50B86413B8E32CE63800EAD +58C7A77A1CB9E135C7BCF1626FFF76734C321EEBEE3B059216CDE6A6912EFF6C +BA03D1EA3EAC1F2AFA3709DC9BCC558224A20716AE930015915A254F1ADBEAC1 +941476889919D64CA0D0E9F43EF614F115A2A93273E4E77AAF46027F525A3E7A +17E1384AB4D41D75E9C0F22C398C6A95B39D3678C55205B38E189382EA03DC4C +21E4F1245053D5CCA7BF2A1F9AF88E0CD7AC63DDCBE447B963B6DFFEAB65EDE5 +5128F8B555D8795B16FBC856208DA44A7F0F043817B21928E257F7DEB8C930A3 +821E7A3643B5B80DA2DB936A927158F5E7BEA32AF2A1EE9F47D1EB8D420E9A9E +C57452ACFEC2718BC31B4F7B061C932F768091271235EF6B2EB65C96E4D1ECC2 +C67C543B1A117C2E34CCE57520CE6A69EE6F89B1AE177E06B63193AD1376F86B +A59B9A385E63EDBDB2005FD2BFB6204FFEC21823E1C5E59F363C760FD3A63F36 +118FCB0FBF612204CED17C7E6C1A30671C591A29BE9F3363DF99657C7D68AFF4 +E0C3F759A361E4D88005FBFD72C464E4F84A773A581BA27C42D9C6BC3DEA42B4 +2F185340BB74CCBB65609965C5636F1D402DFAC5EDFF4B2461FD564E11D7A789 +D391B54B30B129953A4B4F0B34771983D05B271C29855F2E1394CACDCC37DDD6 +47F5AC6123765607F1870F11CFEE08D71FB7458DCEB1AC2D772108FB49D8E71E +9606E4B5F4F84A939EC5DEBB2F9483BD28A3412EAFB80A7351220EEA9D08B664 +4007DA4F70F4312E4F386D91A556EF9E7747454656DCF8AA85DCCCCCD04BE5DA +DFF58B6D73B7A1EE282737061DF380CFB0DDF9A3F2F0938183ACA9F1EBD638CF +C01E67957A3251F3B8663084CA8DF3F794BF4845B2F6D533BF19440CAABD0DEE +C4D219CA5D9ECD045518FC25C2F12106C065AACADBF33A04E54C8268E21EC9A7 +33B0A06C01F2938818BBFD085CD071B7A11DAB70DFCB7B9F460AC2FE36174768 +083749AF773AB8A67F9B58686A1B330474C7E700C7D48A71BFFD540D268B0623 +931732B4A8BCD1C6F6FE8FD8B856214A86A5A5711AAFCFEB9E33EB5D13BAABEA +31CF678C67D32EFAB36319F893CC85C883E22C6080FBB45A10D7DA77E1435546 +A07225F78393688C0BF9A78DD8D8CD3504C72245440144DE12012F75564FACB7 +37F39E330C8FFBDC0BC42D455955EC7F4C28EAE43AD2C57C44ABA40EF5AEFB02 +9D9DC202D3B412BA082C9452BEA8269CD3495BF7377F341AE0215CB7257DD323 +92384A3AE9766B79756AB3D6E586B1CB2A630B806B92A272B5F205683160F1F5 +CE1AAB86C03152782EC5A8C8D3B4E2B3E83ACB3F73E8672491F045116A6E8E3B +33C7C16586D2AB91F7D052CCF0459FD1F597C9EC4095B5D931ACD616E2A9EFBE +9E19458E5AC84F4F3D17E3234DC4229A9AF4FE10108176C9BE30074EDF251281 +8E5EE83A94446A3099836B4174FBD357A75A19AA4B4C77CD5E95B16C5395C043 +33920CEBF2339B436EE1BB5DB191C7336AF977F1385BE15D27BEABA9053DB219 +65B21B2372A7F7BE670FDA8FDA32017EBD664D03391B580C39793A73A35DC39B +8775B92FF05C4F4F6E6AC2F1424F5D93A99214A695D1BCE41E7033AB21C5E228 +9AAA7E581CE9A5C3EB2C978345A424696C74A1BB45B6497F7E9F6D405BAEDBC8 +438CE0A26FEC8683E7E4287A3FCA76D0E5BF872E61F2E39E60D02A8ACF14BC03 +7D59924D482421891ECD4DC904CA3A2B0AA4FA574E7F4D8D090EB424258E122C +EADF399AEDF8189C984282CA9C18D18D282F27670BF95679BAF1EBE92C781D9F +5739F16679F6853BE2ECC51D78C2A568E5FE066AE0AA98A823E5640F420F23FC +3CEA1216760242268B9B4673DB11BB7AC0EC9D567C3B543DFE10C062BBB64C6D +31EA298A98755CCD95107D6B50D477889123E711EA7390C57B3AC5C363BA84A7 +C7C44F0163D7C83539EAFB8C832778C94C53CCFE8CBEDB42F90A0099FA80EB52 +89EA9F32B6CA516470AA826880402A73739CB0E60F2A4812F3B50C40D026F8B6 +F048A37875B3FB4B08C9678DD48FA7852233CD13EC6687AC34D3FFCA66583F52 +26783757F06153F0E385C54C6BF9FD4300CFC1DFC211BCC8132877B4EC99718D +B3274971E26953478AB2AC50750ECF31C05DD41575020DF1AB0757E714D1542A +7065D4F034000F77F9917D87665866D842CC989C6F6A7D953EFAF442A2B6E28A +29BEDC8A940F05DAF7CE8847E136B6596DB70DCA3DB0BA45F74B1616CAC12EBD +6D0100371E80CA9EC19241C31C0ED657F7B6B089B99E0E551FFFA0FD4885FF65 +FFE878EB3F6A77D27271824ABD182CEA177ACB0FE8363AAAF7C86E2517F31263 +0D6E3EA583CC81A62B92A4D2EDC9A8E3064C41687BD8177B56B66D0165021EC3 +AE70BB02C46F31A1DD4C39D49CE8A2592B7FECFE83D60A17C091E772DC12AE4D +49AFB19F85486740A5DDC5CCA7209F8292974E09C2247681F7774EEC8E123DC5 +96F05CD7E98B1B5A98448B78ED6AAD144D24C1CB6F9DC811657A9BD25939B698 +7A90FC7AF543503E869FBBEB0F6FB3E5A2A9DB2841ED565F6DC88F66E5CEA418 +EFE0BA5784A3DA1A31B0F2DDCAFAF3CEEBA9A24670E196CB317D88463C885CB3 +BE980DAA9B8286F81CFCB44DC37A96E078F1C0A7BF5C17B7771A26CE394DACE2 +30586AFC49DD632E0DB344252FF8DBB01E6BD935C36A05FADCB78F11E6D37E99 +8CEC682319472DDB6563E0D91913656B26EF27295753F237B2470BB8DACA7BA5 +891EE3BC4295DB66D024E1D51AFA52C1A5855ABBEC35658CA7DEC65321BD357B +6DEB27E7096A2BB13C1B0CC3EBD6805C154EB74D37B4C7198F13F64C5A743982 +BF5A4575753146173E76E849A2B920FB930537A4E9C9380F8434E0F6FE9488C5 +88E1F24AD6E21F815FC3204734A70AC9D29BC039AD7B6D5AC5F48CAE11DDF2D2 +B8790CA2554A3B7CA37E821F2ACFE8AD7705F1E8935CD63593F61C67C662E97C +31A0A28A2E3E0DDA451C83F8A982C504BB3BD8F78F94FAFAAA2FCCDF11A52389 +E7AF12260C01AD272925D075F7427E5AB739CEF55134BB04369F1104EC776F52 +EA172B4151A580D871CE02295273AF53B02DB76C3339EBFEBC1975811B539A42 +0CDCB3A0637BB1B12CA0A2EA913E255E5860C600A97CFC33C809AFBCC4DE0F30 +23ACA73B56289D705655DF88E79EE020983451D4AE09E80B835508ED28129F43 +B55A7E0C17A5C5A1030C323F1BB349AD695F25F0358DD68ADD8F4F7998A4F3AA +74FA7B7ACA2140A3B5014FF0582766905DAC463D6B8D760CF07620832059B898 +14F9413C58E808FB125DA8C4A9B1971F56643978E1663255F287A1129B291A7D +5F8C7AF137232D3D6B7D4795FD8F5FE9EF9D6B37C0534F9E531D446C52377D04 +13CA29578ED9473A925F6F921F390FB8D126B0946D6F5EBA83725D82E615BC8E +B5F7F865ACA5C0922CAB07F6EA948EF8DE18917126D3B62A7689F8DCF0965954 +CBE9849EDE0C1FC5BF449C9C609DAA0415B9734B4A7D98C0BA6D4EAD04C51AF5 +037FB78A165662CA89F9680622E2997827B409B408F39EBC019C77F45C424C80 +E31A50638E3D4D0273E02685D09CFDA92E07238683860585E6B44819CEB9AE7C +967831543E0E2161A8D1DC312E99D16AE0C84B69880375DF7D0C114A96A576C6 +1BEC6918825EB9AD2B900DB1ED0244343A89C67B1548A85425AF9D08ACF0291B +14C18FAEDCF3C80C124713BC475F3D8788AC04193820AE00F5FF6A118D41DFA6 +D4EF997C5D4D744A7898EA9387C3108EF6FD19628647F9CE7956D4641265BCA4 +770542413AE156AF4BE6DF3EA929843344F2E38951B9EE4D38D2E51A195842E6 +1436C77E7D953CAB3FB8144AFDC371B0DDE968AB88493C15585570F7DE881A17 +24C0CB6E8A3433E6E85320ADC362734A1C81C1EF9CEF1B863A803F96B5F1F61A +05D61B9992E99BE5A52A58 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 34 /quotedblright put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 96 /quoteleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +readonly def +/FontBBox{-251 -250 1009 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 +20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 +0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F90A32C4175B6BFB279 +024EAE1B04D721A6C54FD62484F8949B2CE9B87D9CEE04DFF82BF14931B3CA03 +AA5F701B6F80BBCDF2C427C40A51597F0B1BFA25EDD7CE0EAF2EC676BF0059B7 +15DD5462BA30DE78A08DD533DC0E8D85F9DAFC5FD842F417265427E0F1B71834 +D2BF6EFAC3CCC40D3EF3B2E2080F148441BA45E5D0C0F7D8416730AF4BE4FC93 +1E965594E0364F0D4F1EC48004CEBDDAFB1F0EE0A8222358EAC0F62E6BFA3C9F +46875EB4C999219B91E6147A49A668505667030CDF3495682B79C0F614AAEE68 +D976EFCDCB04127C0D7325A2211E49CD316935A0B472D1F9FFC68F7FBEBC7582 +036CB393016193A9783DD08D647E89C5BA4EFC8701BCCB6A5C027C4FA8644C06 +251B9E33FFEBB1B84AC4D4B148205C8CA7AF5EF97F2788EFB0B71473AD0F5EB4 +FC43F46602C53E53F5A6D1E445439F65967C51EAB636178FA377DB2DDE5FEF41 +9E91F3BEBCFBD3B4EBB510A0DF7F4D19C6552BC98F10E25612B1396020D7836F +A3D3C865661DB276E428F09F048A916B4F07D8FD01AC1942A3CA342B0E531BF2 +3E9A7AF265ACE1585E331A8F8B5AE06FF085C1F349215581FC7D68D16395D934 +79B3BD866A4BF33913DEB54B4D00ED5EFF3313FBD1C5E6AC430567872BD935F2 +AF1A3F892266CEAC15DEF43BCB83DB075A69EAD7D2EA53303F65E04C5673411D +EDFB32156120099AC210E623BADDF2991F96813AFBC1126DF53A0A776AF7D61A +6B42225A5AAC1B0AFDDB59C5922143A156EED76E3E1ED01ECC6ED9F61B5711DC +C5709EF5A3CED45628AC1728DFE98F07389777E04A7E407E3B007017C96F6EE7 +D0FCC0426C4D734A0B108FD2BEB48FFB6D107C5AB8EBC3584F13A40E5508AD9D +5A081286BFCE1D5DAF5F3D86515244B4D0D77AF9820A93B7C90420FF4B8D634C +2C5697E3E04802E2CD7B9AB8368F1A9DC214CF893AFC7BA3A8DC24B0E549E106 +F04530708DD03367D8501655B1501645F17E547C1C948DEA7A4814F22E2A1D55 +5AF16C55D6BB4EE9929C9CEE82C4D6A16D70D17AFBBC6551BB2C9D8B69F5DAE2 +5DF6C2187ACEB119EE6087BAF5E79340D115C53E710CC7E4C771F43ADE91D2E1 +1AEF7BB2E6C9ABED010A835514EEB6C9A2C93396FA12E8CD0B2F9045587E51D2 +7E059224A889B3E7620E57AB6CACFD769898B3955661824DD4AFCB9A7B218DF9 +F84B369F52E246723C7D0B26C145DA0AF81C83DAA091143FBBBD2A414114E34C +7C994D8401119D5A46856367EE3FBBBB32155A00E5314641288A6E1FCE47F385 +71C2F7A7602F777C11884DEFEFA560333458DD227E63F3FE68A762CAB0A7308A +FC59C9B293233DFA257E5D10BD5F12B7652C45C4C50F14F17E59A758BD7355EE +A89B1EC954B86642B87F814F936577429C467BC8E97A481ED15E2633AD73830B +DDE3DE50E1EC439204C7FE350C69494823725920719D613907163AD63FE83C6D +1CB6DA81A6C816C747542CA09493306B44A7DCE934B877DD356F38D07D3E0355 +CB149BE6ED646E84DB9DB61859F6FC45BCE13EE42458D1991AC34AAE6EA72320 +3EC6346C38CA87107618ED3C46C331623D8FAACC6CF9292B8F1B407806A0D480 +8F51A5BC97F6B15807F95CA9DC14C0F5FF3AF1881346AF82F65F0C9AC200DD03 +CD20E0C06E8AA4FA8B225DAA01BF6F07ED8B9C9577F5A565755A71A40D2A453B +AEAAB4599F617CFEB0B809856CE021E25399D38570ACF8354798FDC2DA24F0A9 +3AE098F5EB8C400569A5D4178354CCE780B8CDCA570E6051F21ADDAFFE775A26 +F9222A6DEE1BB669795728FE4DC07114AB6A8067C56D909BAB80358F39B257C5 +779834A4261613C8F2EFD82F20C9AE15E072BD78D60D77EAB14430DC51BCAC86 +DD91D1654E340719EF37A8B7C6AC8471C16680FB0FB7ABCAA8555A292AEAD439 +4C6BA6BAFB0B19F9DE59745E45D0B67C1D4DE80CFEA538A2551037E0CE7E8D57 +C10AF598A2E9F8A5F67D793D2A228E7A1ACAFDC75420318FEA23286A45CE9C45 +EA34C3E15634BE1FAA50EABD04E94F6D47CA2B78F2B129C94579D24946A8BF07 +8E870456AD04FB3D0549B59D1CABEE60F9759BA2BC06E068D2DEDDEFD8B2788E +92CBF4B44E04781BC17A58A0A3BA1CFC463145593170F06FB4DDB90460256DBE +572A290F44973D09EABC8D7665E1D18E1B8F5EE44985B498B6E662B87DD610ED +CBFDFFD33F0A0C95765E24A7D071269FF7FA2D47942FBAEAAE065B7DF4A9EAC1 +FD58D7C302F9D15A2ED0969168E2FC4A021C521FC7D9C53ED3DC1A0F9AC63862 +AB2396C14CF8552EB0A8C067AB163FE0DA20E3AE1C7881AD6DB0E1D615F7F2EC +1184C69A430487B861F5CBC52F27C53E1588AAD6FD43CE2C0EA490B257C4A36E +06E21AA6EAB94938E002FA80E1B1295C1322A207C5A87EC49669AA2FF054BB4B +B64B622FEAEE05CC84835178C4DA9DAD113D5C6BA75830CFCAA2077A071069A5 +258AC7E801FEA6778FB7EA7507470AD0AB6BB49210858477F53A831F9CE5CEF8 +B519C07786D0551A22E3EEB5230098FB06B390FAB4C73F0D3D03EB4890C03329 +5A0B9C67F1E16B0E1A9D4389DE67F6A950F322ADA03433E71E1DD8D4E416D9E8 +CC55EFAAE6C94CCF24980BAE71CE23916DDB17DE1E412CA5CFED25AC13109246 +A26A8F568DDC73538ECDD2BB41B9B5B020F0F1D36C8F414C24566F8F9E1352F3 +38A5D47FF00D91F43069137BAA659301C2A1EBA1AC6623DA8773643A29E498E2 +33C33DA49C290B5719BAA7E9CD8D00C803624BE63EB0100D6D093E3A1A86D653 +A3CAE4459EC25EE9D59D4AFF27CD3FE4BE831C0C31EAF27F364247114E896CD1 +6395D9516ECF3DA7D9A6B4F36245021C9CD6C332182441B79365164B1E40C5DB +9E4B5A69DB4AD7D79979E6013435C7D70BB7E910B75F28449CFAD0443645DF30 +5AE363FD581271F587E53FA6DB88B28FE6B80F8A5CD58BE57B6B386896BF7A4A +D1A36057CB2CC346697B21A5CAAE37A68E62BA46568F0CEC8EABCA7D1A08E7FC +72622305F10E7BECD696DB80A170CB09BC5E27BE68733943C72A163C88485457 +D47FEA6B5D20982E5713DB5C4E499DE5DE8C2090F3006242516349955D8D7857 +0DB51BFFF42BCB28DDBEA8C2AB5431DCD10DDF05F0B59D00F65BECAD61ACCE82 +1454C36AFF83685C530C8E3A5016665E2A50287558A44E43BE485C96E3DC24E1 +8B291399BD9C9D105377497D085FE5F9037B984104E915DB9E76DDA3BD5A83CC +ECB3DB2A2E14B90760C207F2D53D9389EA03AC1F5A6AC61E1F538DAB42800822 +BBB425E322947A26F51B3E81D2B3D0CF214D2410BE2B0F12CD978C1943A025E9 +C9E5B403936A6B7928966EEE19504D9F7994861A4A73BB3A63719DE764BE9182 +494E70BFAAC3C26CF422727BA3A2660F1B2394CD361886FDB734AA49614F4C61 +565831EA21D56CCFF58F29F2EBDB513E9D3601F405B94FC7F5FCBA22CC3E47B6 +5F71C0768FA87DA0BA8F5390C0EBB0EF2242FC8FA3AC0C3108F6772237BFEFD8 +61F3DBAB78F70D8801A2F4C615D86D011537BCB2B5ADF4A13EDF0C8BFBBBCA0C +2C0A139999ADE8FD695D2954C79A86D885E70CD72EAEF05430AEF1A15C9F1771 +F10BC3B8C9EF931147E5EDD3EB5C8F459077AA3407829FA8092F61A909A6B67F +B6AFC3F35F065420DD6CE2E0FE0227B06A203F334EB8B7EE4C6F27C394B86EE5 +75D6200E98B1F37F1A977B8E92BDF6C4532879A6EC1D68BE998EF2B57C50F06E +5F30DCFAB85B51ACD1B127161A73E0BD1DA354F3025B3F92C054031D03ACF16A +158B45606BE9E306B633061654527B904E99D6D8FC61D7D1CC69D18D94D977D4 +402BAE1BC49DD45F8772709A4F148476F9302E38BBF6F6843FC56CDFCF7F74F9 +983100F8FF980CA805AC80511BDEDA1138F12733EF1FCB50D0F60EC06D6BE1B0 +9F908DDB1278340BC780A31752A809A0B6651C5B3E5E0F2017F092849B1162BF +2188145EEDDCD96CDF5C00AC05385492038EB2F10358D853509706635412F19B +DA6041053C8F41970BCEDF162C1347DEDE920819734B47FD99CD38E1BEF7A7E8 +8150B295BA78BB5EEB055571F49B848E5A85175DD39DDA6364B7BD0C9C3FC42D +EFB45AC4E52351213740B3CE676A43DBFD4D04B1691D5EEAC147DA471A3D7A00 +93CC624819D3BE17DE9D8F07FAEE4F54EDCDEB4134D9F39C3BC33857BC8A08BD +82E23B5564415A3410CDF25ED8C3D443A0F5A9CCE3D75C5AD55DD3DD28EEC633 +82882118F09251A0DCC8349AFCA61603ABC621894DA5C1BF308399A9CCB8283B +6F54E096CE3F2D3C11373E5356570403B418B84B06FBEE27B63D8B678FA39186 +81605E6B09B02037FC124776DAD7AE3EDF993C064EAC0DD678E13D8D78F74DC5 +22BDD780DDE77AEF1C2E2CD2239EBA6A9E8E9AF9F4F4605ABDCF22902055AB90 +3C5CECEE9B92B52EDAD5D29C3FA6964A7A7A2EECD8F9EAE1CC81D9825E8411DF +058A838F2C335860FB3B063C824FD45825ED5481B9320FF99B60F17ED8A1C1CB +A7E12EEF35A40266C7DE2E1DEC31AADE7626C5FC57DF545933F602F283A27D9F +0E2C77A1BD5394944566497E01CACAF62542EC93D16CD80D4647435B6C905A31 +B94C5CC9F43D6492BB70A5E8867C7B0F58D75240B496DEBFA6DB94D8CA775A7E +53237BB081D1A189124E6880B6D964867804BA33E0BFA961A562836F7FA1E98F +EE78ACCF16B330473D69D52D011AB174EB440746ABAC7DD7D9AABA70ED2891D2 +47E2AB24669280D11FD453BBE591642A3FCE09EBCAF62F8E27FF0782216E6E87 +AFC464F2316DDBFF0B6736D42577AD10754C6936B6EAFB18AB6AA3AFB316B179 +B19A0561A157E90035FD26B8FDC72C2892C94957D3257C38F8B1BF14CC7C6AEB +6FA1C4AC6F22C627BDB1CE6AC63D656D5E7410F7E516813CA3BC9EF02EE8ED4F +B02D57B303875A7F3E1B8176892C2149C39060E2AAB5C4DEEE429B7AE36CCF51 +997C547147B3CB8DAF1E8C8B160F00A869E5FE90F8302E081307F4C92EE0B374 +EFD848E3F943E04245B6393060B126C7E2A2728F9878D7CCE3DA74525AF11C66 +3BBA0749AEEFD5B190A4A0A729784D15665A8150FDE7A8EA5CC4CF0092B2AB09 +CF8659711E84D057DEFFF2696BBB20E16D9E4B1D4D4EAF69F3BF07644B90C94F +D11E9CF3E66CD3368E808DF69DEB6C6A3233A88D558BE5037ED5B42EDA0070DA +3D29F04CBFF58BE922CF4C8F9688A20EA7CB644B080D2C01A2715A69D3D8B7D9 +5C0914DD83C9490E465DF0EF013B6473BC28E937C6E13A2F08CCC8B6F35544F5 +9F79AA89481CD0AAD87C6CA2391BB69A39B090208EFE1A0FF5BEC74923193F6E +B2AED1DCDF644351089CD7460AC4987789B2D92D851E3F58B41BFD281D717863 +5CEC8AEA5CB14F52F6EA6F5156F08A1CED2312CDBD2B18BF01FE503AB86DA440 +F892BAF54438A5FA847DC0FC7121F2EB829DD00D2DF2BE54EDCC42187840D8B4 +1CE8DF33B574EF36701E2873D5824C37C6BD7DA4AC7BE64D12A21FF2A23CB9B4 +1C6FFA7D8B927745000345B5AAC5825D89E617FFC97B6C7FDE0509DE3FC6F2E2 +1508278734B33F4550D4F565B0A23C2615B49BD17B6741E086DFD50E1E6CE979 +558741605E2A314C325BC4216C2F0F809F492B1898431AC7AB4579E76A3A0F63 +E8CADD4AED7CC6C56AA12867A43CB25187686ADBD4591DD35638F5C79C961085 +BBCF38D48E756C295A0FA4E59BC1CFAEE016686A8F91CC56E37E4A8312F39837 +09A926B3713EBCCD1D82DF9DFF36C0C024975F531B42E7F61D830E2FB51BAE2D +9A05BE87E8F052E748F8B4201C8869A64BBBD42CA4974E230E59CE541EC0C743 +7292203798D2E11AEF67156FEA12C22964785FEB4CFF473A710A5D7F97A07A40 +D5E9A182D7A96A083823DBF8B1726E8B71F0D751D506DFBC20EDD53A0368D098 +59453D360568B76B5168254027AB71D2480C63D486E855050B1F480BEDE9B4E8 +3379C0B539E33AF2E286C2A02A5D73148114F88898D7C01F408844CA50574D1D +2B513E63ED04011F179512384C647100C1870937BBA5F404E80B6C8BBA52F6FB +DAD5343B530919E5AE54E0C859591769580B82911BDF290777B825E417D4EFB2 +FA60EED5786B27E3109CBCCE391B855ED46262FC16A663E63E9A19CAA6C6F58A +72AECBF5234E25B5C49D143F1084F0B571BB424A1952AB4B26366ACF83A29BEF +75D9307731FCD44EEF157A59117360402DC446F9B58388AD66AD88B8C82631FE +31E99E3158C25D152EF626EE76B2AAFECA33CC0B9A571C7253D3AB32DCCC1A2C +11DED910482250F8A84E0C55FB76264A1C4F434CDD85A347B1DF702C8347CF3C +5461B2F76AE34887964985AEAC9B7ACF13700B60B7C1446ECA269B2E5146AA31 +0F0556C5435B68B92274A4E5B554B0B7A163E15F8D4A0391F1389C3D7BAC8EC7 +A1AEE0C8C79ECD8F6C2A6011BB0FB966134FD1F75C32F515F63F6A5C15323304 +EB0F0C267F5FA8FF55D2E4D64F5184320756B78F8C043B10D267A548EB1E0CD8 +04E106687542C3231D1E8C157A9BBBB053ACA2FC0DE6413D52360CFF6ADA686B +F2676FCD629ADFFFFE6F818EF61E5E90B2A077790B2B06E0BC1E0B9163982691 +2EC03BC185E8114DBB76298230FE8B82BFB09FE562A0D96C696784D365CAECE3 +A89A1643257B0298449320C35F91980B364D7E589DD82D69C8379B33CEEF951E +851250D66FFA0F664D6C2A8F61F2C97E925A46547FB698321FC84CD623CC7C94 +223D2B874D39A65264E9B45EE4646BB830F2F62F8B7F391BF70CC3A9C099B7C2 +559F46ADB70B967DBA1B74300C79738BCEE6FCB3C6D9BE839A22D8C7F4930376 +82D2CA6DA3AA63ADAE47FEF0F0812A6E8D6CE62C60181E71DDA511DF008C38B7 +6741FE1D1FDB1244D04809C4DAFACD75070C10CC0937B7FBA274F64252654907 +7BFCDCB0A8095D5BA8687C93BBD90B2AA3085C047DCB8A095640310E0ED49B31 +93DD65DB30F49E3CC07AF9FD1A6EFC7D5DEE306121CF7442C0ED5A1EB49DADBD +5A0AE4F838C46C78DDE83BAD2AA31EE6E6DD7405970CF09FA9EB5DC00889EC81 +0E42612CD085D64C74C0784C04257F0E708DD74A8D8C06F8845C2B2966FA2358 +4D5DDD2157A00C184E11300D34097737B1CB714CC71070FB05F7385CCABFECDD +A035DBF8F2FD9B67F7402BA8F589A5AD61A5476178B404188FB908D591E4948B +FD39377D0AEF18B82D001514B03A123F7FDD63812FD45D62EC971E93EFE90BD3 +9496C49174F0EF0F513C2BA16F6A6507968C5199519BA9D713DEE4D0C2D427C4 +078F347B5120552E2556A42E0FC37BFC7FE8181F17A01B449CF71E093695BFA2 +D53857C0E3DB972244943B67A07D5AF4FE7F6E04C8033EBD20EB55C38AFF58B0 +D04FF4AC82937A650818A480F2A40ABC3F4A26B7F4C17CDF1A7B056EA67E0D29 +01BDBF1DE76DD59523DDFBF39774AD9E4A04CFF23CE673197C6A17015449D65C +45C56079351A5A16ED030E96D24A755B2C14B6B925D8C30A16B77981B92D2171 +1E77C0C11DBF9ADEFFA03178411F841A109EC7DC45C4C8E133725B7ADF0DA136 +4A46840677A020BE6897A9FD9AB322F27AD0B55B5500D2B48B71D4AAEFB10774 +8553F99DFCB01FC07508200B9367E6C8145D7F1248335E90D32D9E528C4B955E +B8DEA684A010BF454070B7DAA128C0BDF6AD29810C4CCE310A30080AD36E7799 +9FD52B074E044EE02FA248087EF3D690FD6DA1AB501CCA44D132049479919EC1 +9401487835D2CAF0A89FDFFF635EFA444E8098D4CE6E2C892482F45D002C28EA +8879170E7A34FD6AEFF140B1EA77C009F30E60B2857609EF8345A0F20F8085AD +5E78AF3F6EE20F363468B49FC735FF32AC6382F638006B83FC283AB7ECEB0DC7 +0B67505FD5F97105EA4BA11B18AECCA6E5D7EA36C538401F16832183A17BCAF6 +BFB047542E014E2941BE29F8747E6DD07AB13B374AFA63ECA73D4134FD950C03 +DA939E892C35543DB6AE960A18D57490686E0F758061AEE74D40BBEAC328A905 +7A29FEB1EB40ECF45593C6B2829445541DB58D0E8697CCA09C47D6C86B730015 +8E920228398E492FF70A3DB13248033A61DB5542B8327797951A89317C96E68A +5EF8784D8848222DEF31FE30A9F9E4C12D42D0DE930898DC4446509988E39196 +792F97BFC9A60C717D78D8901C5190899165A1389835DE21EA49EE01B584787B +8849FDF0146111811047FBC3ABFFE2307E16518093AADA08DF73FDE6227D2BE0 +5DF2071FAB4F7E825B563B3059F8615DA305F51AA2B9906F1516040BD883DEE3 +922D1D905EC34D3F0400CE2492E93BDFEDD8F3230838EB248C0CEFB5ECF929DF +D707A953953722436BEA6F5DA51A56F7668CD083E9CD7FCC8B736EF8B08442C8 +AC1AFF6DA974FE5E50D1694B3D07B2E47C0238801E7528C04C967023698E5B1B +23DB992777B22E7448697F2B78A20B98B78A79635104930A408C18C7E6B1577F +425F2073EE5E17A8998A38DEA4BB12834B6E842835BC711BBBB04B371CC8E532 +2490A6431876346A3A263683C153D77A5BB9B32E3D91B952172DD05C38F72F3F +A5140DF292545E31C25B27E2791205641375EC542589D61290504CD73B560B2B +0C2A8AE31CAACCE8BAED61AC04652F2E0977BE269D860034C429B0164585B658 +29EB62078B9B802B4E214FBE0198A76F5C9CDF072D3C3675583E44130306B5D7 +7D2F147BA926C70749525B60374CF6763E273F30F2532469BF6A7A3965E26046 +EA9E93F7D393F8EC2C021987D33A9AB30930764D1534AF53E361EA65B2B64B9B +4E93768EA25ABF534761CF567552B0B6D52C8C53BCF5E3414A0B653FF21C8F65 +2C6132916466A286C7E498A2897C237AD5568FEBA57B72C7A87A416035CC03BC +D1EB9DACE25516AFB3A6B6CAE2C70665002FE2DF14C2850662E43C5F05252031 +BBD84960EE0A86C8410082F441B8B594E001133C4D9DFAD9B4F38BC878C29AEC +5EDDAA290F7FD74C9228995E107A975C70A7A37EF8E01856E978F284F1BB1453 +A44320130DAF09D7064D9867D27A55E3425F5D25B99F553C9202EE42FE8D3AD2 +6C1D34416C520E0483CC2B87ED9D9F39E563A9A0DC421C04B3B9CA8582DADC5D +323DBCAA108F28E8F11DDB3D0F0B10D4A62C93FF9E2CED79214641160DFE8447 +93ACC0D72E8D30DFA0E368DE8E56C566D7E15E559C409EA8D913BBB18E4BBA89 +3246FD9DAACAC4C5DA87EF5B9A91D10F10D7252F7531FCBC343ECD3D2B674982 +8F0BE87B3E1CA86112FF617A8E63BA92175913CC403038265C5E35621001B6AF +EBA934372CB68E99920797A6B154557FAA7C3C696A15EC66348E209BDF87943C +A9F4281847F5C3C8F340C80240F1A93916880670C350B3A9E651EBA7E62F5D50 +9BE78BCDE8E0599FCB7FD9874E87E957D1117CEEC67A63B8862278E015856F2C +E31898E7FA1436AF76FF20AF5A7E5BBAB5C23E8C0E66C975A290AB6EECC07F04 +C8A37224EBA5D046C7746168EC081B93E0EED2DA80D9754050617DA4CBD3D5AB +C9C57C0FA2767E7FD633288652C3C4A2C8095D9E8E2A18C887B4D765B2578215 +64EE4227B2A8B3990DE2E0A4361E0C05B145837D58C4BA15CBAB0E79221759F4 +F17BB5097988872A957479DE4734BE905DDE5B8DB9A31FB9C235114974520D2C +CB6D6284C199A880217364EDEB160F5FB7FC762819E4509FD20E27A5F865EECD +B893551A9ED16D5E809B49B9AC67763CB67F877EC21D8E2B8A0D06E9936E84B3 +A6181D5831D67A8F2A466A71F5A4DCEF0DD7387CD5B248F2D5981A9F63D8A260 +88B568E1773B13256E440FACF2DE1041CB99397F8B4CDC8CC87447FA6FA0D670 +5B99D0BC94ECB1AD7BAB0DCC66D278E256CC3689DD3B2F036A6A3DCC8FA77FCB +0A88AB3A3D50C245AAE20ACCEE7ADCD9FC5C9FD53B405F0FAB220385F7D92011 +E527BC0789261AAE6197377DC5BBC9F5BAE3683700F85C63C0DC59B02BF8B65A +800DE3BB27A3E75A87F6A550C787F67B1430369268BB61CF5FA66D8F5221543F +2CEE65CAC0BC2996F73B71783E5BB43B030C90A5FB13CD66BC659A3AC2E897C4 +500CA657F16F70759F0DA8D712F4E94BAFD3DBA866DFA8D7310A44F240522200 +C8F14C7CBF9BBC33276B623C746F7D0A4D76AB13E39DA19E1308EED0A388A23F +D9336D3532151A416C720052128793385DF6B68D3BDDAADF8F7FFB53260B81DB +321B33EB566593E390158B80DC631545A66C3CC2BDDB61446A6298D884389303 +E2E55D64F430F35271060417EA4350B783041A7607D44DA3452D304797C03864 +DE4CA134F33471E959A74DE4A8403BD5A1A381BE22221ADF76F0B71F29C7DE1C +9FD94E0F158182F6DE7689A96C555D2D9F1FF664111F56B147B650BCA6FA1FAD +9ECA4488EA201C8BB72F63BDDFBE7239F13C46C492F320B4F06F34A668F657C5 +CDD4FC447C67E1BAC54C99666DAA9E96ABC836BDF0980239245D48227C14E811 +FEA8C345C2BEE84300C746016F98893E12D296C64C2119208E4C203A8EABDFB6 +699EC1F750DB57FCBC535E0929123F36A0113E6CDAC09149CE5865B9B1DAB041 +A74C6EB8EF0E8FDD6DED8C67B849324EAB11FA732BA2EF27E11190027F657912 +31A49FDF69D97032A07C66B79FE3F39594FD7DD3BB4570A90747E908D0121A05 +27D12831D23C466F31E31C5B3CC636880DEB158BB4A2AC34114299987E9F8F53 +B0A28EEFC3A259F49CBAD20BD7BB4ACB07726033CB8ADF88E7FE0A0DBFDB10B6 +21669AE4942A298072C72522D34E16987ABB7FF0236EF31B00EF6094024AED38 +CF83EA391CA265E5C6B8B63CE728CBF008756D4F1CF35E0E39B7B17A0608FC37 +78CB7864BA7EE90401AC2CDBFE9AAE8E3F726B41DA0BBFD7E503BC01ECDDE23D +15A1954FCAE479BC85DF88D0044F2403A75F26276D16F8F125BBA3D166DAE700 +8F0C3A51CDB950B603FC44DCEE18028B36282DA5D7C4CC9C79EF2C879A86A1AF +467CAA95AF247AC7EC18B7282E5A9863473871C679368C9438FE626962BA0D02 +AB329F7F03BA30FBC62A855DCEC3C4099A003F8D6F6FC94D5B7FF9DA05331BE9 +21B06F9CD00C1E2C5F694307ED8D81D474E70BDED837C8973AF6405115C85E57 +7D64640D85C0FA0FED12BDC55DCA2285DF9DA4F9E48361C00AF5F61C57E4E1C9 +60FC8DEA6C2EFF9654CD220D626CBE75E183368BB8B093FC64BF13B90F935756 +F87FC508F719472F96A7E9732C2B8100354A59C88BD82BD12E485EA7680EC9A7 +FFE0A6636C8D0A423D0432561649BA335E8BACBC5126BB4F796EFCE6DF8B00F7 +01DB1C7FB57D15AFC69470774A735CFD876711AE3AF1EF970A1FE154927A0A00 +A68D4CA6899CE12A1A26CF5393446B436F40D5A47238C053F3248C5929C2B5FA +EA441400AD4B928537A636AB45FEE4F298DCEA28FD29641C41E51926C2FA4F12 +BB1187C4F050FCD171A9EF0954EEADFD2807956D09CD6EE2A4F4B88B54F3BF6E +653A02FCC95A3BDCE0A0FD9F3F6E74222A52E2D424857E9A4973104842E1C308 +215467C9F5F9943126BA74589C900B74CD8FCBE53DD73FC9063A5B4BFB708DD5 +B8E30211679F57FBC99D651918A04071C6163EC8205AA0BF84BAF8CE8B05193E +DC677B30A87722E97F961F3F7024FDD5E0A54A30855E8B7A27715DD055F396F4 +E3DA37B23D51C0430D159EAE4116ADEAE6CCC19669593DB3EAFA37E960D63B0D +34E00C124CA2A621A4D13E2EECE188BD060714E0A5D38EDB57D0FE37E01A3166 +9DAE1B44103702832F003CDC90632C47720FB444223824A893172441238C11DA +87D57D945EFE864C0FAF9DB4019041D5BCA4B7CABAEE9264F7D0664089252A10 +142B31D8ACEB1D9C8A46A1EAD878C189BC82179911717C4D6DE3A4DDDB117D94 +851A5F735F8F64F6343B92C0C697963DEDC4FECF1D6ABC5276D6156A40C4E53C +93559EC3E3518A3CFAA0E4F1B296E9CDCCE30FF6D429A927F85980F3A424A719 +050EE1E6DDAA47E6705E996A65E1F805333B9728F4E9E7C8B3B3E29AA68D95C9 +124F5036334D202E1E4A520F47FAEA47FD2AA761E99029365E00447F13FAD190 +DEC04F8356327345FDEB37C79E467BFF87218A40217598D40965C5E06ED0F93D +AA40CC9445A2649F9D6D8C90FAEA395733E71F8ADE555E2166892B3FCF84C749 +268430344C7E70ED90C9858A74428382BE6E04D39174C1A52FD6727CCEDF3FA4 +55083E08ACE62339128CB8687F00C8DEAD4B7C7F2176154C5A2D2A854B72E3FC +9EA3320B701637A137EBC3C819CB06F372B543C0E929BFF3383DF0C4B093589A +40417511C97C3CAB64C88C26743683534320F8CD312E9B48E5683E4E05FC1A22 +7CA3CF17F181D1B581FBAD827964CE1F911F6C48CD868A9F6F1250215C1BE545 +48F29F82CF164AC3376AC9CE8485D2DEE18D515F12726E501AB86E2A904AC445 +5B3859CE24028493A520F8118834427341C7167FDC4731449E9080400929C0E0 +97328ACBC1CAED6C5042AC37E84F5A122DBBF261049BE6D7AB0E688CFA9E457D +DCB4004DE6E5EF19D57409062F918C6FB0F09B434F30C8E609A11071BCB2B5DA +A22F9AEA81C48989A244E8BE97BA8CF9A09E9611D47A9F77948B3FF43CE6F378 +71BB181A69867B6E6E01725992C9DD2FA6EE02107375D0C5876FCE49A3E1F3B1 +6A15DFF1BF3DB92ED9162BD4A36AEB4F3FF40E7E71B2B81FC4E372C941243F90 +C959651A8F98C0441B854097EFA8D66FC76FFD29CE9E786AFA3AF08B5C83660D +7FE132D95866BEEE0E475F04367343112880F80DF8532D14D8EE4991858B0CFC +2974C53D70C60BA9C6707307699397C30EE5044208F391809C2B7884D74C77EE +52A34E2D9EBED8C9AD77F8EAF56676AF405E9A162D5970AD68959AA0C01AFDB2 +AF2E7641A58B894E5EE279E723C7BEC3ABD82D5C1BA27F68394652E942E47061 +C2C8B460209A3D141F23E97AEB68872AA946B5D8C65FBB792A8F9A456B755A95 +18434B1A9CD425243A2056307B26386E64BDA30500018C74B38D9CC6BFC7D87E +52BAEF36B97B8C41FA46F38B4D37813EE37584E5B36FE9DDBECC8C6BF6646194 +59BF4AB637100456713A84BD505FBE9833956C028AD7C521E8C5BDA9E7088760 +1DEB596FFB35100C01D7EB2660A048F2F6AF924CA0A7C1FEE2987A590D9D5C11 +B0F7B5DECD35F54B4CCFCC7BF8370B7A3184A91ED8B963CF9D180CBC7BD83339 +66866C3B335DFDAB771A7C476650F6AA7925E12B2223EA09E7D2BF80E584298E +3B114466520D713D3D14D73CCE9BF05DB6870D48564C12CAED2A003BCD295E3B +0872B5FF1896822188C70CD5D25A039C49D49453AD7D379EA749A3FD3B119D1C +68E98559EEACF0E6BE1DA9D4BEA3A827BCD4BC75AE6013EF1402F744624FFC00 +C17DD16B4E1C44B8B0FA8791FBAA3C3B6E60561523BBF45357BE6A550302D720 +11DDC010C02178E35528C3D6A40078C6ED2E0AE8F1E9C14D9769C3BE991FBC2C +3F615E83420B9CF206A6B3C9DC5415BDE571BC3B9444BFD5269092D0EC2791C1 +2FCFDE8CACBC5729582143F36DA9CE6D36C5C66854FCE9C29F3189AEB11694B8 +08873FE32E8292FD57B9CE6E4F6B1DC76FEA98EFEBFCED91001B7FC2A78211B1 +F30DD80DF6F6973211A5D76E000D4F73DD012C62E760732C8D2A94FE6404165A +513EAAE7958D8E80D47F8E4CCAA1C8822944ED82CDDF945E3C990F075CD530D2 +45E0143743A9310C6E493C5E8D4C6D2672C1834AAF7D570C53347AAB358B217A +65C336328D667D6CEA6BB97EE648EDD4AB856BF8736E036B559A2BB0D476CF60 +F559841C95C1D8DC962F85E63B2C19D55B106D93B896D87D10B1AA94E36433F7 +17EFB0655E5119BA27D08E75DB75DC2895E922EA7463EE9D5FD7E2DA9B0D10D1 +9F31FF30539C079965DA102B2B61E026BF4F425AF25203F62C6606C904C35A3A +F766B098EED1991E893128512DF0F35E2C0C196601889B6380CAC542BDAFEC17 +11C265A9C773BD7AFF7483FFACDCEA528E66DEB207D5AD57DB3D2CB955A14B1C +75190E70CE5B650B021757BC64C5D45FA12239041ED5374147540F7E1E06ACCA +B06DE83B2FF3CAEA93CBC27D37AFDC748881BEDC30BE2118F542ABC14C6F58F0 +A9D6E9FE325657A14462B4D67BF2EB05E5458B120821A75EA86D102DDB92E9CC +9DF84F5905A7A3A011C8A7A62F556BB2712AE28CE5AA49295717B08727FC6BA8 +E06C6ABAD51FA0AD08E1821C547C599B4134D6DA36E10A6679425C2E6C56BB5C +CD56CF0CF5069400F9396411AE4F4BF55988646FDFF2290935252C290153044C +E30C6FFE0A623A697A5EA25C34FBEE0A9D429B88D1512C21E55CFC5715F76027 +1F863D57EA37AD55F910E131A7A7F7C52F4CCAE4434F300461F77305EAEDE26E +A782B9FE2D4DADF5044F4B912B09B0AF19EDD486C433D682914650AA408C965F +2CE16EA10005C4F63E23C5E26939C04FBE91C6C021989AB11BC1E9BAEC5ED9A2 +43F8A29BEC53480EE5841392FC2A89CB596589BE8F2F63A56B17B053C2189EDB +1372F17B54C2CED7D1701AB04395AF3B36DA19D6B2316ADC443E068CEF52477B +369B931C69579CCF750BB165D6BEF4205CAA35014EA9A678E4891AC0B9B28110 +D9436F71FFD26EB44053A0DC8A846CC31F1B42096CFD3CD3EF42628517FCAFF7 +FC7B26526B9CADEB536A0B583988637177F5A38370643DC4902AD7C65389676B +2AC2E025A6BDFE6728151DD4C639847C47F00281B382CFBB9FD0833315A7B381 +03327EE5C2E7B4E107EF3685481B63676B0081BE25A5366BD5BC5E06CAC15A60 +25A2EBBB8C9FF37B73E75253EE0CECDDB404779EA69D2332EBFEE235808DE06D +66BFE466BC0306A120701FE469606DC96BBB1549AD053D06840D530DC1928FB0 +2D8AFA1129EB725B62982248437715E44ED3C0BE04951EC65ACF23F433AF7067 +60FF11CC949E4B5E1F5C8143B8DACEBB520A490AE110F2E0148D10F2B7B9D7D8 +9B445CDCE2A80240DD31A57FBCBB1C99652E4CEEEFC56ED9A4A02A87BAF808D2 +F2F3413A885F57548170B80E001BA0BDC645F3D55BF251EAEB93141359C10BBF +69FA01583A539E5A76D55EF88B9249487EEED62396103F854F573F91C04FC363 +B3AF64C1244BB7563E4E4837AADFB652BF189D3AC0A8454FA57CE6FF252EAED5 +E3EE3714BB613DD8BDC6128C13A0E8E0CCF2AEEF10063E32FAB2E54918FBEF3E +1986208B7986F4084768DE289A4AF319C863FD5CF564A72EB7F437DB8DA6DA80 +D33DA28F7987F9C86547904B0F49F351D18F705C4A178B468ED43E179C43C276 +26E5054AA42CC7B5B00FC14C61C25B11A9D5A5DB3B1806F60248CBAEC06C068C +ECC0AA85F07856F5F73C0AD13308E6FF55C6C7649B96FD3E4B291B9188ABF764 +34610CE0A73EFC9E52357A2BECB4E6ABCC3C5EF8B1350CE3B1907A104690C865 +4D6FB2A1293B00533867EECBF8B1831B753DDE5C683153533A89FC6E3FC0700B +61CB7C10C37800B8DF5A40732F17322F4464E7057166C966F1BFDA555129648F +CFD85AD185410961C086CD5B6FA08619FC943100369C186BA5F3E5D2D4B00CF7 +CE3D23D6166F5F2AA31B0B4CFE98CF190841F69AEFF503E7E49838E4BEB81E0E +9DC3104632B0FB4A6A04D87D02E9C15AA4F046D39B670F5E37827EF6DA926CA2 +3686FC4E27F14D5755B9312D947096C5EB2F1277DB6E843A168261C4E36F36ED +98B4825791F6335BB8397DB9B5A3C0561621CA93B143AC978B6549AAC5AA047D +63F39B84E353120DB184F52CAA1E2CCE76F15AFC6CB7F3C507B2944B354E182B +225E43C25A92C6396C9CDBDDC93E8F5FA2ECB9B9399CA05CA7CCBEC2A9CE968A +D089CD94001FBD5F8B1E4060B6B55A7DCCF5B1972E3B532C98C555B000CD28AD +D93033AAA45346EAD38E49B3CD0F272B5CC2609A26677761131815F64753C5A9 +CC335864E866D94ACFB45EFB67692F31C126B256B4112ABCE4C6EC415AE492AF +B68C14AF756ACA050F179E2DC1144A744C12121F92E3985962791540BD21B304 +864BEE24C5DF20BE89A70E0D4B797338364993D66A1FE2232ADB3D1374111A63 +DCA4B98912B7E3A6E35A457185418835A5B9675C53752B8D5F53E9C01E0F6E77 +51A6350D29C04E22BA5897CCCB579DD5F90FC8482307030DBB6E8561BADFD1F1 +5FC063DEFE5178BCC1A5F4DE534704AE0E43BD1535A12CCDB14AA1D0C74B641D +658DAACF0059A434EE6282078C1E80F85A34C3228F5F7FF83F89603613B84478 +EE02C184414F84FE7970785ECC2EDDCAAD88FF94E70D3DA9D4747F95080A3C1A +2EEDFAF5D4ADE27B99436F2E22E18EC8D061E3DD90EC70948BD50D1EE2C8C4E3 +A0D988D36146419C05EDBA0DA61FC95218CFEED1FCBCC91F419FAE7B43D4077B +44C025532B9AEF5C2D00F08FD4B0CC118222EA16039E16B2B21674F66AB6CD6F +6E1F1F54DACC75DD1734EF3318D1364F840E10B44842EA2D710D2A36F3528458 +2C68D67B737B90617D3598125CC89EEC39851131EDD077DDFA9CFCD9DD7FBBF9 +DB8470B9E0DCAB56428F1508E3BDE08CB9F91630BE44D6729AB44D3F9CC25BD0 +5358EA6386EF07D8FAA843A187A9FDE319AE69E85801E6901D6CA87D8CFB171B +FB248FF2EEF1C6AC56D9A36D648348385ADB4B8A7D614794D8F422972A9D4C80 +3F8E33F1B2FC23C480B27E3388B19FE3544AC9461525199447BE809A04714F7C +F3E80752A16AFEB451720ED3F5DBDAAB5E4B118ACCA148ACB99AE24DC09523E0 +BFA40A88965E69C047E7F00C8A01A0588EB3B47E99293C9284599DBDD099D52A +A0C2033D88BAE5984261681C024174906F98B99466F38D0DC29337F69B14D3F3 +50843FCBEEFD2BDB556068FD7FC654F087886E1CB17FA2279C3986A3966611C7 +DE7EC1CB51937AF2501369166E96A4DD0B124BEC75588C348B22DADE47B6BAD7 +D1F7C5AC2122B02CFD2218D962C305B2953F7B6D36E4316450A8DCE29866EDB8 +5D3B93CF031A439C48BC55A217BD7A6617E09F5677DC5986AECE3EF80FD633BF +56D49E21D1E672027461FAD4858BAEAF550D408E71FB357886DCA559931B5149 +8CFFA9C48713600FF392D880B1002C70EA2085E64E217453F873BCC05E5F7CEE +E5DE1C0ACC95275D4DD32E55147E507150FB2607DDB5E6D3A54F89B3CFB40232 +0D6F40457D714A60AF7DE113F9A0A2DD661FB351B58DF3B626754DCF3D51701F +BF8B731A4A8F3A143F6782C5F0ACEF6F0774A7C07BC4554C28F2F2D080EC9183 +CD210B3E29032E28F01FA1C16832671DD1699DF342EF00452C34B2779BEC9124 +3C64C978950398237F1AA8D66A3A39A0D7088B271C054A9143D65ACDC3E1F0C7 +7E9F868F07083F55A6386337793D9E8EF88E6CB1FE850F0116B2E1088E1DF2C7 +4AC396C84CF0F35E635140E7A6A19E5E39902A2B52499071247BC39266519B64 +52F027A9EF68DA6F805C47C5B6ECC0A9ED5DB79CB1901AF8CAD2F7B9CE609BD9 +3EC6057888FA4D0AAC5B0DEF146124789E8B6903BB4EF9C05A4EF964EDEB91C1 +4CC2614FCB772D3C72B6DC4D056F185FF3C9F7C96018FBFBD40A636C33810DB4 +47FC8CBDC9962A72404AF156B17D69CBAD1F07B4E75CF402F68097E7588D78BD +3C9DD1122ED7916C4C56D908F84B2218450E35209DE1A30E71B416898AFB1F3F +25242B70EE33FCDBD00C2A103A3590AE3B63C5900696365B0F018B80618D0F72 +EB994FD8DCFDDA7EA3CACCF393872EFF39BAEEC6BEDEA67D03AE98F2249E84F3 +6ED37EE5E993EB96F282D0270C794F2FE622434EE5C99C8677B572D1FCE4EC13 +A1B171193307A7C8A81DED947154D90E58E2BF5281C56892201F6C8D287DDCC0 +11AB85EC27554BE0040FD227E027F74847B16D6BA060F75208D12CCE7FA44044 +A08917508036BEAF1D9B9D940C1CDB2298793700F940333A98BCD90147DCF127 +C6B99F4BF49EE656CADA2F4C7EA905A755879E7F692F4F39ADF6EAB7AEABC171 +2A72D147F1CDC0C864B12EE0816399FA7D125CAF57AF89A440D25333D568845F +B4D6B8EBC58A521073BFBB6D9F860980767343CADF8414D5EC167D9C7BC40B5C +97FBDD69B3DAC25E87C4D167F376472AD826A4EA0511278C8D9DD9E47F687108 +7C53C4721AEA016627E47487C871A6A6B1FA52CA703169AD6C785415CF63E06F +CCC95C2FC29097A3F114B5BFE53D0D0D15AAAE7A81211510A28B8DDD2E9D3F5F +9585367A2FE0E43F1CAAC3BF4D89BF38CD362B57667F97E202289EE40ACD4E76 +247E1C2BB25F65F2BF20745FE3A19CD048228ACC97CB8F66EEDE564758535AF8 +3DECCA4F5251099F649C7F296C068A69EC6EC2ABB93876CF4DB6C9D1B924570A +5124C65A88FEC62E1DAA87BF2F22F179033EFE247A114ED8753A12F642B32D96 +7EF019414141E494C1A98B7396EDF2427C235EBE37B47A8CB2D6A9F1947A52EB +D437C9354185B43A4AC299C20AC267FA110508FA24DF66E2EF53A781B0000D06 +2B3589A4E8FC4277A956BC7EF8CAF57FE644C44198499F566DC3843EE31E17A1 +E63B14A615A3B89AD5F16B34EFE495493112F536ABA91750DDB8FD1F558BC74B +199FF3A48D9BD0DE21B54E3387805AD1B9F105E511569AD44D1191207557AAE5 +CDD74D81C65FC06598248A72A91E9865E736FEB8526E1532620BFEFD7CDBA684 +70F0EAACDB044A1FC37BF155BC61500A207BA16200F7A7EF5C98F7C0BA0CE63D +DAAF59F0FD04BE25E822AC796F52829BB0048393AADDD343D25734A256C6CA04 +F3F5F041264034247668EBF3C859103930B3B08C595BF890CA60C1E429233A39 +E996C06BE6EB32CD6A1560BB6378C435A1736AFDAE01C0A13F37B8E9C3334DC3 +C385AF8FE1AAE8ABB777EC8555DE3E74A433D47217F9D05CC291D9936CB04652 +9E3DC449849E4E8A012E8DF58F8DB4D3B042445DB2A5F3E98B2005746950F402 +A22085D5DDC5FEF15D8D38DDBC6E5F8261506E3C508EFF3B7C08C1EE8E4B1349 +A845343908E5B9F93CA25ECE6AF6F3AACF4BF3350C703C582842F59CEEE1025A +406082C780B92205B359155B095CCE851DFE85D83D6842238E0E15DE2DA0BCC9 +F03921E124EE06E5A282DF6F82B2ADD92D0BA0ADB809BBEEAF5DDF399B26A608 +7E89D51E25EC5E70277FA6A96C4F786BA1BB8478A975989F4014887BC73F16E7 +335179472B4B623F160CE46ACFA8CC210652093E8361DE1735A2AD37D923A906 +838167A8060DC4B749F6B62381ADB5B8932502DC3FB47236FD7837172F22FFF1 +2C33897F244B9873F88A29F222299D7E08F79D07FEE3E4ED09F5F9DD29E9E7CE +450FAC5DDFD241F896AF6680B45011D095CACD10C395966A9C6DA794EF0E81DE +68298ED97FAFBE0ACE1430713BF604E55CBD770F5B120828AF486B25776581AF +F6D733602666FEA868B6AE2818B77E7FD71F06A4EE3CB15D19DDF679DEAF17EF +E0DF14CDDA21C09B4A6FB966CFF6F8B58C042A7F0BD75DBB6DB7EB81C1C134DE +D84BCF8E507600DFA6D5AB32E9A27BF4DB8EDB419C4D94C6B934B1FD9462E7F9 +CFBAFEF8FCB7D86FFDED8A7470A0A4D8113FE70EA8DE74E19C5F5ADC4B01D4C1 +B27E1393D3449B1285D6F0F0A9041B936A41C3218941B33D3472F46DDA0DEC84 +A0339B5218CBE53DE3516774BA6DEA013C9FB3039BF4DA71BD5D6A5C5CA415C8 + +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.1: CMBX12 1.0 +%%CreationDate: 1991 Aug 20 16:34:54 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 44 /comma put +dup 46 /period put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 89 /Y put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-53 -251 1139 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 +B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 +AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 +7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF +20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 +B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D +68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 +D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E +26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D +F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 +77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 +BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E +C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 +30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 +148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C +E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D +E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 +337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 +0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 +472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E +A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 +3318B32500F76B1038FA6122C2AF6261B025BDD519D349966A067FB190E26763 +A5C6B1AEA2A47EAB8EB272BAE2EE33A622E85A7BDB149A6C7C3BDDFB840280EB +3099FD3BC4081E2426D68C12D6D360F1EF8FEC18E227A4D43CC27E05ABCBA6DE +A980A2228625FD33C772C6DB7F803DC69A967891E8D28BA667D8B04CA8A788D7 +C7C5D84B37DD98CCCD946655A12B8B5F9C3B590A001F1EFAE13F739F45C8C6B4 +257C6AA4D133412B2F9E25226E2E9CA4A3C4D31884E143A6207CCC7644C7C30E +C870AE94C8DAA632A8B3FB90E4A67ABFDE4904E8417CD16EE5D8BDC5483E80AD +4DE4AB6F0FE123427DB32A8BE5E0BDAFC6281D56CD83997354829EFA338991AB +0F4ED89C6941BA491B68D608301AE9E608C34A9A035DC3E86CDB4A64EE6F4629 +315A91184FCBDFD727AF7F9A9EDB604A1A13DAFC7C46A730E8CFFFC3FFFB1E89 +9A06F637911BE1BA30E4FBF5A0C5F504004672E5609BBDA6D6308606EB8752FE +AAD27C809B4F0DC9E5B834433115EACC92A17E214C5341A5C7D42375816F5083 +9E29261577500737B690F0D73EADFDCED50E6482414481F24216C2E7DB0677A3 +991EC0F265B919B8651C16CBB83B6016DCF8071C6E3A8D627BC4416109CCE5F8 +EA954C91C2918D804CA758C5F70551CDB5886FCC4785DEE80412A6CCDF7CE64A +3328A3D3F38393DB98C4D02F36E0E162C161160BF721AB1947FA3B8C7AE170E9 +61AE9F8B46766E2FCE33DCE39622C4525B4F48B58C2BFEA8E96C5637785713E6 +5D550881BA5DDFDBBE0EA786C8DE9375B694ABCFDEEE060FD93620FA2FA7C80C +CAAC497C0433736D80221CA7C96B72E2494F1B3CAEB1FD27F83682F04DAA0A3E +DF102513E3303337E028040AB7B4117037B72AAD9A1E491B705F67361A557B57 +FE15839A3B1664CCFCC8589E2F144E7FE28E3DB055A7AF6B3C329010C2AE8FE5 +D6C32C3DB0A2FED004AF13C6C7884D921DEF0C55C5E8EFD765299C95F7869119 +DEBD617AC908DA15C2665B025BC4D5FE081B2F842C3965F2207A05E21BDAFBB2 +8B8B7018EA48AD4823695C944AA76189F8D3AF3459E1EEBFA9442AA9B845FA25 +3BDB2D6842EC70AE87EFF1A0A241D19BC3349A9F04C5A25C966D2350DDCF5C0C +1F707723956D01B3EF7B09C7A37081AEDD0DF85D1E4392A73EEC493C85B8F1FC +C59B1B2A1B91CB642D968B09D4178D36300E85B5E2CED0C18392DC2D498ACF2B +45A1ADA07CFA3C0F3EDFA7B39B1F8442144C4EEA714A67CAC59A76B78C25F6BA +49712594A8C82D3199083C9237A69B55678013A886FA4A6E5296071361E4B780 +467CA1EB1838818552E1E03256AD14E0AE84CF2034DC139ABB2D29BE20EFFB21 +4338D4CE010F1BB45767F72088554BD33BEE2AF94ACB6CE894AAAD575F2BD390 +9F6D3DDF9BA8A4EA17244774F2648C9F60464136B6382485626854EBAFC4A2F2 +996399BF2F97C7381BC50057040537F19967890E69691B6BAFC04608DF8DAE15 +EA853EC865E3A88E16276DBB11983BBFF5FBC013AAE53FDFFC0F884A82AE0701 +FBC6B117EF3A45B6959E93D0F811A85243DC3FB13219CD14106B12608CD7336B +CD26EE6F3A13AD6EAFF464ABBFE54515FF2C44D27EEAD7FDAE9CC5BBBC71F7F2 +6B0F21E1D28B7562BE8A81E0B942467AB3AD918209A02C85048149633794F3EC +9A4170F3994042671B63BBA3D7E1562EE494BCF10A46B5305D9AF0EDACDD6D9F +B31FB080C264278AC82C9683EA626A191AACCEBB88E2CE31FBD5D0A7A32C90C9 +03C17D842450976AF1FD86B29CAE0ED6104E017723B18B849344A92E348C8AFB +53DDBB08E31AB5F82283DD8EE248E691C1FE0CD9E2E57FC66D42856393B83207 +AF58C7265445940B8CF8C3A9F6356FA06255CFF230298068D0C0B51173C10B95 +90134D7CD4F54BBDB4F9FA66FE4855DAA0CB58962DC9EEF28931766F866A1F15 +0A80FE86DD8B38343A03BD67489B7A1D08A28B5E776405DC35A11D4EC08822F5 +DD00FA83DFC9EFC62217E5DCBB775AD0EDC26FFE1EE275E496B92A6E0FAEB92C +6ECFE9E4F778ED08D0F2BE1571D988424DE1B50A8BB534748FF1ECB464C9A085 +206EEE7A0DE7CC4D5335A40AC51106CD3FC6D75A5E400CA9A0BB610F677D1816 +1BC717F63E3FB497800684E212F8DC5047B00E0F8EDAFBD5D3F1ECEB1F951B23 +C18E0CC93DE2B369B21950C4DF4981DC69725872081E9C1B4556779428603DFE +1339BB8F5569E649CCAFD9F354344782498B8755D881B07E9C0FE50ACF956141 +6E4A36301DA057C7078D52FFB8D213D3E9086F91BE387CFB33C7744950F62C97 +1589728691863E297CF0894E6C69B3C2981664F69F095933762BFBAA6D5DDD1C +DD1D090F0C4381B28F07E61403AB616858A86E9BB765D09B30B28277EFFF409C +FC8009CB393B3AE2D2890A808CFEAA804FFE8C42C0E05C67959E5A23D4B2D3D6 +7CF35FA9650B37A25EC2853E9259AE291DFCFEE4822B9DC9F68EC86A1312283A +9A789FD180C3ED673D706352785AAF7E8DF79EB323C769DD86E78FEF1D074FC7 +F501DC0D268040A74C54752A5FB0648BBD0A7D3A594C2DB890145C6B74ED5FC2 +D41466AF4F10D74E161BC5EA1C274D222AAD86F1C0EA9D51F6CB7D5FE1A6FCA1 +BA0DDEE4588814A09E5794E6BB1994F7E5CD35E3649601CE6466C8157C87377F +3D096CCBAC9DB3B66BA616BCE5B8D44062AC65236F294C199017CBFB8BD6505B +AA7A22D146DD002D36772C4F5162D109227CA4B92E9EE314E43B52174C593F79 +C532E1B4C5E72CD0872DC9891FDC532CD5774EFB23F82FA10B6449FC05EEE066 +2D083C30C5F288B452FBFD5BEA23B7A19EE07083CBCA87A2503B6AC0FFF65497 +6929F65E9E88B6388A84408CDCEB2874BDC72D06B033B886F448948AF3F9E581 +C4EDB3DBF7C4F22FCAA0C54B3C9CBFF77235D5E8F6CB55B48CCC5B7EE1F56358 +25B9E72DDEF7598FF08036634989CB8A416205A8A9532E2F3071A8921B2CCD4C +370B29DB1D9406BEEE4C93C2022E3075D4D5A94292212EAA9E260ECED28A438D +2CD8711837287D130D76A5132C8E6E09DC1AAFA65CE31C376A7DF9062AA3E3E5 +F7AC561729F9D3FC358DA3CE1D296662ACCCD3AB2779F13C8FEB5E2F0566C1DA +9269FAF2CFF44AD65F18BD6ACE9608898139AD229F73B4C1A310890BE0775C52 +A51486A8D721E0BA5E6C2126EADFCDE9AC9CF25EC0CBAD7208C921933EF4765E +EC4172C9E2DCD6711D770085A752283C785124317DBD66DCA7384FE9764A7CDC +A4109FC5278C13E2646034478D6A1781FDAF21D9CD3104A2261C412E9072B617 +65294BF1E3E1994BE3670A0A51E4C8AB05B18E337808A386E1FA85C3FA4E9108 +3ADFFE6AE72E28CBC0A8DF3BFED6777390591D1261F774444885730A5B3E6C67 +5CCC8CF984129C4408BB0EB714EB4DFDCF5F8EEF9F4872518F54EB58987CEA33 +F4C2241CCAFDF2566DD874D6050C094A7969BD831EDE4E40B138824196B460AB +15E6014BA2311D103ACF26DB9CB79CAB968943F4873D92370D367FFA082C93B4 +B4461D199ABA8129AFFFDCD69E98F5C27E1F849EF22FF0FF625D561EBC90F182 +8271DCC654627C1035B5DA0E0BD56830AC185520533EE701638D74FA392403D6 +24A9350C7A695186F896D514AA511063B2B668D8E7C1DAD8EFAD88B78B90986B +93F59E3F3375CC2F5A84C17D43857455404193CFE58DCD7CB725C71B24844B46 +8C63970C22366756B6B0CF8AF0F5F78080CC6B1E96207E232918719B23329EC0 +0171C78C0E5DEAE224C9FCADFB6A5AAEF93DB384F44C35B5CAE6FB41736B0DD7 +77DCDB5C06CE91E862327056CA27BB2D512AC904295188EDF9DBFEBE4175F55B +37A3CDFB2E84A9EBF74761A345363A7F10F3E99DE38D1F3B9BBE32B28588B40A +9D8A5267B485E38C489ECC00B4C81B92DC72B5C7051448766FF9D1FAC49A7BBF +28E672021BA5CAA75CFEDC9A2439D47D0936DD4E7D870ED4B4F4FB7A85EB21FA +AE2A93065233AB5256BC1B97DCDADFEEE49B4317EDA13FA14F6F5B0516535981 +046AA626A560CE8ACBF67EF302115944EEA6C17E6FC19EAAF1E46231F9B8607F +B6B1CFF13E0F2B8CB7258151CDEACB85FE82DE96F72347E6349AFA9F4DAEB0A4 +AF8D5D14E2F34C4A9C51AB1989DE4C4B164D356C30302C77053ADC1CDB5A55A2 +A20957CC440FDECF7D32C208E3F2840D37D65E817D1F677C812CD16B67933CC5 +F3DA679DC7B150CD17BF41F89687EC6B4FB201FFB8B819C5B990BD7CE655A4F8 +DF77295082E3087AA86DAC4C16B145E85ED81D45A504E39389DD1EF62E7C5432 +B66D9BA1F8E2FF7D85F83DDF43FD9AAE7E60AFF215A22F79BF128CA5019EF7AE +7DA8501754C0D1FDF05FD87E32E4FC3F1A4A681A7CA04237B072BF59FBBB75C8 +69F6837210B528BDD8F9E9788946458347161F55D26B52AAD431606632884829 +B3B9B60191C15E89FA1F20E9CF10A1158EB130E937E79EEAF943B747AA3A3554 +01F3C8F2A7195C32A85BF892753C0AF336ABFDB001C178D00631084D35257355 +44413849A5D963EDD74F7BFE9A9EAE9B7BDE07F3CBAA5B9998F792C6F4BA0055 +3406E4839974EFF70C3774E63E317636594CCA6C14A3772CF8B4032281B76F77 +33E1034E27BF474F0968F299C17DD2C2B8A0EA3ACD5201598B41518B14CB7092 +D79F08BE6870DBF673F60F816C69F440F112035C6BD22126CB013AA67492D9F2 +126970A7A8A0F058BF7588AB4D8BD180B8CF063623AAFDD7879E98EABE7019F7 +FD0F80D4002C7258F53E3EA9B8887D9D5794A7B3423200143FCF2DB62DFFB0D4 +B58C2C91A112924AF820541F7C4D85857926245E47EE4D1A08F9CBEFA442A8B9 +46028B56C398406BFAA30BD67421C96E096E870416A6C2B7E0A2F4A61294CFB1 +568EF5C36C6F91EEFECD67671213BBC7878455DB996EA4177790E5CE860A6A1F +38B82FE2BFA86436ED46E60BDD900B4674358CBAFF643901AEA043F330790F9D +E5257D95ECD588145CA9CE752EECCBFAE874AEEFFD9EA12A334FB63D6DC6B0CD +E0B86A4889736F24BBEEF7FD381AE7C4A3337BB08C650B2A8B7C89CF13D9B620 +C5149075325CEBEEF152A4409F53A3AA3EC9ADBFEF6A16C7CC4671CDEC51006F +E5C543189EF555778D3581D735880162627CED42B13E4F2FEE33C419AA518884 +E2DFB6D6F1C9759B260E7346814DC0A7A001F33A6372F945D060222DA5D7A57B +440CF0C215F125B9D327FBF3742C7F74A850FE6BAE73CA89B17A598CBB738AC4 +564AC942698A45A9F81008164DD56A6497751C55F1BF3D1F90851DD8E2F8C43B +542EEF57CB577FC9733C254D44E9A1CAA3102503031F638E68A59BAE6AC1C7BC +3A34C7D84AD76D55C7B096F6AD59E94BCC1674FA04CBC0E549C968A814632C46 +C632C393FAE776A024C3262DCF08347C4ED40D259ED7B0DA5E89B688B3F35E02 +6015A9303964EA2D5F4AA60ED1A39BABCBEA725E3504741B5E36D9E63E248F05 +A908DCA18AE5D6ADED8026CDC356D70EAD9BC7690B632752079C0C45098DF5DB +0E3D771E61D21B20B0360530DE3A32279D16DDB6B16EA1631979CEC0065E1B28 +3C4D59FECD235B616737229EEF4F35814A51D66E2119F6EAAC11BC90A26FC3F2 +804357330EF1763CD4B456B179D133533DCB37AC701CF7E8E0BC088A154FF096 +CB67B3FAF7E2580BD4AA600CE885F7BBB02327093C1FC596AB60981141031792 +EBF76D709C573F7202BC8F8C5F19876671062C7A3F13FEB3E1BC9B4D20B0D1A2 +D1CCCD0D8AAC6490BB3D412F3DD0740BFEFE8C9EB8D8303957D68688DCA33166 +6CB2E1E15CF38094933FF947E357D9759F240006B6B64A8B8BA46A6E43D4D26E +7A54531E3A3A900FC427887043367A14D88D5D85CC010193DAB07C2D4914DD8B +8BC94F066A8680337453DCFC19207627515CD5B3FFD2A5C6EB109B503B353CD9 +03BE5110D30C2356D9F751A4D777425ABBBEE997A0C37809989410B5988AE768 +8F1F6E76709C1DAF36C91CB44D3DFC812D289D2F470DEE365D2F3D3A8375CD7B +28DDF31CE000B7F885DB7286E06975EA1ECF72006765EABA9F75EE34D138E941 +80EC363FDE8B122621A1C18124202F274345C2D2DB2E7075541860DD2531A66F +71386B3387C2788E5F0BC9CC472CAF6A8F7BBE0A0B004D85A7A5BFA067EBE167 +C5B672A4DE0DF0A39467094774E472854E19EFB3D743ECEB342180E5A97A9254 +44FA677D4440CDC88101A4113CBBE7931433D7FC85AC2FB59AEE3175F22D9270 +1813D82E1608629C5D62E5344D672B8604E7206ABFC39F00A66100E4D560D7D7 +ED8FCF0368E48F3F8551B8CF1D8011C079E20F93A37840D969583A12F4632E63 +8273C351C4803F0E1E99AEB36D69E7DB704365791F4208139FFF42CC0C355812 +9AED12F62F6F61087D7550CDF95A5DEBD271F415CB72A13010A792F81D0A78DB +E7E03325A4832848112CF0F4DE539A06FBDDB6CA46B78E59DAA89D061F39463C +44B80A9B8283CFEA9C258D2F2CADEB36BD58C5DA2EE26D4E08F39C48E0204E64 +536E8078BC73D3EF26D9D249F20628784E3C8CC40A54B2C25555473CF727D387 +9D3F2D4BD0CDB02F41F597DC51B74D078271F71806E48EBCDE350040F8B76174 +3D4E6C8202ADD34E5B7319733EF19BEBA4BD57011A60C954FA1ACA3B14CD28FE +7BE9B4062277F681EA3F10AC9F9835B5FACBE7B918F2C93049B3F23CE9D99E51 +B1295363F246128C2923F8A7859FCCBB211B7426B3B19658FAD95E3467B89165 +630A85BD1542B5AEE76C7D6EF46FCC2C933407ED1FD864C9116F2F1F3CA39BC8 +32C0DB66A7E31B9C17BA34EAF0C64FE043D7FC8B512C8A79AA3374A78DC6D558 +602AC803FA2833118F5EF378A54F70A14B6DCC65CFC0760870E829176BFCC9D7 +F9F6B3219BF6835B42EFE93141C72CEBD230657B1CDF41F74DAB153694FA2FBC +039FE701EE119540F6E7C7F7B5A303A6CF48696495B902A8EBAEDB378BF291DE +1D9BBE8F9F82C20EFA58EB948CF5D8EDE0F1C18484534CCF51BCF65CFC833C27 +0DA24723ADA64769F7A9756B57409B3A8D0417CF7379AFC924D683B05BE96319 +4595214CC1203744C828F37B4A03F0345A3A28C87733D1A8D80F8E09C2E43A7E +AEA179623A29B4DC070B700D3EAC2B00555DC2ED46C834D80690A64E14A8DEF9 +17F06944A47B8C800F25CBD3FC4AE700CFC30459755D57EDBEB3AB92A62F5744 +B5D19C2B6E5EA782440088C609979595F13299AD237A00CFCD8B05A1569395EC +8D152AD848EAD77EBE4DD9F43E6A6320299823872D2095B90D65FCC36C3A28C6 +81C54FA91BDC185A6A4DDF63F76D68C79052D4B73A5DB18C5D867E69A446F4AF +7768F227B3B85D336EA06C78535D44AC8C862BE38E135477FF0E13DFA18D957A +5C576AE1D3290C6C79B7D95C201D1FDE254D9EB2494B3EAC175EAA43AFFFA682 +0C0A0FC25E362525154D9A0E869E2591C885E2FF480AF885B115956A5197DD9C +D206EE00C4742D4AC78B80A6B7B3503050093C7E4E00685CBDD042E9DF3A416B +250584D8849B7DE26A378BDD8199BA91295C7081F563D65D8A768A936F3FC310 +A98915827CD8F40AA0DEE30A63B2CB9FA1FDB58B1C7DA3F0F1AFFAA6226A13A4 +56A1FCC427844A3BA1EACCA1964E9293D3EC2AABD04E5963F5E3B1144B0796C1 +A12FB28FA42F6D68C4811582A79A341F84343DBE17B6299F538C89919C618260 +CF0D632AD2F14235BEE555BF5F70BDF168AFB7DE2433424C4124B9FC314B5F37 +8679077441C0FC4F8B2D8E4F13243AA1952E8B5A3A035328EE7C8C09800B531E +0F70026C7E68189D7C94BE0BDAA917ECCA799E1405CF618FC6CB26053DACF36D +DFC3ACA8EB6D20F2BC5E679D61505D23047A7C93EDB79034C2829ED267E82A82 +49BD89672F310A69B949AA35FD8CBF3CDB387C48646F81F51B909B3B86A8CF51 +1FA1637F574722576198D8AECD2CD9185481FFEFC722D929B573E1FD54B7B8E8 +CBC86FF89C45548CB06014E68CDECAADB8369B39A2ACEF79D964FAF4D821E4F6 +EF6810D72718708E1E64CE6936E58A4DC928D3E9E4AA5FCF04BB2E27353DA3C9 +7E84D43E59307E078013700155356B5F134F1D5FEB290C6EBF21DDB7E46CB54A +5E6D4FB62C00950B02741D5344E0C265211BB6F6C55E83C27348F8D6D2761DC1 +2098A0B68DBC1C5CE163A21ED18BDFC84144E364FCEAE6A9243609DBD1B4363E +877F2E26AF42F34E13B6C2E1E485C8BB9C7F1391122A682B9E9D5F00868EA0F2 +8080D7EEAF14E89DFCC25942E8BB917A5DEE2246DDE18F485667B2430056AF40 +524E708DCDB14DA6EA1269AF4BA225AB7BD49C86EE3B9AEBA2C8B1530A8D72FB +7FF7602257F185DC18F8C41765CEA7BD9C054DD0CAE1C7E725D2D8D9F0195516 +555596010C69833A45506984745E6321F2C7218C07828F2D52D9A54D042B0673 +9EC77314B4877225EEF527056982395EBEB7BE86DB016ABF99C941914BB8F89E +BAB0FBD6D390D2AACB75E4A1C0E81BF8918579E91BDCDF21DAEBA4A3B7F1A144 +C603DB6B498B5639BA86FDB53E381D3BD62BE5FA1127DAC61852A980D26A6794 +D1534DAA3240798581929CED645AC2D5B0B64850B1B4CCDEB7F8E5116990D862 +430A4C5A282AA682FA09EE612E6912405EE9B7A1AD2F329A0068CFD84E3114C0 +895DC2A112F482DE127F4825FD0C0B1A38A548596431E23099DD454A7BD9EEEF +24DDF1E299A3C0AF869AD77DB0382A32AF58542903E9E773CB7A2847C0598855 +C372BCB4BAFB7AEC7276AEB101602415D50C021A3144CAC78EF339CAC4713A34 +20C435062AA9AD9088B3F72CF88D541B8A2914A2144D4E3BAAF8FBC29ED32C52 +EA0A4B8CE949610FE35D78D1A1195D64EE01AF77418C9D49FD7F3DC2D6B6AC03 +0712C54E2ECDF64319343C5A544AEA526EC66F956117FF7C7DB4B171F6ECCA9F +02DC60EFEA273E3EA814B810BB44BE1A2A9FCC6126DD9312F55095D09891ACE0 +42839B6E743F729BFCF055EFEF6B49395B39A9D937AD3DD6DDC133AA88421EC1 +38118D5339EE09008149BE8D2CBD7D522595D53F0A7FCFFB00D61FFA185F653F +0765F9C61C732E1B6EA5FD070DDC048C1F9864A31886C0E68BA6616A34D3FF27 +49922B75F719EDD3A2C083C973C5A5756016393AFB68D0E8759628170B0641E7 +7B851DCBA6090DEB21F6B805EB66234E6BA5A3D1FECE2721648747568E01D01F +60F0147F20EE9EFAA3A5C6EFA8B72203836467EE18382EDD8723ADAC84C7AB5E +ED8774E3A3A94CD5D6806A93CEF48CF1B50EC9B387B40C2A29F0543DC9F70425 +1C18913567DD72E7811B907FE0AB9149AE3540ED2C51B6EEC62A08BB66B29C90 +7D09797FD3EE73E9E6047DB4A02A70B974F0C1F65E94D6817F9963A8E669B036 +0ED7655B15DA44DC802AF0F667EEE2C9A0BCBD3353F6BB5DBFB3B6EEDD712274 +2DFCE6BD0253A9F42CCA1A3DE7C49D39F1FB313FBC823D21CC2B598BF4D5FA4E +9BFA1E4DE80D12182C38F424C271F8BBCDF82253E448A59719A13E80E3DFB1DC +B0A3E4540043FDED9EC93A66287149B751883044F673492E625F4B09F79236E9 +CD69ABE887FFE13FC076DE57C84023C77673D69E2016A8343DCB2C60CF457A85 +086C8B6602F7F1885E1C21891BA9046E0396707B7E6C28CD4383ACE90D189077 +312C10E3E5E72BD1971148429565D3E87FA4CE5D3ACAF4F8D942CF7D6265E11E +0AE49A2DCC9A25536F272EE9E49779B158A4212F060395EBB011FF00A86070D6 +5B25B9A7028C12B7423F50F7C6B42316DA90A769B9AF0A954AB962CD8889CC11 +41CA39142313F4B953B79261D7F0BFDAD9F07C17E8B82A5E0CEE6CBC357D6E28 +6CDE8C65EF662E95B9E3B86B97DA7FBFEC49766808FBB0A8DC78B81DCB8332D0 +E47303767CC0122F4C7FB3C8749A995E72AB1D31572D4D3F688F685C32171295 +A71B398B524E50C59C64F3E8AC9EE15D7122A3689DCD293D7BE7E7D42E508150 +31A359793D72EC27ED3F367F9777587CAB3BEFE14DC2888E1F43B828618DBD02 +88B10C7EB71DA8818CE5407101D00C4E457E53A2FEC98707F407EA519BF1D45D +9C4184939FDA36445FA204D572FA795D9FF4FB7797D50FD67931007A73FAE4C7 +234A28CAE7EBEA14B545EF35C08FE94D5D75463B8FC02ECEEECB9D65B418F2BE +B7C6AE5C12943265ED0258F9B06E7120A59575F0DFCAA167AC38A306F7C67875 +5A8AC63E125DD07BB43909A3C6DB9D28DB0B89B2C76A007670A22403FD8D47B5 +AF8FFBF331374F803A164A0A52EF5F4380F30BB4D81C892C46A5E75F6B10DC44 +FFD825A545C957EB39F4662A5C313D2A4609E680B46BE4C1F6EE4C0DD44C9DE5 +9B03436297794A81473D9A5E4665420C6A392E98E62258155F63F5F4C43638E5 +60FFA20829DF6056B10D647F1EB2CB956A3208D6BF939A646700958F2E2DEDEE +DA5259D90360BD586FA73F0DC23DDF7640578BBB4F8ED37D19C5AD282DF493E7 +5E1CEE7F172221CB588EB3EFB4C2F1F6889C65EA47242250B28E67C86FD054AA +946335046D1D686849FCC3A6E1E3142BA920303B1B0884648CCC03BA7C288F3F +000304F1BD486DDDA1D6B03E6FC5F8D98A0702ED31E043C40CB6F8FAD751CA59 +EE49D32A26A70D96AC1D18F1FF57F22F0DF11C7A7596AC01814BE9F8569BBEC4 +80072664548BBB66EB0AECD471408284E98A297D15505E8A09A4A18687B0292E +683095D5868329B4D1BC6D44D8ECCE3E0CBE1BE8EEB80BC8CC72DE4B8AE3F4E9 +C946BD645857CFA918545309318A9064DBF3E706909E1BA3B05082CA9BE71186 +99F9E5723FA347879A8DF1B90AA81920F4784CB2B812B0666C5143FA24DB3128 +B6DC3ABA582941AD2D087063F470E120DA9410F8C219CF0FCE60996175F85FE1 +B89BD179F58D75440D7354410B03BD566AE2E5EC520B9E3452A6A71FAFFA5C28 +8AADDB077561CA7429AEB1F6864C06E5707962D4A1993D445A587FC5BC497739 +237635C313B9A65D1A6B53B129439D42C31373AAA8F7D687A4F988D7C82D4C81 +932A09B76C29A27716BCD438D4D08BA2B467FE0E2C3B50E82DC04A4B0E351B26 +2C3D421BA2C7403A5D587C62DAA65899DCDA98BDF2BE0554AEA617CFAA1298BC +1420CDE9EA38C1EA87DCA25E25F6BB1E6279258A96BCFDED6BB2F98BE47354CB +FAA54B69E2E74E8B7D09F7E43E3101CC7133B51159B971D566FF27B6F4EFDB38 +86C3CA1D5F2CD03D0DD7024F6CE4FA5C8F3298F4C3E58F086DD2F7B0DA9CE34C +B0477FC7AD5C1A4ED5B94EA6E145C0FD195736527C9A2727655E134CF5EC08E5 +C0ACC6BBE2D09FD95EFC123A77D1428765CCB7F8A8529205CC4E1EE8AB4BF3BD +66448CAF34110D7A84EAD50BC8D60CB3C37A86DC0045F5F3B87F08ED2D4AE659 +94A75FA7F021997AD683FFF284CDC8A5D2F0AFE9827F6E28BE008EB1F773B7C0 +B161996761142A37673674F1A6B0AF2C5AE6B981FFA447F1C4016CDCFEEE533F +A95296CB5B6D53F76F3F39F01ED4552FB98B24177E385B26B180E6586A63E815 +E45E2FD4C49E9F8E0238CA0701071C2B65580E0477683257F5167F5AA91051D5 +90D70DD37239 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.1: CMSL10 1.0 +%%CreationDate: 1991 Aug 20 16:40:20 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +/FontBBox{-62 -250 1123 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 +08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C +30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF +C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A +BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 +5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D +43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 +374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 +DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 +B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 +63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B +89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A +5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 +C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 +7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B +EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850 +4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5 +7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40 +30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9 +2E080C10DE923C18AF86D75FCFFAAC63768D4F985185710865FA3225EF531068 +487FB30531B1C2A4B4AB83F8C1494E6D72B1F6A012E10A2A4ED6658E5B081DCA +1A3FA683903F4354E3F6808212A7B2765AE1F7BFBA912B153A0C7051A50BC080 +C9DFC891A623F1F8EC6223CB3B1F2F7CA0C0E1922A3BD031801B31F970493F3A +9954C467A04D1D826C9C17155D6D441F123FA232B0908F15EFD9BDB4B8D53E0D +0ABD89C56213BB393753AA61EA26272566D164A8BCCD6331AA9F20393FEBF998 +E8EE3A54FB522C5ED971A45428116679B75E438CD522CE02F372141B456394F1 +D3D9B8B226AD7911D9B71F419E6B4EA2680F41EF3835715528C2338652222CF5 +07EB1831C27272592E0D7FE16F87710F2C50AB7C4F10626F7203D68FF23CC4D7 +B81B3922914942AC520B3183603EF0198C0A10957302E97A907F8CA7D499B85D +1F849566DA34D8690ADE3A4DAF7A97E1BF2C2CC784F97F4313DD69F9F06255E4 +B15E5FF86E48FC4644A59BD7D396B64EC5DB796D909A75711742C6706229DD25 +D775B208B14D7E2C129AB980CF9359AE105504F77BFB4ACE3649995C8C5234F9 +0D312AD195458F9F751C62901AB81EADB1762D31C769D55E9FCDC64A7EE3C59A +A13401859F5EF336EDF438E85B8E7E0EE5127B59ADED11E4075657A5E7111067 +50243C97F57BB93CE988C547F4370BFCB852D4571A3F24D0DDD387F8C366F031 +1C8188B7502BBF0DE92C5E1A2425ECF70E4F8CFF80E60680903871D565CB9B73 +12AAF237EECF3F6A4DB19FAE884D02436B2A4CFAA75B7C0787AC2C4FFE2A0CEA +522EA455BB048CAD8C89A42361C81475EEB3C2AD1C4104C3CAB9E94C1C932A40 +6B6A582FB7CB0C7776630D3266665A275A9AA25939B6ECD5EDB28A301EA5C475 +C9BF1E6A1841D887358166BD353C506BC26D813DDF90271698E84BFFD2D71FE6 +39F6BCDFD90D5127F385BFD9C0588CB64A2D6EC213FC46DD481B990F022F42DB +7CCBA22C48489FAF12E89524E9990C5BB71D6A8DBECDB453D4D85D3BD7BBF72F +33D40A451DED6AA8AC14A6AEA2E0C2B300F96DF9E94ED2CE865224C5E8DFDE38 +BCF426323F00E47B62726021CE7991089BA2327C8356C32267EBA52AD586CF82 +E9A7B46857CCF56CA461B902183012FDF684C649F656CFC2284B5B7C315FAECC +AB4E9F43EBBB945DB6E0EFD7ED536D672830F7B588592504BA5D9AC1DCFAA3E6 +94DDB28C5BDDCF3B88C6AF36DA732C2F8128AC6C6363D2AC2D62912F5736DF85 +20F2F403D712BD25932EFDD1158AD393676F41CA17F624619FC8D45F6A3A7754 +5ED156AD3BB137B036E5ABC5638260E6EEA46372771AFE123F331B4C9B2CEDB2 +C3F2196245EA2C5CC76800F336259FC8BEF686AEB4F3B1EC48BD2BF903985988 +5554AE3D7D810E2C12A6667BBB93F5CFDB223D1594E37D680CF0EC6A49F2F13B +590B9376A0597EAE084EC0742B17C52D0214E634764CBC2289B072A7D7BF7E42 +E21F3F33DBB9B3F0DBEE1D9B4830F3893A80A6374ECD4A265D13C2950BFD73F9 +ED3867FD35A5156DA284BDD6D0540FE242E72EB708480240F876C66739EB8500 +1285AC4CCB214850B45FBE616160EF568F3F7E2A905D3D7B97B04429DC4E6E3A +0CDB03A0238DA527F0E53F72ACA15149AA4BC4245B13BD2458B46C286C8FB1AF +F2B8536B90A608E857B522230D32CFBD0677650DF1F48E419634A288D5120D87 +AF8648593973A460DF22B9DAB20966754EBA97A8ACA98C1F95C6C2B74E390536 +3FD20B0AADE98306888F17B41822B5FB6C7C0A9E6D7B2F6B4AC4387A645F6620 +0A24144292CF6DC22C80CC7CB653D804A33025DCD98D2856ACFBF6B5004205D6 +1AB0AA4C3AA1701897501C53291787DF77700F153E3F3FE9AF8CF7C27D371B74 +DCE77974D266CD81CCAEFF573083BCD7FBDCF9030D08D9A903D4F302471D08EB +7A4C9A356821D436F9D612FD574ECD6FE5CAB70A1E732538BE79F53AA7FBD568 +F6CC89149DB8BB9B7427E8894DA272513251336D74D7FCB5D8B7F895667DE628 +7888E5E1EE45019B86966913C5C81ED6531649E4AC3277AF8732D51B1A0F26D3 +30DE8E8F8575F1D13348F08D76EB61275C5BC636A81A462A65E23D56C5487157 +68693587B3505F4FCE2AFEDA2E10BD7461C276BBA43DEC9271AB4F814915414F +F7537E32A5A53B636754F1DA3F3E14DE5D18D7D57332C2F83E70D9D39450FADF +A6D705C4A394E0DF31BD26C1130700579B61E2FC30A10ABB11098EE70506C68A +1A1B03AEE61C841063A9ACF4A64B44B1168527B7DA12A00DECC26E9122384782 +6A8D34002A244F5BFE9D26A9ECECFDB475FFF537351BB0CF5400814B3B0083E4 +6C83B60EBE0C106125A5D95CA52857847E7E3EBF983FC00F2026E51BDD81D015 +09DF78C69D2D842009E05CBD4CBC40E1B52929E73F01922E8416C3A8DCE65673 +06D8BC8A6F08C4AF791D0154666D7945CC0904247399C216752EF57113DA6AFB +86463D3E5820EF7F73B6459E160BD79B509BCFD02E6346F42A69B43ACCF56334 +71B053140539FDC4F1DA19CAF0691D6F81C21BAFC0B173FE185FA352E7DB9008 +AAB5F0E00BF6DB69CFAF548F51DCED2B737949C20CEDCB5A2DEB72A9BCE98B24 +3610D1CB43A1368044F7DB21215BB899AB3BD138D0DEA278F27FF808F37CE15B +E3976C5A54C69D54EA7D5BB5E9785D8064C44DC4BDDA4F4B8B1AB4450C6468B1 +B2BEF80BE3329BDC0AD7D12F53C4AF12E248CAD37C709982DD1C256AC8B548EF +9B2CECA35089376E92731458C5BC0DE099F17950D6F04522093D2B7BB5ACFBD3 +993A0D4254A9C70820A5D894035A8850E449DE7ED7912273F19BAE6244EC1EF4 +AC66BAF2950ACD6714252DB1A0DBB64FEB0E65F32DC52F541219D73EBB3B66B8 +A2CFCC124B4710CA9F0D734057E658040A42D1724E5F6E3DFCD83DE7BAD51FCC +B70D8025C343242D7176F5D733DF6D439A33DA3834CAD95DC7C992FA6797F572 +FEE1DA81A9DB18F47C780F06AD6CEC736305AA41F8BA41A0F1153E8283BD1E17 +FCD9C2AA203F3835C9328FEF20459E58C595745F872DE784E8547AC485531D81 +EB2636D7D630F28D83B9F0A77CC9CA5DD2FFDACA4B178D961D08D2A18FF05D0C +0F7CEAE2CA6DB6E11D0CD966E496B2D234F253AE97DABD9F55220EBF886B6DA0 +D60108BCC2AFE066BCBF51E69514EDF5528ADF86CC9534A6BDE291D6BEFA20A7 +F293FBFFA1C0F4A37F92C064D5F3B0623575D1002C6F70CAD0608A67E2840827 +4E9E45AE544ECD99B9DC909BEC3A45C8279A3A971BB17870FF93BD3C1ED35D3D +E11F99DCEDB6FFF77FEC6DE3734B3607D4D49DB7DBFEA7E3BD4E9906B7F99FBC +55309B394046AD63F2E59D568113C109D9CF04DCD2B1B0C15F71763F6C531B2C +83B7E96E0DB04952A9241E71B75DBA88C19109C4ABD60FF7DE9B23E991F14A63 +8827593DBB7E248992E302D6C4AB51B665FA7F66520D67F15E9A221324AF89AE +8C67B418D06A6B4B6128B149F8069DF7CBE3DA963B110442724A9E16BA691D72 +F3613865CB566D7B3B22F19292C7F39F70BA29D9EBA147B0A72D4F7FB6D07944 +33721F94B04FF9507E82DB7C2E5682A2441610C70D9D8672F3F31ACD9BB583A9 +D1585B5D2D5229A1C99F8CCD16B6CA6C1AD5FCB0254D64EBCC72867CE6C9EEDF +BDC5538AB3E02C835C2A135D8712307A338880EA270661CFB8E03EC3944D8247 +2CF9CD961C3C0B6CF8FDD8C3AADF769FD19E357142C793D0FBC6D5CBD69D9ECA +AE8A3F266932466EEE0DD3D32E9913BF8699F2014D1442DC5BF61A3449A6D366 +1B7F4AF08B5DF7072048C4A2DB7E527259AD046C2AC08A202D3741801C6768E9 +3465CAF7CFD73C50C019C7E60C14510FDC51832DDA6FFE385A596F69CCD153D5 +3AB08D09BD5C3AB6BB5908E460921921281F8CF6700E66BFAE45F547DA7E109A +2526164AD366CCE796A18E73DDC09F0E0E3B480D27E2049661E435564020935C +EBDF2079886FEEA8B84226936A59F4419F4D10045509C17A8602AFD588080586 +ADDCC0B401D1600247CC2C9A482482883192A4EACD89D3E37D475B7067275175 +399CB330DA1B148686CBF57D8A8EB10AE7DEBBF437EDF24E2ED1968F0C03B91E +45EA897ACD82550C2316D49017655061D0D92A21FE8B23B23A895CE16DC9528C +7624F3D349982CCE20ED8DF66446742B1DA0945D87BDE9905865BE3CE8A7B41F +03066CFE9FE10C2A84751CBADBED2BD074450E130548D58A07FD4119160A081E +987F4CF71B68DFE39A6DB5562E6368ED7D2A67165EB605E4F7B50073B822C7BB +5568F8434880D1835090D0F0737B0726E661623A2971F6AFB2BA86C82051F794 +1035D35D34FE0071AA2BFC13ADEF981B63BF6F647422A2DDDFEB9900FFA8DB91 +06A08010A9428D1C52CB2636BEF03605BA3F148851CA6262B4963BABBD015FEE +2A6F888BC9D19917C5DE5F730725D03E95B951B2DB240A74883123D40CD2788E +3F22D9F517664D4E20AECA03AD05F6481176E37B5E68383D070A9EE5CD5578F6 +713F5720EE1BDBC20242BAE097C55605A9BE333FC2A67DEF096A6EF03723D702 +562A8031828B4A22B06C4B31626BAA2E90DB509E1FEBD522F2F288FA4075873E +2C2769DF4942DF150032010767DA0984A2EA10FFC05D5AFFC654C16B4EDC812D +EB8DA97B59B28583D7C7C5981A704B25886EA32D2094006AD52CE372D211A51D +D34E86C0ACCB53966B3E4BA9793DABF6E0AEF06757BB30C141982E55017DB1F2 +A9A0BF2751B1C03E276690146B5A6D5A664D74D597EE88545DC5132C61ED4EDB +51B4743C6C9777CBF428C4FEEBDA8D860D33121DECA25792BA03125B3A8BCB82 +8D33D87B5F0AF0DDB979A79240BE8B99285E8CA00D80570457BA6154B711D5F4 +613F0F48C6778264C938B08BDC0416510D0A17684593996690B86A4F5FF2438A +1377231FF3B1E27E279BF7CEE12DA82B6E7C45B86CC5EB311211BF7AE6B51A51 +F84E990B2405C9EE8F9F3490008B9E6977B1820A13FA829507D9C6B9B1CB5EF7 +BDC181FDEE7C1A8E48B48BE985A036B153A6A486084B82AD3E72F919BBC149AB +FD4346DDE9C577315A7A8C498BEA3C5C4744B9E35BCC7449F98568794D9E4F8C +F1A6FC967F6EFDBDE2D3BA012F12771843637DBC36CD96DCFD211A702E316152 +E9B7A792F94C50DB2CEF650588CF1BD3A612227B09BE1FCC99EEA4DB9266001D +DE800C3DFCF92F1BC2CECAFEBD6E0FFF8CFB71D644CBD75EDE2470B25DBF4382 +183DFCF9AE2B6E9DE049E17FD7CB5D5E75F69D2A5E1B456AED863F862AEFACF0 +B9A18BA25125934D99E1D68832376640271D9BF3BDE78191C286A1EA5EB52684 +3EB6EC3D1DCF031584113B0EC8BFD77A85969C11032745A8138F0C0E46ECE1B8 +A14D8FAAA919955A7D476E956DD11556EBBF0A093B5493E631BFB38DAC211615 +EDE56ADEBD3EDF75BD1BD87A90F273D4D0E221A1458552A0414A82FA53239798 +85BAE93A73DFA0C78B10F726E3D8DF94BBFA3FBC98817851DD701C778EEE1557 +26499A30C842BC1A194A764F995AA7043F7F91065A2380C846393C7CA6B9274B +B15C45F7FC74D449769F20A7C57049AA4925158DFDB916872120333C998C496F +73731B7B055F642EFE27DABE4C3A9411929F78C4AD869FA00E6CB649AD915206 +138C6EDD92F116E34EEC551E7ED1279C454F41E815484AEA44E5CCE017269AB2 +6430C6C3EB0589A247C163315DEE3BD11525FBE7F17490306CD1D9E68F574AA6 +37A1459E4C44F1B7963A7726357F42CBB30E5C2C4558EDB9A5BC066CEE26F18C +63C0B37113A4481EF346C46EB5160CDFA6F8CABA14422FDBAD2C21E91F697CBD +A2E38CC8E4B64A00E4A4A046EB1C10310EFC9249DB8303FF599CBA910DE000C7 +5BF7229CF4F475198971421DF4C7D0BF565537497E3E701E7DAFB766E722FEDE +3EFBCA1D24776F14E988CF494CBF99B58CAE07BE36D678305AA742A4622EF268 +5F44347F7312730FFE21993C15E15188DBA3B137B997B7F0DBB323CE9B244ED5 +3409C50DE3F798AE64B703C8160BB009B40A05A6173240FDE6C9B01476D20E83 +3F9108DAA1AB3BAC0EAE04549DB2F8A7AC7FA78FA81A448F6549596BF6667947 +48326A07281D2EE40BAA1252C79FEABD510D72D53F45CF25BF7BE5858926A465 +C71CCA6927EFB422B8C23C0BD6FEFEB66FA1375B0B8C772CEE1C7C72D6DDD5F5 +7702E88ED8BA354A889A171C1304106BB08012428B5A792F9C94B8C43B6F2090 +37CDB8793C95F2310222BFCC7E1A66AF164D524F49D54A206A2E31AFD481F751 +CB4981B6916D0C624657909761348FA49DFECB3E40C22B3768D1949126EED61F +6336803CE8329861202E2E44BDA2000286C2BD8E915CF155E27D22C53453FFF8 +46B15E1A6FB0B360BF3CEF320293A0CAE1F37A9C1123EC78B94999D8DAF0CC4C +A69F129B1206A0CD5CE5C4C3F701B335C2CE6372A8A2E6E07A5D95C10E8D1E1A +FFC85AB9D4D3E5A956E8116D3732001F444BBF29C59AD4BACA82D0BF6C143FCB +E9898A6596FB71747723DA5E1F3BDD041238FBF91DDABC81CA4FC9CBFF5DE5F4 +058710E5246B8469EC1B97965D2E809DAAEEEA9DA2DAFC83672989E2A798FDC3 +A731DC25D33BA638C90CFC36250AB855E25F873981C1C134DE9E40F45CFBE0AE +1656638D45537D94ABA65A99A66AECEC7854514DB7D2EF752B0265A0EA1E503F +125B18BE0E1F2537F4B98DCBAA19F820088AA18752C806B74FF9E65E3F2F66C6 +ABA7B44EC7729000A951C5D470B0FDDE2D774F82D34E766069C3D242AAFCE6ED +1E68D95FA3E18770A99040289DF75F4604CB036A67AE7D158D0A07FBBA7B64F6 +6B1F750191AC9F2291A2439DD398434D84F91C4D0ED3B457E53C7B5D8E730716 +6DB507367FC947C7DFF700504E7B5001FB683ED86B75D7326E16F40ECF8ED7E0 +76ED443BEC5337DC2A776776A0C266670378E9134EB595AE449D0D48F9BCAD81 +7147F6B3203DFD0A38227376F0696D0ADEC9BC7F06B66DFD8116FD51982019BB +F463F6BE6563D173085A1C2A777621801FFC3220F459C77BD1302C1F6BD834B3 +742FDB9BCFB1342931DDE4CF94CD2E9F7A443A67268232853803BF62913B5BD0 +0AD7F4AEF1BBBF89961BA4282D227B1969050802DBC9A788C00E1580C4FA9A71 +ACEA2700E5A71D327345FD65F329177BF2BC1CB7111C6B46ACC4F5795B0C9AA1 +34B39915FB16EF49BCC0F3D2DA4D33F7EDD1E5707B0FF5DAAC677D2DE279A7BF +D034EF78D146789A2D4BD929F59CD9F208236D6FD4895BCEB920A2316B520B28 +87EAC2F6889F9B53103BC5B959444884CA28D37738298600CACB58C5ABE97F0D +D49C2C684A46B04D628A28D519BF0917E1A691921A227403D4D0C219F33CD495 +E15C5720BB584D770343520D00C15BE696642AE43B035737E29C4356BEC12269 +5B3E6D14F37011DA04B724299159BB62AE708644099CD6EB298CA66D1C0DE25E +BB2D83615F3EE99542F0C6C82C9106F9E8284828353D5DBB4B525781F288E9EE +C208F9355958794D41EB1350FFB308094A68C09F2E2F8CBC77385B7337A4DB71 +A37149024FCDFD6DA887243F71F48101B70665F850BA7F733EF90407BBA8CF8C +52ECA8D93406BC12800CF57F1DC12B355A10483AE4ECE41F9EEA5840672423E2 +1D75F2306012063AF3CE75677BCAF8F048756C3D3170E256C2F863BD1E0B78E8 +6ABB9F135BD4F0EA2216B631A392B2A0064CF9166FC9A73EB7142440821029EC +A31BD024C4262BA37BFA3FC5527772604547E09EAD0B23B7CA97FF613B340347 +D7233CEE647221C363F0F534D934CD179DE2BEA2A508DFD1313BA51136C7944B +7253C1AFF379611C58D41EF51EF55297129294D9FC25F593E2092E83F4346A2C +2A5E7FD1AC5823E2FDA0222D4FB31B16CA235005530012EF7DF63A7E1AC6AD24 +0629EBA16DB9943399C88201C10DA43C158D5CEF40821F3C7474846DC44A2803 +321F258F5D553D03F5B171A722CBCE7AFD8FE2F4E29B0FCF35EBF0D5ACC1A7C1 +E25934498D044430F545111A7E371F7E3A521661A47B9D525D81350305653D33 +C35E4231BC182DB7C5E9E3FBFA93D6F29C6A714F2E8D7FF27518245F05B13FE7 +12D77D9677E551F80A65F0D058BAC7E0036BEB3DCB6425D19D9AE6347C0F008D +177F55FE1D89D4FE6ADD4CE00084B944E8F249B421D3D2778198A5AE996DCFE4 +F6BDAD4D1581BC25BCC621C07DA2C8027DBD0211E975F80A0FC73D42C1FA335F +96573E9C69F023200B0FD6CE61797A88DCAE042B4C82CB3CF74309A392DEB8CF +0054009E777DF45B649ABD9E549E61D66439A66FDE06CAA712EAE20EA2233E05 +D4BFC80600F8E1C4EA899874CD019D4E514CF8945E022B3F0288F7C89BD9B32B +F683AA7BE2EDFF16C851A82CA15DC2E9A9FCC3297FFF9117522BD9741201BA93 +F471535EED70599310B05569A4241755A25D080F99F1704321708C6A4AEB60D0 +70AACAEF1675C67086021CCC3AD12979280F8999CCA21DD006462C83B88E98C9 +C785171F08636A58004A2609F4B6E58719215DF7EEABE2E9E2A33D7E38E4036A +A48FB0EE221C10668B482E9422BF3753ADB09FEAE829E35FC8004958C576AE86 +FAF18B1BC2B15E15955661E262D6D7190744DB9105151F2DF569DF2FA2153377 +0D5B1DC947C08EB11951D5CBFB941F1892F2AD72AB54333468C0B5967A1BE22D +2CF668465ED282FD7B3826D0BFCBE569D543EA0BC146865AB50FBE4A4800E8E3 +3E86A443F3D786BDE8FB2FB0313D8623E7895E1FE1EF78835444269AC3B55AC3 +352D7946E6032A32A86DE3F7E315AA09DB7D677EAB2B327C9A63F8FE89603707 +EFE8704ADB66CA6FAF412EB99AFE47C73CCFE17A6C6CD994E542EA044FD48A8C +84D4EA0BC1CE5C2F997232869F0F2A3D206DCB6DAFA49ACCEDDECBC380C73592 +FD44AFBEE9392DC921CC31E8F9181AE15DCFDAD134346E25492BAB25AD450EF4 +BA0FC540E9A26744147BDD9D187B6C1CE6768086894C05017B5A70629C3F24E4 +CADB7D762E9B4168F5340D10DA9EA293889BE0590FB91EFBFE73D51348E505B9 +37A517756A19D1C720566407306BD1A97144C6FB8A9F50386D09321399C0A8B7 +BA893A54C2F514984ED7D95F3F555862A60A6A02881EECF007A59FD8BC7A05F6 +55064C5FE3EF5BA371413125EB92025F144AF939965FF75A59D9D2E154261A5A +2FA9BA49716889B4202149988B1BF84F64AFE278E079C06F6E177AD07011A258 +FEF05A860299FDCA8AF7D6264C4881601C1E30B29A82CFC7C6D4AAB7883210EC +2E9C5E1A1F4340CF1419E015B09B5F7E26024B40383F710C534D721C74C2D5F2 +FCBE7B48928C31D2086D769646222FC2C382C72404BB3C5461D55004B27180E8 +E82BD7C3CC78C6F220798058F15776288493570D177E250005449A6E0310957E +F45B7D859026A071FFFFEA238915639A98B5C79FB693C37F43E4838FA8E4A8C9 +7F5EDE1DC63014DC81F7620C8A2119E8E5828B8D175FF91B87FE1F68DC817E91 +FF01989160665315034669B45A59BFC2F6E17D151476058FC8B4F0E2E2018ABA +053085E4B95E8674E9738AE36295FC923D8F058ECA7467736609B738806DA807 +847D2F92D02E0597BBB24B0F28D6BA9D281B0635079662ACDE0293BBB8698B58 +A80F23EAA8BFC44262F260D932223131B47F3D94218CFB21DAC1908B6A31AC7E +FAABBC90A3C3C3394D86ADF67D227D8CEE1876B2E343923017B1703635D3AE9E +9DB6DC06E52745795255065A5321D22CDC5EC2B2B9F824C23E409B8ECC6B4490 +3D0EA2CC23BCB3CA8A60958541695F97F2D940223BA42C3B49844B628225ADCA +6930D5783B6FA6EC5E472BA243C0FFA71AA738825EE334975A364548853F824F +9D5149EB346E8F2D074F4715B29764F114AC0DD2B777C170AF827B157D02C2CF +199D61FB4566D74CF4FC7B31CF5D3C2353117E7B39233E4B84B98C4535FFAD79 +8FE8593B490B484EC730B9CA552A45388103E8AAFE7E62A86C8B24A642C8BAD3 +C9919FA9619CB718AACCCB0F07945D336BA8CC7478DE959DD738441DEC374E9F +79D2B328211873D480E5CD0ACD94AE8F57FF0E0E3B235FEB865F680A0C817A16 +7D795B8ED5CD3B5EBCBCF748DB6BC52BEFF719714E9B93C5A0800E380542DB76 +4B12A2580D76CF3996B61FCE2C5C34D06487FF1595628E977D3EBC395C6BEE24 +5EFF7388468EE52154F1030AE786DFAE691564EFDD81BF390B9DDCF1F84BC16F +DB2E2BC4ECF193352B3C6B4BE06025BC43D0A97856D66661B80C460FA48BCB8A +F7E7BE633E1CC52EDE7EF01258A3693D8746574B0AEC82A2618856B0B5CA131E +B6D624ACE129E935D8C3674715D542AF4F0084B0D7C993E2B0691BB1FEFBB735 +0C0802658BF289C32EFD28BA582941B6552ABD8E03A4651AAA797475898BF848 +01BE7FEDF3CCBD26C235BC02C6F907DBD964ADDFCD1A5B0FCD45FBCD6AA6D940 +6B955CD5DCE4CFED6DE9AED7019A44EEEE1D64771F934A56C18BD5714E1E6CE8 +A39CA252042D8174B1CC1A93810BE59DD9F203A7D9075FB74FDB5CAD7B12C1D6 +1475E3C78D29D96D84030F5175074C436415A1E6AD9FA26E4C3F9C9F318AEA82 +E98B6B507FE1FCEB57E57FA712DC259C43A1121685948BFE52398DEB4E472CFF +C09DC6C20B0D6415BBD93B3F5FA82C03B7F3E7268F9C1CD8F8A7214FD78AC592 +8391A6FB967ABD42A63ADA78B700FCFC4817C4ACE54D8EE4FEB20490B5667469 +3B105470A08E956A71389CAFBF2E96AB9D445AAC58F5597990B0FB65A8306355 +37921A387625F7BF046E9D4D11A18F6FF8E664FC1326E9AD1E4E7696D17A4AE3 +F2767EEF4968983FB8DFD7F731D2065593488D21D2CE61DD0F106E0CA36C7616 +376464D5847B3CAF77B257C6A3D6805C154EB81B614E9DE2D314E8664F3F2928 +7DBBBE43A95B071CF577FC1D4700514C0FA042ED08AA4FEEBCECC59B730A686A +75072DBE884EECB3B6056A56A7EFF016290E52CD4E6926D0E631D454AA21CDB1 +9B355ADD5AF08D01F58A0EBF61D137CA9DEEDD270DB62FE952B457D65AE2A9F7 +70BD2AFCAF5F02F24B3B1AB9A257137CE6AD6C8415BFFDD7EF318EDA8F16C04B +92F3BFFCE429051D035726DDBB9BE7560BD44294D6B5AB3D2D470563F9221728 +25327CE19D7E770536AFA9806E0AE707BAE02B2F1D86D102EFE83389CE027FF4 +432C4117D6C8D253C17B49871015CBA55BD6046119D7A956693B2F32A4DBD2C5 +7501EF1C8A277A4FD42347F07CDFD37EC54FA6AFB26742671D66EB4A746DBE28 +791B6E63C25111FEA59E1A0F239A2E041148E2773A491E01DB47D67611F40C4B +3C862975C0A379DA1D15EF87A840008E02305455E6E13847 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTI10 +%!PS-AdobeFont-1.1: CMTI10 1.00B +%%CreationDate: 1992 Feb 19 19:56:16 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 103 /g put +dup 105 /i put +dup 110 /n put +dup 114 /r put +dup 115 /s put +dup 116 /t put +readonly def +/FontBBox{-163 -250 1146 969}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F +21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 +06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF +55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 +B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 +0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 +1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 +7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A +7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 +356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B +19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 +C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F +244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B +AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 +5C43C8942435D0AAA3D9055FF808F2C3C887A3C469BBD98F026D0A59E26BA9F9 +C2144CFE49A9AD892D4D31764F0AE3A10644AE3966B0A790684B14D11FA49785 +EC5565D2B2E584CBFD85125F3FAC133338DE35361943DCE9AF05FCF2840CE512 +998D42CBEC52B57B79DD63F00985881E8463396ADA47189A94DDF951A78866F0 +B8A3D9197E39335277EF2294308DA70065D910943A34F7D5F2090FB4AA42ED70 +CBA469A9F64B95A6FBA4BC89DBC93765E3AE4723162DF3F9D6BDE77DD5870ADE +C8900D6346957B84C3CE88A8F9A12D46B8FCA50DF4433B0B8AED6A63B3DA102B +6DF94E62408E24154BAAC66B2B249C695BC0FA37A28699D9C0F3EE94AA32E3C5 +8F8D7F803B5D25014D43A353D719B14B247A87898A960DF68C0C0BAF70C83917 +6E9F7B3ACC64DBAEF3FDCD3A80C0AB907EE342E543D607556CBE5A9089B86D1D +E768F27D74A613F3ABF883222A8596B542EBF54E9DCE327B5682AEE5F6BCC38A +2A052EC4018AE3189DC1963BA39ACDED8F0C60C83F8873FBBF0302010956C520 +A7F3F8ECD0F177EDF5F4D5522C5984A3678FF32EEEB570B69C142AB89467641F +917155D646DAF3352E27BF2AA0746E062E48532256AF364EFC0F0AAE376F3017 +C712E89991FE883E0F1E1B613606E9AF74B88F5F6DA73D0D404213E34649F769 +0FD57EE53BA3AB1BE898A36A6C69C105794080673F792207DCCC4A2B4C286FA8 +0312B33A9868E0363A5F747EB5B1BD8C74C4F7409F719383A76416713D1C1CD5 +B6FEE2AC58A9F7C7BC2AB5BDFE432FFFD415BC5E2C87281D5AFB7F305BFB233F +C94F2976074ADCA686329630F76FE55103638B3E6789D16715124F74E738F65F +2C20A1BAA10DE8D7999BD71C25D9617996ABAC8D9D236DDFE3EC5BD58C0E23B5 +1718F4ED8FB93B5755B14432B34FBD200C85A27A8D57CA278EE5F2011424ADC2 +5EA98120F3BD3E9A5417343DE3CEAB46CD06753B4DC9748A63A1F81778E50ADD +4D11D2674990DDBD0FA549B493D2B14A328ED349A294743BBDAA591900502401 +B2EBAB6D10E6DDC915875482CEF1C8D380396CB0C9BADAA9E16AE65B90E451E4 +31164B2EF7D6FE6B01D3F51FD511FF8B0B473A15D1FA6A3F93AAB6693F514FEC +CD1DC7E680D2A4DC1F68FDC28DAF728260F61351AC7B0A94B0E41FBE9C0656A9 +74DFA32C245062C413EDB11F347A4FB0191947A7822960D1D433551BBD9B80B2 +4C455F4BD466FBEAA5172A9D6BE51BFDC5A00EB941A239DE2FA934B449F57F4D +B5E8937C4F33FB22BF6D75E896E374F6777083AE87F0AD0B589BCB37B37C77B9 +DF15CB0E26A3A6A30B38B3542CFE21E1D03B98F68FB4991823714A78D1D6C723 +02BABF34BD67A073E70AFC66CC845FF87225510DCD5173F68808C3FF59FA8AE3 +B6379AB7338F1252EA8DECF059B5348BD217A31A5EB825A92DFBC3CBC7B6C092 +08821077F26B161219EC0A31B47079DC1C596A059645E62A8407D40088F7CABE +A0E295F663A614767FAEB2DC4A54ED4DB9123B5A4038F958302D17CA2122273C +6874C6B8A0680EB2143DAA63658748D8D6D18FEA07FD9E588DE6B14E329386C8 +A1E6E605044902C17AD8C88AA4B887489AA5817944AA6061CF7AD4177AB24BD8 +D093EE6E729CC62B89B0EBAF8EF9F1E2EA2605151E3F6FFBF26FFEEA24071ADF +189E34D48D53FF6215F564954D7AECCA4BF90490DF52925650B794F41364DC35 +7E8FBC7318444A3BF37B5712AABF22D65B540EBB1D2558F1CFC742383D7A0235 +290164F4013B700C9BC36E79BFF016BD37CDC719172B808AB2E6635D6397433F +96B5419A16849E79C090293F392F325F8621595D48A3945A6EB8822FDDB24300 +9C90929A3FEC02EF47788E17C790828418D8113197B771BA8DAA9AF0FBF2E181 +B45318FF2415743DEF5FA61ED8BC3187B1BE5EE1E3A3C57363BE4D70B2A4443C +2551167A58FD9A6D4748145E7E2BAD9CB5B3862C922A2EFEDB9AFAFA7686C566 +76976BAD66FD5415E432C1E009EB49D7BF70588D598E37C6E35A47363821A9E8 +30CD209E39F5ACFA9B7F61213D7727799D110C0C007E43638DD294534D544B58 +CDDF225AFF4EDD16C38B00B4C7D42A726B855CE25217272EDF4AABC97E17BF2F +2AD297530683FDCB7FD992200028CB6B8AC77BFDD48DE6F571716DC90CD26169 +F97FB7442E07E31B71F6A20FBC47797F656E598B7F9CB395CC8417A3928C78C8 +D07AB0CFB33225AD19D886B72C9241B46E3E2F7336B4E463EB616C7A37907A56 +6FAA23BB33A5A0CC604ECC307CA975E3EFEDAB1CFA5062D54602F283272DE03E +6E9553F57CB7AA46306644B260B668BB80BCE0A4AEAD96E351A3588192579DF9 +EFE673F35B8B760FCE15FCA79A8DF1B0DDFE6F909A69B1F66517E5993D160D03 +38F36CDB4A671A4823A1BFD6F1691E09C97946A628144B376B7BC4DB13A214D5 +0C710605C5A51E2959A37E3B458BFCBD8586F9DF414E64EACE1FD2E47D5AB25F +70927E04146395F6B4F5B68B6852B9D60C8962F9E0C5E4B6954AEA6970FEFC72 +7B4B324BF21A2CB2ABD997CC48B687E529F622AF45E72557157125FC4D1C58D8 +F2E84AB96B15CBC25FDFC63D30CA8679EB0821975FD333DDC43A7B80ED69ABDB +CE8F667B2F234A12481CDDD18D6E5B468D5A5B87655D8AD2EDB8BCB88FA87E30 +A033421CB1AC2AA7C0FD0DEC85133E760A7178E7C8DC5FD394541B1796E6697B +E9C692407D0098F2259FA18D136A3E5D4124EE15B2A396D0E24E1C3790FCA795 +FE794744F4349CDF895ACFFA5A4021D582006F2BD77FC69F81640507F7553CC5 +F5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMCSC10 +%!PS-AdobeFont-1.1: CMCSC10 1.0 +%%CreationDate: 1991 Aug 18 17:46:49 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMCSC10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMCSC10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 97 /a put +dup 99 /c put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 105 /i put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 115 /s put +dup 117 /u put +dup 120 /x put +readonly def +/FontBBox{14 -250 1077 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 +900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA +87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 +076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 +9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A +FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD +B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 +CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 +40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D +C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B +7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 +FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC +81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D +5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 +CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6877C1B3D2 +24030F377820DA58F4B95CFE645109F3F1B80DB5FACFD7D05AE2909EEFCF95AD +9CB286C8B6C075CA2267C101B736139863186C193E31085E7C9FD88EF8BBECE3 +933542C85309013325B4BBFE9A5B606780C8580ABDA2F5D0064EBFC23939B307 +08568C3B7F5F053BF367DEBA349FABB9F760C44D100BDEEFBB01F27BFC61FCD3 +64512116F2751A1B95D2439E266074DB3B9FC76ED319B2851588B1F38F46C8FE +040793C860F05E26700B72A766D0BF3F6F2EDEE06A26866BF0207CEF2841BCD2 +84F5873A147D5BAD18FD74DF7B77B8CF1913AD882DC1F4A94020B2A8A73237BB +222E6B78BD1C4C0975B9B6683B5DFBFA693970DD53FB5D5CA5805B7728C11D6F +92E6293F82E628C9FDD901010DEC199055B6682D6B2A688E3EE8759F7E592F54 +43E63699F1D60CD915365B85B8713DC4EB3EC4D2860880035348966F004FBE18 +9299E1DD0D491A5D542D450C8945321BFB9E823E18D1F33178BECAADD34378BF +6FDE26691802F24E43CFA4ED1FB81C824F808A049085FA95CA518D9F4EE91D78 +26A8B8B461486419D598E7E341E9D43CED2402BF225B2C75CEE127D8B8633FC3 +6F4F69DBAF7134D4F3D669B35822FA701A441E5FBA3DC1F02A00B25C583EDB52 +4D4D488C6A810128777654B956C3CCE8FFB0D1985AE2A2735BA415941D1CAD5D +62D9DBBF01CC979B8E1509F5DDD3BA6E87B14879955F978209CB398825E40199 +2B1C7D2C55251F321BAC0764D40B80D7AE1B787E5690CB5907719044B2AC832C +C002C181088BA15AEFDA44D2305E6327358D1DC1D9B93AB1802FE9F24CF49739 +9863288D0195F5610441122648F5E38208E1AE5F01D1966DE10B8AAC02EF9F2E +27D2383BC6D5BF9DA8F9018BABA01B70755FCA281588B85BB705FB7016F6D7D6 +8607BD0739433B54DFB87614A76902A3C122F39A21E80CC1970C5A6932C6046A +771484EA9BD04CF0963E1D372B456C50625807B3557384F5368C520E757716F0 +16EF17F3A58F2F7EA42C9BFE2A64AE786F49213CC47B496B8F127696EDD017A2 +A07FD72357F4D847CE1EC8103EECDE35AA194F9CE466E733F66515749B3C36DB +6F7E83B31034687CE18CBD15342723FC21689731B45C72DA278994FF8C5824A0 +EFE9F8D734D75C3C263F9D4BEACDD86406567055B1A8A5EF73ACAB4A09255E39 +BE9AD89DBF4624E686541E2FF03742C99BE71E7CE3B4756A22CA4B0121E1FC6D +D62BB37F46B6EDA0AC3669802D1DF75B0F9F61976B2FA2DFB5AE2274CF08A000 +AB716CF047D7770A76B6577C75D806D878BC185C4117FD7BBE29E767E028633D +257C34395F8988DE13F0F9083823F028E05D16BAB6B3E9002F01AD5039CA62BD +07AE9C5FA71D6F234899382F90EBCC371C5501FE01E38646BC3C734C7E2C1AA2 +11355703BE46724DD85F5DB4051F65E48A3E8DA4CF8845BB4B3F39C47000E871 +AD2FB60C3161437D8C76A10377B98456BC205F3676D02132B174AC046658D059 +5E506F3C4178C400AD4E721AD613199FD1395413EC7AE6960F96849D6A26F695 +B78395941D62A7F7B6E25CD6824E78804A8CFA780E9919BA860C2951EB88DB5B +C2F9E9AF635BD2C95C7D6AD4BA85E4B85483EEA4EF1908E3D5451AF6EE9176C2 +BA3F1622024250AC2A1F8E66811EE9C1608FDE0E91287AFBEFB43800212C90C1 +6D2D8066C742EAC7D611CB9F0590AB2AA66C17340FC81E55C339FE83B68D060B +33A10B037B3370E351168E98E9DC4E8AB2B909879566CC28DD053B6EEB04A3EE +6016A02EBB0E8D0BDB7F0B1B3BEC8C559F48448AFBBFFF5E11051516E9CB5F45 +6F38CEADF429570FB2DEC6E13CFB2A59D5FFBF0A2396FE9F7B3A0836C76B06CF +9B9D99035BFF40EA918DC4A8CBF4576809F49DF330A9F742AB2FB385C9382076 +6FA8BB32BA81FA3E57E91BB6757C6E98047E9537A0595EC0F2A9BB2D3E093294 +023360099DC1D4EBE77960AB4E26211D1A75ADE1C764E5C2E80EC234F678159E +3E64331306FB3E2BE3AE0CFEED0FC3F583E875A98694742C3DEDC35CCD9D45B5 +D4200D69F93C5B730AF952EA0DCC88EE1F6D50B9477E249C6274EA0FD849B537 +BA497FBD6617943E7BE06CAF71A0F6B13CFFBB51AEF3E042F28BFCAD6CBA2DBA +CECBDB7BB399AF5D80487592A820F82A7255B46A0D7C739CCF16B7F60B709651 +0B91A26FF4854483DEF0336B7633C1E053BA889F4306F7398D85C3EBE21A5A41 +B7DB32141ACA892DDD4C0FE0C95328A70F53DD95940017CFA865D15FB0BB281A +13E2CF735AB238D278FE175EB8B72337218B5F66B62FFD912FCCD0E180AA69D4 +23701D46D44EC2E80D3C4275DC7B5848F50682394C4E67ED98A2E6B41C348263 +EABA9705AA74CD35EC6E1D9DD55634102C6633ED9117DD472DA7F41705DC5772 +72A3C2D8BF6B308567D07153BC750C8CE867E40355C3D50747B757E52F7575DF +9B5B913AF7FC3FDBEB317DA46DB498C7C044F83E46BAA00321A84DAE2DF14604 +12031AF813C994414F098824C30FC07E9B5307EFD8D01B56481BBD2EF648A69E +7507FED42C6605B09EA047F09DFA9BE15B59B93395DF192C0FB33F6F31F325E4 +DCC9A5DFAA157D1D5B4E5BF811F6F5B0FD1E69ED7EE1A6FBC2CE14D11D6FA699 +255370376844BFF3C2BE814A1FEDD0B0854647B9B193B4984394C8602820A17C +62704CEEC824C3C745BC615C54EE5DF86EBD79E874CC3522F8B8954C8E4A6FB4 +F715EE641A3D52C06574E8D7DCFCE83F3F8809D08A3C9C70C962D33F5B3D6128 +16EF2DCD4D6DCF0DD055AEA2293E10C1B7C2399C0DE4928F0A47E0BA652943B1 +004568BBA7CE62F12C7B58966BBF7B0327481DCCFC56218E7C4B9F0761063BA3 +BEA01AD1BC99DB3C1FE550DED79B243A7A554F2B1752F18FEE94120B708FE4DB +5948387091DF4198859CF49ECAC3AB49CE2E5F0451EA4EDF9BD49633C9826026 +BC9E7E1544A0318C545ED1C37C64176504D175B83CF974B4ACC39F5790E24B11 +85F01604144C0E694DB7206941933B60651A800DF182E19C3BF2862E72F25F2F +2D9BD71056559C0FE547D0C752640DD4DC6110A849CF9557FCB0643A1EE77855 +512015F57A80140FC06B8CDEABC5580B89F9F30A489696AEF2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI10 +%!PS-AdobeFont-1.1: CMMI10 1.100 +%%CreationDate: 1996 Jul 23 07:53:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-32 -250 1048 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 +990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E +6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB +DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 +59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 +D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF +8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 +6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 +1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE +03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 +95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 +74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 +3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 +47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 +AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 +42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 +40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 +B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 +9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD +0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE +E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C +7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37 +88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6 +DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1 +AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMMI12 +%!PS-AdobeFont-1.1: CMMI12 1.100 +%%CreationDate: 1996 Jul 27 08:57:55 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.100) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMMI12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMMI12 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 58 /period put +readonly def +/FontBBox{-30 -250 1026 750}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 +5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC +4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 +3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 +EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F +4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 +2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A +323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C +2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 +D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA +5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F +0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D +A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 +2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 +00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 +CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757 +99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA +C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D +5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295 +55B50047CC8911C98FE1A7BA6CDEA82D34476286E710776823690AD333DD3A49 +335002F4680DBE1C21174BF016B0DF799B01EB9D6988479A8334BBA2F8DC7146 +BC0DAE9DE3A6453B181808E68A89E0C02DAC6264D002B422EBC1CF14F65D9888 +15EE6D514D3457F7F3C6A3D17EE1DA076F73ECC392D349174DA9E4680F29CE10 +0157E42CA35F5DBFF56BFC3AA07E61A78DBE882C5AB388220C19750D3643E7C8 +23D6673027CE568A4ACCE1D12B1D9E5A43507F4AF9BC873237F65A6B95078DD2 +378007CF0F0DE7CCEF760E19D6D1D7B412EC5D4972 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 13 /circlecopyrt put +readonly def +/FontBBox{-29 -960 1116 775}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC5703711DA090312BA3FC00A08C453C609 +C627A8BFEF75B4DEFAF34B44B356A516B765AFCDD3F5475B1F928731D09D2170 +B97E40F12CCEDF4F6BB3756C4734F6E98D74B7E942A954B1BAAB83D4AD727FF6 +DF6DC50B2223BCB5568A73A112E4860AD490554E64E780073FF3399CB4688D33 +9E8829667CD6EAEF25E0C7D2D44F2BBFA40E999325F9561514844221B50BC8FC +4C7AD68CA7220D69125C2AF06849A3E068D18733276F0C0A6A2936D3C2C87CDE +59CD1AF148C44F85784A5DAD569F5FF53C061056C067CE29AEF1E3BD1FD8B0B8 +71A0A638CDAC6AEEDBD5337D4683C084BB60B1859E600F59CB4E19C5FC5C6327 +EC544A68134496A9BD0B87D83AF6FDA3CB62FBF0B54FACE1F0E6A2D84B467AFF +0F62DB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.1: CMTT10 1.00B +%%CreationDate: 1992 Apr 26 10:42:42 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT10 def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 53 /five put +dup 55 /seven put +dup 56 /eight put +dup 58 /colon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 89 /Y put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 125 /braceright put +dup 126 /asciitilde put +readonly def +/FontBBox{-4 -235 731 800}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 +38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF +D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 +EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 +A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 +F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 +4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA +6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E +A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B +E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F +1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 +452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF +8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 +5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA +DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 +BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 +741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 +E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 +E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 +D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE +C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA +726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 +CEBEF0C9440DC034DAD9C19FB27A350233112B0A339366B7373CE058456E0E1F +139936F6CC9B50441C2F5994977426AD7DC8C717E737F8C201EA55AD94908336 +FFE9568C0E6EF3202D8CD7B7A6CC203EC601F9A7E2A4395ABA3406503DECAC56 +B03219CEBD0E465EA0F635F26D984F5942E4FB186AB874F3E74CC2F2E378BD83 +57CD1B63C9DE9963587B7457D56024D95645ADE0D95DEA748A6ECC6809C2A7E8 +6A568F83BFB184B31349A771DD72ED3FFE8D16E3138EC49EC6D7524E611331C6 +DB2E16059C9A12512C7208E3B30F04273E20BAF41EF8C96BA4B17F31572BDD15 +3FB7D15CE31684D721083208D7698A31D07160927C9A7CF8B7EBE81A83C0BD46 +9CA06245FDA37F0F2DF7948A20D121660A73E079F4ABDD8F90367BDBBA323957 +062438FF3B28A3880380CDC76A055096D30FABA4AECAF238ABC2513F089A6C4D +67EA0050A34F5DBE5FE32D9E75E67F4C87AD8115DBFC00124DB4D3F4CB62CA02 +59BFE46E90DE9ED306D6CDC51005C233BD39F41B264E2892AD23E8F93C8C61A0 +B5C5CC1021411DAB515039DCAC06E1FAEFA259E6AB07135CBB345E90E2BD64AE +37B9A46934BEB383D3AB1787A2656FCCEA6467ECC2582807E7DED181C53829A7 +1818C3FB17567D81D1A833E0559798D06163781D7895C31B1D81CC439AD51CA0 +5E33E96253064B684F3261EF86AA8452B32E9C5907153BBD692BF8BD4AC45E3D +7161488C716CEFAA695877B03781F64840D49C9C1BCE9D5E759BF1812712F2EE +054A34F2153AD6C953E795B6F40AFAB115C5FCDD1864A85C1AEF5DAF40337068 +08730BA7AC580213881F8AF1F76FC830EC76BE4CE6E090A1F91618595AB6D1FB +A885D04A4E73C9C7A923D813275810DD2B2A3AB4FAE4BDA24FC170A4BCF46E05 +572529A19B09E5ADEAADD071EAC20C5DA884C7D414F5AC5206E87E53989B7378 +BADCEEC6FCDD4B4EA03EA994FDF6A80A2E232B1A007B7554471FC1DA24901896 +9CA84283A02FA1D9176026BC1529147F19D07521A4997B70258FFC03821EED0C +D44BC9C2E67C3CD9971954C58BF1775D61115B75E26AFCC3B7CE6E5ECB8CCDFB +640DE440334737D63F539385F83BBF603B631AB2F750DBAE707F5D008591A05E +9D532C165FA35B580D690138463047F77F10FD4FDC8F724367545C0F5B6AF978 +B6AFA49624EC2AEBCB2D19E9652CC920EEE40ACB479E99C7B615DD7300225276 +D45A24AA2A607E5C90C1835AA562597FBBD42465DB1AF4867E8A1A750F1E462E +D2615B3A9E2AE194DB25B21527307997F12B45F442817D221773CF53AB0063A0 +4B188C90FC3C03EE095014485F988D8663C0EC7E1C7B99FA1CC791DD44C7CECA +600806FE76707EB7D9355A1CF21C4325E2C83651A6FD8399C79CEE9816A4BB2F +FC454A4A800E96D4E964627ECB39A108D418DAA5B57E6C0A3F191BE83A4B4BC7 +48A4B83F4EA66B0E2F6AF0F99FBBC9BD5A53B06967B36222AC42F2F25664E39D +5BBB794C37EEF11E43949250AF8F207CAF47DC0E02E93F9B41C9C11BBD7146C0 +C8994D6927D054BBE65A85AB565027CC9581619D26BF75C397AA56BE2A8DE89C +7A0E4B8E05D6A74092C5625E59BA23F65F1404A17A9DC4843A08B58234AD7592 +7BD68D345385E2B005F2B983FFCEDCE78417C904E181F3B6CF8E5CF236F23611 +D9CBE545AA643C7D1B28EBFBD2E1171057A3C8FDB9D7DABF20558C7ADE8A6B3A +FF9878B26EDA16B0F9DA421281F849A44C76D117F4AB566FE241B0A6CCAFE2BB +9A6436322D1CC54CFB602C0466B70565F9A7F9370BDB1C70F0C33E529CC280F2 +3C8E23EB2C0D25829496B005E711F5BA8E4680EB3CDF115E4D0F89C4B5DE8842 +12CC80649077D5B844B61BF557D316A59513F58FECE657F2A7EF3B0D320E4C33 +B4877334EFC38A29352B0240EE736EDF805C434ACAA59F32204DE64B85CF3D65 +24F0AEACE2F703252AC9A3FCB2F628928CFAA788221C41B6AC639655E39188D7 +A8118CE6697A20F3FBDA3564355DA3DE10EDDDD22BFF4690630E99A77C663AF1 +5D38A0827E81D805507A1260ABA8374501A2CB4F07E2354B2DB7E77921B6DC57 +926415E85A35379E6A0016993926231AB1DE35178E16839574A97E50DE7C1179 +0946A61E65BE962E7AB2A584F8972A2E3CF319EE4C59B82DFF6CBFDCEE8004C6 +1B7BCD417103A82B34665045DAD49A228E9A3F63F1194B952B67F89C32E68814 +705CA69F88EDEF44916D40C22C16F58BEA7A0082D4A579B7562319750BB14BEF +0CFB256E9EA333F3AEBEDA8665E67809576D7F1892260E43C764963B70FEEBA4 +1EBAA29B62BC37AFC35AA6BF57E504ED00650B4EC61A82B6A26EE97D71FDA25E +1358E3BDE969F1B4D04009D55D1B19DB3C8BD1671280394A19D90893347C92D0 +E4D5EABBC0E5ECB168D32491C0CBA1379E12F1E6E160290115C60706AE8C3355 +A88DDB64EC5CC2FA7539E37CCF6941F66C3275273D38DE8C370034D89BB92D1A +B965CEE8D92E4BC4A2733E61B8C766EE4E8C5F5670DDA0CFBD8D2C76B1F9F174 +23B97C475C8B9CA7EF89A2BE521F8BC3B8C8B3AF782AF6B1EB86EEE7A64C4314 +F1E2801D117BF864C72F04BFBBA8D47535772CFBE2EE0F14D699AA33FA7D3EA2 +8AD0718637E0C3027DA0B4EA7F3CB852811E620836A18C70283DC59D90F28CD1 +C6A8668A33304BA0B01C7AEAAC07DF77EF7D21A60CED0347A0C763572CC62DB8 +6F471ECC67B78D065762D99B540F2B45BDE96D18DD1F21B52EF54C3FA1F59C08 +E919E78EFF5EA634394A90131E66165B2F5657D4650B7B716CEC85F70EF33260 +72789B321F587D277D458B6EED9010B8C29B8FD82BEB1990A0C7EAF5A763FDF0 +F3AF986BDBCB86834412CA0929D98AB3FF21D401E9A6E816587F4F98BBBF78A5 +95DFE08D14A7B4B922A49AF62B6F1852F01A593975A06878D34A3925F1650CFF +A8232E51F57565371E0D28303F6240D95D3D948C0A2E27DC60EC9159502709E0 +CEAFE520F27409FE135DE680EB730F3F558F36079EB4189E4750B46154AC9B70 +13CA2182E44A20F4CFD8FB7F8E2FB368233040997C0E5659DE1E0619EF05CBDC +1D2363243BD573BA0A80BCADA2DEEFAE08A83CFADEBEE198C34F76ABE83FA5C2 +F05C1B86A1E1171071975C56CB4C7C0EA35D8449F6D2948F38DE52E67E136311 +51D137A1A58C1098336E57B1FC0A17067CD6689206E12E3AFC15E3577C10CC6A +82D177CB016609881AB665B0B5F6A1A3A9488F3C01E834D91B38DD6BF1B2B044 +837ECA3D07B8B512B4394E28B24B7477D710C8B0CEBB46F703EE77D5E56BEFDD +1F19BB594C69802B39DB67169EC082340A20EC63382EA62A93310E58C201ED68 +D805355BA00FB8695160EC7CD16F3208E69C32BD6A0A965D0EBF2C8F4D54B096 +A82C5571064EED0F461F5A6A88F1A81A30CC9F9C8FC6CB464EB348261A5483EE +1CF21254D894FBED7C83867CA3868DD97A273411FF8BC1DE955FA12BCD72C16B +B5C7F36967FC770FC35C8B8E8C91C2045B1EABCDB0ADFE148E173503195BA1B2 +435323775EC6E37099C6ED935DD7E3737AD6F112D9890019F9B949C6B20185BA +75E892A5481CC5F8F63E0ED8ADA4E501B451F6E491FB7326539C369A3A0790F0 +2F32ED0E882AF2D05F786E2F65531DCE206DFDFE1A477C71A97CDA763E33F864 +78CF67C33B0FC431BD601225ED92B2B986832A94362A9AB4D49F3FA46A82DC3A +58EFEE09DE84EC7B7246160B867A8507A6BB985261A20F4EDD2D764429084294 +C185B5EDF9F60C4C15BB718C2732AD751549006A5B359C03C15CC605591700A2 +603B101F6A6D1F9BE767D7BB0C1454BF78274CD777525C2966A4C396A3598838 +D0C417953CC8B46A560DD721B2938E8FE23ED056DDCD5DC371983BBDDFC76DA7 +FD598F62B0433936305BC861EA69A4E32B417AB2E9049ABCC46C4345F9669741 +8A0357D30D35D3EBD33CD11D021F5BEDDEC8E62ABC7F356E1C6FD7E1AE402AB5 +C0D624F0E5CBA67779F2460E2808F3ACB78164D8C1F23058C7F3E364ACA8BB30 +49F58FE6DA46AD4241D62EDC34099D29DBE9CBC13907D51374F757C907AC9D3E +113B7DBFF94040600E03D24728D49FBC5E5BFEB7F179C27EA0D6CE7197701703 +44B7A2B3ABAE0EED765B9C57E28612316B9B6D56CEBAECC05D478AB41C685641 +D12AE8A5AF427FA4E4C75E0221B0E2271F3A49BE14C3B97E36E80D8A77D45BEC +C09D87DEB41CC5C1112410901ADA51B2F0852C5FF9CBADB47946B3DED2B6C3BD +264BAF27319ED478EB6A3146C0E50E186FD80E7858675481F9DF4A4BC5015AE3 +4E05A1BECAD22851660E20507E7D600AB1CE3C1AA48BFC5F050ECF2AE550856E +4B99C1D665A6A7FA28A9C329073A478EE162499032FB51E4B3D5830EDAF10623 +DD8D478FA68B06420C29F484BB8DE89763AA12B685462B56D6945401BD0AD7ED +0590DF4EACB677982F261448D1D35C72A1BD8D2FD85393CF57E33AACAB30A809 +B092DF30CA7F7E7B80E423009DE411182E63A73D6D14BD0E47CF571E5440FF1A +D8AEA199831A918E485EF589A422BB7A4F6A2CF5EAFC028277F28016693DD955 +D0B2B171C1803C7FF2BEBFB96DF72A4256F40CA88A27B7C174826DF26BE0E9F4 +52742FB8ED72D10EBC3378C3D4F75DD787684AAC74055930E53AA52DB9212C27 +514134DABBD2C488B047460AC2E9E3468671A716D790EDCBCA4158B48D590D69 +6852E057D4CA5116BC532420BC32950BA2900C8E641D63951163C34CC89C644C +54AD91CDC59660B4AAF0700AC478222387F3DC5E249C62E4433D3C6DC997EEF9 +45784FF75384D73CA044F7A6B1ECC5F1202C2C7DBE5DD4ACD5E8D7CF5A057D58 +0BAD218558F76ECC99251B11D2FB92487FD6D7A3AA8F16FBF489A046487C8001 +64A8FD9C2D0373BB751188335332516C2F999BBED75DC6AD90CE3971706180F9 +55D8D457BF68CAE5F0BCF71EDB20B02A5A2EC92CAD3B971E9F5854BC5ACD0B5F +DE882EB372814DA4E91EFC31FD0DA662AAAA1A69EED664ABB5E418A19A459625 +E12E85E52FCD8ACE314947162767E89D9F150BAB26CF80123938D8CDD901CC42 +BC72035A3A5EC261111A576106798BCE708FCC8EE214F2946813D955535B65C7 +FF875911B2242E7042AB34CC8A722637D8F324C6FDDB25D9DB2FD2C666244F39 +74541C5C716DCB61CAD8423C8B3402D6C6E003200A4883C213E8580734F41451 +18ECB1AF8FF6505FE28D5DB6BC742BFF13C229813196277DD6499B9D0313EA3C +2F44DD9CDA19E20898D6B74A93FABC51BFDD49B5F4998A273C31468BB89BE757 +BDAE0DA6BD022AAA2F0584C916F7C837F0E0883F6B94823180F9FF55EDE706D1 +21CDCC806D00BA61D4A4AE33029B4F640E9D8226B8BC0670C5E6DF2EB062DE71 +2C57FFDD35CF8502B07A52B52D6D14886A010B5567185B790207D5214ECAFC0A +0A55803E08C9BA4B8D002C7310D22F256B8232DE47B30A131720AC4870E4B85B +6F56F74FC851E5709E914E6E46793748CB758DEBF3ADB83DE06EDD7EE36C7A21 +01A5355221898484015CEF9F9EF6F66803DA073C38CB4406BB738F57D1AA4E8B +6002E213E26A1F3206E8B10B7AF2FB5CDFA840891CD12C816E7EB41D1A7EF62C +D92D51C085EDA95874333A1ED73F63386D5A9AF817F7E94DC3BC489A36730800 +8DADACACB5CB2749D8E5F8389F93C1B596242C2B9317E26533414367AE8739FB +3C7097058371BFA929594E972CD18837C892DCDDB4384DD2133622BD0E48B1F4 +3426A7EC61CF550A6CE1BF747B7FD53DDFC95CBC5F50112B97CFEC1406816763 +B2321D3B3A9168FAA4D888BD4CEEF539B4DE1810F77C0201FD5151270D8FA365 +6D58734CDEFB41A6F0F26BCB78F83A189A91B7982F5C16973E407A50BFEE424B +AF4F1956EB06FD15BDED6C6A10F7CDEE426FDFA4B03D15BFB1CBB5919EF8DCF3 +FD3D7CA45C2DD173060FCC4AD5EAF86B1966A449B2BD255759B16D0BBDC3EB32 +9B0A9C7CA05D6D5232BB0441D182E52895FB7BFAEA92FA1DB585C78A8EAF1DD0 +13AE43CFBB182EA0ABFAD44FF4EFA5D3BFFB53945A7D36AB480645046F8A032B +12DD38DAE64C6A6B628BEFE7E3A60FE551E7AB07A65F3C57D4BFCE9A8B5BF8AA +F754FEA7EB86867029836D9EB89E75E154E34814E86036E279DE57BD2DB024F9 +EAE8E0DB7A36D6E01484AE6A42560189A24269CFC2EFFE3FAD0F200411D75591 +52F7FEECAF445BB88C3989B0E095C6C50A74F66221A16D990C5EABE9C2E979C9 +7A71EF59C049DAA808A09955BB8E5D3F5A266F552A9C97FBB969F87348A87CE0 +79BF91312198EC39246CFB3F30EE757AFE025B54C5880A6DCB85F67A36DE92B0 +8791F5955BEEBA9EAA842005D2A1078016D7ABE4E350553A2777E050E769A7EB +2E91FDB7BA1D89306D0D0CB2089DC7CB2E6E8587E71A96B8DA4DD6281E20C1B1 +5F09FA228F6B99518815C0CD67795991006DF4EC59C62F083F11513434C0B469 +0F899EE4DE7481E18EDD0FD4808F0E29179EDCE6A85A87081F060AB738A0B834 +CDC1F889127395EBC582D8EB68391D779D4F25AD0E38945D53A836733F9B4B6C +8874506F34DA3F1BE2999FDCF0D830A01CA0511605EBBA9F5002B2F0065ECC89 +9231086688B187E0742C2745CF291313FE6C95B2A8F09F38686B9CD8F15A3BD9 +683139DCA0CB799A8BBD4DEC071D17119B80C1B15D9AA564187F46DB9DC5C885 +05D4CF7593FEED08AE35852F6F233B8A3888E1029F5F60E39891A7CA92196429 +645CC8545C24A0EF4B71F86266F1C03D578D66662C560B54F219052433C99E20 +C7476D5BB198568B6282908A6B972589FD9DF13B291FAA6BF80AA07EBAE0DADB +2A5C290163EE73C4F159DB4465797447517183D3016560167789B3FB8DDF3680 +0AD0D46B59B05BD0F8E291A970F856C9797AFE19FE207F124D65A987E6BAA0C3 +9824D499C3A9E0EBFCED03B7E8AC0EEB7EC4B26487A864E8514F91A4B993BF0A +D2DBAE348926515E92CAAB6950B867701101DA64B59DA1246441399AD08E8926 +D49440109403612C41427CB4C3450CA80EB07D8674AD84F7899AB32A18C3351A +1645ADBCE41C2B7BF5CFB9376F38F865FB980B94C042AF0D1D8476FC567E7114 +CB300784A257F39D85CC8EA614EA0C48AD378BF4DF1A2767E6842234389AB724 +60AB73BC51F84542B59A5DB53B664D181AC5A1A5CFF2F3971CD910F5E5A5CD38 +D09CEC52616232E8E20C4255EBCAAEF1F9192F10EBFB34AB54C8D5B8D36B579A +5421CBAE787A0655FFACF05AD8E8E8F689B36064F058BBB26D0E6454C703B39C +F795FECBA78C88842B44842049E90883A88039633D876ABFE54202F35BD9F9D3 +70A3E0C31AA08CF8A8966D1FCADCB91EBC5FDC24ECC9CAB104828A931F338C4E +AE87AE252D0F3403E14600B4FA5CD4CEE37DF8C7A901444F70E3EEBB2C4137C6 +9E3EC4FB00D1313C6EC1C2BC5380F3434CF5F2635D424DA21E6316EA75FBA5CF +7EC2CE9631201BEDF7D7982D476ACCABBC5A452B0C1C76A00B1B6AD23001C1A3 +C494E6B82B98EED261F19255CAB52A09448FDE4E523E89F2B2773863EFDBF526 +F6415FD6DF91BCFC3D93E95EBC6A53D3AB8EED7563939DFD84BF364798E656AE +FF4D41430D9FCE65BD2F85125E5E42C1193D0235108E6312C7B97C1FEB7FCD6A +3D79F70BE07093FDE9DC099B282F3B7F2A41C67FE72E86EC7818DD66BCE93E46 +DD9AEB93A25FB47AC96DEEAFD80BBC7114DA109FCAE205B1D08A3AD8641A400F +F2B471D677402C2B3890EA01F971C511FB4DF6F5AF9C68FA87E44977072A29CD +4257AB3F7EC5B6804C20D4B127F02832FDD5666AC4FDD2C0005649CC6E4F914A +9196BE5AC7D85D4767796CB01542EFDFBFD1E51C9C415371E4A5F3D68BE2536F +F8EDBAE2521FCFC34A4274497638D4B9B39C14CD6E31C95F32A2CDC9F78917F7 +0C004ABA38A32EFF4DA64623A454C9755A43047355D0F187A779275B00FE5764 +30E1208D1E12CF6D908D84758F236BA6185333B56AFCB2C1B4677A7B6642D4FE +E229F34ECAC2C9DE021B051C5E7D6DECF456D161EF9E3888C38E7F477CDEFC01 +97920D696B2722340A5951953B2BDDF103C6D0C690CD04445F241CD531C81838 +ECA1A02C4ED91032106D142AA4B899ACBB21177D905B42D04A280C0B61A0F8CD +B510DFC46E922E8FEFFF31EE58AC1BE7AF1C70D2BF11727FF8C66D628695067E +E6EABBA97AA5A75F955FD9E9A1B21E71A8078418766FC4AF8431B4E7C674A6F8 +4E82447B81F15D6703074BE8A13BF13399722CA91E136A552E9764333F41FD8E +2DABA04817F8DE361C2E7BC23E9A963DECE999A6CBBEC7DE08652A8888AA1137 +EE0A0E4032A4B400C9A2488A55D8E25166A8E9805CC80E7D6C2D1E7C071C2E9B +F2E652536A4591576D99BF1DD118244BA09A8255CEBBD18FEE5C0175D4177524 +9309626DE05FF0144BE9F2EB05FB51CE924EDC4A5C6376C758A7138BEFAF9BAD +C89BC9834A8DF3790256119864AE0652E92FDAAE5A132557910C307C8C0C3FDE +EE3E0C17D32CB28B6A21B8DC6ED6525F8D25EE0270704828DB9006F514EFB75D +0671DD3B138DCFB01156B43D5B775B78AA95CF109628F5FC501927741031E60A +D46466203CFA84D9A8EF065C43101E8FE1BA60E82E01A9CA67D7329B93A11260 +4CE84119FA0CD0E41EA3B645CA3F06059E7895526876F7C2110264C84B7681ED +0784F82E6A160B7D3A6C520E430452B18DE47224A861D1CD872433844D7BEC16 +514AA67319F17771D796C88C2A928514D4907A1E58FBC561EE444292AB0A4759 +F809BE67A4EA7F152BA841FF3C838B9725F8F89C5EF28802C586A542131F9B93 +DF668AF74A34287FD1914BCCC8B3D2C698A8109D21BFAF245274BA33AA71D9C8 +531695BB46EA91917C40FF37F46A2A69D0AD619CF7EAE936FA1EF33CB85FFF35 +A9E78CEA2C74AC6148E612E880A58DD4FE573D6A10A0EEECA7E5DFC219E89E0D +90843757F05759785D04F6F3E7DA269888170A90488097B5A3DD1B61CF3B618D +05C68B2940DE15065AF933A83BB9145629BB3759B49F7C86D70E5282B52D3CC0 +331FE4C8208DA7005C2E44E683E24FD0188655DA87D01C8313FB35AC1EE14448 +B1681BD5ED81F7CA640248552B7A3EFB65ACA6DC132D09BE6B608E439A9DD0AB +ADF752BAA226A75986D226714DA5F1AD47B8BEAC12E7E32A0992CDC54CC054B5 +4287D8531E25C390CD8293776D82149E60597DAE8B2E6D332D04AD39A8786E38 +6045D1417B3E88BE4467A0BBB146C04632E5C0B7693B0BFA5512101462605402 +E089EEAEBA41666BA74FC026C200A6DCDC7781DD9A3D184C71CABDCF53CDDDBB +84A4926F982FA96E3A14FC3ECDAD8D9C1851CADE2BB68F88E736B4F6231366E2 +D31364FF60950EE333B36A0F02A35A355B4271C4A6B067C979E440BFF3FC69FB +CE0998138FBE60ACB07A24261DC334C900BB422328D3EEB99B8D01FBEED832D0 +2D44948433DE5A22F0701447E03E7E6280273B87BC477C8C90AABA2883C2155E +F130A10ABB57C94E43AEE5D9D65DA7D816C3289A2FC470215F4F9C42699E52E4 +D3FAD53FE861435C255B887D7AA50176BD2E93418BD0D53BB0F86D267207282C +41E2AD75BF872A2FA4C39A9DF160244E592FD344BDB3BA471DD7A8EF658605D5 +51223D007026DB71F97D9AC1AB7955015C9A4C4317E9F9E219B77E2C46F97741 +78ADE503EFEAD4243473D329B84C60BB96ED07D171C49D2801762C40EA7BD7C3 +B216A1401727CB6E7E7233B23CFCDE2C3D62462FF15AB69568A0BAA15E10FC2C +C33EC5E22A4FFE258E73B59D28BE7AC90A9DE63D329353B165087D8B58194815 +9BD0A3A335E7DAC0C49B880C7D85A242D5D562F2AB1087E1A46DD94F895B074B +F632CC49C3765B417D6CA0DC7A355C672EA4F91DFB751B468FED48090BEB0232 +0959CE3E6E40C197DF33C03DE81999F0435D46E6225EAD2226438A0E19458BE5 +579699FBEA9BE41F3D997DC4CFF1C7591289617BC2F2AA7B3A895F025E2137EF +B9FA6565C04E516228C59DE70340C275670404E519409BC8BAA33B2802992DA3 +A721FE0B5717181621A0161811DEAB802897A06B807B2035297A7A419D3D0998 +B30D68F6B4D586FF370A0EDED183A45ECF4C517B786A67E15FFE4B6A83CA0C8B +6F9A740281F668009D1918BB427D1B34C7355EC2D4833778CF284A21A753EEED +664A4F84173CEA11870081F1628850457EB8AD54823C01DF2D15A1CF4B33E0A7 +4B3F3310011E6625CBBBB8E775A650F0E0631F8897988BC2EFEECB8876B48DAB +156CFD14BBD7BDF14489A025703DACEE33A25C9D9E552FC10EB121BD990A093A +D9BDB0334A8396E6B58E9C9285F88FB9E4E990E347F532AF0827D9F0970FCC93 +6D17A43BF518CDE57DDDC9FA18381304AC09C7E255F76D26447A1217C70258DE +6D3078E3128216FFC5EC01A82BE8D3958300065A227F77D236B6067222E8CFD6 +208EE7ED58446D94989279689241038F67A891614078D312E5F90783906578A2 +C818ACE8990471741AD58A7CF126C552AB44027B6AADC2501AFA286B5D65C7A5 +B6463E73BC9E888A0B231351F9A90E5991C4F0E2920107B3D966ECDE01763FFD +DF9D0635327242732B6AE089A3D7FDE1742A7D74BD0749684602447B490BE0EF +E01BBA07497B817CF0F73D4D2F14A1B29505311D52ED90F0812EEE440D815B14 +CE44F3BCD5EA5B822073A775C137A59DEED383F80C16CF859D8187335220FB73 +217A045C39B0C3C6661A4D536880DDE06366F403F27DD632BF659435E2411A08 +C30016C471B4206531776F98DCCDF313E62F08E93EEC8FADA4C6B5EB22D5D832 +FBB0DE8BCE851FE3D6D70504242B2E720F74AE49F0DE3CFF787E9CCD3D1502FE +1622E86CBF9088F3B65E844145C879B2CE74AE24FDE843B657F9B8876DAF23DF +81F133F5AB4652331126F0ABF1C2CA21127CC1062C06D1C430A12740DE92A00C +B95A50696164F5AE380C643BBC7E4982881F17BCC8F9A8E3B5E38E6F4E32419B +19CD0D69F986F5D80B7620E42509FF0A3E4EF0D7826E543D0D8D80F3D3C0A699 +4B5CDD02272D224A0B02CBADB71524EBBA68FB57FE024A54B9DD7A74BB6BA892 +EC5241A5C20D5BDA591AFE863BFD64B63F02C77B74EC2AD5D39589AAE2245F0C +90AB09FB11A832F0791FB9FD8F892ADAAFB519BD8EE3756E6A5E1FE67735C694 +08E7996275F52F4AFDB24FD73E8F5C1B34296D4F41CF111FF08E88E3AF691122 +F196D4DEC545F68C76A68E4DE57C2CC706D0EB631367F288A4077044979D9E5F +9EEE710C2130FA491D114A742D3C0EA68D50AA44B88C66EFC1F281AB320F2C8C +800B1A4A4708B96CCFBC1B4726787096D3018AA87B2DC422E563BC4751D30E2E +63554771794D0F4F055C20F20ED3CC9E20ADF726A6C5E84D7743B5F0FA99A0EE +4958B8D53948E195ADDB8B8E4F40E387B36C14806025A5D96DB4F6B9ECAF177A +1A0492B360759EF671DD4616E25746919511057F40FE14F69E4F4BD67BF11EAE +E89026AC1DED805FF27846D642EAFC51E37C8E94C6B4141170988E314D8988F2 +00D56A9D1A89D3EAE006C604060B43F328A08DCA73991776A314C20441FAA4FE +077CA7F6ED2FE421E90E83ECEBBEB42187DB5D3EB5003A27D69DE33C56AFCB9B +25BAFF5F4F03E8CE5AB1A619B5973FF9FA4F0AC0DD867F7C0682609FFD7F10F3 +B7E6ADF7A62368DDC8E4CA4CEE3DDD15F02281672E41FD6C2FBB00E08EB201D3 +233E7AF3718BB51996C5EAA6B848E1076A825D8C5B0CCA4A2852A6C9352137B7 +D40F18FAFD9085155798496DE75F33E972B040B6197692E3E6D43CBFBE9FE71B +700B062083A2099E74D90F3E05D60AC091D0EA1B4C17F383ECEF98D6A50B1D91 +A82741FD6D9AFEE053B38B7CE59DD5F2782B5B360CFF78A09DC6C2093FF58127 +CD74355F7FB083746618FF6B61ED1E12E07582FEE7C78195C625BC7E90262C52 +8FC10144B4B6F99303ADDD66CCC93ABB0387E1E61C90CEFFCE16DD8CE4F6B6B4 +4F7ADBB0111456B7C2DAA99C5FF8B04FFA77DBC0D8063796296D8B8700544437 +0897BA71750E947209330045EC9DFAA919E64BCB8F1B56985D15DBA491E8E2EA +14FC8B31CD552DC96FA440AE98D04954D3E7E5BDA0681FA27F32F9BFD5D4C365 +128BBC8AF47FAE2039F90D0F30D3DCC141B99DDA8151E0DB243E6210A1835CF1 +7154C96DBC2C723A7576580747AA18452EC87ECC2F55F41935C8FEB80A690351 +5D3F3E67970FA93DBBD626A519EFFF4756B33641F56F7D16B7712FD09C726572 +0932166A7BAADA3B47E725D74564A155E0BC1CF8E5BC05F2D4970ADF60BFF161 +01F6E31EF577F8FB7560B2CDF775834A2DEB6B337D096EC2BDF113ACF27E2A79 +6E670C2F1739206DF052D43619D20461E52DFEEFD7A7A7F31690B71EF062EF31 +C9FF3205FDBD1A2A3DEA550BD3B6373C59F4CE5CB845F9C6297FE5641EB90231 +D4F6A2F919164779CD527F1C142AD7E47A63ABC26DACAC5C278EF4AB6B4121CF +793443E1E171870E95A2ABE098CE0A147CD373660BB20BF4ADADEFF4642FA1C7 +398796EA9FF642270D6176ABF5DFF5BB002C2C01A9C42DC3FBA1453B6632AD67 +A7EAC9074CD11D2CD46675DA0F910CB13BF42A155DFA30FE582D4FB19C6D45B1 +2F3C92947A8A2B26B81CC97421A1F5946C42171675F0A19464758E0D64A9D324 +3E3C45CE9E556FC942572D4508485E9543239F26C084D0D659D5B301928F014D +D8574A69D9046A2A4FBA6C993341C118E0AA7366CBC7C45EF717D6233B9D3F19 +C46ED705D06962E80383E102896587999E2A9F04F020348A0EE5EE61054810C0 +26C53DFD608E885B6F2F2E2AB9E8FD67E6057D42440102D5CE2AA06982B16A3A +6A9284F59E13EFD3EA8A5B1679864E055A8783FE74E4B2A28C5B968401836C83 +0B94AD89084B0A31B577E1CCF157851885E41FE7FF0D5D218EAECEE2D2130A32 +2FEDEDEC8B9F9223CA33A47B8CE042DD7BD35B5B24BB9F115F5D5204BCC0857F +CE329655D72CAE8C8E15F53740727441F8B2855126BBE70F144E989C327173AB +6996AEDAC678F5BDD16A92C2837C4EFCDCF43804BD2A145DD54170B0941BCE81 +A17771E520388AC4D0E22D6084BAA83F1F4EB1D8B2E0CB84954EDDC8E9B3A616 +ED3A91CEDDB972848E83E3AC3ECE3BA865BEC7C96A4586955682E4680B4C2364 +8054ED58647C18A3CDB8AF5C736C1E5036CB7A09CAEBBC6FA47B698DDF0AC81B +2407B47FE67EB74B7DDAEC1AA8F0327BB005D4E375150D8FC69444FDB6D7B68C +39CABE4C7A0FC3CD161843EEFB1A3003F109C7F187781E19CB060054FEFA21D4 +C9778A937812E8F06DD70C56424D57B4441A8D118769587B1E49F090CD179081 +3C33AA3309F3CBC69108104C7F68BA89C8C1D503507DE3A2FD2C81491DB1D511 +9876EB1AD7E66FCCC675DA4BF25F150BD3D0F622AD73C6C805F3DA6B265CBAE1 +83AEDFF42461D63EA338502AE6261988068E1C52E5EFC5BE1D0E017C2AB7FF2F +B27E42A4A7D8CE86CB6F36F7C218CB880230EA737CC971E8D70825C7520E5E33 +C2110E3E26F51D30B8F058228E5D2C45966D9107725141908E74BBB213339E7D +7437EECEAEBAC39BAD6A5595EF66E6B4BCE2C565596B0FC5069CFC1CF8B39600 +EF3B2BA9222991BEE9C55D4434AD761684DA2B61EA399A2B53A2D2E89CEFB6B9 +D3606854873444F53CE1A2230E3836B1DD652464551AB8ECB94CDD297C2AC906 +35B980680E12A891D6F39DBB7DCADF853394CF46FECCF0C80D8FD0A82009256B +22926139A5CF6A06FFE6F4EF6D1843436DA4F3F2ECB504D3C91961DCB8F78ADF +6A8D05D40225E125F7ACE0530B28BD86BEE2499AA4B62FB53329AEF6D66B1428 +6731C3E6A5AF5926F9D407E9999FCBF9580627F25AAE06DD34BDA8CBA179634C +8558B9E23E3CDE30053F8763BC64CF595B25E8CDCEBE15915E791E7387A2F979 +20A0EACC18A38055AAF917E6C768981BFD94380D7C33EB04086236ED74FB3B50 +56B9892412BCA67DCDD27CC508CC94AD51F7FEE2D6133BB310293BA9E36DEC27 +E014283EBB9A46DA887CAEC8B98E64F9A4441D254DFB203D7897FEA54E8B6A95 +2F2D00B75E4AB45881DC1361C37AC1031AB89F280929DFB9FA92BCD87E065F50 +7D0FFF1309AD49D259D59AFA825F892EE7FB303DE51AED493436B5B0BADC8941 +D5AF414E47B3D949C5411A47E5872731E797B385AA807D2D6651A78E45A998DC +21DD8B1F94370ED46CF165915E884537DD1B64489BDE456028592EF0C6041E59 +DC634B564B96B3A5861497DBEA1F6F06EBC125E74C94BB85022343A2BBB7B725 +C2AE27BA791FA69EEFF1B0DD3BC5B80B7CF56B52729BAE6E54810AC9D00C29B9 +C9455F039CB5EDAABA887F8598EB390D5D28AD387F429321A8D5FAF61BD8DCA8 +A25ACC7130C80D9EFEF633D47BA80022AA9CF477EC073D2FC3CBC4D685CBD238 +28E9E89BE648DEA20B1467FCFC4838141BC6ABFC046C5A80C250663637CB356A +B58080178FCF7B78E552415D071D11625081AF4708E78D843737B7357E638DA9 +501BCEF113EE961C84339E91202E5E2AC57BE8C636141F03A9CE8E97C7C8F374 +6AFA335DCE0B6B68C7D94C1B6D0C73DFF832580B2D1B1193427578DDC1895DC7 +1A9D8B9CE3157FFD118CF111BA33F1FBD445DBEBC1D7CDA5713858CF4CDA224F +38201BE52F2947D08F028378E787A2837AAFB1EB738EBEF4EBF2B34BCA1F0526 +8295CBC517E30CE49B86F196C26D982FFE650BC2B276583D716D1DCAF24267E7 +A551006687684174D71D920D7C1E2FA12A7C8F6B5CD4E77942D6A96A112070A8 +BCB56BCBEF93A1CE255984B93E92AA8854690A8AE7D416450869534787FDCC5C +23AAE383E05AA31581E3F2F31531A41F516DFFCCA33BD147F100CE8C11D3D3C4 +CAB8E10DF7425F2FB07B105F60BBCB8F7429201180B4ADBBF92B992038394E5F +346A7D4B3C12CD9A2A50884D1A465BCC81EDA8D081108DFF1D8BE67BC9C39812 +12B65A712D3ACD7527976CFE1276BEFF410D08043FA52A3EB2C6E363D5E86D24 +3D464A688F9482A7937D9F6F468B2ACAD117378FC99D98238AE59DBC628C2EDD +04B9D0A1199A8979BDC68D0B820C22E65937CE89170483FDF9C4B3BD8B17DA90 +377561E6D1F40ADC6549A5FD336DB23AB4852E4B696DD1DF77D9C0F70F61335A +811EC0B0D8D9C3C37CD98A906F5A2B4489C29DF8F47FD4D3E8961458135F6AA6 +77EDB4F176F23CC16D18FEC0B3911F6C75AC0909D42974887641F376E5B3EBE3 +B20B18FF22225F0C21F795D202B5F942547F427617618993AAA2B32A817F6572 +69B1FE76FACD292337F7F1432236C168A0F0D51CC6507CA9D7C8F77C784C50DE +BD2DB783C82D68EBA9943D389E442D231DDB44F37C185B7957B623E2196CDE38 +7BBE1072868E5D91D6EF1F06BCAC2469686B7155FA86710AF9513641E0F8E260 +464C85B44E51A7C3FB93F99465D4668F996643EB238E3E550610246E00216666 +A49A3FDD0CAA12DAD03A3F6222E97CF41FAD4AC3687CE9311C742E1E7B4988E6 +F6CD130CC8187873CD106317C2217E590710FEE707DA5F2DCA5D913344E2E499 +74D0D0C519DFB8B734EE6CBDA83B09AAD538CCECFB665FF3187EF0F649EFF80C +4498A585716BCB9EEB79CE45FC74A25D59F9F254C0F1901A655FF43F72BEE91B +123E2CC86388FAE4E2B00C53B6137C649650D097763816B60ABD8ED1DE810EF4 +F1A080341F88874B09C1B0693653566681BB35553CD0BF07EC5322228555D459 +AC9C0E77D320C0AFB57FAC1525347AE502D6862897B7CBB9C35B7799D18EFF32 +6DE271A2C8D8B7C0929E69477A77F37858ABC14BCE690230AF617BF8AB621689 +D2C9676B355C672EA4FF369617DD0D36845DB212AB7E35FA521F8F2309228F8A +A8C47A01259D8E4B7AC730D853357689F0654969C4FF6E8CB5331710735672AB +CFE17A87DC58953C778736AE0CC5DB0D7CFE41AF06EF6DE0CF11B025D85999C1 +AF52A405F3081103D5A219ED332444BAB77D418B6080A7A4A932000009A60745 +AF4239B9E19485FF61A1FF624621718A798C370AE385F6F30CB522ABD981278D +A771E952399ABFA74DB1E7505ED748DF4A794333C135AEEA368AE4FB80280565 +09BCEBC737FA30D660117415EBF6D883CCE0B9B52562424D2B874B1B70787222 +BD13ED345A6CB186F1B3686561D4E757758DE9E3A0B3287635BDDC69A3A33F27 +5BD1C166309961307C4C3FDA4D8BDE6E08D03B941FDC40105FFF53226742613F +A43AF882FD2D142187D698B81571374A3EA501F6E6750261D2AF3C737532FA87 +7988FFAFA6A95706BB79E6D01A8114E48DC93BE207CA1037D83881F29591DE1C +AF9098347780DC77F393469C7012C42D31A1D9CE4AE2FAD4E3948E2A50AAAE30 +292BAFA6F980DFA687FFBF8F72B4A0DA16671AD2CFD65DC351D3FE3AF51D666D +3E0D56B5DE2A0AF4C432243E37BCA75428F6DDF078ED501F9190D1B13085EE00 +C65067368012314DD1CFC7BC946F626F8C1339A7922FE1FE7A69ECB6DD695FDD +1D988652EE8707D2909C5D8E0CE9B4998CDD755044450F314D760CE3128CB512 +F852E26DF056F7B5E3A2A54DDAAF6351193DD4BA2923EF40D6388324AA7913A8 +49B4EAB2E6E552DE7829C0CC6FD60C0F9109411B9EDCC8ECE40E96422F0A871A +8B2EBC60F3D77F9F25802CCEBA7418E8C1B9D9B9D64503F96CAC529082AAE772 +2B0A0A7E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +TeXDict begin 40258431 52099146 1000 600 600 (rluserman.dvi) +@start /Fa 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 +2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fb 134[39 39 +39 39 39 39 39 39 1[39 39 39 39 39 39 1[39 39 39 39 39 +39 39 39 39 39 9[39 39 39 39 2[39 1[39 1[39 2[39 1[39 +39 1[39 39 39 39 5[39 7[39 1[39 1[39 39 39 39 2[39 39 +39 39[{}48 74.7198 /CMTT9 rf /Fc 167[62 3[60 46 2[57 +1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 +rf /Fd 134[65 65 1[65 68 48 48 50 1[68 61 68 102 34 65 +1[34 68 61 37 56 68 55 68 60 7[93 4[85 68 92 3[96 116 +74 96 1[46 96 1[77 81 1[89 87 93 8[61 61 61 61 61 61 +61 61 2[34 46[{}46 109.091 /CMBX12 rf /Fe 134[48 48 66 +1[51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 1[40 +51 45 9[93 1[68 66 51 67 1[62 71 68 1[57 71 1[33 68 1[59 +62 69 66 64 68 19[30 45[{}41 90.9091 /CMSL10 rf /Ff 139[30 +37 38 3[51 4[28 1[42 90[51 12[{}7 90.9091 /CMTI10 rf +/Fg 134[48 48 48 48 48 1[48 48 48 1[48 48 1[48 48 48 +48 1[48 48 48 48 1[48 48 1[48 2[48 14[48 48 1[48 1[48 +2[48 48 48 17[48 48 2[48 5[48 39[{}33 90.9091 /CMSLTT10 +rf /Fh 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 +1[56 97[{}12 90.9091 /CMCSC10 rf /Fi 197[25 58[{}1 90.9091 +/CMMI10 rf /Fj 197[33 58[{}1 119.552 /CMMI12 rf /Fk 135[85 +2[90 63 64 66 1[90 81 90 134 45 2[45 1[81 49 74 90 72 +90 78 11[124 112 5[126 1[97 4[127 101 106 124 117 1[122 +15[81 49[{}29 143.462 /CMBX12 rf /Fl 242[91 13[{}1 90.9091 +/CMSY10 rf /Fm 134[71 71 97 71 75 52 53 55 1[75 67 75 +112 37 2[37 75 67 41 61 75 60 75 65 9[139 1[103 1[75 +100 3[105 128 81 2[50 105 106 85 88 103 97 96 102 6[37 +4[67 67 67 67 67 2[37 1[37 44[{}46 119.552 /CMBX12 rf +/Fn 129[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 +48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 +48 1[48 3[48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 +48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 1[48 3[48 +48 48 48 48 48 1[48 48 48 48 2[48 48 48 48 33[{}77 90.9091 +/CMTT10 rf /Fo 131[91 45 40 48 48 66 48 51 35 36 36 48 +51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 +45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 +47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 +45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 20[51 51 53 +11[{}81 90.9091 /CMR10 rf /Fp 134[102 4[75 76 79 3[108 +1[54 2[54 2[59 88 108 86 108 94 11[149 2[144 3[151 1[116 +2[72 1[152 71[{}19 172.154 /CMBX12 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%BeginPaperSize: Letter +letter +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop 150 1318 a Fp(GNU)65 b(Readline)g(Library)g(User) +g(In)-5 b(terface)p 150 1418 3600 34 v 1873 1515 a Fo(Edition)30 +b(6.2,)i(for)e Fn(Readline)e(Library)h Fo(V)-8 b(ersion)31 +b(6.2.)3118 1623 y(Septem)m(b)s(er)f(2010)150 4935 y +Fm(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 +b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 +b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11 +b(oundation)p 150 5141 3600 17 v eop end +%%Page: 2 2 +TeXDict begin 2 1 bop 150 3024 a Fo(This)38 b(man)m(ual)h(describ)s(es) +f(the)h(end)f(user)g(in)m(terface)i(of)f(the)g(GNU)g(Readline)g +(Library)f(\(v)m(ersion)i(6.2,)150 3133 y(Septem)m(b)s(er)30 +b(6)h(2010\),)i(a)e(library)f(whic)m(h)h(aids)f(in)h(the)g(consistency) +g(of)g(user)f(in)m(terface)i(across)f(discrete)150 3243 +y(programs)f(whic)m(h)g(pro)m(vide)h(a)f(command)g(line)h(in)m +(terface.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577 +3377 y Fl(\015)f Fo(1988{2011)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F) +-8 b(oundation,)31 b(Inc.)150 3512 y(P)m(ermission)h(is)h(gran)m(ted)g +(to)f(mak)m(e)i(and)d(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g +(man)m(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f +(and)f(this)g(p)s(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g +(copies.)390 3756 y(P)m(ermission)k(is)h(gran)m(ted)f(to)h(cop)m(y)-8 +b(,)38 b(distribute)d(and/or)g(mo)s(dify)f(this)h(do)s(cumen)m(t)g +(under)390 3866 y(the)j(terms)g(of)g(the)g(GNU)h(F)-8 +b(ree)39 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)39 +b(1.3)g(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)28 +b(published)d(b)m(y)j(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8 +b(oundation;)30 b(with)d(no)g(In)m(v)-5 b(arian)m(t)28 +b(Sections,)390 4085 y(with)i(the)h(F)-8 b(ron)m(t-Co)m(v)m(er)33 +b(texts)e(b)s(eing)g(\\A)g(GNU)g(Man)m(ual",)h(and)e(with)g(the)h(Bac)m +(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)f(\(a\))h(b)s(elo)m +(w.)47 b(A)33 b(cop)m(y)g(of)f(the)h(license)g(is)g(included)e(in)h +(the)h(section)g(en)m(titled)390 4304 y(\\GNU)e(F)-8 +b(ree)32 b(Do)s(cumen)m(tation)g(License".)390 4438 y(\(a\))f(The)f +(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)31 b(is:)41 +b(Y)-8 b(ou)31 b(are)f(free)h(to)f(cop)m(y)h(and)f(mo)s(dify)f(this)h +(GNU)390 4548 y(man)m(ual.)41 b(Buying)30 b(copies)h(from)e(GNU)i +(Press)f(supp)s(orts)e(the)i(FSF)g(in)g(dev)m(eloping)h(GNU)390 +4658 y(and)f(promoting)g(soft)m(w)m(are)i(freedom.")150 +4902 y(Published)d(b)m(y)h(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 +b(oundation)150 5011 y(59)31 b(T)-8 b(emple)31 b(Place,)h(Suite)e(330,) +150 5121 y(Boston,)i(MA)e(02111-1307)150 5230 y(USA)p +eop end +%%Page: -1 3 +TeXDict begin -1 2 bop 3725 -116 a Fo(i)150 299 y Fk(T)-13 +b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fm(1)135 b(Command)45 +b(Line)g(Editing)35 b Fj(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)79 +b Fm(1)275 778 y Fo(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f +(Editing)9 b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)h(:)f(:)h(:)f(:)39 b Fo(1)275 888 y(1.2)92 b(Readline)31 +b(In)m(teraction)11 b Fi(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 +b Fo(1)399 997 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)9 +b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) +g(:)40 b Fo(1)399 1107 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i +(Commands)10 b Fi(:)k(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)40 +b Fo(2)399 1216 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)21 +b Fi(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 +b Fo(2)399 1326 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)14 +b Fi(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)44 b Fo(3)399 1435 y(1.2.5)93 b(Searc)m(hing)31 +b(for)f(Commands)f(in)h(the)h(History)11 b Fi(:)16 b(:)g(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)42 +b Fo(3)275 1545 y(1.3)92 b(Readline)31 b(Init)f(File)c +Fi(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 b +Fo(4)399 1655 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)17 +b Fi(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 +b Fo(4)399 1764 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)e +Fi(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)58 +b Fo(10)399 1874 y(1.3.3)93 b(Sample)30 b(Init)g(File)14 +b Fi(:)j(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)44 b Fo(11)275 1983 y(1.4)92 +b(Bindable)30 b(Readline)h(Commands)14 b Fi(:)g(:)i(:)f(:)g(:)h(:)f(:)h +(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fo(14)399 2093 y(1.4.1)93 +b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)10 b Fi(:)17 +b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 +b Fo(14)399 2203 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 +b(Manipulating)g(The)f(History)20 b Fi(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fo(14)399 2312 y(1.4.3)93 +b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)25 +b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)53 b Fo(16)399 +2422 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)26 +b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)55 b Fo(17)399 2531 y(1.4.5)93 b(Sp)s(ecifying)30 +b(Numeric)g(Argumen)m(ts)19 b Fi(:)d(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) +h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)49 +b Fo(18)399 2641 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 +b(or)31 b(Y)-8 b(ou)14 b Fi(:)i(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f +(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 +b Fo(18)399 2751 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)23 +b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)53 b Fo(19)399 2860 y(1.4.8)93 +b(Some)30 b(Miscellaneous)j(Commands)26 b Fi(:)16 b(:)f(:)h(:)f(:)g(:)h +(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) +f(:)g(:)58 b Fo(19)275 2970 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)22 +b Fi(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f +(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)52 b Fo(21)150 +3212 y Fm(App)t(endix)44 b(A)160 b(GNU)45 b(F)-11 b(ree)45 +b(Do)t(cumen)l(tation)h(License)446 3345 y Fj(:)20 b(:)f(:)h(:)f(:)g(:) +h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g +(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) +f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 b Fm(22)p eop end +%%Page: 1 4 +TeXDict begin 1 3 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(1)150 299 y Fk(1)80 +b(Command)54 b(Line)f(Editing)150 532 y Fo(This)30 b(c)m(hapter)h +(describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fh(gnu)g +Fo(command)h(line)f(editing)h(in)m(terface.)150 764 y +Fm(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 +923 y Fo(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h +(notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 +1058 y(The)35 b(text)i Fg(C-k)f Fo(is)g(read)g(as)h(`Con)m(trol-K')g +(and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h +Fn(k)150 1167 y Fo(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) +g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fg(M-k)e +Fo(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) +h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h +(ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fn(k)g +Fo(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s +(eled)f Fn(ALT)150 1521 y Fo(on)c(man)m(y)h(k)m(eyb)s(oards.)40 +b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g +Fn(ALT)e Fo(\(usually)i(to)g(either)g(side)g(of)g(the)150 +1630 y(space)h(bar\),)f(the)g Fn(ALT)f Fo(on)h(the)g(left)h(side)f(is)g +(generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 +b(.)42 b(The)29 b Fn(ALT)g Fo(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h +(ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i +(k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 +1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f +(t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1984 y(If)23 +b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fn(ALT)e +Fo(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g +(Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2093 +y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g +Fn(ESC)e Ff(\014rst)p Fo(,)j(and)e(then)g(t)m(yping)h +Fn(k)p Fo(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 +2203 y(as)j Fe(metafying)39 b Fo(the)30 b Fn(k)g Fo(k)m(ey)-8 +b(.)275 2337 y(The)39 b(text)j Fg(M-C-k)d Fo(is)h(read)g(as)h +(`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i +(pro)s(duced)d(b)m(y)150 2447 y Fe(metafying)g Fg(C-k)p +Fo(.)275 2581 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g +(their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 +b Fn(DEL)p Fo(,)f Fn(ESC)p Fo(,)g Fn(LFD)p Fo(,)g Fn(SPC)p +Fo(,)g Fn(RET)p Fo(,)150 2690 y(and)d Fn(TAB)f Fo(all)j(stand)e(for)g +(themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) +h(\014le)f(\(see)i(Section)f(1.3)150 2800 y([Readline)c(Init)e(File],)j +(page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f +Fn(LFD)f Fo(k)m(ey)-8 b(,)31 b(t)m(yping)g Fn(C-j)d Fo(will)i(pro)s +(duce)f(the)150 2910 y(desired)h(c)m(haracter.)42 b(The)30 +b Fn(RET)g Fo(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i +Fn(Return)e Fo(or)h Fn(Enter)f Fo(on)h(some)h(k)m(eyb)s(oards.)150 +3142 y Fm(1.2)68 b(Readline)47 b(In)l(teraction)150 3301 +y Fo(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) +m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g +(that)f(the)150 3411 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g +(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g +(a)g(set)g(of)f(commands)g(for)150 3520 y(manipulating)e(the)g(text)h +(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h +(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 +3630 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 +b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m +(ou)h(mo)m(v)m(e)g(the)g(cursor)150 3739 y(to)35 b(the)f(place)i(that)e +(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g +(the)f(corrections.)54 b(Then,)150 3849 y(when)24 b(y)m(ou)h(are)g +(satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g +Fn(RET)p Fo(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e +(at)h(the)h(end)150 3959 y(of)33 b(the)h(line)g(to)g(press)e +Fn(RET)p Fo(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g +(of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4068 +y(within)c(the)g(line.)150 4267 y Fd(1.2.1)63 b(Readline)40 +b(Bare)h(Essen)m(tials)150 4414 y Fo(In)31 b(order)h(to)h(en)m(ter)g(c) +m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 +b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 +4523 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) +m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 +b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4633 y(c)m(haracter,)f(y)m(ou)f(can)g +(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f +(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4767 +y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g +(and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) +m(yp)s(ed)150 4877 y(sev)m(eral)e(other)f(c)m(haracters.)42 +b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h +Fg(C-b)d Fo(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 +4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 +b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g +(with)f Fg(C-f)p Fo(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) +h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m +(haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h +(`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h +(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 +5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m +(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p +eop end +%%Page: 2 5 +TeXDict begin 2 4 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 +b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g +(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g +(bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g +(an)f(input)f(line)i(follo)m(ws.)150 562 y Fg(C-b)336 +b Fo(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 +715 y Fg(C-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) +150 869 y Fn(DEL)e Fo(or)i Fn(Backspace)630 978 y Fo(Delete)i(the)d(c)m +(haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 +1132 y Fg(C-d)336 b Fo(Delete)33 b(the)d(c)m(haracter)i(underneath)d +(the)i(cursor.)150 1285 y(Prin)m(ting)g(c)m(haracters)630 +1394 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g +(cursor.)150 1548 y Fg(C-_)e Fo(or)i Fg(C-x)e(C-u)630 +1657 y Fo(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 +b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g +(empt)m(y)630 1767 y(line.)150 1920 y(\(Dep)s(ending)29 +b(on)h(y)m(our)f(con\014guration,)i(the)e Fn(Backspace)e +Fo(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) +150 2030 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g +Fn(DEL)g Fo(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i +(underneath)d(the)h(cursor,)i(lik)m(e)150 2140 y Fg(C-d)p +Fo(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g +(the)f(cursor.\))150 2333 y Fd(1.2.2)63 b(Readline)40 +b(Mo)m(v)m(emen)m(t)h(Commands)150 2480 y Fo(The)27 b(ab)s(o)m(v)m(e)i +(table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f +(y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 +2589 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m +(enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g +(in)h(addition)150 2699 y(to)j Fg(C-b)p Fo(,)f Fg(C-f)p +Fo(,)g Fg(C-d)p Fo(,)h(and)e Fn(DEL)p Fo(.)54 b(Here)35 +b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h +(the)150 2808 y(line.)150 2962 y Fg(C-a)336 b Fo(Mo)m(v)m(e)32 +b(to)g(the)e(start)h(of)g(the)f(line.)150 3115 y Fg(C-e)336 +b Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +3269 y Fg(M-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f +(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) +150 3422 y Fg(M-b)336 b Fo(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m +(ord.)150 3575 y Fg(C-l)336 b Fo(Clear)31 b(the)f(screen,)h(reprin)m +(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 +3729 y(Notice)c(ho)m(w)f Fg(C-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m +(haracter,)j(while)d Fg(M-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m +(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3838 y(con)m(v)m(en)m(tion)32 +b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m +(haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 +3948 y(w)m(ords.)150 4141 y Fd(1.2.3)63 b(Readline)40 +b(Killing)i(Commands)150 4288 y Fe(Killing)35 b Fo(text)28 +b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h +(sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 +4398 y(b)m(y)g Fe(y)m(anking)35 b Fo(\(re-inserting\))28 +b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 +b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 +4507 y(`kill')32 b(and)d(`y)m(ank'.\))275 4639 y(If)g(the)i +(description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g +(text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 +4748 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g +(\(or)g(the)f(same\))h(place)h(later.)275 4880 y(When)23 +b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i +(in)e(a)g Fe(kill-ring)p Fo(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h +(consecutiv)m(e)150 4989 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g +(killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f +(bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5099 +y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g +(that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f +(is)h(a)m(v)-5 b(ailable)150 5208 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) +m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)275 +5340 y(Here)f(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)p +eop end +%%Page: 3 6 +TeXDict begin 3 5 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(3)150 299 y Fg(C-k)336 +b Fo(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s +(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 461 +y Fg(M-d)336 b Fo(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h +(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,) +g(to)g(the)630 570 y(end)j(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) +f(b)m(y)g Fg(M-f)p Fo(.)150 732 y Fg(M-DEL)240 b Fo(Kill)31 +b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) +h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 +842 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 +b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m +(y)630 951 y Fg(M-b)p Fo(.)150 1113 y Fg(C-w)336 b Fo(Kill)35 +b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 +b(This)34 b(is)h(di\013eren)m(t)h(than)e Fg(M-DEL)630 +1223 y Fo(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 +1386 y(Here)42 b(is)f(ho)m(w)h(to)g Fe(y)m(ank)47 b Fo(the)42 +b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 +b(means)e(to)h(cop)m(y)h(the)e(most-)150 1496 y(recen)m(tly-killed)33 +b(text)e(from)f(the)g(kill)i(bu\013er.)150 1659 y Fg(C-y)336 +b Fo(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m +(k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 +1821 y Fg(M-y)336 b Fo(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h +(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h +(the)g(prior)630 1930 y(command)30 b(is)h Fg(C-y)e Fo(or)h +Fg(M-y)p Fo(.)150 2132 y Fd(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 +2279 y Fo(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f +(Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 +2389 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g +Ff(sign)47 b Fo(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m +(t.)71 b(If)40 b(y)m(ou)150 2498 y(pass)33 b(a)h(negativ)m(e)i(argumen) +m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m +(ard)f(direction,)i(that)150 2608 y(command)g(will)h(act)g(in)f(a)h +(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g +(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2717 y(the)31 +b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fn(M--)f(C-k)p +Fo('.)275 2854 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g +(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i +(digits)e(b)s(efore)150 2964 y(the)j(command.)42 b(If)30 +b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h +(\(`)p Fn(-)p Fo('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 +3073 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m +(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h +(started,)i(y)m(ou)150 3183 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f +(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 +b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fg(C-d)150 +3293 y Fo(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f +(t)m(yp)s(e)h(`)p Fn(M-1)29 b(0)h(C-d)p Fo(',)39 b(whic)m(h)e(will)h +(delete)h(the)e(next)h(ten)150 3402 y(c)m(haracters)32 +b(on)e(the)h(input)e(line.)150 3604 y Fd(1.2.5)63 b(Searc)m(hing)40 +b(for)i(Commands)g(in)f(the)g(History)150 3751 y Fo(Readline)22 +b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g +(command)h(history)f(for)g(lines)g(con)m(taining)150 +3861 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 +b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fe(incremen)m(tal)35 +b Fo(and)30 b Fe(non-incremen)m(tal)p Fo(.)275 3998 y(Incremen)m(tal)c +(searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e +(t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 +4107 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s +(ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i +(history)150 4217 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g +(far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g +(man)m(y)g(c)m(haracters)i(as)150 4326 y(needed)i(to)i(\014nd)d(the)i +(desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 +b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i +(particular)150 4436 y(string,)g(t)m(yp)s(e)f Fg(C-r)p +Fo(.)40 b(T)m(yping)29 b Fg(C-s)g Fo(searc)m(hes)h(forw)m(ard)f +(through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m +(t)150 4545 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g +Fn(isearch-terminators)33 b Fo(v)-5 b(ariable)39 b(are)f(used)f(to)i +(terminate)g(an)f(incremen)m(tal)150 4655 y(searc)m(h.)71 +b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i +(a)f(v)-5 b(alue,)44 b(the)c Fn(ESC)g Fo(and)f Fg(C-J)h +Fo(c)m(haracters)i(will)150 4765 y(terminate)h(an)g(incremen)m(tal)g +(searc)m(h.)78 b Fg(C-g)41 b Fo(will)i(ab)s(ort)f(an)g(incremen)m(tal)i +(searc)m(h)f(and)f(restore)h(the)150 4874 y(original)30 +b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f +(history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 +4984 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5121 +y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h +(history)g(list,)h(t)m(yp)s(e)g Fg(C-r)e Fo(or)h Fg(C-s)f +Fo(as)h(appropriate.)43 b(This)150 5230 y(will)26 b(searc)m(h)h(bac)m +(kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g +(en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150 +5340 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i +(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h +(the)p eop end +%%Page: 4 7 +TeXDict begin 4 6 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(searc)m(h)26 +b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f +Fn(RET)f Fo(will)g(terminate)i(the)f(searc)m(h)g(and)e(accept)150 +408 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e(command)g(from)g +(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will) +150 518 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g +(found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275 +647 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g +(searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fg(C-r)p +Fo(s)c(are)i(t)m(yp)s(ed)g(without)150 757 y(an)m(y)i(in)m(terv)m +(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h +(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150 +866 y(used.)275 995 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the) +h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h(searc)m +(h)f(for)150 1105 y(matc)m(hing)d(history)e(lines.)78 +b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g +(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1214 y(con)m(ten)m(ts)32 +b(of)f(the)f(curren)m(t)g(line.)150 1436 y Fm(1.3)68 +b(Readline)47 b(Init)e(File)150 1595 y Fo(Although)f(the)g(Readline)g +(library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m +(eybindings)f(installed)g(b)m(y)150 1705 y(default,)26 +b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) +m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 +1814 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an) +g Fe(inputrc)49 b Fo(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g +(home)150 1924 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h +(\014le)f(is)g(tak)m(en)i(from)e(the)g(v)-5 b(alue)24 +b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b +Fn(INPUTRC)p Fo(.)150 2033 y(If)34 b(that)g(v)-5 b(ariable)35 +b(is)g(unset,)g(the)f(default)g(is)g(`)p Fn(~/.inputrc)p +Fo('.)50 b(If)34 b(that)h(\014le)f(do)s(es)g(not)g(exist)h(or)f(cannot) +150 2143 y(b)s(e)c(read,)g(the)h(ultimate)g(default)g(is)f(`)p +Fn(/etc/inputrc)p Fo('.)275 2272 y(When)f(a)h(program)f(whic)m(h)h +(uses)f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f +(is)h(read,)g(and)f(the)150 2381 y(k)m(ey)i(bindings)e(are)i(set.)275 +2510 y(In)26 b(addition,)i(the)f Fn(C-x)i(C-r)d Fo(command)h(re-reads)g +(this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m +(hanges)150 2620 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g +(it.)150 2808 y Fd(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 +2955 y Fo(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) +m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 +b(lines)h(are)150 3065 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h +(a)g(`)p Fn(#)p Fo(')g(are)h(commen)m(ts.)73 b(Lines)41 +b(b)s(eginning)f(with)g(a)i(`)p Fn($)p Fo(')f(indicate)150 +3174 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h +([Conditional)f(Init)f(Constructs],)j(page)f(10\).)74 +b(Other)150 3284 y(lines)31 b(denote)g(v)-5 b(ariable)31 +b(settings)g(and)f(k)m(ey)h(bindings.)150 3432 y(V)-8 +b(ariable)32 b(Settings)630 3542 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e +(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h +(the)g(v)-5 b(alues)41 b(of)630 3651 y(v)-5 b(ariables)34 +b(in)f(Readline)i(using)e(the)g Fn(set)g Fo(command)g(within)g(the)h +(init)g(\014le.)50 b(The)33 b(syn)m(tax)630 3761 y(is)d(simple:)870 +3890 y Fn(set)47 b Fg(variable)56 b(value)630 4019 y +Fo(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f +(the)g(default)h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 +4128 y(use)k Fn(vi)g Fo(line)h(editing)g(commands:)870 +4257 y Fn(set)47 b(editing-mode)d(vi)630 4386 y Fo(V)-8 +b(ariable)36 b(names)f(and)g(v)-5 b(alues,)36 b(where)f(appropriate,)h +(are)g(recognized)g(without)f(regard)630 4496 y(to)c(case.)42 +b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 +4624 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f +(set)i(to)g(on)f(or)g(o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the) +g(v)-5 b(alue)26 b(is)630 4734 y(n)m(ull)e(or)g(empt)m(y)-8 +b(,)27 b Fe(on)d Fo(\(case-insensitiv)m(e\),)29 b(or)24 +b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) +-5 b(ariable)630 4844 y(b)s(eing)30 b(set)h(to)g(o\013.)630 +4973 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m +(hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 +5121 y Fn(bell-style)1110 5230 y Fo(Con)m(trols)44 b(what)g(happ)s(ens) +e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h(termi-)1110 +5340 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p +Fn(none)p Fo(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61 +b(If)36 b(set)i(to)p eop end +%%Page: 5 8 +TeXDict begin 5 7 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(5)1110 299 y(`)p +Fn(visible)p Fo(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g +(one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 +408 y(`)p Fn(audible)p Fo(')j(\(the)i(default\),)i(Readline)e(attempts) +g(to)h(ring)e(the)g(terminal's)1110 518 y(b)s(ell.)630 +664 y Fn(bind-tty-special-chars)1110 774 y Fo(If)45 b(set)h(to)f(`)p +Fn(on)p Fo(',)50 b(Readline)45 b(attempts)i(to)f(bind)d(the)j(con)m +(trol)g(c)m(haracters)1110 883 y(treated)36 b(sp)s(ecially)h(b)m(y)e +(the)h(k)m(ernel's)g(terminal)g(driv)m(er)f(to)h(their)f(Readline)1110 +993 y(equiv)-5 b(alen)m(ts.)630 1139 y Fn(comment-begin)1110 +1249 y Fo(The)29 b(string)g(to)h(insert)f(at)h(the)f(b)s(eginning)g(of) +g(the)h(line)f(when)f(the)i Fn(insert-)1110 1358 y(comment)e +Fo(command)j(is)f(executed.)42 b(The)29 b(default)i(v)-5 +b(alue)31 b(is)f Fn("#")p Fo(.)630 1504 y Fn(completion-display-width) +1110 1614 y Fo(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) +g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 1724 +y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 +b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 +1833 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 +b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 +1943 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e +(line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 +2089 y Fn(completion-ignore-case)1110 2198 y Fo(If)d(set)h(to)g(`)p +Fn(on)p Fo(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i +(and)e(completion)1110 2308 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) +40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fn(off)p +Fo('.)630 2454 y Fn(completion-map-case)1110 2564 y Fo(If)22 +b(set)g(to)h(`)p Fn(on)p Fo(',)h(and)e Fe(completion-ignore-case)31 +b Fo(is)22 b(enabled,)i(Readline)f(treats)1110 2673 y(h)m(yphens)29 +b(\(`)p Fn(-)p Fo('\))j(and)e(underscores)g(\(`)p Fn(_)p +Fo('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 +2783 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e +(completion.)630 2929 y Fn(completion-prefix-displa)o(y-le)o(ngth)1110 +3039 y Fo(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h +(pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 3148 +y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s +(di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 3258 +y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e +(longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 3367 +y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) +f(completions.)630 3513 y Fn(completion-query-items)1110 +3623 y Fo(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h +(that)g(determines)f(when)f(the)i(user)1110 3733 y(is)i(ask)m(ed)h +(whether)f(the)h(list)g(of)f(p)s(ossibilities)h(should)e(b)s(e)h +(displa)m(y)m(ed.)41 b(If)29 b(the)1110 3842 y(n)m(um)m(b)s(er)d(of)h +(p)s(ossible)f(completions)i(is)f(greater)h(than)e(this)h(v)-5 +b(alue,)28 b(Readline)1110 3952 y(will)f(ask)g(the)f(user)g(whether)g +(or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 +4061 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 +b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5 +b(alue)1110 4171 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40 +b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110 +4281 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g +Fn(100)p Fo(.)630 4427 y Fn(convert-meta)1110 4536 y +Fo(If)22 b(set)g(to)h(`)p Fn(on)p Fo(',)h(Readline)f(will)f(con)m(v)m +(ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 +4646 y(to)33 b(an)e Fh(asci)r(i)h Fo(k)m(ey)h(sequence)f(b)m(y)g +(stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 +4756 y(an)24 b Fn(ESC)g Fo(c)m(haracter,)j(con)m(v)m(erting)f(them)f +(to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 4865 +y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fn(on)p +Fo('.)630 5011 y Fn(disable-completion)1110 5121 y Fo(If)36 +b(set)h(to)h(`)p Fn(On)p Fo(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h +(completion.)60 b(Completion)1110 5230 y(c)m(haracters)28 +b(will)e(b)s(e)f(inserted)h(in)m(to)h(the)g(line)f(as)g(if)g(they)h +(had)e(b)s(een)g(mapp)s(ed)1110 5340 y(to)31 b Fn(self-insert)p +Fo(.)38 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)p +eop end +%%Page: 6 9 +TeXDict begin 6 8 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(6)630 299 y Fn(editing-mode)1110 +408 y Fo(The)28 b Fn(editing-mode)e Fo(v)-5 b(ariable)29 +b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 +518 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f +(up)f(in)h(Emacs)g(editing)h(mo)s(de,)1110 628 y(where)j(the)g(k)m +(eystrok)m(es)i(are)e(most)h(similar)f(to)h(Emacs.)40 +b(This)29 b(v)-5 b(ariable)30 b(can)1110 737 y(b)s(e)g(set)h(to)g +(either)g(`)p Fn(emacs)p Fo(')e(or)h(`)p Fn(vi)p Fo('.)630 +883 y Fn(echo-control-characters)1110 993 y Fo(When)g(set)h(to)g(`)p +Fn(on)p Fo(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g +(supp)s(ort)1110 1103 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m +(haracter)h(corresp)s(onding)d(to)j(a)f(signal)g(generated)1110 +1212 y(from)e(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p +Fn(on)p Fo('.)630 1358 y Fn(enable-keypad)1110 1468 y +Fo(When)23 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g(try)f(to) +h(enable)g(the)f(application)i(k)m(eypad)1110 1577 y(when)h(it)h(is)f +(called.)41 b(Some)27 b(systems)f(need)h(this)f(to)h(enable)g(the)g +(arro)m(w)g(k)m(eys.)1110 1687 y(The)j(default)g(is)h(`)p +Fn(off)p Fo('.)630 1833 y Fn(enable-meta-key)1110 1943 +y Fo(When)40 b(set)g(to)g(`)p Fn(on)p Fo(',)j(Readline)d(will)g(try)g +(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 2052 +y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g +(called.)76 b(On)41 b(man)m(y)1110 2162 y(terminals,)c(the)e(meta)h(k)m +(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 +b(The)1110 2271 y(default)31 b(is)f(`)p Fn(on)p Fo('.)630 +2418 y Fn(expand-tilde)1110 2527 y Fo(If)d(set)h(to)h(`)p +Fn(on)p Fo(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h +(Readline)h(attempts)1110 2637 y(w)m(ord)i(completion.)42 +b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 2783 +y Fn(history-preserve-point)1110 2892 y Fo(If)41 b(set)h(to)h(`)p +Fn(on)p Fo(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f +(p)s(oin)m(t)f(\(the)1110 3002 y(curren)m(t)35 b(cursor)g(p)s +(osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g +(line)1110 3112 y(retriev)m(ed)h(with)f Fn(previous-history)c +Fo(or)37 b Fn(next-history)p Fo(.)55 b(The)36 b(default)1110 +3221 y(is)30 b(`)p Fn(off)p Fo('.)630 3367 y Fn(history-size)1110 +3477 y Fo(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g +(en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 3587 +y(list.)53 b(If)34 b(set)h(to)g(zero,)i(the)d(n)m(um)m(b)s(er)g(of)g +(en)m(tries)h(in)f(the)h(history)f(list)h(is)g(not)1110 +3696 y(limited.)630 3842 y Fn(horizontal-scroll-mode)1110 +3952 y Fo(This)g(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f +(`)p Fn(on)p Fo(')g(or)g(`)p Fn(off)p Fo('.)57 b(Setting)36 +b(it)g(to)h(`)p Fn(on)p Fo(')1110 4061 y(means)26 b(that)h(the)f(text)h +(of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m +(tally)1110 4171 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i +(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 4281 +y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g +(line.)39 b(By)27 b(default,)g(this)1110 4390 y(v)-5 +b(ariable)31 b(is)g(set)f(to)i(`)p Fn(off)p Fo('.)630 +4536 y Fn(input-meta)1110 4646 y Fo(If)f(set)g(to)h(`)p +Fn(on)p Fo(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) +i(will)f(not)h(clear)1110 4756 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h +(c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 +4865 y(terminal)g(claims)h(it)g(can)f(supp)s(ort.)68 +b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fn(off)p +Fo('.)69 b(The)1110 4975 y(name)30 b Fn(meta-flag)e Fo(is)j(a)f(synon)m +(ym)g(for)g(this)h(v)-5 b(ariable.)630 5121 y Fn(isearch-terminators) +1110 5230 y Fo(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e +(terminate)j(an)f(incremen)m(tal)1110 5340 y(searc)m(h)25 +b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g +(command)p eop end +%%Page: 7 10 +TeXDict begin 7 9 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(7)1110 299 y(\(see)45 +b(Section)h(1.2.5)g([Searc)m(hing],)j(page)d(3\).)84 +b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 408 +y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h +Fn(ESC)d Fo(and)h Fg(C-J)g Fo(will)h(terminate)g(an)1110 +518 y(incremen)m(tal)c(searc)m(h.)630 689 y Fn(keymap)192 +b Fo(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h +(for)g(k)m(ey)g(binding)f(com-)1110 798 y(mands.)81 b(Acceptable)47 +b Fn(keymap)42 b Fo(names)i(are)h Fn(emacs)p Fo(,)i Fn(emacs-standard)p +Fo(,)1110 908 y Fn(emacs-meta)p Fo(,)99 b Fn(emacs-ctlx)p +Fo(,)f Fn(vi)p Fo(,)j Fn(vi-move)p Fo(,)f Fn(vi-command)p +Fo(,)f(and)1110 1017 y Fn(vi-insert)p Fo(.)64 b Fn(vi)38 +b Fo(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fn(vi-command)p +Fo(;)i Fn(emacs)c Fo(is)i(equiv)-5 b(alen)m(t)1110 1127 +y(to)33 b Fn(emacs-standard)p Fo(.)41 b(The)31 b(default)h(v)-5 +b(alue)32 b(is)g Fn(emacs)p Fo(.)44 b(The)31 b(v)-5 b(alue)33 +b(of)f(the)1110 1236 y Fn(editing-mode)27 b Fo(v)-5 b(ariable)31 +b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 1407 +y Fn(mark-directories)1110 1517 y Fo(If)38 b(set)g(to)h(`)p +Fn(on)p Fo(',)i(completed)e(directory)f(names)g(ha)m(v)m(e)i(a)e(slash) +g(app)s(ended.)1110 1626 y(The)30 b(default)g(is)h(`)p +Fn(on)p Fo('.)630 1797 y Fn(mark-modified-lines)1110 +1906 y Fo(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p +Fn(on)p Fo(',)g(causes)g(Readline)f(to)h(displa)m(y)f(an)f(as-)1110 +2016 y(terisk)f(\(`)p Fn(*)p Fo('\))h(at)f(the)g(start)g(of)g(history)g +(lines)g(whic)m(h)f(ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 +2125 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fn(off)p Fo(')g(b)m(y)g +(default.)630 2296 y Fn(mark-symlinked-directori)o(es)1110 +2405 y Fo(If)44 b(set)h(to)h(`)p Fn(on)p Fo(',)i(completed)e(names)f +(whic)m(h)f(are)h(sym)m(b)s(olic)g(links)g(to)g(di-)1110 +2515 y(rectories)j(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)e(\(sub)5 +b(ject)47 b(to)g(the)f(v)-5 b(alue)47 b(of)f Fn(mark-)1110 +2625 y(directories)p Fo(\).)38 b(The)30 b(default)g(is)h(`)p +Fn(off)p Fo('.)630 2795 y Fn(match-hidden-files)1110 +2905 y Fo(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p +Fn(on)p Fo(',)h(causes)f(Readline)g(to)g(matc)m(h)g(\014les)f(whose) +1110 3014 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fn(.)p +Fo(')g(\(hidden)f(\014les\))i(when)e(p)s(erforming)g(\014lename)1110 +3124 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fn(off)p +Fo(',)i(the)e(leading)g(`)p Fn(.)p Fo(')f(m)m(ust)g(b)s(e)g(supplied)f +(b)m(y)1110 3233 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f +(completed.)53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p +Fn(on)p Fo(')g(b)m(y)1110 3343 y(default.)630 3513 y +Fn(menu-complete-display-pr)o(efix)1110 3623 y Fo(If)f(set)h(to)g(`)p +Fn(on)p Fo(',)h(men)m(u)e(completion)i(displa)m(ys)e(the)h(common)g +(pre\014x)e(of)i(the)1110 3733 y(list)k(of)g(p)s(ossible)f(completions) +i(\(whic)m(h)e(ma)m(y)h(b)s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 +3842 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p +Fn(off)p Fo('.)630 4013 y Fn(output-meta)1110 4122 y +Fo(If)35 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g(displa)m(y) +f(c)m(haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 4232 +y(set)h(directly)g(rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s +(e)h(sequence.)59 b(The)1110 4341 y(default)31 b(is)f(`)p +Fn(off)p Fo('.)630 4512 y Fn(page-completions)1110 4622 +y Fo(If)j(set)i(to)f(`)p Fn(on)p Fo(',)h(Readline)g(uses)e(an)h(in)m +(ternal)h Fn(more)p Fo(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 +4731 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) +47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fn(on)p Fo(')1110 +4841 y(b)m(y)e(default.)630 5011 y Fn(print-completions-horizo)o(ntal)o +(ly)1110 5121 y Fo(If)23 b(set)i(to)g(`)p Fn(on)p Fo(',)g(Readline)g +(will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 +5230 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c +(than)g(do)m(wn)g(the)h(screen.)1110 5340 y(The)30 b(default)g(is)h(`)p +Fn(off)p Fo('.)p eop end +%%Page: 8 11 +TeXDict begin 8 10 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(8)630 299 y Fn +(revert-all-at-newline)1110 408 y Fo(If)29 b(set)h(to)g(`)p +Fn(on)p Fo(',)g(Readline)g(will)g(undo)f(all)h(c)m(hanges)h(to)f +(history)g(lines)f(b)s(efore)1110 518 y(returning)f(when)f +Fn(accept-line)f Fo(is)j(executed.)41 b(By)29 b(default,)g(history)g +(lines)1110 628 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i +(individual)e(undo)g(lists)h(across)g(calls)h(to)1110 +737 y Fn(readline)p Fo(.)38 b(The)30 b(default)h(is)f(`)p +Fn(off)p Fo('.)630 902 y Fn(show-all-if-ambiguous)1110 +1011 y Fo(This)f(alters)i(the)f(default)g(b)s(eha)m(vior)g(of)g(the)h +(completion)g(functions.)40 b(If)29 b(set)1110 1121 y(to)f(`)p +Fn(on)p Fo(',)g(w)m(ords)f(whic)m(h)g(ha)m(v)m(e)i(more)f(than)f(one)h +(p)s(ossible)f(completion)h(cause)1110 1230 y(the)39 +b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i(instead)e(of)g +(ringing)g(the)g(b)s(ell.)1110 1340 y(The)30 b(default)g(v)-5 +b(alue)31 b(is)g(`)p Fn(off)p Fo('.)630 1504 y Fn +(show-all-if-unmodified)1110 1614 y Fo(This)38 b(alters)h(the)g +(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h(functions)e(in)h(a) +1110 1724 y(fashion)25 b(similar)g(to)h Fe(sho)m(w-all-if-am)m(biguous) +t Fo(.)41 b(If)24 b(set)i(to)f(`)p Fn(on)p Fo(',)i(w)m(ords)d(whic)m(h) +1110 1833 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e +(completion)i(without)f(an)m(y)g(p)s(ossible)f(par-)1110 +1943 y(tial)43 b(completion)h(\(the)f(p)s(ossible)f(completions)h +(don't)f(share)g(a)h(common)1110 2052 y(pre\014x\))30 +b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g(immediately)i +(instead)e(of)h(ring-)1110 2162 y(ing)g(the)f(b)s(ell.)41 +b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fn(off)p +Fo('.)630 2326 y Fn(skip-completed-text)1110 2436 y Fo(If)i(set)i(to)f +(`)p Fn(on)p Fo(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s +(eha)m(vior)f(when)f(in-)1110 2545 y(serting)d(a)h(single)g(matc)m(h)f +(in)m(to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s +(erform-)1110 2655 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f +(w)m(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110 +2765 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h +(that)f(matc)m(h)g(c)m(haracters)1110 2874 y(after)c(p)s(oin)m(t)g(in)g +(the)g(w)m(ord)f(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g +(w)m(ord)1110 2984 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g +(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 +3093 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g +(after)h(the)g(`)p Fn(e)p Fo(')f(in)1110 3203 y(`)p Fn(Makefile)p +Fo(')c(will)i(result)f(in)g(`)p Fn(Makefile)p Fo(')f(rather)h(than)h(`) +p Fn(Makefilefile)p Fo(',)1110 3313 y(assuming)d(there)g(is)h(a)f +(single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 +b(alue)1110 3422 y(is)30 b(`)p Fn(off)p Fo('.)630 3587 +y Fn(visible-stats)1110 3696 y Fo(If)h(set)i(to)f(`)p +Fn(on)p Fo(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s +(e)g(is)g(app)s(ended)e(to)j(the)1110 3806 y(\014lename)e(when)e +(listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p +Fn(off)p Fo('.)150 3970 y(Key)f(Bindings)630 4080 y(The)41 +b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g +(init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 +4189 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i +(y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 +4299 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j +(the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 +4408 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h +(do)s(es.)630 4545 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g +(the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 +4655 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h +(bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 +4765 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 +b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g +(and)630 4874 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m +(terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 +b(The)40 b(name)h(of)630 4984 y(the)35 b(k)m(ey)g(can)g(b)s(e)f +(expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h +(what)h(y)m(ou)g(\014nd)e(most)630 5093 y(comfortable.)630 +5230 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h +(k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 +5340 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g +(\(a)h Fe(macro)5 b Fo(\).)p eop end +%%Page: 9 12 +TeXDict begin 9 11 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2153 b(9)630 299 y Fe(k)m(eyname)5 +b Fo(:)42 b Fe(function-name)35 b Fo(or)c Fe(macro)1110 +408 y(k)m(eyname)k Fo(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s +(elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 +541 y Fn(Control-u:)45 b(universal-argument)1350 651 +y(Meta-Rubout:)f(backward-kill-word)1350 760 y(Control-o:)h(">)i +(output")1110 893 y Fo(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)h +Fg(C-u)d Fo(is)h(b)s(ound)d(to)k(the)e(function)h Fn(universal-)1110 +1003 y(argument)p Fo(,)f Fg(M-DEL)e Fo(is)i(b)s(ound)e(to)i(the)g +(function)g Fn(backward-kill-word)p Fo(,)1110 1112 y(and)g +Fg(C-o)g Fo(is)h(b)s(ound)e(to)j(run)d(the)j(macro)f(expressed)g(on)f +(the)i(righ)m(t)f(hand)1110 1222 y(side)30 b(\(that)i(is,)e(to)h +(insert)g(the)f(text)i(`)p Fn(>)e(output)p Fo(')f(in)m(to)i(the)g +(line\).)1110 1355 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)g(c)m +(haracter)i(names)e(are)g(recognized)h(while)f(pro-)1110 +1465 y(cessing)22 b(this)g(k)m(ey)g(binding)e(syn)m(tax:)37 +b Fe(DEL)p Fo(,)22 b Fe(ESC)8 b Fo(,)20 b Fe(ESCAPE)5 +b Fo(,)21 b Fe(LFD)5 b Fo(,)22 b Fe(NEW-)1110 1574 y(LINE)5 +b Fo(,)31 b Fe(RET)7 b Fo(,)29 b Fe(RETURN)10 b Fo(,)30 +b Fe(R)m(UBOUT)7 b Fo(,)31 b Fe(SP)-8 b(A)m(CE)5 b Fo(,)31 +b Fe(SPC)8 b Fo(,)29 b(and)h Fe(T)-8 b(AB)5 b Fo(.)630 +1730 y Fn(")p Fe(k)m(eyseq)r Fn(")p Fo(:)41 b Fe(function-name)36 +b Fo(or)30 b Fe(macro)1110 1840 y(k)m(eyseq)k Fo(di\013ers)d(from)f +Fe(k)m(eyname)37 b Fo(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f +(denoting)g(an)g(en-)1110 1949 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s +(e)f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in) +1110 2059 y(double)29 b(quotes.)41 b(Some)29 b Fh(gnu)h +Fo(Emacs)f(st)m(yle)i(k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as) +1110 2169 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s +(ecial)h(c)m(haracter)g(names)f(are)g(not)1110 2278 y(recognized.)1350 +2411 y Fn("\\C-u":)46 b(universal-argument)1350 2521 +y("\\C-x\\C-r":)f(re-read-init-file)1350 2630 y("\\e[11~":)g("Function) +h(Key)g(1")1110 2763 y Fo(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 +b Fg(C-u)64 b Fo(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 +2873 y Fn(universal-argument)39 b Fo(\(just)k(as)h(it)g(w)m(as)g(in)g +(the)f(\014rst)g(example\),)49 b(`)p Fg(C-x)1110 2982 +y(C-r)p Fo(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f +Fn(re-read-init-file)p Fo(,)c(and)j(`)p Fn(ESC)h([)g(1)g(1)1110 +3092 y(~)p Fo(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p +Fn(Function)e(Key)g(1)p Fo('.)630 3248 y(The)g(follo)m(wing)i +Fh(gnu)f Fo(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 +b(ailable)32 b(when)d(sp)s(ecifying)630 3357 y(k)m(ey)i(sequences:)630 +3513 y Fg(\\C-)336 b Fo(con)m(trol)32 b(pre\014x)630 +3670 y Fg(\\M-)336 b Fo(meta)31 b(pre\014x)630 3826 y +Fg(\\e)384 b Fo(an)30 b(escap)s(e)h(c)m(haracter)630 +3982 y Fg(\\\\)384 b Fo(bac)m(kslash)630 4138 y Fg(\\)p +Fn(")g(")p Fo(,)30 b(a)h(double)f(quotation)i(mark)630 +4294 y Fg(\\')384 b Fn(')p Fo(,)30 b(a)h(single)g(quote)g(or)f(ap)s +(ostrophe)630 4450 y(In)d(addition)h(to)g(the)g Fh(gnu)f +Fo(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g +(bac)m(kslash)630 4560 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 +4716 y Fn(\\a)384 b Fo(alert)31 b(\(b)s(ell\))630 4872 +y Fn(\\b)384 b Fo(bac)m(kspace)630 5028 y Fn(\\d)g Fo(delete)630 +5184 y Fn(\\f)g Fo(form)30 b(feed)630 5340 y Fn(\\n)384 +b Fo(newline)p eop end +%%Page: 10 13 +TeXDict begin 10 12 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(10)630 299 y Fn(\\r)384 +b Fo(carriage)32 b(return)630 451 y Fn(\\t)384 b Fo(horizon)m(tal)32 +b(tab)630 604 y Fn(\\v)384 b Fo(v)m(ertical)32 b(tab)630 +756 y Fn(\\)p Fg(nnn)288 b Fo(the)35 b(eigh)m(t-bit)h(c)m(haracter)g +(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 +b(alue)35 b Fe(nnn)e Fo(\(one)i(to)1110 866 y(three)c(digits\))630 +1018 y Fn(\\x)p Fg(HH)288 b Fo(the)40 b(eigh)m(t-bit)h(c)m(haracter)g +(whose)e(v)-5 b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5 +b(alue)40 b Fe(HH)1110 1128 y Fo(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))630 1280 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g +(macro,)i(single)e(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to) +630 1390 y(indicate)23 b(a)e(macro)h(de\014nition.)38 +b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f +(name.)38 b(In)630 1499 y(the)22 b(macro)f(b)s(o)s(dy)-8 +b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m +(e)j(are)e(expanded.)37 b(Bac)m(kslash)630 1609 y(will)j(quote)h(an)m +(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 +b(`)p Fn(")p Fo(')h(and)g(`)p Fn(')p Fo('.)69 b(F)-8 +b(or)630 1718 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i +(mak)m(e)h(`)p Fg(C-x)j Fn(\\)p Fo(')c(insert)f(a)h(single)h(`)p +Fn(\\)p Fo(')f(in)m(to)g(the)g(line:)870 1849 y Fn("\\C-x\\\\":)45 +b("\\\\")150 2042 y Fd(1.3.2)63 b(Conditional)41 b(Init)g(Constructs) +150 2188 y Fo(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f +(in)g(spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 +2298 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g +(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s +(erformed)f(as)i(the)150 2408 y(result)f(of)h(tests.)41 +b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 +2560 y Fn($if)336 b Fo(The)31 b Fn($if)f Fo(construct)i(allo)m(ws)h +(bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g +(the)630 2670 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g +(application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test) +630 2779 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m +(haracters)i(are)f(required)e(to)i(isolate)i(it.)630 +2932 y Fn(mode)288 b Fo(The)20 b Fn(mode=)g Fo(form)g(of)h(the)g +Fn($if)f Fo(directiv)m(e)j(is)e(used)f(to)h(test)h(whether)e(Readline) +1110 3041 y(is)29 b(in)h Fn(emacs)e Fo(or)h Fn(vi)g Fo(mo)s(de.)40 +b(This)29 b(ma)m(y)h(b)s(e)e(used)h(in)g(conjunction)h(with)f(the)1110 +3151 y(`)p Fn(set)h(keymap)p Fo(')c(command,)i(for)f(instance,)i(to)f +(set)g(bindings)f(in)g(the)h Fn(emacs-)1110 3260 y(standard)23 +b Fo(and)h Fn(emacs-ctlx)f Fo(k)m(eymaps)i(only)g(if)g(Readline)h(is)f +(starting)h(out)1110 3370 y(in)k Fn(emacs)f Fo(mo)s(de.)630 +3522 y Fn(term)288 b Fo(The)26 b Fn(term=)g Fo(form)g(ma)m(y)i(b)s(e)e +(used)g(to)i(include)f(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 +3632 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f +(output)g(b)m(y)g(the)g(terminal's)1110 3742 y(function)24 +b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g +(the)g(`)p Fn(=)p Fo(')g(is)g(tested)h(against)1110 3851 +y(b)s(oth)k(the)h(full)g(name)g(of)g(the)g(terminal)h(and)e(the)i(p)s +(ortion)e(of)h(the)g(terminal)1110 3961 y(name)k(b)s(efore)f(the)g +(\014rst)g(`)p Fn(-)p Fo('.)50 b(This)33 b(allo)m(ws)i +Fn(sun)e Fo(to)h(matc)m(h)g(b)s(oth)f Fn(sun)g Fo(and)1110 +4070 y Fn(sun-cmd)p Fo(,)c(for)h(instance.)630 4223 y +Fn(application)1110 4332 y Fo(The)21 b Fe(application)j +Fo(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h +(set-)1110 4442 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h +(Readline)g(library)g(sets)g(the)g Fe(application)1110 +4551 y(name)5 b Fo(,)25 b(and)d(y)m(ou)h(can)g(test)h(for)e(a)h +(particular)h(v)-5 b(alue.)38 b(This)22 b(could)h(b)s(e)f(used)g(to) +1110 4661 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g +(for)h(a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 +4771 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey) +f(sequence)h(that)f(quotes)1110 4880 y(the)e(curren)m(t)f(or)g +(previous)g(w)m(ord)g(in)g(Bash:)1350 5011 y Fn($if)47 +b(Bash)1350 5121 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word) +1350 5230 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 5340 y($endif)p +eop end +%%Page: 11 14 +TeXDict begin 11 13 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(11)150 299 y Fn($endif)192 +b Fo(This)29 b(command,)i(as)f(seen)h(in)f(the)g(previous)g(example,)h +(terminates)g(an)g Fn($if)e Fo(command.)150 458 y Fn($else)240 +b Fo(Commands)29 b(in)h(this)h(branc)m(h)e(of)i(the)f +Fn($if)g Fo(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g(fails.) +150 618 y Fn($include)96 b Fo(This)43 b(directiv)m(e)i(tak)m(es)g(a)e +(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g(commands) +630 727 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 +b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e +(from)630 837 y(`)p Fn(/etc/inputrc)p Fo(':)870 971 y +Fn($include)46 b(/etc/inputrc)150 1171 y Fd(1.3.3)63 +b(Sample)41 b(Init)g(File)150 1318 y Fo(Here)27 b(is)f(an)h(example)g +(of)f(an)h Fe(inputrc)k Fo(\014le.)39 b(This)26 b(illustrates)h(k)m(ey) +h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 +1427 y(conditional)j(syn)m(tax.)p eop end +%%Page: 12 15 +TeXDict begin 12 14 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(12)390 408 y Fn(#)47 +b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h +(editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h +(Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) +g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g +(re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 +956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 +1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(systemwide)e(bindings) +h(and)h(variable)390 1285 y(#)g(assignments)e(from)i(/etc/Inputrc)390 +1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 +y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)390 +1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 +2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) +h(function)f(name)g(is)h(ignored)p 3971 2401 42 76 v +390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 +2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 +3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g +(previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 +3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 +3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 +3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g +(previous-history)390 4025 y("\\M-[B":)g(next-history)390 +4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) +390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 +4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g +(previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 +4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) +390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 +5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end +%%Page: 13 16 +TeXDict begin 13 15 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(13)390 299 y Fn(#"\\M-\\C-[A":)331 +b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 +628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 +y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) +g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f +(are)h(convenient)e(for)i(shell)f(interaction)390 1504 +y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 +y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 +1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 +1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 +2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 +2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g +(backslash)e(\(testing)h(backslash)f(escapes)390 2381 +y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") +390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 +2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e +(to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 +2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f +(on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f +("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 +y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h +(available)390 3587 y(set)f(bell-style)e(visible)390 +3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) +390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e +(characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g +(converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j +(convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g +(eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h +(meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 +5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f +(completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g +(he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f +(completion-query-items)42 b(150)p eop end +%%Page: 14 17 +TeXDict begin 14 16 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(14)390 299 y Fn(#)47 +b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 +628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 +847 y($endif)150 1077 y Fm(1.4)68 b(Bindable)45 b(Readline)i(Commands) +150 1237 y Fo(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e +(that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 +b(Command)150 1346 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m +(ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 +1480 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fe(p)s(oin)m(t)h +Fo(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f +Fe(mark)31 b Fo(refers)150 1590 y(to)40 b(a)f(cursor)f(p)s(osition)h +(sa)m(v)m(ed)h(b)m(y)f(the)g Fn(set-mark)d Fo(command.)66 +b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 +1699 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fe(region)p +Fo(.)150 1897 y Fd(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 +b(Mo)m(ving)150 2067 y Fn(beginning-of-line)26 b(\(C-a\))630 +2177 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g +(line.)150 2335 y Fn(end-of-line)d(\(C-e\))630 2444 y +Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 +2602 y Fn(forward-char)c(\(C-f\))630 2711 y Fo(Mo)m(v)m(e)32 +b(forw)m(ard)e(a)h(c)m(haracter.)150 2869 y Fn(backward-char)c(\(C-b\)) +630 2978 y Fo(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 +3136 y Fn(forward-word)d(\(M-f\))630 3246 y Fo(Mo)m(v)m(e)32 +b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 +3355 y(digits.)150 3513 y Fn(backward-word)27 b(\(M-b\))630 +3622 y Fo(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g +(curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 +b(are)g(comp)s(osed)630 3732 y(of)d(letters)g(and)f(digits.)150 +3889 y Fn(clear-screen)d(\(C-l\))630 3999 y Fo(Clear)g(the)g(screen)f +(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f +(curren)m(t)g(line)g(at)g(the)g(top)630 4109 y(of)k(the)f(screen.)150 +4266 y Fn(redraw-current-line)25 b(\(\))630 4376 y Fo(Refresh)30 +b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s +(ound.)150 4573 y Fd(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 +b(Manipulating)h(The)f(History)150 4744 y Fn(accept-line)27 +b(\(Newline)h(or)i(Return\))630 4854 y Fo(Accept)36 b(the)g(line)f +(regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 +b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 +4963 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e +(future)g(recall)j(with)d Fn(add_history\(\))p Fo(.)42 +b(If)31 b(this)630 5073 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h +(line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g +(state.)150 5230 y Fn(previous-history)26 b(\(C-p\))630 +5340 y Fo(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g +(fetc)m(hing)g(the)g(previous)f(command.)p eop end +%%Page: 15 18 +TeXDict begin 15 17 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(15)150 299 y Fn(next-history)27 +b(\(C-n\))630 408 y Fo(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i +(history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 +573 y Fn(beginning-of-history)25 b(\(M-<\))630 682 y +Fo(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 +b(.)150 847 y Fn(end-of-history)26 b(\(M->\))630 956 +y Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 +b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 +1121 y Fn(reverse-search-history)24 b(\(C-r\))630 1230 +y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g +(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 +1340 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m +(tal)i(searc)m(h.)150 1504 y Fn(forward-search-history)24 +b(\(C-s\))630 1614 y Fo(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g +(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the) +h(the)630 1724 y(history)g(as)h(necessary)-8 b(.)41 b(This)30 +b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1888 y Fn +(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 +b(\(M-p\))630 1998 y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g +(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g +(his-)630 2107 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m +(tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 +2217 y(user.)150 2381 y Fn(non-incremental-forward-)o(sear)o(ch-h)o +(ist)o(ory)24 b(\(M-n\))630 2491 y Fo(Searc)m(h)30 b(forw)m(ard)f +(starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn') +f(through)g(the)h(the)630 2600 y(history)d(as)f(necessary)i(using)e(a)h +(non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i +(the)630 2710 y(user.)150 2874 y Fn(history-search-forward)d(\(\))630 +2984 y Fo(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g +(the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 +3093 y(start)36 b(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m +(t.)55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 3203 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +3367 y Fn(history-search-backward)24 b(\(\))630 3477 +y Fo(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g +(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 +3587 y(start)g(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m(t.) +55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 3696 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +3861 y Fn(yank-nth-arg)c(\(M-C-y\))630 3970 y Fo(Insert)37 +b(the)g(\014rst)f(argumen)m(t)i(to)f(the)h(previous)e(command)h +(\(usually)g(the)g(second)g(w)m(ord)630 4080 y(on)32 +b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 +b(an)g(argumen)m(t)g Fe(n)p Fo(,)g(insert)g(the)g Fe(n)p +Fo(th)f(w)m(ord)g(from)630 4189 y(the)k(previous)f(command)h(\(the)g(w) +m(ords)g(in)f(the)h(previous)g(command)f(b)s(egin)h(with)f(w)m(ord)630 +4299 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f +Fe(n)p Fo(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 +4408 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fe(n)e +Fo(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 +4518 y(the)e(`)p Fn(!)p Fg(n)11 b Fo(')29 b(history)i(expansion)f(had)g +(b)s(een)f(sp)s(eci\014ed.)150 4682 y Fn(yank-last-arg)e(\(M-.)i(or)h +(M-_\))630 4792 y Fo(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous) +f(command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 +4902 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m +(t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fn(yank-nth-arg)p +Fo(.)630 5011 y(Successiv)m(e)26 b(calls)g(to)f Fn(yank-last-arg)c +Fo(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i +(inserting)630 5121 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) +s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i +(of)f(eac)m(h)h(line)630 5230 y(in)36 b(turn.)58 b(An)m(y)36 +b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g +(calls)h(determines)630 5340 y(the)d(direction)g(to)h(mo)m(v)m(e)g +(through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e +(switc)m(hes)h(the)p eop end +%%Page: 16 19 +TeXDict begin 16 18 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(16)630 299 y(direction)23 +b(through)g(the)g(history)f(\(bac)m(k)i(or)f(forw)m(ard\).)38 +b(The)22 b(history)h(expansion)g(facilities)630 408 y(are)28 +b(used)f(to)h(extract)h(the)f(last)g(argumen)m(t,)h(as)e(if)h(the)g(`)p +Fn(!$)p Fo(')f(history)g(expansion)h(had)f(b)s(een)630 +518 y(sp)s(eci\014ed.)150 727 y Fd(1.4.3)63 b(Commands)42 +b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 904 y Fn(delete-char)27 +b(\(C-d\))630 1014 y Fo(Delete)41 b(the)e(c)m(haracter)i(at)e(p)s(oin)m +(t.)66 b(If)39 b(p)s(oin)m(t)f(is)h(at)h(the)f(b)s(eginning)f(of)h(the) +g(line,)j(there)630 1124 y(are)37 b(no)g(c)m(haracters)i(in)d(the)i +(line,)h(and)d(the)h(last)h(c)m(haracter)h(t)m(yp)s(ed)e(w)m(as)g(not)g +(b)s(ound)e(to)630 1233 y Fn(delete-char)p Fo(,)28 b(then)i(return)f +Fh(eof)p Fo(.)150 1403 y Fn(backward-delete-char)c(\(Rubout\))630 +1512 y Fo(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 +b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 +1622 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 +1792 y Fn(forward-backward-delete-)o(char)24 b(\(\))630 +1901 y Fo(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h +(unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 +2011 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s +(ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 +2120 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 +2290 y Fn(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 2399 +y Fo(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h +(v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 +2509 y(sequences)d(lik)m(e)g Fg(C-q)p Fo(,)f(for)g(example.)150 +2679 y Fn(tab-insert)e(\(M-TAB\))630 2788 y Fo(Insert)i(a)h(tab)f(c)m +(haracter.)150 2958 y Fn(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o +(\))630 3067 y Fo(Insert)g(y)m(ourself.)150 3237 y Fn(transpose-chars)c +(\(C-t\))630 3347 y Fo(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g +(cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g +(cursor,)630 3456 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m +(ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) +g(of)h(the)630 3566 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h +(last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 +b(Negativ)m(e)25 b(argumen)m(ts)630 3675 y(ha)m(v)m(e)32 +b(no)e(e\013ect.)150 3845 y Fn(transpose-words)c(\(M-t\))630 +3955 y Fo(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g +(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past) +g(that)630 4064 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 +b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i(the)f +(line,)i(this)e(transp)s(oses)g(the)630 4174 y(last)j(t)m(w)m(o)h(w)m +(ords)e(on)g(the)h(line.)150 4343 y Fn(upcase-word)c(\(M-u\))630 +4453 y Fo(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i +(w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 +4562 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h +(the)e(cursor.)150 4732 y Fn(downcase-word)d(\(M-l\))630 +4842 y Fo(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i +(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m +(ercase)630 4951 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m +(v)m(e)i(the)f(cursor.)150 5121 y Fn(capitalize-word)26 +b(\(M-c\))630 5230 y Fo(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m +(wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h +(capitalize)630 5340 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f +(mo)m(v)m(e)i(the)f(cursor.)p eop end +%%Page: 17 20 +TeXDict begin 17 19 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fn(overwrite-mode)26 +b(\(\))630 408 y Fo(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 +b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) +h(switc)m(hes)630 518 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 +b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m +(t,)i(switc)m(hes)e(to)630 628 y(insert)30 b(mo)s(de.)41 +b(This)30 b(command)h(a\013ects)h(only)e Fn(emacs)f Fo(mo)s(de;)i +Fn(vi)f Fo(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 737 +y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f +Fn(readline\(\))c Fo(starts)k(in)f(insert)g(mo)s(de.)630 +872 y(In)e(o)m(v)m(erwrite)j(mo)s(de,)e(c)m(haracters)i(b)s(ound)c(to)j +Fn(self-insert)c Fo(replace)k(the)g(text)g(at)g(p)s(oin)m(t)630 +982 y(rather)41 b(than)h(pushing)e(the)i(text)g(to)g(the)g(righ)m(t.)75 +b(Characters)42 b(b)s(ound)d(to)j Fn(backward-)630 1092 +y(delete-char)27 b Fo(replace)32 b(the)e(c)m(haracter)i(b)s(efore)e(p)s +(oin)m(t)h(with)f(a)g(space.)630 1227 y(By)h(default,)f(this)h(command) +f(is)g(un)m(b)s(ound.)150 1427 y Fd(1.4.4)63 b(Killing)42 +b(And)e(Y)-10 b(anking)150 1600 y Fn(kill-line)28 b(\(C-k\))630 +1709 y Fo(Kill)j(the)f(text)i(from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of) +i(the)f(line.)150 1870 y Fn(backward-kill-line)25 b(\(C-x)30 +b(Rubout\))630 1980 y Fo(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s +(eginning)g(of)g(the)h(line.)150 2140 y Fn(unix-line-discard)26 +b(\(C-u\))630 2250 y Fo(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor) +f(to)h(the)f(b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 +2411 y Fn(kill-whole-line)c(\(\))630 2520 y Fo(Kill)37 +b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g +(where)f(p)s(oin)m(t)h(is.)59 b(By)36 b(default,)630 +2630 y(this)30 b(is)h(un)m(b)s(ound.)150 2790 y Fn(kill-word)d(\(M-d\)) +630 2900 y Fo(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f +(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h +(the)g(end)630 3010 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fn(forward-word)p +Fo(.)150 3170 y Fn(backward-kill-word)25 b(\(M-DEL\))630 +3280 y Fo(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 +b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g +Fn(backward-word)p Fo(.)150 3441 y Fn(unix-word-rubout)d(\(C-w\))630 +3550 y Fo(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f +(white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 +b(The)31 b(killed)630 3660 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f +(kill-ring.)150 3820 y Fn(unix-filename-rubout)25 b(\(\))630 +3930 y Fo(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e +(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 +4040 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g +(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 4200 y Fn +(delete-horizontal-space)24 b(\(\))630 4310 y Fo(Delete)33 +b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 +b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 4471 +y Fn(kill-region)d(\(\))630 4580 y Fo(Kill)k(the)f(text)i(in)e(the)g +(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) +m(b)s(ound.)150 4741 y Fn(copy-region-as-kill)25 b(\(\))630 +4851 y Fo(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f +(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f +(a)m(w)m(a)m(y)-8 b(.)630 4960 y(By)31 b(default,)f(this)h(command)f +(is)g(un)m(b)s(ound.)150 5121 y Fn(copy-backward-word)25 +b(\(\))630 5230 y Fo(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m +(t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) +f(are)i(the)630 5340 y(same)31 b(as)f Fn(backward-word)p +Fo(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)p +eop end +%%Page: 18 21 +TeXDict begin 18 20 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(18)150 299 y Fn(copy-forward-word) +26 b(\(\))630 408 y Fo(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s +(oin)m(t)f(to)h(the)f(kill)h(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s +(oundaries)e(are)j(the)630 518 y(same)f(as)f Fn(forward-word)p +Fo(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 +684 y Fn(yank)f(\(C-y\))630 793 y Fo(Y)-8 b(ank)31 b(the)f(top)h(of)g +(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h(p)s(oin)m(t.)150 +959 y Fn(yank-pop)d(\(M-y\))630 1068 y Fo(Rotate)36 b(the)f(kill-ring,) +i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 +b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 1178 +y(command)30 b(is)h Fn(yank)e Fo(or)h Fn(yank-pop)p Fo(.)150 +1383 y Fd(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m(ts)150 +1558 y Fn(digit-argument)26 b(\()p Fg(M-0)p Fn(,)j Fg(M-1)p +Fn(,)h(...)f Fg(M--)p Fn(\))630 1668 y Fo(Add)d(this)h(digit)g(to)h +(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f(new) +f(argumen)m(t.)630 1777 y Fg(M--)j Fo(starts)i(a)g(negativ)m(e)i +(argumen)m(t.)150 1943 y Fn(universal-argument)25 b(\(\))630 +2052 y Fo(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g +(argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m +(y)f(one)630 2162 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h +(leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 +2271 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) +m(y)f(digits,)i(executing)f Fn(universal-argument)630 +2381 y Fo(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h +(otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 +2491 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) +d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 +2600 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e +(the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630 +2710 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f +(executing)g(this)f(function)g(the)h(\014rst)e(time)630 +2819 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e +(time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 +2929 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h +(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3134 y Fd(1.4.6)63 +b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 +b(Y)-10 b(ou)150 3309 y Fn(complete)28 b(\(TAB\))630 +3419 y Fo(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g +(b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 +3528 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 +b(The)30 b(default)h(is)f(\014lename)h(completion.)150 +3694 y Fn(possible-completions)25 b(\(M-?\))630 3804 +y Fo(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s +(efore)e(p)s(oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 +3913 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i +(columns)f(used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 +b(alue)33 b(of)630 4023 y Fn(completion-display-width)o +Fo(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 +b(ariable)38 b Fn(COLUMNS)p Fo(,)630 4132 y(or)30 b(the)h(screen)f +(width,)g(in)g(that)h(order.)150 4298 y Fn(insert-completions)25 +b(\(M-*\))630 4407 y Fo(Insert)30 b(all)h(completions)h(of)f(the)g +(text)g(b)s(efore)f(p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s +(een)e(generated)630 4517 y(b)m(y)g Fn(possible-completions)p +Fo(.)150 4682 y Fn(menu-complete)d(\(\))630 4792 y Fo(Similar)d(to)g +Fn(complete)p Fo(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f +(completed)i(with)e(a)i(single)f(matc)m(h)630 4902 y(from)37 +b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 +b(execution)g(of)f Fn(menu-complete)630 5011 y Fo(steps)i(through)g +(the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i +(matc)m(h)f(in)f(turn.)630 5121 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g +(of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 +b(ject)36 b(to)i(the)f(setting)630 5230 y(of)f Fn(bell-style)p +Fo(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 +b(An)36 b(argumen)m(t)h(of)f Fe(n)f Fo(mo)m(v)m(es)i +Fe(n)630 5340 y Fo(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e +(matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f +(used)g(to)p eop end +%%Page: 19 22 +TeXDict begin 19 21 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(19)630 299 y(mo)m(v)m(e)40 +b(bac)m(kw)m(ard)e(through)g(the)g(list.)65 b(This)38 +b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s(ound)e(to)630 +408 y Fn(TAB)p Fo(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m(y)i(default.) +150 554 y Fn(menu-complete-backward)24 b(\(\))630 664 +y Fo(Iden)m(tical)36 b(to)g Fn(menu-complete)p Fo(,)d(but)h(mo)m(v)m +(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g(p)s(ossible)630 +773 y(completions,)d(as)e(if)h Fn(menu-complete)26 b +Fo(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 +919 y Fn(delete-char-or-list)25 b(\(\))630 1028 y Fo(Deletes)k(the)e(c) +m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)g(b)s(eginning) +g(or)f(end)h(of)g(the)g(line)630 1138 y(\(lik)m(e)k Fn(delete-char)p +Fo(\).)37 b(If)29 b(at)h(the)f(end)f(of)i(the)f(line,)h(b)s(eha)m(v)m +(es)g(iden)m(tically)h(to)e Fn(possible-)630 1247 y(completions)p +Fo(.)38 b(This)29 b(command)h(is)h(un)m(b)s(ound)d(b)m(y)i(default.)150 +1433 y Fd(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 1598 +y Fn(start-kbd-macro)26 b(\(C-x)j(\(\))630 1707 y Fo(Begin)i(sa)m(ving) +h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m(to)h(the)g(curren)m(t)f(k)m +(eyb)s(oard)g(macro.)150 1853 y Fn(end-kbd-macro)d(\(C-x)i(\)\))630 +1962 y Fo(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m +(to)i(the)e(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i +(the)630 2072 y(de\014nition.)150 2218 y Fn(call-last-kbd-macro)c +(\(C-x)k(e\))630 2327 y Fo(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard) +f(macro)h(de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the) +630 2437 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m +(eyb)s(oard.)150 2622 y Fd(1.4.8)63 b(Some)41 b(Miscellaneous)i +(Commands)150 2787 y Fn(re-read-init-file)26 b(\(C-x)j(C-r\))630 +2897 y Fo(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g +Fe(inputrc)27 b Fo(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d +(or)i(v)-5 b(ariable)630 3006 y(assignmen)m(ts)31 b(found)e(there.)150 +3152 y Fn(abort)g(\(C-g\))630 3261 y Fo(Ab)s(ort)d(the)h(curren)m(t)f +(editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 +b(ject)26 b(to)i(the)630 3371 y(setting)j(of)g Fn(bell-style)p +Fo(\).)150 3516 y Fn(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p +Fg(x)11 b Fn(,)29 b(...)o(\))630 3626 y Fo(If)e(the)h(meta\014ed)g(c)m +(haracter)h Fe(x)34 b Fo(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g +(command)h(that)g(is)g(b)s(ound)d(to)k(the)630 3736 y(corresp)s(onding) +g(upp)s(ercase)h(c)m(haracter.)150 3881 y Fn(prefix-meta)d(\(ESC\))630 +3991 y Fo(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 +b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 +b(.)630 4100 y(T)m(yping)30 b(`)p Fn(ESC)g(f)p Fo(')g(is)h(equiv)-5 +b(alen)m(t)31 b(to)g(t)m(yping)g Fg(M-f)p Fo(.)150 4246 +y Fn(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 4355 y Fo(Incremen)m(tal)h +(undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 +4501 y Fn(revert-line)27 b(\(M-r\))630 4611 y Fo(Undo)33 +b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 +b(is)h(lik)m(e)i(executing)f(the)f Fn(undo)f Fo(command)630 +4720 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) +150 4866 y Fn(tilde-expand)d(\(M-~\))630 4975 y Fo(P)m(erform)j(tilde)h +(expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 5121 +y Fn(set-mark)d(\(C-@\))630 5230 y Fo(Set)33 b(the)g(mark)f(to)i(the)f +(p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g +(supplied,)f(the)h(mark)g(is)f(set)630 5340 y(to)f(that)g(p)s(osition.) +p eop end +%%Page: 20 23 +TeXDict begin 20 22 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fn +(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 408 +y Fo(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 +b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h +(sa)m(v)m(ed)630 518 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s +(osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 711 +y Fn(character-search)26 b(\(C-]\))630 821 y Fo(A)f(c)m(haracter)h(is)f +(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s +(ccurrence)g(of)g(that)g(c)m(haracter.)630 930 y(A)30 +b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s +(ccurrences.)150 1123 y Fn(character-search-backwar)o(d)24 +b(\(M-C-]\))630 1233 y Fo(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s +(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) +g(that)630 1342 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f +(searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 +1535 y Fn(skip-csi-sequence)d(\(\))630 1645 y Fo(Read)i(enough)f(c)m +(haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f +(as)g(those)h(de\014ned)630 1754 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g +(and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m +(trol)g(Sequence)630 1864 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 +b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fn("\\)p +Fo(e[)p Fn(")p Fo(,)g(k)m(eys)f(pro-)630 1973 y(ducing)31 +b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e +(explicitly)j(b)s(ound)c(to)i(a)h(readline)630 2083 y(command,)f +(instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f +(editing)h(bu\013er.)44 b(This)31 b(is)630 2193 y(un)m(b)s(ound)d(b)m +(y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 +2385 y Fn(insert-comment)26 b(\(M-#\))630 2495 y Fo(Without)36 +b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 +b(of)g(the)g Fn(comment-begin)c Fo(v)-5 b(ariable)36 +b(is)g(in-)630 2605 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f +(curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g +(supplied,)630 2714 y(this)k(command)h(acts)g(as)g(a)g(toggle:)55 +b(if)37 b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g +(line)630 2824 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 +b(alue)31 b(of)f Fn(comment-begin)p Fo(,)e(the)i(v)-5 +b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 2933 +y(c)m(haracters)42 b(in)d Fn(comment-begin)e Fo(are)j(deleted)h(from)f +(the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 3043 +y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h +(newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 3236 y Fn(dump-functions)d +(\(\))630 3345 y Fo(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g +(their)g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 +3455 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h +(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 +3565 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fe(inputrc)k +Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k +(default.)150 3757 y Fn(dump-variables)26 b(\(\))630 +3867 y Fo(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 +b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h +(output)f(stream.)630 3977 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is) +g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a) +m(y)g(that)630 4086 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h +Fe(inputrc)k Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c +(b)m(y)k(default.)150 4279 y Fn(dump-macros)c(\(\))630 +4389 y Fo(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences) +f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 +4498 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e +(supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 +4608 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e +Fe(inputrc)35 b Fo(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) +d(b)m(y)630 4717 y(default.)150 4910 y Fn(emacs-editing-mode)e(\(C-e\)) +630 5020 y Fo(When)30 b(in)g Fn(vi)g Fo(command)g(mo)s(de,)g(this)h +(causes)f(a)h(switc)m(h)g(to)g Fn(emacs)e Fo(editing)i(mo)s(de.)150 +5213 y Fn(vi-editing-mode)26 b(\(M-C-j\))630 5322 y Fo(When)k(in)g +Fn(emacs)f Fo(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g +Fn(vi)f Fo(editing)h(mo)s(de.)p eop end +%%Page: 21 24 +TeXDict begin 21 23 bop 150 -116 a Fo(Chapter)30 b(1:)41 +b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fm(1.5)68 +b(Readline)47 b(vi)e(Mo)t(de)150 458 y Fo(While)32 b(the)g(Readline)g +(library)f(do)s(es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g +Fn(vi)f Fo(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 +568 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 +b(The)34 b(Readline)g Fn(vi)g Fo(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s +(eci\014ed)f(in)150 677 y(the)e Fh(posix)e Fo(standard.)275 +812 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m +(een)d Fn(emacs)f Fo(and)g Fn(vi)h Fo(editing)g(mo)s(des,)g(use)g(the)g +(command)150 922 y Fg(M-C-j)36 b Fo(\(b)s(ound)h(to)h(emacs-editing-mo) +s(de)i(when)d(in)g Fn(vi)h Fo(mo)s(de)f(and)g(to)i(vi-editing-mo)s(de)g +(in)e Fn(emacs)150 1031 y Fo(mo)s(de\).)k(The)30 b(Readline)h(default)f +(is)g Fn(emacs)f Fo(mo)s(de.)275 1166 y(When)g(y)m(ou)i(en)m(ter)f(a)h +(line)f(in)g Fn(vi)f Fo(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f +(in)g(`insertion')g(mo)s(de,)g(as)h(if)f(y)m(ou)150 1275 +y(had)f(t)m(yp)s(ed)g(an)g(`)p Fn(i)p Fo('.)41 b(Pressing)29 +b Fn(ESC)f Fo(switc)m(hes)i(y)m(ou)g(in)m(to)h(`command')e(mo)s(de,)h +(where)e(y)m(ou)i(can)g(edit)g(the)150 1385 y(text)35 +b(of)f(the)g(line)g(with)f(the)h(standard)f Fn(vi)g Fo(mo)m(v)m(emen)m +(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g(history)f(lines)h(with)150 +1494 y(`)p Fn(k)p Fo(')d(and)e(subsequen)m(t)h(lines)h(with)f(`)p +Fn(j)p Fo(',)g(and)g(so)h(forth.)p eop end +%%Page: 22 25 +TeXDict begin 22 24 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(22)150 299 y Fk(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 +b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fo(V)-8 +b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 +635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fl(\015)e +Fo(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 +b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 +y Fn(http://fsf.org/)390 964 y Fo(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f +(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 +1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f +(is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 +1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g +(a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1450 y(useful)29 b(do)s(cumen)m(t)h Fe(free)36 b Fo(in)29 +b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j +(the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 +y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)p eop end +%%Page: 23 26 +TeXDict begin 23 25 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(23)330 299 y(under)26 b(this)i(License.)40 b(If)27 +b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) +g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 +b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) +j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f +(Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 +b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 +b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m +(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m +(ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g +(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 +b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s +(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g +(public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s +(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) +f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g +(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g +(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 +y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g +(formatters)f(or)g(for)g(automatic)i(translation)f(to)330 +1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) +g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g +(otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g +(whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f +(arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g +(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 +b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 +b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g +(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g +(is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i +(\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) +-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fh(asci)r(i)g +Fo(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j +(LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j +Fc(SGML)f Fo(or)f Fc(XML)g Fo(using)g(a)g(publicly)330 +2504 y(a)m(v)-5 b(ailable)42 b Fc(DTD)p Fo(,)g(and)d +(standard-conforming)h(simple)g Fc(HTML)p Fo(,)g(P)m(ostScript)h(or)f +Fc(PDF)g Fo(designed)330 2614 y(for)e(h)m(uman)g(mo)s(di\014cation.)65 +b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g +Fc(PNG)p Fo(,)h Fc(X)n(CF)330 2724 y Fo(and)h Fc(JPG)p +Fo(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can) +f(b)s(e)f(read)g(and)h(edited)330 2833 y(only)54 b(b)m(y)f(proprietary) +h(w)m(ord)f(pro)s(cessors,)59 b Fc(SGML)54 b Fo(or)f +Fc(XML)h Fo(for)g(whic)m(h)f(the)h Fc(DTD)g Fo(and/or)330 +2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5 +b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j +Fc(HTML)p Fo(,)330 3052 y(P)m(ostScript)31 b(or)f Fc(PDF)h +Fo(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s(cessors)g(for)g(output) +g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i +(means,)e(for)f(a)h(prin)m(ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f +(itself,)h(plus)e(suc)m(h)f(follo)m(wing)330 3313 y(pages)28 +b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 +b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f(in)h +(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g +(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e(title)j(page)e +(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i +(near)e(the)h(most)g(prominen)m(t)g(app)s(earance)f(of)h(the)g(w)m +(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h +(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h +(an)m(y)f(p)s(erson)g(or)h(en)m(tit)m(y)h(that)f(distributes)f(copies)i +(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 +4052 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g +(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 +4162 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m +(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 +4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g +(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m +(h)330 4381 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e +(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 +b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g +(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e +(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g +(according)g(to)g(this)g(de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t) +i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) +g(the)g(notice)h(whic)m(h)e(states)i(that)330 4861 y(this)34 +b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 +b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 +4970 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j +(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 +5080 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 +b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g +(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h +(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 +b(COPYING)p eop end +%%Page: 24 27 +TeXDict begin 24 26 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(24)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h +(the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h +(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 +b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j +(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e +(License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e +(in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h +(other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f +(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 +737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h +(the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 +847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 +b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d +(copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f +(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g +(the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 +y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 +y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 +b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 +2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 +b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g +(added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 +4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g +(con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 +4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g +(the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 +b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 +b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e +(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 +5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m +(ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 +b(,)p eop end +%%Page: 25 28 +TeXDict begin 25 27 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(25)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g +(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) +h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) +i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 +545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h +(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c +(for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g +(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h +(\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s +(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g +(few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g +(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m +(tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 +b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h +(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 +b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p +eop end +%%Page: 26 29 +TeXDict begin 26 28 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(26)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 +b(ersion's)36 b(license)g(notice.)57 b(These)330 408 +y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g +(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) +i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g +(nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s +(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 +b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 +y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) +m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 +880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 +b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m +(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 +b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e +(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i +(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s +(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f +(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m +(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 +y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) +g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) +g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g +(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m +(y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m +(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g +(not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) +f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 +1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g +(Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 +b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3455 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m +(um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 +3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h +(com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 +b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 +4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end +%%Page: 27 30 +TeXDict begin 27 29 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(27)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h +(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f +(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) +s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h +(on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g +(is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i +(resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g +(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e +(b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g +(aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g +(other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h +(not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h +(Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 +b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e +(translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 +b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 +b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g +(cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 +3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) +i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 +3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i +(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h +(particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h +(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g +(cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h +(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 +b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 +b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h +(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 +y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d +(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h +(reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h +(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g +(reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m +(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f +(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 +4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g +(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h +(of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 +b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h +(terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 +b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g +(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) +330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g +(reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f +(the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f +(an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end +%%Page: 28 31 +TeXDict begin 28 30 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(28)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 +433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 +b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g +(the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 +b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 +b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 +653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f +(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 +762 y(See)c Fn(http://www.gnu.org/copy)o(left)o(/)p Fo(.)330 +897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g +(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 +b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g +(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h +(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 +b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i +(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 +b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f +(can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f +(License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) +m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m +(tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g +(for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 +2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) +e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 +2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m +(table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h +(facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g +(w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i +(edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 +b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s +(oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 +2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m +(orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 +2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m +(ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 +2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) +g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 +2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 +b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) +f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g +(organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e +(or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h +(as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 +3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h +(licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 +3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h +(License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 +3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f +(part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) +330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j +(w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s +(er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h +(Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) +g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g +(time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) +330 4005 y(eligible)h(for)e(relicensing.)p eop end +%%Page: 29 32 +TeXDict begin 29 31 bop 150 -116 a Fo(App)s(endix)29 +b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 +b(29)150 299 y Fm(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f +(for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fo(T)-8 b(o)35 +b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) +i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 +568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) +m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 +680 y Fb(Copyright)42 b(\(C\))79 b Fa(year)88 b(your)40 +b(name)9 b Fb(.)468 767 y(Permission)42 b(is)e(granted)g(to)g(copy,)h +(distribute)g(and/or)g(modify)f(this)g(document)468 854 +y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i +(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h +(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 +1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g +(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f +(license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 +1203 y(Free)g(Documentation)h(License''.)275 1337 y Fo(If)d(y)m(ou)h +(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 +b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k +(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 +b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 +1559 y Fb(with)40 b(the)g(Invariant)h(Sections)g(being)g +Fa(list)f(their)g(titles)9 b Fb(,)41 b(with)547 1646 +y(the)f(Front-Cover)i(Texts)e(being)g Fa(list)9 b Fb(,)40 +b(and)g(with)g(the)g(Back-Cover)i(Texts)547 1733 y(being)e +Fa(list)9 b Fb(.)275 1868 y Fo(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 +b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 +1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e +(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f +(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m +(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g +(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h +(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 +b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m +(w)m(are.)p eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/readline-6.2/doc/rluserman.texi b/readline-6.2/doc/rluserman.texi new file mode 100644 index 0000000..3d54520 --- /dev/null +++ b/readline-6.2/doc/rluserman.texi @@ -0,0 +1,83 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header (This is for running Texinfo on a region.) +@setfilename rluserman.info +@settitle GNU Readline Library +@comment %**end of header (This is for running Texinfo on a region.) + +@include version.texi + +@copying +This manual describes the end user interface of the GNU Readline Library +(version @value{VERSION}, @value{UPDATED}), a library which aids in the +consistency of user interface across discrete programs which provide +a command line interface. + +Copyright @copyright{} 1988--2011 Free Software Foundation, Inc. + +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. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', +and with the Back-Cover Texts as in (a) below. A copy of the license is +included in the section entitled ``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: You are free to copy and modify +this GNU manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' + +@end quotation +@end copying + +@dircategory Libraries +@direntry +* RLuserman: (rluserman). The GNU readline library User's Manual. +@end direntry + +@titlepage +@title GNU Readline Library User Interface +@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. +@subtitle @value{UPDATED-MONTH} +@author Chet Ramey, Case Western Reserve University +@author Brian Fox, Free Software Foundation + +@page +@vskip 0pt plus 1filll +@insertcopying + +@sp 1 +Published by the Free Software Foundation @* +59 Temple Place, Suite 330, @* +Boston, MA 02111-1307 @* +USA @* + +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU Readline Library + +This document describes the end user interface of the GNU Readline Library, +a utility which aids in the consistency of user interface across discrete +programs which provide a command line interface. + +@menu +* Command Line Editing:: GNU Readline User's Manual. +* GNU Free Documentation License:: License for copying this manual. +@end menu +@end ifnottex + +@include rluser.texi + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@include fdl.texi + +@bye diff --git a/readline-6.2/doc/texi2dvi b/readline-6.2/doc/texi2dvi new file mode 100755 index 0000000..a9165a5 --- /dev/null +++ b/readline-6.2/doc/texi2dvi @@ -0,0 +1,658 @@ +#! /bin/sh +# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources. +# $Id$ +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, +# 2002, 2003 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Original author: Noah Friedman <friedman@gnu.org>. +# +# Please send bug reports, etc. to bug-texinfo@gnu.org. +# If possible, please send a copy of the output of the script called with +# the `--debug' option when making a bug report. + +# This string is expanded by rcs automatically when this file is checked out. +rcs_revision='$Revision$' +rcs_version=`set - $rcs_revision; echo $2` +program=`echo $0 | sed -e 's!.*/!!'` +version="texi2dvi (GNU Texinfo 4.5) $rcs_version + +Copyright (C) 2003 Free Software Foundation, Inc. +There is NO warranty. You may redistribute this software +under the terms of the GNU General Public License. +For more information about these matters, see the files named COPYING." + +usage="Usage: $program [OPTION]... FILE... + +Run each Texinfo or LaTeX FILE through TeX in turn until all +cross-references are resolved, building all indices. The directory +containing each FILE is searched for included files. The suffix of FILE +is used to determine its language (LaTeX or Texinfo). + +Makeinfo is used to perform Texinfo macro expansion before running TeX +when needed. + +Operation modes: + -b, --batch no interaction + -c, --clean remove all auxiliary files + -D, --debug turn on shell debugging (set -x) + -h, --help display this help and exit successfully + -o, --output=OFILE leave output in OFILE (implies --clean); + Only one input FILE may be specified in this case + -q, --quiet no output unless errors (implies --batch) + -s, --silent same as --quiet + -v, --version display version information and exit successfully + -V, --verbose report on what is done + +TeX tuning: + -@ use @input instead of \input; for preloaded Texinfo + -e, -E, --expand force macro expansion using makeinfo + -I DIR search DIR for Texinfo files + -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo) + -p, --pdf use pdftex or pdflatex for processing + -t, --texinfo=CMD insert CMD after @setfilename in copy of input file + multiple values accumulate + +The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO, +TEX (or PDFTEX), and TEXINDEX environment variables are used to run +those commands, if they are set. + +Email bug reports to <bug-texinfo@gnu.org>, +general questions and discussion to <help-texinfo@gnu.org>. +Texinfo home page: http://www.gnu.org/software/texinfo/" + +# Initialize variables for option overriding and otherwise. +# Don't use `unset' since old bourne shells don't have this command. +# Instead, assign them an empty value. +batch=false # eval for batch mode +clean= +debug= +escape='\' +expand= # t for expansion via makeinfo +miincludes= # makeinfo include path +oformat=dvi +oname= # --output +quiet= # by default let the tools' message be displayed +set_language= +textra= +tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems. +txincludes= # TEXINPUTS extensions, with trailing colon +txiprereq=19990129 # minimum texinfo.tex version to have macro expansion +verbose=false # echo for verbose mode + +orig_pwd=`pwd` + +# Systems which define $COMSPEC or $ComSpec use semicolons to separate +# directories in TEXINPUTS. +if test -n "$COMSPEC$ComSpec"; then + path_sep=";" +else + path_sep=":" +fi + +# Pacify verbose cds. +CDPATH=${ZSH_VERSION+.}$path_sep + +# In case someone crazy insists on using grep -E. +: ${EGREP=egrep} + +# Save this so we can construct a new TEXINPUTS path for each file. +TEXINPUTS_orig="$TEXINPUTS" +# Unfortunately makeindex does not read TEXINPUTS. +INDEXSTYLE_orig="$INDEXSTYLE" +export TEXINPUTS INDEXSTYLE + +# Push a token among the arguments that will be used to notice when we +# ended options/arguments parsing. +# Use "set dummy ...; shift" rather than 'set - ..." because on +# Solaris set - turns off set -x (but keeps set -e). +# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3 +# still expand "$@" to a single argument (the empty string) rather +# than nothing at all. +arg_sep="$$--$$" +set dummy ${1+"$@"} "$arg_sep"; shift + +# +# Parse command line arguments. +while test x"$1" != x"$arg_sep"; do + + # Handle --option=value by splitting apart and putting back on argv. + case "$1" in + --*=*) + opt=`echo "$1" | sed -e 's/=.*//'` + val=`echo "$1" | sed -e 's/[^=]*=//'` + shift + set dummy "$opt" "$val" ${1+"$@"}; shift + ;; + esac + + # This recognizes --quark as --quiet. So what. + case "$1" in + -@ ) escape=@;; + # Silently and without documentation accept -b and --b[atch] as synonyms. + -b | --b*) batch=eval;; + -q | -s | --q* | --s*) quiet=t; batch=eval;; + -c | --c*) clean=t;; + -D | --d*) debug=t;; + -e | -E | --e*) expand=t;; + -h | --h*) echo "$usage"; exit 0;; + -I | --I*) + shift + miincludes="$miincludes -I $1" + txincludes="$txincludes$1$path_sep" + ;; + -l | --l*) shift; set_language=$1;; + -o | --o*) + shift + clean=t + case "$1" in + /* | ?:/*) oname=$1;; + *) oname="$orig_pwd/$1";; + esac;; + -p | --p*) oformat=pdf;; + -t | --t*) shift; textra="$textra\\ +$1";; + -v | --vers*) echo "$version"; exit 0;; + -V | --verb*) verbose=echo;; + --) # What remains are not options. + shift + while test x"$1" != x"$arg_sep"; do + set dummy ${1+"$@"} "$1"; shift + shift + done + break;; + -*) + echo "$0: Unknown or ambiguous option \`$1'." >&2 + echo "$0: Try \`--help' for more information." >&2 + exit 1;; + *) set dummy ${1+"$@"} "$1"; shift;; + esac + shift +done +# Pop the token +shift + +# Interpret remaining command line args as filenames. +case $# in + 0) + echo "$0: Missing file arguments." >&2 + echo "$0: Try \`--help' for more information." >&2 + exit 2 + ;; + 1) ;; + *) + if test -n "$oname"; then + echo "$0: Can't use option \`--output' with more than one argument." >&2 + exit 2 + fi + ;; +esac + +# Prepare the temporary directory. Remove it at exit, unless debugging. +if test -z "$debug"; then + trap "cd / && rm -rf $tmpdir" 0 1 2 15 +fi + +# Create the temporary directory with strict rights +(umask 077 && mkdir $tmpdir) || exit 1 + +# Prepare the tools we might need. This may be extra work in some +# cases, but improves the readibility of the script. +utildir=$tmpdir/utils +mkdir $utildir || exit 1 + +# A sed script that preprocesses Texinfo sources in order to keep the +# iftex sections only. We want to remove non TeX sections, and +# comment (with `@c texi2dvi') TeX sections so that makeinfo does not +# try to parse them. Nevertheless, while commenting TeX sections, +# don't comment @macro/@end macro so that makeinfo does propagate +# them. Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo +# doesn't work well enough (yet) to use that, so work around with sed. +comment_iftex_sed=$utildir/comment.sed +cat <<EOF >$comment_iftex_sed +/^@tex/,/^@end tex/{ + s/^/@c texi2dvi/ +} +/^@iftex/,/^@end iftex/{ + s/^/@c texi2dvi/ + /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{ + s/^@c texi2dvi// + } +} +/^@html/,/^@end html/{ + s/^/@c (texi2dvi)/ +} +/^@ifhtml/,/^@end ifhtml/{ + s/^/@c (texi2dvi)/ +} +/^@ifnottex/,/^@end ifnottex/{ + s/^/@c (texi2dvi)/ +} +/^@ifinfo/,/^@end ifinfo/{ + /^@node/p + /^@menu/,/^@end menu/p + t + s/^/@c (texi2dvi)/ +} +s/^@ifnotinfo/@c texi2dvi@ifnotinfo/ +s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/ +EOF +# Uncommenting is simple: Remove any leading `@c texi2dvi'. +uncomment_iftex_sed=$utildir/uncomment.sed +cat <<EOF >$uncomment_iftex_sed +s/^@c texi2dvi// +EOF + +# A shell script that computes the list of xref files. +# Takes the filename (without extension) of which we look for xref +# files as argument. The index files must be reported last. +get_xref_files=$utildir/get_xref.sh +cat <<\EOF >$get_xref_files +#! /bin/sh + +# Get list of xref files (indexes, tables and lists). +# Find all files having root filename with a two-letter extension, +# saves the ones that are really Texinfo-related files. .?o? catches +# many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more. +for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do + # If file is empty, skip it. + test -s "$this_file" || continue + # If the file is not suitable to be an index or xref file, don't + # process it. The file can't be if its first character is not a + # backslash or single quote. + first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file` + if test "x$first_character" = "x\\" \ + || test "x$first_character" = "x'"; then + xref_files="$xref_files ./$this_file" + fi +done +echo "$xref_files" +EOF +chmod 500 $get_xref_files + +# File descriptor usage: +# 0 standard input +# 1 standard output (--verbose messages) +# 2 standard error +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 tools output (turned off by --quiet) + +# Tools' output. If quiet, discard, else redirect to the message flow. +if test "$quiet" = t; then + exec 5>/dev/null +else + exec 5>&1 +fi + +# Enable tracing +test "$debug" = t && set -x + +# +# TeXify files. + +for command_line_filename in ${1+"$@"}; do + $verbose "Processing $command_line_filename ..." + + # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex), + # prepend `./' in order to avoid that the tools take it as an option. + echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \ + || command_line_filename="./$command_line_filename" + + # See if the file exists. If it doesn't we're in trouble since, even + # though the user may be able to reenter a valid filename at the tex + # prompt (assuming they're attending the terminal), this script won't + # be able to find the right xref files and so forth. + if test ! -r "$command_line_filename"; then + echo "$0: Could not read $command_line_filename, skipping." >&2 + continue + fi + + # Get the name of the current directory. We want the full path + # because in clean mode we are in tmp, in which case a relative + # path has no meaning. + filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'` + filename_dir=`cd "$filename_dir" >/dev/null && pwd` + + # Strip directory part but leave extension. + filename_ext=`basename "$command_line_filename"` + # Strip extension. + filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'` + ext=`echo "$filename_ext" | sed 's/^.*\.//'` + + # _src. Use same basename since we want to generate aux files with + # the same basename as the manual. If --expand, then output the + # macro-expanded file to here, else copy the original file. + tmpdir_src=$tmpdir/src + filename_src=$tmpdir_src/$filename_noext.$ext + + # _xtr. The file with the user's extra commands. + tmpdir_xtr=$tmpdir/xtr + filename_xtr=$tmpdir_xtr/$filename_noext.$ext + + # _bak. Copies of the previous xref files (another round is run if + # they differ from the new one). + tmpdir_bak=$tmpdir/bak + + # Make all those directories and give up if we can't succeed. + mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1 + + # Source file might include additional sources. + # We want `.:$orig_pwd' before anything else. (We'll add `.:' later + # after all other directories have been turned into absolute paths.) + # `.' goes first to ensure that any old .aux, .cps, + # etc. files in ${directory} don't get used in preference to fresher + # files in `.'. Include orig_pwd in case we are in clean mode, where + # we've cd'd to a temp directory. + common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes" + TEXINPUTS="$common$TEXINPUTS_orig" + INDEXSTYLE="$common$INDEXSTYLE_orig" + + # Convert relative paths to absolute paths, so we can run in another + # directory (e.g., in --clean mode, or during the macro-support + # detection.) + # + # Empty path components are meaningful to tex. We rewrite them + # as `EMPTY' so they don't get lost when we split on $path_sep. + TEXINPUTS=`echo $TEXINPUTS |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'` + INDEXSTYLE=`echo $INDEXSTYLE |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'` + save_IFS=$IFS + IFS=$path_sep + set x $TEXINPUTS; shift + TEXINPUTS=. + for dir + do + case $dir in + EMPTY) + TEXINPUTS=$TEXINPUTS$path_sep + ;; + [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed. + TEXINPUTS=$TEXINPUTS$path_sep$dir + ;; + *) + abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs + ;; + esac + done + set x $INDEXSTYLE; shift + INDEXSTYLE=. + for dir + do + case $dir in + EMPTY) + INDEXSTYLE=$INDEXSTYLE$path_sep + ;; + [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed. + INDEXSTYLE=$INDEXSTYLE$path_sep$dir + ;; + *) + abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs + ;; + esac + done + IFS=$save_IFS + + # If the user explicitly specified the language, use that. + # Otherwise, if the first line is \input texinfo, assume it's texinfo. + # Otherwise, guess from the file extension. + if test -n "$set_language"; then + language=$set_language + elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then + language=texinfo + else + language= + fi + + # Get the type of the file (latex or texinfo) from the given language + # we just guessed, or from the file extension if not set yet. + case ${language:-$filename_ext} in + [lL]a[tT]e[xX] | *.ltx | *.tex) + # Assume a LaTeX file. LaTeX needs bibtex and uses latex for + # compilation. No makeinfo. + bibtex=${BIBTEX:-bibtex} + makeinfo= # no point in running makeinfo on latex source. + texindex=${MAKEINDEX:-makeindex} + if test $oformat = dvi; then + tex=${LATEX:-latex} + else + tex=${PDFLATEX:-pdflatex} + fi + ;; + + *) + # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex. + bibtex= + texindex=${TEXINDEX:-texindex} + if test $oformat = dvi; then + tex=${TEX:-tex} + else + tex=${PDFTEX:-pdftex} + fi + # Unless required by the user, makeinfo expansion is wanted only + # if texinfo.tex is too old. + if test "$expand" = t; then + makeinfo=${MAKEINFO:-makeinfo} + else + # Check if texinfo.tex performs macro expansion by looking for + # its version. The version is a date of the form YEAR-MO-DA. + # We don't need to use [0-9] to match the digits since anyway + # the comparison with $txiprereq, a number, will fail with non + # digits. + txiversion_tex=txiversion.tex + echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex + # Run in the tmpdir to avoid leaving files. + eval `cd $tmpdir >/dev/null && + $tex $txiversion_tex 2>/dev/null | + sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'` + $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..." + if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then + makeinfo= + else + makeinfo=${MAKEINFO:-makeinfo} + fi + # As long as we had to run TeX, offer the user this convenience + if test "$txiformat" = Texinfo; then + escape=@ + fi + fi + ;; + esac + + # Expand macro commands in the original source file using Makeinfo. + # Always use `end' footnote style, since the `separate' style + # generates different output (arguably this is a bug in -E). + # Discard main info output, the user asked to run TeX, not makeinfo. + if test -n "$makeinfo"; then + $verbose "Macro-expanding $command_line_filename to $filename_src ..." + sed -f $comment_iftex_sed "$command_line_filename" \ + | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \ + -o /dev/null --macro-expand=- \ + | sed -f $uncomment_iftex_sed >"$filename_src" + filename_input=$filename_src + fi + + # If makeinfo failed (or was not even run), use the original file as input. + if test $? -ne 0 \ + || test ! -r "$filename_src"; then + $verbose "Reverting to $command_line_filename ..." + filename_input=$filename_dir/$filename_ext + fi + + # Used most commonly for @finalout, @smallbook, etc. + if test -n "$textra"; then + $verbose "Inserting extra commands: $textra" + sed '/^@setfilename/a\ +'"$textra" "$filename_input" >$filename_xtr + filename_input=$filename_xtr + fi + + # If clean mode was specified, then move to the temporary directory. + if test "$clean" = t; then + $verbose "cd $tmpdir_src" + cd "$tmpdir_src" || exit 1 + fi + + while :; do # will break out of loop below + orig_xref_files=`$get_xref_files "$filename_noext"` + + # Save copies of originals for later comparison. + if test -n "$orig_xref_files"; then + $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`" + cp $orig_xref_files $tmpdir_bak + fi + + # Run bibtex on current file. + # - If its input (AUX) exists. + # - If AUX contains both `\bibdata' and `\bibstyle'. + # - If some citations are missing (LOG contains `Citation'). + # or the LOG complains of a missing .bbl + # + # We run bibtex first, because I can see reasons for the indexes + # to change after bibtex is run, but I see no reason for the + # converse. + # + # Don't try to be too smart. Running bibtex only if the bbl file + # exists and is older than the LaTeX file is wrong, since the + # document might include files that have changed. Because there + # can be several AUX (if there are \include's), but a single LOG, + # looking for missing citations in LOG is easier, though we take + # the risk to match false messages. + if test -n "$bibtex" \ + && test -r "$filename_noext.aux" \ + && test -r "$filename_noext.log" \ + && (grep '^\\bibdata[{]' "$filename_noext.aux" \ + && grep '^\\bibstyle[{]' "$filename_noext.aux" \ + && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \ + || grep 'No file .*\.bbl\.' "$filename_noext.log")) \ + >/dev/null 2>&1; \ + then + $verbose "Running $bibtex $filename_noext ..." + if $bibtex "$filename_noext" >&5; then :; else + echo "$0: $bibtex exited with bad status, quitting." >&2 + exit 1 + fi + fi + + # What we'll run texindex on -- exclude non-index files. + # Since we know index files are last, it is correct to remove everything + # before .aux and .?o?. But don't really do <anything>o<anything> + # -- don't match whitespace as <anything>. + # Otherwise, if orig_xref_files contains something like + # foo.xo foo.whatever + # the space after the o will get matched. + index_files=`echo "$orig_xref_files" \ + | sed "s!.*\.aux!!g; + s!./$filename_noext\.[^ ]o[^ ]!!g; + s/^[ ]*//;s/[ ]*$//"` + # Run texindex (or makeindex) on current index files. If they + # already exist, and after running TeX a first time the index + # files don't change, then there's no reason to run TeX again. + # But we won't know that if the index files are out of date or + # nonexistent. + if test -n "$texindex" && test -n "$index_files"; then + $verbose "Running $texindex $index_files ..." + if $texindex $index_files 2>&5 1>&2; then :; else + echo "$0: $texindex exited with bad status, quitting." >&2 + exit 1 + fi + fi + + # Finally, run TeX. + # Prevent $ESCAPE from being interpreted by the shell if it happens + # to be `/'. + $batch tex_args="\\${escape}nonstopmode\ \\${escape}input" + cmd="$tex $tex_args $filename_input" + $verbose "Running $cmd ..." + if $cmd >&5; then :; else + echo "$0: $tex exited with bad status, quitting." >&2 + echo "$0: see $filename_noext.log for errors." >&2 + test "$clean" = t \ + && cp "$filename_noext.log" "$orig_pwd" + exit 1 + fi + + + # Decide if looping again is needed. + finished=t + + # LaTeX (and the package changebar) report in the LOG file if it + # should be rerun. This is needed for files included from + # subdirs, since texi2dvi does not try to compare xref files in + # subdirs. Performing xref files test is still good since LaTeX + # does not report changes in xref files. + if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then + finished= + fi + + # Check if xref files changed. + new_xref_files=`$get_xref_files "$filename_noext"` + $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`" + $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`" + + # If old and new lists don't at least have the same file list, + # then one file or another has definitely changed. + test "x$orig_xref_files" != "x$new_xref_files" && finished= + + # File list is the same. We must compare each file until we find + # a difference. + if test -n "$finished"; then + for this_file in $new_xref_files; do + $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..." + # cmp -s returns nonzero exit status if files differ. + if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else + # We only need to keep comparing until we find one that + # differs, because we'll have to run texindex & tex again no + # matter how many more there might be. + finished= + $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..." + test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file" + break + fi + done + fi + + # If finished, exit the loop, else rerun the loop. + test -n "$finished" && break + done + + # If we were in clean mode, compilation was in a tmp directory. + # Copy the DVI (or PDF) file into the directory where the compilation + # has been done. (The temp dir is about to get removed anyway.) + # We also return to the original directory so that + # - the next file is processed in correct conditions + # - the temporary file can be removed + if test -n "$clean"; then + if test -n "$oname"; then + dest=$oname + else + dest=$orig_pwd + fi + $verbose "Copying $oformat file from `pwd` to $dest" + cp -p "./$filename_noext.$oformat" "$dest" + cd / # in case $orig_pwd is on a different drive (for DOS) + cd $orig_pwd || exit 1 + fi + + # Remove temporary files. + if test "x$debug" = "x"; then + $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..." + cd / + rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak + fi +done + +$verbose "$0 done." +exit 0 # exit successfully, not however we ended the loop. diff --git a/readline-6.2/doc/texi2html b/readline-6.2/doc/texi2html new file mode 100755 index 0000000..9f9c2eb --- /dev/null +++ b/readline-6.2/doc/texi2html @@ -0,0 +1,5428 @@ +#! /usr/bin/perl +'di '; +'ig 00 '; +#+############################################################################## +# +# texi2html: Program to transform Texinfo documents to HTML +# +# Copyright (C) 1999, 2000 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +#-############################################################################## + +# This requires perl version 5 or higher +require 5.0; + +#++############################################################################## +# +# NOTE FOR DEBUGGING THIS SCRIPT: +# You can run 'perl texi2html.pl' directly, provided you have +# the environment variable T2H_HOME set to the directory containing +# the texi2html.init file +# +#--############################################################################## + +# CVS version: +# $Id$ + +# Homepage: +$T2H_HOMEPAGE = <<EOT; +http://www.mathematik.uni-kl.de/~obachman/Texi2html +EOT + +# Authors: +$T2H_AUTHORS = <<EOT; +Written by: Lionel Cons <Lionel.Cons\@cern.ch> (original author) + Karl Berry <karl\@freefriends.org> + Olaf Bachmann <obachman\@mathematik.uni-kl.de> + and many others. +Maintained by: Olaf Bachmann <obachman\@mathematik.uni-kl.de> +Send bugs and suggestions to <texi2html\@mathematik.uni-kl.de> +EOT + +# Version: set in configure.in +$THISVERSION = '1.64'; +$THISPROG = "texi2html $THISVERSION"; # program name and version + +# The man page for this program is included at the end of this file and can be +# viewed using the command 'nroff -man texi2html'. + +# Identity: + +$T2H_TODAY = &pretty_date; # like "20 September 1993" +# the eval prevents this from breaking on system which do not have +# a proper getpwuid implemented +eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i + +#+++############################################################################ +# # +# Initialization # +# Pasted content of File $(srcdir)/texi2html.init: Default initializations # +# # +#---############################################################################ + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init +# exists. + +# +# -*-perl-*- +###################################################################### +# File: texi2html.init +# +# Sets default values for command-line arguments and for various customizable +# procedures +# +# A copy of this file is pasted into the beginning of texi2html by +# 'make texi2html' +# +# Copy this file and make changes to it, if you like. +# Afterwards, either, load it with command-line option -init_file <your_init_file> +# +# $Id$ + +###################################################################### +# stuff which can also be set by command-line options +# +# +# Note: values set here, overwrite values set by the command-line +# options before -init_file and might still be overwritten by +# command-line arguments following the -init_file option +# + +# T2H_OPTIONS is a hash whose keys are the (long) names of valid +# command-line options and whose values are a hash with the following keys: +# type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info) +# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info) +# verbose ==> short description of option (displayed by -h) +# noHelp ==> if 1 -> for "not so important options": only print description on -h 1 +# 2 -> for obsolete options: only print description on -h 2 + +$T2H_DEBUG = 0; +$T2H_OPTIONS -> {debug} = +{ + type => '=i', + linkage => \$main::T2H_DEBUG, + verbose => 'output HTML with debuging information', +}; + +$T2H_DOCTYPE = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'; +$T2H_OPTIONS -> {doctype} = +{ + type => '=s', + linkage => \$main::T2H_DOCTYPE, + verbose => 'document type which is output in header of HTML files', + noHelp => 1 +}; + +$T2H_CHECK = 0; +$T2H_OPTIONS -> {check} = +{ + type => '!', + linkage => \$main::T2H_CHECK, + verbose => 'if set, only check files and output all things that may be Texinfo commands', + noHelp => 1 +}; + +# -expand +# if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections +# else, neither expand @iftex, @tex, nor @ifinfo sections +$T2H_EXPAND = "info"; +$T2H_OPTIONS -> {expand} = +{ + type => '=s', + linkage => \$T2H_EXPAND, + verbose => 'Expand info|tex|none section of texinfo source', +}; + +# - glossary +#if set, uses section named `Footnotes' for glossary +$T2H_USE_GLOSSARY = 0; +T2H_OPTIONS -> {glossary} = +{ + type => '!', + linkage => \$T2H_USE_GLOSSARY, + verbose => "if set, uses section named `Footnotes' for glossary", + noHelp => 1, +}; + + +# -invisible +# $T2H_INVISIBLE_MARK is the text used to create invisible destination +# anchors for index links (you can for instance use the invisible.xbm +# file shipped with this program). This is a workaround for a known +# bug of many WWW browsers, including netscape. +# For me, it works fine without it -- on the contrary: if there, it +# inserts space between headers and start of text (obachman 3/99) +$T2H_INVISIBLE_MARK = ''; +# $T2H_INVISIBLE_MARK = ' '; +$T2H_OPTIONS -> {invisible} = +{ + type => '=s', + linkage => \$T2H_INVISIBLE_MARK, + verbose => 'use text in invisble anchot', + noHelp => 1, +}; + +# -iso +# if set, ISO8879 characters are used for special symbols (like copyright, etc) +$T2H_USE_ISO = 0; +$T2H_OPTIONS -> {iso} = +{ + type => 'iso', + linkage => \$T2H_USE_ISO, + verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)', + noHelp => 1, +}; + +# -I +# list directories where @include files are searched for (besides the +# directory of the doc file) additional '-I' args add to this list +@T2H_INCLUDE_DIRS = ("."); +$T2H_OPTIONS -> {I} = +{ + type => '=s', + linkage => \@T2H_INCLUDE_DIRS, + verbose => 'append $s to the @include search path', +}; + +# -top_file +# uses file of this name for top-level file +# extension is manipulated appropriately, if necessary. +# If empty, <basename of document>.html is used +# Typically, you would set this to "index.html". +$T2H_TOP_FILE = ''; +$T2H_OPTIONS -> {top_file} = +{ + type => '=s', + linkage => \$T2H_TOP_FILE, + verbose => 'use $s as top file, instead of <docname>.html', +}; + + +# -toc_file +# uses file of this name for table of contents file +# extension is manipulated appropriately, if necessary. +# If empty, <basename of document>_toc.html is used +$T2H_TOC_FILE = ''; +$T2H_OPTIONS -> {toc_file} = +{ + type => '=s', + linkage => \$T2H_TOC_FILE, + verbose => 'use $s as ToC file, instead of <docname>_toc.html', +}; + +# -frames +# if set, output two additional files which use HTML 4.0 "frames". +$T2H_FRAMES = 0; +$T2H_OPTIONS -> {frames} = +{ + type => '!', + linkage => \$T2H_FRAMES, + verbose => 'output files which use HTML 4.0 frames (experimental)', + noHelp => 1, +}; + + +# -menu | -nomenu +# if set, show the Texinfo menus +$T2H_SHOW_MENU = 1; +$T2H_OPTIONS -> {menu} = +{ + type => '!', + linkage => \$T2H_SHOW_MENU, + verbose => 'ouput Texinfo menus', +}; + +# -number | -nonumber +# if set, number sections and show section names and numbers in references +# and menus +$T2H_NUMBER_SECTIONS = 1; +$T2H_OPTIONS -> {number} = +{ + type => '!', + linkage => \$T2H_NUMBER_SECTIONS, + verbose => 'use numbered sections' +}; + +# if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu +# entries, instead of section names +$T2H_NODE_NAME_IN_MENU = 0; + +# if set and menu entry equals menu descr, then do not print menu descr. +# Likewise, if node name equals entry name, do not print entry name. +$T2H_AVOID_MENU_REDUNDANCY = 1; + +# -split section|chapter|none +# if set to 'section' (resp. 'chapter') create one html file per (sub)section +# (resp. chapter) and separate pages for Top, ToC, Overview, Index, +# Glossary, About. +# otherwise, create monolithic html file which contains whole document +#$T2H_SPLIT = 'section'; +$T2H_SPLIT = ''; +$T2H_OPTIONS -> {split} = +{ + type => '=s', + linkage => \$T2H_SPLIT, + verbose => 'split document on section|chapter else no splitting', +}; + +# -section_navigation|-no-section_navigation +# if set, then navigation panels are printed at the beginning of each section +# and, possibly at the end (depending on whether or not there were more than +# $T2H_WORDS_IN_PAGE words on page +# This is most useful if you do not want to have section navigation +# on -split chapter +$T2H_SECTION_NAVIGATION = 1; +$T2H_OPTIONS -> {sec_nav} = +{ + type => '!', + linkage => \$T2H_SECTION_NAVIGATION, + verbose => 'output navigation panels for each section', +}; + +# -subdir +# if set put result files in this directory +# if not set result files are put into current directory +#$T2H_SUBDIR = 'html'; +$T2H_SUBDIR = ''; +$T2H_OPTIONS -> {subdir} = +{ + type => '=s', + linkage => \$T2H_SUBDIR, + verbose => 'put HTML files in directory $s, instead of $cwd', +}; + +# -short_extn +# If this is set all HTML file will have extension ".htm" instead of +# ".html". This is helpful when shipping the document to PC systems. +$T2H_SHORTEXTN = 0; +$T2H_OPTIONS -> {short_ext} = +{ + type => '!', + linkage => \$T2H_SHORTEXTN, + verbose => 'use "htm" extension for output HTML files', +}; + + +# -prefix +# Set the output file prefix, prepended to all .html, .gif and .pl files. +# By default, this is the basename of the document +$T2H_PREFIX = ''; +$T2H_OPTIONS -> {prefix} = +{ + type => '=s', + linkage => \$T2H_PREFIX, + verbose => 'use as prefix for output files, instead of <docname>', +}; + +# -o filename +# If set, generate monolithic document output html into $filename +$T2H_OUT = ''; +$T2H_OPTIONS -> {out_file} = +{ + type => '=s', + linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, + verbose => 'if set, all HTML output goes into file $s', +}; + +# -short_ref +#if set cross-references are given without section numbers +$T2H_SHORT_REF = ''; +$T2H_OPTIONS -> {short_ref} = +{ + type => '!', + linkage => \$T2H_SHORT_REF, + verbose => 'if set, references are without section numbers', +}; + +# -idx_sum +# if value is set, then for each @prinindex $what +# $docu_name_$what.idx is created which contains lines of the form +# $key\t$ref sorted alphabetically (case matters) +$T2H_IDX_SUMMARY = 0; +$T2H_OPTIONS -> {idx_sum} = +{ + type => '!', + linkage => \$T2H_IDX_SUMMARY, + verbose => 'if set, also output index summary', + noHelp => 1, +}; + +# -verbose +# if set, chatter about what we are doing +$T2H_VERBOSE = ''; +$T2H_OPTIONS -> {Verbose} = +{ + type => '!', + linkage => \$T2H_VERBOSE, + verbose => 'print progress info to stdout', +}; + +# -lang +# For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title. +# To add a new language, supply list of titles (see $T2H_WORDS below). +# and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02 +# for definitions) +# Default's to 'en' if not set or no @documentlanguage is specified +$T2H_LANG = ''; +$T2H_OPTIONS -> {lang} = +{ + type => '=s', + linkage => sub {SetDocumentLanguage($_[1])}, + verbose => 'use $s as document language (ISO 639 encoding)', +}; + +# -l2h +# if set, uses latex2html for generation of math content +$T2H_L2H = ''; +$T2H_OPTIONS -> {l2h} = +{ + type => '!', + linkage => \$T2H_L2H, + verbose => 'if set, uses latex2html for @math and @tex', +}; + +###################### +# The following options are only relevant if $T2H_L2H is set +# +# -l2h_l2h +# name/location of latex2html progam +$T2H_L2H_L2H = "latex2html"; +$T2H_OPTIONS -> {l2h_l2h} = +{ + type => '=s', + linkage => \$T2H_L2H_L2H, + verbose => 'program to use for latex2html translation', + noHelp => 1, +}; + +# -l2h_skip +# if set, skips actual call to latex2html tries to reuse previously generated +# content, instead +$T2H_L2H_SKIP = ''; +$T2H_OPTIONS -> {l2h_skip} = +{ + type => '!', + linkage => \$T2H_L2H_SKIP, + verbose => 'if set, tries to reuse previously latex2html output', + noHelp => 1, +}; + +# -l2h_tmp +# if set, l2h uses this directory for temporarary files. The path +# leading to this directory may not contain a dot (i.e., a "."), +# otherwise, l2h will fail +$T2H_L2H_TMP = ''; +$T2H_OPTIONS -> {l2h_tmp} = +{ + type => '=s', + linkage => \$T2H_L2H_TMP, + verbose => 'if set, uses $s as temporary latex2html directory', + noHelp => 1, +}; + +# if set, cleans intermediate files (they all have the prefix $doc_l2h_) +# of l2h +$T2H_L2H_CLEAN = 1; +$T2H_OPTIONS -> {l2h_clean} = +{ + type => '!', + linkage => \$T2H_L2H_CLEAN, + verbose => 'if set, do not keep intermediate latex2html files for later reuse', + noHelp => 1, +}; + +$T2H_OPTIONS -> {D} = +{ + type => '=s', + linkage => sub {$main::value{@_[1]} = 1;}, + verbose => 'equivalent to Texinfo "@set $s 1"', + noHelp => 1, +}; + +$T2H_OPTIONS -> {init_file} = +{ + type => '=s', + linkage => \&LoadInitFile, + verbose => 'load init file $s' +}; + + +############################################################################## +# +# The following can only be set in the init file +# +############################################################################## + +# if set, center @image by default +# otherwise, do not center by default +$T2H_CENTER_IMAGE = 1; + +# used as identation for block enclosing command @example, etc +# If not empty, must be enclosed in <td></td> +$T2H_EXAMPLE_INDENT_CELL = '<td> </td>'; +# same as above, only for @small +$T2H_SMALL_EXAMPLE_INDENT_CELL = '<td> </td>'; +# font size for @small +$T2H_SMALL_FONT_SIZE = '-1'; + +# if non-empty, and no @..heading appeared in Top node, then +# use this as header for top node/section, otherwise use value of +# @settitle or @shorttitle (in that order) +$T2H_TOP_HEADING = ''; + +# if set, use this chapter for 'Index' button, else +# use first chapter whose name matches 'index' (case insensitive) +$T2H_INDEX_CHAPTER = ''; + +# if set and $T2H_SPLIT is set, then split index pages at the next letter +# after they have more than that many entries +$T2H_SPLIT_INDEX = 100; + +# if set (e.g., to index.html) replace hrefs to this file +# (i.e., to index.html) by ./ +$T2H_HREF_DIR_INSTEAD_FILE = ''; + +######################################################################## +# Language dependencies: +# To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash +# To redefine one word, simply do: +# $T2H_WORDS->{<language>}->{<word>} = 'whatever' in your personal init file. +# +$T2H_WORDS_EN = +{ + # titles of pages + 'ToC_Title' => 'Table of Contents', + 'Overview_Title' => 'Short Table of Contents', + 'Index_Title' => 'Index', + 'About_Title' => 'About this document', + 'Footnotes_Title' => 'Footnotes', + 'See' => 'See', + 'see' => 'see', + 'section' => 'section', +# If necessary, we could extend this as follows: +# # text for buttons +# 'Top_Button' => 'Top', +# 'ToC_Button' => 'Contents', +# 'Overview_Button' => 'Overview', +# 'Index_button' => 'Index', +# 'Back_Button' => 'Back', +# 'FastBack_Button' => 'FastBack', +# 'Prev_Button' => 'Prev', +# 'Up_Button' => 'Up', +# 'Next_Button' => 'Next', +# 'Forward_Button' =>'Forward', +# 'FastWorward_Button' => 'FastForward', +# 'First_Button' => 'First', +# 'Last_Button' => 'Last', +# 'About_Button' => 'About' +}; + +$T2H_WORD_DE = +{ + 'ToC_Title' => 'Inhaltsverzeichniss', + 'Overview_Title' => 'Kurzes Inhaltsverzeichniss', + 'Index_Title' => 'Index', + 'About_Title' => 'Über dieses Dokument', + 'Footnotes_Title' => 'Fußnoten', + 'See' => 'Siehe', + 'see' => 'siehe', + 'section' => 'Abschnitt', +}; + +$T2H_WORD_NL = +{ + 'ToC_Title' => 'Inhoudsopgave', + 'Overview_Title' => 'Korte inhoudsopgave', + 'Index_Title' => 'Index', #Not sure ;-) + 'About_Title' => 'No translation available!', #No translation available! + 'Footnotes_Title' => 'No translation available!', #No translation available! + 'See' => 'Zie', + 'see' => 'zie', + 'section' => 'sectie', +}; + +$T2H_WORD_ES = +{ + 'ToC_Title' => 'índice General', + 'Overview_Title' => 'Resumen del Contenido', + 'Index_Title' => 'Index', #Not sure ;-) + 'About_Title' => 'No translation available!', #No translation available! + 'Footnotes_Title' => 'Fußnoten', + 'See' => 'Véase', + 'see' => 'véase', + 'section' => 'sección', +}; + +$T2H_WORD_NO = +{ + 'ToC_Title' => 'Innholdsfortegnelse', + 'Overview_Title' => 'Kort innholdsfortegnelse', + 'Index_Title' => 'Indeks', #Not sure ;-) + 'About_Title' => 'No translation available!', #No translation available! + 'Footnotes_Title' => 'No translation available!', + 'See' => 'Se', + 'see' => 'se', + 'section' => 'avsnitt', +}; + +$T2H_WORD_PT = +{ + 'ToC_Title' => 'Sumário', + 'Overview_Title' => 'Breve Sumário', + 'Index_Title' => 'Índice', #Not sure ;-) + 'About_Title' => 'No translation available!', #No translation available! + 'Footnotes_Title' => 'No translation available!', + 'See' => 'Veja', + 'see' => 'veja', + 'section' => 'Seção', +}; + +$T2H_WORDS = +{ + 'en' => $T2H_WORDS_EN, + 'de' => $T2H_WORDS_DE, + 'nl' => $T2H_WORDS_NL, + 'es' => $T2H_WORDS_ES, + 'no' => $T2H_WORDS_NO, + 'pt' => $T2H_WORDS_PT +}; + +@MONTH_NAMES_EN = +( + 'January', 'February', 'March', 'April', 'May', + 'June', 'July', 'August', 'September', 'October', + 'November', 'December' +); + +@MONTH_NAMES_DE = +( + 'Januar', 'Februar', 'März', 'April', 'Mai', + 'Juni', 'Juli', 'August', 'September', 'Oktober', + 'November', 'Dezember' +); + +@MONTH_NAMES_NL = +( + 'Januari', 'Februari', 'Maart', 'April', 'Mei', + 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', + 'November', 'December' +); + +@MONTH_NAMES_ES = +( + 'enero', 'febrero', 'marzo', 'abril', 'mayo', + 'junio', 'julio', 'agosto', 'septiembre', 'octubre', + 'noviembre', 'diciembre' +); + +@MONTH_NAMES_NO = +( + + 'januar', 'februar', 'mars', 'april', 'mai', + 'juni', 'juli', 'august', 'september', 'oktober', + 'november', 'desember' +); + +@MONTH_NAMES_PT = +( + 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', + 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', + 'Novembro', 'Dezembro' +); + + +$MONTH_NAMES = +{ + 'en' => \@MONTH_NAMES_EN, + 'de' => \@MONTH_NAMES_DE, + 'es' => \@MONTH_NAMES_ES, + 'nl' => \@MONTH_NAMES_NL, + 'no' => \@MONTH_NAMES_NO, + 'pt' => \@MONTH_NAMES_PT +}; +######################################################################## +# Control of Page layout: +# You can make changes of the Page layout at two levels: +# 1.) For small changes, it is often enough to change the value of +# some global string/hash/array variables +# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines, +# give them another name, and assign them to the respective +# $T2H_<fnc> variable. + +# As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold +# href, html-name, node-name of +# This -- current section (resp. html page) +# Top -- top page ($T2H_TOP_FILE) +# Contents -- Table of contents +# Overview -- Short table of contents +# Index -- Index page +# About -- page which explain "navigation buttons" +# First -- first node +# Last -- last node +# +# Whether or not the following hash values are set, depends on the context +# (all values are w.r.t. 'This' section) +# Next -- next node of texinfo +# Prev -- previous node of texinfo +# Up -- up node of texinfo +# Forward -- next node in reading order +# Back -- previous node in reading order +# FastForward -- if leave node, up and next, else next node +# FastBackward-- if leave node, up and prev, else prev node +# +# Furthermore, the following global variabels are set: +# $T2H_THISDOC{title} -- title as set by @setttile +# $T2H_THISDOC{fulltitle} -- full title as set by @title... +# $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle +# $T2H_THISDOC{author} -- author as set by @author +# +# and pointer to arrays of lines which need to be printed by t2h_print_lines +# $T2H_OVERVIEW -- lines of short table of contents +# $T2H_TOC -- lines of table of contents +# $T2H_TOP -- lines of Top texinfo node +# $T2H_THIS_SECTION -- lines of 'This' section + +# +# There are the following subs which control the layout: +# +$T2H_print_section = \&T2H_DEFAULT_print_section; +$T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header; +$T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer; +$T2H_print_Top = \&T2H_DEFAULT_print_Top; +$T2H_print_Toc = \&T2H_DEFAULT_print_Toc; +$T2H_print_Overview = \&T2H_DEFAULT_print_Overview; +$T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes; +$T2H_print_About = \&T2H_DEFAULT_print_About; +$T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header; +$T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer; +$T2H_print_misc = \&T2H_DEFAULT_print_misc; +$T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header; +$T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; +$T2H_print_page_head = \&T2H_DEFAULT_print_page_head; +$T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot; +$T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation; +$T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; +$T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img; +$T2H_print_navigation = \&T2H_DEFAULT_print_navigation; +$T2H_about_body = \&T2H_DEFAULT_about_body; +$T2H_print_frame = \&T2H_DEFAULT_print_frame; +$T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame; + +######################################################################## +# Layout for html for every sections +# +sub T2H_DEFAULT_print_section +{ + my $fh = shift; + local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS; + &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION; + my $nw = t2h_print_lines($fh); + if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION) + { + &$T2H_print_foot_navigation($fh, $nw); + } + else + { + print $fh '<HR SIZE="6">' . "\n"; + } +} + +################################################################### +# Layout of top-page I recommend that you use @ifnothtml, @ifhtml, +# @html within the Top texinfo node to specify content of top-level +# page. +# +# If you enclose everything in @ifnothtml, then title, subtitle, +# author and overview is printed +# T2H_HREF of Next, Prev, Up, Forward, Back are not defined +# if $T2H_SPLIT then Top page is in its own html file +sub T2H_DEFAULT_print_Top_header +{ + &$T2H_print_page_head(@_) if $T2H_SPLIT; + t2h_print_label(@_); # this needs to be called, otherwise no label set + &$T2H_print_head_navigation(@_); +} +sub T2H_DEFAULT_print_Top_footer +{ + &$T2H_print_foot_navigation(@_); + &$T2H_print_page_foot(@_) if $T2H_SPLIT; +} +sub T2H_DEFAULT_print_Top +{ + my $fh = shift; + + # for redefining navigation buttons use: + # local $T2H_BUTTONS = [...]; + # as it is, 'Top', 'Contents', 'Index', 'About' are printed + local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; + &$T2H_print_Top_header($fh); + if ($T2H_THIS_SECTION) + { + # if top-level node has content, then print it with extra header + print $fh "<H1>$T2H_NAME{Top}</H1>" + unless ($T2H_HAS_TOP_HEADING); + t2h_print_lines($fh, $T2H_THIS_SECTION) + } + else + { + # top-level node is fully enclosed in @ifnothtml + # print fulltitle, subtitle, author, Overview + print $fh + "<CENTER>\n<H1>" . + join("</H1>\n<H1>", split(/\n/, $T2H_THISDOC{fulltitle})) . + "</H1>\n"; + print $fh "<H2>$T2H_THISDOC{subtitle}</H2>\n" if $T2H_THISDOC{subtitle}; + print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author}; + print $fh <<EOT; +</CENTER> +<HR> +<P></P> +<H2> Overview: </H2> +<BLOCKQUOTE> +EOT + t2h_print_lines($fh, $T2H_OVERVIEW); + print $fh "</BLOCKQUOTE>\n"; + } + &$T2H_print_Top_footer($fh); +} + +################################################################### +# Layout of Toc, Overview, and Footnotes pages +# By default, we use "normal" layout +# T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined +# use: local $T2H_BUTTONS = [...] to redefine navigation buttons +sub T2H_DEFAULT_print_Toc +{ + return &$T2H_print_misc(@_); +} +sub T2H_DEFAULT_print_Overview +{ + return &$T2H_print_misc(@_); +} +sub T2H_DEFAULT_print_Footnotes +{ + return &$T2H_print_misc(@_); +} +sub T2H_DEFAULT_print_About +{ + return &$T2H_print_misc(@_); +} + +sub T2H_DEFAULT_print_misc_header +{ + &$T2H_print_page_head(@_) if $T2H_SPLIT; + # this needs to be called, otherwise, no labels are set + t2h_print_label(@_); + &$T2H_print_head_navigation(@_); +} +sub T2H_DEFAULT_print_misc_footer +{ + &$T2H_print_foot_navigation(@_); + &$T2H_print_page_foot(@_) if $T2H_SPLIT; +} +sub T2H_DEFAULT_print_misc +{ + my $fh = shift; + local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; + &$T2H_print_misc_header($fh); + print $fh "<H1>$T2H_NAME{This}</H1>\n"; + t2h_print_lines($fh); + &$T2H_print_misc_footer($fh); +} + +################################################################### +# chapter_header and chapter_footer are only called if +# T2H_SPLIT eq 'chapter' +# chapter_header: after print_page_header, before print_section +# chapter_footer: after print_section of last section, before print_page_footer +# +# If you want to get rid of navigation stuff after each section, +# redefine print_section such that it does not call print_navigation, +# and put print_navigation into print_chapter_header +@T2H_CHAPTER_BUTTONS = + ( + 'FastBack', 'FastForward', ' ', + ' ', ' ', ' ', ' ', + 'Top', 'Contents', 'Index', 'About', + ); + +sub T2H_DEFAULT_print_chapter_header +{ + # nothing to do there, by default + if (! $T2H_SECTION_NAVIGATION) + { + my $fh = shift; + local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; + &$T2H_print_navigation($fh); + print $fh "\n<HR SIZE=2>\n"; + } +} + +sub T2H_DEFAULT_print_chapter_footer +{ + local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; + &$T2H_print_navigation(@_); +} +################################################################### +$T2H_TODAY = &pretty_date; # like "20 September 1993" + +sub pretty_date { + local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); + + ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); + $year += ($year < 70) ? 2000 : 1900; + # obachman: Let's do it as the Americans do + return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year); +} + + +################################################################### +# Layout of standard header and footer +# + +# Set the default body text, inserted between <BODY ... > +###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; +$T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; +# text inserted after <BODY ...> +$T2H_AFTER_BODY_OPEN = ''; +#text inserted before </BODY> +$T2H_PRE_BODY_CLOSE = ''; +# this is used in footer +$T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER; +$T2H_ADDRESS .= "on <I>$T2H_TODAY</I>"; +# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff +# can be used for <style> <script>, <meta> tags +$T2H_EXTRA_HEAD = ''; + +sub T2H_DEFAULT_print_page_head +{ + my $fh = shift; + my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}"; + print $fh <<EOT; +<HTML> +$T2H_DOCTYPE +<!-- Created on $T2H_TODAY by $THISPROG --> +<!-- +$T2H_AUTHORS +--> +<HEAD> +<TITLE>$longtitle</TITLE> + +<META NAME="description" CONTENT="$longtitle"> +<META NAME="keywords" CONTENT="$longtitle"> +<META NAME="resource-type" CONTENT="document"> +<META NAME="distribution" CONTENT="global"> +<META NAME="Generator" CONTENT="$THISPROG"> +$T2H_EXTRA_HEAD +</HEAD> + +<BODY $T2H_BODYTEXT> +$T2H_AFTER_BODY_OPEN +EOT +} + +sub T2H_DEFAULT_print_page_foot +{ + my $fh = shift; + print $fh <<EOT; +<BR> +<FONT SIZE="-1"> +This document was generated +$T2H_ADDRESS +using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A> +$T2H_PRE_BODY_CLOSE +</BODY> +</HTML> +EOT +} + +################################################################### +# Layout of navigation panel + +# if this is set, then a vertical navigation panel is used +$T2H_VERTICAL_HEAD_NAVIGATION = 0; +sub T2H_DEFAULT_print_head_navigation +{ + my $fh = shift; + if ($T2H_VERTICAL_HEAD_NAVIGATION) + { + print $fh <<EOT; +<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"> +<TR VALIGN="TOP"> +<TD ALIGN="LEFT"> +EOT + } + &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION); + if ($T2H_VERTICAL_HEAD_NAVIGATION) + { + print $fh <<EOT; +</TD> +<TD ALIGN="LEFT"> +EOT + } + elsif ($T2H_SPLIT eq 'section') + { + print $fh "<HR SIZE=1>\n"; + } +} + +# Specifies the minimum page length required before a navigation panel +# is placed at the bottom of a page (the default is that of latex2html) +# T2H_THIS_WORDS_IN_PAGE holds number of words of current page +$T2H_WORDS_IN_PAGE = 300; +sub T2H_DEFAULT_print_foot_navigation +{ + my $fh = shift; + my $nwords = shift; + if ($T2H_VERTICAL_HEAD_NAVIGATION) + { + print $fh <<EOT; +</TD> +</TR> +</TABLE> +EOT + } + print $fh "<HR SIZE=1>\n"; + &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE) +} + +###################################################################### +# navigation panel +# +# specify in this array which "buttons" should appear in which order +# in the navigation panel for sections; use ' ' for empty buttons (space) +@T2H_SECTION_BUTTONS = + ( + 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', + ' ', ' ', ' ', ' ', + 'Top', 'Contents', 'Index', 'About', + ); + +# buttons for misc stuff +@T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); + +# insert here name of icon images for buttons +# Icons are used, if $T2H_ICONS and resp. value are set +%T2H_ACTIVE_ICONS = + ( + 'Top', '', + 'Contents', '', + 'Overview', '', + 'Index', '', + 'Back', '', + 'FastBack', '', + 'Prev', '', + 'Up', '', + 'Next', '', + 'Forward', '', + 'FastForward', '', + 'About' , '', + 'First', '', + 'Last', '', + ' ', '' + ); + +# insert here name of icon images for these, if button is inactive +%T2H_PASSIVE_ICONS = + ( + 'Top', '', + 'Contents', '', + 'Overview', '', + 'Index', '', + 'Back', '', + 'FastBack', '', + 'Prev', '', + 'Up', '', + 'Next', '', + 'Forward', '', + 'FastForward', '', + 'About', '', + 'First', '', + 'Last', '', + ); + +# how to create IMG tag +sub T2H_DEFAULT_button_icon_img +{ + my $button = shift; + my $icon = shift; + my $name = shift; + return qq{<IMG SRC="$icon" BORDER="0" ALT="$button: $name" ALIGN="MIDDLE">}; +} + +# Names of text as alternative for icons +%T2H_NAVIGATION_TEXT = + ( + 'Top', 'Top', + 'Contents', 'Contents', + 'Overview', 'Overview', + 'Index', 'Index', + ' ', ' ', + 'Back', ' < ', + 'FastBack', ' << ', + 'Prev', 'Prev', + 'Up', ' Up ', + 'Next', 'Next', + 'Forward', ' > ', + 'FastForward', ' >> ', + 'About', ' ? ', + 'First', ' |< ', + 'Last', ' >| ' + ); + +sub T2H_DEFAULT_print_navigation +{ + my $fh = shift; + my $vertical = shift; + my $spacing = 1; + print $fh "<TABLE CELLPADDING=$spacing CELLSPACING=$spacing BORDER=0>\n"; + + print $fh "<TR>" unless $vertical; + for $button (@$T2H_BUTTONS) + { + print $fh qq{<TR VALIGN="TOP" ALIGN="LEFT">\n} if $vertical; + print $fh qq{<TD VALIGN="MIDDLE" ALIGN="LEFT">}; + + if (ref($button) eq 'CODE') + { + &$button($fh, $vertical); + } + elsif ($button eq ' ') + { # handle space button + print $fh + $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ? + &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) : + $T2H_NAVIGATION_TEXT{' '}; + next; + } + elsif ($T2H_HREF{$button}) + { # button is active + print $fh + $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ? + t2h_anchor('', $T2H_HREF{$button}, # yes + &$T2H_button_icon_img($button, + $T2H_ACTIVE_ICONS{$button}, + $T2H_NAME{$button})) + : # use text + "[" . + t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) . + "]"; + } + else + { # button is passive + print $fh + $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ? + &$T2H_button_icon_img($button, + $T2H_PASSIVE_ICONS{$button}, + $T2H_NAME{$button}) : + + "[" . $T2H_NAVIGATION_TEXT{$button} . "]"; + } + print $fh "</TD>\n"; + print $fh "</TR>\n" if $vertical; + } + print $fh "</TR>" unless $vertical; + print $fh "</TABLE>\n"; +} + +###################################################################### +# Frames: this is from "Richard Y. Kim" <ryk@coho.net> +# Should be improved to be more conforming to other _print* functions + +sub T2H_DEFAULT_print_frame +{ + my $fh = shift; + print $fh <<EOT; +<HTML> +<HEAD><TITLE>$T2H_THISDOC{title}</TITLE></HEAD> +<FRAMESET cols="140,*"> + <FRAME name=toc src="$docu_toc_frame_file"> + <FRAME name=main src="$docu_doc"> +</FRAMESET> +</HTML> +EOT +} + +sub T2H_DEFAULT_print_toc_frame +{ + my $fh = shift; + &$T2H_print_page_head($fh); + print $fh <<EOT; +<H2>Content</H2> +EOT + print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines; + print $fh "</BODY></HTML>\n"; +} + +###################################################################### +# About page +# + +# T2H_PRE_ABOUT might be a function +$T2H_PRE_ABOUT = <<EOT; +This document was generated $T2H_ADDRESS +using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A> +<P></P> +EOT +$T2H_AFTER_ABOUT = ''; + +sub T2H_DEFAULT_about_body +{ + my $about; + if (ref($T2H_PRE_ABOUT) eq 'CODE') + { + $about = &$T2H_PRE_ABOUT(); + } + else + { + $about = $T2H_PRE_ABOUT; + } + $about .= <<EOT; +The buttons in the navigation panels have the following meaning: +<P></P> +<table border = "1"> +<TR> +<TH> Button </TH> +<TH> Name </TH> +<TH> Go to </TH> +<TH> From 1.2.3 go to</TH> +</TR> +EOT + + for $button (@T2H_SECTION_BUTTONS) + { + next if $button eq ' ' || ref($button) eq 'CODE'; + $about .= <<EOT; +<TR> +<TD ALIGN="CENTER"> +EOT + $about .= + ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? + &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) : + " [" . $T2H_NAVIGATION_TEXT{$button} . "] "); + $about .= <<EOT; +</TD> +<TD ALIGN="CENTER"> +$button +</TD> +<TD> +$T2H_BUTTONS_GOTO{$button} +</TD> +<TD> +$T2H_BUTTONS_EXAMPLE{$button} +</TD> +</TR> +EOT + } + + $about .= <<EOT; +</TABLE> +<P></P> +where the <STRONG> Example </STRONG> assumes that the current position +is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of +the following structure: +<UL> +<LI> 1. Section One </LI> +<UL> +<LI>1.1 Subsection One-One</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.2 Subsection One-Two</LI> +<UL> +<LI>1.2.1 Subsubsection One-Two-One +</LI><LI>1.2.2 Subsubsection One-Two-Two +</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> +<== Current Position </STRONG> +</LI><LI>1.2.4 Subsubsection One-Two-Four +</LI></UL> +<LI>1.3 Subsection One-Three</LI> +<UL> +<LI> ... </LI> +</UL> +<LI>1.4 Subsection One-Four</LI> +</UL> +</UL> +$T2H_AFTER_ABOUT +EOT + return $about; +} + + +%T2H_BUTTONS_GOTO = + ( + 'Top', 'cover (top) of document', + 'Contents', 'table of contents', + 'Overview', 'short table of contents', + 'Index', 'concept index', + 'Back', 'previous section in reading order', + 'FastBack', 'previous or up-and-previous section ', + 'Prev', 'previous section same level', + 'Up', 'up section', + 'Next', 'next section same level', + 'Forward', 'next section in reading order', + 'FastForward', 'next or up-and-next section', + 'About' , 'this page', + 'First', 'first section in reading order', + 'Last', 'last section in reading order', + ); + +%T2H_BUTTONS_EXAMPLE = +( + 'Top', ' ', + 'Contents', ' ', + 'Overview', ' ', + 'Index', ' ', + 'Back', '1.2.2', + 'FastBack', '1.1', + 'Prev', '1.2.2', + 'Up', '1.2', + 'Next', '1.2.4', + 'Forward', '1.2.4', + 'FastForward', '1.3', + 'About', ' ', + 'First', '1.', + 'Last', '1.2.4', +); + + +###################################################################### +# from here on, its l2h init stuff +# + +## initialization for latex2html as for Singular manual generation +## obachman 3/99 + +# +# Options controlling Titles, File-Names, Tracing and Sectioning +# +$TITLE = ''; + +$SHORTEXTN = 0; + +$LONG_TITLES = 0; + +$DESTDIR = ''; # should be overwritten by cmd-line argument + +$NO_SUBDIR = 0;# should be overwritten by cmd-line argument + +$PREFIX = ''; # should be overwritten by cmd-line argument + +$AUTO_PREFIX = 0; # this is needed, so that prefix settings are used + +$AUTO_LINK = 0; + +$SPLIT = 0; + +$MAX_LINK_DEPTH = 0; + +$TMP = ''; # should be overwritten by cmd-line argument + +$DEBUG = 0; + +$VERBOSE = 1; + +# +# Options controlling Extensions and Special Features +# +$HTML_VERSION = "3.2"; + +$TEXDEFS = 1; # we absolutely need that + +$EXTERNAL_FILE = ''; + +$SCALABLE_FONTS = 1; + +$NO_SIMPLE_MATH = 1; + +$LOCAL_ICONS = 1; + +$SHORT_INDEX = 0; + +$NO_FOOTNODE = 1; + +$ADDRESS = ''; + +$INFO = ''; + +# +# Switches controlling Image Generation +# +$ASCII_MODE = 0; + +$NOLATEX = 0; + +$EXTERNAL_IMAGES = 0; + +$PS_IMAGES = 0; + +$NO_IMAGES = 0; + +$IMAGES_ONLY = 0; + +$REUSE = 2; + +$ANTI_ALIAS = 1; + +$ANTI_ALIAS_TEXT = 1; + +# +#Switches controlling Navigation Panels +# +$NO_NAVIGATION = 1; +$ADDRESS = ''; +$INFO = 0; # 0 = do not make a "About this document..." section + +# +#Switches for Linking to other documents +# +# actuall -- we don't care + +$MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth + +$MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth + +$NOLATEX = 0; # 1 = do not pass unknown environments to Latex + +$EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document + +$ASCII_MODE = 0; # 1 = do not use any icons or internal images + +# 1 = use links to external postscript images rather than inlined bitmap +# images. +$PS_IMAGES = 0; +$SHOW_SECTION_NUMBERS = 0; + +### Other global variables ############################################### +$CHILDLINE = ""; + +# This is the line width measured in pixels and it is used to right justify +# equations and equation arrays; +$LINE_WIDTH = 500; + +# Used in conjunction with AUTO_NAVIGATION +$WORDS_IN_PAGE = 300; + +# Affects ONLY the way accents are processed +$default_language = 'english'; + +# The value of this variable determines how many words to use in each +# title that is added to the navigation panel (see below) +# +$WORDS_IN_NAVIGATION_PANEL_TITLES = 0; + +# This number will determine the size of the equations, special characters, +# and anything which will be converted into an inlined image +# *except* "image generating environments" such as "figure", "table" +# or "minipage". +# Effective values are those greater than 0. +# Sensible values are between 0.1 - 4. +$MATH_SCALE_FACTOR = 1.5; + +# This number will determine the size of +# image generating environments such as "figure", "table" or "minipage". +# Effective values are those greater than 0. +# Sensible values are between 0.1 - 4. +$FIGURE_SCALE_FACTOR = 1.6; + + +# If both of the following two variables are set then the "Up" button +# of the navigation panel in the first node/page of a converted document +# will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set +# to some text which describes this external link. +$EXTERNAL_UP_LINK = ""; +$EXTERNAL_UP_TITLE = ""; + +# If this is set then the resulting HTML will look marginally better if viewed +# with Netscape. +$NETSCAPE_HTML = 1; + +# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" +# Paper sizes has no effect other than in the time it takes to create inlined +# images and in whether large images can be created at all ie +# - larger paper sizes *MAY* help with large image problems +# - smaller paper sizes are quicker to handle +$PAPERSIZE = "a4"; + +# Replace "english" with another language in order to tell LaTeX2HTML that you +# want some generated section titles (eg "Table of Contents" or "References") +# to appear in a different language. Currently only "english" and "french" +# is supported but it is very easy to add your own. See the example in the +# file "latex2html.config" +$TITLES_LANGUAGE = "english"; + +1; # This must be the last non-comment line + +# End File texi2html.init +###################################################################### + + +require "$ENV{T2H_HOME}/texi2html.init" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); + +#+++############################################################################ +# # +# Initialization # +# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # +# # +#---############################################################################ + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init +# exists. + +# +package Getopt::MySimple; + +# Name: +# Getopt::MySimple. +# +# Documentation: +# POD-style (incomplete) documentation is in file MySimple.pod +# +# Tabs: +# 4 spaces || die. +# +# Author: +# Ron Savage rpsavage@ozemail.com.au. +# 1.00 19-Aug-97 Initial version. +# 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). +# 1.20 3-Dec-97 Add 'Help' on a per-switch basis. +# 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. +# 1.40 10-Nov-98 Change width of help report. Restructure tests. +# 1-Jul-00 Modifications for Texi2html + +# -------------------------------------------------------------------------- +# Locally modified by obachman (Display type instead of env, order by cmp) +# $Id$ + +# use strict; +# no strict 'refs'; + +use vars qw(@EXPORT @EXPORT_OK @ISA); +use vars qw($fieldWidth $opt $VERSION); + +use Exporter(); +use Getopt::Long; + +@ISA = qw(Exporter); +@EXPORT = qw(); +@EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. + +# -------------------------------------------------------------------------- + +$fieldWidth = 20; +$VERSION = '1.41'; + +# -------------------------------------------------------------------------- + +sub byOrder +{ + my($self) = @_; + + return uc($a) cmp (uc($b)); +} + +# -------------------------------------------------------------------------- + +sub dumpOptions +{ + my($self) = @_; + + print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; + + for (sort byOrder keys(%{$self -> {'opt'} }) ) + { + print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; + } + + print "\n"; + +} # End of dumpOptions. + +# -------------------------------------------------------------------------- +# Return: +# 0 -> Error. +# 1 -> Ok. + +sub getOptions +{ + push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. + push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. + + my($self, $default, $helpText, $versionText, + $helpThenExit, $versionThenExit, $ignoreCase) = @_; + + $helpThenExit = 1 unless (defined($helpThenExit)); + $versionThenExit = 1 unless (defined($versionThenExit)); + $ignoreCase = 0 unless (defined($ignoreCase)); + + $self -> {'default'} = $default; + $self -> {'helpText'} = $helpText; + $self -> {'versionText'} = $versionText; + $Getopt::Long::ignorecase = $ignoreCase; + + unless (defined($self -> {'default'}{'help'})) + { + $self -> {'default'}{'help'} = + { + type => ':i', + default => '', + linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;}, + verbose => "print help and exit" + }; + } + + unless (defined($self -> {'default'}{'version'})) + { + $self -> {'default'}{'version'} = + { + type => '', + default => '', + linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;}, + verbose => "print version and exit" + }; + } + + for (keys(%{$self -> {'default'} }) ) + { + my $type = ${$self -> {'default'} }{$_}{'type'}; + push(@{$self -> {'type'} }, "$_$type"); + $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} + if ${$self -> {'default'} }{$_}{'linkage'}; + } + + my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); + + return $result unless $result; + + for (keys(%{$self -> {'default'} }) ) + { + if (! defined(${$self -> {'opt'} }{$_})) #{ + { + ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; + } + } + + $result; +} # End of getOptions. + +# -------------------------------------------------------------------------- + +sub helpOptions +{ + my($self) = shift; + my($noHelp) = shift; + $noHelp = 0 unless $noHelp; + my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) + = (10, 5, 9, 78, 4, 11); + + print "$self->{'helpText'}" if ($self -> {'helpText'}); + + print ' Option', ' ' x ($optwidth - length('Option') -1 ), + 'Type', ' ' x ($typewidth - length('Type') + 1), + 'Default', ' ' x ($defaultwidth - length('Default') ), + "Description\n"; + + for (sort byOrder keys(%{$self -> {'default'} }) ) + { + my($line, $help, $option, $val); + $option = $_; + next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; + $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) . + "${$self->{'default'} }{$_}{'type'} ". + ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); + + $val = ${$self->{'default'} }{$_}{'linkage'}; + if ($val) + { + if (ref($val) eq 'SCALAR') + { + $val = $$val; + } + else + { + $val = ''; + } + } + else + { + $val = ${$self->{'default'} }{$_}{'default'}; + } + $line .= "$val "; + $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); + + if (defined(${$self -> {'default'} }{$_}{'verbose'}) && + ${$self -> {'default'} }{$_}{'verbose'} ne '') + { + $help = "${$self->{'default'} }{$_}{'verbose'}"; + } + else + { + $help = ' '; + } + if ((length("$line") + length($help)) < $maxlinewidth) + { + print $line , $help, "\n"; + } + else + { + print $line, "\n", ' ' x $valind, $help, "\n"; + } + for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) + { + print ' ' x ($valind + 2); + print $val, ' ', ' ' x ($valwidth - length($val) - 2); + print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; + } + } + + print <<EOT; +Note: 'Options' may be abbreviated. 'Type' specifications mean: + <none>| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) + =s | :s mandatory (or, optional) string argument + =i | :i mandatory (or, optional) integer argument +EOT +} # End of helpOptions. + +#------------------------------------------------------------------- + +sub new +{ + my($class) = @_; + my($self) = {}; + $self -> {'default'} = {}; + $self -> {'helpText'} = ''; + $self -> {'opt'} = {}; + $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. + $self -> {'type'} = (); + + return bless $self, $class; + +} # End of new. + +# -------------------------------------------------------------------------- + +1; + +# End MySimple.pm + +require "$ENV{T2H_HOME}/MySimple.pm" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); + +package main; + +#+++############################################################################ +# # +# Constants # +# # +#---############################################################################ + +$DEBUG_TOC = 1; +$DEBUG_INDEX = 2; +$DEBUG_BIB = 4; +$DEBUG_GLOSS = 8; +$DEBUG_DEF = 16; +$DEBUG_HTML = 32; +$DEBUG_USER = 64; +$DEBUG_L2H = 128; + + +$BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference +$FILERE = '[\/\w.+-]+'; # RE for a file name +$VARRE = '[^\s\{\}]+'; # RE for a variable name +$NODERE = '[^,:]+'; # RE for a node name +$NODESRE = '[^:]+'; # RE for a list of node names + +$ERROR = "***"; # prefix for errors +$WARN = "**"; # prefix for warnings + + # program home page +$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections + +$CHAPTEREND = "<!-- End chapter -->\n"; # to know where a chpater ends +$SECTIONEND = "<!-- End section -->\n"; # to know where section ends +$TOPEND = "<!-- End top -->\n"; # to know where top ends + + + +# +# pre-defined indices +# +$index_properties = +{ + 'c' => { name => 'cp'}, + 'f' => { name => 'fn', code => 1}, + 'v' => { name => 'vr', code => 1}, + 'k' => { name => 'ky', code => 1}, + 'p' => { name => 'pg', code => 1}, + 't' => { name => 'tp', code => 1} +}; + + +%predefined_index = ( + 'cp', 'c', + 'fn', 'f', + 'vr', 'v', + 'ky', 'k', + 'pg', 'p', + 'tp', 't', + ); + +# +# valid indices +# +%valid_index = ( + 'c', 1, + 'f', 1, + 'v', 1, + 'k', 1, + 'p', 1, + 't', 1, + ); + +# +# texinfo section names to level +# +%sec2level = ( + 'top', 0, + 'chapter', 1, + 'unnumbered', 1, + 'majorheading', 1, + 'chapheading', 1, + 'appendix', 1, + 'section', 2, + 'unnumberedsec', 2, + 'heading', 2, + 'appendixsec', 2, + 'appendixsection', 2, + 'subsection', 3, + 'unnumberedsubsec', 3, + 'subheading', 3, + 'appendixsubsec', 3, + 'subsubsection', 4, + 'unnumberedsubsubsec', 4, + 'subsubheading', 4, + 'appendixsubsubsec', 4, + ); + +# +# accent map, TeX command to ISO name +# +%accent_map = ( + '"', 'uml', + '~', 'tilde', + '^', 'circ', + '`', 'grave', + '\'', 'acute', + ); + +# +# texinfo "simple things" (@foo) to HTML ones +# +%simple_map = ( + # cf. makeinfo.c + "*", "<BR>", # HTML+ + " ", " ", + "\t", " ", + "-", "­", # soft hyphen + "\n", "\n", + "|", "", + 'tab', '<\/TD><TD>', + # spacing commands + ":", "", + "!", "!", + "?", "?", + ".", ".", + "-", "", + ); + +# +# texinfo "things" (@foo{}) to HTML ones +# +%things_map = ( + 'TeX', 'TeX', + 'br', '<P>', # paragraph break + 'bullet', '*', + 'copyright', '(C)', + 'dots', '<small>...<\/small>', + 'enddots', '<small>....<\/small>', + 'equiv', '==', + 'error', 'error-->', + 'expansion', '==>', + 'minus', '-', + 'point', '-!-', + 'print', '-|', + 'result', '=>', + 'today', $T2H_TODAY, + 'aa', 'å', + 'AA', 'Å', + 'ae', 'æ', + 'oe', 'œ', + 'AE', 'Æ', + 'OE', 'Œ', + 'o', 'ø', + 'O', 'Ø', + 'ss', 'ß', + 'l', '\/l', + 'L', '\/L', + 'exclamdown', '¡', + 'questiondown', '¿', + 'pounds', '£' + ); + +# +# texinfo styles (@foo{bar}) to HTML ones +# +%style_map = ( + 'acronym', '&do_acronym', + 'asis', '', + 'b', 'B', + 'cite', 'CITE', + 'code', 'CODE', + 'command', 'CODE', + 'ctrl', '&do_ctrl', # special case + 'dfn', 'EM', # DFN tag is illegal in the standard + 'dmn', '', # useless + 'email', '&do_email', # insert a clickable email address + 'emph', 'EM', + 'env', 'CODE', + 'file', '"TT', # will put quotes, cf. &apply_style + 'i', 'I', + 'kbd', 'KBD', + 'key', 'KBD', + 'math', '&do_math', + 'option', '"SAMP', # will put quotes, cf. &apply_style + 'r', '', # unsupported + 'samp', '"SAMP', # will put quotes, cf. &apply_style + 'sc', '&do_sc', # special case + 'strong', 'STRONG', + 't', 'TT', + 'titlefont', '', # useless + 'uref', '&do_uref', # insert a clickable URL + 'url', '&do_url', # insert a clickable URL + 'var', 'VAR', + 'w', '', # unsupported + 'H', '&do_accent', + 'dotaccent', '&do_accent', + 'ringaccent','&do_accent', + 'tieaccent', '&do_accent', + 'u','&do_accent', + 'ubaraccent','&do_accent', + 'udotaccent','&do_accent', + 'v', '&do_accent', + ',', '&do_accent', + 'dotless', '&do_accent' + ); + +# +# texinfo format (@foo/@end foo) to HTML ones +# +%format_map = ( + 'quotation', 'BLOCKQUOTE', + # lists + 'itemize', 'UL', + 'enumerate', 'OL', + # poorly supported + 'flushleft', 'PRE', + 'flushright', 'PRE', + ); + +# +# an eval of these $complex_format_map->{what}->[0] yields beginning +# an eval of these $complex_format_map->{what}->[1] yieleds end +$complex_format_map = +{ + example => + [ + q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=example><pre>"}, + q{'</pre></td></tr></table>'} + ], + smallexample => + [ + q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smallexample><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre>"}, + q{'</FONT></pre></td></tr></table>'} + ], + display => + [ + q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=display><pre " . 'style="font-family: serif">'}, + q{'</pre></td></tr></table>'} + ], + smalldisplay => + [ + q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smalldisplay><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre " . 'style="font-family: serif">'}, + q{'</pre></FONT></td></tr></table>'} + ] +}; + +$complex_format_map->{lisp} = $complex_format_map->{example}; +$complex_format_map->{smalllisp} = $complex_format_map->{smallexample}; +$complex_format_map->{format} = $complex_format_map->{display}; +$complex_format_map->{smallformat} = $complex_format_map->{smalldisplay}; + +# +# texinfo definition shortcuts to real ones +# +%def_map = ( + # basic commands + 'deffn', 0, + 'defvr', 0, + 'deftypefn', 0, + 'deftypevr', 0, + 'defcv', 0, + 'defop', 0, + 'deftp', 0, + # basic x commands + 'deffnx', 0, + 'defvrx', 0, + 'deftypefnx', 0, + 'deftypevrx', 0, + 'defcvx', 0, + 'defopx', 0, + 'deftpx', 0, + # shortcuts + 'defun', 'deffn Function', + 'defmac', 'deffn Macro', + 'defspec', 'deffn {Special Form}', + 'defvar', 'defvr Variable', + 'defopt', 'defvr {User Option}', + 'deftypefun', 'deftypefn Function', + 'deftypevar', 'deftypevr Variable', + 'defivar', 'defcv {Instance Variable}', + 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME + 'defmethod', 'defop Method', + 'deftypemethod', 'defop Method', # NEW:FIXME + # x shortcuts + 'defunx', 'deffnx Function', + 'defmacx', 'deffnx Macro', + 'defspecx', 'deffnx {Special Form}', + 'defvarx', 'defvrx Variable', + 'defoptx', 'defvrx {User Option}', + 'deftypefunx', 'deftypefnx Function', + 'deftypevarx', 'deftypevrx Variable', + 'defivarx', 'defcvx {Instance Variable}', + 'defmethodx', 'defopx Method', + ); + +# +# things to skip +# +%to_skip = ( + # comments + 'c', 1, + 'comment', 1, + 'ifnotinfo', 1, + 'ifnottex', 1, + 'ifhtml', 1, + 'end ifhtml', 1, + 'end ifnotinfo', 1, + 'end ifnottex', 1, + # useless + 'detailmenu', 1, + 'direntry', 1, + 'contents', 1, + 'shortcontents', 1, + 'summarycontents', 1, + 'footnotestyle', 1, + 'end ifclear', 1, + 'end ifset', 1, + 'titlepage', 1, + 'end titlepage', 1, + # unsupported commands (formatting) + 'afourpaper', 1, + 'cropmarks', 1, + 'finalout', 1, + 'headings', 1, + 'sp', 1, + 'need', 1, + 'page', 1, + 'setchapternewpage', 1, + 'everyheading', 1, + 'everyfooting', 1, + 'evenheading', 1, + 'evenfooting', 1, + 'oddheading', 1, + 'oddfooting', 1, + 'smallbook', 1, + 'vskip', 1, + 'filbreak', 1, + 'paragraphindent', 1, + # unsupported formats + 'cartouche', 1, + 'end cartouche', 1, + 'group', 1, + 'end group', 1, + ); + +#+++############################################################################ +# # +# Argument parsing, initialisation # +# # +#---############################################################################ + +# +# flush stdout and stderr after every write +# +select(STDERR); +$| = 1; +select(STDOUT); +$| = 1; + + +%value = (); # hold texinfo variables, see also -D +$use_bibliography = 1; +$use_acc = 1; + +# +# called on -init-file +sub LoadInitFile +{ + my $init_file = shift; + # second argument is value of options + $init_file = shift; + if (-f $init_file) + { + print "# reading initialization file from $init_file\n" + if ($T2H_VERBOSE); + require($init_file); + } + else + { + print "$ERROR Error: can't read init file $int_file\n"; + $init_file = ''; + } +} + +# +# called on -lang +sub SetDocumentLanguage +{ + my $lang = shift; + if (! exists($T2H_WORDS->{$lang})) + { + warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" . + ($T2H_LANG ? T2H_LANG : "en") . "'\n"; + } + else + { + print "# using '$lang' as document language\n" if ($T2H_VERBOSE); + $T2H_LANG = $lang; + } +} + +## +## obsolete cmd line options +## +$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = +{ + type => '!', + linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;}, + verbose => 'obsolete, use -nosec_nav', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {use_acc} = +{ + type => '!', + linkage => \$use_acc, + verbose => 'obsolete', + noHelp => 2 +}; +$T2H_OBSOLETE_OPTIONS -> {expandinfo} = +{ + type => '!', + linkage => sub {$main::T2H_EXPAND = 'info';}, + verbose => 'obsolete, use "-expand info" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {expandtex} = +{ + type => '!', + linkage => sub {$main::T2H_EXPAND = 'tex';}, + verbose => 'obsolete, use "-expand tex" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {monolithic} = +{ + type => '!', + linkage => sub {$main::T2H_SPLIT = '';}, + verbose => 'obsolete, use "-split no" instead', + noHelp => 2 +}; +$T2H_OBSOLETE_OPTIONS -> {split_node} = +{ + type => '!', + linkage => sub{$main::T2H_SPLIT = 'section';}, + verbose => 'obsolete, use "-split section" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {split_chapter} = +{ + type => '!', + linkage => sub{$main::T2H_SPLIT = 'chapter';}, + verbose => 'obsolete, use "-split chapter" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {no_verbose} = +{ + type => '!', + linkage => sub {$main::T2H_VERBOSE = 0;}, + verbose => 'obsolete, use -noverbose instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {output_file} = +{ + type => '=s', + linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, + verbose => 'obsolete, use -out_file instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {section_navigation} = +{ + type => '!', + linkage => \$T2H_SECTION_NAVIGATION, + verbose => 'obsolete, use -sec_nav instead', + noHelp => 2, +}; + +$T2H_OBSOLETE_OPTIONS -> {verbose} = +{ + type => '!', + linkage => \$T2H_VERBOSE, + verbose => 'obsolete, use -Verbose instead', + noHelp => 2 +}; + +# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc +my $home = $ENV{HOME}; +defined($home) or $home = ''; +foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") { + if (-f $i) { + print "# reading initialization file from $i\n" + if ($T2H_VERBOSE); + require($i); + } +} + + +#+++############################################################################ +# # +# parse command-line options +# # +#---############################################################################ +$T2H_USAGE_TEXT = <<EOT; +Usage: texi2html [OPTIONS] TEXINFO-FILE +Translates Texinfo source documentation to HTML. +EOT +$T2H_FAILURE_TEXT = <<EOT; +Try 'texi2html -help' for usage instructions. +EOT +$options = new Getopt::MySimple; + +# some older version of GetOpt::Long don't have +# Getopt::Long::Configure("pass_through") +eval {Getopt::Long::Configure("pass_through");}; +$Configure_failed = $@ && <<EOT; +**WARNING: Parsing of obsolete command-line options could have failed. + Consider to use only documented command-line options (run + 'texi2html -help 2' for a complete list) or upgrade to perl + version 5.005 or higher. +EOT + +if (! $options->getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) +{ + print $Configure_failed if $Configure_failed; + die $T2H_FAILURE_TEXT; +} + +if (@ARGV > 1) +{ + eval {Getopt::Long::Configure("no_pass_through");}; + if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) + { + print $Configure_failed if $Configure_failed; + die $T2H_FAILURE_TEXT; + } +} + +if ($T2H_CHECK) { + die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0; + ✓ + exit; +} + +#+++############################################################################ +# # +# evaluation of cmd line options +# # +#---############################################################################ + +if ($T2H_EXPAND eq 'info') +{ + $to_skip{'ifinfo'} = 1; + $to_skip{'end ifinfo'} = 1; +} +elsif ($T2H_EXPAND eq 'tex') +{ + $to_skip{'iftex'} = 1; + $to_skip{'end iftex'} = 1; + +} + +$T2H_INVISIBLE_MARK = '<IMG SRC="invisible.xbm">' if $T2H_INVISIBLE_MARK eq 'xbm'; + +# +# file name buisness +# +die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1; +$docu = shift(@ARGV); +if ($docu =~ /.*\//) { + chop($docu_dir = $&); + $docu_name = $'; +} else { + $docu_dir = '.'; + $docu_name = $docu; +} +unshift(@T2H_INCLUDE_DIRS, $docu_dir); +$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document +$docu_name = $T2H_PREFIX if ($T2H_PREFIX); + +# subdir +if ($T2H_SUBDIR && ! $T2H_OUT) +{ + $T2H_SUBDIR =~ s|/*$||; + unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR") + { + if ( mkdir($T2H_SUBDIR, oct(755))) + { + print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE); + } + else + { + warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n"; + $T2H_SUBDIR = ''; + } + } +} + +if ($T2H_SUBDIR && ! $T2H_OUT) +{ + $docu_rdir = "$T2H_SUBDIR/"; + print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); +} +else +{ + if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|) + { + $docu_rdir = "$1/"; + print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); + } + else + { + print "# putting result files into current directory \n" if ($T2H_VERBOSE); + $docu_rdir = ''; + } +} + +# extension +if ($T2H_SHORTEXTN) +{ + $docu_ext = "htm"; +} +else +{ + $docu_ext = "html"; +} +if ($T2H_TOP_FILE =~ /\..*$/) +{ + $T2H_TOP_FILE = $`.".$docu_ext"; +} + +# result files +if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i)) +{ + $T2H_SPLIT = 'section'; +} +elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i) +{ + $T2H_SPLIT = 'chapter' +} +else +{ + undef $T2H_SPLIT; +} + +$docu_doc = "$docu_name.$docu_ext"; # document's contents +$docu_doc_file = "$docu_rdir$docu_doc"; +if ($T2H_SPLIT) +{ + $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents + $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc + $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes + $docu_about = "${docu_name}_abt.$docu_ext"; # about this document + $docu_top = $T2H_TOP_FILE || $docu_doc; +} +else +{ + if ($T2H_OUT) + { + $docu_doc = $T2H_OUT; + $docu_doc =~ s|.*/||; + } + $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc; +} + +$docu_toc_file = "$docu_rdir$docu_toc"; +$docu_stoc_file = "$docu_rdir$docu_stoc"; +$docu_foot_file = "$docu_rdir$docu_foot"; +$docu_about_file = "$docu_rdir$docu_about"; +$docu_top_file = "$docu_rdir$docu_top"; + +$docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext"; +$docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext"; + +# +# variables +# +$value{'html'} = 1; # predefine html (the output format) +$value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator) +# _foo: internal to track @foo +foreach ('_author', '_title', '_subtitle', + '_settitle', '_setfilename', '_shorttitle') { + $value{$_} = ''; # prevent -w warnings +} +%node2sec = (); # node to section name +%sec2node = (); # section to node name +%sec2number = (); # section to number +%number2sec = (); # number to section +%idx2node = (); # index keys to node +%node2href = (); # node to HREF +%node2next = (); # node to next +%node2prev = (); # node to prev +%node2up = (); # node to up +%bib2href = (); # bibliography reference to HREF +%gloss2href = (); # glossary term to HREF +@sections = (); # list of sections +%tag2pro = (); # protected sections + +# +# initial indexes +# +$bib_num = 0; +$foot_num = 0; +$gloss_num = 0; +$idx_num = 0; +$sec_num = 0; +$doc_num = 0; +$html_num = 0; + +# +# can I use ISO8879 characters? (HTML+) +# +if ($T2H_USE_ISO) { + $things_map{'bullet'} = "•"; + $things_map{'copyright'} = "©"; + $things_map{'dots'} = "…"; + $things_map{'equiv'} = "≡"; + $things_map{'expansion'} = "→"; + $things_map{'point'} = "∗"; + $things_map{'result'} = "⇒"; +} + +# +# read texi2html extensions (if any) +# +$extensions = 'texi2html.ext'; # extensions in working directory +if (-f $extensions) { + print "# reading extensions from $extensions\n" if $T2H_VERBOSE; + require($extensions); +} +($progdir = $0) =~ s/[^\/]+$//; +if ($progdir && ($progdir ne './')) { + $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory + if (-f $extensions) { + print "# reading extensions from $extensions\n" if $T2H_VERBOSE; + require($extensions); + } +} + + +print "# reading from $docu\n" if $T2H_VERBOSE; + +######################################################################### +# +# latex2html stuff +# +# latex2html conversions consist of three stages: +# 1) ToLatex: Put "latex" code into a latex file +# 2) ToHtml: Use latex2html to generate corresponding html code and images +# 3) FromHtml: Extract generated code and images from latex2html run +# + +########################## +# default settings +# + +# defaults for files and names + +sub l2h_Init +{ + local($root) = @_; + + return 0 unless ($root); + + $l2h_name = "${root}_l2h"; + + $l2h_latex_file = "$docu_rdir${l2h_name}.tex"; + $l2h_cache_file = "${docu_rdir}l2h_cache.pm"; + $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H); + + # destination dir -- generated images are put there, should be the same + # as dir of enclosing html document -- + $l2h_html_file = "$docu_rdir${l2h_name}.html"; + $l2h_prefix = "${l2h_name}_"; + return 1; +} + + +########################## +# +# First stage: Generation of Latex file +# Initialize with: l2h_InitToLatex +# Add content with: l2h_ToLatex($text) --> HTML placeholder comment +# Finish with: l2h_FinishToLatex +# + +$l2h_latex_preample = <<EOT; +% This document was automatically generated by the l2h extenstion of texi2html +% DO NOT EDIT !!! +\\documentclass{article} +\\usepackage{html} +\\begin{document} +EOT + +$l2h_latex_closing = <<EOT; +\\end{document} +EOT + +# return used latex 1, if l2h could be initalized properly, 0 otherwise +sub l2h_InitToLatex +{ + %l2h_to_latex = (); + unless ($T2H_L2H_SKIP) + { + unless (open(L2H_LATEX, ">$l2h_latex_file")) + { + warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n"; + return 0; + } + print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE); + print L2H_LATEX $l2h_latex_preample; + } + # open database for caching + l2h_InitCache(); + $l2h_latex_count = 0; + $l2h_to_latex_count = 0; + $l2h_cached_count = 0; + return 1; +} + +# print text (1st arg) into latex file (if not already there), return +# HTML commentary which can be later on replaced by the latex2html +# generated text +sub l2h_ToLatex +{ + my($text) = @_; + my($count); + + $l2h_to_latex_count++; + $text =~ s/(\s*)$//; + + # try whether we can cache it + my $cached_text = l2h_FromCache($text); + if ($cached_text) + { + $l2h_cached_count++; + return $cached_text; + } + + # try whether we have text already on things to do + unless ($count = $l2h_to_latex{$text}) + { + $count = $l2h_latex_count; + $l2h_latex_count++; + $l2h_to_latex{$text} = $count; + $l2h_to_latex[$count] = $text; + unless ($T2H_L2H_SKIP) + { + print L2H_LATEX "\\begin{rawhtml}\n"; + print L2H_LATEX "<!-- l2h_begin ${l2h_name} ${count} -->\n"; + print L2H_LATEX "\\end{rawhtml}\n"; + + print L2H_LATEX "$text\n"; + + print L2H_LATEX "\\begin{rawhtml}\n"; + print L2H_LATEX "<!-- l2h_end ${l2h_name} ${count} -->\n"; + print L2H_LATEX "\\end{rawhtml}\n"; + } + } + return "<!-- l2h_replace ${l2h_name} ${count} -->"; +} + +# print closing into latex file and close it +sub l2h_FinishToLatex +{ + local ($reused); + + $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count; + unless ($T2H_L2H_SKIP) + { + print L2H_LATEX $l2h_latex_closing; + close(L2H_LATEX); + } + print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE); + unless ($l2h_latex_count) + { + l2h_Finish(); + return 0; + } + return 1; +} + +################################### +# Second stage: Use latex2html to generate corresponding html code and images +# +# l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]): +# Call latex2html on $l2h_latex_file +# Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir +# Return 1, on success +# 0, otherwise +# +sub l2h_ToHtml +{ + local($call, $ext, $root, $dotbug); + + if ($T2H_L2H_SKIP) + { + print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE); + return 1; + } + + # Check for dot in directory where dvips will work + if ($T2H_L2H_TMP) + { + if ($T2H_L2H_TMP =~ /\./) + { + warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; + $dotbug = 1; + } + } + else + { + if (&getcwd =~ /\./) + { + warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; + $dotbug = 1; + } + } + # fix it, if necessary and hope that it works + $T2H_L2H_TMP = "/tmp" if ($dotbug); + + $call = $T2H_L2H_L2H; + # use init file, if specified + $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file); + # set output dir + $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir"); + # use l2h_tmp, if specified + $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP); + # options we want to be sure of + $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; + $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file"; + + print "# l2h: executing '$call'\n" if ($T2H_VERBOSE); + if (system($call)) + { + warn "l2h ***Error: '${call}' did not succeed\n"; + return 0; + } + else + { + print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE); + return 1; + } +} + +# this is directly pasted over from latex2html +sub getcwd { + local($_) = `pwd`; + + die "'pwd' failed (out of memory?)\n" + unless length; + chop; + $_; +} + + +########################## +# Third stage: Extract generated contents from latex2html run +# Initialize with: l2h_InitFromHtml +# open $l2h_html_file for reading +# reads in contents into array indexed by numbers +# return 1, on success -- 0, otherwise +# Extract Html code with: l2h_FromHtml($text) +# replaces in $text all previosuly inserted comments by generated html code +# returns (possibly changed) $text +# Finish with: l2h_FinishFromHtml +# closes $l2h_html_dir/$l2h_name.".$docu_ext" + +sub l2h_InitFromHtml +{ + local($h_line, $h_content, $count, %l2h_img); + + if (! open(L2H_HTML, "<${l2h_html_file}")) + { + print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n"; + return 0; + } + print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE); + + $l2h_html_count = 0; + + while ($h_line = <L2H_HTML>) + { + if ($h_line =~ /^<!-- l2h_begin $l2h_name ([0-9]+) -->/) + { + $count = $1; + $h_content = ""; + while ($h_line = <L2H_HTML>) + { + if ($h_line =~ /^<!-- l2h_end $l2h_name $count -->/) + { + chomp $h_content; + chomp $h_content; + $l2h_html_count++; + $h_content = l2h_ToCache($count, $h_content); + $l2h_from_html[$count] = $h_content; + $h_content = ''; + last; + } + $h_content = $h_content.$h_line; + } + if ($hcontent) + { + print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n" + if ($T2H_VERBOSE); + close(L2H_HTML); + return 0; + } + } + } + print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n" + if ($T2H_VERBOSE); + + close(L2H_HTML); + return 1; +} + +sub l2h_FromHtml +{ + local($text) = @_; + local($done, $to_do, $count); + + $to_do = $text; + + while ($to_do =~ /([^\000]*)<!-- l2h_replace $l2h_name ([0-9]+) -->([^\000]*)/) + { + $to_do = $1; + $count = $2; + $done = $3.$done; + + $done = "<!-- l2h_end $l2h_name $count -->".$done + if ($T2H_DEBUG & $DEBUG_L2H); + + $done = &l2h_ExtractFromHtml($count) . $done; + + $done = "<!-- l2h_begin $l2h_name $count -->".$done + if ($T2H_DEBUG & $DEBUG_L2H); + } + return $to_do.$done; +} + + +sub l2h_ExtractFromHtml +{ + local($count) = @_; + + return $l2h_from_html[$count] if ($l2h_from_html[$count]); + + if ($count >= 0 && $count < $l2h_latex_count) + { + # now we are in trouble + local($l_l2h, $_); + + $l2h_extract_error++; + print "$ERROR l2h: can't extract content $count from html\n" + if ($T2H_VERBOSE); + # try simple (ordinary) substition (without l2h) + $l_l2h = $T2H_L2H; + $T2H_L2H = 0; + $_ = $l2h_to_latex{$count}; + $_ = &substitute_style($_); + &unprotect_texi; + $_ = "<!-- l2h: ". __LINE__ . " use texi2html -->" . $_ + if ($T2H_DEBUG & $DEBUG_L2H); + $T2H_L2H = $l_l2h; + return $_; + } + else + { + # now we have been incorrectly called + $l2h_range_error++; + print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n"; + return "<!-- l2h: ". __LINE__ . " out of range count $count -->" + if ($T2H_DEBUG & $DEBUG_L2H); + return "<!-- l2h: out of range count $count -->"; + } +} + +sub l2h_FinishFromHtml +{ + if ($T2H_VERBOSE) + { + if ($l2h_extract_error + $l2h_range_error) + { + print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n"; + } + else + { + print "# l2h: finished from html (no errors)\n"; + } + } +} + +sub l2h_Finish +{ + l2h_StoreCache(); + if ($T2H_L2H_CLEAN) + { + print "# l2h: removing temporary files generated by l2h extension\n" + if $T2H_VERBOSE; + while (<"$docu_rdir$l2h_name"*>) + { + unlink $_; + } + } + print "# l2h: Finished\n" if $T2H_VERBOSE; + return 1; +} + +############################## +# stuff for l2h caching +# + +# I tried doing this with a dbm data base, but it did not store all +# keys/values. Hence, I did as latex2html does it +sub l2h_InitCache +{ + if (-r "$l2h_cache_file") + { + my $rdo = do "$l2h_cache_file"; + warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") + unless ($rdo); + } +} + +sub l2h_StoreCache +{ + return unless $l2h_latex_count; + + my ($key, $value); + open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; + + + while (($key, $value) = each %l2h_cache) + { + # escape stuff + $key =~ s|/|\\/|g; + $key =~ s|\\\\/|\\/|g; + # weird, a \ at the end of the key results in an error + # maybe this also broke the dbm database stuff + $key =~ s|\\$|\\\\|; + $value =~ s/\|/\\\|/g; + $value =~ s/\\\\\|/\\\|/g; + $value =~ s|\\\\|\\\\\\\\|g; + print FH "\n\$l2h_cache_key = q/$key/;\n"; + print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; + } + print FH "1;"; + close(FH); +} + +# return cached html, if it exists for text, and if all pictures +# are there, as well +sub l2h_FromCache +{ + my $text = shift; + my $cached = $l2h_cache{$text}; + if ($cached) + { + while ($cached =~ m/SRC="(.*?)"/g) + { + unless (-e "$docu_rdir$1") + { + return undef; + } + } + return $cached; + } + return undef; +} + +# insert generated html into cache, move away images, +# return transformed html +$maximage = 1; +sub l2h_ToCache +{ + my $count = shift; + my $content = shift; + my @images = ($content =~ /SRC="(.*?)"/g); + my ($src, $dest); + + for $src (@images) + { + $dest = $l2h_img{$src}; + unless ($dest) + { + my $ext; + if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) + { + $ext = $1; + } + else + { + warn "$ERROR: L2h image $src has invalid extension\n"; + next; + } + while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;} + $dest = "${docu_name}_$maximage.$ext"; + system("cp -f $docu_rdir$src $docu_rdir$dest"); + $l2h_img{$src} = $dest; + unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H); + } + $content =~ s/$src/$dest/g; + } + $l2h_cache{$l2h_to_latex[$count]} = $content; + return $content; +} + + +#+++############################################################################ +# # +# Pass 1: read source, handle command, variable, simple substitution # +# # +#---############################################################################ + +@lines = (); # whole document +@toc_lines = (); # table of contents +@stoc_lines = (); # table of contents +$curlevel = 0; # current level in TOC +$node = ''; # current node name +$node_next = ''; # current node next name +$node_prev = ''; # current node prev name +$node_up = ''; # current node up name +$in_table = 0; # am I inside a table +$table_type = ''; # type of table ('', 'f', 'v', 'multi') +@tables = (); # nested table support +$in_bibliography = 0; # am I inside a bibliography +$in_glossary = 0; # am I inside a glossary +$in_top = 0; # am I inside the top node +$has_top = 0; # did I see a top node? +$has_top_command = 0; # did I see @top for automatic pointers? +$in_pre = 0; # am I inside a preformatted section +$in_list = 0; # am I inside a list +$in_html = 0; # am I inside an HTML section +$first_line = 1; # is it the first line +$dont_html = 0; # don't protect HTML on this line +$deferred_ref = ''; # deferred reference for indexes +@html_stack = (); # HTML elements stack +$html_element = ''; # current HTML element +&html_reset; +%macros = (); # macros + +# init l2h +$T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H); +$T2H_L2H = &l2h_InitToLatex if ($T2H_L2H); + +# build code for simple substitutions +# the maps used (%simple_map and %things_map) MUST be aware of this +# watch out for regexps, / and escaped characters! +$subst_code = ''; +foreach (keys(%simple_map)) { + ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars + $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n"; +} +foreach (keys(%things_map)) { + $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n"; +} +if ($use_acc) { + # accentuated characters + foreach (keys(%accent_map)) { + if ($_ eq "`") { + $subst_code .= "s/$;3"; + } elsif ($_ eq "'") { + $subst_code .= "s/$;4"; + } else { + $subst_code .= "s/\\\@\\$_"; + } + $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n"; + } +} +eval("sub simple_substitutions { $subst_code }"); + +&init_input; +INPUT_LINE: while ($_ = &next_line) { + # + # remove \input on the first lines only + # + if ($first_line) { + next if /^\\input/; + $first_line = 0; + } + # non-@ substitutions cf. texinfmt.el + # + # parse texinfo tags + # + $tag = ''; + $end_tag = ''; + if (/^\s*\@end\s+(\w+)\b/) { + $end_tag = $1; + } elsif (/^\s*\@(\w+)\b/) { + $tag = $1; + } + # + # handle @html / @end html + # + if ($in_html) { + if ($end_tag eq 'html') { + $in_html = 0; + } else { + $tag2pro{$in_html} .= $_; + } + next; + } elsif ($tag eq 'html') { + $in_html = $PROTECTTAG . ++$html_num; + push(@lines, $in_html); + next; + } + + # + # try to remove inlined comments + # syntax from tex-mode.el comment-start-skip + # + s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/; + +# Sometimes I use @c right at the end of a line ( to suppress the line feed ) +# s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/; +# s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; +# s/(.*)\@c{.*?}(.*)/$1$2/; +# s/(.*)\@comment{.*?}(.*)/$1$2/; +# s/^(.*)\@c /$1/; +# s/^(.*)\@comment /$1/; + + ############################################################# + # value substitution before macro expansion, so that + # it works in macro arguments + s/\@value{($VARRE)}/$value{$1}/eg; + + ############################################################# + # macro substitution + while (/\@(\w+)/g) + { + if (exists($macros->{$1})) + { + my $before = $`; + my $name = $1; + my $after = $'; + my @args; + my $args; + if ($after =~ /^\s*{(.*?[^\\])}(.*)/) + { + $args = $1; + $after = $2; + } + elsif (@{$macros->{$name}->{Args}} == 1) + { + $args = $after; + $args =~ s/^\s*//; + $args =~ s/\s*$//; + $after = ''; + } + $args =~ s|\\\\|\\|g; + $args =~ s|\\{|{|g; + $args =~ s|\\}|}|g; + if (@{$macros->{$name}->{Args}} > 1) + { + $args =~ s/(^|[^\\]),/$1$;/g ; + $args =~ s|\\,|,|g; + @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1); + } + else + { + $args =~ s|\\,|,|g; + @args = ($args); + } + my $macrobody = $macros->{$name}->{Body}; + for ($i=0; $i<=$#args; $i++) + { + $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g; + } + $macrobody =~ s|\\\\|\\|g; + $_ = $before . $macrobody . $after; + unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_); + next INPUT_LINE; + } + } # + + + # + # try to skip the line + # + if ($end_tag) { + $in_titlepage = 0 if $end_tag eq 'titlepage'; + next if $to_skip{"end $end_tag"}; + } elsif ($tag) { + $in_titlepage = 1 if $tag eq 'titlepage'; + next if $to_skip{$tag}; + last if $tag eq 'bye'; + } + if ($in_top) { + # parsing the top node + if ($tag eq 'node' || + ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/)) + { + # no more in top + $in_top = 0; + push(@lines, $TOPEND); + } + } + unless ($in_pre) { + s/``/\"/g; + s/''/\"/g; + s/([\w ])---([\w ])/$1--$2/g; + } + # + # analyze the tag + # + if ($tag) { + # skip lines + &skip_until($tag), next if $tag eq 'ignore'; + &skip_until($tag), next if $tag eq 'ifnothtml'; + if ($tag eq 'ifinfo') + { + &skip_until($tag), next unless $T2H_EXPAND eq 'info'; + } + if ($tag eq 'iftex') + { + &skip_until($tag), next unless $T2H_EXPAND eq 'tex'; + } + if ($tag eq 'tex') + { + # add to latex2html file + if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre) + { + # add space to the end -- tex(i2dvi) does this, as well + push(@lines, &l2h_ToLatex(&string_until($tag) . " ")); + } + else + { + &skip_until($tag); + } + next; + } + if ($tag eq 'titlepage') + { + next; + } + # handle special tables + if ($tag =~ /^(|f|v|multi)table$/) { + $table_type = $1; + $tag = 'table'; + } + # special cases + if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) { + $in_top = 1; + $has_top = 1; + $has_top_command = 1 if $tag eq 'top'; + @lines = (); # ignore all lines before top (title page garbage) + next; + } elsif ($tag eq 'node') { + if ($in_top) + { + $in_top = 0; + push(@lines, $TOPEND); + } + warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o; + # request of "Richard Y. Kim" <ryk@ap.com> + s/^\@node\s+//; + $_ = &protect_html($_); # if node contains '&' for instance + ($node, $node_next, $node_prev, $node_up) = split(/,/); + &normalise_node($node); + &normalise_node($node_next); + &normalise_node($node_prev); + &normalise_node($node_up); + $node =~ /\"/ ? + push @lines, &html_debug("<A NAME='$node'></A>\n", __LINE__) : + push @lines, &html_debug("<A NAME=\"$node\"></A>\n", __LINE__); + next; + } elsif ($tag eq 'include') { + if (/^\@include\s+($FILERE)\s*$/o) { + $file = LocateIncludeFile($1); + if ($file && -e $file) { + &open($file); + print "# including $file\n" if $T2H_VERBOSE; + } else { + warn "$ERROR Can't find $1, skipping"; + } + } else { + warn "$ERROR Bad include line: $_"; + } + next; + } elsif ($tag eq 'ifclear') { + if (/^\@ifclear\s+($VARRE)\s*$/o) { + next unless defined($value{$1}); + &skip_until($tag); + } else { + warn "$ERROR Bad ifclear line: $_"; + } + next; + } elsif ($tag eq 'ifset') { + if (/^\@ifset\s+($VARRE)\s*$/o) { + next if defined($value{$1}); + &skip_until($tag); + } else { + warn "$ERROR Bad ifset line: $_"; + } + next; + } elsif ($tag eq 'menu') { + unless ($T2H_SHOW_MENU) { + &skip_until($tag); + next; + } + &html_push_if($tag); + push(@lines, &html_debug('', __LINE__)); + } elsif ($format_map{$tag}) { + $in_pre = 1 if $format_map{$tag} eq 'PRE'; + &html_push_if($format_map{$tag}); + push(@lines, &html_debug('', __LINE__)); + $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ; +# push(@lines, &debug("<BLOCKQUOTE>\n", __LINE__)) +# if $tag =~ /example/i; + # sunshine@sunshineco.com: <PRE>bla</PRE> looks better than + # <PRE>\nbla</PRE> (at least on NeXTstep browser + push(@lines, &debug("<$format_map{$tag}>" . + ($in_pre ? '' : "\n"), __LINE__)); + next; + } + elsif (exists $complex_format_map->{$tag}) + { + my $start = eval $complex_format_map->{$tag}->[0]; + if ($@) + { + print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@"; + $start = '<pre>' + } + $in_pre = 1 if $start =~ /<pre/; + push(@lines, html_debug($start. ($in_pre ? '' : "\n"), __LINE__)); + next; + } elsif ($tag eq 'table') { + # anorland@hem2.passagen.se + # if (/^\s*\@(|f|v|multi)table\s+\@(\w+)/) { + if (/^\s*\@(|f|v|multi)table\s+\@(\w+)|(\{[^\}]*\})/) { + $in_table = $2; + unshift(@tables, join($;, $table_type, $in_table)); + if ($table_type eq "multi") { + # don't use borders -- gets confused by empty cells + push(@lines, &debug("<TABLE>\n", __LINE__)); + &html_push_if('TABLE'); + } else { + push(@lines, &debug("<DL COMPACT>\n", __LINE__)); + &html_push_if('DL'); + } + push(@lines, &html_debug('', __LINE__)); + } else { + warn "$ERROR Bad table line: $_"; + } + next; + } + elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') + { + if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/) + { + my $from = $1; + my $to = $2; + my $prefix_from = IndexName2Prefix($from); + my $prefix_to = IndexName2Prefix($to); + + warn("$ERROR unknown from index name $from ind syn*index line: $_"), next + unless $prefix_from; + warn("$ERROR unknown to index name $to ind syn*index line: $_"), next + unless $prefix_to; + + if ($tag eq 'syncodeindex') + { + $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1; + } + else + { + $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1; + } + } + else + { + warn "$ERROR Bad syn*index line: $_"; + } + next; + } + elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') + { + if (/^\@$tag\s+(\w+)\s*$/) + { + my $name = $1; + $index_properties->{$name}->{name} = $name; + $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex'; + } + else + { + warn "$ERROR Bad defindex line: $_"; + } + next; + } + elsif (/^\@printindex/) + { + push (@lines, "<!--::${section}::-->$_"); + next; + } + elsif ($tag eq 'sp') { + push(@lines, &debug("<P>\n", __LINE__)); + next; + } elsif ($tag eq 'center') { + push(@lines, &debug("<center>\n", __LINE__)); + s/\@center//; + } elsif ($tag eq 'setref') { + &protect_html; # if setref contains '&' for instance + if (/^\@$tag\s*{($NODERE)}\s*$/) { + $setref = $1; + $setref =~ s/\s+/ /g; # normalize + $setref =~ s/ $//; + $node2sec{$setref} = $name; + $sec2node{$name} = $setref; + $node2href{$setref} = "$docu_doc#$docid"; + } else { + warn "$ERROR Bad setref line: $_"; + } + next; + } elsif ($tag eq 'lowersections') { + local ($sec, $level); + while (($sec, $level) = each %sec2level) { + $sec2level{$sec} = $level + 1; + } + next; + } elsif ($tag eq 'raisesections') { + local ($sec, $level); + while (($sec, $level) = each %sec2level) { + $sec2level{$sec} = $level - 1; + } + next; + } + elsif ($tag eq 'macro' || $tag eq 'rmacro') + { + if (/^\@$tag\s*(\w+)\s*(.*)/) + { + my $name = $1; + my @args; + @args = split(/\s*,\s*/ , $1) + if ($2 =~ /^\s*{(.*)}\s*/); + + $macros->{$name}->{Args} = \@args; + $macros->{$name}->{Body} = ''; + while (($_ = &next_line) && $_ !~ /\@end $tag/) + { + $macros->{$name}->{Body} .= $_; + } + die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n" + unless (/\@end $tag/); + chomp $macros->{$name}->{Body}; + } + else + { + warn "$ERROR: Bad macro defintion $_" + } + next; + } + elsif ($tag eq 'unmacro') + { + delete $macros->{$1} if (/^\@unmacro\s*(\w+)/); + next; + } + elsif ($tag eq 'documentlanguage') + { + SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/); + } + elsif (defined($def_map{$tag})) { + if ($def_map{$tag}) { + s/^\@$tag\s+//; + $tag = $def_map{$tag}; + $_ = "\@$tag $_"; + $tag =~ s/\s.*//; + } + } elsif (defined($user_sub{$tag})) { + s/^\@$tag\s+//; + $sub = $user_sub{$tag}; + print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER; + if (defined(&$sub)) { + chop($_); + &$sub($_); + } else { + warn "$ERROR Bad user sub for $tag: $sub\n"; + } + next; + } + if (defined($def_map{$tag})) { + s/^\@$tag\s+//; + if ($tag =~ /x$/) { + # extra definition line + $tag = $`; + $is_extra = 1; + } else { + $is_extra = 0; + } + while (/\{([^\{\}]*)\}/) { + # this is a {} construct + ($before, $contents, $after) = ($`, $1, $'); + # protect spaces + $contents =~ s/\s+/$;9/g; + # restore $_ protecting {} + $_ = "$before$;7$contents$;8$after"; + } + @args = split(/\s+/, &protect_html($_)); + foreach (@args) { + s/$;9/ /g; # unprotect spaces + s/$;7/\{/g; # ... { + s/$;8/\}/g; # ... } + } + $type = shift(@args); + $type =~ s/^\{(.*)\}$/$1/; + print "# def ($tag): {$type} ", join(', ', @args), "\n" + if $T2H_DEBUG & $DEBUG_DEF; + $type .= ':'; # it's nicer like this + my $name = shift(@args); + $name =~ s/^\{(.*)\}$/$1/; + if ($is_extra) { + $_ = &debug("<DT>", __LINE__); + } else { + $_ = &debug("<DL>\n<DT>", __LINE__); + } + if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') { + $_ .= "<U>$type</U> <B>$name</B>"; + $_ .= " <I>@args</I>" if @args; + } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr' + || $tag eq 'defcv' || $tag eq 'defop') { + $ftype = $name; + $name = shift(@args); + $name =~ s/^\{(.*)\}$/$1/; + $_ .= "<U>$type</U> $ftype <B>$name</B>"; + $_ .= " <I>@args</I>" if @args; + } else { + warn "$ERROR Unknown definition type: $tag\n"; + $_ .= "<U>$type</U> <B>$name</B>"; + $_ .= " <I>@args</I>" if @args; + } + $_ .= &debug("\n<DD>", __LINE__); + $name = &unprotect_html($name); + if ($tag eq 'deffn' || $tag eq 'deftypefn') { + EnterIndexEntry('f', $name, $docu_doc, $section, \@lines); +# unshift(@input_spool, "\@findex $name\n"); + } elsif ($tag eq 'defop') { + EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines); +# unshift(@input_spool, "\@findex $name on $ftype\n"); + } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') { + EnterIndexEntry('v', $name, $docu_doc, $section, \@lines); +# unshift(@input_spool, "\@vindex $name\n"); + } else { + EnterIndexEntry('t', $name, $docu_doc, $section, \@lines); +# unshift(@input_spool, "\@tindex $name\n"); + } + $dont_html = 1; + } + } elsif ($end_tag) { + if ($format_map{$end_tag}) { + $in_pre = 0 if $format_map{$end_tag} eq 'PRE'; + $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ; + &html_pop_if('P'); + &html_pop_if('LI'); + &html_pop_if(); + push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__)); + push(@lines, &html_debug('', __LINE__)); + } + elsif (exists $complex_format_map->{$end_tag}) + { + my $end = eval $complex_format_map->{$end_tag}->[1]; + if ($@) + { + print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@"; + $end = '</pre>' + } + $in_pre = 0 if $end =~ m|</pre>|; + push(@lines, html_debug($end, __LINE__)); + } elsif ($end_tag =~ /^(|f|v|multi)table$/) { + unless (@tables) { + warn "$ERROR \@end $end_tag without \@*table\n"; + next; + } + &html_pop_if('P'); + ($table_type, $in_table) = split($;, shift(@tables)); + unless ($1 eq $table_type) { + warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; + next; + } + if ($table_type eq "multi") { + push(@lines, "</TR></TABLE>\n"); + &html_pop_if('TR'); + } else { + push(@lines, "</DL>\n"); + &html_pop_if('DD'); + } + &html_pop_if(); + if (@tables) { + ($table_type, $in_table) = split($;, $tables[0]); + } else { + $in_table = 0; + } + } elsif (defined($def_map{$end_tag})) { + push(@lines, &debug("</DL>\n", __LINE__)); + } elsif ($end_tag eq 'menu') { + &html_pop_if(); + push(@lines, $_); # must keep it for pass 2 + } + next; + } + ############################################################# + # anchor insertion + while (/\@anchor\s*\{(.*?)\}/) + { + $_ = $`.$'; + my $anchor = $1; + $anchor = &normalise_node($anchor); + push @lines, &html_debug("<A NAME=\"$anchor\"></A>\n"); + $node2href{$anchor} = "$docu_doc#$anchor"; + next INPUT_LINE if $_ =~ /^\s*$/; + } + + ############################################################# + # index entry generation, after value substitutions + if (/^\@(\w+?)index\s+/) + { + EnterIndexEntry($1, $', $docu_doc, $section, \@lines); + next; + } + # + # protect texi and HTML things + &protect_texi; + $_ = &protect_html($_) unless $dont_html; + $dont_html = 0; + # substitution (unsupported things) + s/^\@exdent\s+//g; + s/\@noindent\s+//g; + s/\@refill\s+//g; + # other substitutions + &simple_substitutions; + s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4 + # + # analyze the tag again + # + if ($tag) { + if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) { + if (/^\@$tag\s+(.+)$/) { + $name = $1; + $name = &normalise_node($name); + $level = $sec2level{$tag}; + # check for index + $first_index_chapter = $node + if ($level == 1 && !$first_index_chapter && + $name =~ /index/i); + if ($in_top && /heading/){ + $T2H_HAS_TOP_HEADING = 1; + $_ = &debug("<H$level>$name</H$level>\n", __LINE__); + &html_push_if('body'); + print "# top heading, section $name, level $level\n" + if $T2H_DEBUG & $DEBUG_TOC; + } + else + { + unless (/^\@\w*heading/) + { + unless (/^\@unnumbered/) + { + my $number = &update_sec_num($tag, $level); + $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS; + $sec2number{$name} = $number; + $number2sec{$number} = $name; + } + if (defined($toplevel)) + { + push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND); + } + else + { + # first time we see a "section" + unless ($level == 1) + { + warn "$WARN The first section found is not of level 1: $_"; + } + $toplevel = $level; + } + push(@sections, $name); + next_doc() if ($T2H_SPLIT eq 'section' || + $T2H_SPLIT && $level == $toplevel); + } + $sec_num++; + $docid = "SEC$sec_num"; + $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num"); + # check biblio and glossary + $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); + $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); + # check node + if ($node) + { + warn "$ERROR Duplicate node found: $node\n" + if ($node2sec{$node}); + } + else + { + $name .= ' ' while ($node2sec{$name}); + $node = $name; + } + $name .= ' ' while ($sec2node{$name}); + $section = $name; + $node2sec{$node} = $name; + $sec2node{$name} = $node; + $node2href{$node} = "$docu_doc#$docid"; + $node2next{$node} = $node_next; + $node2prev{$node} = $node_prev; + $node2up{$node} = $node_up; + print "# node $node, section $name, level $level\n" + if $T2H_DEBUG & $DEBUG_TOC; + + $node = ''; + $node_next = ''; + $node_prev = ''; + $node_next = ''; + if ($tocid) + { + # update TOC + while ($level > $curlevel) { + $curlevel++; + push(@toc_lines, "<UL>\n"); + } + while ($level < $curlevel) { + $curlevel--; + push(@toc_lines, "</UL>\n"); + } + $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1); + $_ = &substitute_style($_); + push(@stoc_lines, "$_<BR>\n") if ($level == 1); + if ($T2H_NUMBER_SECTIONS) + { + push(@toc_lines, $_ . "<BR>\n") + } + else + { + push(@toc_lines, "<LI>" . $_ ."</LI>"); + } + } + else + { + push(@lines, &html_debug("<A NAME=\"$docid\"></A>\n", + __LINE__)); + } + # update DOC + push(@lines, &html_debug('', __LINE__)); + &html_reset; + $_ = "<H$level> $name </H$level>\n<!--docid::${docid}::-->\n"; + $_ = &debug($_, __LINE__); + push(@lines, &html_debug('', __LINE__)); + } + # update DOC + foreach $line (split(/\n+/, $_)) { + push(@lines, "$line\n"); + } + next; + } else { + warn "$ERROR Bad section line: $_"; + } + } else { + # track variables + $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o; + delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o; + # store things + $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/; + $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/; + $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/; + $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/; + $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/; + $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/; + + # list item + if (/^\s*\@itemx?\s+/) { + $what = $'; + $what =~ s/\s+$//; + if ($in_bibliography && $use_bibliography) { + if ($what =~ /^$BIBRE$/o) { + $id = 'BIB' . ++$bib_num; + $bib2href{$what} = "$docu_doc#$id"; + print "# found bibliography for '$what' id $id\n" + if $T2H_DEBUG & $DEBUG_BIB; + $what = &t2h_anchor($id, '', $what); + } + } elsif ($in_glossary && $T2H_USE_GLOSSARY) { + $id = 'GLOSS' . ++$gloss_num; + $entry = $what; + $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; + $gloss2href{$entry} = "$docu_doc#$id"; + print "# found glossary for '$entry' id $id\n" + if $T2H_DEBUG & $DEBUG_GLOSS; + $what = &t2h_anchor($id, '', $what); + } + elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v')) + { + EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines); + } + &html_pop_if('P'); + if ($html_element eq 'DL' || $html_element eq 'DD') { + if ($things_map{$in_table} && !$what) { + # special case to allow @table @bullet for instance + push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__)); + } else { + push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__)); + } + push(@lines, "<DD>"); + &html_push('DD') unless $html_element eq 'DD'; + if ($table_type) { # add also an index + unshift(@input_spool, "\@${table_type}index $what\n"); + } + } elsif ($html_element eq 'TABLE') { + push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); + &html_push('TR'); + } elsif ($html_element eq 'TR') { + push(@lines, &debug("</TR>\n", __LINE__)); + push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); + } else { + push(@lines, &debug("<LI>$what\n", __LINE__)); + &html_push('LI') unless $html_element eq 'LI'; + } + push(@lines, &html_debug('', __LINE__)); + if ($deferred_ref) { + push(@lines, &debug("$deferred_ref\n", __LINE__)); + $deferred_ref = ''; + } + next; + } elsif (/^\@tab\s+(.*)$/) { + push(@lines, "<TD>$1</TD>\n"); + next; + } + } + } + # paragraph separator + if ($_ eq "\n" && ! $in_pre) { + next if $#lines >= 0 && $lines[$#lines] eq "\n"; + if ($html_element eq 'P') { + push (@lines, &debug("</P><P>\n", __LINE__)); + } +# else +# { +# push(@lines, "<P></P>\n"); +# $_ = &debug("<P></P>\n", __LINE__); +# } + elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI') + { + &html_push('P'); + push(@lines, &debug("<P>\n", __LINE__)); + } + } + # otherwise + push(@lines, $_) unless $in_titlepage; + push(@lines, &debug("</center>\n", __LINE__)) if ($tag eq 'center'); +} + +# finish TOC +$level = 0; +while ($level < $curlevel) { + $curlevel--; + push(@toc_lines, "</UL>\n"); +} + +print "# end of pass 1\n" if $T2H_VERBOSE; + +SetDocumentLanguage('en') unless ($T2H_LANG); +#+++############################################################################ +# # +# Stuff related to Index generation # +# # +#---############################################################################ + +sub EnterIndexEntry +{ + my $prefix = shift; + my $key = shift; + my $docu_doc = shift; + my $section = shift; + my $lines = shift; + local $_; + + warn "$ERROR Undefined index command: $_", next + unless (exists ($index_properties->{$prefix})); + $key =~ s/\s+$//; + $_ = $key; + &protect_texi; + $key = $_; + $_ = &protect_html($_); + my $html_key = substitute_style($_); + my $id; + $key = remove_style($key); + $key = remove_things($key); + $_ = $key; + &unprotect_texi; + $key = $_; + while (exists $index->{$prefix}->{$key}) {$key .= ' '}; + if ($lines->[$#lines] =~ /^<!--docid::(.+)::-->$/) + { + $id = $1; + } + else + { + $id = 'IDX' . ++$idx_num; + push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre)); + } + $index->{$prefix}->{$key}->{html_key} = $html_key; + $index->{$prefix}->{$key}->{section} = $section; + $index->{$prefix}->{$key}->{href} = "$docu_doc#$id"; + print "# found ${prefix}index for '$key' with id $id\n" + if $T2H_DEBUG & $DEBUG_INDEX; +} + +sub IndexName2Prefix +{ + my $name = shift; + my $prefix; + + for $prefix (keys %$index_properties) + { + return $prefix if ($index_properties->{$prefix}->{name} eq $name); + } + return undef; +} + +sub GetIndexEntries +{ + my $normal = shift; + my $code = shift; + my ($entries, $prefix, $key) = ({}); + + for $prefix (keys %$normal) + { + for $key (keys %{$index->{$prefix}}) + { + $entries->{$key} = {%{$index->{$prefix}->{$key}}}; + } + } + + if (defined($code)) + { + for $prefix (keys %$code) + { + unless (exists $normal->{$keys}) + { + for $key (keys %{$index->{$prefix}}) + { + $entries->{$key} = {%{$index->{$prefix}->{$key}}}; + $entries->{$key}->{html_key} = "<CODE>$entries->{$key}->{html_key}</CODE>"; + } + } + } + } + return $entries; +} + +sub byAlpha +{ + if ($a =~ /^[A-Za-z]/) + { + if ($b =~ /^[A-Za-z]/) + { + return lc($a) cmp lc($b); + } + else + { + return 1; + } + } + elsif ($b =~ /^[A-Za-z]/) + { + return -1; + } + else + { + return lc($a) cmp lc($b); + } +} + +sub GetIndexPages +{ + my $entries = shift; + my (@Letters, $key); + my ($EntriesByLetter, $Pages, $page) = ({}, [], {}); + my @keys = sort byAlpha keys %$entries; + + for $key (@keys) + { + push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key}; + } + @Letters = sort byAlpha keys %$EntriesByLetter; + + $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT); + + unless ($T2H_SPLIT_INDEX) + { + $page->{First} = $Letters[0]; + $page->{Last} = $Letters[$#Letters]; + $page->{Letters} = \@Letters; + $page->{EntriesByLetter} = $EntriesByLetter; + push @$Pages, $page; + return $Pages; + } + + if ($T2H_SPLIT_INDEX =~ /^\d+$/) + { + my $i = 0; + my ($prev_letter, $letter); + $page->{First} = $Letters[0]; + for $letter (@Letters) + { + if ($i > $T2H_SPLIT_INDEX) + { + $page->{Last} = $prev_letter; + push @$Pages, {%$page}; + $page->{Letters} = []; + $page->{EntriesByLetter} = {}; + $page->{First} = $letter; + $i=0; + } + push @{$page->{Letters}}, $letter; + $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}]; + $i += scalar(@{$EntriesByLetter->{$letter}}); + $prev_letter = $letter; + } + $page->{Last} = $Letters[$#Letters]; + push @$Pages, {%$page}; + } + return $Pages; +} + +sub GetIndexSummary +{ + my $first_page = shift; + my $Pages = shift; + my $name = shift; + my ($page, $letter, $summary, $i, $l1, $l2, $l); + + $i = 0; + $summary = '<table><tr><th valign=top>Jump to: </th><td>'; + + for $page ($first_page, @$Pages) + { + for $letter (@{$page->{Letters}}) + { + $l = t2h_anchor('', "$page->{href}#${name}_$letter", "<b>$letter</b>", + 0, 'style="text-decoration:none"') . "\n \n"; + + if ($letter =~ /^[A-Za-z]/) + { + $l2 .= $l; + } + else + { + $l1 .= $l; + } + } + } + $summary .= $l1 . "<BR>\n" if ($l1); + $summary .= $l2 . '</td></tr></table><br>'; + return $summary; +} + +sub PrintIndexPage +{ + my $lines = shift; + my $summary = shift; + my $page = shift; + my $name = shift; + + push @$lines, $summary; + + push @$lines , <<EOT; +<P></P> +<TABLE border=0> +<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> +<TR><TD COLSPAN=3> <HR></TD></TR> +EOT + + for $letter (@{$page->{Letters}}) + { + push @$lines, "<TR><TH><A NAME=\"${name}_$letter\"></A>$letter</TH><TD></TD><TD></TD></TR>\n"; + for $entry (@{$page->{EntriesByLetter}->{$letter}}) + { + push @$lines, + "<TR><TD></TD><TD valign=top>" . + t2h_anchor('', $entry->{href}, $entry->{html_key}) . + "</TD><TD valign=top>" . + t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) . + "</TD></TR>\n"; + } + push @$lines, "<TR><TD COLSPAN=3> <HR></TD></TR>\n"; + } + push @$lines, "</TABLE><P></P>"; + push @$lines, $summary; +} + +sub PrintIndex +{ + my $lines = shift; + my $name = shift; + my $section = shift; + $section = 'Top' unless $section; + my $prefix = IndexName2Prefix($name); + + warn ("$ERROR printindex: bad index name: $name"), return + unless $prefix; + + if ($index_properties->{$prefix}->{code}) + { + $index_properties->{$prefix}->{from_code}->{$prefix} = 1; + } + else + { + $index_properties->{$prefix}->{from}->{$prefix}= 1; + } + + my $Entries = GetIndexEntries($index_properties->{$prefix}->{from}, + $index_properties->{$prefix}->{from_code}); + return unless %$Entries; + + if ($T2H_IDX_SUMMARY) + { + my $key; + open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx") + || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n"; + print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE; + + for $key (sort keys %$Entries) + { + print FHIDX "$key\t$Entries->{$key}->{href}\n"; + } + } + + my $Pages = GetIndexPages($Entries); + my $page; + my $first_page = shift @$Pages; + my $sec_name = $section; + # remove section number + $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./; + + ($first_page->{href} = sec_href($section)) =~ s/\#.*$//; + # Update tree structure of document + if (@$Pages) + { + my $sec; + my @after; + + while (@sections && $sections[$#sections] ne $section) + { + unshift @after, pop @sections; + } + + for $page (@$Pages) + { + my $node = ($page->{First} ne $page->{Last} ? + "$sec_name: $page->{First} -- $page->{Last}" : + "$sec_name: $page->{First}"); + push @sections, $node; + $node2sec{$node} = $node; + $sec2node{$node} = $node; + $node2up{$node} = $section; + $page->{href} = next_doc(); + $page->{name} = $node; + $node2href{$node} = $page->{href}; + if ($prev_node) + { + $node2next{$prev_node} = $node; + $node2prev{$node} = $prev_node; + } + $prev_node = $node; + } + push @sections, @after; + } + + my $summary = GetIndexSummary($first_page, $Pages, $name); + PrintIndexPage($lines, $summary, $first_page, $name); + for $page (@$Pages) + { + push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); + push @$lines, "<H2 ALIGN=\"Left\">$page->{name}</H2>\n"; + PrintIndexPage($lines, $summary, $page, $name); + } +} + + +#+++############################################################################ +# # +# Pass 2/3: handle style, menu, index, cross-reference # +# # +#---############################################################################ + +@lines2 = (); # whole document (2nd pass) +@lines3 = (); # whole document (3rd pass) +$in_menu = 0; # am I inside a menu + +while (@lines) { + $_ = shift(@lines); + # + # special case (protected sections) + # + if (/^$PROTECTTAG/o) { + push(@lines2, $_); + next; + } + # + # menu + # + if (/^\@menu\b/) + { + $in_menu = 1; + $in_menu_listing = 1; + push(@lines2, &debug("<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> \n", __LINE__)); + next; + } + if (/^\@end\s+menu\b/) + { + if ($in_menu_listing) + { + push(@lines2, &debug("</TABLE></BLOCKQUOTE>\n", __LINE__)); + } + else + { + push(@lines2, &debug("</BLOCKQUOTE>\n", __LINE__)); + } + $in_menu = 0; + $in_menu_listing = 0; + next; + } + if ($in_menu) + { + my ($node, $name, $descr); + if (/^\*\s+($NODERE)::/o) + { + $node = $1; + $descr = $'; + } + elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) + { + $name = $1; + $node = $2; + $descr = $'; + } + elsif (/^\*/) + { + warn "$ERROR Bad menu line: $_"; + } + else + { + if ($in_menu_listing) + { + $in_menu_listing = 0; + push(@lines2, &debug("</TABLE>\n", __LINE__)); + } + # should be like verbatim -- preseve spaces, etc + s/ /\ /g; + $_ .= "<br>\n"; + push(@lines2, $_); + } + if ($node) + { + if (! $in_menu_listing) + { + $in_menu_listing = 1; + push(@lines2, &debug("<TABLE BORDER=0 CELLSPACING=0>\n", __LINE__)); + } + # look for continuation + while ($lines[0] =~ /^\s+\w+/) + { + $descr .= shift(@lines); + } + &menu_entry($node, $name, $descr); + } + next; + } + # + # printindex + # + PrintIndex(\@lines2, $2, $1), next + if (/^<!--::(.*)::-->\@printindex\s+(\w+)/); + # + # simple style substitutions + # + $_ = &substitute_style($_); + # + # xref + # + while (/\@(x|px|info|)ref{([^{}]+)(}?)/) { + # note: Texinfo may accept other characters + ($type, $nodes, $full) = ($1, $2, $3); + ($before, $after) = ($`, $'); + if (! $full && $after) { + warn "$ERROR Bad xref (no ending } on line): $_"; + $_ = "$before$;0${type}ref\{$nodes$after"; + next; # while xref + } + if ($type eq 'x') { + $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} "; + } elsif ($type eq 'px') { + $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} "; + } elsif ($type eq 'info') { + $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info"; + } else { + $type = ''; + } + unless ($full) { + $next = shift(@lines); + $next = &substitute_style($next); + chop($nodes); # remove final newline + if ($next =~ /\}/) { # split on 2 lines + $nodes .= " $`"; + $after = $'; + } else { + $nodes .= " $next"; + $next = shift(@lines); + $next = &substitute_style($next); + chop($nodes); + if ($next =~ /\}/) { # split on 3 lines + $nodes .= " $`"; + $after = $'; + } else { + warn "$ERROR Bad xref (no ending }): $_"; + $_ = "$before$;0xref\{$nodes$after"; + unshift(@lines, $next); + next; # while xref + } + } + } + $nodes =~ s/\s+/ /g; # remove useless spaces + @args = split(/\s*,\s*/, $nodes); + $node = $args[0]; # the node is always the first arg + $node = &normalise_node($node); + $sec = $args[2] || $args[1] || $node2sec{$node}; + $href = $node2href{$node}; + if (@args == 5) { # reference to another manual + $sec = $args[2] || $node; + $man = $args[4] || $args[3]; + $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after"; + } elsif ($type =~ /Info/) { # inforef + warn "$ERROR Wrong number of arguments: $_" unless @args == 3; + ($nn, $_, $in) = @args; + $_ = "${before}${type} file `$in', node `$nn'$after"; + } elsif ($sec && $href && ! $T2H_SHORT_REF) { + $_ = "${before}${type}"; + $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type}; + $_ .= &t2h_anchor('', $href, $sec) . $after; + } + elsif ($href) + { + $_ = "${before}${type} " . + &t2h_anchor('', $href, $args[2] || $args[1] || $node) . + $after; + } + else { + warn "$ERROR Undefined node ($node): $_"; + $_ = "$before$;0xref{$nodes}$after"; + } + } + + # replace images + s[\@image\s*{(.+?)}] + { + my @args = split (/\s*,\s*/, $1); + my $base = $args[0]; + my $image = + LocateIncludeFile("$base.png") || + LocateIncludeFile("$base.jpg") || + LocateIncludeFile("$base.gif"); + warn "$ERROR no image file for $base: $_" unless ($image && -e $image); + "<IMG SRC=\"$image\" ALT=\"$base\">"; + ($T2H_CENTER_IMAGE ? + "<CENTER><IMG SRC=\"$image\" ALT=\"$base\"></CENTER>" : + "<IMG SRC=\"$image\" ALT=\"$base\">"); + }eg; + + # + # try to guess bibliography references or glossary terms + # + unless (/^<H\d><A NAME=\"SEC\d/) { + if ($use_bibliography) { + $done = ''; + while (/$BIBRE/o) { + ($pre, $what, $post) = ($`, $&, $'); + $href = $bib2href{$what}; + if (defined($href) && $post !~ /^[^<]*<\/A>/) { + $done .= $pre . &t2h_anchor('', $href, $what); + } else { + $done .= "$pre$what"; + } + $_ = $post; + } + $_ = $done . $_; + } + if ($T2H_USE_GLOSSARY) { + $done = ''; + while (/\b\w+\b/) { + ($pre, $what, $post) = ($`, $&, $'); + $entry = $what; + $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; + $href = $gloss2href{$entry}; + if (defined($href) && $post !~ /^[^<]*<\/A>/) { + $done .= $pre . &t2h_anchor('', $href, $what); + } else { + $done .= "$pre$what"; + } + $_ = $post; + } + $_ = $done . $_; + } + } + # otherwise + push(@lines2, $_); +} +print "# end of pass 2\n" if $T2H_VERBOSE; + +# +# split style substitutions +# +while (@lines2) { + $_ = shift(@lines2); + # + # special case (protected sections) + # + if (/^$PROTECTTAG/o) { + push(@lines3, $_); + next; + } + # + # split style substitutions + # + $old = ''; + while ($old ne $_) { + $old = $_; + if (/\@(\w+)\{/) { + ($before, $style, $after) = ($`, $1, $'); + if (defined($style_map{$style})) { + $_ = $after; + $text = ''; + $after = ''; + $failed = 1; + while (@lines2) { + if (/\}/) { + $text .= $`; + $after = $'; + $failed = 0; + last; + } else { + $text .= $_; + $_ = shift(@lines2); + } + } + if ($failed) { + die "* Bad syntax (\@$style) after: $before\n"; + } else { + $text = &apply_style($style, $text); + $_ = "$before$text$after"; + } + } + } + } + # otherwise + push(@lines3, $_); +} +print "# end of pass 3\n" if $T2H_VERBOSE; + +#+++############################################################################ +# # +# Pass 4: foot notes, final cleanup # +# # +#---############################################################################ + +@foot_lines = (); # footnotes +@doc_lines = (); # final document +$end_of_para = 0; # true if last line is <P> + +while (@lines3) { + $_ = shift(@lines3); + # + # special case (protected sections) + # + if (/^$PROTECTTAG/o) { + push(@doc_lines, $_); + $end_of_para = 0; + next; + } + # + # footnotes + # + while (/\@footnote([^\{\s]+)\{/) { + ($before, $d, $after) = ($`, $1, $'); + $_ = $after; + $text = ''; + $after = ''; + $failed = 1; + while (@lines3) { + if (/\}/) { + $text .= $`; + $after = $'; + $failed = 0; + last; + } else { + $text .= $_; + $_ = shift(@lines3); + } + } + if ($failed) { + die "* Bad syntax (\@footnote) after: $before\n"; + } else { + $foot_num++; + $docid = "DOCF$foot_num"; + $footid = "FOOT$foot_num"; + $foot = "($foot_num)"; + push(@foot_lines, "<H3>" . &t2h_anchor($footid, "$d#$docid", $foot) . "</H3>\n"); + $text = "<P>$text" unless $text =~ /^\s*<P>/; + push(@foot_lines, "$text\n"); + $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after; + } + } + # + # remove unnecessary <P> + # + if (/^\s*<P>\s*$/) { + next if $end_of_para++; + } else { + $end_of_para = 0; + } + # otherwise + push(@doc_lines, $_); +} + +print "# end of pass 4\n" if $T2H_VERBOSE; + +#+++############################################################################ +# # +# Pass 5: print things # +# # +#---############################################################################ + +$T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H); +$T2H_L2H = &l2h_ToHtml if ($T2H_L2H); +$T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H); + +# fix node2up, node2prev, node2next, if desired +if ($has_top_command) +{ + for $section (keys %sec2number) + { + $node = $sec2node{$section}; + $node2up{$node} = Sec2UpNode($section) unless $node2up{$node}; + $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node}; + $node2next{$node} = Sec2NextNode($section) unless $node2next{$node}; + } +} + +# prepare %T2H_THISDOC +$T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document"; +$T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle}; +$T2H_THISDOC{author} = $value{'_author'}; +$T2H_THISDOC{subtitle} = $value{'_subtitle'}; +$T2H_THISDOC{shorttitle} = $value{'_shorttitle'}; +for $key (keys %T2H_THISDOC) +{ + $_ = &substitute_style($T2H_THISDOC{$key}); + &unprotect_texi; + s/\s*$//; + $T2H_THISDOC{$key} = $_; +} + +# if no sections, then simply print document as is +unless (@sections) +{ + print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE; + open(FILE, "> $docu_top_file") + || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; + + &$T2H_print_page_head(\*FILE); + $T2H_THIS_SECTION = \@doc_lines; + t2h_print_lines(\*FILE); + &$T2H_print_foot_navigation(\*FILE); + &$T2H_print_page_foot(\*FILE); + close(FILE); + goto Finish; +} + +# initialize $T2H_HREF, $T2H_NAME +%T2H_HREF = + ( + 'First' , sec_href($sections[0]), + 'Last', sec_href($sections[$#sections]), + 'About', $docu_about. '#SEC_About', + ); + +# prepare TOC, OVERVIEW, TOP +$T2H_TOC = \@toc_lines; +$T2H_OVERVIEW = \@stoc_lines; +if ($has_top) +{ + while (1) + { + $_ = shift @doc_lines; + last if /$TOPEND/; + push @$T2H_TOP, $_; + } + $T2H_HREF{'Top'} = $docu_top . '#SEC_Top'; +} +else +{ + $T2H_HREF{'Top'} = $T2H_HREF{First}; +} + +$node2href{Top} = $T2H_HREF{Top}; +$T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines; +$T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines; + +# settle on index +if ($T2H_INDEX_CHAPTER) +{ + $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)}; + warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n" + unless $T2H_HREF{Index}; +} +if (! $T2H_HREF{Index} && $first_index_chapter) +{ + $T2H_INDEX_CHAPTER = $first_index_chapter; + $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER}; +} + +print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n" + if ($T2H_VERBOSE && $T2H_HREF{Index}); + +%T2H_NAME = + ( + 'First', clean_name($sec2node{$sections[0]}), + 'Last', clean_name($sec2node{$sections[$#sections]}), + 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'}, + 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'}, + 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'}, + 'Index' , clean_name($T2H_INDEX_CHAPTER), + 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}), + ); + +############################################################################# +# print frame and frame toc file +# +if ( $T2H_FRAMES ) +{ + open(FILE, "> $docu_frame_file") + || die "$ERROR: Can't open $docu_frame_file for writing: $!\n"; + print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; + &$T2H_print_frame(\*FILE); + close(FILE); + + open(FILE, "> $docu_toc_frame_file") + || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n"; + print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; + &$T2H_print_toc_frame(\*FILE); + close(FILE); +} + + +############################################################################# +# print Top +# +open(FILE, "> $docu_top_file") + || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; +&$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT); + +if ($has_top) +{ + print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE; + $T2H_THIS_SECTION = $T2H_TOP; + $T2H_HREF{This} = $T2H_HREF{Top}; + $T2H_NAME{This} = $T2H_NAME{Top}; + &$T2H_print_Top(\*FILE); +} + +close(FILE) if $T2H_SPLIT; + +############################################################################# +# Print sections +# +$T2H_NODE{Forward} = $sec2node{$sections[0]}; +$T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]}); +$T2H_HREF{Forward} = sec_href($sections[0]); +$T2H_NODE{This} = 'Top'; +$T2H_NAME{This} = $T2H_NAME{Top}; +$T2H_HREF{This} = $T2H_HREF{Top}; +if ($T2H_SPLIT) +{ + print "# writing " . scalar(@sections) . + " sections in $docu_rdir$docu_name"."_[1..$doc_num]" + if $T2H_VERBOSE; + $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); + undef $FH; + $doc_num = 0; +} +else +{ + print "# writing " . scalar(@sections) . " sections in $docu_top_file ..." + if $T2H_VERBOSE; + $FH = \*FILE; + $previous = ''; +} + +$counter = 0; +# loop through sections +while ($section = shift(@sections)) +{ + if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND)) + { + if ($FH) + { + #close previous page + &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; + &$T2H_print_page_foot($FH); + close($FH); + undef $FH; + } + } + $T2H_NAME{Back} = $T2H_NAME{This}; + $T2H_HREF{Back} = $T2H_HREF{This}; + $T2H_NODE{Back} = $T2H_NODE{This}; + $T2H_NAME{This} = $T2H_NAME{Forward}; + $T2H_HREF{This} = $T2H_HREF{Forward}; + $T2H_NODE{This} = $T2H_NODE{Forward}; + if ($sections[0]) + { + $T2H_NODE{Forward} = $sec2node{$sections[0]}; + $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward}); + $T2H_HREF{Forward} = sec_href($sections[0]); + } + else + { + undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward}; + } + + $node = $node2up{$T2H_NODE{This}}; + $T2H_HREF{Up} = $node2href{$node}; + if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up}) + { + $T2H_NAME{Up} = $T2H_NAME{Top}; + $T2H_HREF{Up} = $T2H_HREF{Top}; + $T2H_NODE{Up} = 'Up'; + } + else + { + $T2H_NAME{Up} = &clean_name($node); + $T2H_NODE{Up} = $node; + } + + $node = $T2H_NODE{This}; + $node = $node2prev{$node}; + $T2H_NAME{Prev} = &clean_name($node); + $T2H_HREF{Prev} = $node2href{$node}; + $T2H_NODE{Prev} = $node; + + $node = $T2H_NODE{This}; + if ($node2up{$node} && $node2up{$node} ne 'Top'&& + ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node})) + { + $node = $node2up{$node}; + while ($node && $node ne $node2up{$node} && ! $node2prev{$node}) + { + $node = $node2up{$node}; + } + $node = $node2prev{$node} + unless $node2up{$node} eq 'Top' || ! $node2up{$node}; + } + else + { + $node = $node2prev{$node}; + } + $T2H_NAME{FastBack} = &clean_name($node); + $T2H_HREF{FastBack} = $node2href{$node}; + $T2H_NODE{FastBack} = $node; + + $node = $T2H_NODE{This}; + $node = $node2next{$node}; + $T2H_NAME{Next} = &clean_name($node); + $T2H_HREF{Next} = $node2href{$node}; + $T2H_NODE{Next} = $node; + + $node = $T2H_NODE{This}; + if ($node2up{$node} && $node2up{$node} ne 'Top'&& + ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node})) + { + $node = $node2up{$node}; + while ($node && $node ne $node2up{$node} && ! $node2next{$node}) + { + $node = $node2up{$node}; + } + } + $node = $node2next{$node}; + $T2H_NAME{FastForward} = &clean_name($node); + $T2H_HREF{FastForward} = $node2href{$node}; + $T2H_NODE{FastForward} = $node; + + if (! defined($FH)) + { + my $file = $T2H_HREF{This}; + $file =~ s/\#.*$//; + open(FILE, "> $docu_rdir$file") || + die "$ERROR: Can't open $docu_rdir$file for writing: $!\n"; + $FH = \*FILE; + &$T2H_print_page_head($FH); + t2h_print_label($FH); + &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter'; + } + else + { + t2h_print_label($FH); + } + + $T2H_THIS_SECTION = []; + while (@doc_lines) { + $_ = shift(@doc_lines); + last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND); + push(@$T2H_THIS_SECTION, $_); + } + $previous = $_; + &$T2H_print_section($FH); + + if ($T2H_VERBOSE) + { + $counter++; + print "." if $counter =~ /00$/; + } +} +if ($T2H_SPLIT) +{ + &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; + &$T2H_print_page_foot($FH); + close($FH); +} +print "\n" if $T2H_VERBOSE; + +############################################################################# +# Print ToC, Overview, Footnotes +# +undef $T2H_HREF{Prev}; +undef $T2H_HREF{Next}; +undef $T2H_HREF{Back}; +undef $T2H_HREF{Forward}; +undef $T2H_HREF{Up}; + +if (@foot_lines) +{ + print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE; + open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n" + if $T2H_SPLIT; + $T2H_HREF{This} = $docu_foot; + $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'}; + $T2H_THIS_SECTION = \@foot_lines; + &$T2H_print_Footnotes(\*FILE); + close(FILE) if $T2H_SPLIT; +} + +if (@toc_lines) +{ + print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE; + open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n" + if $T2H_SPLIT; + $T2H_HREF{This} = $T2H_HREF{Contents}; + $T2H_NAME{This} = $T2H_NAME{Contents}; + $T2H_THIS_SECTION = \@toc_lines; + &$T2H_print_Toc(\*FILE); + close(FILE) if $T2H_SPLIT; +} + +if (@stoc_lines) +{ + print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE; + open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n" + if $T2H_SPLIT; + + $T2H_HREF{This} = $T2H_HREF{Overview}; + $T2H_NAME{This} = $T2H_NAME{Overview}; + $T2H_THIS_SECTION = \@stoc_lines; + unshift @$T2H_THIS_SECTION, "<BLOCKQUOTE>\n"; + push @$T2H_THIS_SECTION, "\n</BLOCKQUOTE>\n"; + &$T2H_print_Overview(\*FILE); + close(FILE) if $T2H_SPLIT; +} + +if ($about_body = &$T2H_about_body()) +{ + print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE; + open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n" + if $T2H_SPLIT; + + $T2H_HREF{This} = $T2H_HREF{About}; + $T2H_NAME{This} = $T2H_NAME{About}; + $T2H_THIS_SECTION = [$about_body]; + &$T2H_print_About(\*FILE); + close(FILE) if $T2H_SPLIT; +} + +unless ($T2H_SPLIT) +{ + &$T2H_print_page_foot(\*FILE); + close (FILE); +} + +Finish: +&l2h_FinishFromHtml if ($T2H_L2H); +&l2h_Finish if($T2H_L2H); +print "# that's all folks\n" if $T2H_VERBOSE; + +exit(0); + +#+++############################################################################ +# # +# Low level functions # +# # +#---############################################################################ + +sub LocateIncludeFile +{ + my $file = shift; + my $dir; + + return $file if (-e $file && -r $file); + foreach $dir (@T2H_INCLUDE_DIRS) + { + return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); + } + return undef; +} + +sub clean_name +{ + local ($_); + $_ = &remove_style($_[0]); + &unprotect_texi; + return $_; +} + +sub update_sec_num { + local($name, $level) = @_; + my $ret; + + $level--; # here we start at 0 + if ($name =~ /^appendix/ || defined(@appendix_sec_num)) { + # appendix style + if (defined(@appendix_sec_num)) { + &incr_sec_num($level, @appendix_sec_num); + } else { + @appendix_sec_num = ('A', 0, 0, 0); + } + $ret = join('.', @appendix_sec_num[0..$level]); + } else { + # normal style + if (defined(@normal_sec_num)) + { + &incr_sec_num($level, @normal_sec_num); + } + else + { + @normal_sec_num = (1, 0, 0, 0); + } + $ret = join('.', @normal_sec_num[0..$level]); + } + + $ret .= "." if $level == 0; + return $ret; +} + +sub incr_sec_num { + local($level, $l); + $level = shift(@_); + $_[$level]++; + foreach $l ($level+1 .. 3) { + $_[$l] = 0; + } +} + +sub Sec2UpNode +{ + my $sec = shift; + my $num = $sec2number{$sec}; + + return '' unless $num; + return 'Top' unless $num =~ /\.\d+/; + $num =~ s/\.[^\.]*$//; + $num = $num . '.' unless $num =~ /\./; + return $sec2node{$number2sec{$num}}; +} + +sub Sec2PrevNode +{ + my $sec = shift; + my $num = $sec2number{$sec}; + my ($i, $post); + + if ($num =~ /(\w+)(\.$|$)/) + { + $num = $`; + $i = $1; + $post = $2; + if ($i eq 'A') + { + $i = $normal_sec_num[0]; + } + elsif ($i ne '1') + { + # unfortunately, -- operator is not magical + $i = chr(ord($i) + 1); + } + else + { + return ''; + } + return $sec2node{$number2sec{$num . $i . $post}} + } + return ''; +} + +sub Sec2NextNode +{ + my $sec = shift; + my $num = $sec2number{$sec}; + my $i; + + if ($num =~ /(\w+)(\.$|$)/) + { + $num = $`; + $i = $1; + $post = $2; + if ($post eq '.' && $i eq $normal_sec_num[0]) + { + $i = 'A'; + } + else + { + $i++; + } + return $sec2node{$number2sec{$num . $i . $post}} + } + return ''; +} + +sub check { + local($_, %seen, %context, $before, $match, $after); + + while (<>) { + if (/\@(\*|\.|\:|\@|\{|\})/) { + $seen{$&}++; + $context{$&} .= "> $_" if $T2H_VERBOSE; + $_ = "$`XX$'"; + redo; + } + if (/\@(\w+)/) { + ($before, $match, $after) = ($`, $&, $'); + if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address + $seen{'e-mail address'}++; + $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE; + } else { + $seen{$match}++; + $context{$match} .= "> $_" if $T2H_VERBOSE; + } + $match =~ s/^\@/X/; + $_ = "$before$match$after"; + redo; + } + } + + foreach (sort(keys(%seen))) { + if ($T2H_VERBOSE) { + print "$_\n"; + print $context{$_}; + } else { + print "$_ ($seen{$_})\n"; + } + } +} + +sub open { + local($name) = @_; + + ++$fh_name; + if (open($fh_name, $name)) { + unshift(@fhs, $fh_name); + } else { + warn "$ERROR Can't read file $name: $!\n"; + } +} + +sub init_input { + @fhs = (); # hold the file handles to read + @input_spool = (); # spooled lines to read + $fh_name = 'FH000'; + &open($docu); +} + +sub next_line { + local($fh, $line); + + if (@input_spool) { + $line = shift(@input_spool); + return($line); + } + while (@fhs) { + $fh = $fhs[0]; + $line = <$fh>; + return($line) if $line; + close($fh); + shift(@fhs); + } + return(undef); +} + +# used in pass 1, use &next_line +sub skip_until { + local($tag) = @_; + local($_); + + while ($_ = &next_line) { + return if /^\@end\s+$tag\s*$/; + } + die "* Failed to find '$tag' after: " . $lines[$#lines]; +} + +# used in pass 1 for l2h use &next_line +sub string_until { + local($tag) = @_; + local($_, $string); + + while ($_ = &next_line) { + return $string if /^\@end\s+$tag\s*$/; +# $_ =~ s/hbox/mbox/g; + $string = $string.$_; + } + die "* Failed to find '$tag' after: " . $lines[$#lines]; +} + +# +# HTML stacking to have a better HTML output +# + +sub html_reset { + @html_stack = ('html'); + $html_element = 'body'; +} + +sub html_push { + local($what) = @_; + push(@html_stack, $html_element); + $html_element = $what; +} + +sub html_push_if { + local($what) = @_; + push(@html_stack, $html_element) + if ($html_element && $html_element ne 'P'); + $html_element = $what; +} + +sub html_pop { + $html_element = pop(@html_stack); +} + +sub html_pop_if { + local($elt); + + if (@_) { + foreach $elt (@_) { + if ($elt eq $html_element) { + $html_element = pop(@html_stack) if @html_stack; + last; + } + } + } else { + $html_element = pop(@html_stack) if @html_stack; + } +} + +sub html_debug { + local($what, $line) = @_; + if ($T2H_DEBUG & $DEBUG_HTML) + { + $what = "\n" unless $what; + return("<!-- $line @html_stack, $html_element -->$what") + } + return($what); +} + +# to debug the output... +sub debug { + local($what, $line) = @_; + return("<!-- $line -->$what") + if $T2H_DEBUG & $DEBUG_HTML; + return($what); +} + +sub SimpleTexi2Html +{ + local $_ = $_[0]; + &protect_texi; + &protect_html; + $_ = substitute_style($_); + $_[0] = $_; +} + +sub normalise_node { + local $_ = $_[0]; + s/\s+/ /g; + s/ $//; + s/^ //; + &protect_texi; + &protect_html; + $_ = substitute_style($_); + $_[0] = $_; +} + +sub menu_entry +{ + my ($node, $name, $descr) = @_; + my ($href, $entry); + + &normalise_node($node); + $href = $node2href{$node}; + if ($href) + { + $descr =~ s/^\s+//; + $descr =~ s/\s*$//; + $descr = SimpleTexi2Html($descr); + if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node}) + { + $entry = $node2sec{$node}; + $name = ''; + } + else + { + &normalise_node($name); + $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY) + ? "$name : $node" : $node); + } + + if ($T2H_AVOID_MENU_REDUNDANCY && $descr) + { + my $clean_entry = $entry; + $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /); + $clean_entry =~ s/[^\w]//g; + my $clean_descr = $descr; + $clean_descr =~ s/[^\w]//g; + $descr = '' if ($clean_entry eq $clean_descr) + } + push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . + &t2h_anchor('', $href, $entry) . + '</TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">' . + $descr . + "</TD></TR>\n", __LINE__)); + } + elsif ($node =~ /^\(.*\)\w+/) + { + push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . + $entry . + '</TD><TD ALIGN="left" VALIGN="TOP">' . $descr . + "</TD></TR>\n", __LINE__)) + } + else + { + warn "$ERROR Undefined node of menu_entry ($node): $_"; + } +} + +sub do_ctrl { "^$_[0]" } + +sub do_email { + local($addr, $text) = split(/,\s*/, $_[0]); + + $text = $addr unless $text; + &t2h_anchor('', "mailto:$addr", $text); +} + +sub do_sc +{ + # l2h does this much better + return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H); + return "\U$_[0]\E"; +} + +sub do_math +{ + return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H); + return "<EM>".$text."</EM>"; +} + +sub do_uref { + local($url, $text, $only_text) = split(/,\s*/, $_[0]); + + $text = $only_text if $only_text; + $text = $url unless $text; + &t2h_anchor('', $url, $text); +} + +sub do_url { &t2h_anchor('', $_[0], $_[0]) } + +sub do_acronym +{ + return '<FONT SIZE="-1">' . $_[0] . '</FONT>'; +} + +sub do_accent +{ + return "&$_[0]acute;" if $_[1] eq 'H'; + return "$_[0]." if $_[1] eq 'dotaccent'; + return "$_[0]*" if $_[1] eq 'ringaccent'; + return "$_[0]".'[' if $_[1] eq 'tieaccent'; + return "$_[0]".'(' if $_[1] eq 'u'; + return "$_[0]_" if $_[1] eq 'ubaraccent'; + return ".$_[0]" if $_[1] eq 'udotaccent'; + return "$_[0]<" if $_[1] eq 'v'; + return "&$_[0]cedil;" if $_[1] eq ','; + return "$_[0]" if $_[1] eq 'dotless'; + return undef; +} + +sub apply_style { + local($texi_style, $text) = @_; + local($style); + + $style = $style_map{$texi_style}; + if (defined($style)) { # known style + if ($style =~ /^\"/) { # add quotes + $style = $'; + $text = "\`$text\'"; + } + if ($style =~ /^\&/) { # custom + $style = $'; + $text = &$style($text, $texi_style); + } elsif ($style) { # good style + $text = "<$style>$text</$style>"; + } else { # no style + } + } else { # unknown style + $text = undef; + } + return($text); +} + +# remove Texinfo styles +sub remove_style { + local($_) = @_; + 1 while(s/\@\w+{([^\{\}]+)}/$1/g); + return($_); +} + +sub remove_things +{ + local ($_) = @_; + s|\@(\w+)\{\}|$1|g; + return $_; +} + +sub substitute_style { + local($_) = @_; + local($changed, $done, $style, $text); + + &simple_substitutions; + $changed = 1; + while ($changed) { + $changed = 0; + $done = ''; + while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) { + $text = &apply_style($1, $2); + if ($text) { + $_ = "$`$text$'"; + $changed = 1; + } else { + $done .= "$`\@$1"; + $_ = "{$2}$'"; + } + } + $_ = $done . $_; + } + return($_); +} + +sub t2h_anchor { + local($name, $href, $text, $newline, $extra_attribs) = @_; + local($result); + + $result = "<A"; + $result .= " NAME=\"$name\"" if $name; + if ($href) + { + $href =~ s|^$T2H_HREF_DIR_INSTEAD_FILE|./| + if ($T2H_HREF_DIR_INSTEAD_FILE); + $result .= ($href =~ /\"/ ? " HREF='$href'" : " HREF=\"$href\""); + } + $result .= " $extra_attribs" if $extra_attribs; + $result .= ">$text</A>"; + $result .= "\n" if $newline; + return($result); +} + +sub pretty_date { + local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); + + @MoY = ('January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December'); + ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); + $year += ($year < 70) ? 2000 : 1900; + # obachman: Let's do it as the Americans do + return("$MoY[$mon], $mday $year"); +} + +sub doc_href { + local($num) = @_; + + return("${docu_name}_$num.$docu_ext"); +} + +sub sec_href +{ + return $node2href{$sec2node{$_[0]}}; +} + +sub next_doc { + $docu_doc = &doc_href(++$doc_num); +} + +sub t2h_print_lines { + my ($fh, $lines) = @_; + local($_); + $lines = $T2H_THIS_SECTION unless $lines; + my $cnt = 0; + for (@$lines) + { + $_ = l2h_FromHtml($_) if ($T2H_L2H); + if (/^$PROTECTTAG/o) { + $_ = $tag2pro{$_}; + } else { + &unprotect_texi; + } + print $fh $_; + $cnt += split(/\W*\s+\W*/); + } + return $cnt; +} + +sub protect_texi { + # protect @ { } ` ' + s/\@\@/$;0/go; + s/\@\{/$;1/go; + s/\@\}/$;2/go; + s/\@\`/$;3/go; + s/\@\'/$;4/go; +} + +sub protect_html { + local($what) = @_; + # protect & < > + $what =~ s/\&/\&\#38;/g; + $what =~ s/\</\&\#60;/g; + $what =~ s/\>/\&\#62;/g; + # restore anything in quotes + # this fixes my problem where I had: + # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted < in my ALT text ?? + # maybe byte stuffing or some other technique should be used. + $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g; + $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g; + $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g; + # but recognize some HTML things + $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A> + $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+> + $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+> + return($what); +} + +sub unprotect_texi { + s/$;0/\@/go; + s/$;1/\{/go; + s/$;2/\}/go; + s/$;3/\`/go; + s/$;4/\'/go; +} + +sub Unprotect_texi +{ + local $_ = shift; + &unprotect_texi; + return($_); +} + +sub unprotect_html { + local($what) = @_; + $what =~ s/\&\#38;/\&/g; + $what =~ s/\&\#60;/\</g; + $what =~ s/\&\#62;/\>/g; + return($what); +} + +sub t2h_print_label +{ + my $fh = shift; + my $href = shift || $T2H_HREF{This}; + $href =~ s/.*#(.*)$/$1/; + print $fh qq{<A NAME="$href"></A>\n}; +} + +############################################################################## + + # These next few lines are legal in both Perl and nroff. + +.00 ; # finish .ig + +'di \" finish diversion--previous line must be blank +.nr nl 0-1 \" fake up transition to first page again +.nr % 0 \" start at page 1 +'; __END__ ############# From here on it's a standard manual page ############ +.so /usr/local/man/man1/texi2html.1 diff --git a/readline-6.2/doc/texinfo.tex b/readline-6.2/doc/texinfo.tex new file mode 100644 index 0000000..03c2998 --- /dev/null +++ b/readline-6.2/doc/texinfo.tex @@ -0,0 +1,9250 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2009-01-18.17} +% +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009 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 3 of the +% License, 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 program. If not, see <http://www.gnu.org/licenses/>. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [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]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros 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\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active +\global\let\ptexquoteright'}% Math-mode def from plain.tex. +\let\ptexraggedright=\raggedright + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% 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 % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% 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} + +% @| 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 + }% + }% +} + +% 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. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\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\relax \unvbox#1\relax +\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{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % 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. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % 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 \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% 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\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @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 @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% 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\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @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. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % 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 +} +% +% The \vtop 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. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% 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 + +% Old definition--didn't work. +%\parseargdef\need{\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\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\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 + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @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. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\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{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @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{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + % k sets the color for filling (usual text, etc.); + % K sets the color for stroking (thin rules, e.g., normal _'s). + \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + % non-pdf mode + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold. Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% 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} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% 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, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps + +% 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} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% 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 except +% in the main text, 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 because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\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 + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rmisbold #1}} +\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 + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \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 + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \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 + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% --karl, 24jan03. + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + + +\message{markup,} + +% 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 } + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \csname markup#1true\endcsname + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} + +\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +\let\markupsetuplqsamp \markupsetnoligaturesquoteleft +\let\markupsetuplqkbd \markupsetnoligaturesquoteleft + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +%% 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 + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% @cite is like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @b, explicit bold. Also @strong. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% 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 = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% definition of @key that produces a lozenge. Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\font\keysy=cmsy9 +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +% \vbox{\hrule\kern-0.4pt +% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +% \kern-0.4pt\hrule}% +% \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge. If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle. But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% + \nohyphenation + \ifmonospace\else\tt\fi + #1}\null} + +% ctrl is no longer a Texinfo command. +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @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 + \plainfrenchspacing + #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 + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct'. +\kbdinputstyle distinct + +\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{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% 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} + +% @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} + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + + +\message{glyphs,} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\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 \reducedsf error\kern-1.5pt} +% +\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} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Hacks for glyphs from the EC fonts similar to \euro. We don't +% use \let for the aliases, because sometimes we redefine the original +% macro, and the alias should reflect the redefinition. +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +\def\ecfont{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % 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 + \let\page = \oldpage + \page + \null + }% +} + +\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 + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rmisbold #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rmisbold \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on 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\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @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 +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(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, @ftable, 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\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % 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. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \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. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. + \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \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'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % 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 \doitemize, 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 + \doitemize{#1.}\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} + + +% @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. + +% 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 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. +% +\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 + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \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 + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% 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 + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we again encounter the problem the 1sp was intended to solve. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % 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 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \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 the 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. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \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 + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% 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. +\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{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @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. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \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{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @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. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \relax + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% 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}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\L + \definedummyword\OE + \definedummyword\O + \definedummyword\aa + \definedummyword\ae + \definedummyword\l + \definedummyword\oe + \definedummyword\o + \definedummyword\ss + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ogonek + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% 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. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \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. + \putwordIndexNonexistent + \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 + \putwordIndexIsEmpty + \else + % 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. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \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 + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % 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. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \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. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\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 + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \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 = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \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 in one place. + % + % 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 +} + +% The double-column output routine for all double-column pages except +% the last. +% +\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@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \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@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\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} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@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 + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % 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 <toks register>. (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% 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. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\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{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% 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} + +%%% 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} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \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 + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rmisbold + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #1\hfill}}\bigskip \par\nobreak +} +\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 {\rmisbold #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rmisbold + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Go into vertical mode. Usually we'll already be there, but we + % don't want the following whatsit to end up in a preceding paragraph + % if the document didn't happen to have a blank line. + \par + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\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\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% 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, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% 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\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% 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} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @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. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode`\`=\other + \catcode`\'=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (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} + +% 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{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\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 + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \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 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\newdimen\nonfillparindent +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + % Turn off paragraph indentation but redefine \indent to emulate + % the normal \indent. + \nonfillparindent=\parindent + \parindent = 0pt + \let\indent\nonfillindent + % + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\def\quotationstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +\envdef\quotation{% + \setnormaldispenv + \quotationstart +} + +\envdef\smallquotation{% + \setsmalldispenv + \quotationstart +} +\let\Esmallquotation = \Equotation + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} +% If we want to allow any <char> as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'<char>#1<char>'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\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 = ) + +% 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. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% <parameter list> is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. 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 + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \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\printedrefname{\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\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. + \getfilename{#4}% + % + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % 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{} ``\printedrefname'' \putwordin{} \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 + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\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{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \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 % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including 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 + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \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}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% 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. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % 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. + \hsize=\pagewidth + \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 + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\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 + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. On the other hand, if + % it's at the top level, we don't want the normal paragraph indentation. + \noindent + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \medskip \fi % space after the standalone image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +\endgroup} +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\def\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 +} +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\guillemetleft} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\guilletright} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\ogonek{A}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\ogonek{a}} + \gdef^^b2{\ogonek{ }} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\ogonek{E}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\ogonek{e}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0104}{\ogonek{A}} + \DeclareUnicodeCharacter{0105}{\ogonek{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\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 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, 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. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 + +% 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 +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), 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\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\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\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% 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} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces +} + +% 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 turn back 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 +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/readline-6.2/doc/version.texi b/readline-6.2/doc/version.texi new file mode 100644 index 0000000..3ee1c10 --- /dev/null +++ b/readline-6.2/doc/version.texi @@ -0,0 +1,10 @@ +@ignore +Copyright (C) 1988-2011 Free Software Foundation, Inc. +@end ignore + +@set EDITION 6.2 +@set VERSION 6.2 +@set UPDATED September 6 2010 +@set UPDATED-MONTH September 2010 + +@set LASTCHANGE Mon Sep 6 22:07:10 EDT 2010 |